aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Beregszaszi <alex@rtfs.hu>2018-06-12 23:33:26 +0800
committerGitHub <noreply@github.com>2018-06-12 23:33:26 +0800
commitd1e7e9ef5e3dfbf49045976da91a6a88dd28bbd3 (patch)
tree1ba75f1db43bc443449fa34ee3de5b9134d8c235
parente2f4a9fcf409df1108d355824de12ff43682a728 (diff)
parente4b7b2160e0f98670d39c9651e7ceafd6b1aea32 (diff)
downloaddexon-solidity-d1e7e9ef5e3dfbf49045976da91a6a88dd28bbd3.tar.gz
dexon-solidity-d1e7e9ef5e3dfbf49045976da91a6a88dd28bbd3.tar.zst
dexon-solidity-d1e7e9ef5e3dfbf49045976da91a6a88dd28bbd3.zip
Merge pull request #3627 from ethereum/additional-keywords
[BREAKING] Add new reserved keywords.
-rw-r--r--Changelog.md3
-rw-r--r--docs/miscellaneous.rst7
-rw-r--r--libsolidity/parsing/Token.h21
-rw-r--r--test/libsolidity/SolidityParser.cpp22
4 files changed, 48 insertions, 5 deletions
diff --git a/Changelog.md b/Changelog.md
index e552521e..eafec658 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -7,6 +7,9 @@ Breaking Changes:
* Disallow conversions between bytesX and uintY of different size.
* Commandline interface: Require ``-`` if standard input is used as source.
* General: New keywords: ``calldata``
+ * General: Add new reserved keywords: ``alias``, ``apply``, ``auto``, ``copyof``, ``define``, ``immutable``,
+ ``implements``, ``macro``, ``mutable``, ``override``, ``partial``, ``promise``, ``reference``, ``sealed``,
+ ``sizeof``, ``supports``, ``typedef`` and ``unchecked``.
* General: ``continue`` in a ``do...while`` loop jumps to the condition (it used to jump to the loop body). Warning: this may silently change the semantics of existing code.
* General: Signed right shift uses proper arithmetic shift, i.e. rounding towards negative infinity. Warning: this may silently change the semantics of existing code!
* Introduce ``emit`` as a keyword instead of parsing it as identifier.
diff --git a/docs/miscellaneous.rst b/docs/miscellaneous.rst
index c7c32528..0d49c3df 100644
--- a/docs/miscellaneous.rst
+++ b/docs/miscellaneous.rst
@@ -409,8 +409,11 @@ Reserved Keywords
These keywords are reserved in Solidity. They might become part of the syntax in the future:
-``abstract``, ``after``, ``case``, ``catch``, ``default``, ``final``, ``in``, ``inline``, ``let``, ``match``, ``null``,
-``of``, ``relocatable``, ``static``, ``switch``, ``try``, ``type``, ``typeof``.
+``abstract``, ``after``, ``alias``, ``apply``, ``auto``, ``case``, ``catch``, ``copyof``, ``default``,
+``define``, ``final``, ``immutable``, ``implements``, ``in``, ``inline``, ``let``, ``macro``, ``match``,
+``mutable``, ``null``, ``of``, ``override``, ``partial``, ``promise``, ``reference``, ``relocatable``,
+``sealed``, ``sizeof``, ``static``, ``supports``, ``switch``, ``try``, ``type``, ``typedef``, ``typeof``,
+``unchecked``.
Language Grammar
================
diff --git a/libsolidity/parsing/Token.h b/libsolidity/parsing/Token.h
index 845a97bc..cb855cbe 100644
--- a/libsolidity/parsing/Token.h
+++ b/libsolidity/parsing/Token.h
@@ -223,22 +223,41 @@ namespace solidity
/* Keywords reserved for future use. */ \
K(Abstract, "abstract", 0) \
K(After, "after", 0) \
+ K(Alias, "alias", 0) \
+ K(Apply, "apply", 0) \
+ K(Auto, "auto", 0) \
K(Case, "case", 0) \
K(Catch, "catch", 0) \
+ K(CopyOf, "copyof", 0) \
K(Default, "default", 0) \
+ K(Define, "define", 0) \
K(Final, "final", 0) \
+ K(Immutable, "immutable", 0) \
+ K(Implements, "implements", 0) \
K(In, "in", 0) \
K(Inline, "inline", 0) \
K(Let, "let", 0) \
+ K(Macro, "macro", 0) \
K(Match, "match", 0) \
+ K(Mutable, "mutable", 0) \
K(NullLiteral, "null", 0) \
K(Of, "of", 0) \
+ K(Override, "override", 0) \
+ K(Partial, "partial", 0) \
+ K(Promise, "promise", 0) \
+ K(Reference, "reference", 0) \
K(Relocatable, "relocatable", 0) \
+ K(Sealed, "sealed", 0) \
+ K(Sizeof, "sizeof", 0) \
K(Static, "static", 0) \
+ K(Supports, "supports", 0) \
K(Switch, "switch", 0) \
K(Try, "try", 0) \
K(Type, "type", 0) \
+ K(Typedef, "typedef", 0) \
K(TypeOf, "typeof", 0) \
+ K(Unchecked, "unchecked", 0) \
+ \
/* Illegal token - not able to scan. */ \
T(Illegal, "ILLEGAL", 0) \
\
@@ -295,7 +314,7 @@ public:
static bool isStateMutabilitySpecifier(Value op) { return op == Pure || op == Constant || op == View || op == Payable; }
static bool isEtherSubdenomination(Value op) { return op == SubWei || op == SubSzabo || op == SubFinney || op == SubEther; }
static bool isTimeSubdenomination(Value op) { return op == SubSecond || op == SubMinute || op == SubHour || op == SubDay || op == SubWeek || op == SubYear; }
- static bool isReservedKeyword(Value op) { return (Abstract <= op && op <= TypeOf); }
+ static bool isReservedKeyword(Value op) { return (Abstract <= op && op <= Unchecked); }
// @returns a string corresponding to the JS token string
// (.e., "<" for the token LT) or NULL if the token doesn't
diff --git a/test/libsolidity/SolidityParser.cpp b/test/libsolidity/SolidityParser.cpp
index 0797b53b..1ffbd771 100644
--- a/test/libsolidity/SolidityParser.cpp
+++ b/test/libsolidity/SolidityParser.cpp
@@ -491,28 +491,46 @@ BOOST_AUTO_TEST_CASE(keyword_is_reserved)
auto keywords = {
"abstract",
"after",
+ "alias",
+ "apply",
+ "auto",
"case",
"catch",
+ "copyof",
"default",
+ "define",
"final",
+ "immutable",
+ "implements",
"in",
"inline",
"let",
+ "macro",
"match",
+ "mutable",
"null",
"of",
+ "override",
+ "partial",
+ "promise",
+ "reference",
"relocatable",
+ "sealed",
+ "sizeof",
"static",
+ "supports",
"switch",
"try",
"type",
- "typeof"
+ "typedef",
+ "typeof",
+ "unchecked"
};
for (const auto& keyword: keywords)
{
auto text = std::string("contract ") + keyword + " {}";
- CHECK_PARSE_ERROR(text.c_str(), "Expected identifier but got reserved keyword");
+ CHECK_PARSE_ERROR(text.c_str(), string("Expected identifier but got reserved keyword '") + keyword + "'");
}
}