Пример #1
0
static obj_t add_who_irritants(obj_t cont, obj_t values, obj_t ex)
{
    //oprintf("add_who_irritants: cont_proc = %p\n", cont_proc(cont));
    //oprintf("add_who_irritants: cont4_arg = %O\n", cont4_arg(cont));
    //oprintf("add_who_irritants: values = %O\n", values);
    assert(is_cont(cont));
    cont_proc_t proc = cont_proc(cont);
    if (proc == c_apply_proc) {
	assert(is_cont5(cont));
	obj_t op = cont5_arg1(cont);
	obj_t who_sym = procedure_is_C(op) ? procedure_name(op) : FALSE_OBJ;
	obj_t who_ex = MAKE_RECORD(who, who_sym);
	obj_t irr_ex = MAKE_RECORD(irritants, reverse_list(values));
	return MAKE_COMPOUND_CONDITION(who_ex, irr_ex, ex);
    }
    if (proc == c_eval_operator) {
	assert(is_cont4(cont));
	obj_t arg = cont4_arg(cont);
	obj_t who_ex = MAKE_RECORD(who, CAR(arg));
	obj_t irr_ex = MAKE_RECORD(irritants, CDR(arg));
	return MAKE_COMPOUND_CONDITION(who_ex, irr_ex, ex);
    }
    if (proc == c_eval) {
	assert(is_cont4(cont));
	obj_t expr = cont4_arg(cont);
	obj_t who_ex = MAKE_RECORD(who, expr);
	return MAKE_COMPOUND_CONDITION(who_ex, ex);
    }
    return ex;
}
Пример #2
0
extern obj_t core_eval_cont(volatile obj_t cont,
			    volatile obj_t values,
			    obj_t handler)
{
    eval_dyn_env = MAKE_RECORD(dyn_env, EMPTY_LIST, handler);

    if (sigsetjmp(eval_sigrestart, 1)) {
	/* On Linux, siglongjmp is 30X slower than longjmp. */
	/* push exception... */
    } else {
	switch (setjmp(eval_restart)) {

	case LT_THROWN:
	    {
		cv_t ret = push_exception(cont, values);
		cont     = ret.cv_cont;
		values   = ret.cv_values;
	    }
	    break;

	case LT_HEAP_FULL:
	    cont_root   = cont;
	    values_root = values;
	    collect_garbage();
	    cont        = cont_root;
	    values      = values_root;
	    cont_root   = make_uninitialized();
	    values_root = make_uninitialized();
	    break;

	case LT_NO_EXCEPTION:
	    register_lowex_handler(handle_lowex);
	    break;

	default:
	    assert(false);
	}
    }
    while (!is_null(cont)) {
	cv_t ret = cont_proc(cont)(cont, values);
	cont   = ret.cv_cont;
	values = ret.cv_values;
	COMMIT();
#if DEBUG_EVAL
	int n = 0;
	obj_t p;
	for (p = cont; !is_null(p); p = cont_cont(p))
	    n++;
	EVAL_LOG("values=%O cont depth=%d", values, n);
#endif
    }
    deregister_lowex_handler(handle_lowex);
    eval_dyn_env = make_uninitialized();
    EVAL_LOG("END values=%O", values);
    assert(is_null(CDR(values)));
    return CAR(values);
}
Пример #3
0
// Khush started working on this
// dealing with records and attribute values
RC createRecord(Record **record, Schema *schema) {
	int recordSize;
	Record *newRecord;

	//  Assign default record values
	newRecord = MAKE_RECORD();
	recordSize = getRecordSize(schema);
	newRecord->data = MAKE_RECDATA(recordSize);
	memset(newRecord->data, 0, recordSize);
	newRecord->id.page = NO_PAGE;
	newRecord->id.slot = NO_SLOT;
	
	//  Save record to pointer
	*record = newRecord;

	return RC_OK;
}