diff options
Diffstat (limited to 'Source/JavaScriptCore/parser/SourceProviderCacheItem.h')
-rw-r--r-- | Source/JavaScriptCore/parser/SourceProviderCacheItem.h | 101 |
1 files changed, 58 insertions, 43 deletions
diff --git a/Source/JavaScriptCore/parser/SourceProviderCacheItem.h b/Source/JavaScriptCore/parser/SourceProviderCacheItem.h index 396211861..eeac6fe78 100644 --- a/Source/JavaScriptCore/parser/SourceProviderCacheItem.h +++ b/Source/JavaScriptCore/parser/SourceProviderCacheItem.h @@ -23,26 +23,34 @@ * THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef SourceProviderCacheItem_h -#define SourceProviderCacheItem_h +#pragma once #include "ParserTokens.h" -#include <wtf/PassOwnPtr.h> #include <wtf/Vector.h> +#include <wtf/text/UniquedStringImpl.h> #include <wtf/text/WTFString.h> namespace JSC { struct SourceProviderCacheItemCreationParameters { unsigned functionNameStart; - unsigned closeBraceLine; - unsigned closeBraceOffset; - unsigned closeBraceLineStartOffset; + unsigned lastTokenLine; + unsigned lastTokenStartOffset; + unsigned lastTokenEndOffset; + unsigned lastTokenLineStartOffset; + unsigned endFunctionOffset; + unsigned parameterCount; + unsigned functionLength; bool needsFullActivation; bool usesEval; bool strictMode; - Vector<RefPtr<StringImpl>> usedVariables; - Vector<RefPtr<StringImpl>> writtenVariables; + bool needsSuperBinding; + InnerArrowFunctionCodeFeatures innerArrowFunctionFeatures; + Vector<UniquedStringImpl*, 8> usedVariables; + bool isBodyArrowExpression { false }; + JSTokenType tokenType { CLOSEBRACE }; + ConstructorKind constructorKind; + SuperBinding expectedSuperBinding; }; #if COMPILER(MSVC) @@ -56,15 +64,15 @@ public: static std::unique_ptr<SourceProviderCacheItem> create(const SourceProviderCacheItemCreationParameters&); ~SourceProviderCacheItem(); - JSToken closeBraceToken() const + JSToken endFunctionToken() const { JSToken token; - token.m_type = CLOSEBRACE; - token.m_data.offset = closeBraceOffset; - token.m_location.startOffset = closeBraceOffset; - token.m_location.endOffset = closeBraceOffset + 1; - token.m_location.line = closeBraceLine; - token.m_location.lineStartOffset = closeBraceLineStartOffset; + token.m_type = isBodyArrowExpression ? tokenType : CLOSEBRACE; + token.m_data.offset = lastTokenStartOffset; + token.m_location.startOffset = lastTokenStartOffset; + token.m_location.endOffset = lastTokenEndOffset; + token.m_location.line = lastTokenLine; + token.m_location.lineStartOffset = lastTokenLineStartOffset; // token.m_location.sourceOffset is initialized once by the client. So, // we do not need to set it here. return token; @@ -72,36 +80,41 @@ public: unsigned functionNameStart : 31; bool needsFullActivation : 1; - - unsigned closeBraceLine : 31; + unsigned endFunctionOffset : 31; bool usesEval : 1; - - unsigned closeBraceOffset : 31; + unsigned lastTokenLine : 31; bool strictMode : 1; - - unsigned closeBraceLineStartOffset; + unsigned lastTokenStartOffset : 31; + unsigned lastTokenEndOffset: 31; + unsigned constructorKind : 2; // ConstructorKind + unsigned parameterCount : 31; + unsigned expectedSuperBinding : 1; // SuperBinding + bool needsSuperBinding: 1; + unsigned functionLength; + unsigned lastTokenLineStartOffset; unsigned usedVariablesCount; - unsigned writtenVariablesCount; + InnerArrowFunctionCodeFeatures innerArrowFunctionFeatures; + bool isBodyArrowExpression; + JSTokenType tokenType; - StringImpl** usedVariables() const { return const_cast<StringImpl**>(m_variables); } - StringImpl** writtenVariables() const { return const_cast<StringImpl**>(&m_variables[usedVariablesCount]); } + UniquedStringImpl** usedVariables() const { return const_cast<UniquedStringImpl**>(m_variables); } private: SourceProviderCacheItem(const SourceProviderCacheItemCreationParameters&); - StringImpl* m_variables[0]; + UniquedStringImpl* m_variables[0]; }; inline SourceProviderCacheItem::~SourceProviderCacheItem() { - for (unsigned i = 0; i < usedVariablesCount + writtenVariablesCount; ++i) + for (unsigned i = 0; i < usedVariablesCount; ++i) m_variables[i]->deref(); } inline std::unique_ptr<SourceProviderCacheItem> SourceProviderCacheItem::create(const SourceProviderCacheItemCreationParameters& parameters) { - size_t variableCount = parameters.writtenVariables.size() + parameters.usedVariables.size(); - size_t objectSize = sizeof(SourceProviderCacheItem) + sizeof(StringImpl*) * variableCount; + size_t variableCount = parameters.usedVariables.size(); + size_t objectSize = sizeof(SourceProviderCacheItem) + sizeof(UniquedStringImpl*) * variableCount; void* slot = fastMalloc(objectSize); return std::unique_ptr<SourceProviderCacheItem>(new (slot) SourceProviderCacheItem(parameters)); } @@ -109,22 +122,26 @@ inline std::unique_ptr<SourceProviderCacheItem> SourceProviderCacheItem::create( inline SourceProviderCacheItem::SourceProviderCacheItem(const SourceProviderCacheItemCreationParameters& parameters) : functionNameStart(parameters.functionNameStart) , needsFullActivation(parameters.needsFullActivation) - , closeBraceLine(parameters.closeBraceLine) + , endFunctionOffset(parameters.endFunctionOffset) , usesEval(parameters.usesEval) - , closeBraceOffset(parameters.closeBraceOffset) + , lastTokenLine(parameters.lastTokenLine) , strictMode(parameters.strictMode) - , closeBraceLineStartOffset(parameters.closeBraceLineStartOffset) + , lastTokenStartOffset(parameters.lastTokenStartOffset) + , lastTokenEndOffset(parameters.lastTokenEndOffset) + , constructorKind(static_cast<unsigned>(parameters.constructorKind)) + , parameterCount(parameters.parameterCount) + , expectedSuperBinding(static_cast<unsigned>(parameters.expectedSuperBinding)) + , needsSuperBinding(parameters.needsSuperBinding) + , functionLength(parameters.functionLength) + , lastTokenLineStartOffset(parameters.lastTokenLineStartOffset) , usedVariablesCount(parameters.usedVariables.size()) - , writtenVariablesCount(parameters.writtenVariables.size()) + , innerArrowFunctionFeatures(parameters.innerArrowFunctionFeatures) + , isBodyArrowExpression(parameters.isBodyArrowExpression) + , tokenType(parameters.tokenType) { - unsigned j = 0; - for (unsigned i = 0; i < usedVariablesCount; ++i, ++j) { - m_variables[j] = parameters.usedVariables[i].get(); - m_variables[j]->ref(); - } - for (unsigned i = 0; i < writtenVariablesCount; ++i, ++j) { - m_variables[j] = parameters.writtenVariables[i].get(); - m_variables[j]->ref(); + for (unsigned i = 0; i < usedVariablesCount; ++i) { + m_variables[i] = parameters.usedVariables[i]; + m_variables[i]->ref(); } } @@ -132,6 +149,4 @@ inline SourceProviderCacheItem::SourceProviderCacheItem(const SourceProviderCach #pragma warning(pop) #endif -} - -#endif // SourceProviderCacheItem_h +} // namespace JSC |