// set up default entries and initialise variables void corn_init() { // set "constants" INBUF_START = (address)(memory_start + sizeof(struct sys_const) + sizeof(struct sys_var)); INBUF_END = INBUF_START + INBUF_BYTES; DSTACK_START = INBUF_END; DSTACK_END = DSTACK_START + DSTACK_WORDS * WORDSIZE; RSTACK_START = DSTACK_END; RSTACK_END = RSTACK_START + RSTACK_WORDS * WORDSIZE; SCRATCH_START = RSTACK_END; SCRATCH_END = SCRATCH_START + SCRATCH_BYTES; POOL_START = SCRATCH_END; POOL_END = POOL_START + POOL_BYTES; // set "variables" HEAP_NEXT = POOL_START; POOL_HEAD = 0; DICT_HEAD = 0; // Add dummy entry to heap padd(INBUF_START,0); reset_working_data(); init_vars(); init_prims(); init_defs(); reset_working_data(); }
int main(int argc, char *argv[]) { char *inputs[] = { "(lambda (x) (return x))", }; init_global_variable(); init_prims(); init_primitive_opcode(); init_macros(); load_init_file(); for (int i = 0; i < sizeof(inputs) / sizeof(char *); i++) { write_raw_string(">> ", standard_out); write_raw_string(inputs[i], standard_out); write_raw_char('\n', standard_out); lisp_object_t *expr = read_object_from_string(strdup(inputs[i])); expr = compile_to_bytecode(expr); if (is_signaled(expr)) writef(standard_out, "%?\n", expr); else writef(standard_out, "=> %?\n", expr); } return 0; }