mirror of
https://github.com/hanzoai/numscript.git
synced 2026-10-30 18:26:57 +00:00
Refactored modules and exposed a public API so that it can be consumed by the ledger
44 lines
821 B
Go
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
|
|
}
|