aboutsummaryrefslogtreecommitdiffstats
path: root/Scanner.cpp
diff options
context:
space:
mode:
authorChristian <c@ethdev.com>2014-11-05 21:20:56 +0800
committerChristian <c@ethdev.com>2014-11-05 22:01:24 +0800
commitc1f7a1665f17c5f9865534c7a26827cfbf6f3dd5 (patch)
tree758fd6ffa201c101c272e8d671697c65acf294b8 /Scanner.cpp
parent1de66d6e9ea5ad04f96247895a867be53e42da7c (diff)
downloaddexon-solidity-c1f7a1665f17c5f9865534c7a26827cfbf6f3dd5.tar.gz
dexon-solidity-c1f7a1665f17c5f9865534c7a26827cfbf6f3dd5.tar.zst
dexon-solidity-c1f7a1665f17c5f9865534c7a26827cfbf6f3dd5.zip
Converted all asserts to exceptions.
Diffstat (limited to 'Scanner.cpp')
-rw-r--r--Scanner.cpp33
1 files changed, 17 insertions, 16 deletions
diff --git a/Scanner.cpp b/Scanner.cpp
index d8defb50..c3682031 100644
--- a/Scanner.cpp
+++ b/Scanner.cpp
@@ -50,7 +50,6 @@
* Solidity scanner.
*/
-#include <cassert>
#include <algorithm>
#include <tuple>
#include <libsolidity/Scanner.h>
@@ -113,11 +112,10 @@ void Scanner::reset(CharStream const& _source)
}
-bool Scanner::scanHexNumber(char& o_scannedNumber, int _expectedLength)
+bool Scanner::scanHexByte(char& o_scannedByte)
{
- assert(_expectedLength <= 4); // prevent overflow
char x = 0;
- for (int i = 0; i < _expectedLength; i++)
+ for (int i = 0; i < 2; i++)
{
int d = HexValue(m_char);
if (d < 0)
@@ -128,7 +126,7 @@ bool Scanner::scanHexNumber(char& o_scannedNumber, int _expectedLength)
x = x * 16 + d;
advance();
}
- o_scannedNumber = x;
+ o_scannedByte = x;
return true;
}
@@ -175,7 +173,8 @@ Token::Value Scanner::skipSingleLineComment()
Token::Value Scanner::skipMultiLineComment()
{
- assert(m_char == '*');
+ if (asserts(m_char == '*'))
+ BOOST_THROW_EXCEPTION(InternalCompilerError());
advance();
while (!isSourcePastEndOfInput())
{
@@ -418,15 +417,11 @@ bool Scanner::scanEscape()
case 't':
c = '\t';
break;
- case 'u':
- if (!scanHexNumber(c, 4))
- return false;
- break;
case 'v':
c = '\v';
break;
case 'x':
- if (!scanHexNumber(c, 2))
+ if (!scanHexByte(c))
return false;
break;
}
@@ -468,7 +463,9 @@ void Scanner::scanDecimalDigits()
Token::Value Scanner::scanNumber(bool _periodSeen)
{
- assert(IsDecimalDigit(m_char)); // the first digit of the number or the fraction
+ // the first digit of the number or the fraction
+ if (asserts(IsDecimalDigit(m_char)))
+ BOOST_THROW_EXCEPTION(InternalCompilerError() << errinfo_comment("Number does not start with decimal digit."));
enum { DECIMAL, HEX, OCTAL, IMPLICIT_OCTAL, BINARY } kind = DECIMAL;
LiteralScope literal(this);
if (_periodSeen)
@@ -510,7 +507,8 @@ Token::Value Scanner::scanNumber(bool _periodSeen)
// scan exponent, if any
if (m_char == 'e' || m_char == 'E')
{
- assert(kind != HEX); // 'e'/'E' must be scanned as part of the hex number
+ if (asserts(kind != HEX)) // 'e'/'E' must be scanned as part of the hex number
+ BOOST_THROW_EXCEPTION(InternalCompilerError());
if (kind != DECIMAL) return Token::ILLEGAL;
// scan exponent
addLiteralCharAndAdvance();
@@ -606,7 +604,8 @@ Token::Value Scanner::scanNumber(bool _periodSeen)
static Token::Value KeywordOrIdentifierToken(string const& input)
{
- assert(!input.empty());
+ if (asserts(!input.empty()))
+ BOOST_THROW_EXCEPTION(InternalCompilerError());
int const kMinLength = 2;
int const kMaxLength = 10;
if (input.size() < kMinLength || input.size() > kMaxLength)
@@ -634,7 +633,8 @@ case ch:
Token::Value Scanner::scanIdentifierOrKeyword()
{
- assert(IsIdentifierStart(m_char));
+ if (asserts(IsIdentifierStart(m_char)))
+ BOOST_THROW_EXCEPTION(InternalCompilerError());
LiteralScope literal(this);
addLiteralCharAndAdvance();
// Scan the rest of the identifier characters.
@@ -656,7 +656,8 @@ char CharStream::advanceAndGet()
char CharStream::rollback(size_t _amount)
{
- assert(m_pos >= _amount);
+ if (asserts(m_pos >= _amount))
+ BOOST_THROW_EXCEPTION(InternalCompilerError());
m_pos -= _amount;
return get();
}