Implement datum support and add make for ex-5.52

This commit is contained in:
2021-06-12 10:51:50 -04:00
parent bcabdd3212
commit 15057b52d4
7 changed files with 114 additions and 41 deletions

60
shared/scm2c/datum.h Normal file
View File

@@ -0,0 +1,60 @@
enum datum_type {
datum_type_i32,
datum_type_bool,
datum_type_primitive_proc,
datum_type_compiled_proc,
};
typedef struct datum {
enum datum_type type;
int32_t value;
void* (*primitive_procedure) (void**);
void* compiled_pr;
} datum;
typedef struct procedure {
} procedure;
datum* const_int(int32_t value) {
datum* r = malloc(sizeof(datum));
if (!r) exit(-1);
r->type = datum_type_i32;
r->value = value;
}
int primitive_procedure(datum* d) {
if (d->type == datum_type_primitive_proc) {
return 1;
}
return 0;
}
datum* add(datum** args) {
size_t i = 0;
int32_t result = 0;
while (args[i] != NULL) {
if (args[i]->type != datum_type_i32) {
printf("ADD - invalid type\n");
exit(-1);
}
result += args[i]->value;
i += 1;
}
return const_int(result);
}
void* compiled_procedure_entry(void* p) {
return compiled_procedure_entry;
}
datum* lookup_variable_value(char* c, void* e) {
datum* r = malloc(sizeof(datum));
if (!r) exit(-1);
r->type = datum_type_primitive_proc;
r->primitive_procedure = (void*) &add;
return r;
}