diff --git a/modules/juce_core/javascript/juce_Javascript.cpp b/modules/juce_core/javascript/juce_Javascript.cpp index e74d610d4c..f86ce30023 100644 --- a/modules/juce_core/javascript/juce_Javascript.cpp +++ b/modules/juce_core/javascript/juce_Javascript.cpp @@ -102,6 +102,7 @@ struct JavascriptEngine::RootObject : public DynamicObject static bool isNumericOrUndefined (const var& v) { return v.isInt() || v.isDouble() || v.isInt64() || v.isBool() || v.isUndefined(); } static int64 getOctalValue (const String& s) { BigInteger b; b.parseString (s, 8); return b.toInt64(); } static Identifier getPrototypeIdentifier() { static const Identifier i ("prototype"); return i; } + static var* getPropertyPointer (DynamicObject* o, Identifier i) { return o->getProperties().getVarPointer (i); } //============================================================================== struct CodeLocation @@ -139,13 +140,13 @@ struct JavascriptEngine::RootObject : public DynamicObject { if (DynamicObject* o = targetObject.getDynamicObject()) { - if (var* prop = o->getProperties().getVarPointer (functionName)) + if (const var* prop = getPropertyPointer (o, functionName)) return *prop; for (DynamicObject* p = o->getProperty (getPrototypeIdentifier()).getDynamicObject(); p != nullptr; p = p->getProperty (getPrototypeIdentifier()).getDynamicObject()) { - if (var* prop = p->getProperties().getVarPointer (functionName)) + if (const var* prop = getPropertyPointer (p, functionName)) return *prop; } } @@ -168,14 +169,14 @@ struct JavascriptEngine::RootObject : public DynamicObject var* findRootClassProperty (Identifier className, Identifier propName) const { if (DynamicObject* cls = root->getProperty (className).getDynamicObject()) - return cls->getProperties().getVarPointer (propName); + return getPropertyPointer (cls, propName); return nullptr; } var findSymbolInParentScopes (Identifier name) const { - if (var* v = scope->getProperties().getVarPointer (name)) + if (const var* v = getPropertyPointer (scope, name)) return *v; return parent != nullptr ? parent->findSymbolInParentScopes (name) @@ -184,13 +185,11 @@ struct JavascriptEngine::RootObject : public DynamicObject bool findAndInvokeMethod (Identifier function, const var::NativeFunctionArgs& args, var& result) const { - const NamedValueSet& props = scope->getProperties(); - DynamicObject* target = args.thisObject.getDynamicObject(); if (target == nullptr || target == scope) { - if (const var* m = props.getVarPointer (function)) + if (const var* m = getPropertyPointer (scope, function)) { if (FunctionObject* fo = dynamic_cast (m->getObject())) { @@ -200,6 +199,8 @@ struct JavascriptEngine::RootObject : public DynamicObject } } + const NamedValueSet& props = scope->getProperties(); + for (int i = 0; i < props.size(); ++i) if (DynamicObject* o = props.getValueAt (i).getDynamicObject()) if (Scope (this, root, o).findAndInvokeMethod (function, args, result)) @@ -353,7 +354,7 @@ struct JavascriptEngine::RootObject : public DynamicObject void assign (const Scope& s, const var& newValue) const override { - if (var* v = s.scope->getProperties().getVarPointer (name)) + if (var* v = getPropertyPointer (s.scope, name)) *v = newValue; else s.root->setProperty (name, newValue); @@ -378,7 +379,7 @@ struct JavascriptEngine::RootObject : public DynamicObject } if (DynamicObject* o = p.getDynamicObject()) - if (var* v = o->getProperties().getVarPointer (child)) + if (const var* v = getPropertyPointer (o, child)) return *v; return var::undefined();