diff options
-rw-r--r-- | lib/qparser/idents.ml | 2 | ||||
-rw-r--r-- | lib/qparser/qsp_expression.mly | 4 | ||||
-rw-r--r-- | lib/qparser/tokens.mly | 1 | ||||
-rw-r--r-- | test/dup_cases.ml | 7 | ||||
-rw-r--r-- | test/syntax.ml | 6 |
5 files changed, 15 insertions, 5 deletions
diff --git a/lib/qparser/idents.ml b/lib/qparser/idents.ml index f96dd95..be3d76c 100644 --- a/lib/qparser/idents.ml +++ b/lib/qparser/idents.ml @@ -127,7 +127,7 @@ let _ = ("REPLACE", FUNCTION T.Replace); ("$REPLACE", FUNCTION T.Replace'); ("RGB", FUNCTION T.Rgb); - ("RND", FUNCTION T.Rnd); + ("RND", FUNCTION_NOARGS T.Rnd); ("SAVEGAME", KEYWORD T.SaveGame); ("SELACT", FUNCTION T.Selact); ("$SELACT", IDENT "$SELACT"); diff --git a/lib/qparser/qsp_expression.mly b/lib/qparser/qsp_expression.mly index 1e0988f..c6b7564 100644 --- a/lib/qparser/qsp_expression.mly +++ b/lib/qparser/qsp_expression.mly @@ -44,6 +44,10 @@ { (Analyzer.Expression.function_ $loc k arg) } + | k = FUNCTION_NOARGS + { + (Analyzer.Expression.function_ $loc k []) + } literal: | v = LITERAL { Qsp_syntax.T.Text v } | e = delimited(ENTER_EMBED, expression, LEAVE_EMBED) diff --git a/lib/qparser/tokens.mly b/lib/qparser/tokens.mly index 90e9e14..0ba5486 100644 --- a/lib/qparser/tokens.mly +++ b/lib/qparser/tokens.mly @@ -40,6 +40,7 @@ %token NO %token <Qsp_syntax.T.keywords>KEYWORD %token <Qsp_syntax.T.function_>FUNCTION +%token <Qsp_syntax.T.function_>FUNCTION_NOARGS (* (b) if the token was declared left-associative, then the conflict is resolved diff --git a/test/dup_cases.ml b/test/dup_cases.ml index 39bea23..cf1d4c1 100644 --- a/test/dup_cases.ml +++ b/test/dup_cases.ml @@ -20,11 +20,10 @@ end |} [] (** The rnd function can generate different result, this is not a warning *) -let ok_rnd () = - _test_instruction {| -if rnd(): +let ok_rnd () = _test_instruction {| +if rnd: 0 -elseif rnd(): +elseif rnd: 0 end |} [] diff --git a/test/syntax.ml b/test/syntax.ml index aa3eecb..f15c72f 100644 --- a/test/syntax.ml +++ b/test/syntax.ml @@ -707,6 +707,11 @@ let test_function2 () = [ Integer (_position, "0"); Integer (_position, "1") ] ))); ] +(** The RND function does not have parens after the name *) +let test_rnd () = + _test_instruction "rnd" + [ Tree.Ast.Expression (Tree.Ast.Function (_position, T.Rnd, [])) ] + let test_precedence4 () = _test_instruction "trim()" Ast.[ Expression (Function (_position, Trim, [])) ] @@ -934,6 +939,7 @@ let test = Alcotest.test_case "Call nl" `Quick test_nl; Alcotest.test_case "Function iif" `Quick test_function; Alcotest.test_case "Function rand" `Quick test_function2; + Alcotest.test_case "Function rnd" `Quick test_rnd; Alcotest.test_case "Precedence4" `Quick test_precedence4; Alcotest.test_case "Precedence5" `Quick test_precedence5; Alcotest.test_case "Precedence6" `Quick test_precedence6; |