SVN commit 1191996 by orlovich: Make sure to give global constructors like Object, String, etc., global names, since at least one crazily overengineered marshalling system uses them as keys. Fixes search on devexpress.com support center. BUG: 255661 FIXED-IN: 4.5.3 M +23 -15 interpreter.cpp M +3 -0 interpreter.h --- trunk/KDE/kdelibs/kjs/interpreter.cpp #1191995:1191996 @@ -343,6 +343,14 @@ return m_globalObject; } +void Interpreter::putNamedConstructor(const char* name, JSObject* value) +{ + assert(value->implementsCall()); + Identifier i(name); + m_globalObject->put(&m_globalExec, i, value, DontEnum); + static_cast(value)->setFunctionName(i); +} + void Interpreter::initGlobalObject() { FunctionPrototype *funcProto = new FunctionPrototype(&m_globalExec); @@ -401,21 +409,21 @@ // ECMA 15.3.4.1 funcProto->put(&m_globalExec, m_globalExec.propertyNames().constructor, m_Function, DontEnum); - m_globalObject->put(&m_globalExec, "Object", m_Object, DontEnum); - m_globalObject->put(&m_globalExec, "Function", m_Function, DontEnum); - m_globalObject->put(&m_globalExec, "Array", m_Array, DontEnum); - m_globalObject->put(&m_globalExec, "Boolean", m_Boolean, DontEnum); - m_globalObject->put(&m_globalExec, "String", m_String, DontEnum); - m_globalObject->put(&m_globalExec, "Number", m_Number, DontEnum); - m_globalObject->put(&m_globalExec, "Date", m_Date, DontEnum); - m_globalObject->put(&m_globalExec, "RegExp", m_RegExp, DontEnum); - m_globalObject->put(&m_globalExec, "Error", m_Error, DontEnum); - m_globalObject->put(&m_globalExec, "EvalError",m_EvalError, DontEnum); - m_globalObject->put(&m_globalExec, "RangeError",m_RangeError, DontEnum); - m_globalObject->put(&m_globalExec, "ReferenceError",m_ReferenceError, DontEnum); - m_globalObject->put(&m_globalExec, "SyntaxError",m_SyntaxError, DontEnum); - m_globalObject->put(&m_globalExec, "TypeError",m_TypeError, DontEnum); - m_globalObject->put(&m_globalExec, "URIError",m_UriError, DontEnum); + putNamedConstructor("Object", m_Object); + putNamedConstructor("Function", m_Function); + putNamedConstructor("Array", m_Array); + putNamedConstructor("Boolean", m_Boolean); + putNamedConstructor("String", m_String); + putNamedConstructor("Number", m_Number); + putNamedConstructor("Date", m_Date); + putNamedConstructor("RegExp", m_RegExp); + putNamedConstructor("Error", m_Error); + putNamedConstructor("EvalError",m_EvalError); + putNamedConstructor("RangeError",m_RangeError); + putNamedConstructor("ReferenceError",m_ReferenceError); + putNamedConstructor("SyntaxError",m_SyntaxError); + putNamedConstructor("TypeError",m_TypeError); + putNamedConstructor("URIError",m_UriError); // Set the constructorPropertyName property of all builtin constructors objProto->put(&m_globalExec, m_globalExec.propertyNames().constructor, m_Object, DontEnum | DontDelete | ReadOnly); --- trunk/KDE/kdelibs/kjs/interpreter.h #1191995:1191996 @@ -460,6 +460,9 @@ unsigned m_startTimeoutCheckCount; unsigned m_pauseTimeoutCheckCount; + // Helper for setting constructors, making sure their function names are OK + void putNamedConstructor(const char* name, JSObject* value); + ProtectedPtr m_Object; ProtectedPtr m_Function; ProtectedPtr m_Array;