Changeset 156668 in webkit
- Timestamp:
- Sep 30, 2013 11:58:51 AM (11 years ago)
- Location:
- trunk/Source
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r156654 r156668 1 2013-09-30 Andreas Kling <akling@apple.com> 2 3 Pass VM instead of JSGlobalObject to RegExp constructor. 4 <https://webkit.org/b/122113> 5 6 Reviewed by Darin Adler. 7 8 RegExps don't need anything from the global object during their 9 construction and only use it to get to the VM. Reduce loads by 10 simply passing the VM around instead. 11 12 JSC release binary size -= 120 bytes(!) 13 1 14 2013-09-30 Patrick Gansterer <paroga@webkit.org> 2 15 -
trunk/Source/JavaScriptCore/dfg/DFGOperations.cpp
r156602 r156668 752 752 RegExp* regexp = static_cast<RegExp*>(regexpPtr); 753 753 if (!regexp->isValid()) { 754 exec->vm().throwException(exec, createSyntaxError(exec, "Invalid flags supplied to RegExp constructor."));754 vm.throwException(exec, createSyntaxError(exec, "Invalid flags supplied to RegExp constructor.")); 755 755 return JSValue::encode(jsUndefined()); 756 756 } 757 757 758 return JSValue::encode(RegExpObject::create( exec->vm(), exec->lexicalGlobalObject(), exec->lexicalGlobalObject()->regExpStructure(), regexp));758 return JSValue::encode(RegExpObject::create(vm, exec->lexicalGlobalObject()->regExpStructure(), regexp)); 759 759 } 760 760 -
trunk/Source/JavaScriptCore/jit/JITStubs.cpp
r156602 r156668 1949 1949 } 1950 1950 1951 return RegExpObject::create(*stackFrame.vm, stackFrame.callFrame->lexicalGlobalObject() , stackFrame.callFrame->lexicalGlobalObject()->regExpStructure(), regExp);1951 return RegExpObject::create(*stackFrame.vm, stackFrame.callFrame->lexicalGlobalObject()->regExpStructure(), regExp); 1952 1952 } 1953 1953 -
trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp
r156602 r156668 477 477 if (!regExp->isValid()) 478 478 LLINT_THROW(createSyntaxError(exec, "Invalid flag supplied to RegExp constructor.")); 479 LLINT_RETURN(RegExpObject::create(vm, exec->lexicalGlobalObject() , exec->lexicalGlobalObject()->regExpStructure(), regExp));479 LLINT_RETURN(RegExpObject::create(vm, exec->lexicalGlobalObject()->regExpStructure(), regExp)); 480 480 } 481 481 -
trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp
r156624 r156668 299 299 RegExp* emptyRegex = RegExp::create(vm, "", NoFlags); 300 300 301 m_regExpPrototype.set(vm, this, RegExpPrototype::create( exec, this, RegExpPrototype::createStructure(vm, this, m_objectPrototype.get()), emptyRegex));301 m_regExpPrototype.set(vm, this, RegExpPrototype::create(vm, RegExpPrototype::createStructure(vm, this, m_objectPrototype.get()), emptyRegex)); 302 302 m_regExpStructure.set(vm, this, RegExpObject::createStructure(vm, this, m_regExpPrototype.get())); 303 303 -
trunk/Source/JavaScriptCore/runtime/RegExpConstructor.cpp
r156624 r156668 261 261 if (callAsConstructor) { 262 262 RegExp* regExp = static_cast<RegExpObject*>(asObject(arg0))->regExp(); 263 return RegExpObject::create(exec , globalObject, globalObject->regExpStructure(), regExp);263 return RegExpObject::create(exec->vm(), globalObject->regExpStructure(), regExp); 264 264 } 265 265 return asObject(arg0); … … 279 279 } 280 280 281 RegExp* regExp = RegExp::create(exec->vm(), pattern, flags); 281 VM& vm = exec->vm(); 282 RegExp* regExp = RegExp::create(vm, pattern, flags); 282 283 if (!regExp->isValid()) 283 return exec->vm().throwException(exec, createSyntaxError(exec, regExp->errorMessage()));284 return RegExpObject::create( exec, exec->lexicalGlobalObject(), globalObject->regExpStructure(), regExp);284 return vm.throwException(exec, createSyntaxError(exec, regExp->errorMessage())); 285 return RegExpObject::create(vm, globalObject->regExpStructure(), regExp); 285 286 } 286 287 -
trunk/Source/JavaScriptCore/runtime/RegExpObject.cpp
r155143 r156668 64 64 */ 65 65 66 RegExpObject::RegExpObject( JSGlobalObject* globalObject, Structure* structure, RegExp* regExp)67 : JSNonFinalObject( globalObject->vm(), structure)68 , m_regExp( globalObject->vm(), this, regExp)66 RegExpObject::RegExpObject(VM& vm, Structure* structure, RegExp* regExp) 67 : JSNonFinalObject(vm, structure) 68 , m_regExp(vm, this, regExp) 69 69 , m_lastIndexIsWritable(true) 70 70 { … … 72 72 } 73 73 74 void RegExpObject::finishCreation( JSGlobalObject* globalObject)75 { 76 Base::finishCreation( globalObject->vm());74 void RegExpObject::finishCreation(VM& vm) 75 { 76 Base::finishCreation(vm); 77 77 ASSERT(inherits(info())); 78 78 } -
trunk/Source/JavaScriptCore/runtime/RegExpObject.h
r154422 r156668 31 31 typedef JSNonFinalObject Base; 32 32 33 static RegExpObject* create( ExecState* exec, JSGlobalObject* globalObject, Structure* structure, RegExp* regExp)33 static RegExpObject* create(VM& vm, Structure* structure, RegExp* regExp) 34 34 { 35 RegExpObject* object = new (NotNull, allocateCell<RegExpObject>(*exec->heap())) RegExpObject(globalObject, structure, regExp); 36 object->finishCreation(globalObject); 37 return object; 38 } 39 40 static RegExpObject* create(VM& vm, JSGlobalObject* globalObject, Structure* structure, RegExp* regExp) 41 { 42 RegExpObject* object = new (NotNull, allocateCell<RegExpObject>(vm.heap)) RegExpObject(globalObject, structure, regExp); 43 object->finishCreation(globalObject); 35 RegExpObject* object = new (NotNull, allocateCell<RegExpObject>(vm.heap)) RegExpObject(vm, structure, regExp); 36 object->finishCreation(vm); 44 37 return object; 45 38 } … … 82 75 83 76 protected: 84 JS_EXPORT_PRIVATE RegExpObject( JSGlobalObject*, Structure*, RegExp*);85 JS_EXPORT_PRIVATE void finishCreation( JSGlobalObject*);77 JS_EXPORT_PRIVATE RegExpObject(VM&, Structure*, RegExp*); 78 JS_EXPORT_PRIVATE void finishCreation(VM&); 86 79 87 80 static const unsigned StructureFlags = OverridesVisitChildren | OverridesGetOwnPropertySlot | Base::StructureFlags; -
trunk/Source/JavaScriptCore/runtime/RegExpPrototype.cpp
r154373 r156668 61 61 */ 62 62 63 RegExpPrototype::RegExpPrototype( JSGlobalObject* globalObject, Structure* structure, RegExp* regExp)64 : RegExpObject( globalObject, structure, regExp)63 RegExpPrototype::RegExpPrototype(VM& vm, Structure* structure, RegExp* regExp) 64 : RegExpObject(vm, structure, regExp) 65 65 { 66 66 } -
trunk/Source/JavaScriptCore/runtime/RegExpPrototype.h
r154373 r156668 31 31 typedef RegExpObject Base; 32 32 33 static RegExpPrototype* create( ExecState* exec, JSGlobalObject* globalObject, Structure* structure, RegExp* regExp)33 static RegExpPrototype* create(VM& vm, Structure* structure, RegExp* regExp) 34 34 { 35 RegExpPrototype* prototype = new (NotNull, allocateCell<RegExpPrototype>( *exec->heap())) RegExpPrototype(globalObject, structure, regExp);36 prototype->finishCreation( globalObject);35 RegExpPrototype* prototype = new (NotNull, allocateCell<RegExpPrototype>(vm.heap)) RegExpPrototype(vm, structure, regExp); 36 prototype->finishCreation(vm); 37 37 return prototype; 38 38 } … … 46 46 47 47 protected: 48 RegExpPrototype( JSGlobalObject*, Structure*, RegExp*);48 RegExpPrototype(VM&, Structure*, RegExp*); 49 49 static const unsigned StructureFlags = OverridesGetOwnPropertySlot | RegExpObject::StructureFlags; 50 50 -
trunk/Source/WebCore/bindings/js/SerializedScriptValue.cpp
r156620 r156668 1610 1610 RegExpFlags reFlags = regExpFlags(flags->string()); 1611 1611 ASSERT(reFlags != InvalidFlags); 1612 RegExp* regExp = RegExp::create(m_exec->vm(), pattern->string(), reFlags); 1613 return RegExpObject::create(m_exec, m_exec->lexicalGlobalObject(), m_globalObject->regExpStructure(), regExp); 1612 VM& vm = m_exec->vm(); 1613 RegExp* regExp = RegExp::create(vm, pattern->string(), reFlags); 1614 return RegExpObject::create(vm, m_globalObject->regExpStructure(), regExp); 1614 1615 } 1615 1616 case ObjectReferenceTag: {
Note: See TracChangeset
for help on using the changeset viewer.