mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-04-12 02:52:10 +02:00
Add V8 logging category
Rename logging category to overte Make all V8 code use logging categories
This commit is contained in:
parent
633319c111
commit
0fc2ab870a
10 changed files with 211 additions and 161 deletions
|
@ -11,6 +11,7 @@
|
|||
|
||||
#include "ScriptEngineLogging.h"
|
||||
|
||||
Q_LOGGING_CATEGORY(scriptengine, "hifi.scriptengine")
|
||||
Q_LOGGING_CATEGORY(scriptengine_module, "hifi.scriptengine.module")
|
||||
Q_LOGGING_CATEGORY(scriptengine_script, "hifi.scriptengine.script")
|
||||
Q_LOGGING_CATEGORY(scriptengine, "overte.scriptengine")
|
||||
Q_LOGGING_CATEGORY(scriptengine_module, "overte.scriptengine.module")
|
||||
Q_LOGGING_CATEGORY(scriptengine_script, "overte.scriptengine.script")
|
||||
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
|
||||
#include "ScriptEngineV8.h"
|
||||
#include "ScriptValueV8Wrapper.h"
|
||||
#include "ScriptEngineLoggingV8.h"
|
||||
|
||||
|
||||
/*ScriptContextV8Wrapper::ScriptContextV8Wrapper(ScriptEngineV8* engine, const v8::Local<v8::Context> context) : _functionCallbackInfo(nullptr), _propertyCallbackInfo(nullptr), _engine(engine) {
|
||||
_context.Reset(_engine->getIsolate(), context);
|
||||
|
@ -178,7 +180,7 @@ ScriptValue ScriptContextV8Wrapper::throwError(const QString& text) {
|
|||
v8::String::NewFromUtf8(_engine->getIsolate(), text.toStdString().c_str()).ToLocalChecked()));
|
||||
return ScriptValue(new ScriptValueV8Wrapper(_engine, std::move(result)));
|
||||
} else {
|
||||
qWarning() << "throwError on a different thread not implemented yet, error value: " << text;
|
||||
qCWarning(scriptengine_v8) << "throwError on a different thread not implemented yet, error value: " << text;
|
||||
//return _engine->undefinedValue();
|
||||
return ScriptValue();
|
||||
}
|
||||
|
|
17
libraries/script-engine/src/v8/ScriptEngineLoggingV8.cpp
Normal file
17
libraries/script-engine/src/v8/ScriptEngineLoggingV8.cpp
Normal file
|
@ -0,0 +1,17 @@
|
|||
//
|
||||
// ScriptEngineLoggingV8.cpp
|
||||
// libraries/script-engine/src/v8
|
||||
//
|
||||
// Created by Dale Glass on 06/03/2023
|
||||
// Copyright 2023 Overte e.V.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
|
||||
#include "ScriptEngineLoggingV8.h"
|
||||
|
||||
Q_LOGGING_CATEGORY(scriptengine_v8, "overte.scriptengine.v8")
|
||||
Q_LOGGING_CATEGORY(scriptengine_module_v8, "overte.scriptengine.module.v8")
|
||||
Q_LOGGING_CATEGORY(scriptengine_script_v8, "overte.scriptengine.script.v8")
|
||||
|
25
libraries/script-engine/src/v8/ScriptEngineLoggingV8.h
Normal file
25
libraries/script-engine/src/v8/ScriptEngineLoggingV8.h
Normal file
|
@ -0,0 +1,25 @@
|
|||
//
|
||||
// ScriptEngineLoggingV8.h
|
||||
// libraries/script-engine/src/v8
|
||||
//
|
||||
// Created by Dale Glass on 06/03/2023
|
||||
// Copyright 2023 Overte e.V.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
|
||||
/// @addtogroup ScriptEngine
|
||||
/// @{
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <QLoggingCategory>
|
||||
|
||||
Q_DECLARE_LOGGING_CATEGORY(scriptengine_v8)
|
||||
Q_DECLARE_LOGGING_CATEGORY(scriptengine_module_v8)
|
||||
Q_DECLARE_LOGGING_CATEGORY(scriptengine_script_v8)
|
||||
|
||||
|
||||
|
||||
/// @}
|
|
@ -51,6 +51,7 @@
|
|||
#include "ScriptProgramV8Wrapper.h"
|
||||
#include "ScriptValueV8Wrapper.h"
|
||||
#include "V8Lambda.h"
|
||||
#include "ScriptEngineLoggingV8.h"
|
||||
|
||||
static const int MAX_DEBUG_VALUE_LENGTH { 80 };
|
||||
|
||||
|
@ -62,11 +63,11 @@ bool ScriptEngineV8::IS_THREADSAFE_INVOCATION(const QThread* thread, const QStri
|
|||
if (currentThread == thread) {
|
||||
return true;
|
||||
}
|
||||
qCCritical(scriptengine) << QString("Scripting::%1 @ %2 -- ignoring thread-unsafe call from %3")
|
||||
qCCritical(scriptengine_v8) << QString("Scripting::%1 @ %2 -- ignoring thread-unsafe call from %3")
|
||||
.arg(method)
|
||||
.arg(thread ? thread->objectName() : "(!thread)")
|
||||
.arg(QThread::currentThread()->objectName());
|
||||
qCDebug(scriptengine) << "(please resolve on the calling side by using invokeMethod, executeOnScriptThread, etc.)";
|
||||
qCDebug(scriptengine_v8) << "(please resolve on the calling side by using invokeMethod, executeOnScriptThread, etc.)";
|
||||
Q_ASSERT(false);
|
||||
return false;
|
||||
}
|
||||
|
@ -206,7 +207,7 @@ QString Lambda::toString() const {
|
|||
|
||||
Lambda::~Lambda() {
|
||||
#ifdef DEBUG_JS_LAMBDA_FUNCS
|
||||
qDebug() << "~Lambda"
|
||||
qCDebug(scriptengine_v8) << "~Lambda"
|
||||
<< "this" << this;
|
||||
#endif
|
||||
}
|
||||
|
@ -217,7 +218,7 @@ Lambda::Lambda(ScriptEngineV8* engine,
|
|||
_engine(engine),
|
||||
_operation(operation), _data(data) {
|
||||
#ifdef DEBUG_JS_LAMBDA_FUNCS
|
||||
qDebug() << "Lambda" << data.toString();
|
||||
qCDebug(scriptengine_v8) << "Lambda" << data.toString();
|
||||
#endif
|
||||
}
|
||||
V8ScriptValue Lambda::call() {
|
||||
|
@ -285,10 +286,10 @@ ScriptEngineV8::ScriptEngineV8(ScriptManager *manager) : ScriptEngine(manager),
|
|||
//v8::V8::SetFlagsFromString("--stack-size=256 --single-threaded");
|
||||
v8::Platform* platform = getV8Platform();
|
||||
v8::V8::InitializePlatform(platform);
|
||||
v8::V8::Initialize(); qCDebug(scriptengine) << "V8 platform initialized";
|
||||
v8::V8::Initialize(); qCDebug(scriptengine_v8) << "V8 platform initialized";
|
||||
} );
|
||||
_v8InitMutex.unlock();
|
||||
qDebug() << "Creating new script engine";
|
||||
qCDebug(scriptengine_v8) << "Creating new script engine";
|
||||
{
|
||||
v8::Isolate::CreateParams isolateParams;
|
||||
isolateParams.array_buffer_allocator = v8::ArrayBuffer::Allocator::NewDefaultAllocator();
|
||||
|
@ -342,7 +343,7 @@ ScriptEngineV8::ScriptEngineV8(ScriptManager *manager) : ScriptEngine(manager),
|
|||
|
||||
void ScriptEngineV8::registerEnum(const QString& enumName, QMetaEnum newEnum) {
|
||||
if (!newEnum.isValid()) {
|
||||
qCCritical(scriptengine) << "registerEnum called on invalid enum with name " << enumName;
|
||||
qCCritical(scriptengine_v8) << "registerEnum called on invalid enum with name " << enumName;
|
||||
return;
|
||||
}
|
||||
v8::Locker locker(_v8Isolate);
|
||||
|
@ -360,7 +361,7 @@ void ScriptEngineV8::registerEnum(const QString& enumName, QMetaEnum newEnum) {
|
|||
void ScriptEngineV8::registerValue(const QString& valueName, V8ScriptValue value) {
|
||||
if (QThread::currentThread() != thread()) {
|
||||
#ifdef THREAD_DEBUGGING
|
||||
qCDebug(scriptengine) << "*** WARNING *** ScriptEngineV8::registerValue() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "]";
|
||||
qCDebug(scriptengine_v8) << "*** WARNING *** ScriptEngineV8::registerValue() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "]";
|
||||
#endif
|
||||
QMetaObject::invokeMethod(this, "registerValue",
|
||||
Q_ARG(const QString&, valueName),
|
||||
|
@ -412,7 +413,7 @@ void ScriptEngineV8::registerValue(const QString& valueName, V8ScriptValue value
|
|||
if (partsToGo > 0) {
|
||||
if (!child->IsObject()) {
|
||||
QString details = *v8::String::Utf8Value(_v8Isolate, child->ToDetailString(context).ToLocalChecked());
|
||||
qCDebug(scriptengine) << "ScriptEngineV8::registerValue: Part of path is not an object: " << pathPart << " details: " << details;
|
||||
qCDebug(scriptengine_v8) << "ScriptEngineV8::registerValue: Part of path is not an object: " << pathPart << " details: " << details;
|
||||
Q_ASSERT(false);
|
||||
}
|
||||
partObject = v8::Local<v8::Object>::Cast(child);
|
||||
|
@ -423,7 +424,7 @@ void ScriptEngineV8::registerValue(const QString& valueName, V8ScriptValue value
|
|||
void ScriptEngineV8::registerGlobalObject(const QString& name, QObject* object) {
|
||||
if (QThread::currentThread() != thread()) {
|
||||
#ifdef THREAD_DEBUGGING
|
||||
qCDebug(scriptengine) << "*** WARNING *** ScriptEngineV8::registerGlobalObject() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "] name:" << name;
|
||||
qCDebug(scriptengine_v8) << "*** WARNING *** ScriptEngineV8::registerGlobalObject() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "] name:" << name;
|
||||
#endif
|
||||
QMetaObject::invokeMethod(this, "registerGlobalObject",
|
||||
Q_ARG(const QString&, name),
|
||||
|
@ -431,7 +432,7 @@ void ScriptEngineV8::registerGlobalObject(const QString& name, QObject* object)
|
|||
return;
|
||||
}
|
||||
#ifdef THREAD_DEBUGGING
|
||||
qCDebug(scriptengine) << "ScriptEngineV8::registerGlobalObject() called on thread [" << QThread::currentThread() << "] name:" << name;
|
||||
qCDebug(scriptengine_v8) << "ScriptEngineV8::registerGlobalObject() called on thread [" << QThread::currentThread() << "] name:" << name;
|
||||
#endif
|
||||
/*bool is_isolate_exit_needed = false;
|
||||
if(!_v8Isolate->IsCurrent() && !_v8Locker) {
|
||||
|
@ -475,7 +476,7 @@ void ScriptEngineV8::registerFunction(const QString& name, ScriptEngine::Functio
|
|||
//}
|
||||
if (QThread::currentThread() != thread()) {
|
||||
#ifdef THREAD_DEBUGGING
|
||||
qCDebug(scriptengine) << "*** WARNING *** ScriptEngineV8::registerFunction() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "] name:" << name;
|
||||
qCDebug(scriptengine_v8) << "*** WARNING *** ScriptEngineV8::registerFunction() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "] name:" << name;
|
||||
#endif
|
||||
QMetaObject::invokeMethod(this, "registerFunction",
|
||||
Q_ARG(const QString&, name),
|
||||
|
@ -484,7 +485,7 @@ void ScriptEngineV8::registerFunction(const QString& name, ScriptEngine::Functio
|
|||
return;
|
||||
}
|
||||
#ifdef THREAD_DEBUGGING
|
||||
qCDebug(scriptengine) << "ScriptEngineV8::registerFunction() called on thread [" << QThread::currentThread() << "] name:" << name;
|
||||
qCDebug(scriptengine_v8) << "ScriptEngineV8::registerFunction() called on thread [" << QThread::currentThread() << "] name:" << name;
|
||||
#endif
|
||||
|
||||
/*bool is_isolate_exit_needed = false;
|
||||
|
@ -514,7 +515,7 @@ void ScriptEngineV8::registerFunction(const QString& name, ScriptEngine::Functio
|
|||
void ScriptEngineV8::registerFunction(const QString& parent, const QString& name, ScriptEngine::FunctionSignature functionSignature, int numArguments) {
|
||||
if (QThread::currentThread() != thread()) {
|
||||
#ifdef THREAD_DEBUGGING
|
||||
qCDebug(scriptengine) << "*** WARNING *** ScriptEngineV8::registerFunction() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "] parent:" << parent << "name:" << name;
|
||||
qCDebug(scriptengine_v8) << "*** WARNING *** ScriptEngineV8::registerFunction() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "] parent:" << parent << "name:" << name;
|
||||
#endif
|
||||
QMetaObject::invokeMethod(this, "registerFunction",
|
||||
Q_ARG(const QString&, name),
|
||||
|
@ -523,7 +524,7 @@ void ScriptEngineV8::registerFunction(const QString& parent, const QString& name
|
|||
return;
|
||||
}
|
||||
#ifdef THREAD_DEBUGGING
|
||||
qCDebug(scriptengine) << "ScriptEngineV8::registerFunction() called on thread [" << QThread::currentThread() << "] parent:" << parent << "name:" << name;
|
||||
qCDebug(scriptengine_v8) << "ScriptEngineV8::registerFunction() called on thread [" << QThread::currentThread() << "] parent:" << parent << "name:" << name;
|
||||
#endif
|
||||
|
||||
/*bool is_isolate_exit_needed = false;
|
||||
|
@ -554,7 +555,7 @@ void ScriptEngineV8::registerGetterSetter(const QString& name, ScriptEngine::Fun
|
|||
ScriptEngine::FunctionSignature setter, const QString& parent) {
|
||||
if (QThread::currentThread() != thread()) {
|
||||
#ifdef THREAD_DEBUGGING
|
||||
qCDebug(scriptengine) << "*** WARNING *** ScriptEngineV8::registerGetterSetter() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "] "
|
||||
qCDebug(scriptengine_v8) << "*** WARNING *** ScriptEngineV8::registerGetterSetter() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "] "
|
||||
" name:" << name << "parent:" << parent;
|
||||
#endif
|
||||
QMetaObject::invokeMethod(this, "registerGetterSetter",
|
||||
|
@ -565,7 +566,7 @@ void ScriptEngineV8::registerGetterSetter(const QString& name, ScriptEngine::Fun
|
|||
return;
|
||||
}
|
||||
#ifdef THREAD_DEBUGGING
|
||||
qCDebug(scriptengine) << "ScriptEngineV8::registerGetterSetter() called on thread [" << QThread::currentThread() << "] name:" << name << "parent:" << parent;
|
||||
qCDebug(scriptengine_v8) << "ScriptEngineV8::registerGetterSetter() called on thread [" << QThread::currentThread() << "] name:" << name << "parent:" << parent;
|
||||
#endif
|
||||
|
||||
/*bool is_isolate_exit_needed = false;
|
||||
|
@ -639,20 +640,20 @@ void ScriptEngineV8::registerGetterSetter(const QString& name, ScriptEngine::Fun
|
|||
v8ObjectToSetProperty = v8ParentObject;
|
||||
}
|
||||
if (!v8ObjectToSetProperty->DefineProperty(getContext(), v8propertyName, propertyDescriptor).FromMaybe(false)) {
|
||||
qCDebug(scriptengine) << "DefineProperty failed for registerGetterSetter \"" << name << "\" for parent: \""
|
||||
qCDebug(scriptengine_v8) << "DefineProperty failed for registerGetterSetter \"" << name << "\" for parent: \""
|
||||
<< parent << "\"";
|
||||
}
|
||||
//object.setProperty(name, setterFunction, ScriptValue::PropertySetter);
|
||||
//object.setProperty(name, getterFunction, ScriptValue::PropertyGetter);
|
||||
} else {
|
||||
qCDebug(scriptengine) << "Parent object \"" << parent << "\" for registerGetterSetter \"" << name
|
||||
qCDebug(scriptengine_v8) << "Parent object \"" << parent << "\" for registerGetterSetter \"" << name
|
||||
<< "\" is not valid: ";
|
||||
}
|
||||
} else {
|
||||
v8::Local<v8::String> v8propertyName =
|
||||
v8::String::NewFromUtf8(_v8Isolate, name.toStdString().c_str()).ToLocalChecked();
|
||||
if (!getContext()->Global()->DefineProperty(getContext(), v8propertyName, propertyDescriptor).FromMaybe(false)) {
|
||||
qCDebug(scriptengine) << "DefineProperty failed for registerGetterSetter \"" << name << "\" for global object";
|
||||
qCDebug(scriptengine_v8) << "DefineProperty failed for registerGetterSetter \"" << name << "\" for global object";
|
||||
}
|
||||
//globalObject().setProperty(name, setterFunction, ScriptValue::PropertySetter);
|
||||
//globalObject().setProperty(name, getterFunction, ScriptValue::PropertyGetter);
|
||||
|
@ -697,7 +698,7 @@ void ScriptEngineV8::storeGlobalObjectContents() {
|
|||
}
|
||||
|
||||
_globalObjectContents.Reset(_v8Isolate, globalMemberObjects);
|
||||
qDebug() << "ScriptEngineV8::storeGlobalObjectContents: " << globalMemberNames->Length() << " objects stored";
|
||||
qCDebug(scriptengine_v8) << "ScriptEngineV8::storeGlobalObjectContents: " << globalMemberNames->Length() << " objects stored";
|
||||
areGlobalObjectContentsStored = true;
|
||||
}
|
||||
|
||||
|
@ -725,7 +726,7 @@ ScriptValue ScriptEngineV8::evaluateInClosure(const ScriptValue& _closure,
|
|||
unwrappedProgram = ScriptProgramV8Wrapper::unwrap(_program);
|
||||
if (unwrappedProgram == nullptr) {
|
||||
_evaluatingCounter--;
|
||||
qDebug(scriptengine) << "Cannot unwrap program for closure";
|
||||
qCDebug(scriptengine_v8) << "Cannot unwrap program for closure";
|
||||
Q_ASSERT(false);
|
||||
return nullValue();
|
||||
}
|
||||
|
@ -737,7 +738,7 @@ ScriptValue ScriptEngineV8::evaluateInClosure(const ScriptValue& _closure,
|
|||
unwrappedClosure = ScriptValueV8Wrapper::unwrap(_closure);
|
||||
if (unwrappedClosure == nullptr) {
|
||||
_evaluatingCounter--;
|
||||
qDebug(scriptengine) << "Cannot unwrap closure";
|
||||
qCDebug(scriptengine_v8) << "Cannot unwrap closure";
|
||||
Q_ASSERT(false);
|
||||
return nullValue();
|
||||
}
|
||||
|
@ -746,27 +747,27 @@ ScriptValue ScriptEngineV8::evaluateInClosure(const ScriptValue& _closure,
|
|||
//const V8ScriptProgram& program = unwrappedProgram->toV8Value();
|
||||
if (!closure.constGet()->IsObject()) {
|
||||
_evaluatingCounter--;
|
||||
qDebug(scriptengine) << "Unwrapped closure is not an object";
|
||||
qCDebug(scriptengine_v8) << "Unwrapped closure is not an object";
|
||||
Q_ASSERT(false);
|
||||
return nullValue();
|
||||
}
|
||||
Q_ASSERT(closure.constGet()->IsObject());
|
||||
closureObject = v8::Local<v8::Object>::Cast(closure.constGet());
|
||||
qDebug() << "Closure object members:" << scriptValueDebugListMembersV8(closure);
|
||||
qCDebug(scriptengine_v8) << "Closure object members:" << scriptValueDebugListMembersV8(closure);
|
||||
v8::Local<v8::Object> testObject = v8::Object::New(_v8Isolate);
|
||||
if(!testObject->Set(getContext(), v8::String::NewFromUtf8(_v8Isolate, "test_value").ToLocalChecked(), closureObject).FromMaybe(false)) {
|
||||
Q_ASSERT(false);
|
||||
}
|
||||
qDebug() << "Test object members:" << scriptValueDebugListMembersV8(V8ScriptValue(this, testObject));
|
||||
qCDebug(scriptengine_v8) << "Test object members:" << scriptValueDebugListMembersV8(V8ScriptValue(this, testObject));
|
||||
|
||||
if (!closureObject->Get(closure.constGetContext(), v8::String::NewFromUtf8(_v8Isolate, "global").ToLocalChecked())
|
||||
.ToLocal(&closureGlobal)) {
|
||||
_evaluatingCounter--;
|
||||
qDebug(scriptengine) << "Cannot get global from unwrapped closure";
|
||||
qCDebug(scriptengine_v8) << "Cannot get global from unwrapped closure";
|
||||
Q_ASSERT(false);
|
||||
return nullValue();
|
||||
}
|
||||
//qDebug() << "Closure global details:" << scriptValueDebugDetailsV8(V8ScriptValue(_v8Isolate, closureGlobal));
|
||||
//qCDebug(scriptengine_v8) << "Closure global details:" << scriptValueDebugDetailsV8(V8ScriptValue(_v8Isolate, closureGlobal));
|
||||
}
|
||||
//oldGlobal = _v8Context.Get(_v8Isolate)->Global();
|
||||
v8::Local<v8::Context> closureContext;
|
||||
|
@ -794,7 +795,7 @@ ScriptValue ScriptEngineV8::evaluateInClosure(const ScriptValue& _closure,
|
|||
v8::Context::Scope contextScope(closureContext);
|
||||
//const V8ScriptValue& closure = unwrappedClosure->toV8Value();
|
||||
if (!unwrappedProgram->compile()) {
|
||||
qDebug(scriptengine) << "Can't compile script for evaluating in closure";
|
||||
qCDebug(scriptengine_v8) << "Can't compile script for evaluating in closure";
|
||||
Q_ASSERT(false);
|
||||
popContext();
|
||||
return nullValue();
|
||||
|
@ -806,12 +807,12 @@ ScriptValue ScriptEngineV8::evaluateInClosure(const ScriptValue& _closure,
|
|||
/*if (!closureObject->Get(closure.constGetContext(), v8::String::NewFromUtf8(_v8Isolate, "this").ToLocalChecked())
|
||||
.ToLocal(&thiz)) {
|
||||
_evaluatingCounter--;
|
||||
qDebug(scriptengine) << "Empty this object in closure";
|
||||
qCDebug(scriptengine_v8) << "Empty this object in closure";
|
||||
Q_ASSERT(false);
|
||||
return nullValue();
|
||||
}*/
|
||||
//thiz = closure.property("this");
|
||||
//qDebug() << "Closure this details:" << scriptValueDebugDetailsV8(V8ScriptValue(_v8Isolate, thiz));
|
||||
//qCDebug(scriptengine_v8) << "Closure this details:" << scriptValueDebugDetailsV8(V8ScriptValue(_v8Isolate, thiz));
|
||||
// V8TODO:
|
||||
/*if (thiz->IsObject()) {
|
||||
#ifdef DEBUG_JS
|
||||
|
@ -837,7 +838,7 @@ ScriptValue ScriptEngineV8::evaluateInClosure(const ScriptValue& _closure,
|
|||
Q_ASSERT(false);
|
||||
}
|
||||
}
|
||||
qDebug() << "ScriptEngineV8::evaluateInClosure: " << globalMemberNames->Length() << " objects added to global";
|
||||
qCDebug(scriptengine_v8) << "ScriptEngineV8::evaluateInClosure: " << globalMemberNames->Length() << " objects added to global";
|
||||
|
||||
/*auto oldGlobalMemberNames = oldContext->Global()->GetPropertyNames(oldContext).ToLocalChecked();
|
||||
//auto oldGlobalMemberNames = oldContext->Global()->GetPropertyNames(closureContext).ToLocalChecked();
|
||||
|
@ -874,15 +875,15 @@ ScriptValue ScriptEngineV8::evaluateInClosure(const ScriptValue& _closure,
|
|||
} else {
|
||||
membersString = QString(" Is not an object");
|
||||
}*/
|
||||
//qDebug(scriptengine) << "Closure global before run:" << membersString;
|
||||
//qCDebug(scriptengine_v8) << "Closure global before run:" << membersString;
|
||||
auto maybeResult = program.constGet()->GetUnboundScript()->BindToCurrentContext()->Run(closureContext);
|
||||
//qDebug(scriptengine) << "Closure after run:" << scriptValueDebugDetailsV8(closure);
|
||||
//qCDebug(scriptengine_v8) << "Closure after run:" << scriptValueDebugDetailsV8(closure);
|
||||
v8::Local<v8::Value> v8Result;
|
||||
if (!maybeResult.ToLocal(&v8Result)) {
|
||||
v8::String::Utf8Value utf8Value(getIsolate(), tryCatch.Exception());
|
||||
QString errorMessage = QString(*utf8Value);
|
||||
qWarning(scriptengine) << __FUNCTION__ << "---------- hasCaught:" << errorMessage;
|
||||
qWarning(scriptengine) << __FUNCTION__ << "---------- tryCatch details:" << formatErrorMessageFromTryCatch(tryCatch);
|
||||
qCWarning(scriptengine_v8) << __FUNCTION__ << "---------- hasCaught:" << errorMessage;
|
||||
qCWarning(scriptengine_v8) << __FUNCTION__ << "---------- tryCatch details:" << formatErrorMessageFromTryCatch(tryCatch);
|
||||
//V8TODO: better error reporting
|
||||
}
|
||||
|
||||
|
@ -919,7 +920,7 @@ ScriptValue ScriptEngineV8::evaluate(const QString& sourceCode, const QString& f
|
|||
if (QThread::currentThread() != thread()) {
|
||||
ScriptValue result;
|
||||
#ifdef THREAD_DEBUGGING
|
||||
qCDebug(scriptengine) << "*** WARNING *** ScriptEngineV8::evaluate() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "] "
|
||||
qCDebug(scriptengine_v8) << "*** WARNING *** ScriptEngineV8::evaluate() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "] "
|
||||
"sourceCode:" << sourceCode << " fileName:" << fileName;
|
||||
#endif
|
||||
BLOCKING_INVOKE_METHOD(this, "evaluate",
|
||||
|
@ -944,7 +945,7 @@ ScriptValue ScriptEngineV8::evaluate(const QString& sourceCode, const QString& f
|
|||
_evaluatingCounter--;
|
||||
return nullValue();
|
||||
}
|
||||
//qCDebug(scriptengine) << "Script compilation succesful: " << fileName;
|
||||
//qCDebug(scriptengine_v8) << "Script compilation succesful: " << fileName;
|
||||
|
||||
//V8TODO
|
||||
/*auto syntaxError = lintScript(sourceCode, fileName);
|
||||
|
@ -971,7 +972,7 @@ ScriptValue ScriptEngineV8::evaluate(const QString& sourceCode, const QString& f
|
|||
Q_ASSERT(tryCatchRun.HasCaught());
|
||||
auto runError = tryCatchRun.Message();
|
||||
ScriptValue errorValue(new ScriptValueV8Wrapper(this, V8ScriptValue(this, runError->Get())));
|
||||
qCDebug(scriptengine) << "Running script: \"" << fileName << "\" " << formatErrorMessageFromTryCatch(tryCatchRun);
|
||||
qCDebug(scriptengine_v8) << "Running script: \"" << fileName << "\" " << formatErrorMessageFromTryCatch(tryCatchRun);
|
||||
//V8TODO
|
||||
|
||||
|
||||
|
@ -995,7 +996,7 @@ void ScriptEngineV8::setUncaughtEngineException(const QString &reason, const QSt
|
|||
|
||||
void ScriptEngineV8::setUncaughtException(const v8::TryCatch &tryCatch, const QString& info) {
|
||||
if (!tryCatch.HasCaught()) {
|
||||
qCWarning(scriptengine) << "setUncaughtException called without exception";
|
||||
qCWarning(scriptengine_v8) << "setUncaughtException called without exception";
|
||||
clearExceptions();
|
||||
return;
|
||||
}
|
||||
|
@ -1041,7 +1042,7 @@ void ScriptEngineV8::setUncaughtException(const v8::TryCatch &tryCatch, const QS
|
|||
}
|
||||
|
||||
void ScriptEngineV8::setUncaughtException(std::shared_ptr<ScriptException> uncaughtException) {
|
||||
qCDebug(scriptengine) << "Emitting exception:" << uncaughtException;
|
||||
qCDebug(scriptengine_v8) << "Emitting exception:" << uncaughtException;
|
||||
_uncaughtException = uncaughtException;
|
||||
|
||||
auto copy = uncaughtException->clone();
|
||||
|
@ -1105,7 +1106,7 @@ Q_INVOKABLE ScriptValue ScriptEngineV8::evaluate(const ScriptProgramPointer& pro
|
|||
if (QThread::currentThread() != thread()) {
|
||||
ScriptValue result;
|
||||
#ifdef THREAD_DEBUGGING
|
||||
qCDebug(scriptengine) << "*** WARNING *** ScriptEngineV8::evaluate() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "] "
|
||||
qCDebug(scriptengine_v8) << "*** WARNING *** ScriptEngineV8::evaluate() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "] "
|
||||
"sourceCode:" << sourceCode << " fileName:" << fileName;
|
||||
#endif
|
||||
BLOCKING_INVOKE_METHOD(this, "evaluate",
|
||||
|
@ -1498,14 +1499,14 @@ QThread* ScriptEngineV8::thread() const {
|
|||
void ScriptEngineV8::setThread(QThread* thread) {
|
||||
if (_v8Isolate->IsCurrent()) {
|
||||
_v8Isolate->Exit();
|
||||
qDebug() << "Script engine " << objectName() << " exited isolate";
|
||||
qCDebug(scriptengine_v8) << "Script engine " << objectName() << " exited isolate";
|
||||
}
|
||||
Q_ASSERT(QObject::thread() == QThread::currentThread());
|
||||
/*if (_v8Locker) {
|
||||
_v8Locker.reset();
|
||||
}*/
|
||||
moveToThread(thread);
|
||||
qDebug() << "Moved script engine " << objectName() << " to different thread";
|
||||
qCDebug(scriptengine_v8) << "Moved script engine " << objectName() << " to different thread";
|
||||
}
|
||||
|
||||
/*void ScriptEngineV8::enterIsolateOnThisThread() {
|
||||
|
@ -1514,7 +1515,7 @@ void ScriptEngineV8::setThread(QThread* thread) {
|
|||
_v8Locker.reset(new v8::Locker(_v8Isolate));
|
||||
if (!_v8Isolate->IsCurrent()) {
|
||||
_v8Isolate->Enter();
|
||||
qDebug() << "Script engine " << objectName() << " entered isolate on a new thread";
|
||||
qCDebug(scriptengine_v8) << "Script engine " << objectName() << " entered isolate on a new thread";
|
||||
}
|
||||
}*/
|
||||
|
||||
|
@ -1534,14 +1535,14 @@ bool ScriptEngineV8::raiseException(const QString& error, const QString &reason)
|
|||
bool ScriptEngineV8::raiseException(const ScriptValue& exception, const QString &reason) {
|
||||
//V8TODO
|
||||
//Q_ASSERT(false);
|
||||
// qCritical() << "Script exception occurred: " << exception.toString();
|
||||
// qCCritical(scriptengine_v8) << "Script exception occurred: " << exception.toString();
|
||||
// ScriptValueV8Wrapper* unwrapped = ScriptValueV8Wrapper::unwrap(exception);
|
||||
// V8ScriptValue qException = unwrapped ? unwrapped->toV8Value() : QScriptEngine::newVariant(exception.toVariant());
|
||||
|
||||
// emit
|
||||
//return raiseException(qException);
|
||||
|
||||
// qCCritical(scriptengine) << "Raise exception for reason" << reason << "NOT IMPLEMENTED!";
|
||||
// qCCritical(scriptengine_v8) << "Raise exception for reason" << reason << "NOT IMPLEMENTED!";
|
||||
// return false;
|
||||
|
||||
return raiseException(ScriptValueV8Wrapper::fullUnwrap(this, exception));
|
||||
|
@ -1615,9 +1616,9 @@ void ScriptEngineV8::compileTest() {
|
|||
v8::Local<v8::Script> script;
|
||||
v8::ScriptOrigin scriptOrigin(getIsolate(), v8::String::NewFromUtf8(getIsolate(),"test").ToLocalChecked());
|
||||
if (v8::Script::Compile(getContext(), v8::String::NewFromUtf8(getIsolate(), "print(\"hello world\");").ToLocalChecked(), &scriptOrigin).ToLocal(&script)) {
|
||||
qCDebug(scriptengine) << "Compile test successful";
|
||||
qCDebug(scriptengine_v8) << "Compile test successful";
|
||||
} else {
|
||||
qCDebug(scriptengine) << "Compile test failed";
|
||||
qCDebug(scriptengine_v8) << "Compile test failed";
|
||||
Q_ASSERT(false);
|
||||
}
|
||||
}
|
||||
|
@ -1683,9 +1684,9 @@ QString ScriptEngineV8::scriptValueDebugDetailsV8(const V8ScriptValue &v8Value)
|
|||
|
||||
void ScriptEngineV8::logBacktrace(const QString &title) {
|
||||
QStringList backtrace = currentContext()->backtrace();
|
||||
qDebug(scriptengine) << title;
|
||||
qCDebug(scriptengine_v8) << title;
|
||||
for (int n = 0; n < backtrace.length(); n++) {
|
||||
qDebug(scriptengine) << backtrace[n];
|
||||
qCDebug(scriptengine_v8) << backtrace[n];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
|
||||
#include "ScriptObjectV8Proxy.h"
|
||||
#include "ScriptValueV8Wrapper.h"
|
||||
#include "ScriptEngineLoggingV8.h"
|
||||
|
||||
void ScriptEngineV8::setDefaultPrototype(int metaTypeId, const ScriptValue& prototype) {
|
||||
ScriptValueV8Wrapper* unwrappedPrototype = ScriptValueV8Wrapper::unwrap(prototype);
|
||||
|
@ -310,7 +311,7 @@ bool ScriptEngineV8::castValueToVariant(const V8ScriptValue& v8Val, QVariant& de
|
|||
// Conversion debugging:
|
||||
/*if (destTypeId == QMetaType::QVariant && val->IsBoolean()) {
|
||||
//It's for placing breakpoint here
|
||||
qDebug() << "Conversion Debug: " << scriptValueDebugDetailsV8(v8Val);
|
||||
qCDebug(scriptengine_v8) << "Conversion Debug: " << scriptValueDebugDetailsV8(v8Val);
|
||||
}*/
|
||||
|
||||
// if we're not particularly interested in a specific type, try to detect if we're dealing with a registered type
|
||||
|
@ -408,7 +409,7 @@ bool ScriptEngineV8::castValueToVariant(const V8ScriptValue& v8Val, QVariant& de
|
|||
// V8TODO
|
||||
errorMessage = QString() + "Conversion failure: " + QString(*v8::String::Utf8Value(_v8Isolate, val->ToDetailString(getConstContext()).ToLocalChecked()))
|
||||
+ "to variant. Destination type: " + QMetaType::typeName(destTypeId) +" details: "+ scriptValueDebugDetailsV8(v8Val);
|
||||
qDebug() << errorMessage;
|
||||
qCDebug(scriptengine_v8) << errorMessage;
|
||||
|
||||
//Q_ASSERT(false);
|
||||
//dest = val->ToVariant();
|
||||
|
@ -471,7 +472,7 @@ bool ScriptEngineV8::castValueToVariant(const V8ScriptValue& v8Val, QVariant& de
|
|||
// V8TODO: this is to diagnose a really weird segfault where it looks like only half of the QPointer is set to null upon object deletion
|
||||
uint64_t ptrVal = (uint64_t)(ScriptObjectV8Proxy::unwrap(v8Val));
|
||||
if ((uint32_t)(ptrVal) == 0 && ptrVal != 0) {
|
||||
qDebug() << "ScriptEngineV8::castValueToVariant pointer bug happened";
|
||||
qCDebug(scriptengine_v8) << "ScriptEngineV8::castValueToVariant pointer bug happened";
|
||||
//Q_ASSERT(false);
|
||||
return false;
|
||||
}
|
||||
|
@ -531,7 +532,7 @@ bool ScriptEngineV8::castValueToVariant(const V8ScriptValue& v8Val, QVariant& de
|
|||
//V8TODO is v8::Array to QVariant conversion used anywhere?
|
||||
errorMessage = QString() + "Conversion to variant failed: " + QString(*v8::String::Utf8Value(_v8Isolate, val->ToDetailString(getConstContext()).ToLocalChecked()))
|
||||
+ " Destination type: " + QMetaType::typeName(destTypeId) + " Value details: " + scriptValueDebugDetailsV8(v8Val);
|
||||
qDebug() << errorMessage;
|
||||
qCDebug(scriptengine_v8) << errorMessage;
|
||||
return false;
|
||||
default:
|
||||
// check to see if this is a pointer to a QObject-derived object
|
||||
|
@ -570,7 +571,7 @@ bool ScriptEngineV8::castValueToVariant(const V8ScriptValue& v8Val, QVariant& de
|
|||
// V8TODO
|
||||
errorMessage = QString() + "Conversion failure: " + QString(*v8::String::Utf8Value(_v8Isolate, val->ToDetailString(getConstContext()).ToLocalChecked()))
|
||||
+ "to variant. Destination type: " + QMetaType::typeName(destTypeId);
|
||||
qDebug() << errorMessage;
|
||||
qCDebug(scriptengine_v8) << errorMessage;
|
||||
if(destTypeId == QMetaType::QVariant) {
|
||||
Q_ASSERT(false);
|
||||
}
|
||||
|
@ -591,7 +592,7 @@ bool ScriptEngineV8::convertJSArrayToVariant(v8::Local<v8::Array> array, QVarian
|
|||
for (int i = 0; i < length; i++) {
|
||||
v8::Local<v8::Value> v8Property;
|
||||
if (!array->Get(context, i).ToLocal(&v8Property)) {
|
||||
qDebug() << "ScriptEngineV8::convertJSArrayToVariant could not get property: " + QString(i);
|
||||
qCDebug(scriptengine_v8) << "ScriptEngineV8::convertJSArrayToVariant could not get property: " + QString(i);
|
||||
continue;
|
||||
}
|
||||
QVariant property;
|
||||
|
@ -599,7 +600,7 @@ bool ScriptEngineV8::convertJSArrayToVariant(v8::Local<v8::Array> array, QVarian
|
|||
if (castValueToVariant(V8ScriptValue(this, v8Property), property, QMetaType::UnknownType)) {
|
||||
properties.append(property);
|
||||
} else {
|
||||
qDebug() << "ScriptEngineV8::convertJSArrayToVariant could cast property to variant: " + QString(i);
|
||||
qCDebug(scriptengine_v8) << "ScriptEngineV8::convertJSArrayToVariant could cast property to variant: " + QString(i);
|
||||
;
|
||||
}
|
||||
}
|
||||
|
@ -613,7 +614,7 @@ bool ScriptEngineV8::convertJSObjectToVariant(v8::Local<v8::Object> object, QVar
|
|||
v8::Context::Scope contextScope(context);
|
||||
v8::Local<v8::Array> names;
|
||||
if(!object->GetPropertyNames(context).ToLocal(&names)) {
|
||||
qDebug() << "ScriptEngineV8::convertJSObjectToVariant could not get property names";
|
||||
qCDebug(scriptengine_v8) << "ScriptEngineV8::convertJSObjectToVariant could not get property names";
|
||||
return false;
|
||||
}
|
||||
int length = names->Length();
|
||||
|
@ -622,7 +623,7 @@ bool ScriptEngineV8::convertJSObjectToVariant(v8::Local<v8::Object> object, QVar
|
|||
v8::Local<v8::Value> v8Property;
|
||||
QString name = *v8::String::Utf8Value(_v8Isolate, names->Get(context, i).ToLocalChecked());
|
||||
if (!object->Get(context, names->Get(context, i).ToLocalChecked()).ToLocal(&v8Property)) {
|
||||
qDebug() << "ScriptEngineV8::convertJSObjectToVariant could not get property: " + name;
|
||||
qCDebug(scriptengine_v8) << "ScriptEngineV8::convertJSObjectToVariant could not get property: " + name;
|
||||
continue;
|
||||
}
|
||||
QVariant property;
|
||||
|
@ -630,7 +631,7 @@ bool ScriptEngineV8::convertJSObjectToVariant(v8::Local<v8::Object> object, QVar
|
|||
if (castValueToVariant(V8ScriptValue(this, v8Property), property, QMetaType::UnknownType)) {
|
||||
properties.insert( name, property);
|
||||
} else {
|
||||
qDebug() << "ScriptEngineV8::convertJSObjectToVariant could cast property to variant: " + name;
|
||||
qCDebug(scriptengine_v8) << "ScriptEngineV8::convertJSObjectToVariant could cast property to variant: " + name;
|
||||
;
|
||||
}
|
||||
}
|
||||
|
@ -648,7 +649,7 @@ QString ScriptEngineV8::valueType(const V8ScriptValue& v8Val) {
|
|||
|
||||
//v8::HandleScope handleScope(const_cast<v8::Isolate*>(v8Val.constGetIsolate()));
|
||||
const v8::Local<v8::Value> val = v8Val.constGet();
|
||||
|
||||
|
||||
if (val->IsUndefined()) {
|
||||
return "undefined";
|
||||
}
|
||||
|
@ -682,7 +683,7 @@ QString ScriptEngineV8::valueType(const V8ScriptValue& v8Val) {
|
|||
if (castValueToVariant(v8Val, dest, QMetaType::QVariant)) {
|
||||
return dest.typeName();
|
||||
}
|
||||
qDebug() << "Cast to variant failed";
|
||||
qCDebug(scriptengine_v8) << "Cast to variant failed";
|
||||
// V8TODO: what to return here?
|
||||
return "undefined";
|
||||
}
|
||||
|
@ -780,7 +781,7 @@ V8ScriptValue ScriptEngineV8::castVariantToValue(const QVariant& val) {
|
|||
}
|
||||
// just do a generic variant
|
||||
//V8TODO
|
||||
qDebug() << "ScriptEngineV8::castVariantToValue failed for " << QMetaType::typeName(valTypeId);
|
||||
qCDebug(scriptengine_v8) << "ScriptEngineV8::castVariantToValue failed for " << QMetaType::typeName(valTypeId);
|
||||
logBacktrace("ScriptEngineV8::castVariantToValue failed");
|
||||
//Q_ASSERT(false);
|
||||
return V8ScriptValue(this, v8::Undefined(_v8Isolate));
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
|
||||
#include "ScriptContextV8Wrapper.h"
|
||||
#include "ScriptValueV8Wrapper.h"
|
||||
#include "ScriptEngineLoggingV8.h"
|
||||
|
||||
//V8TODO: is this needed for anything? It could cause trouble with multithreading if V8ScriptContext is v8::Persistent
|
||||
//Q_DECLARE_METATYPE(V8ScriptContext*)
|
||||
|
@ -110,7 +111,7 @@ V8ScriptValue ScriptObjectV8Proxy::newQObject(ScriptEngineV8* engine, QObject* o
|
|||
break;
|
||||
default:
|
||||
ownsObject = false;
|
||||
qCritical() << "Wrong ScriptEngine::ValueOwnership value: " << ownership;
|
||||
qCCritical(scriptengine_v8) << "Wrong ScriptEngine::ValueOwnership value: " << ownership;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -166,16 +167,16 @@ ScriptObjectV8Proxy* ScriptObjectV8Proxy::unwrapProxy(const V8ScriptValue& val)
|
|||
return nullptr;
|
||||
}
|
||||
if (!v8Value->IsObject()) {
|
||||
//qDebug(scriptengine) << "Cannot unwrap proxy - value is not an object";
|
||||
//qCDebug(scriptengine_v8) << "Cannot unwrap proxy - value is not an object";
|
||||
return nullptr;
|
||||
}
|
||||
v8::Local<v8::Object> v8Object = v8::Local<v8::Object>::Cast(v8Value);
|
||||
if (v8Object->InternalFieldCount() != 3) {
|
||||
//qDebug(scriptengine) << "Cannot unwrap proxy - wrong number of internal fields";
|
||||
//qCDebug(scriptengine_v8) << "Cannot unwrap proxy - wrong number of internal fields";
|
||||
return nullptr;
|
||||
}
|
||||
if (v8Object->GetAlignedPointerFromInternalField(0) != internalPointsToQObjectProxy) {
|
||||
qDebug(scriptengine) << "Cannot unwrap proxy - internal fields don't point to object proxy";
|
||||
qCDebug(scriptengine_v8) << "Cannot unwrap proxy - internal fields don't point to object proxy";
|
||||
return nullptr;
|
||||
}
|
||||
return reinterpret_cast<ScriptObjectV8Proxy*>(v8Object->GetAlignedPointerFromInternalField(1));
|
||||
|
@ -189,20 +190,20 @@ ScriptObjectV8Proxy* ScriptObjectV8Proxy::unwrapProxy(v8::Isolate* isolate, v8::
|
|||
//v8::Local<v8::Context> context = val.constGetContext();
|
||||
//v8::Context::Scope contextScope(context);
|
||||
if (value->IsNullOrUndefined()) {
|
||||
//qDebug(scriptengine) << "Cannot unwrap proxy - value is not an object";
|
||||
//qCDebug(scriptengine_v8) << "Cannot unwrap proxy - value is not an object";
|
||||
return nullptr;
|
||||
}
|
||||
if (!value->IsObject()) {
|
||||
//qDebug(scriptengine) << "Cannot unwrap proxy - value is not an object";
|
||||
//qCDebug(scriptengine_v8) << "Cannot unwrap proxy - value is not an object";
|
||||
return nullptr;
|
||||
}
|
||||
v8::Local<v8::Object> v8Object = v8::Local<v8::Object>::Cast(value);
|
||||
if (v8Object->InternalFieldCount() != 3) {
|
||||
//qDebug(scriptengine) << "Cannot unwrap proxy - wrong number of internal fields";
|
||||
//qCDebug(scriptengine_v8) << "Cannot unwrap proxy - wrong number of internal fields";
|
||||
return nullptr;
|
||||
}
|
||||
if (v8Object->GetAlignedPointerFromInternalField(0) != internalPointsToQObjectProxy) {
|
||||
qDebug(scriptengine) << "Cannot unwrap proxy - internal fields don't point to object proxy";
|
||||
qCDebug(scriptengine_v8) << "Cannot unwrap proxy - internal fields don't point to object proxy";
|
||||
return nullptr;
|
||||
}
|
||||
return reinterpret_cast<ScriptObjectV8Proxy*>(v8Object->GetAlignedPointerFromInternalField(1));
|
||||
|
@ -218,7 +219,7 @@ ScriptObjectV8Proxy::~ScriptObjectV8Proxy() {
|
|||
v8::Locker locker(isolate);
|
||||
v8::Isolate::Scope isolateScope(isolate);
|
||||
v8::HandleScope handleScope(isolate);
|
||||
if(_object) qDebug(scriptengine) << "Deleting object proxy: " << name();
|
||||
if(_object) qCDebug(scriptengine_v8) << "Deleting object proxy: " << name();
|
||||
// V8TODO: once WeakPersistent pointer is added we should check if it's valid before deleting
|
||||
Q_ASSERT(!_v8Object.Get(isolate)->IsNullOrUndefined());
|
||||
// This prevents unwrap function from unwrapping proxy that was deleted
|
||||
|
@ -234,7 +235,7 @@ void ScriptObjectV8Proxy::investigate() {
|
|||
QObject* qobject = _object;
|
||||
if (!qobject) {
|
||||
QStringList backtrace = _engine->currentContext()->backtrace();
|
||||
qDebug(scriptengine) << "ScriptObjectV8Proxy::investigate: Object pointer is NULL, " << backtrace;
|
||||
qCDebug(scriptengine_v8) << "ScriptObjectV8Proxy::investigate: Object pointer is NULL, " << backtrace;
|
||||
}
|
||||
if (!qobject) return;
|
||||
|
||||
|
@ -251,7 +252,7 @@ void ScriptObjectV8Proxy::investigate() {
|
|||
|
||||
const QMetaObject* metaObject = qobject->metaObject();
|
||||
|
||||
//qDebug(scriptengine) << "Investigate: " << metaObject->className();
|
||||
//qCDebug(scriptengine_v8) << "Investigate: " << metaObject->className();
|
||||
if (QString("ConsoleScriptingInterface") == metaObject->className()) {
|
||||
printf("ConsoleScriptingInterface");
|
||||
}
|
||||
|
@ -262,7 +263,7 @@ void ScriptObjectV8Proxy::investigate() {
|
|||
QMetaProperty prop = metaObject->property(idx);
|
||||
if (!prop.isScriptable()) continue;
|
||||
|
||||
//qDebug(scriptengine) << "Investigate: " << metaObject->className() << " Property: " << prop.name();
|
||||
//qCDebug(scriptengine_v8) << "Investigate: " << metaObject->className() << " Property: " << prop.name();
|
||||
// always exclude child objects (at least until we decide otherwise)
|
||||
int metaTypeId = prop.userType();
|
||||
if (metaTypeId != QMetaType::UnknownType) {
|
||||
|
@ -285,7 +286,7 @@ void ScriptObjectV8Proxy::investigate() {
|
|||
QHash<V8ScriptString, int> methodNames;
|
||||
for (int idx = startIdx; idx < num; ++idx) {
|
||||
QMetaMethod method = metaObject->method(idx);
|
||||
//qDebug(scriptengine) << "Investigate: " << metaObject->className() << " Method: " << method.name();
|
||||
//qCDebug(scriptengine_v8) << "Investigate: " << metaObject->className() << " Method: " << method.name();
|
||||
|
||||
// perhaps keep this comment? Calls (like AudioScriptingInterface::playSound) seem to expect non-public methods to be script-accessible
|
||||
/* if (method.access() != QMetaMethod::Public) continue;*/
|
||||
|
@ -319,9 +320,9 @@ void ScriptObjectV8Proxy::investigate() {
|
|||
SignalDef& signalDef = _signals.insert(idx, SignalDef(_engine, name.get())).value();
|
||||
signalDef.name = name;
|
||||
signalDef.signal = method;
|
||||
//qDebug(scriptengine) << "Utf8Value 1: " << QString(*v8::String::Utf8Value(const_cast<v8::Isolate*>(_engine->getIsolate()), nameString));
|
||||
//qDebug(scriptengine) << "Utf8Value 2: " << QString(*v8::String::Utf8Value(const_cast<v8::Isolate*>(_engine->getIsolate()), name.constGet()));
|
||||
//qDebug(scriptengine) << "toQString: " << name.toQString();
|
||||
//qCDebug(scriptengine_v8) << "Utf8Value 1: " << QString(*v8::String::Utf8Value(const_cast<v8::Isolate*>(_engine->getIsolate()), nameString));
|
||||
//qCDebug(scriptengine_v8) << "Utf8Value 2: " << QString(*v8::String::Utf8Value(const_cast<v8::Isolate*>(_engine->getIsolate()), name.constGet()));
|
||||
//qCDebug(scriptengine_v8) << "toQString: " << name.toQString();
|
||||
methodNames.insert(name, idx);
|
||||
} else {
|
||||
int originalMethodId = nameLookup.value();
|
||||
|
@ -336,11 +337,11 @@ void ScriptObjectV8Proxy::investigate() {
|
|||
} else {
|
||||
int parameterCount = method.parameterCount();
|
||||
if(method.returnType() == QMetaType::UnknownType) {
|
||||
qCritical(scriptengine) << "Method " << metaObject->className() << "::" << name.toQString() << " has QMetaType::UnknownType return value";
|
||||
qCCritical(scriptengine_v8) << "Method " << metaObject->className() << "::" << name.toQString() << " has QMetaType::UnknownType return value";
|
||||
}
|
||||
for (int i = 0; i < method.parameterCount(); i++) {
|
||||
if (method.parameterType(i) == QMetaType::UnknownType) {
|
||||
qCritical(scriptengine) << "Parameter " << i << "in method " << metaObject->className() << "::" << name.toQString() << " is of type QMetaType::UnknownType";
|
||||
qCCritical(scriptengine_v8) << "Parameter " << i << "in method " << metaObject->className() << "::" << name.toQString() << " is of type QMetaType::UnknownType";
|
||||
}
|
||||
}
|
||||
if (nameLookup == methodNames.end()) {
|
||||
|
@ -403,7 +404,7 @@ ScriptObjectV8Proxy::QueryFlags ScriptObjectV8Proxy::queryProperty(const V8Scrip
|
|||
// check for methods
|
||||
for (MethodDefMap::const_iterator trans = _methods.cbegin(); trans != _methods.cend(); ++trans) {
|
||||
v8::String::Utf8Value methodNameStr(isolate, trans.value().name.constGet());
|
||||
//qDebug(scriptengine) << "queryProperty : " << *nameStr << " method: " << *methodNameStr;
|
||||
//qCDebug(scriptengine_v8) << "queryProperty : " << *nameStr << " method: " << *methodNameStr;
|
||||
if (!(trans.value().name == name)) continue;
|
||||
*id = trans.key() | METHOD_TYPE;
|
||||
return flags & (HandlesReadAccess | HandlesWriteAccess);
|
||||
|
@ -458,17 +459,17 @@ void ScriptObjectV8Proxy::v8Get(v8::Local<v8::Name> name, const v8::PropertyCall
|
|||
v8::HandleScope handleScope(info.GetIsolate());
|
||||
//V8TODO: should there be a context scope here?
|
||||
v8::String::Utf8Value utf8Value(info.GetIsolate(), name);
|
||||
//qDebug(scriptengine) << "Get: " << *utf8Value;
|
||||
//qCDebug(scriptengine_v8) << "Get: " << *utf8Value;
|
||||
v8::Local<v8::Value> objectV8 = info.This();
|
||||
ScriptObjectV8Proxy *proxy = ScriptObjectV8Proxy::unwrapProxy(info.GetIsolate(), objectV8);
|
||||
if (!proxy) {
|
||||
qDebug(scriptengine) << "Proxy object not found when getting: " << *utf8Value;
|
||||
qCDebug(scriptengine_v8) << "Proxy object not found when getting: " << *utf8Value;
|
||||
return;
|
||||
}
|
||||
V8ScriptValue object(proxy->_engine, objectV8);
|
||||
if (!name->IsString() && !name->IsSymbol()) {
|
||||
QString notStringMessage("ScriptObjectV8Proxy::v8Get: " + proxy->_engine->scriptValueDebugDetailsV8(V8ScriptValue(proxy->_engine, name)));
|
||||
qDebug(scriptengine) << notStringMessage;
|
||||
qCDebug(scriptengine_v8) << notStringMessage;
|
||||
Q_ASSERT(false);
|
||||
}
|
||||
v8::Local<v8::String> v8NameString;
|
||||
|
@ -481,7 +482,7 @@ void ScriptObjectV8Proxy::v8Get(v8::Local<v8::Name> name, const v8::PropertyCall
|
|||
}
|
||||
|
||||
if (name->IsSymbol()) {
|
||||
qDebug(scriptengine) << "ScriptObjectV8Proxy::v8Set: symbol: " + nameString.toQString();
|
||||
qCDebug(scriptengine_v8) << "ScriptObjectV8Proxy::v8Set: symbol: " + nameString.toQString();
|
||||
}*/
|
||||
if (name->IsString()) {
|
||||
V8ScriptString nameString(proxy->_engine, v8::Local<v8::String>::Cast(name));
|
||||
|
@ -498,7 +499,7 @@ void ScriptObjectV8Proxy::v8Get(v8::Local<v8::Name> name, const v8::PropertyCall
|
|||
if(info.This()->GetInternalField(2).As<v8::Object>()->Get(proxy->_engine->getContext(), name).ToLocal(&property)) {
|
||||
info.GetReturnValue().Set(property);
|
||||
} else {
|
||||
qDebug(scriptengine) << "Value not found: " << *utf8Value;
|
||||
qCDebug(scriptengine_v8) << "Value not found: " << *utf8Value;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -506,17 +507,17 @@ void ScriptObjectV8Proxy::v8Set(v8::Local<v8::Name> name, v8::Local<v8::Value> v
|
|||
v8::HandleScope handleScope(info.GetIsolate());
|
||||
//V8TODO: should there be a context scope here?
|
||||
v8::String::Utf8Value utf8Value(info.GetIsolate(), name);
|
||||
//qDebug(scriptengine) << "Set: " << *utf8Value;
|
||||
//qCDebug(scriptengine_v8) << "Set: " << *utf8Value;
|
||||
v8::Local<v8::Value> objectV8 = info.This();
|
||||
ScriptObjectV8Proxy *proxy = ScriptObjectV8Proxy::unwrapProxy(info.GetIsolate(), objectV8);
|
||||
if (!proxy) {
|
||||
qDebug(scriptengine) << "Proxy object not found when setting: " << *utf8Value;
|
||||
qCDebug(scriptengine_v8) << "Proxy object not found when setting: " << *utf8Value;
|
||||
return;
|
||||
}
|
||||
V8ScriptValue object(proxy->_engine, objectV8);
|
||||
if (!name->IsString() && !name->IsSymbol()) {
|
||||
QString notStringMessage("ScriptObjectV8Proxy::v8Set: " + proxy->_engine->scriptValueDebugDetailsV8(V8ScriptValue(proxy->_engine, name)));
|
||||
qDebug(scriptengine) << notStringMessage;
|
||||
qCDebug(scriptengine_v8) << notStringMessage;
|
||||
Q_ASSERT(false);
|
||||
}
|
||||
/*v8::Local<v8::String> v8NameString;
|
||||
|
@ -528,7 +529,7 @@ void ScriptObjectV8Proxy::v8Set(v8::Local<v8::Name> name, v8::Local<v8::Value> v
|
|||
}
|
||||
}
|
||||
if (name->IsSymbol()) {
|
||||
qDebug(scriptengine) << "ScriptObjectV8Proxy::v8Set: symbol: " + nameString.toQString();
|
||||
qCDebug(scriptengine_v8) << "ScriptObjectV8Proxy::v8Set: symbol: " + nameString.toQString();
|
||||
}*/
|
||||
//V8ScriptString nameString(info.GetIsolate(), name->ToString(proxy->_engine->getContext()).ToLocalChecked());
|
||||
if (name->IsString()) {
|
||||
|
@ -545,19 +546,19 @@ void ScriptObjectV8Proxy::v8Set(v8::Local<v8::Name> name, v8::Local<v8::Value> v
|
|||
if (info.This()->GetInternalField(2).As<v8::Object>()->Set(proxy->_engine->getContext(), name, value).FromMaybe(false)) {
|
||||
info.GetReturnValue().Set(value);
|
||||
} else {
|
||||
qDebug(scriptengine) << "Set failed: " << *utf8Value;
|
||||
qCDebug(scriptengine_v8) << "Set failed: " << *utf8Value;
|
||||
}
|
||||
}
|
||||
|
||||
void ScriptObjectV8Proxy::v8GetPropertyNames(const v8::PropertyCallbackInfo<v8::Array>& info) {
|
||||
qDebug(scriptengine) << "ScriptObjectV8Proxy::v8GetPropertyNames called";
|
||||
qCDebug(scriptengine_v8) << "ScriptObjectV8Proxy::v8GetPropertyNames called";
|
||||
v8::HandleScope handleScope(info.GetIsolate());
|
||||
auto context = info.GetIsolate()->GetCurrentContext();
|
||||
v8::Context::Scope contextScope(context);
|
||||
v8::Local<v8::Value> objectV8 = info.This();
|
||||
ScriptObjectV8Proxy *proxy = ScriptObjectV8Proxy::unwrapProxy(info.GetIsolate(), objectV8);
|
||||
if (!proxy) {
|
||||
qDebug(scriptengine) << "ScriptObjectV8Proxy::v8GetPropertyNames: Proxy object not found when listing";
|
||||
qCDebug(scriptengine_v8) << "ScriptObjectV8Proxy::v8GetPropertyNames: Proxy object not found when listing";
|
||||
return;
|
||||
}
|
||||
V8ScriptValue object(proxy->_engine, objectV8);
|
||||
|
@ -568,7 +569,7 @@ void ScriptObjectV8Proxy::v8GetPropertyNames(const v8::PropertyCallbackInfo<v8::
|
|||
if (info.This()->GetInternalField(2).As<v8::Object>()->GetPropertyNames(context).ToLocal(&objectProperties)) {
|
||||
for (uint32_t n = 0; n < objectProperties->Length(); n++) {
|
||||
if(!properties->Set(context, propertiesLength+n, objectProperties->Get(context, n).ToLocalChecked()).FromMaybe(false)) {
|
||||
qDebug(scriptengine) << "ScriptObjectV8Proxy::v8GetPropertyNames: Cannot add member name";
|
||||
qCDebug(scriptengine_v8) << "ScriptObjectV8Proxy::v8GetPropertyNames: Cannot add member name";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -587,17 +588,17 @@ v8::Local<v8::Array> ScriptObjectV8Proxy::getPropertyNames() {
|
|||
uint32_t position = 0;
|
||||
for (PropertyDefMap::const_iterator i = _props.begin(); i != _props.end(); i++){
|
||||
if(!properties->Set(context, position++, i.value().name.constGet()).FromMaybe(false)) {
|
||||
qDebug(scriptengine) << "ScriptObjectV8Proxy::getPropertyNames: Cannot add property member name";
|
||||
qCDebug(scriptengine_v8) << "ScriptObjectV8Proxy::getPropertyNames: Cannot add property member name";
|
||||
}
|
||||
}
|
||||
for (MethodDefMap::const_iterator i = _methods.begin(); i != _methods.end(); i++){
|
||||
if(!properties->Set(context, position++, i.value().name.constGet()).FromMaybe(false)) {
|
||||
qDebug(scriptengine) << "ScriptObjectV8Proxy::getPropertyNames: Cannot add property member name";
|
||||
qCDebug(scriptengine_v8) << "ScriptObjectV8Proxy::getPropertyNames: Cannot add property member name";
|
||||
}
|
||||
}
|
||||
for (SignalDefMap::const_iterator i = _signals.begin(); i != _signals.end(); i++){
|
||||
if(!properties->Set(context, position++, i.value().name.constGet()).FromMaybe(false)) {
|
||||
qDebug(scriptengine) << "ScriptObjectV8Proxy::getPropertyNames: Cannot add property member name";
|
||||
qCDebug(scriptengine_v8) << "ScriptObjectV8Proxy::getPropertyNames: Cannot add property member name";
|
||||
}
|
||||
}
|
||||
return handleScope.Escape(properties);
|
||||
|
@ -639,7 +640,7 @@ V8ScriptValue ScriptObjectV8Proxy::property(const V8ScriptValue& object, const V
|
|||
const MethodDef& methodDef = lookup.value();
|
||||
for (auto iter = methodDef.methods.begin(); iter != methodDef.methods.end(); iter++ ) {
|
||||
if((*iter).returnType() == QMetaType::UnknownType) {
|
||||
qDebug(scriptengine) << "Method with QMetaType::UnknownType " << metaObject->className() << " " << (*iter).name();
|
||||
qCDebug(scriptengine_v8) << "Method with QMetaType::UnknownType " << metaObject->className() << " " << (*iter).name();
|
||||
}
|
||||
} //V8TODO: is new method created during every call? It needs to be cached instead
|
||||
//bool isMethodDefined = false;
|
||||
|
@ -650,7 +651,7 @@ V8ScriptValue ScriptObjectV8Proxy::property(const V8ScriptValue& object, const V
|
|||
}
|
||||
}
|
||||
Q_ASSERT(false);
|
||||
qDebug(scriptengine) << "(This should not happen) Creating new method object for " << metaObject->className() << " " << name.toQString();
|
||||
qCDebug(scriptengine_v8) << "(This should not happen) Creating new method object for " << metaObject->className() << " " << name.toQString();
|
||||
return ScriptMethodV8Proxy::newMethod(_engine, qobject, object, methodDef.methods, methodDef.numMaxParms);
|
||||
}
|
||||
case SIGNAL_TYPE: {
|
||||
|
@ -828,7 +829,7 @@ void ScriptVariantV8Proxy::v8Get(v8::Local<v8::Name> name, const v8::PropertyCal
|
|||
v8::Local<v8::Value> objectV8 = info.This();
|
||||
ScriptVariantV8Proxy *proxy = ScriptVariantV8Proxy::unwrapProxy(info.GetIsolate(), objectV8);
|
||||
if (!proxy) {
|
||||
qDebug(scriptengine) << "Proxy object not found when getting: " << *utf8Name;
|
||||
qCDebug(scriptengine_v8) << "Proxy object not found when getting: " << *utf8Name;
|
||||
return;
|
||||
}
|
||||
V8ScriptValue object(proxy->_engine, proxy->_v8Object.Get(info.GetIsolate()));
|
||||
|
@ -844,13 +845,13 @@ void ScriptVariantV8Proxy::v8Get(v8::Local<v8::Name> name, const v8::PropertyCal
|
|||
}
|
||||
}
|
||||
|
||||
qDebug(scriptengine) << "Value not found: " << *utf8Name;
|
||||
qCDebug(scriptengine_v8) << "Value not found: " << *utf8Name;
|
||||
// V8TODO: this is done differently for variant proxy - use internal field of _v8Object instead?
|
||||
/*v8::Local<v8::Value> property;
|
||||
if(info.This()->GetInternalField(2).As<v8::Object>()->Get(proxy->_engine->getContext(), name).ToLocal(&property)) {
|
||||
info.GetReturnValue().Set(property);
|
||||
} else {
|
||||
qDebug(scriptengine) << "Value not found: " << *utf8Value;
|
||||
qCDebug(scriptengine_v8) << "Value not found: " << *utf8Value;
|
||||
}*/
|
||||
}
|
||||
|
||||
|
@ -860,14 +861,14 @@ void ScriptVariantV8Proxy::v8Set(v8::Local<v8::Name> name, v8::Local<v8::Value>
|
|||
v8::Local<v8::Value> objectV8 = info.This();
|
||||
ScriptVariantV8Proxy *proxy = ScriptVariantV8Proxy::unwrapProxy(info.GetIsolate(), objectV8);
|
||||
if (!proxy) {
|
||||
qDebug(scriptengine) << "Proxy object not found when getting: " << *utf8Name;
|
||||
qCDebug(scriptengine_v8) << "Proxy object not found when getting: " << *utf8Name;
|
||||
return;
|
||||
}
|
||||
|
||||
V8ScriptValue object(proxy->_engine, objectV8);
|
||||
if (!name->IsString() && !name->IsSymbol()) {
|
||||
QString notStringMessage("ScriptObjectV8Proxy::v8Set: " + proxy->_engine->scriptValueDebugDetailsV8(V8ScriptValue(proxy->_engine, name)));
|
||||
qDebug(scriptengine) << notStringMessage;
|
||||
qCDebug(scriptengine_v8) << notStringMessage;
|
||||
Q_ASSERT(false);
|
||||
}
|
||||
|
||||
|
@ -885,21 +886,21 @@ void ScriptVariantV8Proxy::v8Set(v8::Local<v8::Name> name, v8::Local<v8::Value>
|
|||
/*if (info.This()->GetInternalField(2).As<v8::Object>()->Set(proxy->_engine->getContext(), name, value).FromMaybe(false)) {
|
||||
info.GetReturnValue().Set(value);
|
||||
} else {
|
||||
qDebug(scriptengine) << "Set failed: " << *utf8Name;
|
||||
qCDebug(scriptengine_v8) << "Set failed: " << *utf8Name;
|
||||
}*/
|
||||
qDebug(scriptengine) << "Set failed: " << *utf8Name;
|
||||
qCDebug(scriptengine_v8) << "Set failed: " << *utf8Name;
|
||||
}
|
||||
|
||||
void ScriptVariantV8Proxy::v8GetPropertyNames(const v8::PropertyCallbackInfo<v8::Array>& info) {
|
||||
//V8TODO: Only methods from the prototype should be listed.
|
||||
qDebug(scriptengine) << "ScriptObjectV8Proxy::v8GetPropertyNames called";
|
||||
qCDebug(scriptengine_v8) << "ScriptObjectV8Proxy::v8GetPropertyNames called";
|
||||
v8::HandleScope handleScope(info.GetIsolate());
|
||||
auto context = info.GetIsolate()->GetCurrentContext();
|
||||
v8::Context::Scope contextScope(context);
|
||||
v8::Local<v8::Value> objectV8 = info.This();
|
||||
ScriptVariantV8Proxy *proxy = ScriptVariantV8Proxy::unwrapProxy(info.GetIsolate(), objectV8);
|
||||
if (!proxy) {
|
||||
qDebug(scriptengine) << "ScriptObjectV8Proxy::v8GetPropertyNames: Proxy object not found when listing";
|
||||
qCDebug(scriptengine_v8) << "ScriptObjectV8Proxy::v8GetPropertyNames: Proxy object not found when listing";
|
||||
return;
|
||||
}
|
||||
V8ScriptValue object(proxy->_engine, objectV8);
|
||||
|
@ -910,7 +911,7 @@ void ScriptVariantV8Proxy::v8GetPropertyNames(const v8::PropertyCallbackInfo<v8:
|
|||
if (info.This()->GetInternalField(2).As<v8::Object>()->GetPropertyNames(context).ToLocal(&objectProperties)) {
|
||||
for (uint32_t n = 0; n < objectProperties->Length(); n++) {
|
||||
if(!properties->Set(context, propertiesLength+n, objectProperties->Get(context, n).ToLocalChecked()).FromMaybe(false)) {
|
||||
qDebug(scriptengine) << "ScriptObjectV8Proxy::v8GetPropertyNames: Cannot add member name";
|
||||
qCDebug(scriptengine_v8) << "ScriptObjectV8Proxy::v8GetPropertyNames: Cannot add member name";
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
@ -929,7 +930,7 @@ ScriptMethodV8Proxy::ScriptMethodV8Proxy(ScriptEngineV8* engine, QObject* object
|
|||
}
|
||||
|
||||
ScriptMethodV8Proxy::~ScriptMethodV8Proxy() {
|
||||
qDebug(scriptengine) << "ScriptMethodV8Proxy destroyed";
|
||||
qCDebug(scriptengine_v8) << "ScriptMethodV8Proxy destroyed";
|
||||
printf("ScriptMethodV8Proxy destroyed");
|
||||
}
|
||||
|
||||
|
@ -1107,7 +1108,7 @@ void ScriptMethodV8Proxy::call(const v8::FunctionCallbackInfo<v8::Value>& argume
|
|||
// nothing in there for return values so these need to be explicitly runtime-registered!
|
||||
if (returnTypeId == QMetaType::UnknownType) {
|
||||
QString methodName = fullName();
|
||||
qDebug(scriptengine) << "returnTypeId == QMetaType::UnknownType for method " << methodName;
|
||||
qCDebug(scriptengine_v8) << "returnTypeId == QMetaType::UnknownType for method " << methodName;
|
||||
_engine->logBacktrace("");
|
||||
//Q_ASSERT(false);
|
||||
}
|
||||
|
@ -1173,7 +1174,7 @@ void ScriptMethodV8Proxy::call(const v8::FunctionCallbackInfo<v8::Value>& argume
|
|||
QByteArray argTypeName = _engine->valueType(V8ScriptValue(_engine, argVal)).toLatin1();
|
||||
QString errorMessage = QString("Native call of %1 failed: Cannot convert parameter %2 from %3 to %4")
|
||||
.arg(fullName()).arg(arg+1).arg(argTypeName, methodTypeName);
|
||||
qDebug(scriptengine) << errorMessage << "\n Backtrace:" << _engine->currentContext()->backtrace();
|
||||
qCDebug(scriptengine_v8) << errorMessage << "\n Backtrace:" << _engine->currentContext()->backtrace();
|
||||
isolate->ThrowError(v8::String::NewFromUtf8(isolate, errorMessage.toStdString().c_str()).ToLocalChecked());
|
||||
//context->throwError(V8ScriptContext::TypeError, QString("Native call of %1 failed: Cannot convert parameter %2 from %3 to %4")
|
||||
// .arg(fullName()).arg(arg+1).arg(argTypeName, methodTypeName));
|
||||
|
@ -1182,7 +1183,7 @@ void ScriptMethodV8Proxy::call(const v8::FunctionCallbackInfo<v8::Value>& argume
|
|||
}
|
||||
}
|
||||
QString errorMessage = QString("Native call of %1 failed: could not locate an overload with the requested arguments").arg(fullName());
|
||||
qDebug(scriptengine) << errorMessage;
|
||||
qCDebug(scriptengine_v8) << errorMessage;
|
||||
isolate->ThrowError(v8::String::NewFromUtf8(isolate, errorMessage.toStdString().c_str()).ToLocalChecked());
|
||||
// V8TODO: it happens sometimes for some reason
|
||||
Q_ASSERT(false); // really shouldn't have gotten here -- it didn't work before and it's working now?
|
||||
|
@ -1384,7 +1385,7 @@ int ScriptSignalV8Proxy::qt_metacall(QMetaObject::Call call, int id, void** argu
|
|||
|
||||
_callCounter++;
|
||||
if (_callCounter % 10 == 0) {
|
||||
qDebug() << "Script engine: " << _engine->manager()->getFilename() << " Signal proxy " << fullName()
|
||||
qCDebug(scriptengine_v8) << "Script engine: " << _engine->manager()->getFilename() << " Signal proxy " << fullName()
|
||||
<< " call count: " << _callCounter << " total time: " << _totalCallTime_s;
|
||||
}
|
||||
QElapsedTimer callTimer;
|
||||
|
@ -1434,7 +1435,7 @@ int ScriptSignalV8Proxy::qt_metacall(QMetaObject::Call call, int id, void** argu
|
|||
/*if (!conn.callback.get()->IsFunction()) {
|
||||
auto stringV8 = conn.callback.get()->ToDetailString(context).ToLocalChecked();
|
||||
QString error = *v8::String::Utf8Value(_engine->getIsolate(), stringV8);
|
||||
qDebug() << error;
|
||||
qCDebug(scriptengine_v8) << error;
|
||||
Q_ASSERT(false);
|
||||
}
|
||||
v8::Local<v8::Function> callback = v8::Local<v8::Function>::Cast(conn.callback.get());
|
||||
|
@ -1449,14 +1450,14 @@ int ScriptSignalV8Proxy::qt_metacall(QMetaObject::Call call, int id, void** argu
|
|||
Q_ASSERT(!conn.callback.get().IsEmpty());
|
||||
Q_ASSERT(!conn.callback.get()->IsUndefined());
|
||||
if (conn.callback.get()->IsNull()) {
|
||||
qDebug() << "ScriptSignalV8Proxy::qt_metacall: Connection callback is Null";
|
||||
qCDebug(scriptengine_v8) << "ScriptSignalV8Proxy::qt_metacall: Connection callback is Null";
|
||||
_engine->popContext();
|
||||
continue;
|
||||
}
|
||||
if (!conn.callback.get()->IsFunction()) {
|
||||
auto stringV8 = conn.callback.get()->ToDetailString(functionContext).ToLocalChecked();
|
||||
QString error = *v8::String::Utf8Value(_engine->getIsolate(), stringV8);
|
||||
qDebug() << error;
|
||||
qCDebug(scriptengine_v8) << error;
|
||||
Q_ASSERT(false);
|
||||
}
|
||||
v8::Local<v8::Function> callback = v8::Local<v8::Function>::Cast(conn.callback.get());
|
||||
|
@ -1577,7 +1578,7 @@ void ScriptSignalV8Proxy::connect(ScriptValue arg0, ScriptValue arg1) {
|
|||
Q_ASSERT(ScriptObjectV8Proxy::unwrapProxy(v8ThisObject));
|
||||
ScriptSignalV8Proxy* thisProxy = dynamic_cast<ScriptSignalV8Proxy*>(ScriptObjectV8Proxy::unwrapProxy(v8ThisObject)->toQObject());
|
||||
Q_ASSERT(thisProxy);
|
||||
qDebug(scriptengine) << "ScriptSignalV8Proxy::connect: " << thisProxy->fullName() << " fullName: " << fullName();
|
||||
qCDebug(scriptengine_v8) << "ScriptSignalV8Proxy::connect: " << thisProxy->fullName() << " fullName: " << fullName();
|
||||
//Q_ASSERT(destFunction->InternalFieldCount() == 4);
|
||||
//Q_ASSERT(destData.get()->IsArray());
|
||||
//v8::Local<v8::Value> destData = destFunction->GetInternalField(3);
|
||||
|
@ -1593,14 +1594,14 @@ void ScriptSignalV8Proxy::connect(ScriptValue arg0, ScriptValue arg1) {
|
|||
for (int idx = 0; idx < length && !foundIt; ++idx) {
|
||||
v8::Local<v8::Value> entry = destArray->Get(destFunctionContext, idx).ToLocalChecked();
|
||||
{
|
||||
qDebug() << "ScriptSignalV8Proxy::connect: entry details: " << _engine->scriptValueDebugDetailsV8(V8ScriptValue(_engine, entry));
|
||||
qCDebug(scriptengine_v8) << "ScriptSignalV8Proxy::connect: entry details: " << _engine->scriptValueDebugDetailsV8(V8ScriptValue(_engine, entry));
|
||||
Q_ASSERT(entry->IsObject());
|
||||
V8ScriptValue v8EntryObject(_engine, entry);
|
||||
Q_ASSERT(ScriptObjectV8Proxy::unwrapProxy(v8EntryObject));
|
||||
// For debugging
|
||||
ScriptSignalV8Proxy* entryProxy = dynamic_cast<ScriptSignalV8Proxy*>(ScriptObjectV8Proxy::unwrapProxy(v8EntryObject)->toQObject());
|
||||
Q_ASSERT(thisProxy);
|
||||
qDebug(scriptengine) << "ScriptSignalV8Proxy::connect: entry proxy: " << entryProxy->fullName();
|
||||
qCDebug(scriptengine_v8) << "ScriptSignalV8Proxy::connect: entry proxy: " << entryProxy->fullName();
|
||||
}
|
||||
if (!newArray->Set(destFunctionContext, idx, entry).FromMaybe(false)) {
|
||||
Q_ASSERT(false);
|
||||
|
@ -1712,7 +1713,7 @@ void ScriptSignalV8Proxy::disconnect(ScriptValue arg0, ScriptValue arg1) {
|
|||
// For debugging
|
||||
ScriptSignalV8Proxy* thisProxy = dynamic_cast<ScriptSignalV8Proxy*>(ScriptObjectV8Proxy::unwrapProxy(v8ThisObject)->toQObject());
|
||||
Q_ASSERT(thisProxy);
|
||||
qDebug(scriptengine) << "ScriptSignalV8Proxy::disconnect: " << thisProxy->fullName() << " fullName: " << fullName();
|
||||
qCDebug(scriptengine_v8) << "ScriptSignalV8Proxy::disconnect: " << thisProxy->fullName() << " fullName: " << fullName();
|
||||
//V8ScriptValue destData = callback.data();
|
||||
//Q_ASSERT(destData->IsArray());
|
||||
if (!destFunction->Get(destFunctionContext, destDataName).ToLocal(&destData)) {
|
||||
|
@ -1730,7 +1731,7 @@ void ScriptSignalV8Proxy::disconnect(ScriptValue arg0, ScriptValue arg1) {
|
|||
// For debugging:
|
||||
{
|
||||
_engine->logBacktrace("ScriptSignalV8Proxy::disconnect");
|
||||
qDebug() << "ScriptSignalV8Proxy::disconnect: entry details: " << _engine->scriptValueDebugDetailsV8(V8ScriptValue(_engine, entry))
|
||||
qCDebug(scriptengine_v8) << "ScriptSignalV8Proxy::disconnect: entry details: " << _engine->scriptValueDebugDetailsV8(V8ScriptValue(_engine, entry))
|
||||
<< " Array: " << _engine->scriptValueDebugDetailsV8(V8ScriptValue(_engine, destArray));
|
||||
Q_ASSERT(entry->IsObject());
|
||||
V8ScriptValue v8EntryObject(_engine, entry);
|
||||
|
@ -1738,12 +1739,12 @@ void ScriptSignalV8Proxy::disconnect(ScriptValue arg0, ScriptValue arg1) {
|
|||
// For debugging
|
||||
ScriptSignalV8Proxy* entryProxy = dynamic_cast<ScriptSignalV8Proxy*>(ScriptObjectV8Proxy::unwrapProxy(v8EntryObject)->toQObject());
|
||||
Q_ASSERT(thisProxy);
|
||||
qDebug(scriptengine) << "ScriptSignalV8Proxy::disconnect: entry proxy: " << entryProxy->fullName();
|
||||
qCDebug(scriptengine_v8) << "ScriptSignalV8Proxy::disconnect: entry proxy: " << entryProxy->fullName();
|
||||
}
|
||||
if (entry->StrictEquals(v8ThisObject.get())) {
|
||||
//V8TODO: compare proxies instead?
|
||||
foundIt = true;
|
||||
qDebug() << "ScriptSignalV8Proxy::disconnect foundIt";
|
||||
qCDebug(scriptengine_v8) << "ScriptSignalV8Proxy::disconnect foundIt";
|
||||
//V8ScriptValueList args;
|
||||
//args << idx << 1;
|
||||
//destData.property("splice").call(destData, args);
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
#include "ScriptEngineV8.h"
|
||||
#include "ScriptValueV8Wrapper.h"
|
||||
#include "ScriptEngineLoggingV8.h"
|
||||
|
||||
ScriptProgramV8Wrapper* ScriptProgramV8Wrapper::unwrap(ScriptProgramPointer val) {
|
||||
if (!val) {
|
||||
|
@ -53,13 +54,13 @@ bool ScriptProgramV8Wrapper::compile() {
|
|||
v8::ScriptOrigin scriptOrigin(isolate, v8::String::NewFromUtf8(isolate, _url.toStdString().c_str()).ToLocalChecked());
|
||||
v8::Local<v8::Script> script;
|
||||
if (v8::Script::Compile(context, v8::String::NewFromUtf8(isolate, _source.toStdString().c_str()).ToLocalChecked(), &scriptOrigin).ToLocal(&script)) {
|
||||
qDebug() << "Script compilation successful: " << _url;
|
||||
qCDebug(scriptengine_v8) << "Script compilation successful: " << _url;
|
||||
_compileResult = ScriptSyntaxCheckResultV8Wrapper(ScriptSyntaxCheckResult::Valid);
|
||||
_value = V8ScriptProgram(_engine, script);
|
||||
_isCompiled = true;
|
||||
return true;
|
||||
}
|
||||
qDebug() << "Script compilation failed: " << _url;
|
||||
qCDebug(scriptengine_v8) << "Script compilation failed: " << _url;
|
||||
v8::String::Utf8Value utf8Value(isolate, tryCatch.Exception());
|
||||
errorMessage = QString(*utf8Value);
|
||||
v8::Local<v8::Message> exceptionMessage = tryCatch.Message();
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
//
|
||||
|
||||
#include "ScriptValueIteratorV8Wrapper.h"
|
||||
#include "ScriptEngineLoggingV8.h"
|
||||
|
||||
V8ScriptValueIterator::V8ScriptValueIterator(ScriptEngineV8* engine, v8::Local<v8::Value> object) : _engine(engine) {
|
||||
auto isolate = _engine->getIsolate();
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
#include "ScriptValueIteratorV8Wrapper.h"
|
||||
|
||||
#include "../ScriptEngineLogging.h"
|
||||
|
||||
#include "ScriptEngineLoggingV8.h"
|
||||
|
||||
void ScriptValueV8Wrapper::release() {
|
||||
// V8TODO: maybe add an assert to check if it happens on script engine thread?
|
||||
|
@ -92,17 +92,17 @@ ScriptValue ScriptValueV8Wrapper::call(const ScriptValue& thisObject, const Scri
|
|||
v8::Local<v8::Value> recv;
|
||||
if (v8This.get()->IsObject()) {
|
||||
recv = v8This.get();
|
||||
//qDebug() << "V8 This: " << _engine->scriptValueDebugDetailsV8(v8This);
|
||||
//qCDebug(scriptengine_v8) << "V8 This: " << _engine->scriptValueDebugDetailsV8(v8This);
|
||||
}else{
|
||||
recv = _engine->getContext()->Global();
|
||||
//recv = v8::Null(isolate);
|
||||
//qDebug() << "global";
|
||||
//qCDebug(scriptengine_v8) << "global";
|
||||
}
|
||||
//qDebug() << "V8 Call: " << *v8::String::Utf8Value(isolate, v8This.get()->TypeOf(isolate));
|
||||
//qCDebug(scriptengine_v8) << "V8 Call: " << *v8::String::Utf8Value(isolate, v8This.get()->TypeOf(isolate));
|
||||
auto maybeResult = v8Function->Call(_engine->getContext(), recv, args.length(), v8Args);
|
||||
// V8TODO: Exceptions don't seem to actually be caught here?
|
||||
if (tryCatch.HasCaught()) {
|
||||
qCDebug(scriptengine) << "Function call failed: \"" << _engine->formatErrorMessageFromTryCatch(tryCatch);
|
||||
qCDebug(scriptengine_v8) << "Function call failed: \"" << _engine->formatErrorMessageFromTryCatch(tryCatch);
|
||||
}
|
||||
v8::Local<v8::Value> result;
|
||||
Q_ASSERT(_engine == _value.getEngine());
|
||||
|
@ -110,7 +110,7 @@ ScriptValue ScriptValueV8Wrapper::call(const ScriptValue& thisObject, const Scri
|
|||
return ScriptValue(new ScriptValueV8Wrapper(_engine, V8ScriptValue(_engine, result)));
|
||||
} else {
|
||||
//V8TODO Add more details
|
||||
qWarning("JS function call failed");
|
||||
qCWarning(scriptengine_v8) << "JS function call failed";
|
||||
return _engine->undefinedValue();
|
||||
}
|
||||
}
|
||||
|
@ -135,7 +135,7 @@ ScriptValue ScriptValueV8Wrapper::call(const ScriptValue& thisObject, const Scri
|
|||
return ScriptValue(new ScriptValueV8Wrapper(_engine, V8ScriptValue(_engine->getContext(), result)));
|
||||
} else {
|
||||
//V8TODO Add more details
|
||||
qWarning("JS function call failed");
|
||||
qCWarning(scriptengine_v8) << "JS function call failed";
|
||||
return _engine->undefinedValue();
|
||||
}*/
|
||||
}
|
||||
|
@ -163,7 +163,7 @@ ScriptValue ScriptValueV8Wrapper::construct(const ScriptValueList& args) {
|
|||
return ScriptValue(new ScriptValueV8Wrapper(_engine, V8ScriptValue(_engine, result)));
|
||||
} else {
|
||||
//V8TODO Add more details
|
||||
qWarning("JS function call failed");
|
||||
qCWarning(scriptengine_v8) << "JS function call failed";
|
||||
return _engine->undefinedValue();
|
||||
}
|
||||
}
|
||||
|
@ -205,18 +205,18 @@ ScriptValue ScriptValueV8Wrapper::data() const {
|
|||
}
|
||||
}
|
||||
if (createData) {
|
||||
qDebug() << "ScriptValueV8Wrapper::data(): Data object doesn't exist, creating new one";
|
||||
qCDebug(scriptengine_v8) << "ScriptValueV8Wrapper::data(): Data object doesn't exist, creating new one";
|
||||
// Create data object if it's non-existent or invalid
|
||||
data = v8::Object::New(isolate);
|
||||
if( !v8Object->Set(_engine->getContext(), v8::String::NewFromUtf8(isolate, "__data").ToLocalChecked(), data).FromMaybe(false)) {
|
||||
qDebug() << "ScriptValueV8Wrapper::data(): Data object couldn't be created";
|
||||
qCDebug(scriptengine_v8) << "ScriptValueV8Wrapper::data(): Data object couldn't be created";
|
||||
Q_ASSERT(false);
|
||||
}
|
||||
}*/
|
||||
V8ScriptValue result(_engine, data);
|
||||
return ScriptValue(new ScriptValueV8Wrapper(_engine, std::move(result)));
|
||||
} else {
|
||||
qDebug() << "ScriptValueV8Wrapper::data() was called on a value that is not an object";
|
||||
qCDebug(scriptengine_v8) << "ScriptValueV8Wrapper::data() was called on a value that is not an object";
|
||||
Q_ASSERT(false);
|
||||
}
|
||||
//V8TODO I'm not sure how this would work in V8
|
||||
|
@ -290,15 +290,15 @@ ScriptValue ScriptValueV8Wrapper::property(const QString& name, const ScriptValu
|
|||
if (_value.constGet()->ToDetailString(_engine->getContext()).ToLocal(&parentValueString)) {
|
||||
QString(*v8::String::Utf8Value(isolate, parentValueString));
|
||||
}
|
||||
qDebug() << "Failed to get property, parent of value: " << name << ", parent type: " << QString(*v8::String::Utf8Value(isolate, _value.constGet()->TypeOf(isolate))) << " parent value: " << parentValueQString;
|
||||
qCDebug(scriptengine_v8) << "Failed to get property, parent of value: " << name << ", parent type: " << QString(*v8::String::Utf8Value(isolate, _value.constGet()->TypeOf(isolate))) << " parent value: " << parentValueQString;
|
||||
}
|
||||
}
|
||||
if (name == QString("x")) {
|
||||
printf("x");
|
||||
}
|
||||
//This displays too many messages during correct operation, but is useful for debugging
|
||||
//qDebug() << "Failed to get property, parent of value: " << name << " is not a V8 object, reported type: " << QString(*v8::String::Utf8Value(isolate, _value.constGet()->TypeOf(isolate)));
|
||||
//qDebug() << "Backtrace: " << _engine->currentContext()->backtrace();
|
||||
//qCDebug(scriptengine_v8) << "Failed to get property, parent of value: " << name << " is not a V8 object, reported type: " << QString(*v8::String::Utf8Value(isolate, _value.constGet()->TypeOf(isolate)));
|
||||
//qCDebug(scriptengine_v8) << "Backtrace: " << _engine->currentContext()->backtrace();
|
||||
return _engine->undefinedValue();
|
||||
/*v8::Local<v8::Value> nullValue = v8::Null(_engine->getIsolate());
|
||||
V8ScriptValue nullScriptValue(_engine->getIsolate(), std::move(nullValue));
|
||||
|
@ -314,7 +314,7 @@ ScriptValue ScriptValueV8Wrapper::property(quint32 arrayIndex, const ScriptValue
|
|||
v8::HandleScope handleScope(isolate);
|
||||
v8::Context::Scope contextScope(_engine->getContext());
|
||||
if (_value.constGet()->IsNullOrUndefined()) {
|
||||
qDebug() << "Failed to get property, parent of value: " << arrayIndex << " is not a V8 object, reported type: " << QString(*v8::String::Utf8Value(isolate, _value.constGet()->TypeOf(isolate)));
|
||||
qCDebug(scriptengine_v8) << "Failed to get property, parent of value: " << arrayIndex << " is not a V8 object, reported type: " << QString(*v8::String::Utf8Value(isolate, _value.constGet()->TypeOf(isolate)));
|
||||
return _engine->undefinedValue();
|
||||
}
|
||||
if (_value.constGet()->IsObject()) {
|
||||
|
@ -326,7 +326,7 @@ ScriptValue ScriptValueV8Wrapper::property(quint32 arrayIndex, const ScriptValue
|
|||
return ScriptValue(new ScriptValueV8Wrapper(_engine, std::move(result)));
|
||||
}
|
||||
}
|
||||
qDebug() << "Failed to get property, parent of value: " << arrayIndex << " is not a V8 object, reported type: " << QString(*v8::String::Utf8Value(isolate, _value.constGet()->TypeOf(isolate)));
|
||||
qCDebug(scriptengine_v8) << "Failed to get property, parent of value: " << arrayIndex << " is not a V8 object, reported type: " << QString(*v8::String::Utf8Value(isolate, _value.constGet()->TypeOf(isolate)));
|
||||
return _engine->undefinedValue();
|
||||
}
|
||||
|
||||
|
@ -340,17 +340,17 @@ void ScriptValueV8Wrapper::setData(const ScriptValue& value) {
|
|||
// V8TODO Check if it uses same isolate. Would pointer check be enough?
|
||||
// Private properties are an experimental feature for now on V8, so we are using regular value for now
|
||||
if (_value.constGet()->IsNullOrUndefined()) {
|
||||
qDebug() << "ScriptValueV8Wrapper::setData() was called on a value that is null or undefined";
|
||||
qCDebug(scriptengine_v8) << "ScriptValueV8Wrapper::setData() was called on a value that is null or undefined";
|
||||
return;
|
||||
}
|
||||
if (_value.constGet()->IsObject()) {
|
||||
auto v8Object = v8::Local<v8::Object>::Cast(_value.constGet());
|
||||
if( !v8Object->Set(_engine->getContext(), v8::String::NewFromUtf8(isolate, "__data").ToLocalChecked(), unwrapped.constGet()).FromMaybe(false)) {
|
||||
qDebug() << "ScriptValueV8Wrapper::data(): Data object couldn't be created";
|
||||
qCDebug(scriptengine_v8) << "ScriptValueV8Wrapper::data(): Data object couldn't be created";
|
||||
Q_ASSERT(false);
|
||||
}
|
||||
} else {
|
||||
qDebug() << "ScriptValueV8Wrapper::data() was called on a value that is not an object";
|
||||
qCDebug(scriptengine_v8) << "ScriptValueV8Wrapper::data() was called on a value that is not an object";
|
||||
Q_ASSERT(false);
|
||||
}
|
||||
}
|
||||
|
@ -364,7 +364,7 @@ void ScriptValueV8Wrapper::setProperty(const QString& name, const ScriptValue& v
|
|||
v8::Context::Scope contextScope(_engine->getContext());
|
||||
V8ScriptValue unwrapped = fullUnwrap(value);
|
||||
if (_value.constGet()->IsNullOrUndefined()) {
|
||||
qDebug() << "ScriptValueV8Wrapper::setProperty() was called on a value that is null or undefined";
|
||||
qCDebug(scriptengine_v8) << "ScriptValueV8Wrapper::setProperty() was called on a value that is null or undefined";
|
||||
return;
|
||||
}
|
||||
if(_value.constGet()->IsObject()) {
|
||||
|
@ -376,7 +376,7 @@ void ScriptValueV8Wrapper::setProperty(const QString& name, const ScriptValue& v
|
|||
//v8::Maybe<bool> retVal = object->Set(_engine->getContext(), key, unwrapped.constGet());
|
||||
v8::Maybe<bool> retVal = object->Set(isolate->GetCurrentContext(), key, unwrapped.constGet());
|
||||
if (retVal.IsJust() ? !retVal.FromJust() : true){
|
||||
qDebug(scriptengine) << "Failed to set property";
|
||||
qCDebug(scriptengine_v8) << "Failed to set property";
|
||||
}
|
||||
} else {
|
||||
v8::Local<v8::String> details;
|
||||
|
@ -385,8 +385,8 @@ void ScriptValueV8Wrapper::setProperty(const QString& name, const ScriptValue& v
|
|||
v8::String::Utf8Value utf8Value(isolate,details);
|
||||
detailsString = *utf8Value;
|
||||
}
|
||||
qDebug(scriptengine) << "Failed to set property:" + name + " - parent is not an object. Parent details: " + " Type: " + QString(*v8::String::Utf8Value(isolate, _value.constGet()->TypeOf(isolate)));
|
||||
qDebug(scriptengine) << _engine->currentContext()->backtrace();
|
||||
qCDebug(scriptengine_v8) << "Failed to set property:" + name + " - parent is not an object. Parent details: " + " Type: " + QString(*v8::String::Utf8Value(isolate, _value.constGet()->TypeOf(isolate)));
|
||||
qCDebug(scriptengine_v8) << _engine->currentContext()->backtrace();
|
||||
}
|
||||
//V8TODO: what about flags?
|
||||
//_value.setProperty(name, unwrapped, (V8ScriptValue::PropertyFlags)(int)flags);
|
||||
|
@ -400,7 +400,7 @@ void ScriptValueV8Wrapper::setProperty(quint32 arrayIndex, const ScriptValue& va
|
|||
v8::Context::Scope contextScope(_engine->getContext());
|
||||
V8ScriptValue unwrapped = fullUnwrap(value);
|
||||
if (_value.constGet()->IsNullOrUndefined()) {
|
||||
qDebug() << "ScriptValueV8Wrapper::setProperty() was called on a value that is null or undefined";
|
||||
qCDebug(scriptengine_v8) << "ScriptValueV8Wrapper::setProperty() was called on a value that is null or undefined";
|
||||
return;
|
||||
}
|
||||
if(_value.constGet()->IsObject()) {
|
||||
|
@ -409,10 +409,10 @@ void ScriptValueV8Wrapper::setProperty(quint32 arrayIndex, const ScriptValue& va
|
|||
v8::Maybe<bool> retVal(object->Set(_engine->getContext(), arrayIndex, unwrapped.constGet()));
|
||||
//v8::Maybe<bool> retVal(object->Set(_value.getContext(), arrayIndex, unwrapped.constGet()));
|
||||
if (retVal.IsJust() ? !retVal.FromJust() : true){
|
||||
qDebug(scriptengine) << "Failed to set property";
|
||||
qCDebug(scriptengine_v8) << "Failed to set property";
|
||||
}
|
||||
} else {
|
||||
qDebug(scriptengine) << "Failed to set property: " + QString(arrayIndex) + " - parent is not an object";
|
||||
qCDebug(scriptengine_v8) << "Failed to set property: " + QString(arrayIndex) + " - parent is not an object";
|
||||
}
|
||||
//V8TODO: what about flags?
|
||||
//_value.setProperty(arrayIndex, unwrapped, (V8ScriptValue::PropertyFlags)(int)flags);
|
||||
|
@ -427,7 +427,7 @@ void ScriptValueV8Wrapper::setPrototype(const ScriptValue& prototype) {
|
|||
ScriptValueV8Wrapper* unwrappedPrototype = unwrap(prototype);
|
||||
if (unwrappedPrototype) {
|
||||
if(unwrappedPrototype->toV8Value().constGet()->IsNullOrUndefined() && _value.constGet()->IsNullOrUndefined()) {
|
||||
qDebug(scriptengine) << "Failed to assign prototype - one of values is null or undefined";
|
||||
qCDebug(scriptengine_v8) << "Failed to assign prototype - one of values is null or undefined";
|
||||
}
|
||||
if(unwrappedPrototype->toV8Value().constGet()->IsObject() && _value.constGet()->IsObject()) {
|
||||
auto object = v8::Local<v8::Object>::Cast(_value.get());
|
||||
|
@ -435,10 +435,10 @@ void ScriptValueV8Wrapper::setPrototype(const ScriptValue& prototype) {
|
|||
v8::Maybe<bool> retVal = object->SetPrototype(_engine->getContext(), unwrappedPrototype->toV8Value().constGet());
|
||||
//v8::Maybe<bool> retVal = object->SetPrototype(_value.getContext(), unwrappedPrototype->toV8Value().constGet());
|
||||
if (retVal.IsJust() ? !retVal.FromJust() : true){
|
||||
qDebug(scriptengine) << "Failed to assign prototype";
|
||||
qCDebug(scriptengine_v8) << "Failed to assign prototype";
|
||||
}
|
||||
} else {
|
||||
qDebug(scriptengine) << "Failed to assign prototype - one of values is not an object";
|
||||
qCDebug(scriptengine_v8) << "Failed to assign prototype - one of values is not an object";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue