summaryrefslogtreecommitdiffstats
path: root/parser.y
diff options
context:
space:
mode:
authorStephen Dolan <mu@netsoc.tcd.ie>2012-11-26 00:39:01 +0000
committerStephen Dolan <mu@netsoc.tcd.ie>2012-11-26 00:39:01 +0000
commit3e3fe5195947a0af711959e2dedc9c84a697c5fb (patch)
tree99877aeed9644c4a4c25ff1ef187d52f0947e16f /parser.y
parent924aeda5043d76296c651d20025881a60161b7d3 (diff)
Clean up function creation API and epilogue generation.
Diffstat (limited to 'parser.y')
-rw-r--r--parser.y11
1 files changed, 4 insertions, 7 deletions
diff --git a/parser.y b/parser.y
index 73943c38..e8cbf6d8 100644
--- a/parser.y
+++ b/parser.y
@@ -305,14 +305,13 @@ QQSTRING_START QQString QQSTRING_END {
FuncDef:
"def" IDENT ':' Exp ';' {
- block body = block_join($4, gen_op_simple(RET));
- $$ = gen_op_block_defn_rec(CLOSURE_CREATE, jv_string_value($2), body);
+ $$ = gen_function(jv_string_value($2), $4);
jv_free($2);
} |
"def" IDENT '(' IDENT ')' ':' Exp ';' {
- block body = block_bind(gen_op_block_unbound(CLOSURE_PARAM, jv_string_value($4)), block_join($7, gen_op_simple(RET)), OP_IS_CALL_PSEUDO);
- $$ = gen_op_block_defn_rec(CLOSURE_CREATE, jv_string_value($2), body);
+ block body = block_bind(gen_op_block_unbound(CLOSURE_PARAM, jv_string_value($4)), $7, OP_IS_CALL_PSEUDO);
+ $$ = gen_function(jv_string_value($2), body);
jv_free($2);
jv_free($4);
}
@@ -393,9 +392,7 @@ IDENT {
IDENT '(' Exp ')' {
$$ = gen_op_call(CALL_1_1,
block_join(gen_op_block_unbound(CLOSURE_REF, jv_string_value($1)),
- block_bind(gen_op_block_defn(CLOSURE_CREATE,
- "lambda",
- block_join($3, gen_op_simple(RET))),
+ block_bind(gen_function("@lambda", $3),
gen_noop(), OP_IS_CALL_PSEUDO)));
$$ = gen_location(@1, $$);
jv_free($1);