Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
pointer get_cell(pointer car, pointer cdr)
{
        pointer x = alloc_cellseg(1);
        return x;
}