Changeset 27885 in webkit for trunk/JavaScriptCore/kjs/interpreter.cpp
- Timestamp:
- Nov 18, 2007, 1:09:27 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/interpreter.cpp
r27842 r27885 82 82 } 83 83 84 Interpreter::Interpreter(JSGlobalObject* globalObject)85 : m_currentExec(0)86 , m_globalObject(globalObject)87 , m_globalExec(this, globalObject, globalObject, 0)88 {89 init();90 }91 92 84 Interpreter::Interpreter() 93 85 : m_currentExec(0) 94 , m_globalObject( new JSGlobalObject())95 , m_globalExec(this, m_globalObject, m_globalObject, 0)86 , m_globalObject(0) 87 , m_globalExec(this, 0, 0, 0) 96 88 { 97 89 init(); … … 121 113 } 122 114 123 initGlobalObject();115 createObjectsForGlobalObjectProperties(); 124 116 } 125 117 … … 142 134 JSGlobalObject* Interpreter::globalObject() const 143 135 { 136 // Now that we delay setting of the global object, people retrieving it before it is set may be in for a nasty surprise 137 ASSERT(m_globalObject); 144 138 return m_globalObject; 145 139 } 146 140 147 void Interpreter::initGlobalObject() 148 { 149 m_globalObject->setInterpreter(this); 150 141 void Interpreter::setGlobalObject(JSGlobalObject* globalObject) 142 { 143 ASSERT(!m_globalObject); 144 ASSERT(globalObject); 145 m_globalObject = globalObject; 146 m_globalExec.setGlobalObject(globalObject); 147 148 setGlobalObjectProperties(); 149 } 150 151 void Interpreter::resetGlobalObjectProperties() 152 { 153 ASSERT(m_globalObject); 154 createObjectsForGlobalObjectProperties(); 155 setGlobalObjectProperties(); 156 } 157 158 void Interpreter::createObjectsForGlobalObjectProperties() 159 { 151 160 // Clear before inititalizing, to avoid marking uninitialized (dangerous) or 152 161 // stale (wasteful) pointers during initialization. … … 243 252 m_TypeErrorPrototype->put(&m_globalExec, m_globalExec.propertyNames().constructor, m_TypeError, DontEnum | DontDelete | ReadOnly); 244 253 m_UriErrorPrototype->put(&m_globalExec, m_globalExec.propertyNames().constructor, m_UriError, DontEnum | DontDelete | ReadOnly); 254 } 255 256 void Interpreter::setGlobalObjectProperties() 257 { 258 ASSERT(m_globalObject); 259 m_globalObject->setInterpreter(this); 245 260 246 261 // Set global object prototype … … 253 268 // FIXME: kjs_window.cpp checks Internal/DontEnum as a performance hack, to 254 269 // see that these values can be put directly without a check for override 255 // properties. Maybe we should call putDirect instead, for better encapsulation. 256 m_globalObject->put(&m_globalExec, "Object", m_Object, DontEnum); 257 m_globalObject->put(&m_globalExec, "Function", m_Function, DontEnum); 258 m_globalObject->put(&m_globalExec, "Array", m_Array, DontEnum); 259 m_globalObject->put(&m_globalExec, "Boolean", m_Boolean, DontEnum); 260 m_globalObject->put(&m_globalExec, "String", m_String, DontEnum); 261 m_globalObject->put(&m_globalExec, "Number", m_Number, DontEnum); 262 m_globalObject->put(&m_globalExec, "Date", m_Date, DontEnum); 263 m_globalObject->put(&m_globalExec, "RegExp", m_RegExp, DontEnum); 264 m_globalObject->put(&m_globalExec, "Error", m_Error, DontEnum); 265 m_globalObject->put(&m_globalExec, "EvalError",m_EvalError, Internal); 266 m_globalObject->put(&m_globalExec, "RangeError",m_RangeError, Internal); 267 m_globalObject->put(&m_globalExec, "ReferenceError",m_ReferenceError, Internal); 268 m_globalObject->put(&m_globalExec, "SyntaxError",m_SyntaxError, Internal); 269 m_globalObject->put(&m_globalExec, "TypeError",m_TypeError, Internal); 270 m_globalObject->put(&m_globalExec, "URIError",m_UriError, Internal); 270 // properties. 271 // FIXME: These properties should be handled by JSGlobalObject 272 m_globalObject->putDirect("Object", m_Object, DontEnum); 273 m_globalObject->putDirect("Function", m_Function, DontEnum); 274 m_globalObject->putDirect("Array", m_Array, DontEnum); 275 m_globalObject->putDirect("Boolean", m_Boolean, DontEnum); 276 m_globalObject->putDirect("String", m_String, DontEnum); 277 m_globalObject->putDirect("Number", m_Number, DontEnum); 278 m_globalObject->putDirect("Date", m_Date, DontEnum); 279 m_globalObject->putDirect("RegExp", m_RegExp, DontEnum); 280 m_globalObject->putDirect("Error", m_Error, DontEnum); 281 m_globalObject->putDirect("EvalError",m_EvalError, Internal); 282 m_globalObject->putDirect("RangeError",m_RangeError, Internal); 283 m_globalObject->putDirect("ReferenceError",m_ReferenceError, Internal); 284 m_globalObject->putDirect("SyntaxError",m_SyntaxError, Internal); 285 m_globalObject->putDirect("TypeError",m_TypeError, Internal); 286 m_globalObject->putDirect("URIError",m_UriError, Internal); 271 287 272 288 // Set global values 273 m_globalObject->put (&m_globalExec,"Math", new MathObjectImp(&m_globalExec, m_ObjectPrototype), DontEnum);274 m_globalObject->put (&m_globalExec,"NaN", jsNaN(), DontEnum|DontDelete);275 m_globalObject->put (&m_globalExec,"Infinity", jsNumber(Inf), DontEnum|DontDelete);276 m_globalObject->put (&m_globalExec,"undefined", jsUndefined(), DontEnum|DontDelete);289 m_globalObject->putDirect("Math", new MathObjectImp(&m_globalExec, m_ObjectPrototype), DontEnum); 290 m_globalObject->putDirect("NaN", jsNaN(), DontEnum|DontDelete); 291 m_globalObject->putDirect("Infinity", jsNumber(Inf), DontEnum|DontDelete); 292 m_globalObject->putDirect("undefined", jsUndefined(), DontEnum|DontDelete); 277 293 278 294 // Set global functions
Note:
See TracChangeset
for help on using the changeset viewer.