mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 20:23:06 +02:00
identify the largest number of parameters any of our method overrides accept and discard script parameters beyond that count
This commit is contained in:
parent
baf8aef694
commit
71ce8b6bf2
2 changed files with 12 additions and 5 deletions
|
@ -205,9 +205,11 @@ void ScriptObjectQtProxy::investigate() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
int parameterCount = method.parameterCount();
|
||||||
if (nameLookup == methodNames.end()) {
|
if (nameLookup == methodNames.end()) {
|
||||||
MethodDef& methodDef = _methods.insert(idx, MethodDef()).value();
|
MethodDef& methodDef = _methods.insert(idx, MethodDef()).value();
|
||||||
methodDef.name = name;
|
methodDef.name = name;
|
||||||
|
methodDef.numMaxParms = parameterCount;
|
||||||
methodDef.methods.append(method);
|
methodDef.methods.append(method);
|
||||||
methodNames.insert(name, idx);
|
methodNames.insert(name, idx);
|
||||||
} else {
|
} else {
|
||||||
|
@ -215,6 +217,7 @@ void ScriptObjectQtProxy::investigate() {
|
||||||
MethodDefMap::iterator methodLookup = _methods.find(originalMethodId);
|
MethodDefMap::iterator methodLookup = _methods.find(originalMethodId);
|
||||||
Q_ASSERT(methodLookup != _methods.end());
|
Q_ASSERT(methodLookup != _methods.end());
|
||||||
MethodDef& methodDef = methodLookup.value();
|
MethodDef& methodDef = methodLookup.value();
|
||||||
|
if(methodDef.numMaxParms < parameterCount) methodDef.numMaxParms = parameterCount;
|
||||||
methodDef.methods.append(method);
|
methodDef.methods.append(method);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -312,8 +315,9 @@ QScriptValue ScriptObjectQtProxy::property(const QScriptValue& object, const QSc
|
||||||
int methodId = id & ~TYPE_MASK;
|
int methodId = id & ~TYPE_MASK;
|
||||||
MethodDefMap::const_iterator lookup = _methods.find(methodId);
|
MethodDefMap::const_iterator lookup = _methods.find(methodId);
|
||||||
if (lookup == _methods.cend()) return QScriptValue();
|
if (lookup == _methods.cend()) return QScriptValue();
|
||||||
|
const MethodDef& methodDef = lookup.value();
|
||||||
return static_cast<QScriptEngine*>(_engine)->newObject(
|
return static_cast<QScriptEngine*>(_engine)->newObject(
|
||||||
new ScriptMethodQtProxy(_engine, qobject, object, lookup.value().methods));
|
new ScriptMethodQtProxy(_engine, qobject, object, methodDef.methods, methodDef.numMaxParms));
|
||||||
}
|
}
|
||||||
case SIGNAL_TYPE: {
|
case SIGNAL_TYPE: {
|
||||||
int signalId = id & ~TYPE_MASK;
|
int signalId = id & ~TYPE_MASK;
|
||||||
|
@ -430,8 +434,7 @@ QVariant ScriptMethodQtProxy::extension(Extension extension, const QVariant& arg
|
||||||
}
|
}
|
||||||
|
|
||||||
int scriptNumArgs = context->argumentCount();
|
int scriptNumArgs = context->argumentCount();
|
||||||
Q_ASSERT(scriptNumArgs < 10);
|
int numArgs = std::min(scriptNumArgs, _numMaxParms);
|
||||||
int numArgs = std::min(scriptNumArgs, 10);
|
|
||||||
|
|
||||||
const int scriptValueTypeId = qMetaTypeId<ScriptValue>();
|
const int scriptValueTypeId = qMetaTypeId<ScriptValue>();
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,7 @@ private: // implementation
|
||||||
};
|
};
|
||||||
struct MethodDef {
|
struct MethodDef {
|
||||||
QScriptString name;
|
QScriptString name;
|
||||||
|
int numMaxParms;
|
||||||
QList<QMetaMethod> methods;
|
QList<QMetaMethod> methods;
|
||||||
};
|
};
|
||||||
struct SignalDef {
|
struct SignalDef {
|
||||||
|
@ -137,8 +138,10 @@ private: // storage
|
||||||
|
|
||||||
class ScriptMethodQtProxy final : public QScriptClass {
|
class ScriptMethodQtProxy final : public QScriptClass {
|
||||||
public: // construction
|
public: // construction
|
||||||
inline ScriptMethodQtProxy(ScriptEngineQtScript* engine, QObject* object, QScriptValue lifetime, const QList<QMetaMethod>& metas) :
|
inline ScriptMethodQtProxy(ScriptEngineQtScript* engine, QObject* object, QScriptValue lifetime,
|
||||||
QScriptClass(engine), _engine(engine), _object(object), _objectLifetime(lifetime), _metas(metas) {}
|
const QList<QMetaMethod>& metas, int numMaxParms) :
|
||||||
|
QScriptClass(engine),
|
||||||
|
_engine(engine), _object(object), _objectLifetime(lifetime), _metas(metas), _numMaxParms(numMaxParms) {}
|
||||||
|
|
||||||
public: // QScriptClass implementation
|
public: // QScriptClass implementation
|
||||||
virtual QString name() const override { return fullName(); }
|
virtual QString name() const override { return fullName(); }
|
||||||
|
@ -149,6 +152,7 @@ private:
|
||||||
QString fullName() const;
|
QString fullName() const;
|
||||||
|
|
||||||
private: // storage
|
private: // storage
|
||||||
|
const int _numMaxParms;
|
||||||
ScriptEngineQtScript* _engine;
|
ScriptEngineQtScript* _engine;
|
||||||
QPointer<QObject> _object;
|
QPointer<QObject> _object;
|
||||||
QScriptValue _objectLifetime;
|
QScriptValue _objectLifetime;
|
||||||
|
|
Loading…
Reference in a new issue