@@ -9,6 +9,10 @@ use std::{
9
9
} ;
10
10
11
11
pub const VYPER_SEARCH_PATHS : Version = Version :: new ( 0 , 4 , 0 ) ;
12
+ pub const VYPER_BERLIN : Version = Version :: new ( 0 , 3 , 0 ) ;
13
+ pub const VYPER_PARIS : Version = Version :: new ( 0 , 3 , 7 ) ;
14
+ pub const VYPER_SHANGHAI : Version = Version :: new ( 0 , 3 , 8 ) ;
15
+ pub const VYPER_CANCUN : Version = Version :: new ( 0 , 3 , 8 ) ;
12
16
13
17
#[ derive( Clone , Copy , Debug , PartialEq , Eq , Serialize , Deserialize ) ]
14
18
#[ serde( rename_all = "lowercase" ) ]
@@ -79,11 +83,29 @@ impl VyperSettings {
79
83
}
80
84
81
85
self . sanitize_output_selection ( ) ;
86
+ self . normalize_evm_version ( version) ;
82
87
}
83
88
84
89
/// Sanitize the settings based on the compiler version.
85
90
pub fn sanitized ( mut self , version : & Version ) -> Self {
86
91
self . sanitize ( version) ;
87
92
self
88
93
}
94
+
95
+ /// Adjusts the EVM version based on the compiler version.
96
+ pub fn normalize_evm_version ( & mut self , version : & Version ) {
97
+ if let Some ( evm_version) = & mut self . evm_version {
98
+ * evm_version = if * evm_version >= EvmVersion :: Cancun && * version >= VYPER_CANCUN {
99
+ EvmVersion :: Cancun
100
+ } else if * evm_version >= EvmVersion :: Shanghai && * version >= VYPER_SHANGHAI {
101
+ EvmVersion :: Shanghai
102
+ } else if * evm_version >= EvmVersion :: Paris && * version >= VYPER_PARIS {
103
+ EvmVersion :: Paris
104
+ } else if * evm_version >= EvmVersion :: Berlin && * version >= VYPER_BERLIN {
105
+ EvmVersion :: Berlin
106
+ } else {
107
+ * evm_version
108
+ } ;
109
+ }
110
+ }
89
111
}
0 commit comments