23
23
24
24
#include < libsolutil/Assertions.h>
25
25
26
+ #include < array>
26
27
#include < cstdint>
27
28
#include < optional>
28
29
#include < string>
29
- #include < vector>
30
-
31
- #include < boost/operators.hpp>
32
30
33
31
34
32
namespace solidity ::evmasm
@@ -44,30 +42,30 @@ namespace solidity::langutil
44
42
* A version specifier of the EVM we want to compile to.
45
43
* Defaults to the latest version deployed on Ethereum Mainnet at the time of compiler release.
46
44
*/
47
- class EVMVersion :
48
- boost::less_than_comparable<EVMVersion>,
49
- boost::equality_comparable<EVMVersion>
45
+ class EVMVersion
50
46
{
51
47
public:
52
48
EVMVersion () = default ;
53
49
54
- static EVMVersion homestead () { return {Version::Homestead}; }
55
- static EVMVersion tangerineWhistle () { return {Version::TangerineWhistle}; }
56
- static EVMVersion spuriousDragon () { return {Version::SpuriousDragon}; }
57
- static EVMVersion byzantium () { return {Version::Byzantium}; }
58
- static EVMVersion constantinople () { return {Version::Constantinople}; }
59
- static EVMVersion petersburg () { return {Version::Petersburg}; }
60
- static EVMVersion istanbul () { return {Version::Istanbul}; }
61
- static EVMVersion berlin () { return {Version::Berlin}; }
62
- static EVMVersion london () { return {Version::London}; }
63
- static EVMVersion paris () { return {Version::Paris}; }
64
- static EVMVersion shanghai () { return {Version::Shanghai}; }
65
- static EVMVersion cancun () { return {Version::Cancun}; }
66
- static EVMVersion prague () { return {Version::Prague}; }
67
- static EVMVersion osaka () { return {Version::Osaka}; }
68
-
69
- static std::vector<EVMVersion> allVersions () {
70
- return {
50
+ static EVMVersion current () { return {currentVersion}; }
51
+
52
+ static EVMVersion constexpr homestead () { return {Version::Homestead}; }
53
+ static EVMVersion constexpr tangerineWhistle () { return {Version::TangerineWhistle}; }
54
+ static EVMVersion constexpr spuriousDragon () { return {Version::SpuriousDragon}; }
55
+ static EVMVersion constexpr byzantium () { return {Version::Byzantium}; }
56
+ static EVMVersion constexpr constantinople () { return {Version::Constantinople}; }
57
+ static EVMVersion constexpr petersburg () { return {Version::Petersburg}; }
58
+ static EVMVersion constexpr istanbul () { return {Version::Istanbul}; }
59
+ static EVMVersion constexpr berlin () { return {Version::Berlin}; }
60
+ static EVMVersion constexpr london () { return {Version::London}; }
61
+ static EVMVersion constexpr paris () { return {Version::Paris}; }
62
+ static EVMVersion constexpr shanghai () { return {Version::Shanghai}; }
63
+ static EVMVersion constexpr cancun () { return {Version::Cancun}; }
64
+ static EVMVersion constexpr prague () { return {Version::Prague}; }
65
+ static EVMVersion constexpr osaka () { return {Version::Osaka}; }
66
+
67
+ static auto constexpr allVersions () {
68
+ return std::array{
71
69
homestead (),
72
70
tangerineWhistle (),
73
71
spuriousDragon (),
@@ -85,6 +83,14 @@ class EVMVersion:
85
83
};
86
84
}
87
85
86
+ static auto constexpr allEOFVersions ()
87
+ {
88
+ return std::array{
89
+ std::optional<uint8_t >(),
90
+ std::make_optional<uint8_t >(1 )
91
+ };
92
+ }
93
+
88
94
static std::optional<EVMVersion> fromString (std::string const & _version)
89
95
{
90
96
for (auto const & v: allVersions ())
@@ -96,11 +102,10 @@ class EVMVersion:
96
102
static EVMVersion firstWithEOF () { return {Version::Osaka}; }
97
103
98
104
bool isExperimental () const {
99
- return * this > EVMVersion{} ;
105
+ return m_version > currentVersion ;
100
106
}
101
107
102
- bool operator ==(EVMVersion const & _other) const { return m_version == _other.m_version ; }
103
- bool operator <(EVMVersion const & _other) const { return m_version < _other.m_version ; }
108
+ auto operator <=>(EVMVersion const &) const = default ;
104
109
105
110
std::string name () const
106
111
{
@@ -164,10 +169,11 @@ class EVMVersion:
164
169
Prague,
165
170
Osaka,
166
171
};
172
+ static auto constexpr currentVersion = Version::Prague;
167
173
168
- EVMVersion (Version _version): m_version(_version) {}
174
+ constexpr EVMVersion (Version _version): m_version(_version) {}
169
175
170
- Version m_version = Version::Prague ;
176
+ Version m_version = currentVersion ;
171
177
};
172
178
173
179
}
0 commit comments