Files
numscript/internal/interpreter/args_parser.go
Alessandro ScandoneandGitHub 58dbd73a15 Prepare for ledger integration (#10)
Refactored modules and exposed a public API so that it can be consumed by the ledger
2024-10-03 19:06:10 +02:00

44 lines
821 B
Go

package interpreter
import "github.com/formancehq/numscript/internal/parser"
type argsParser struct {
parsedArgsCount int
args []Value
err InterpreterError
}
func NewArgsParser(args []Value) *argsParser {
return &argsParser{
args: args,
}
}
func parseArg[T any](p *argsParser, r parser.Range, expect func(Value, parser.Range) (*T, InterpreterError)) *T {
index := p.parsedArgsCount
p.parsedArgsCount++
if p.err != nil || index >= len(p.args) {
return nil
}
arg := p.args[index]
parsed, err := expect(arg, r)
if err != nil {
p.err = err
return nil
}
return parsed
}
func (p *argsParser) parse() InterpreterError {
if len(p.args) != p.parsedArgsCount {
p.err = BadArityErr{
ExpectedArity: p.parsedArgsCount,
GivenArguments: len(p.args),
}
}
return p.err
}