[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdelibs/kjs
From:       Maks Orlovich <maksim () kde ! org>
Date:       2010-11-01 17:04:04
Message-ID: 20101101170404.E4555AC89E () svn ! kde ! org
[Download RAW message or body]

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<InternalFunctionImp*>(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<JSObject> m_Object;
     ProtectedPtr<JSObject> m_Function;
     ProtectedPtr<JSObject> m_Array;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic