Compare commits
2 Commits
b102a32999
...
7c08e8da4d
Author | SHA1 | Date | |
---|---|---|---|
7c08e8da4d | |||
fdf526750d |
14
src/exec.c
14
src/exec.c
@@ -70,8 +70,9 @@ AST* exec_call(AST* ast, Scope* parent) {
|
|||||||
|
|
||||||
switch (exp->type) {
|
switch (exp->type) {
|
||||||
case AST_TYPE_BIF:
|
case AST_TYPE_BIF:
|
||||||
ASTBIFData bifdata = exp->data;
|
return ((ASTBIFData) exp->data)(
|
||||||
return bifdata(calldata->argc, calldata->argv, parent);
|
calldata->argc, calldata->argv, parent
|
||||||
|
);
|
||||||
case AST_TYPE_LAMBDA:
|
case AST_TYPE_LAMBDA:
|
||||||
return exec_lambda(calldata->argc, calldata->argv, exp, parent);
|
return exec_lambda(calldata->argc, calldata->argv, exp, parent);
|
||||||
default:
|
default:
|
||||||
@@ -114,15 +115,6 @@ AST* exec_vref(AST* ast, Scope* parent) {
|
|||||||
return found;
|
return found;
|
||||||
}
|
}
|
||||||
|
|
||||||
AST* exec_fdef(AST* ast, Scope* parent) {
|
|
||||||
ast->scope = scope_init(parent);
|
|
||||||
ASTFDefData* fdef = (ASTFDefData*)ast->data;
|
|
||||||
AST* val = ast;
|
|
||||||
char* key = fdef->name;
|
|
||||||
scope_add(parent, key, val);
|
|
||||||
return fdef->body; // Function definitions return function body.
|
|
||||||
}
|
|
||||||
|
|
||||||
AST* exec_lambda(size_t argc, AST** argv, AST* exp, Scope* parent) {
|
AST* exec_lambda(size_t argc, AST** argv, AST* exp, Scope* parent) {
|
||||||
Scope* callscope = scope_init(parent);
|
Scope* callscope = scope_init(parent);
|
||||||
ASTLambdaData* lambda = (ASTLambdaData*)exp->data;
|
ASTLambdaData* lambda = (ASTLambdaData*)exp->data;
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
#define GC_H
|
#define GC_H
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
// The type a GC can refer to.
|
// The type a GC can refer to.
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
Reference in New Issue
Block a user