diff --git a/crates/resolc/src/test_utils.rs b/crates/resolc/src/test_utils.rs index 8c227fb..7e3ba2e 100644 --- a/crates/resolc/src/test_utils.rs +++ b/crates/resolc/src/test_utils.rs @@ -89,7 +89,7 @@ pub fn build_solidity_with_options( sources.clone(), libraries.clone(), remappings, - SolcStandardJsonInputSettingsSelection::new_required(), + SolcStandardJsonInputSettingsSelection::new_required_for_tests(), SolcStandardJsonInputSettingsOptimizer::new( solc_optimizer_enabled, optimizer_settings.middle_end_as_string().chars().last(), @@ -154,7 +154,7 @@ pub fn build_solidity_with_options_evm( sources.clone(), libraries.clone(), remappings, - SolcStandardJsonInputSettingsSelection::new_required(), + SolcStandardJsonInputSettingsSelection::new_required_for_tests(), SolcStandardJsonInputSettingsOptimizer::new( solc_optimizer_enabled, None, @@ -211,7 +211,7 @@ pub fn build_solidity_and_detect_missing_libraries( sources.clone(), libraries.clone(), None, - SolcStandardJsonInputSettingsSelection::new_required(), + SolcStandardJsonInputSettingsSelection::new_required_for_tests(), SolcStandardJsonInputSettingsOptimizer::new(true, None, &solc_version.default, false), None, None, @@ -285,7 +285,7 @@ pub fn check_solidity_warning( sources.clone(), libraries, None, - SolcStandardJsonInputSettingsSelection::new_required(), + SolcStandardJsonInputSettingsSelection::new_required_for_tests(), SolcStandardJsonInputSettingsOptimizer::new(true, None, &solc_version.default, false), None, suppressed_warnings, diff --git a/crates/solc-json-interface/src/standard_json/input/settings/selection/file/mod.rs b/crates/solc-json-interface/src/standard_json/input/settings/selection/file/mod.rs index 2d4e148..945c47c 100644 --- a/crates/solc-json-interface/src/standard_json/input/settings/selection/file/mod.rs +++ b/crates/solc-json-interface/src/standard_json/input/settings/selection/file/mod.rs @@ -21,8 +21,20 @@ pub struct File { } impl File { - /// Creates the selection required by our compilation process. + /// Creates the selection required for production compilation (excludes EVM bytecode). pub fn new_required() -> Self { + Self { + per_file: Some(HashSet::from_iter([SelectionFlag::AST])), + per_contract: Some(HashSet::from_iter([ + SelectionFlag::MethodIdentifiers, + SelectionFlag::Metadata, + SelectionFlag::Yul, + ])), + } + } + + /// Creates the selection required for test compilation (includes EVM bytecode). + pub fn new_required_for_tests() -> Self { Self { per_file: Some(HashSet::from_iter([SelectionFlag::AST])), per_contract: Some(HashSet::from_iter([ @@ -49,3 +61,38 @@ impl File { self } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn production_excludes_evm_bytecode() { + let selection = File::new_required(); + let per_contract = selection.per_contract.unwrap(); + + // Production should NOT include EVM bytecode flags + assert!(!per_contract.contains(&SelectionFlag::EVMBC)); + assert!(!per_contract.contains(&SelectionFlag::EVMDBC)); + + // But should include other required flags + assert!(per_contract.contains(&SelectionFlag::MethodIdentifiers)); + assert!(per_contract.contains(&SelectionFlag::Metadata)); + assert!(per_contract.contains(&SelectionFlag::Yul)); + } + + #[test] + fn tests_include_evm_bytecode() { + let selection = File::new_required_for_tests(); + let per_contract = selection.per_contract.unwrap(); + + // Tests should include EVM bytecode flags + assert!(per_contract.contains(&SelectionFlag::EVMBC)); + assert!(per_contract.contains(&SelectionFlag::EVMDBC)); + + // And should also include other required flags + assert!(per_contract.contains(&SelectionFlag::MethodIdentifiers)); + assert!(per_contract.contains(&SelectionFlag::Metadata)); + assert!(per_contract.contains(&SelectionFlag::Yul)); + } +} diff --git a/crates/solc-json-interface/src/standard_json/input/settings/selection/mod.rs b/crates/solc-json-interface/src/standard_json/input/settings/selection/mod.rs index 0fd4602..f496759 100644 --- a/crates/solc-json-interface/src/standard_json/input/settings/selection/mod.rs +++ b/crates/solc-json-interface/src/standard_json/input/settings/selection/mod.rs @@ -29,6 +29,14 @@ impl Selection { } } + /// Creates the selection required for test compilation (includes EVM bytecode). + pub fn new_required_for_tests() -> Self { + Self { + all: Some(FileSelection::new_required_for_tests()), + files: BTreeMap::new(), + } + } + /// Extends the user's output selection with flag required by our compilation process. pub fn extend_with_required(&mut self) -> &mut Self { self.all