#include #include "prim.h" #include "desc.h" #include "mem.h" void __add() { } PrimEntry* add_prim(int arity, int strictness, char* name, void (*exec)()) { int nameLength = strlen(name); // before the PrimEntry there are "arity" number of SliceEntries SliceEntry* entry_base = (SliceEntry*) alloc_desc(sizeof(SliceEntry) * arity + sizeof(PrimEntry) + nameLength + 1); PrimEntry* entry = (PrimEntry*) (entry_base + arity); entry->base.type = FT_PRIM; entry->base.arity = arity; entry->strictness = strictness; entry->exec = exec; // TODO: should it be copied at all? memcpy(entry->name, name, nameLength); entry->name[nameLength] = '\0'; // generate slices. avoid function call if arity is zero if(arity>0) gen_slices(entry_base, (Desc*) entry, arity); add_desc(entry->name, (Desc*) entry); } void init_prim() { add_prim(2, 3, "add", &__add); }