mirror of
https://github.com/CatalaLang/catala.git
synced 2024-09-19 16:28:12 +03:00
Add syntax for calling multi-argument functions
* temporary and undocumented while waiting for discussion an approval * previous patches already allowed definition (at toplevel) but there was no syntax for calls * no syntax for multi-args _local_ functions yet
This commit is contained in:
parent
03f31b4923
commit
6f1ac5837d
@ -398,7 +398,8 @@ let rec translate_expr
|
||||
Errors.raise_spanned_error pos "Qualified paths are not supported yet"
|
||||
in
|
||||
Expr.edstructaccess e (Marked.unmark x) str emark)
|
||||
| FunCall (f, arg) -> Expr.eapp (rec_helper f) [rec_helper arg] emark
|
||||
| FunCall (f, args) ->
|
||||
Expr.eapp (rec_helper f) (List.map rec_helper args) emark
|
||||
| ScopeCall ((([], sc_name), _), fields) ->
|
||||
if scope = None then
|
||||
Errors.raise_spanned_error pos
|
||||
|
@ -433,7 +433,7 @@ and naked_expression =
|
||||
| CollectionOp of collection_op * expression
|
||||
| MemCollection of expression * expression
|
||||
| TestMatchCase of expression * match_case_pattern Marked.pos
|
||||
| FunCall of expression * expression
|
||||
| FunCall of expression * expression list
|
||||
| ScopeCall of
|
||||
(path * uident Marked.pos) Marked.pos
|
||||
* (lident Marked.pos * expression) list
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -38,6 +38,7 @@ end>
|
||||
%left PLUS MINUS PLUSPLUS
|
||||
%left MULT DIV
|
||||
%right apply OF CONTAINS FOR SUCH WITH
|
||||
%right COMMA
|
||||
%right unop_expr
|
||||
%right CONTENT
|
||||
%nonassoc UIDENT
|
||||
@ -181,9 +182,9 @@ let naked_expression ==
|
||||
| e = struct_or_enum_inject ; <>
|
||||
| e1 = expression ;
|
||||
OF ;
|
||||
e2 = expression ; {
|
||||
FunCall (e1, e2)
|
||||
} %prec apply
|
||||
args = funcall_args ; {
|
||||
FunCall (e1, args)
|
||||
}
|
||||
| OUTPUT ; OF ;
|
||||
c = addpos(quident) ;
|
||||
fields = option(scope_call_args) ; {
|
||||
@ -322,6 +323,10 @@ let scope_call_args ==
|
||||
fields
|
||||
}
|
||||
|
||||
let funcall_args :=
|
||||
| e = expression; { [e] } %prec apply
|
||||
| e = expression; COMMA; el = funcall_args ; { e :: el }
|
||||
|
||||
let minmax ==
|
||||
| MAXIMUM ; { true }
|
||||
| MINIMUM ; { false }
|
||||
|
@ -56,19 +56,12 @@ declaration glob4 content decimal
|
||||
declaration scope S3:
|
||||
output a content decimal
|
||||
|
||||
#scope S3:
|
||||
# definition a equals 50 + glob3 of ($44, 55.)
|
||||
# TODO: no syntax yet
|
||||
scope S3:
|
||||
definition a equals 50. + glob4 of $44, 55.
|
||||
```
|
||||
|
||||
```catala-test-inline
|
||||
$ catala Interpret -s S3
|
||||
[ERROR] This variable evaluated to an empty term (no rule that defined it applied in this situation)
|
||||
|
||||
┌─⯈ tests/test_name_resolution/good/toplevel_defs.catala_en:57.9-10:
|
||||
└──┐
|
||||
57 │ output a content decimal
|
||||
│ ‾
|
||||
└─ Test function def with two args
|
||||
#return code 255#
|
||||
[RESULT] Computation successful! Results:
|
||||
[RESULT] a = 2480.
|
||||
```
|
||||
|
Loading…
Reference in New Issue
Block a user