Scheme_Object *scheme_make_pair(Scheme_Object *car, Scheme_Object *cdr) { Scheme_Object *cons; cons = scheme_alloc_object(); cons->type = scheme_pair_type; SCHEME_CAR(cons) = car; SCHEME_CDR(cons) = cdr; return cons; }
Scheme_Object *scheme_make_immutable_pair(Scheme_Object *car, Scheme_Object *cdr) { Scheme_Object *cons; cons = scheme_alloc_object(); cons->type = scheme_pair_type; SCHEME_CAR(cons) = car; SCHEME_CDR(cons) = cdr; SCHEME_SET_PAIR_IMMUTABLE(cons); return cons; }
Scheme_Object *scheme_make_cptr(void *cptr, Scheme_Object *typetag) { Scheme_Object *o; o = scheme_alloc_object(); o->type = scheme_cpointer_type; SCHEME_PTR1_VAL(o) = cptr; SCHEME_PTR2_VAL(o) = (void *)typetag; return o; }
Scheme_Object *read_boxenv(Scheme_Object *o) { Scheme_Object *data; if (!SCHEME_PAIRP(o)) return NULL; data = scheme_alloc_object(); data->type = scheme_boxenv_type; SCHEME_PTR1_VAL(data) = SCHEME_CAR(o); SCHEME_PTR2_VAL(data) = SCHEME_CDR(o); return data; }
static Scheme_Object *bangboxenv_jit(Scheme_Object *data) { Scheme_Object *orig, *naya, *new_data; orig = SCHEME_PTR2_VAL(data); naya = jit_expr(orig); if (SAME_OBJ(naya, orig)) return data; else { new_data = scheme_alloc_object(); new_data->type = scheme_boxenv_type; SCHEME_PTR1_VAL(new_data) = SCHEME_PTR1_VAL(data); SCHEME_PTR2_VAL(new_data) = naya; return new_data; } }
static Scheme_Object *apply_values_jit(Scheme_Object *data) { Scheme_Object *f, *e; f = jit_expr(SCHEME_PTR1_VAL(data)); e = jit_expr(SCHEME_PTR2_VAL(data)); if (SAME_OBJ(f, SCHEME_PTR1_VAL(data)) && SAME_OBJ(e, SCHEME_PTR2_VAL(data))) return data; else { data = scheme_alloc_object(); data->type = scheme_apply_values_type; SCHEME_PTR1_VAL(data) = f; SCHEME_PTR2_VAL(data) = e; return data; } }