int main(int argc, char **argv) { Obj *root = NULL; printf("sizeof(Obj): %d MEMORY_SIZE: %d\n", sizeof(Obj), HEAP_SIZE); memory.len = 0; memory.capa = MAX_HEAPS_SIZE; memory.heaps = malloc(sizeof(Obj*) * MAX_HEAPS_SIZE); free_list = alloc_heap(); if (DEBUG_GC) printf("MEMORY: %p + %x\n", memory, HEAP_SIZE); Nil = make_spe(TNIL); Dot = make_spe(TDOT); Cparen = make_spe(TCPAREN); True = make_spe(TTRUE); Env *env = malloc(sizeof(Env)); env->vars = Nil; env->next = NULL; define_consts(env, root); define_primitives(env, root); if (argc < 2) { do_repl(env, root); } else { eval_file(env, root, argv[1]); } return 0; }
int main(int argc, char **argv) { // Debug flags debug_gc = getEnvFlag("MINILISP_DEBUG_GC"); always_gc = getEnvFlag("MINILISP_ALWAYS_GC"); // Memory allocation memory = alloc_semispace(); // Constants and primitives Symbols = Nil; void *root = NULL; DEFINE2(env, expr); *env = make_env(root, &Nil, &Nil); define_constants(root, env); define_primitives(root, env); // The main loop printf("%s", ">"); for (;;) { *expr = read_expr(root); if (!*expr) return 0; if (*expr == Cparen) error("Stray close parenthesis"); if (*expr == Dot) error("Stray dot"); print(eval(root, env, expr)); printf("\n%s", ">"); } }
int main() { // Debug flags debug_gc = getEnvFlag("MINILISP_DEBUG_GC"); always_gc = getEnvFlag("MINILISP_ALWAYS_GC"); // Memory allocation memory = (void *)memory1; // Init constants Obj trueObj, nilObj, dotObj, cparenObj; True = &trueObj; Nil = &nilObj; Dot = &dotObj; Cparen = &cparenObj; True->type = TTRUE; Nil->type = TNIL; Dot->type = TDOT; Cparen->type = TCPAREN; // Constants and primitives Symbols = Nil; void *root = NULL; DEFINE2(env, expr); *env = make_env(root, &Nil, &Nil); define_constants(root, env); define_primitives(root, env); // The main loop for (;;) { setjmp(&jmpbuf); *expr = read_expr(root); if (!*expr) return 0; if (*expr == Cparen) error("Stray close parenthesis"); if (*expr == Dot) error("Stray dot"); print(eval(root, env, expr)); printf("\n"); } }