Changeset 195876 in webkit


Ignore:
Timestamp:
Jan 29, 2016 6:05:17 PM (8 years ago)
Author:
sbarati@apple.com
Message:

Pack FunctionExecutable and UnlinkedFunctionExecutable harder
https://bugs.webkit.org/show_bug.cgi?id=153687

Reviewed by Andreas Kling.

This patch reduces FunctionExecutable from 120 to 104 bytes.
This patch reduces UnlinkedFunctionExecutable from 144 to 136 bytes.

  • bytecode/ExecutableInfo.h:
  • bytecode/UnlinkedFunctionExecutable.cpp:

(JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):

  • bytecode/UnlinkedFunctionExecutable.h:
  • parser/ParserModes.h:

(JSC::functionNameScopeIsDynamic):

  • runtime/Executable.cpp:

(JSC::ScriptExecutable::ScriptExecutable):

  • runtime/Executable.h:

(JSC::ScriptExecutable::needsActivation):
(JSC::ScriptExecutable::isArrowFunctionContext):
(JSC::ScriptExecutable::isStrictMode):
(JSC::ScriptExecutable::derivedContextType):
(JSC::ScriptExecutable::ecmaMode):
(JSC::ScriptExecutable::finishCreation):

Location:
trunk/Source/JavaScriptCore
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r195865 r195876  
     12016-01-29  Saam barati  <sbarati@apple.com>
     2
     3        Pack FunctionExecutable and UnlinkedFunctionExecutable harder
     4        https://bugs.webkit.org/show_bug.cgi?id=153687
     5
     6        Reviewed by Andreas Kling.
     7
     8        This patch reduces FunctionExecutable from 120 to 104 bytes.
     9        This patch reduces UnlinkedFunctionExecutable from 144 to 136 bytes.
     10
     11        * bytecode/ExecutableInfo.h:
     12        * bytecode/UnlinkedFunctionExecutable.cpp:
     13        (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
     14        * bytecode/UnlinkedFunctionExecutable.h:
     15        * parser/ParserModes.h:
     16        (JSC::functionNameScopeIsDynamic):
     17        * runtime/Executable.cpp:
     18        (JSC::ScriptExecutable::ScriptExecutable):
     19        * runtime/Executable.h:
     20        (JSC::ScriptExecutable::needsActivation):
     21        (JSC::ScriptExecutable::isArrowFunctionContext):
     22        (JSC::ScriptExecutable::isStrictMode):
     23        (JSC::ScriptExecutable::derivedContextType):
     24        (JSC::ScriptExecutable::ecmaMode):
     25        (JSC::ScriptExecutable::finishCreation):
     26
    1272016-01-29  Saam barati  <sbarati@apple.com>
    228
  • trunk/Source/JavaScriptCore/bytecode/ExecutableInfo.h

    r195862 r195876  
    3131namespace JSC {
    3232   
    33 enum class DerivedContextType { None, DerivedConstructorContext, DerivedMethodContext };
     33enum class DerivedContextType : uint8_t { None, DerivedConstructorContext, DerivedMethodContext };
    3434
    3535// FIXME: These flags, ParserModes and propagation to XXXCodeBlocks should be reorganized.
  • trunk/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp

    r195862 r195876  
    8181UnlinkedFunctionExecutable::UnlinkedFunctionExecutable(VM* vm, Structure* structure, const SourceCode& source, RefPtr<SourceProvider>&& sourceOverride, FunctionMetadataNode* node, UnlinkedFunctionKind kind, ConstructAbility constructAbility, VariableEnvironment& parentScopeTDZVariables, DerivedContextType derivedContextType)
    8282    : Base(*vm, structure)
    83     , m_name(node->ident())
    84     , m_inferredName(node->inferredName())
    85     , m_sourceOverride(WTFMove(sourceOverride))
    8683    , m_firstLineOffset(node->firstLine() - source.firstLine())
    8784    , m_lineCount(node->lastLine() - node->firstLine())
     
    9592    , m_typeProfilingEndOffset(node->startStartOffset() + node->source().length() - 1)
    9693    , m_parameterCount(node->parameterCount())
    97     , m_parseMode(node->parseMode())
    9894    , m_features(0)
    9995    , m_isInStrictContext(node->isInStrictContext())
     
    105101    , m_superBinding(static_cast<unsigned>(node->superBinding()))
    106102    , m_derivedContextType(static_cast<unsigned>(derivedContextType))
     103    , m_sourceParseMode(static_cast<unsigned>(node->parseMode()))
     104    , m_name(node->ident())
     105    , m_inferredName(node->inferredName())
     106    , m_sourceOverride(WTFMove(sourceOverride))
    107107{
    108108    ASSERT(m_constructorKind == static_cast<unsigned>(node->constructorKind()));
  • trunk/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.h

    r194496 r195876  
    8080    void setNameValue(VM& vm, JSString* nameValue) { m_nameValue.set(vm, this, nameValue); }
    8181    unsigned parameterCount() const { return m_parameterCount; };
    82     SourceParseMode parseMode() const { return m_parseMode; };
     82    SourceParseMode parseMode() const { return static_cast<SourceParseMode>(m_sourceParseMode); };
    8383    bool isInStrictContext() const { return m_isInStrictContext; }
    8484    FunctionMode functionMode() const { return static_cast<FunctionMode>(m_functionMode); }
     
    129129    const VariableEnvironment* parentScopeTDZVariables() const { return &m_parentScopeTDZVariables; }
    130130   
    131     bool isArrowFunction() const { return m_parseMode == SourceParseMode::ArrowFunctionMode; }
     131    bool isArrowFunction() const { return parseMode() == SourceParseMode::ArrowFunctionMode; }
    132132
    133133    JSC::DerivedContextType derivedContextType() const {return static_cast<JSC::DerivedContextType>(m_derivedContextType); }
     
    136136    UnlinkedFunctionExecutable(VM*, Structure*, const SourceCode&, RefPtr<SourceProvider>&& sourceOverride, FunctionMetadataNode*, UnlinkedFunctionKind, ConstructAbility, VariableEnvironment&,  JSC::DerivedContextType);
    137137
    138     WriteBarrier<UnlinkedFunctionCodeBlock> m_unlinkedCodeBlockForCall;
    139     WriteBarrier<UnlinkedFunctionCodeBlock> m_unlinkedCodeBlockForConstruct;
    140 
    141     Identifier m_name;
    142     Identifier m_inferredName;
    143     WriteBarrier<JSString> m_nameValue;
    144     RefPtr<SourceProvider> m_sourceOverride;
    145     VariableEnvironment m_parentScopeTDZVariables;
    146138    unsigned m_firstLineOffset;
    147139    unsigned m_lineCount;
     
    155147    unsigned m_typeProfilingEndOffset;
    156148    unsigned m_parameterCount;
    157     SourceParseMode m_parseMode;
    158 
    159149    CodeFeatures m_features;
    160 
    161150    unsigned m_isInStrictContext : 1;
    162151    unsigned m_hasCapturedVariables : 1;
     
    167156    unsigned m_superBinding : 1;
    168157    unsigned m_derivedContextType: 2;
     158    unsigned m_sourceParseMode : 4; // SourceParseMode
     159
     160    WriteBarrier<UnlinkedFunctionCodeBlock> m_unlinkedCodeBlockForCall;
     161    WriteBarrier<UnlinkedFunctionCodeBlock> m_unlinkedCodeBlockForConstruct;
     162
     163    Identifier m_name;
     164    Identifier m_inferredName;
     165    WriteBarrier<JSString> m_nameValue;
     166    RefPtr<SourceProvider> m_sourceOverride;
     167
     168    VariableEnvironment m_parentScopeTDZVariables;
    169169
    170170protected:
  • trunk/Source/JavaScriptCore/parser/ParserModes.h

    r193766 r195876  
    4545enum FunctionMode { FunctionExpression, FunctionDeclaration };
    4646
    47 enum class SourceParseMode {
     47enum class SourceParseMode : uint8_t {
    4848    NormalFunctionMode,
    4949    GeneratorBodyMode,
     
    146146}
    147147
    148 typedef unsigned CodeFeatures;
     148typedef uint16_t CodeFeatures;
    149149
    150150const CodeFeatures NoFeatures =                       0;
  • trunk/Source/JavaScriptCore/runtime/Executable.cpp

    r195799 r195876  
    134134ScriptExecutable::ScriptExecutable(Structure* structure, VM& vm, const SourceCode& source, bool isInStrictContext, DerivedContextType derivedContextType, bool isInArrowFunctionContext)
    135135    : ExecutableBase(vm, structure, NUM_PARAMETERS_NOT_COMPILED)
    136     , m_source(source)
    137136    , m_features(isInStrictContext ? StrictModeFeature : 0)
     137    , m_didTryToEnterInLoop(false)
    138138    , m_hasCapturedVariables(false)
    139139    , m_neverInline(false)
    140     , m_didTryToEnterInLoop(false)
    141     , m_derivedContextType(derivedContextType)
     140    , m_neverOptimize(false)
    142141    , m_isArrowFunctionContext(isInArrowFunctionContext)
     142    , m_derivedContextType(static_cast<unsigned>(derivedContextType))
    143143    , m_overrideLineNumber(-1)
    144144    , m_firstLine(-1)
     
    148148    , m_typeProfilingStartOffset(UINT_MAX)
    149149    , m_typeProfilingEndOffset(UINT_MAX)
     150    , m_source(source)
    150151{
    151152}
  • trunk/Source/JavaScriptCore/runtime/Executable.h

    r195862 r195876  
    351351    bool isArrowFunctionContext() const { return m_isArrowFunctionContext; }
    352352    bool isStrictMode() const { return m_features & StrictModeFeature; }
    353     DerivedContextType derivedContextType() const { return m_derivedContextType; }
     353    DerivedContextType derivedContextType() const { return static_cast<DerivedContextType>(m_derivedContextType); }
    354354
    355355    ECMAMode ecmaMode() const { return isStrictMode() ? StrictMode : NotStrictMode; }
     
    414414    }
    415415
    416     SourceCode m_source;
    417416    CodeFeatures m_features;
    418     bool m_hasCapturedVariables;
    419     bool m_neverInline;
    420     bool m_neverOptimize { false };
    421417    bool m_didTryToEnterInLoop;
    422     DerivedContextType m_derivedContextType;
    423     bool m_isArrowFunctionContext;
     418    bool m_hasCapturedVariables : 1;
     419    bool m_neverInline : 1;
     420    bool m_neverOptimize : 1;
     421    bool m_isArrowFunctionContext : 1;
     422    unsigned m_derivedContextType : 2; // DerivedContextType
     423
    424424    int m_overrideLineNumber;
    425425    int m_firstLine;
     
    429429    unsigned m_typeProfilingStartOffset;
    430430    unsigned m_typeProfilingEndOffset;
     431    SourceCode m_source;
    431432};
    432433
     
    700701    friend class ScriptExecutable;
    701702   
     703    unsigned m_parametersStartOffset;
    702704    WriteBarrier<UnlinkedFunctionExecutable> m_unlinkedExecutable;
    703705    WriteBarrier<FunctionCodeBlock> m_codeBlockForCall;
    704706    WriteBarrier<FunctionCodeBlock> m_codeBlockForConstruct;
    705707    RefPtr<TypeSet> m_returnStatementTypeSet;
    706     unsigned m_parametersStartOffset;
    707708    WriteBarrier<InferredValue> m_singletonFunction;
    708709};
Note: See TracChangeset for help on using the changeset viewer.