Completed lambda implementation of functions.

Hooray! 🎉
This commit is contained in:
2025-08-26 16:25:20 -04:00
parent 7b648c4bd7
commit bfce18ab81

View File

@@ -129,7 +129,12 @@ exp:
// Number.
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 {
size_t argc = $3->ln;
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.
| WORD GROUPS arg GROUPE exp {
size_t parc = $3->ln;
@@ -191,11 +208,6 @@ exp:
$$ = 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 {
AST** argv = calloc(2, sizeof(AST*));
argv[0] = $1;