| @@ -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<FunctionObject*> (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(); | |||