int scheme_init(Scheme *sc) { init_constants(); operators = my_g_hash_table_new(my_g_str_hash, my_g_str_equal); init_core_operators(operators); //init_system_operators(operators); //init_command_operators(operators); sc->lastCellSeg = -1; sc->freeCell = &g_nil; sc->freeCellCount = 0; alloc_cellseg(sc, 3); //sc->outPort = port_from_file(sc, stdout, PORT_OUTPUT); //sc->inPort = port_from_file(sc, stdin, PORT_INPUT); sc->code = &g_nil; sc->callStack = &g_nil; sc->objectList = oblist_initial_value(sc); /* init global_env */ new_frame_in_env(sc, &g_nil); sc->globalEnv = sc->env; add_syntax_symbol(sc, "lambda"); add_syntax_symbol(sc, "quote"); add_syntax_symbol(sc, "define"); add_syntax_symbol(sc, "if"); add_syntax_symbol(sc, "begin"); add_syntax_symbol(sc, "set!"); add_syntax_symbol(sc, "let"); add_syntax_symbol(sc, "let*"); add_syntax_symbol(sc, "letrec"); add_syntax_symbol(sc, "cond"); add_syntax_symbol(sc, "delay"); add_syntax_symbol(sc, "and"); add_syntax_symbol(sc, "or"); add_syntax_symbol(sc, "cons-stream"); add_syntax_symbol(sc, "macro"); add_syntax_symbol(sc, "case"); /* initialization of global cell*s to special symbols */ sc->sym_lambda = make_symbol(sc, "lambda"); sc->sym_quote = make_symbol(sc, "quote"); sc->sym_feed_to = make_symbol(sc, "=>"); sc->sym_colon_hook = make_symbol(sc, "*colon-hook*"); sc->sym_error_hook = make_symbol(sc, "*error-hook*"); sc->sym_sharp_hook = make_symbol(sc, "*sharp-hook*"); sc->sym_compile_hook = make_symbol(sc, "*compile-hook*"); my_g_hash_table_foreach(operators, (MyGHFunc)iterator, sc); init_math_constants(sc); // init_system_constants(sc); return TRUE; }
pointer get_cell(pointer car, pointer cdr) { pointer x = alloc_cellseg(1); return x; }