X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/6fe7ccc865dc7d7541b93c5bcaf6368d2c98a174..4be4e30906bcb8ee30b4d189205cb70bad6707ce:/parser/SourceCode.h diff --git a/parser/SourceCode.h b/parser/SourceCode.h index 11a0033..f221f92 100644 --- a/parser/SourceCode.h +++ b/parser/SourceCode.h @@ -41,29 +41,48 @@ namespace JSC { , m_startChar(0) , m_endChar(0) , m_firstLine(0) + , m_startColumn(0) { } - SourceCode(PassRefPtr provider, int firstLine = 1) + SourceCode(WTF::HashTableDeletedValueType) + : m_provider(WTF::HashTableDeletedValue) + { + } + + SourceCode(PassRefPtr provider) : m_provider(provider) , m_startChar(0) - , m_endChar(m_provider->length()) + , m_endChar(m_provider->source().length()) + , m_firstLine(1) + , m_startColumn(1) + { + } + + SourceCode(PassRefPtr provider, int firstLine, int startColumn) + : m_provider(provider) + , m_startChar(0) + , m_endChar(m_provider->source().length()) , m_firstLine(std::max(firstLine, 1)) + , m_startColumn(std::max(startColumn, 1)) { } - SourceCode(PassRefPtr provider, int start, int end, int firstLine) + SourceCode(PassRefPtr provider, int start, int end, int firstLine, int startColumn) : m_provider(provider) , m_startChar(start) , m_endChar(end) , m_firstLine(std::max(firstLine, 1)) + , m_startColumn(std::max(startColumn, 1)) { } - UString toString() const + bool isHashTableDeletedValue() const { return m_provider.isHashTableDeletedValue(); } + + String toString() const { if (!m_provider) - return UString(); + return String(); return m_provider->getRange(m_startChar, m_endChar); } @@ -77,29 +96,32 @@ namespace JSC { bool isNull() const { return !m_provider; } SourceProvider* provider() const { return m_provider.get(); } int firstLine() const { return m_firstLine; } + int startColumn() const { return m_startColumn; } int startOffset() const { return m_startChar; } int endOffset() const { return m_endChar; } int length() const { return m_endChar - m_startChar; } - SourceCode subExpression(unsigned openBrace, unsigned closeBrace, int firstLine); + SourceCode subExpression(unsigned openBrace, unsigned closeBrace, int firstLine, int startColumn); private: RefPtr m_provider; int m_startChar; int m_endChar; int m_firstLine; + int m_startColumn; }; - inline SourceCode makeSource(const UString& source, const UString& url = UString(), const TextPosition& startPosition = TextPosition::minimumPosition()) + inline SourceCode makeSource(const String& source, const String& url = String(), const TextPosition& startPosition = TextPosition::minimumPosition()) { - return SourceCode(UStringSourceProvider::create(source, url, startPosition), startPosition.m_line.oneBasedInt()); + return SourceCode(StringSourceProvider::create(source, url, startPosition), startPosition.m_line.oneBasedInt(), startPosition.m_column.oneBasedInt()); } - inline SourceCode SourceCode::subExpression(unsigned openBrace, unsigned closeBrace, int firstLine) + inline SourceCode SourceCode::subExpression(unsigned openBrace, unsigned closeBrace, int firstLine, int startColumn) { - ASSERT((*provider()->data())[openBrace] == '{'); - ASSERT((*provider()->data())[closeBrace] == '}'); - return SourceCode(provider(), openBrace, closeBrace + 1, firstLine); + ASSERT(provider()->source()[openBrace] == '{'); + ASSERT(provider()->source()[closeBrace] == '}'); + startColumn += 1; // Convert to base 1. + return SourceCode(provider(), openBrace, closeBrace + 1, firstLine, startColumn); } } // namespace JSC