X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/93a3786624b2768d89bfa27e46598dc64e2fb70a..refs/heads/master:/parser/SourceProviderCacheItem.h diff --git a/parser/SourceProviderCacheItem.h b/parser/SourceProviderCacheItem.h index 8d35a3d..c0c507f 100644 --- a/parser/SourceProviderCacheItem.h +++ b/parser/SourceProviderCacheItem.h @@ -27,22 +27,28 @@ #define SourceProviderCacheItem_h #include "ParserTokens.h" -#include #include +#include #include namespace JSC { struct SourceProviderCacheItemCreationParameters { - unsigned functionStart; - unsigned closeBraceLine; - unsigned closeBraceOffset; - unsigned closeBraceLineStartOffset; + unsigned functionNameStart; + unsigned lastTockenLine; + unsigned lastTockenStartOffset; + unsigned lastTockenEndOffset; + unsigned lastTockenLineStartOffset; + unsigned endFunctionOffset; bool needsFullActivation; bool usesEval; bool strictMode; - Vector > usedVariables; - Vector > writtenVariables; + Vector> usedVariables; + Vector> writtenVariables; +#if ENABLE(ES6_ARROWFUNCTION_SYNTAX) + bool isBodyArrowExpression { false }; + JSTokenType tokenType { CLOSEBRACE }; +#endif }; #if COMPILER(MSVC) @@ -53,43 +59,54 @@ struct SourceProviderCacheItemCreationParameters { class SourceProviderCacheItem { WTF_MAKE_FAST_ALLOCATED; public: - static PassOwnPtr create(const SourceProviderCacheItemCreationParameters&); + static std::unique_ptr create(const SourceProviderCacheItemCreationParameters&); ~SourceProviderCacheItem(); - JSToken closeBraceToken() const + JSToken endFunctionToken() const { JSToken token; +#if ENABLE(ES6_ARROWFUNCTION_SYNTAX) + token.m_type = isBodyArrowExpression ? tokenType : CLOSEBRACE; +#else 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; +#endif + token.m_data.offset = lastTockenStartOffset; + token.m_location.startOffset = lastTockenStartOffset; + token.m_location.endOffset = lastTockenEndOffset; + token.m_location.line = lastTockenLine; + token.m_location.lineStartOffset = lastTockenLineStartOffset; // token.m_location.sourceOffset is initialized once by the client. So, // we do not need to set it here. return token; } - unsigned functionStart : 31; + unsigned functionNameStart : 31; bool needsFullActivation : 1; + + unsigned endFunctionOffset : 31; + unsigned lastTockenLine : 31; + unsigned lastTockenStartOffset : 31; + unsigned lastTockenEndOffset: 31; - unsigned closeBraceLine : 31; bool usesEval : 1; - unsigned closeBraceOffset : 31; bool strictMode : 1; - unsigned closeBraceLineStartOffset; + unsigned lastTockenLineStartOffset; unsigned usedVariablesCount; unsigned writtenVariablesCount; - StringImpl** usedVariables() const { return const_cast(m_variables); } - StringImpl** writtenVariables() const { return const_cast(&m_variables[usedVariablesCount]); } + UniquedStringImpl** usedVariables() const { return const_cast(m_variables); } + UniquedStringImpl** writtenVariables() const { return const_cast(&m_variables[usedVariablesCount]); } +#if ENABLE(ES6_ARROWFUNCTION_SYNTAX) + bool isBodyArrowExpression; + JSTokenType tokenType; +#endif private: SourceProviderCacheItem(const SourceProviderCacheItemCreationParameters&); - StringImpl* m_variables[0]; + UniquedStringImpl* m_variables[0]; }; inline SourceProviderCacheItem::~SourceProviderCacheItem() @@ -98,24 +115,30 @@ inline SourceProviderCacheItem::~SourceProviderCacheItem() m_variables[i]->deref(); } -inline PassOwnPtr SourceProviderCacheItem::create(const SourceProviderCacheItemCreationParameters& parameters) +inline std::unique_ptr SourceProviderCacheItem::create(const SourceProviderCacheItemCreationParameters& parameters) { size_t variableCount = parameters.writtenVariables.size() + parameters.usedVariables.size(); - size_t objectSize = sizeof(SourceProviderCacheItem) + sizeof(StringImpl*) * variableCount; + size_t objectSize = sizeof(SourceProviderCacheItem) + sizeof(UniquedStringImpl*) * variableCount; void* slot = fastMalloc(objectSize); - return adoptPtr(new (slot) SourceProviderCacheItem(parameters)); + return std::unique_ptr(new (slot) SourceProviderCacheItem(parameters)); } inline SourceProviderCacheItem::SourceProviderCacheItem(const SourceProviderCacheItemCreationParameters& parameters) - : functionStart(parameters.functionStart) + : functionNameStart(parameters.functionNameStart) , needsFullActivation(parameters.needsFullActivation) - , closeBraceLine(parameters.closeBraceLine) + , endFunctionOffset(parameters.endFunctionOffset) + , lastTockenLine(parameters.lastTockenLine) + , lastTockenStartOffset(parameters.lastTockenStartOffset) + , lastTockenEndOffset(parameters.lastTockenEndOffset) , usesEval(parameters.usesEval) - , closeBraceOffset(parameters.closeBraceOffset) , strictMode(parameters.strictMode) - , closeBraceLineStartOffset(parameters.closeBraceLineStartOffset) + , lastTockenLineStartOffset(parameters.lastTockenLineStartOffset) , usedVariablesCount(parameters.usedVariables.size()) , writtenVariablesCount(parameters.writtenVariables.size()) +#if ENABLE(ES6_ARROWFUNCTION_SYNTAX) + , isBodyArrowExpression(parameters.isBodyArrowExpression) + , tokenType(parameters.tokenType) +#endif { unsigned j = 0; for (unsigned i = 0; i < usedVariablesCount; ++i, ++j) {