/* static */ void V8Runtime::bootstrap(Local<Object> global) { EventEmitter::Initialize(); krollGlobalObject = Persistent<Object>::New(Object::New()); DEFINE_METHOD(krollGlobalObject, "log", krollLog); DEFINE_METHOD(krollGlobalObject, "binding", KrollBindings::getBinding); DEFINE_TEMPLATE(krollGlobalObject, "EventEmitter", EventEmitter::constructorTemplate); krollGlobalObject->Set(String::NewSymbol("runtime"), String::New("v8")); LOG_TIMER(TAG, "Executing kroll.js"); TryCatch tryCatch; Handle<Value> result = V8Util::executeString(KrollBindings::getMainSource(), String::New("kroll.js")); if (tryCatch.HasCaught()) { V8Util::reportException(tryCatch, true); } if (!result->IsFunction()) { LOGF(TAG, "kroll.js result is not a function"); V8Util::reportException(tryCatch, true); } Handle<Function> mainFunction = Handle<Function>::Cast(result); Local<Value> args[] = { Local<Value>::New(krollGlobalObject) }; mainFunction->Call(global, 1, args); if (tryCatch.HasCaught()) { V8Util::reportException(tryCatch, true); LOGE(TAG, "Caught exception while bootstrapping Kroll"); } }
/* static */ void V8Runtime::bootstrap(Local<Context> context) { Isolate* isolate = context->GetIsolate(); EventEmitter::initTemplate(context); Local<Object> kroll = Object::New(isolate); krollGlobalObject.Reset(isolate, kroll); Local<Array> mc = Array::New(isolate); moduleContexts.Reset(isolate, mc); KrollBindings::initFunctions(kroll, context); SetMethod(isolate, kroll, "log", krollLog); // Move this into the EventEmitter::initTemplate call? Local<FunctionTemplate> eect = Local<FunctionTemplate>::New(isolate, EventEmitter::constructorTemplate); { v8::TryCatch tryCatch(isolate); Local<Function> eventEmitterConstructor; MaybeLocal<Function> maybeEventEmitterConstructor = eect->GetFunction(context); if (!maybeEventEmitterConstructor.ToLocal(&eventEmitterConstructor)) { titanium::V8Util::fatalException(isolate, tryCatch); return; } kroll->Set(NEW_SYMBOL(isolate, "EventEmitter"), eventEmitterConstructor); } kroll->Set(NEW_SYMBOL(isolate, "runtime"), STRING_NEW(isolate, "v8")); kroll->Set(NEW_SYMBOL(isolate, "DBG"), v8::Boolean::New(isolate, V8Runtime::DBG)); kroll->Set(NEW_SYMBOL(isolate, "moduleContexts"), mc); LOG_TIMER(TAG, "Executing kroll.js"); TryCatch tryCatch(isolate); Local<Value> result = V8Util::executeString(isolate, KrollBindings::getMainSource(isolate), STRING_NEW(isolate, "ti:/kroll.js")); if (tryCatch.HasCaught()) { V8Util::reportException(isolate, tryCatch, true); } if (!result->IsFunction()) { LOGF(TAG, "kroll.js result is not a function"); V8Util::reportException(isolate, tryCatch, true); } // Add a reference to the global object Local<Object> global = context->Global(); // Expose the global object as a property on itself // (Allows you to set stuff on `global` from anywhere in JavaScript.) global->Set(NEW_SYMBOL(isolate, "global"), global); Local<Function> mainFunction = result.As<Function>(); Local<Value> args[] = { kroll }; mainFunction->Call(context, global, 1, args); if (tryCatch.HasCaught()) { V8Util::reportException(isolate, tryCatch, true); LOGE(TAG, "Caught exception while bootstrapping Kroll"); } }
/* static */ void V8Runtime::bootstrap(Local<Context> context) { Isolate* isolate = context->GetIsolate(); EventEmitter::initTemplate(context); Local<Object> global = Object::New(isolate); krollGlobalObject.Reset(isolate, global); Local<Array> mc = Array::New(isolate); moduleContexts.Reset(isolate, mc); KrollBindings::initFunctions(global, context); SetMethod(isolate, global, "log", krollLog); // Move this into the EventEmitter::initTemplate call? Local<FunctionTemplate> eect = Local<FunctionTemplate>::New(isolate, EventEmitter::constructorTemplate); global->Set(NEW_SYMBOL(isolate, "EventEmitter"), eect->GetFunction()); global->Set(NEW_SYMBOL(isolate, "runtime"), STRING_NEW(isolate, "v8")); global->Set(NEW_SYMBOL(isolate, "DBG"), v8::Boolean::New(isolate, V8Runtime::DBG)); global->Set(NEW_SYMBOL(isolate, "moduleContexts"), mc); LOG_TIMER(TAG, "Executing kroll.js"); TryCatch tryCatch(isolate); Local<Value> result = V8Util::executeString(isolate, KrollBindings::getMainSource(isolate), STRING_NEW(isolate, "ti:/kroll.js")); if (tryCatch.HasCaught()) { V8Util::reportException(isolate, tryCatch, true); } if (!result->IsFunction()) { LOGF(TAG, "kroll.js result is not a function"); V8Util::reportException(isolate, tryCatch, true); } Local<Function> mainFunction = result.As<Function>(); Local<Value> args[] = { global }; mainFunction->Call(context, context->Global(), 1, args); if (tryCatch.HasCaught()) { V8Util::reportException(isolate, tryCatch, true); LOGE(TAG, "Caught exception while bootstrapping Kroll"); } }
void JNIUtil::initCache() { LOG_TIMER(TAG, "initializing JNI cache"); JNIEnv *env = JNIScope::getEnv(); classClass = findClass("java/lang/Class"); objectClass = findClass("java/lang/Object"); numberClass = findClass("java/lang/Number"); stringClass = findClass("java/lang/String"); shortClass = findClass("java/lang/Short"); integerClass = findClass("java/lang/Integer"); longClass = findClass("java/lang/Long"); floatClass = findClass("java/lang/Float"); doubleClass = findClass("java/lang/Double"); booleanClass = findClass("java/lang/Boolean"); shortArrayClass = findClass("[S"); intArrayClass = findClass("[I"); longArrayClass = findClass("[J"); floatArrayClass = findClass("[F"); doubleArrayClass = findClass("[D"); booleanArrayClass = findClass("[Z"); objectArrayClass = findClass("[Ljava/lang/Object;"); arrayListClass = findClass("java/util/ArrayList"); hashMapClass = findClass("java/util/HashMap"); dateClass = findClass("java/util/Date"); setClass = findClass("java/util/Set"); outOfMemoryError = findClass("java/lang/OutOfMemoryError"); nullPointerException = findClass("java/lang/NullPointerException"); throwableClass = findClass("java/lang/Throwable"); v8ObjectClass = findClass("org/appcelerator/kroll/runtime/v8/V8Object"); v8FunctionClass = findClass("org/appcelerator/kroll/runtime/v8/V8Function"); krollRuntimeClass = findClass("org/appcelerator/kroll/KrollRuntime"); krollInvocationClass = findClass("org/appcelerator/kroll/KrollInvocation"); krollObjectClass = findClass("org/appcelerator/kroll/KrollObject"); krollProxyClass = findClass("org/appcelerator/kroll/KrollProxy"); krollAssetHelperClass = findClass("org/appcelerator/kroll/util/KrollAssetHelper"); krollLoggingClass = findClass("org/appcelerator/kroll/KrollLogging"); tiJsErrorDialogClass = findClass("org/appcelerator/kroll/common/TiJSErrorDialog"); referenceTableClass = findClass("org/appcelerator/kroll/runtime/v8/ReferenceTable"); classGetNameMethod = getMethodID(classClass, "getName", "()Ljava/lang/String;", false); arrayListInitMethod = getMethodID(arrayListClass, "<init>", "()V", false); arrayListAddMethod = getMethodID(arrayListClass, "add", "(Ljava/lang/Object;)Z", false); arrayListGetMethod = getMethodID(arrayListClass, "get", "(I)Ljava/lang/Object;", false); arrayListRemoveMethod = getMethodID(arrayListClass, "remove", "(I)Ljava/lang/Object;", false); hashMapInitMethod = getMethodID(hashMapClass, "<init>", "(I)V", false); hashMapGetMethod = getMethodID(hashMapClass, "get", "(Ljava/lang/Object;)Ljava/lang/Object;", false); hashMapPutMethod = getMethodID(hashMapClass, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", false); hashMapKeySetMethod = getMethodID(hashMapClass, "keySet", "()Ljava/util/Set;", false); hashMapRemoveMethod = getMethodID(hashMapClass, "remove", "(Ljava/lang/Object;)Ljava/lang/Object;", false); setToArrayMethod = getMethodID(setClass, "toArray", "()[Ljava/lang/Object;", false); dateInitMethod = getMethodID(dateClass, "<init>", "(J)V", false); dateGetTimeMethod = getMethodID(dateClass, "getTime", "()J", false); integerInitMethod = getMethodID(integerClass, "<init>", "(I)V", false); doubleInitMethod = getMethodID(doubleClass, "<init>", "(D)V", false); booleanInitMethod = getMethodID(booleanClass, "<init>", "(Z)V", false); booleanBooleanValueMethod = getMethodID(booleanClass, "booleanValue", "()Z", false); longInitMethod = getMethodID(longClass, "<init>", "(J)V", false); numberDoubleValueMethod = getMethodID(numberClass, "doubleValue", "()D", false); throwableGetMessageMethod = getMethodID(throwableClass, "getMessage", "()Ljava/lang/String;", false); v8ObjectPtrField = getFieldID(v8ObjectClass, "ptr", "J"); v8ObjectInitMethod = getMethodID(v8ObjectClass, "<init>", "(J)V", false); v8FunctionInitMethod = getMethodID(v8FunctionClass, "<init>", "(J)V", false); referenceTableCreateReferenceMethod = getMethodID(referenceTableClass, "createReference", "(Ljava/lang/Object;)I", true); referenceTableDestroyReferenceMethod = getMethodID(referenceTableClass, "destroyReference", "(I)V", true); referenceTableMakeWeakReferenceMethod = getMethodID(referenceTableClass, "makeWeakReference", "(I)V", true); referenceTableClearWeakReferenceMethod = getMethodID(referenceTableClass, "clearWeakReference", "(I)Ljava/lang/Object;", true); referenceTableGetReferenceMethod = getMethodID(referenceTableClass, "getReference", "(I)Ljava/lang/Object;", true); jfieldID dontInterceptField = env->GetStaticFieldID(krollRuntimeClass, "DONT_INTERCEPT", "I"); krollRuntimeDontIntercept = env->GetStaticIntField(krollRuntimeClass, dontInterceptField); krollInvocationInitMethod = getMethodID(krollInvocationClass, "<init>", "(Ljava/lang/String;)V", false); krollObjectSetHasListenersForEventTypeMethod = getMethodID(krollObjectClass, "setHasListenersForEventType", "(Ljava/lang/String;Z)V"); krollObjectOnEventFiredMethod = getMethodID(krollObjectClass, "onEventFired", "(Ljava/lang/String;Ljava/lang/Object;)V"); const char *createProxySignature = "(Ljava/lang/Class;Lorg/appcelerator/kroll/KrollObject;[Ljava/lang/Object;Ljava/lang/String;)Lorg/appcelerator/kroll/KrollProxy;"; krollProxyCreateProxyMethod = getMethodID(krollProxyClass, "createProxy", createProxySignature, true); krollProxyCreateDeprecatedProxyMethod = getMethodID(krollProxyClass, "createDeprecatedProxy", createProxySignature, true); krollProxyKrollObjectField = getFieldID(krollProxyClass, "krollObject", "Lorg/appcelerator/kroll/KrollObject;"); krollProxyModelListenerField = getFieldID(krollProxyClass, "modelListener", "Lorg/appcelerator/kroll/KrollProxyListener;"); krollProxySetIndexedPropertyMethod = getMethodID(krollProxyClass, "setIndexedProperty", "(ILjava/lang/Object;)V"); krollProxyGetIndexedPropertyMethod = getMethodID(krollProxyClass, "getIndexedProperty", "(I)Ljava/lang/Object;"); krollProxyOnPropertyChangedMethod = getMethodID(krollProxyClass, "onPropertyChanged", "(Ljava/lang/String;Ljava/lang/Object;)V"); krollProxyOnPropertiesChangedMethod = getMethodID(krollProxyClass, "onPropertiesChanged", "([[Ljava/lang/Object;)V", false); openErrorDialogMethod = getMethodID(tiJsErrorDialogClass, "openErrorDialog", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;I)V",true); krollAssetHelperReadAssetMethod = getMethodID(krollAssetHelperClass, "readAsset", "(Ljava/lang/String;)Ljava/lang/String;", true); krollAssetHelperFileExistsMethod = getMethodID(krollAssetHelperClass, "fileExists", "(Ljava/lang/String;)Z", true); krollLoggingLogWithDefaultLoggerMethod = getMethodID(krollLoggingClass, "logWithDefaultLogger", "(ILjava/lang/String;)V", true); jfieldID undefinedObjectField = env->GetStaticFieldID(krollRuntimeClass, "UNDEFINED", "Ljava/lang/Object;"); undefinedObject = env->NewGlobalRef(env->GetStaticObjectField(krollRuntimeClass, undefinedObjectField)); }
void operator()(int) { LOG_TIMER("task"); }
void mytask(int) { LOG_TIMER("task"); }