From 6afd01da2ac11a22a6382018abde0aacbdd21362 Mon Sep 17 00:00:00 2001 From: Aidan Date: Sat, 22 Aug 2020 12:37:06 -0700 Subject: [PATCH] syncing unfinished work with dev --- ast/func_table.go | 15 ++++++++++++--- stdlib/stdlib.go | 6 ++---- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/ast/func_table.go b/ast/func_table.go index 2121874..0d8fa12 100644 --- a/ast/func_table.go +++ b/ast/func_table.go @@ -18,6 +18,7 @@ package ast import ( + "fmt" "gitlab.com/whom/shs/log" ) @@ -64,7 +65,7 @@ func (f Function) ParseFunction(args *Token) bool { total := len(f.Args) for iter := args; iter != nil; iter = iter.Next { total -= 1 - if total <= 0 { + if total < 0 { log.Log(log.ERR, "too many arguments", "ftable") @@ -74,12 +75,19 @@ func (f Function) ParseFunction(args *Token) bool { if iter.Tag != f.Args[len(f.Args) - total] { log.Log(log.ERR, "argument is " + GetTagAsStr(iter.Tag) + - "should be " + GetTagAsStr(f.Args[len(f.Args) - total]), + " should be " + GetTagAsStr(f.Args[len(f.Args) - total]), "ftable") return false } } + if total > 0 { + log.Log(log.ERR, + "not enough args given", + "ftable") + return false + } + return true } @@ -127,13 +135,14 @@ func (f Function) CallFunction(args *Token, vt VarTable, ft FuncTable) *Token { passes = f.ParseFunction(args) } - if passes { + if !passes { log.Log(log.ERR, "Couldnt call " + f.Name, "eval") return nil } + fmt.Printf("ARGS: %+v", *args) f.TimesCalled += 1 return f.Function(args, vt, ft) } diff --git a/stdlib/stdlib.go b/stdlib/stdlib.go index be21deb..d76f7e6 100644 --- a/stdlib/stdlib.go +++ b/stdlib/stdlib.go @@ -102,10 +102,8 @@ func GenFuncTable() ast.FuncTable { Function: Export, Name: "export", EvalLazy: true, - Args: []ast.Token_t{ - ast.STRING, - ast.LIST, - }, + ArgLazy: true, + NumArgs: 2, }, "input": &ast.Function{