diff --git a/src/asl/parser.go b/src/asl/parser.go index e17bbf6..6aab297 100644 --- a/src/asl/parser.go +++ b/src/asl/parser.go @@ -1,7 +1,7 @@ package asl import ( - "strconv" + ) const TAB = " " @@ -217,19 +217,29 @@ func parseFunctionParameter() { if accept("{") { return } - - i := int64(0) + + appendOut("params [", false) for !accept(")") { name := get().token next() - appendOut(name+" = _this select "+strconv.FormatInt(i, 10)+";", true) - i++ + + if accept("=") { + next() + value := get().token + next() + appendOut("[\""+name+"\","+value+"]", false) + } else { + appendOut("\""+name+"\"", false) + } if !accept(")") { expect(",") + appendOut(",", false) } } + + appendOut("];", true) } func parseReturn() { diff --git a/src/asl/parser_test.go b/src/asl/parser_test.go index f84a9dc..5657977 100644 --- a/src/asl/parser_test.go +++ b/src/asl/parser_test.go @@ -57,7 +57,7 @@ func TestParserSwitch(t *testing.T) { func TestParserFunction(t *testing.T) { got := getCompiled(t, "test/tokenizer_func.asl") - want := "TestFunction = {\r\nparam0 = _this select 0;\r\nparam1 = _this select 1;\r\nreturn true;\r\n};\r\n" + want := "TestFunction = {\r\nparams [\"param0\",\"param1\"];\r\nreturn true;\r\n};\r\n" equal(t, got, want) } @@ -85,7 +85,7 @@ func TestParserExpression2(t *testing.T) { func TestParserFunctionCall(t *testing.T) { got := getCompiled(t, "test/parser_func_call.asl") - want := "myFunc = {\r\na = _this select 0;\r\nb = _this select 1;\r\nreturn a>b;\r\n};\r\n[1+3/4, 2-(66*22)/3-((123))] call myFunc;\r\n" + want := "myFunc = {\r\nparams [\"a\",\"b\"];\r\nreturn a>b;\r\n};\r\n[1+3/4, 2-(66*22)/3-((123))] call myFunc;\r\n" equal(t, got, want) } @@ -139,6 +139,13 @@ func TestParserArray(t *testing.T) { equal(t, got, want) } +func TestParserFunctionParams(t *testing.T) { + got := getCompiled(t, "test/parser_func_params.asl") + want := "myFunc = {\r\nparams [[\"a\",1],[\"b\",2]];\r\nreturn a+b;\r\n};\r\n" + + equal(t, got, want) +} + func getCompiled(t *testing.T, file string) string { code, err := ioutil.ReadFile(file) diff --git a/test/parser_func_params.asl b/test/parser_func_params.asl new file mode 100644 index 0000000..352b44a --- /dev/null +++ b/test/parser_func_params.asl @@ -0,0 +1,3 @@ +func myFunc(a = 1, b = 2) { + return a+b; +}