summaryrefslogtreecommitdiffstats
path: root/parser.y
diff options
context:
space:
mode:
authorNicolas Williams <nico@cryptonector.com>2014-08-08 18:00:47 -0500
committerNicolas Williams <nico@cryptonector.com>2014-08-08 19:16:01 -0500
commit32c08d48f32162db1f1b6f3daaecf8f24ed85368 (patch)
tree6c3b10ec4758c86d8a0c4aa752c4a66879b33bf0 /parser.y
parentfc52e78ed407247c0ce22a233647e52d2aa2c4e8 (diff)
Add `def f($arg):` syntax (fix #524)
Diffstat (limited to 'parser.y')
-rw-r--r--parser.y86
1 files changed, 16 insertions, 70 deletions
diff --git a/parser.y b/parser.y
index 7117b4ca..1246483d 100644
--- a/parser.y
+++ b/parser.y
@@ -102,7 +102,7 @@ struct lexer_param;
%precedence "catch"
-%type <blk> Exp Term MkDict MkDictPair ExpD ElseBody QQString FuncDef FuncDefs String Import Imports
+%type <blk> Exp Term MkDict MkDictPair ExpD ElseBody QQString FuncDef FuncDefs String Import Imports Param Params
%{
#include "lexer.h"
struct lexer_param {
@@ -471,82 +471,28 @@ FuncDef:
jv_free($2);
} |
-"def" IDENT '(' IDENT ')' ':' Exp ';' {
- $$ = gen_function(jv_string_value($2),
- gen_param(jv_string_value($4)),
- $7);
+"def" IDENT '(' Params ')' ':' Exp ';' {
+ $$ = gen_function(jv_string_value($2), $4, $7);
jv_free($2);
- jv_free($4);
-} |
+}
-"def" IDENT '(' IDENT ';' IDENT ')' ':' Exp ';' {
- $$ = gen_function(jv_string_value($2),
- BLOCK(gen_param(jv_string_value($4)),
- gen_param(jv_string_value($6))),
- $9);
- jv_free($2);
- jv_free($4);
- jv_free($6);
+Params:
+Param {
+ $$ = $1;
} |
+Params ';' Param {
+ $$ = BLOCK($1, $3);
+}
-"def" IDENT '(' IDENT ';' IDENT ';' IDENT ')' ':' Exp ';' {
- $$ = gen_function(jv_string_value($2),
- BLOCK(gen_param(jv_string_value($4)),
- gen_param(jv_string_value($6)),
- gen_param(jv_string_value($8))),
- $11);
+Param:
+'$' IDENT {
+ $$ = gen_param_regular(jv_string_value($2));
jv_free($2);
- jv_free($4);
- jv_free($6);
- jv_free($8);
} |
-"def" IDENT '(' IDENT ';' IDENT ';' IDENT ';' IDENT ')' ':' Exp ';' {
- $$ = gen_function(jv_string_value($2),
- BLOCK(gen_param(jv_string_value($4)),
- gen_param(jv_string_value($6)),
- gen_param(jv_string_value($8)),
- gen_param(jv_string_value($10))),
- $13);
- jv_free($2);
- jv_free($4);
- jv_free($6);
- jv_free($8);
- jv_free($10);
-} |
-
-"def" IDENT '(' IDENT ';' IDENT ';' IDENT ';' IDENT ';' IDENT ')' ':' Exp ';' {
- $$ = gen_function(jv_string_value($2),
- BLOCK(gen_param(jv_string_value($4)),
- gen_param(jv_string_value($6)),
- gen_param(jv_string_value($8)),
- gen_param(jv_string_value($10)),
- gen_param(jv_string_value($12))),
- $15);
- jv_free($2);
- jv_free($4);
- jv_free($6);
- jv_free($8);
- jv_free($10);
- jv_free($12);
-} |
-
-"def" IDENT '(' IDENT ';' IDENT ';' IDENT ';' IDENT ';' IDENT ';' IDENT ')' ':' Exp ';' {
- $$ = gen_function(jv_string_value($2),
- BLOCK(gen_param(jv_string_value($4)),
- gen_param(jv_string_value($6)),
- gen_param(jv_string_value($8)),
- gen_param(jv_string_value($10)),
- gen_param(jv_string_value($12)),
- gen_param(jv_string_value($14))),
- $17);
- jv_free($2);
- jv_free($4);
- jv_free($6);
- jv_free($8);
- jv_free($10);
- jv_free($12);
- jv_free($14);
+IDENT {
+ $$ = gen_param(jv_string_value($1));
+ jv_free($1);
}