Changeset 195876 in webkit
- Timestamp:
- Jan 29, 2016 6:05:17 PM (8 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r195865 r195876 1 2016-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 1 27 2016-01-29 Saam barati <sbarati@apple.com> 2 28 -
trunk/Source/JavaScriptCore/bytecode/ExecutableInfo.h
r195862 r195876 31 31 namespace JSC { 32 32 33 enum class DerivedContextType { None, DerivedConstructorContext, DerivedMethodContext };33 enum class DerivedContextType : uint8_t { None, DerivedConstructorContext, DerivedMethodContext }; 34 34 35 35 // FIXME: These flags, ParserModes and propagation to XXXCodeBlocks should be reorganized. -
trunk/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp
r195862 r195876 81 81 UnlinkedFunctionExecutable::UnlinkedFunctionExecutable(VM* vm, Structure* structure, const SourceCode& source, RefPtr<SourceProvider>&& sourceOverride, FunctionMetadataNode* node, UnlinkedFunctionKind kind, ConstructAbility constructAbility, VariableEnvironment& parentScopeTDZVariables, DerivedContextType derivedContextType) 82 82 : Base(*vm, structure) 83 , m_name(node->ident())84 , m_inferredName(node->inferredName())85 , m_sourceOverride(WTFMove(sourceOverride))86 83 , m_firstLineOffset(node->firstLine() - source.firstLine()) 87 84 , m_lineCount(node->lastLine() - node->firstLine()) … … 95 92 , m_typeProfilingEndOffset(node->startStartOffset() + node->source().length() - 1) 96 93 , m_parameterCount(node->parameterCount()) 97 , m_parseMode(node->parseMode())98 94 , m_features(0) 99 95 , m_isInStrictContext(node->isInStrictContext()) … … 105 101 , m_superBinding(static_cast<unsigned>(node->superBinding())) 106 102 , 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)) 107 107 { 108 108 ASSERT(m_constructorKind == static_cast<unsigned>(node->constructorKind())); -
trunk/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.h
r194496 r195876 80 80 void setNameValue(VM& vm, JSString* nameValue) { m_nameValue.set(vm, this, nameValue); } 81 81 unsigned parameterCount() const { return m_parameterCount; }; 82 SourceParseMode parseMode() const { return m_parseMode; };82 SourceParseMode parseMode() const { return static_cast<SourceParseMode>(m_sourceParseMode); }; 83 83 bool isInStrictContext() const { return m_isInStrictContext; } 84 84 FunctionMode functionMode() const { return static_cast<FunctionMode>(m_functionMode); } … … 129 129 const VariableEnvironment* parentScopeTDZVariables() const { return &m_parentScopeTDZVariables; } 130 130 131 bool isArrowFunction() const { return m_parseMode== SourceParseMode::ArrowFunctionMode; }131 bool isArrowFunction() const { return parseMode() == SourceParseMode::ArrowFunctionMode; } 132 132 133 133 JSC::DerivedContextType derivedContextType() const {return static_cast<JSC::DerivedContextType>(m_derivedContextType); } … … 136 136 UnlinkedFunctionExecutable(VM*, Structure*, const SourceCode&, RefPtr<SourceProvider>&& sourceOverride, FunctionMetadataNode*, UnlinkedFunctionKind, ConstructAbility, VariableEnvironment&, JSC::DerivedContextType); 137 137 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;146 138 unsigned m_firstLineOffset; 147 139 unsigned m_lineCount; … … 155 147 unsigned m_typeProfilingEndOffset; 156 148 unsigned m_parameterCount; 157 SourceParseMode m_parseMode;158 159 149 CodeFeatures m_features; 160 161 150 unsigned m_isInStrictContext : 1; 162 151 unsigned m_hasCapturedVariables : 1; … … 167 156 unsigned m_superBinding : 1; 168 157 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; 169 169 170 170 protected: -
trunk/Source/JavaScriptCore/parser/ParserModes.h
r193766 r195876 45 45 enum FunctionMode { FunctionExpression, FunctionDeclaration }; 46 46 47 enum class SourceParseMode {47 enum class SourceParseMode : uint8_t { 48 48 NormalFunctionMode, 49 49 GeneratorBodyMode, … … 146 146 } 147 147 148 typedef u nsignedCodeFeatures;148 typedef uint16_t CodeFeatures; 149 149 150 150 const CodeFeatures NoFeatures = 0; -
trunk/Source/JavaScriptCore/runtime/Executable.cpp
r195799 r195876 134 134 ScriptExecutable::ScriptExecutable(Structure* structure, VM& vm, const SourceCode& source, bool isInStrictContext, DerivedContextType derivedContextType, bool isInArrowFunctionContext) 135 135 : ExecutableBase(vm, structure, NUM_PARAMETERS_NOT_COMPILED) 136 , m_source(source)137 136 , m_features(isInStrictContext ? StrictModeFeature : 0) 137 , m_didTryToEnterInLoop(false) 138 138 , m_hasCapturedVariables(false) 139 139 , m_neverInline(false) 140 , m_didTryToEnterInLoop(false) 141 , m_derivedContextType(derivedContextType) 140 , m_neverOptimize(false) 142 141 , m_isArrowFunctionContext(isInArrowFunctionContext) 142 , m_derivedContextType(static_cast<unsigned>(derivedContextType)) 143 143 , m_overrideLineNumber(-1) 144 144 , m_firstLine(-1) … … 148 148 , m_typeProfilingStartOffset(UINT_MAX) 149 149 , m_typeProfilingEndOffset(UINT_MAX) 150 , m_source(source) 150 151 { 151 152 } -
trunk/Source/JavaScriptCore/runtime/Executable.h
r195862 r195876 351 351 bool isArrowFunctionContext() const { return m_isArrowFunctionContext; } 352 352 bool isStrictMode() const { return m_features & StrictModeFeature; } 353 DerivedContextType derivedContextType() const { return m_derivedContextType; }353 DerivedContextType derivedContextType() const { return static_cast<DerivedContextType>(m_derivedContextType); } 354 354 355 355 ECMAMode ecmaMode() const { return isStrictMode() ? StrictMode : NotStrictMode; } … … 414 414 } 415 415 416 SourceCode m_source;417 416 CodeFeatures m_features; 418 bool m_hasCapturedVariables;419 bool m_neverInline;420 bool m_neverOptimize { false };421 417 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 424 424 int m_overrideLineNumber; 425 425 int m_firstLine; … … 429 429 unsigned m_typeProfilingStartOffset; 430 430 unsigned m_typeProfilingEndOffset; 431 SourceCode m_source; 431 432 }; 432 433 … … 700 701 friend class ScriptExecutable; 701 702 703 unsigned m_parametersStartOffset; 702 704 WriteBarrier<UnlinkedFunctionExecutable> m_unlinkedExecutable; 703 705 WriteBarrier<FunctionCodeBlock> m_codeBlockForCall; 704 706 WriteBarrier<FunctionCodeBlock> m_codeBlockForConstruct; 705 707 RefPtr<TypeSet> m_returnStatementTypeSet; 706 unsigned m_parametersStartOffset;707 708 WriteBarrier<InferredValue> m_singletonFunction; 708 709 };
Note: See TracChangeset
for help on using the changeset viewer.