Esempio n. 1
0
object *lookup_variable_value(object *var, object *env) {
    object *frame;
    object *vars;
    object *vals;
    if (debug)
    {
        fprintf(stderr, "entering lookup_variable_value searching for %s\n", var->data.symbol.value);
    }
    while (!is_the_empty_list(env)) {
        frame = first_frame(env);
        vars  = frame_variables(frame);
        vals  = frame_values(frame);
        if (debug)
        {
            fprintf(stderr, "1 searching symbol %s\n", var->data.symbol.value);
            fprintf(stderr, "1 vars %p\n", vars);
        }
        while (!is_the_empty_list(vars)) {
            if (is_pair(vars)) {
                if (var == car(vars)) {
                    if (debug)
                    {
                        fprintf(stderr, "vals---\n");
                        write(stdout, is_pair(vals) ? car(vals) : the_empty_list);
                        fflush(stdout);
                        fprintf(stderr, "\nend---\n");

                    }
                    return is_pair(vals) ? car(vals) : the_empty_list;
                }
            }
            else if(is_symbol(vars)) {
                if (debug)
                {
                    fprintf(stderr, "2 searched symbol %s\n", var->data.symbol.value);
                    fprintf(stderr, "last cdr symbol %s\n", vars->data.symbol.value);
                }
                if (var == vars) {
                    if (debug)
                    {
                        fprintf(stderr, "vals---\n");
                        write(stdout, vals);
                        fflush(stdout);
                        fprintf(stderr, "\nend---\n");
                    }
                    return vals;
                }
                else
                {
                  break;
                }
            }
            vars = cdr(vars);
            vals = cdr(vals);
        }
        env = enclosing_environment(env);
    }
    fprintf(stderr, "unbound variable, %s\n", var->data.symbol.value);
    exit(1);
}
Esempio n. 2
0
static pSlipObject lookup_variable_value(pSlip gd, pSlipObject var, pSlipEnvironment env)
{
	pSlipValue v;

	do
	{
		v = ScanForVar(var, env);
		if (v != NULL)
			return v->val;

		env = enclosing_environment(env);
	}while (env != NULL);

	throw_error(gd, "unbound variable %s for lookup\n", (char*)var->data.symbol.value);
	return NULL;
}
Esempio n. 3
0
static void set_variable_value(pSlip gd, pSlipObject var, pSlipObject val, pSlipEnvironment env)
{
	pSlipValue v;

	do
	{
		v = ScanForVar(var, env);
		if (v != NULL)
		{
			v->val = val;
			return;
		}

		env = enclosing_environment(env);
	}while (env != NULL);

	throw_error(gd, "unbound variable %s for assignment\n", (char*)var->data.symbol.value);
}
Esempio n. 4
0
void set_variable_value(item unev, item val, item env){
	item vars, vals;
	while (!eq(env, the_empty_environment())){
		vars = frame_variables(first_frame(env));
		vals = frame_value(first_frame(env));
		while (1){
			if (is_null(vars)){
				env = enclosing_environment(env);
				break;
			}
			else if (eq(unev, car(vars))){
				set_car(vals, val);
			}
			else {
				vars = cdr(vars);
				vals = cdr(vals);
			}
		}
	}
}
Esempio n. 5
0
item lookup_variable_value(item exp, item env){
	item vars, vals;
	while (!eq(env, the_empty_environment())){
		vars = frame_variables(first_frame(env));
		vals = frame_value(first_frame(env));
		while (1){
			if (is_null(vars)){
				env = enclosing_environment(env);
				break;
			}
			else if (eq(exp, car(vars))){
				return car(vals);
			}
			else {
				vars = cdr(vars);
				vals = cdr(vals);
			}
		}
	}
	fprintf(stderr, "Unbound variable");
	exit(1);
}
Esempio n. 6
0
void set_variable_value(object *var, object *val, object *env) {
    object *frame;
    object *vars;
    object *vals;
    object *prevals;

    while (!is_the_empty_list(env)) {
        frame = first_frame(env);
        vars  = frame_variables(frame);
        vals  = frame_values(frame);

        if (debug)
        {
            printf("\n---env\n");   write(stdout, env);
            printf("\n---frame\n"); write(stdout, frame);
            printf("\n---vars\n");  write(stdout, vars);
            printf("\n---vals\n");  write(stdout, vals);
            printf("\n---\n");
        }

        while (!is_the_empty_list(vars)) {
            /* if (var == car(vars)) { */
            /*     set_car(vals, val); */
            /*     return; */
            /* } */
            if (is_pair(vars)) {
                // printf("ispair\n");

                if (var == car(vars)) {
                    if (debug)
                    {
                        printf("found match\n");
                        printf("\n---vals\n");
                        write(stdout, vals);
                    }
                    if (is_pair(vals))
                    {
                        set_car(vals, val);
                        return;
                    }
                    else        /* TODO */
                    {
                        set_cdr(prevals, cons(val, the_empty_list));
                        return;
                    }
                }
            }
            else if(is_symbol(vars)) {
                if (debug)
                {
                    printf("symbol\n");
                    fprintf(stderr, "2 searched symbol %s\n", var->data.symbol.value);
                    fprintf(stderr, "last cdr symbol %s\n", vars->data.symbol.value);
                }
                if (var == vars) {
                    if (debug)
                    {
                        printf("\n---vals\n");  write(stdout, vals);
                        printf("\n---prevals\n");  write(stdout, prevals);
                    }
                    // assert(0);
                    set_cdr(prevals, val);
                    // return vals;
                    return;
                }
                else
                {
                    if (debug)
                    {
                        printf("\nx yes\n");
                    }
                    // assert(0);
                    break;
                }
            }

            vars = cdr(vars);
            prevals = vals;
            vals = cdr(vals);
        }
        env = enclosing_environment(env);
    }
    fprintf(stderr, "unbound variable, %s\n", var->data.symbol.value);
    exit(1);
}