diff --git a/liblangutil/CMakeLists.txt b/liblangutil/CMakeLists.txt
index 4539376f0..1c3d5a05e 100644
--- a/liblangutil/CMakeLists.txt
+++ b/liblangutil/CMakeLists.txt
@@ -1,5 +1,6 @@
# Solidity Commons Library (Solidity related sharing bits between libsolidity and libyul)
set(sources
+ Common.h
CharStream.cpp
CharStream.h
ErrorReporter.cpp
diff --git a/liblangutil/Common.h b/liblangutil/Common.h
new file mode 100644
index 000000000..ed6aa2cbc
--- /dev/null
+++ b/liblangutil/Common.h
@@ -0,0 +1,63 @@
+/*
+ This file is part of solidity.
+ solidity is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+ solidity is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+ You should have received a copy of the GNU General Public License
+ along with solidity. If not, see .
+*/
+
+#pragma once
+
+namespace langutil
+{
+
+inline bool isDecimalDigit(char c)
+{
+ return '0' <= c && c <= '9';
+}
+
+inline bool isHexDigit(char c)
+{
+ return
+ isDecimalDigit(c) ||
+ ('a' <= c && c <= 'f') ||
+ ('A' <= c && c <= 'F');
+}
+
+inline bool isLineTerminator(char c)
+{
+ return c == '\n';
+}
+
+inline bool isWhiteSpace(char c)
+{
+ return c == ' ' || c == '\n' || c == '\t' || c == '\r';
+}
+
+inline bool isIdentifierStart(char c)
+{
+ return c == '_' || c == '$' || ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z');
+}
+
+inline bool isIdentifierPart(char c)
+{
+ return isIdentifierStart(c) || isDecimalDigit(c);
+}
+
+inline int hexValue(char c)
+{
+ if (c >= '0' && c <= '9')
+ return c - '0';
+ else if (c >= 'a' && c <= 'f')
+ return c - 'a' + 10;
+ else if (c >= 'A' && c <= 'F')
+ return c - 'A' + 10;
+ else return -1;
+}
+}
diff --git a/liblangutil/Scanner.cpp b/liblangutil/Scanner.cpp
index 3463783bf..ed6322472 100644
--- a/liblangutil/Scanner.cpp
+++ b/liblangutil/Scanner.cpp
@@ -50,6 +50,7 @@
* Solidity scanner.
*/
+#include
#include
#include
#include
@@ -61,47 +62,6 @@ using namespace std;
namespace langutil
{
-namespace
-{
-bool isDecimalDigit(char c)
-{
- return '0' <= c && c <= '9';
-}
-bool isHexDigit(char c)
-{
- return
- isDecimalDigit(c) ||
- ('a' <= c && c <= 'f') ||
- ('A' <= c && c <= 'F');
-}
-bool isLineTerminator(char c)
-{
- return c == '\n';
-}
-bool isWhiteSpace(char c)
-{
- return c == ' ' || c == '\n' || c == '\t' || c == '\r';
-}
-bool isIdentifierStart(char c)
-{
- return c == '_' || c == '$' || ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z');
-}
-bool isIdentifierPart(char c)
-{
- return isIdentifierStart(c) || isDecimalDigit(c);
-}
-int hexValue(char c)
-{
- if (c >= '0' && c <= '9')
- return c - '0';
- else if (c >= 'a' && c <= 'f')
- return c - 'a' + 10;
- else if (c >= 'A' && c <= 'F')
- return c - 'A' + 10;
- else return -1;
-}
-} // end anonymous namespace
-
std::string to_string(ScannerError _errorCode)
{
switch (_errorCode)
diff --git a/test/libsolidity/util/TestFileParser.cpp b/test/libsolidity/util/TestFileParser.cpp
index 9f05e72ff..bbd867bb7 100644
--- a/test/libsolidity/util/TestFileParser.cpp
+++ b/test/libsolidity/util/TestFileParser.cpp
@@ -16,8 +16,8 @@
*/
#include
-
#include
+#include
#include
#include
#include
@@ -33,18 +33,6 @@ using namespace dev::solidity::test;
using namespace std;
using namespace soltest;
-namespace
-{
- bool isIdentifierStart(char c)
- {
- return c == '_' || c == '$' || ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z');
- }
- bool isIdentifierPart(char c)
- {
- return isIdentifierStart(c) || isdigit(c);
- }
-}
-
vector TestFileParser::parseFunctionCalls()
{
vector calls;
@@ -354,14 +342,14 @@ void TestFileParser::Scanner::scanNextToken()
token = selectToken(Token::RParen);
break;
default:
- if (isIdentifierStart(current()))
+ if (langutil::isIdentifierStart(current()))
{
TokenDesc detectedToken = detectKeyword(scanIdentifierOrKeyword());
token = selectToken(detectedToken.first, detectedToken.second);
}
- else if (isdigit(current()))
+ else if (langutil::isDecimalDigit(current()))
token = selectToken(Token::Number, scanNumber());
- else if (isspace(current()))
+ else if (langutil::isWhiteSpace(current()))
token = selectToken(Token::Whitespace);
else if (isEndOfLine())
token = selectToken(Token::EOS);
@@ -389,7 +377,7 @@ string TestFileParser::Scanner::scanIdentifierOrKeyword()
{
string identifier;
identifier += current();
- while (isIdentifierPart(peek()))
+ while (langutil::isIdentifierPart(peek()))
{
advance();
identifier += current();
@@ -401,7 +389,7 @@ string TestFileParser::Scanner::scanNumber()
{
string number;
number += current();
- while (isdigit(peek()))
+ while (langutil::isDecimalDigit(peek()))
{
advance();
number += current();