aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChimrod <>2024-06-20 20:25:19 +0200
committerChimrod <>2024-06-20 20:25:19 +0200
commit976f80ed226e53625cd807539b9336f52f6eb091 (patch)
treedc0d199396c4f5571dffd83e693de2979046d4db
parent70c94d9465496340b34a85d0d6c7fc1fa5fdf949 (diff)
Removed the need for () after rnd
-rw-r--r--lib/qparser/idents.ml2
-rw-r--r--lib/qparser/qsp_expression.mly4
-rw-r--r--lib/qparser/tokens.mly1
-rw-r--r--test/dup_cases.ml7
-rw-r--r--test/syntax.ml6
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;