Example #1
0
	void* ValuePointer::Call (void* arg0, void* arg1, void* arg2, void* arg3, void* arg4) {

		if (!hlValue) {

			value vals[] = {
				(value)arg0,
				(value)arg1,
				(value)arg2,
				(value)arg3,
				(value)arg4,
			};

			return val_callN ((value)Get (), vals, 5);

		} else {

			vdynamic* args[] = {
				(vdynamic*)arg0,
				(vdynamic*)arg1,
				(vdynamic*)arg2,
				(vdynamic*)arg3,
				(vdynamic*)arg4,
			};

			return hl_dyn_call ((vclosure*)hlValue, (vdynamic**)&args, 5);

		}

	}
Example #2
0
	void* ValuePointer::Call () {

		if (!hlValue) {

			return val_call0 ((value)Get ());

		} else {

			return hl_dyn_call ((vclosure*)hlValue, 0, 0);

		}

	}
Example #3
0
static LRESULT CALLBACK WindowProc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
	switch( msg ) {
	case WM_CLOSE:
		return 0;
	case WM_COMMAND:
		if( wparam == BN_CLICKED ) {
			wref *r = (wref*)GetProp((HWND)lparam,PREF);
			if( r && r->callb ) hl_dyn_call(r->callb,NULL,0);
		}
		break;
	}
	return DefWindowProc(hwnd,msg,wparam,lparam);
}
Example #4
0
	void* ValuePointer::Call (void* arg0) {

		if (!hlValue) {

			return val_call1 ((value)Get (), (value)arg0);

		} else {

			vdynamic* arg = (vdynamic*) arg0;
			return hl_dyn_call ((vclosure*)hlValue, &arg, 1);

		}

	}
Example #5
0
	void* ValuePointer::Call (void* arg0, void* arg1) {

		if (!hlValue) {

			return val_call2 ((value)Get (), (value)arg0, (value)arg1);

		} else {

			vdynamic* args[] = {
				(vdynamic*)arg0,
				(vdynamic*)arg1,
			};

			return hl_dyn_call ((vclosure*)hlValue, (vdynamic**)&args, 2);

		}

	}
Example #6
0
HL_PRIM void hl_throw( vdynamic *v ) {
	hl_thread_info *t = hl_get_thread();
	hl_trap_ctx *trap = t->trap_current;
	bool was_rethrow = false;
	bool call_handler = false;
	if( t->exc_flags & HL_EXC_RETHROW ) {
		was_rethrow = true;
		t->exc_flags &= ~HL_EXC_RETHROW;
	} else
		t->exc_stack_count = capture_stack_func(t->exc_stack_trace, HL_EXC_MAX_STACK);
	t->exc_value = v;
	t->trap_current = trap->prev;
	call_handler = (t->exc_flags&HL_EXC_CATCH_ALL) || trap == t->trap_uncaught || t->trap_current == NULL;
	if( (t->exc_flags&HL_EXC_CATCH_ALL) || break_on_trap(t,trap,v) ) {
		if( trap == t->trap_uncaught ) t->trap_uncaught = NULL;
		t->exc_flags |= HL_EXC_IS_THROW;
		hl_debug_break();
		t->exc_flags &= ~HL_EXC_IS_THROW;
	}
	if( t->exc_handler && call_handler ) hl_dyn_call(t->exc_handler,&v,1);
	if( throw_jump == NULL ) throw_jump = longjmp;
	throw_jump(trap->buf,1);
	HL_UNREACHABLE;
}