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); } }
void* ValuePointer::Call () { if (!hlValue) { return val_call0 ((value)Get ()); } else { return hl_dyn_call ((vclosure*)hlValue, 0, 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); }
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); } }
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); } }
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; }