mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Moving LiteralScope to Scanner.cpp
This commit is contained in:
parent
a595464739
commit
21fdd84c09
41
Scanner.cpp
41
Scanner.cpp
@ -102,6 +102,47 @@ int hexValue(char c)
|
|||||||
}
|
}
|
||||||
} // end anonymous namespace
|
} // end anonymous namespace
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/// Scoped helper for literal recording. Automatically drops the literal
|
||||||
|
/// if aborting the scanning before it's complete.
|
||||||
|
enum LiteralType {
|
||||||
|
LITERAL_TYPE_STRING,
|
||||||
|
LITERAL_TYPE_NUMBER, // not really different from string type in behaviour
|
||||||
|
LITERAL_TYPE_COMMENT
|
||||||
|
};
|
||||||
|
|
||||||
|
class LiteralScope
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit LiteralScope(Scanner* _self, enum LiteralType _type): m_type(_type)
|
||||||
|
, m_scanner(_self)
|
||||||
|
, m_complete(false)
|
||||||
|
{
|
||||||
|
if (_type == LITERAL_TYPE_COMMENT)
|
||||||
|
m_scanner->m_nextSkippedComment.literal.clear();
|
||||||
|
else
|
||||||
|
m_scanner->m_nextToken.literal.clear();
|
||||||
|
}
|
||||||
|
~LiteralScope()
|
||||||
|
{
|
||||||
|
if (!m_complete)
|
||||||
|
{
|
||||||
|
if (m_type == LITERAL_TYPE_COMMENT)
|
||||||
|
m_scanner->m_nextSkippedComment.literal.clear();
|
||||||
|
else
|
||||||
|
m_scanner->m_nextToken.literal.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void complete() { m_complete = true; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
enum LiteralType m_type;
|
||||||
|
Scanner* m_scanner;
|
||||||
|
bool m_complete;
|
||||||
|
}; // end of LiteralScope class
|
||||||
|
|
||||||
|
|
||||||
void Scanner::reset(CharStream const& _source)
|
void Scanner::reset(CharStream const& _source)
|
||||||
{
|
{
|
||||||
m_source = _source;
|
m_source = _source;
|
||||||
|
42
Scanner.h
42
Scanner.h
@ -96,45 +96,9 @@ private:
|
|||||||
|
|
||||||
class Scanner
|
class Scanner
|
||||||
{
|
{
|
||||||
|
friend class LiteralScope;
|
||||||
public:
|
public:
|
||||||
|
|
||||||
enum LiteralType {
|
|
||||||
LITERAL_TYPE_STRING,
|
|
||||||
LITERAL_TYPE_NUMBER, // not really different from string type in behaviour
|
|
||||||
LITERAL_TYPE_COMMENT
|
|
||||||
};
|
|
||||||
/// Scoped helper for literal recording. Automatically drops the literal
|
|
||||||
/// if aborting the scanning before it's complete.
|
|
||||||
class LiteralScope
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
explicit LiteralScope(Scanner* _self, enum LiteralType _type): m_type(_type)
|
|
||||||
, m_scanner(_self)
|
|
||||||
, m_complete(false)
|
|
||||||
{
|
|
||||||
if (_type == LITERAL_TYPE_COMMENT)
|
|
||||||
m_scanner->startNewCommentLiteral();
|
|
||||||
else
|
|
||||||
m_scanner->startNewLiteral();
|
|
||||||
}
|
|
||||||
~LiteralScope()
|
|
||||||
{
|
|
||||||
if (!m_complete)
|
|
||||||
{
|
|
||||||
if (m_type == LITERAL_TYPE_COMMENT)
|
|
||||||
m_scanner->dropCommentLiteral();
|
|
||||||
else
|
|
||||||
m_scanner->dropLiteral();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void complete() { m_complete = true; }
|
|
||||||
|
|
||||||
private:
|
|
||||||
enum LiteralType m_type;
|
|
||||||
Scanner* m_scanner;
|
|
||||||
bool m_complete;
|
|
||||||
};
|
|
||||||
|
|
||||||
Scanner() { reset(CharStream()); }
|
Scanner() { reset(CharStream()); }
|
||||||
explicit Scanner(CharStream const& _source) { reset(_source); }
|
explicit Scanner(CharStream const& _source) { reset(_source); }
|
||||||
|
|
||||||
@ -194,12 +158,8 @@ private:
|
|||||||
|
|
||||||
///@{
|
///@{
|
||||||
///@name Literal buffer support
|
///@name Literal buffer support
|
||||||
inline void startNewLiteral() { m_nextToken.literal.clear(); }
|
|
||||||
inline void startNewCommentLiteral() { m_nextSkippedComment.literal.clear(); }
|
|
||||||
inline void addLiteralChar(char c) { m_nextToken.literal.push_back(c); }
|
inline void addLiteralChar(char c) { m_nextToken.literal.push_back(c); }
|
||||||
inline void addCommentLiteralChar(char c) { m_nextSkippedComment.literal.push_back(c); }
|
inline void addCommentLiteralChar(char c) { m_nextSkippedComment.literal.push_back(c); }
|
||||||
inline void dropLiteral() { m_nextToken.literal.clear(); }
|
|
||||||
inline void dropCommentLiteral() { m_nextSkippedComment.literal.clear(); }
|
|
||||||
inline void addLiteralCharAndAdvance() { addLiteralChar(m_char); advance(); }
|
inline void addLiteralCharAndAdvance() { addLiteralChar(m_char); advance(); }
|
||||||
///@}
|
///@}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user