Changeset 156668 in webkit


Ignore:
Timestamp:
Sep 30, 2013 11:58:51 AM (11 years ago)
Author:
akling@apple.com
Message:

Pass VM instead of JSGlobalObject to RegExp constructor.
<https://webkit.org/b/122113>

Reviewed by Darin Adler.

RegExps don't need anything from the global object during their
construction and only use it to get to the VM. Reduce loads by
simply passing the VM around instead.

JSC release binary size -= 120 bytes(!)

Location:
trunk/Source
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r156654 r156668  
     12013-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
    1142013-09-30  Patrick Gansterer  <paroga@webkit.org>
    215
  • trunk/Source/JavaScriptCore/dfg/DFGOperations.cpp

    r156602 r156668  
    752752    RegExp* regexp = static_cast<RegExp*>(regexpPtr);
    753753    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."));
    755755        return JSValue::encode(jsUndefined());
    756756    }
    757757   
    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));
    759759}
    760760
  • trunk/Source/JavaScriptCore/jit/JITStubs.cpp

    r156602 r156668  
    19491949    }
    19501950
    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);
    19521952}
    19531953
  • trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp

    r156602 r156668  
    477477    if (!regExp->isValid())
    478478        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));
    480480}
    481481
  • trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp

    r156624 r156668  
    299299    RegExp* emptyRegex = RegExp::create(vm, "", NoFlags);
    300300   
    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));
    302302    m_regExpStructure.set(vm, this, RegExpObject::createStructure(vm, this, m_regExpPrototype.get()));
    303303
  • trunk/Source/JavaScriptCore/runtime/RegExpConstructor.cpp

    r156624 r156668  
    261261        if (callAsConstructor) {
    262262            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);
    264264        }
    265265        return asObject(arg0);
     
    279279    }
    280280
    281     RegExp* regExp = RegExp::create(exec->vm(), pattern, flags);
     281    VM& vm = exec->vm();
     282    RegExp* regExp = RegExp::create(vm, pattern, flags);
    282283    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);
    285286}
    286287
  • trunk/Source/JavaScriptCore/runtime/RegExpObject.cpp

    r155143 r156668  
    6464*/
    6565
    66 RegExpObject::RegExpObject(JSGlobalObject* globalObject, Structure* structure, RegExp* regExp)
    67     : JSNonFinalObject(globalObject->vm(), structure)
    68     , m_regExp(globalObject->vm(), this, regExp)
     66RegExpObject::RegExpObject(VM& vm, Structure* structure, RegExp* regExp)
     67    : JSNonFinalObject(vm, structure)
     68    , m_regExp(vm, this, regExp)
    6969    , m_lastIndexIsWritable(true)
    7070{
     
    7272}
    7373
    74 void RegExpObject::finishCreation(JSGlobalObject* globalObject)
    75 {
    76     Base::finishCreation(globalObject->vm());
     74void RegExpObject::finishCreation(VM& vm)
     75{
     76    Base::finishCreation(vm);
    7777    ASSERT(inherits(info()));
    7878}
  • trunk/Source/JavaScriptCore/runtime/RegExpObject.h

    r154422 r156668  
    3131        typedef JSNonFinalObject Base;
    3232
    33         static RegExpObject* create(ExecState* exec, JSGlobalObject* globalObject, Structure* structure, RegExp* regExp)
     33        static RegExpObject* create(VM& vm, Structure* structure, RegExp* regExp)
    3434        {
    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);
    4437            return object;
    4538        }
     
    8275
    8376    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&);
    8679
    8780        static const unsigned StructureFlags = OverridesVisitChildren | OverridesGetOwnPropertySlot | Base::StructureFlags;
  • trunk/Source/JavaScriptCore/runtime/RegExpPrototype.cpp

    r154373 r156668  
    6161*/
    6262
    63 RegExpPrototype::RegExpPrototype(JSGlobalObject* globalObject, Structure* structure, RegExp* regExp)
    64     : RegExpObject(globalObject, structure, regExp)
     63RegExpPrototype::RegExpPrototype(VM& vm, Structure* structure, RegExp* regExp)
     64    : RegExpObject(vm, structure, regExp)
    6565{
    6666}
  • trunk/Source/JavaScriptCore/runtime/RegExpPrototype.h

    r154373 r156668  
    3131        typedef RegExpObject Base;
    3232
    33         static RegExpPrototype* create(ExecState* exec, JSGlobalObject* globalObject, Structure* structure, RegExp* regExp)
     33        static RegExpPrototype* create(VM& vm, Structure* structure, RegExp* regExp)
    3434        {
    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);
    3737            return prototype;
    3838        }
     
    4646
    4747    protected:
    48         RegExpPrototype(JSGlobalObject*, Structure*, RegExp*);
     48        RegExpPrototype(VM&, Structure*, RegExp*);
    4949        static const unsigned StructureFlags = OverridesGetOwnPropertySlot | RegExpObject::StructureFlags;
    5050
  • trunk/Source/WebCore/bindings/js/SerializedScriptValue.cpp

    r156620 r156668  
    16101610            RegExpFlags reFlags = regExpFlags(flags->string());
    16111611            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);
    16141615        }
    16151616        case ObjectReferenceTag: {
Note: See TracChangeset for help on using the changeset viewer.