Fixed build warnings

This commit is contained in:
ksuprynowicz 2023-01-18 23:02:39 +01:00
parent ba0449021b
commit 2aae638078
6 changed files with 53 additions and 26 deletions

View file

@ -546,9 +546,13 @@ void ScriptEngineV8::registerGlobalObject(const QString& name, QObject* object)
if (!v8GlobalObject->Get(getContext(), v8Name).IsEmpty()) { if (!v8GlobalObject->Get(getContext(), v8Name).IsEmpty()) {
if (object) { if (object) {
V8ScriptValue value = ScriptObjectV8Proxy::newQObject(this, object, ScriptEngine::QtOwnership); V8ScriptValue value = ScriptObjectV8Proxy::newQObject(this, object, ScriptEngine::QtOwnership);
v8GlobalObject->Set(getContext(), v8Name, value.get()); if(!v8GlobalObject->Set(getContext(), v8Name, value.get()).FromMaybe(false)) {
Q_ASSERT(false);
}
} else { } else {
v8GlobalObject->Set(getContext(), v8Name, v8::Null(_v8Isolate)); if(!v8GlobalObject->Set(getContext(), v8Name, v8::Null(_v8Isolate)).FromMaybe(false)) {
Q_ASSERT(false);
}
} }
} }
//} //}
@ -785,7 +789,7 @@ ScriptValue ScriptEngineV8::evaluateInClosure(const ScriptValue& _closure,
} }
const V8ScriptValue& closure = unwrappedClosure->toV8Value(); const V8ScriptValue& closure = unwrappedClosure->toV8Value();
const V8ScriptProgram& program = unwrappedProgram->toV8Value(); //const V8ScriptProgram& program = unwrappedProgram->toV8Value();
if (!closure.constGet()->IsObject()) { if (!closure.constGet()->IsObject()) {
_evaluatingCounter--; _evaluatingCounter--;
qDebug(scriptengine) << "Unwrapped closure is not an object"; qDebug(scriptengine) << "Unwrapped closure is not an object";
@ -795,7 +799,9 @@ ScriptValue ScriptEngineV8::evaluateInClosure(const ScriptValue& _closure,
closureObject = v8::Local<v8::Object>::Cast(closure.constGet()); closureObject = v8::Local<v8::Object>::Cast(closure.constGet());
qDebug() << "Closure object members:" << scriptValueDebugListMembersV8(closure); qDebug() << "Closure object members:" << scriptValueDebugListMembersV8(closure);
v8::Local<v8::Object> testObject = v8::Object::New(_v8Isolate); v8::Local<v8::Object> testObject = v8::Object::New(_v8Isolate);
testObject->Set(getContext(), v8::String::NewFromUtf8(_v8Isolate, "test_value").ToLocalChecked(), closureObject); if(!testObject->Set(getContext(), v8::String::NewFromUtf8(_v8Isolate, "test_value").ToLocalChecked(), closureObject).FromMaybe(false)) {
Q_ASSERT(false);
}
qDebug() << "Test object members:" << scriptValueDebugListMembersV8(V8ScriptValue(_v8Isolate, testObject)); qDebug() << "Test object members:" << scriptValueDebugListMembersV8(V8ScriptValue(_v8Isolate, testObject));
if (!closureObject->Get(closure.constGetContext(), v8::String::NewFromUtf8(_v8Isolate, "global").ToLocalChecked()) if (!closureObject->Get(closure.constGetContext(), v8::String::NewFromUtf8(_v8Isolate, "global").ToLocalChecked())
@ -831,7 +837,7 @@ ScriptValue ScriptEngineV8::evaluateInClosure(const ScriptValue& _closure,
// It might cause trouble // It might cause trouble
{ {
v8::Context::Scope contextScope(closureContext); v8::Context::Scope contextScope(closureContext);
const V8ScriptValue& closure = unwrappedClosure->toV8Value(); //const V8ScriptValue& closure = unwrappedClosure->toV8Value();
if (!unwrappedProgram->compile()) { if (!unwrappedProgram->compile()) {
qDebug(scriptengine) << "Can't compile script for evaluating in closure"; qDebug(scriptengine) << "Can't compile script for evaluating in closure";
Q_ASSERT(false); Q_ASSERT(false);
@ -868,15 +874,19 @@ ScriptValue ScriptEngineV8::evaluateInClosure(const ScriptValue& _closure,
v8::TryCatch tryCatch(getIsolate()); v8::TryCatch tryCatch(getIsolate());
// Since V8 cannot use arbitrary object as global object, objects from main global need to be copied to closure's global object // Since V8 cannot use arbitrary object as global object, objects from main global need to be copied to closure's global object
auto oldGlobalMemberNames = oldContext->Global()->GetPropertyNames(oldContext).ToLocalChecked(); auto oldGlobalMemberNames = oldContext->Global()->GetPropertyNames(oldContext).ToLocalChecked();
for (int i = 0; i < oldGlobalMemberNames->Length(); i++) { for (size_t i = 0; i < oldGlobalMemberNames->Length(); i++) {
auto name = oldGlobalMemberNames->Get(closureContext, i).ToLocalChecked(); auto name = oldGlobalMemberNames->Get(closureContext, i).ToLocalChecked();
closureContext->Global()->Set(closureContext, name, oldContext->Global()->Get(oldContext, name).ToLocalChecked()); if(!closureContext->Global()->Set(closureContext, name, oldContext->Global()->Get(oldContext, name).ToLocalChecked()).FromMaybe(false)) {
Q_ASSERT(false);
}
} }
// Objects from closure need to be copied to global object too // Objects from closure need to be copied to global object too
auto closureMemberNames = closureObject->GetPropertyNames(closureContext).ToLocalChecked(); auto closureMemberNames = closureObject->GetPropertyNames(closureContext).ToLocalChecked();
for (int i = 0; i < closureMemberNames->Length(); i++) { for (size_t i = 0; i < closureMemberNames->Length(); i++) {
auto name = closureMemberNames->Get(closureContext, i).ToLocalChecked(); auto name = closureMemberNames->Get(closureContext, i).ToLocalChecked();
closureContext->Global()->Set(closureContext, name, closureObject->Get(closureContext, name).ToLocalChecked()); if(!closureContext->Global()->Set(closureContext, name, closureObject->Get(closureContext, name).ToLocalChecked()).FromMaybe(false)) {
Q_ASSERT(false);
}
} }
// List members of closure global object // List members of closure global object
QString membersString(""); QString membersString("");
@ -1483,16 +1493,19 @@ ScriptValue ScriptEngineV8::uncaughtException() const {
//V8TODO //V8TODO
//V8ScriptValue result = QScriptEngine::uncaughtException(); //V8ScriptValue result = QScriptEngine::uncaughtException();
//return ScriptValue(new ScriptValueV8Wrapper(const_cast<ScriptEngineV8*>(this), std::move(result))); //return ScriptValue(new ScriptValueV8Wrapper(const_cast<ScriptEngineV8*>(this), std::move(result)));
return ScriptValue();
} }
QStringList ScriptEngineV8::uncaughtExceptionBacktrace() const { QStringList ScriptEngineV8::uncaughtExceptionBacktrace() const {
//V8TODO //V8TODO
//return QScriptEngine::uncaughtExceptionBacktrace(); //return QScriptEngine::uncaughtExceptionBacktrace();
return QStringList();
} }
int ScriptEngineV8::uncaughtExceptionLineNumber() const { int ScriptEngineV8::uncaughtExceptionLineNumber() const {
//V8TODO //V8TODO
//return QScriptEngine::uncaughtExceptionLineNumber(); //return QScriptEngine::uncaughtExceptionLineNumber();
return 0;
} }
bool ScriptEngineV8::raiseException(const ScriptValue& exception) { bool ScriptEngineV8::raiseException(const ScriptValue& exception) {

View file

@ -50,14 +50,14 @@ void ScriptEngineV8::registerCustomType(int type,
Q_DECLARE_METATYPE(ScriptValue); Q_DECLARE_METATYPE(ScriptValue);
static V8ScriptValue ScriptValueToV8ScriptValue(ScriptEngineV8* engine, const ScriptValue& src) { /*static V8ScriptValue ScriptValueToV8ScriptValue(ScriptEngineV8* engine, const ScriptValue& src) {
return ScriptValueV8Wrapper::fullUnwrap(static_cast<ScriptEngineV8*>(engine), src); return ScriptValueV8Wrapper::fullUnwrap(static_cast<ScriptEngineV8*>(engine), src);
} }*/
static void ScriptValueFromV8ScriptValue(ScriptEngineV8* engine, const V8ScriptValue& src, ScriptValue& dest) { /*static void ScriptValueFromV8ScriptValue(ScriptEngineV8* engine, const V8ScriptValue& src, ScriptValue& dest) {
//ScriptEngineV8* engine = static_cast<ScriptEngineV8*>(src.engine()); //ScriptEngineV8* engine = static_cast<ScriptEngineV8*>(src.engine());
dest = ScriptValue(new ScriptValueV8Wrapper(engine, src)); dest = ScriptValue(new ScriptValueV8Wrapper(engine, src));
} }*/
static ScriptValue StringListToScriptValue(ScriptEngine* engine, const QStringList& src) { static ScriptValue StringListToScriptValue(ScriptEngine* engine, const QStringList& src) {
int len = src.length(); int len = src.length();

View file

@ -32,7 +32,7 @@ Q_DECLARE_METATYPE(QSharedPointer<ScriptVariantV8Proxy>)
// Value of internal field with index 0 when object contains ScriptObjectV8Proxy pointer in internal field 1 // Value of internal field with index 0 when object contains ScriptObjectV8Proxy pointer in internal field 1
static const void *internalPointsToQObjectProxy = (void *)0x13370000; static const void *internalPointsToQObjectProxy = (void *)0x13370000;
static const void *internalPointsToQVariantProxy = (void *)0x13371000; static const void *internalPointsToQVariantProxy = (void *)0x13371000;
static const void *internalPointsToSignalProxy = (void *)0x13372000; //static const void *internalPointsToSignalProxy = (void *)0x13372000;
static const void *internalPointsToMethodProxy = (void *)0x13373000; static const void *internalPointsToMethodProxy = (void *)0x13373000;
// Used strictly to replace the "this" object value for property access. May expand to a full context element // Used strictly to replace the "this" object value for property access. May expand to a full context element
@ -328,7 +328,7 @@ QString ScriptObjectV8Proxy::name() const {
ScriptObjectV8Proxy::QueryFlags ScriptObjectV8Proxy::queryProperty(const V8ScriptValue& object, const V8ScriptString& name, QueryFlags flags, uint* id) { ScriptObjectV8Proxy::QueryFlags ScriptObjectV8Proxy::queryProperty(const V8ScriptValue& object, const V8ScriptString& name, QueryFlags flags, uint* id) {
v8::HandleScope handleScope(_engine->getIsolate()); v8::HandleScope handleScope(_engine->getIsolate());
// V8TODO: this might be inefficient when there's large number of properties // V8TODO: this might be inefficient when there's large number of properties
v8::Local<v8::Context> context = _engine->getContext(); //v8::Local<v8::Context> context = _engine->getContext();
v8::String::Utf8Value nameStr(_engine->getIsolate(), name.constGet()); v8::String::Utf8Value nameStr(_engine->getIsolate(), name.constGet());
// check for methods // check for methods
@ -473,7 +473,7 @@ V8ScriptValue ScriptObjectV8Proxy::property(const V8ScriptValue& object, const V
qDebug(scriptengine) << "Method with QMetaType::UnknownType " << metaObject->className() << " " << (*iter).name(); qDebug(scriptengine) << "Method with QMetaType::UnknownType " << metaObject->className() << " " << (*iter).name();
} }
} //V8TODO: is new method created during every call? It needs to be cached instead } //V8TODO: is new method created during every call? It needs to be cached instead
bool isMethodDefined = false; //bool isMethodDefined = false;
v8::Local<v8::Value> property; v8::Local<v8::Value> property;
if(_v8Object.Get(_engine->getIsolate())->GetInternalField(2).As<v8::Object>()->Get(_engine->getContext(), name.constGet()).ToLocal(&property)) { if(_v8Object.Get(_engine->getIsolate())->GetInternalField(2).As<v8::Object>()->Get(_engine->getContext(), name.constGet()).ToLocal(&property)) {
if (!property->IsUndefined()) { if (!property->IsUndefined()) {
@ -1140,14 +1140,24 @@ void ScriptSignalV8Proxy::connect(ScriptValue arg0, ScriptValue arg1) {
bool foundIt = false; bool foundIt = false;
for (int idx = 0; idx < length && !foundIt; ++idx) { for (int idx = 0; idx < length && !foundIt; ++idx) {
v8::Local<v8::Value> entry = destArray->Get(destFunctionContext, idx).ToLocalChecked(); v8::Local<v8::Value> entry = destArray->Get(destFunctionContext, idx).ToLocalChecked();
newArray->Set(destFunctionContext, idx, entry); if (!newArray->Set(destFunctionContext, idx, entry).FromMaybe(false)) {
Q_ASSERT(false);
}
}
if (!newArray->Set(destFunctionContext, length, v8ThisObject.get()).FromMaybe(false)) {
Q_ASSERT(false);
}
if (!destFunction->Set(destFunctionContext, destDataName, newArray).FromMaybe(false)) {
Q_ASSERT(false);
} }
newArray->Set(destFunctionContext, length, v8ThisObject.get());
destFunction->Set(destFunctionContext, destDataName, newArray);
} else { } else {
v8::Local<v8::Array> newArray = v8::Array::New(isolate, 1); v8::Local<v8::Array> newArray = v8::Array::New(isolate, 1);
newArray->Set(destFunctionContext, 0, v8ThisObject.get()); if (!newArray->Set(destFunctionContext, 0, v8ThisObject.get()).FromMaybe(false)) {
destFunction->Set(destFunctionContext, destDataName, newArray); Q_ASSERT(false);
}
if (destFunction->Set(destFunctionContext, destDataName, newArray).FromMaybe(false)) {
Q_ASSERT(false);
}
} }
/*{ /*{
V8ScriptValueList args; V8ScriptValueList args;
@ -1245,12 +1255,16 @@ void ScriptSignalV8Proxy::disconnect(ScriptValue arg0, ScriptValue arg1) {
//args << idx << 1; //args << idx << 1;
//destData.property("splice").call(destData, args); //destData.property("splice").call(destData, args);
} else { } else {
newArray->Set(destFunctionContext, newIndex, entry); if (!newArray->Set(destFunctionContext, newIndex, entry).FromMaybe(false)) {
Q_ASSERT(false);
}
newIndex++; newIndex++;
} }
} }
Q_ASSERT(foundIt); Q_ASSERT(foundIt);
destFunction->Set(destFunctionContext, destDataName, newArray); if (!destFunction->Set(destFunctionContext, destDataName, newArray).FromMaybe(false)) {
Q_ASSERT(false);
}
} else { } else {
Q_ASSERT(false); Q_ASSERT(false);
} }

View file

@ -47,7 +47,7 @@ bool ScriptProgramV8Wrapper::compile() {
int errorLineNumber = 0; int errorLineNumber = 0;
QString errorMessage = ""; QString errorMessage = "";
QString errorBacktrace = ""; QString errorBacktrace = "";
ScriptSyntaxCheckResult::State state; //ScriptSyntaxCheckResult::State state;
v8::TryCatch tryCatch(isolate); v8::TryCatch tryCatch(isolate);
v8::ScriptOrigin scriptOrigin(isolate, v8::String::NewFromUtf8(isolate, _url.toStdString().c_str()).ToLocalChecked()); v8::ScriptOrigin scriptOrigin(isolate, v8::String::NewFromUtf8(isolate, _url.toStdString().c_str()).ToLocalChecked());
v8::Local<v8::Script> script; v8::Local<v8::Script> script;

View file

@ -77,7 +77,7 @@ V8ScriptValue V8ScriptValueIterator::value() {
ScriptValue::PropertyFlags ScriptValueIteratorV8Wrapper::flags() const { ScriptValue::PropertyFlags ScriptValueIteratorV8Wrapper::flags() const {
//V8TODO //V8TODO
//return (ScriptValue::PropertyFlags)(int)_value.flags(); //return (ScriptValue::PropertyFlags)(int)_value.flags();
return (ScriptValue::PropertyFlags)(0); return ScriptValue::PropertyFlags();
} }
bool ScriptValueIteratorV8Wrapper::hasNext() const { bool ScriptValueIteratorV8Wrapper::hasNext() const {

View file

@ -534,7 +534,7 @@ bool ScriptValueV8Wrapper::isBool() const {
} }
bool ScriptValueV8Wrapper::isError() const { bool ScriptValueV8Wrapper::isError() const {
auto isolate = _engine->getIsolate(); //auto isolate = _engine->getIsolate();
// Q_ASSERT(isolate->IsCurrent()); // Q_ASSERT(isolate->IsCurrent());
// v8::HandleScope handleScope(isolate); // v8::HandleScope handleScope(isolate);
// v8::Context::Scope contextScope(_engine->getContext()); // v8::Context::Scope contextScope(_engine->getContext());