mirror of
https://github.com/overte-org/overte.git
synced 2025-04-08 07:12:40 +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
4d6889a677
commit
a822110a62
2 changed files with 12 additions and 5 deletions
|
@ -205,9 +205,11 @@ void ScriptObjectQtProxy::investigate() {
|
|||
}
|
||||
}
|
||||
} else {
|
||||
int parameterCount = method.parameterCount();
|
||||
if (nameLookup == methodNames.end()) {
|
||||
MethodDef& methodDef = _methods.insert(idx, MethodDef()).value();
|
||||
methodDef.name = name;
|
||||
methodDef.numMaxParms = parameterCount;
|
||||
methodDef.methods.append(method);
|
||||
methodNames.insert(name, idx);
|
||||
} else {
|
||||
|
@ -215,6 +217,7 @@ void ScriptObjectQtProxy::investigate() {
|
|||
MethodDefMap::iterator methodLookup = _methods.find(originalMethodId);
|
||||
Q_ASSERT(methodLookup != _methods.end());
|
||||
MethodDef& methodDef = methodLookup.value();
|
||||
if(methodDef.numMaxParms < parameterCount) methodDef.numMaxParms = parameterCount;
|
||||
methodDef.methods.append(method);
|
||||
}
|
||||
}
|
||||
|
@ -312,8 +315,9 @@ QScriptValue ScriptObjectQtProxy::property(const QScriptValue& object, const QSc
|
|||
int methodId = id & ~TYPE_MASK;
|
||||
MethodDefMap::const_iterator lookup = _methods.find(methodId);
|
||||
if (lookup == _methods.cend()) return QScriptValue();
|
||||
const MethodDef& methodDef = lookup.value();
|
||||
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: {
|
||||
int signalId = id & ~TYPE_MASK;
|
||||
|
@ -430,8 +434,7 @@ QVariant ScriptMethodQtProxy::extension(Extension extension, const QVariant& arg
|
|||
}
|
||||
|
||||
int scriptNumArgs = context->argumentCount();
|
||||
Q_ASSERT(scriptNumArgs < 10);
|
||||
int numArgs = std::min(scriptNumArgs, 10);
|
||||
int numArgs = std::min(scriptNumArgs, _numMaxParms);
|
||||
|
||||
const int scriptValueTypeId = qMetaTypeId<ScriptValue>();
|
||||
|
||||
|
|
|
@ -41,6 +41,7 @@ private: // implementation
|
|||
};
|
||||
struct MethodDef {
|
||||
QScriptString name;
|
||||
int numMaxParms;
|
||||
QList<QMetaMethod> methods;
|
||||
};
|
||||
struct SignalDef {
|
||||
|
@ -137,8 +138,10 @@ private: // storage
|
|||
|
||||
class ScriptMethodQtProxy final : public QScriptClass {
|
||||
public: // construction
|
||||
inline ScriptMethodQtProxy(ScriptEngineQtScript* engine, QObject* object, QScriptValue lifetime, const QList<QMetaMethod>& metas) :
|
||||
QScriptClass(engine), _engine(engine), _object(object), _objectLifetime(lifetime), _metas(metas) {}
|
||||
inline ScriptMethodQtProxy(ScriptEngineQtScript* engine, QObject* object, QScriptValue lifetime,
|
||||
const QList<QMetaMethod>& metas, int numMaxParms) :
|
||||
QScriptClass(engine),
|
||||
_engine(engine), _object(object), _objectLifetime(lifetime), _metas(metas), _numMaxParms(numMaxParms) {}
|
||||
|
||||
public: // QScriptClass implementation
|
||||
virtual QString name() const override { return fullName(); }
|
||||
|
@ -149,6 +152,7 @@ private:
|
|||
QString fullName() const;
|
||||
|
||||
private: // storage
|
||||
const int _numMaxParms;
|
||||
ScriptEngineQtScript* _engine;
|
||||
QPointer<QObject> _object;
|
||||
QScriptValue _objectLifetime;
|
||||
|
|
Loading…
Reference in a new issue