void MetadataNode::ArrayIndexedPropertySetterCallback(uint32_t index, Local<Value> value, const PropertyCallbackInfo<Value>& info) { try { auto node = GetNodeFromHandle(info.This()); NativeScriptRuntime::SetArrayElement(info.This(), index, node->m_name, value); info.GetReturnValue().Set(value); } catch (NativeScriptException& e) { e.ReThrowToV8(); } catch (std::exception e) { stringstream ss; ss << "Error: c++ exception: " << e.what() << endl; NativeScriptException nsEx(ss.str()); nsEx.ReThrowToV8(); } catch (...) { NativeScriptException nsEx(std::string("Error: c++ exception!")); nsEx.ReThrowToV8(); } }
void MetadataNode::ArrayIndexedPropertyGetterCallback(uint32_t index, const PropertyCallbackInfo<Value>& info) { auto node = GetNodeFromHandle(info.This()); auto element = s_getArrayElement(info.This(), index, node->m_name); info.GetReturnValue().Set(element); }
void MetadataNode::ArrayIndexedPropertySetterCallback(uint32_t index, Local<Value> value, const PropertyCallbackInfo<Value>& info) { auto node = GetNodeFromHandle(info.This()); NativeScriptRuntime::SetArrayElement(info.This(), index, node->m_name, value); info.GetReturnValue().Set(value); }
void UiWindow::SetTopmost(Local<String> property, Local<Value> value, const PropertyCallbackInfo<void>& info) { Isolate* isolate = Isolate::GetCurrent(); HandleScope scope(isolate); UiWindow* _this = Unwrap<UiWindow>(info.This()); bool topmost = value->BooleanValue(); _this->SetTopmost(topmost); }
void UiWindow::GetTopmost(Local<String> property, const PropertyCallbackInfo<Value>& info) { Isolate* isolate = Isolate::GetCurrent(); HandleScope scope(isolate); UiWindow* _this = Unwrap<UiWindow>(info.This()); bool topmost = _this->GetTopmost(); info.GetReturnValue().Set(Boolean::New(isolate, topmost)); }
void UiWindow::GetState(Local<String> property, const PropertyCallbackInfo<Value>& info) { Isolate* isolate = Isolate::GetCurrent(); HandleScope scope(isolate); UiWindow* _this = Unwrap<UiWindow>(info.This()); WINDOW_STATE state = _this->GetState(); info.GetReturnValue().Set(Int32::New(isolate, state)); }
void UiWindow::GetTop(Local<String> property, const PropertyCallbackInfo<Value>& info) { Isolate* isolate = Isolate::GetCurrent(); HandleScope scope(isolate); UiWindow* _this = Unwrap<UiWindow>(info.This()); WindowRect rect = _this->GetWindowRect(); info.GetReturnValue().Set(Int32::New(isolate, rect.Top)); }
void UiWindow::GetOpacity(Local<String> property, const PropertyCallbackInfo<Value>& info) { Isolate* isolate = Isolate::GetCurrent(); HandleScope scope(isolate); UiWindow* _this = Unwrap<UiWindow>(info.This()); double opacity = _this->GetOpacity(); info.GetReturnValue().Set(Number::New(isolate, opacity)); }
void MetadataNode::FieldAccessorGetterCallback(Local<String> property, const PropertyCallbackInfo<Value>& info) { try { auto thiz = info.This(); auto fieldCallbackData = reinterpret_cast<FieldCallbackData*>(info.Data().As<External>()->Value()); if (!fieldCallbackData->isStatic && thiz->StrictEquals(info.Holder())) { info.GetReturnValue().SetUndefined(); return; } auto value = NativeScriptRuntime::GetJavaField(thiz, fieldCallbackData); info.GetReturnValue().Set(value); } catch (NativeScriptException& e) { e.ReThrowToV8(); } catch (std::exception e) { stringstream ss; ss << "Error: c++ exception: " << e.what() << endl; NativeScriptException nsEx(ss.str()); nsEx.ReThrowToV8(); } catch (...) { NativeScriptException nsEx(std::string("Error: c++ exception!")); nsEx.ReThrowToV8(); } }
void MetadataNode::PackageGetterCallback(Local<String> property, const PropertyCallbackInfo<Value>& info) { string propName = ConvertToString(property); if (propName.empty()) return; auto isolate = Isolate::GetCurrent(); HandleScope handleScope(isolate); auto thiz = info.This(); auto cachedItem = thiz->GetHiddenValue(property); if (cachedItem.IsEmpty()) { auto node = GetPackageMetadata(isolate, thiz); uint8_t nodeType = s_metadataReader.GetNodeType(node->m_treeNode); DEBUG_WRITE("MetadataNode::GetterCallback: prop '%s' for node '%s' called, nodeType=%d, hash=%d", propName.c_str(), node->m_treeNode->name.c_str(), nodeType, thiz.IsEmpty() ? -42 : thiz->GetIdentityHash()); auto child = GetChildMetadataForPackage(node, propName); auto foundChild = child.treeNode != nullptr; if (foundChild) { auto childNode = MetadataNode::GetOrCreateInternal(child.treeNode); cachedItem = childNode->CreateWrapper(isolate); thiz->SetHiddenValue(property, cachedItem); } } info.GetReturnValue().Set(cachedItem); }
void MetadataNode::SuperAccessorGetterCallback(Local<String> property, const PropertyCallbackInfo<Value>& info) { auto thiz = info.This(); auto isolate = info.GetIsolate(); auto k = ConvertToV8String("supervalue"); auto superValue = thiz->GetHiddenValue(k).As<Object>(); if (superValue.IsEmpty()) { superValue = s_objectManager->GetEmptyObject(isolate); bool d = superValue->Delete(ConvertToV8String("toString")); d = superValue->Delete(ConvertToV8String("valueOf")); superValue->SetInternalField(static_cast<int>(ObjectManager::MetadataNodeKeys::CallSuper), True(isolate)); superValue->SetPrototype(thiz->GetPrototype().As<Object>()->GetPrototype().As<Object>()->GetPrototype()); thiz->SetHiddenValue(k, superValue); s_objectManager->CloneLink(thiz, superValue); DEBUG_WRITE("superValue.GetPrototype=%d", superValue->GetPrototype().As<Object>()->GetIdentityHash()); auto node = GetInstanceMetadata(isolate, thiz); SetInstanceMetadata(isolate, superValue, node); thiz->SetHiddenValue(k, superValue); } info.GetReturnValue().Set(superValue); }
void MetadataNode::ClassAccessorGetterCallback(Local<String> property, const PropertyCallbackInfo<Value>& info) { try { auto thiz = info.This(); auto isolate = info.GetIsolate(); auto data = GetTypeMetadata(isolate, thiz.As<Function>()); auto value = NativeScriptRuntime::FindClass(data->name); info.GetReturnValue().Set(value); } catch (NativeScriptException& e) { e.ReThrowToV8(); } catch (std::exception e) { stringstream ss; ss << "Error: c++ exception: " << e.what() << endl; NativeScriptException nsEx(ss.str()); nsEx.ReThrowToV8(); } catch (...) { NativeScriptException nsEx(std::string("Error: c++ exception!")); nsEx.ReThrowToV8(); } }
void MetadataNode::InnerClassAccessorGetterCallback(Local<String> property, const PropertyCallbackInfo<Value>& info) { auto isolate = info.GetIsolate(); auto thiz = info.This(); auto node = reinterpret_cast<MetadataNode*>(info.Data().As<External>()->Value()); auto innerKey = ConvertToV8String("inner:" + node->m_treeNode->name); auto innerTypeCtorFunc = thiz->GetHiddenValue(innerKey).As<Function>(); if (innerTypeCtorFunc.IsEmpty()) { auto funcTemplate = node->GetConstructorFunctionTemplate(isolate, node->m_treeNode); auto ctorFunc = funcTemplate->GetFunction(); auto innerClassData = External::New(isolate, new InnerClassData(new Persistent<Object>(isolate, thiz), node)); auto innerTypeCtorFuncTemplate = FunctionTemplate::New(isolate, InnerClassConstructorCallback, innerClassData); innerTypeCtorFuncTemplate->InstanceTemplate()->SetInternalFieldCount(static_cast<int>(ObjectManager::MetadataNodeKeys::END)); innerTypeCtorFunc = innerTypeCtorFuncTemplate->GetFunction(); auto prototypeName = ConvertToV8String("prototype"); auto innerTypeCtorFuncPrototype = innerTypeCtorFunc->Get(prototypeName).As<Object>(); innerTypeCtorFuncPrototype->SetPrototype(ctorFunc->Get(prototypeName)); thiz->SetHiddenValue(innerKey, innerTypeCtorFunc); } info.GetReturnValue().Set(innerTypeCtorFunc); }
void JNIV8ClassInfo::v8JavaAccessorGetterCallback(Local<Name> property, const PropertyCallbackInfo<Value> &info) { JNIEnv *env = JNIWrapper::getEnvironment(); JNILocalFrame localFrame(env, 1); Isolate *isolate = info.GetIsolate(); HandleScope scope(isolate); v8::Local<v8::External> ext; ext = info.Data().As<v8::External>(); JNIV8ObjectJavaAccessorHolder* cb = static_cast<JNIV8ObjectJavaAccessorHolder*>(ext->Value()); if (cb->javaGetterId) { jobject jobj = nullptr; if (!cb->isStatic) { ext = info.This()->GetInternalField(0).As<v8::External>(); JNIV8Object *v8Object = reinterpret_cast<JNIV8Object *>(ext->Value()); jobj = v8Object->getJObject(); } v8::Local<v8::Value> value; value = JNIV8Marshalling::callJavaMethod(env, cb->propertyType, cb->javaClass, cb->javaGetterId, jobj, nullptr); // java method could have thrown an exception; if so forward it to v8 if(env->ExceptionCheck()) { BGJSV8Engine::GetInstance(isolate)->forwardJNIExceptionToV8(); return; } info.GetReturnValue().Set(value); } }
void UiWindow::SetTop(Local<String> property, Local<Value> value, const PropertyCallbackInfo<void>& info) { Isolate* isolate = Isolate::GetCurrent(); HandleScope scope(isolate); UiWindow* _this = Unwrap<UiWindow>(info.This()); WindowRect rect = _this->GetWindowRect(); rect.Top = value->Int32Value(); _this->SetWindowRect(rect); }
void UiWindow::GetTitle(Local<String> property, const PropertyCallbackInfo<Value>& info) { Isolate* isolate = Isolate::GetCurrent(); HandleScope scope(isolate); UiWindow* _this = Unwrap<UiWindow>(info.This()); Utf8String* title = _this->GetTitle(); info.GetReturnValue().Set((const Handle<Value>)*title); delete title; }
void MetadataNode::FieldAccessorGetterCallback(Local<String> property, const PropertyCallbackInfo<Value>& info) { auto thiz = info.This(); auto fieldCallbackData = reinterpret_cast<FieldCallbackData*>(info.Data().As<External>()->Value()); auto value = NativeScriptRuntime::GetJavaField(thiz, fieldCallbackData); info.GetReturnValue().Set(value); }
void MetadataNode::ClassAccessorGetterCallback(Local<String> property, const PropertyCallbackInfo<Value>& info) { auto thiz = info.This(); auto isolate = info.GetIsolate(); auto data = GetTypeMetadata(isolate, thiz.As<Function>()); auto value = NativeScriptRuntime::FindClass(data->name); info.GetReturnValue().Set(value); }
void UiWindow::SetState(Local<String> property, Local<Value> value, const PropertyCallbackInfo<void>& info) { Isolate* isolate = Isolate::GetCurrent(); HandleScope scope(isolate); UiWindow* _this = Unwrap<UiWindow>(info.This()); if (value->IsNumber()) { WINDOW_STATE state = (WINDOW_STATE)value->Int32Value(); _this->SetState(state); } }
void BookWrap::Setter(uint32_t index, Local<Value> value, const PropertyCallbackInfo<Value>& info) { Isolate* isolate = info.GetIsolate(); HandleScope scope(isolate); BookWrap* bw = ObjectWrap::Unwrap<BookWrap>(info.This()); Book* b = bw->m_book; if (value->IsArray()) { if (index < b->size()) { Local<v8::Array> arr = Local<v8::Array>::Cast(value); if (arr->Length() == 3) { const String::Utf8Value firstname(arr->Get(0)->ToString()); const String::Utf8Value lastname(arr->Get(1)->ToString()); const time_t birthday = time_t(0.001*(*arr->Get(2))->NumberValue()); Person *p = (*b)[index]; p->firstname(*firstname); p->lastname(*lastname); p->birthday(birthday); } else { isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "Three elements expected"))); info.GetReturnValue().SetUndefined(); return; } } if (index == b->size()) { Local<v8::Array> arr = Local<v8::Array>::Cast(value); if (arr->Length() == 3) { const String::Utf8Value firstname(arr->Get(0)->ToString()); const String::Utf8Value lastname(arr->Get(1)->ToString()); const time_t birthday = time_t(0.001*(*arr->Get(2))->NumberValue()); Person *p = new Person(); p->firstname(*firstname); p->lastname(*lastname); p->birthday(birthday); b->add(p); } else { isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "Three elements expected"))); info.GetReturnValue().SetUndefined(); return; } } else { isolate->ThrowException(Exception::RangeError(String::NewFromUtf8(isolate, "Invalid index"))); info.GetReturnValue().SetUndefined(); return; } } else { isolate->ThrowException(Exception::TypeError(String::NewFromUtf8(isolate, "Object expected"))); info.GetReturnValue().SetUndefined(); return; } info.GetReturnValue().SetUndefined(); }
void UiWindow::SetOnMessage(Local<String> property, Local<Value> value, const PropertyCallbackInfo<void>& info) { Isolate* isolate = Isolate::GetCurrent(); HandleScope scope(isolate); UiWindow* _this = Unwrap<UiWindow>(info.This()); if (value->IsFunction()) { _this->_onMessageFn.Reset(isolate, Local<Function>::Cast(value)); } else { _this->_onMessageFn.Reset(); } }
/** * TJSオブジェクト用のプロパティセッター * @param args 引数 * @return 結果 */ void TJSInstance::tjsSetter(Local<String> property, Local<Value> value, const PropertyCallbackInfo<void>& info) { Isolate *isolate = info.GetIsolate(); HandleScope handle_scope(isolate); tTJSVariant instance; tTJSVariant method; if (getVariant(isolate, instance, info.This()) && getVariant(isolate, method, info.Data()->ToObject())) { PropSetter set(instance, method, value, info); set.exec(); } }
void BookWrap::Enumerator(const PropertyCallbackInfo<Array>& info) { Isolate* isolate = info.GetIsolate(); HandleScope scope(isolate); Book* b = ObjectWrap::Unwrap<BookWrap>(info.This())->m_book; Handle<v8::Array> result = v8::Array::New(isolate, b->size()); for(size_t i=0; i<b->size(); ++i) { result->Set(i, Integer::New(isolate, i)); } info.GetReturnValue().Set(result); }
void MetadataNode::PackageGetterCallback(Local<String> property, const PropertyCallbackInfo<Value>& info) { try { string propName = ConvertToString(property); if (propName.empty()) return; auto isolate = Isolate::GetCurrent(); HandleScope handleScope(isolate); auto thiz = info.This(); auto cachedItem = thiz->GetHiddenValue(property); if (cachedItem.IsEmpty()) { auto node = GetPackageMetadata(isolate, thiz); uint8_t nodeType = s_metadataReader.GetNodeType(node->m_treeNode); DEBUG_WRITE("MetadataNode::GetterCallback: prop '%s' for node '%s' called, nodeType=%d, hash=%d", propName.c_str(), node->m_treeNode->name.c_str(), nodeType, thiz.IsEmpty() ? -42 : thiz->GetIdentityHash()); auto child = GetChildMetadataForPackage(node, propName); auto foundChild = child.treeNode != nullptr; if (foundChild) { auto childNode = MetadataNode::GetOrCreateInternal(child.treeNode); cachedItem = childNode->CreateWrapper(isolate); thiz->SetHiddenValue(property, cachedItem); } } info.GetReturnValue().Set(cachedItem); } catch (NativeScriptException& e) { e.ReThrowToV8(); } catch (std::exception e) { stringstream ss; ss << "Error: c++ exception: " << e.what() << endl; NativeScriptException nsEx(ss.str()); nsEx.ReThrowToV8(); } catch (...) { NativeScriptException nsEx(std::string("Error: c++ exception!")); nsEx.ReThrowToV8(); } }
void BookWrap::Deleter(uint32_t index, const PropertyCallbackInfo<Boolean>& info) { Isolate* isolate = info.GetIsolate(); HandleScope scope(isolate); Book* b = ObjectWrap::Unwrap<BookWrap>(info.This())->m_book; try { b->remove(index); info.GetReturnValue().Set(Boolean::New(isolate, true)); } catch (Exception e) { info.GetReturnValue().Set(Boolean::New(isolate, false)); } }
void UiWindow::SetOpacity(Local<String> property, Local<Value> value, const PropertyCallbackInfo<void>& info) { Isolate* isolate = Isolate::GetCurrent(); HandleScope scope(isolate); UiWindow* _this = Unwrap<UiWindow>(info.This()); double opacity = value->NumberValue(); if (opacity < 0) { opacity = 0; } if (opacity > 1) { opacity = 1; } _this->SetOpacity(opacity); }
/** * TJSオブジェクト用のプロパティゲッター * @param args 引数 */ void TJSInstance::tjsGetter(Local<String> property, const PropertyCallbackInfo<Value>& info) { Isolate *isolate = info.GetIsolate(); HandleScope handle_scope(isolate); tTJSVariant instance; tTJSVariant method; if (getVariant(isolate, instance, info.This()) && getVariant(isolate, method, info.Data()->ToObject())) { PropGetter get(instance, method, info); info.GetReturnValue().Set(get.exec()); return; } info.GetReturnValue().Set(ERROR_BADINSTANCE(isolate)); }
void WrappedPoly::SetCoeff(Local<String> property, Local<Value> value, const PropertyCallbackInfo<void>& info) { WrappedPoly* obj = ObjectWrap::Unwrap<WrappedPoly>(info.This()); v8::String::Utf8Value s(property); std::string str(*s); if ( str == "a") { obj->a_ = value->NumberValue(); } else if (str == "b") { obj->b_ = value->NumberValue(); } else if (str == "c") { obj->c_ = value->NumberValue(); } }
void BookWrap::Getter(uint32_t index, const PropertyCallbackInfo<Value>& info) { Isolate* isolate = info.GetIsolate(); HandleScope scope(isolate); BookWrap* bw = ObjectWrap::Unwrap<BookWrap>(info.This()); Book* b = bw->m_book; if (index >= b->size()) { isolate->ThrowException(Exception::RangeError(String::NewFromUtf8(isolate, "invalid row index"))); info.GetReturnValue().SetUndefined(); } else { Handle<Object> result = PersonWrap::New(isolate, b, index); info.GetReturnValue().Set(result); } }
void WrappedPoly::GetCoeff(Local<String> property, const PropertyCallbackInfo<Value>& info) { Isolate* isolate = info.GetIsolate(); WrappedPoly* obj = ObjectWrap::Unwrap<WrappedPoly>(info.This()); v8::String::Utf8Value s(property); std::string str(*s); if ( str == "a") { info.GetReturnValue().Set(Number::New(isolate, obj->a_)); } else if (str == "b") { info.GetReturnValue().Set(Number::New(isolate, obj->b_)); } else if (str == "c") { info.GetReturnValue().Set(Number::New(isolate, obj->c_)); } }