static void FXJSE_DynPropGetterAdapter(const FXJSE_CLASS* lpClass, FXJSE_HOBJECT hObject, const CFX_ByteStringC& szPropName, FXJSE_HVALUE hValue) { ASSERT(lpClass); int32_t nPropType = lpClass->dynPropTypeGetter == nullptr ? FXJSE_ClassPropType_Property : lpClass->dynPropTypeGetter(hObject, szPropName, FALSE); if (nPropType == FXJSE_ClassPropType_Property) { if (lpClass->dynPropGetter) { lpClass->dynPropGetter(hObject, szPropName, hValue); } } else if (nPropType == FXJSE_ClassPropType_Method) { if (lpClass->dynMethodCall && hValue) { CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); v8::Isolate* pIsolate = lpValue->GetIsolate(); v8::HandleScope hscope(pIsolate); v8::Local<v8::ObjectTemplate> hCallBackInfoTemplate = v8::ObjectTemplate::New(); hCallBackInfoTemplate->SetInternalFieldCount(2); v8::Local<v8::Object> hCallBackInfo = hCallBackInfoTemplate->NewInstance(); hCallBackInfo->SetAlignedPointerInInternalField( 0, const_cast<FXJSE_CLASS*>(lpClass)); hCallBackInfo->SetInternalField( 1, v8::String::NewFromUtf8( pIsolate, reinterpret_cast<const char*>(szPropName.GetPtr()), v8::String::kNormalString, szPropName.GetLength())); lpValue->ForceSetValue(v8::Function::New( lpValue->GetIsolate(), FXJSE_DynPropGetterAdapter_MethodCallback, hCallBackInfo)); } } }
FXJSE_HRUNTIME FXJSE_Value_GetRuntime(FXJSE_HVALUE hValue) { CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); ASSERT(lpValue); return reinterpret_cast<FXJSE_HRUNTIME>(lpValue->GetIsolate()); }