Completed lambda implementation of functions.
Hooray! 🎉
This commit is contained in:
@@ -129,7 +129,12 @@ exp:
|
|||||||
// Number.
|
// Number.
|
||||||
NUM { $$ = ast_init(AST_TYPE_NUM, ast_num_data_init($1)); }
|
NUM { $$ = ast_init(AST_TYPE_NUM, ast_num_data_init($1)); }
|
||||||
|
|
||||||
// Call.
|
// Variable reference.
|
||||||
|
| WORD {
|
||||||
|
$$ = ast_init(AST_TYPE_VREF, ast_vref_data_init($1));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Call (general form).
|
||||||
| exp GROUPS arg GROUPE {
|
| exp GROUPS arg GROUPE {
|
||||||
size_t argc = $3->ln;
|
size_t argc = $3->ln;
|
||||||
AST** argv = $3->buf;
|
AST** argv = $3->buf;
|
||||||
@@ -141,6 +146,18 @@ exp:
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Call (convenient form).
|
||||||
|
| WORD GROUPS arg GROUPE {
|
||||||
|
size_t argc = $3->ln;
|
||||||
|
AST** argv = $3->buf;
|
||||||
|
argarr_destroypsv($3);
|
||||||
|
$$ = ast_init(AST_TYPE_CALL, ast_call_data_init(
|
||||||
|
argc,
|
||||||
|
argv,
|
||||||
|
ast_init(AST_TYPE_VREF, ast_vref_data_init($1))
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
// Function definitions. Convert to VDef of Lambda.
|
// Function definitions. Convert to VDef of Lambda.
|
||||||
| WORD GROUPS arg GROUPE exp {
|
| WORD GROUPS arg GROUPE exp {
|
||||||
size_t parc = $3->ln;
|
size_t parc = $3->ln;
|
||||||
@@ -191,11 +208,6 @@ exp:
|
|||||||
$$ = ast_init(AST_TYPE_VDEF, ast_vdef_data_init($1, $3));
|
$$ = ast_init(AST_TYPE_VDEF, ast_vdef_data_init($1, $3));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Variable reference.
|
|
||||||
| WORD {
|
|
||||||
$$ = ast_init(AST_TYPE_VREF, ast_vref_data_init($1));
|
|
||||||
}
|
|
||||||
|
|
||||||
| exp ADD exp {
|
| exp ADD exp {
|
||||||
AST** argv = calloc(2, sizeof(AST*));
|
AST** argv = calloc(2, sizeof(AST*));
|
||||||
argv[0] = $1;
|
argv[0] = $1;
|
||||||
|
Reference in New Issue
Block a user