From f14b7598c7783291196a86506a87e83f82a20dea Mon Sep 17 00:00:00 2001 From: chriseth Date: Tue, 31 Aug 2021 12:57:13 +0200 Subject: [PATCH 1/2] Only list used source names. --- libsolidity/codegen/ir/Common.cpp | 5 +-- libsolidity/codegen/ir/Common.h | 4 +-- libsolidity/codegen/ir/IRGenerationContext.h | 3 ++ libsolidity/codegen/ir/IRGenerator.cpp | 32 +++++++++---------- libsolidity/codegen/ir/IRGenerator.h | 2 +- .../constant_optimizer_yul/output | 4 +-- test/cmdlineTests/exp_base_literal/output | 4 +-- .../output | 8 ++--- .../ir_compiler_subobjects/output | 12 +++---- .../output | 4 +-- .../output | 4 +-- .../keccak_optimization_deploy_code/output | 4 +-- .../keccak_optimization_low_runs/output | 4 +-- test/cmdlineTests/name_simplifier/output | 4 +-- .../cmdlineTests/optimizer_array_sload/output | 4 +-- test/cmdlineTests/revert_strings/output | 4 +-- .../output.json | 4 +-- .../standard_ir_requested/output.json | 4 +-- .../standard_viair_requested/output.json | 12 +++---- test/cmdlineTests/viair_abicoder_v1/output | 4 +-- test/cmdlineTests/viair_subobjects/output | 12 +++---- test/cmdlineTests/yul_optimizer_steps/output | 4 +-- .../yul_source_locations/output.json | 8 ++--- .../yul_string_format_ascii/output.json | 4 +-- .../output.json | 4 +-- .../output.json | 4 +-- .../yul_string_format_ascii_long/output.json | 4 +-- .../yul_string_format_hex/output.json | 4 +-- 28 files changed, 87 insertions(+), 83 deletions(-) diff --git a/libsolidity/codegen/ir/Common.cpp b/libsolidity/codegen/ir/Common.cpp index e9bbaa4e0..6aaecad81 100644 --- a/libsolidity/codegen/ir/Common.cpp +++ b/libsolidity/codegen/ir/Common.cpp @@ -127,9 +127,10 @@ string IRNames::zeroValue(Type const& _type, string const& _variableName) return "zero_" + _type.identifier() + _variableName; } -string sourceLocationComment(langutil::SourceLocation const& _location, IRGenerationContext const& _context) +string sourceLocationComment(langutil::SourceLocation const& _location, IRGenerationContext& _context) { solAssert(_location.sourceName, ""); + _context.markSourceUsed(*_location.sourceName); return "/// @src " + to_string(_context.sourceIndices().at(*_location.sourceName)) + ":" @@ -138,7 +139,7 @@ string sourceLocationComment(langutil::SourceLocation const& _location, IRGenera + to_string(_location.end); } -string sourceLocationComment(ASTNode const& _node, IRGenerationContext const& _context) +string sourceLocationComment(ASTNode const& _node, IRGenerationContext& _context) { return sourceLocationComment(_node.location(), _context); } diff --git a/libsolidity/codegen/ir/Common.h b/libsolidity/codegen/ir/Common.h index 67b0cffdc..ab5372286 100644 --- a/libsolidity/codegen/ir/Common.h +++ b/libsolidity/codegen/ir/Common.h @@ -73,8 +73,8 @@ struct IRNames * @returns a source location comment in the form of * `/// @src ::`. */ -std::string sourceLocationComment(langutil::SourceLocation const& _location, IRGenerationContext const& _context); -std::string sourceLocationComment(ASTNode const& _node, IRGenerationContext const& _context); +std::string sourceLocationComment(langutil::SourceLocation const& _location, IRGenerationContext& _context); +std::string sourceLocationComment(ASTNode const& _node, IRGenerationContext& _context); } diff --git a/libsolidity/codegen/ir/IRGenerationContext.h b/libsolidity/codegen/ir/IRGenerationContext.h index b8affcbd8..ee3eaced6 100644 --- a/libsolidity/codegen/ir/IRGenerationContext.h +++ b/libsolidity/codegen/ir/IRGenerationContext.h @@ -166,6 +166,8 @@ public: void copyFunctionIDsFrom(IRGenerationContext const& _other); std::map const& sourceIndices() const { return m_sourceIndices; } + void markSourceUsed(std::string const& _name) { m_usedSourceNames.insert(_name); } + std::set const& usedSourceNames() const { return m_usedSourceNames; } bool immutableRegistered(VariableDeclaration const& _varDecl) const { return m_immutableVariables.count(&_varDecl); } @@ -175,6 +177,7 @@ private: RevertStrings m_revertStrings; OptimiserSettings m_optimiserSettings; std::map m_sourceIndices; + std::set m_usedSourceNames; ContractDefinition const* m_mostDerivedContract = nullptr; std::map m_localVariables; /// Memory offsets reserved for the values of immutable variables during contract creation. diff --git a/libsolidity/codegen/ir/IRGenerator.cpp b/libsolidity/codegen/ir/IRGenerator.cpp index 9730cb35b..8acb6f599 100644 --- a/libsolidity/codegen/ir/IRGenerator.cpp +++ b/libsolidity/codegen/ir/IRGenerator.cpp @@ -131,12 +131,21 @@ string IRGenerator::generate( subObjectsSources += _otherYulSources.at(subObject); return subObjectsSources; }; + auto formatUseSrcMap = [](IRGenerationContext const& _context) -> string + { + return joinHumanReadable( + ranges::views::transform(_context.usedSourceNames(), [_context](string const& _sourceName) { + return to_string(_context.sourceIndices().at(_sourceName)) + ":" + escapeAndQuoteString(_sourceName); + }), + ", " + ); + }; Whiskers t(R"( /// @use-src object "" { code { - + @@ -150,7 +159,7 @@ string IRGenerator::generate( /// @use-src object "" { code { - + let called_via_delegatecall := iszero(eq(loadimmutable(""), address())) @@ -169,19 +178,8 @@ string IRGenerator::generate( for (VariableDeclaration const* var: ContractType(_contract).immutableVariables()) m_context.registerImmutableVariable(*var); - auto invertedSourceIndicies = invertMap(m_context.sourceIndices()); - - string useSrcMap = joinHumanReadable( - ranges::views::transform(invertedSourceIndicies, [](auto&& _pair) { - return to_string(_pair.first) + ":" + escapeAndQuoteString(_pair.second); - }), - ", " - ); - - t("useSrcMapCreation", useSrcMap); - t("sourceLocationComment", sourceLocationComment(_contract)); - t("CreationObject", IRNames::creationObject(_contract)); + t("sourceLocationCommentCreation", sourceLocationComment(_contract)); t("library", _contract.isLibrary()); FunctionDefinition const* constructor = _contract.constructor(); @@ -211,6 +209,7 @@ string IRGenerator::generate( // This has to be called only after all other code generation for the creation object is complete. bool creationInvolvesAssembly = m_context.inlineAssemblySeen(); t("memoryInitCreation", memoryInit(!creationInvolvesAssembly)); + t("useSrcMapCreation", formatUseSrcMap(m_context)); resetContext(_contract, ExecutionContext::Deployed); @@ -220,8 +219,8 @@ string IRGenerator::generate( m_context.initializeInternalDispatch(move(internalDispatchMap)); // Do not register immutables to avoid assignment. - t("useSrcMapDeployed", useSrcMap); t("DeployedObject", IRNames::deployedObject(_contract)); + t("sourceLocationCommentDeployed", sourceLocationComment(_contract)); t("library_address", IRNames::libraryAddressImmutable()); t("dispatch", dispatchRoutine(_contract)); set deployedFunctionList = generateQueuedFunctions(); @@ -231,6 +230,7 @@ string IRGenerator::generate( t("metadataName", yul::Object::metadataName()); t("cborMetadata", toHex(_cborMetadata)); + t("useSrcMapDeployed", formatUseSrcMap(m_context)); // This has to be called only after all other code generation for the deployed object is complete. bool deployedInvolvesAssembly = m_context.inlineAssemblySeen(); @@ -1073,7 +1073,7 @@ void IRGenerator::resetContext(ContractDefinition const& _contract, ExecutionCon m_context.addStateVariable(*get<0>(var), get<1>(var), get<2>(var)); } -string IRGenerator::sourceLocationComment(ASTNode const& _node) const +string IRGenerator::sourceLocationComment(ASTNode const& _node) { return ::sourceLocationComment(_node, m_context); } diff --git a/libsolidity/codegen/ir/IRGenerator.h b/libsolidity/codegen/ir/IRGenerator.h index 3fd58f239..9ec574752 100644 --- a/libsolidity/codegen/ir/IRGenerator.h +++ b/libsolidity/codegen/ir/IRGenerator.h @@ -119,7 +119,7 @@ private: void resetContext(ContractDefinition const& _contract, ExecutionContext _context); - std::string sourceLocationComment(ASTNode const& _node) const; + std::string sourceLocationComment(ASTNode const& _node); langutil::EVMVersion const m_evmVersion; OptimiserSettings const m_optimiserSettings; diff --git a/test/cmdlineTests/constant_optimizer_yul/output b/test/cmdlineTests/constant_optimizer_yul/output index 46df0ba95..15304fb3b 100644 --- a/test/cmdlineTests/constant_optimizer_yul/output +++ b/test/cmdlineTests/constant_optimizer_yul/output @@ -6,7 +6,7 @@ Optimized IR: * !USE AT YOUR OWN RISK! * *=====================================================*/ -/// @use-src 0:"constant_optimizer_yul/input.sol", 1:"#utility.yul" +/// @use-src 0:"constant_optimizer_yul/input.sol" object "C_12" { code { { @@ -21,7 +21,7 @@ object "C_12" { return(128, _1) } } - /// @use-src 0:"constant_optimizer_yul/input.sol", 1:"#utility.yul" + /// @use-src 0:"constant_optimizer_yul/input.sol" object "C_12_deployed" { code { { diff --git a/test/cmdlineTests/exp_base_literal/output b/test/cmdlineTests/exp_base_literal/output index 4b1484e3d..36d7800a0 100644 --- a/test/cmdlineTests/exp_base_literal/output +++ b/test/cmdlineTests/exp_base_literal/output @@ -7,7 +7,7 @@ IR: *=====================================================*/ -/// @use-src 0:"exp_base_literal/input.sol", 1:"#utility.yul" +/// @use-src 0:"exp_base_literal/input.sol" object "C_81" { code { /// @src 0:82:370 @@ -38,7 +38,7 @@ object "C_81" { } } - /// @use-src 0:"exp_base_literal/input.sol", 1:"#utility.yul" + /// @use-src 0:"exp_base_literal/input.sol" object "C_81_deployed" { code { /// @src 0:82:370 diff --git a/test/cmdlineTests/ir_compiler_inheritance_nosubobjects/output b/test/cmdlineTests/ir_compiler_inheritance_nosubobjects/output index 541dac88b..8f948ccb9 100644 --- a/test/cmdlineTests/ir_compiler_inheritance_nosubobjects/output +++ b/test/cmdlineTests/ir_compiler_inheritance_nosubobjects/output @@ -6,7 +6,7 @@ Optimized IR: * !USE AT YOUR OWN RISK! * *=====================================================*/ -/// @use-src 0:"ir_compiler_inheritance_nosubobjects/input.sol", 1:"#utility.yul" +/// @use-src 0:"ir_compiler_inheritance_nosubobjects/input.sol" object "C_7" { code { { @@ -18,7 +18,7 @@ object "C_7" { return(128, _1) } } - /// @use-src 0:"ir_compiler_inheritance_nosubobjects/input.sol", 1:"#utility.yul" + /// @use-src 0:"ir_compiler_inheritance_nosubobjects/input.sol" object "C_7_deployed" { code { { @@ -39,7 +39,7 @@ Optimized IR: * !USE AT YOUR OWN RISK! * *=====================================================*/ -/// @use-src 0:"ir_compiler_inheritance_nosubobjects/input.sol", 1:"#utility.yul" +/// @use-src 0:"ir_compiler_inheritance_nosubobjects/input.sol" object "D_10" { code { { @@ -51,7 +51,7 @@ object "D_10" { return(128, _1) } } - /// @use-src 0:"ir_compiler_inheritance_nosubobjects/input.sol", 1:"#utility.yul" + /// @use-src 0:"ir_compiler_inheritance_nosubobjects/input.sol" object "D_10_deployed" { code { { diff --git a/test/cmdlineTests/ir_compiler_subobjects/output b/test/cmdlineTests/ir_compiler_subobjects/output index 8de953f11..9da2e5e7f 100644 --- a/test/cmdlineTests/ir_compiler_subobjects/output +++ b/test/cmdlineTests/ir_compiler_subobjects/output @@ -6,7 +6,7 @@ Optimized IR: * !USE AT YOUR OWN RISK! * *=====================================================*/ -/// @use-src 0:"ir_compiler_subobjects/input.sol", 1:"#utility.yul" +/// @use-src 0:"ir_compiler_subobjects/input.sol" object "C_3" { code { { @@ -18,7 +18,7 @@ object "C_3" { return(128, _1) } } - /// @use-src 0:"ir_compiler_subobjects/input.sol", 1:"#utility.yul" + /// @use-src 0:"ir_compiler_subobjects/input.sol" object "C_3_deployed" { code { { @@ -39,7 +39,7 @@ Optimized IR: * !USE AT YOUR OWN RISK! * *=====================================================*/ -/// @use-src 0:"ir_compiler_subobjects/input.sol", 1:"#utility.yul" +/// @use-src 0:"ir_compiler_subobjects/input.sol" object "D_16" { code { { @@ -51,7 +51,7 @@ object "D_16" { return(128, _1) } } - /// @use-src 0:"ir_compiler_subobjects/input.sol", 1:"#utility.yul" + /// @use-src 0:"ir_compiler_subobjects/input.sol" object "D_16_deployed" { code { { @@ -90,7 +90,7 @@ object "D_16" { revert(0, 0) } } - /// @use-src 0:"ir_compiler_subobjects/input.sol", 1:"#utility.yul" + /// @use-src 0:"ir_compiler_subobjects/input.sol" object "C_3" { code { { @@ -102,7 +102,7 @@ object "D_16" { return(128, _1) } } - /// @use-src 0:"ir_compiler_subobjects/input.sol", 1:"#utility.yul" + /// @use-src 0:"ir_compiler_subobjects/input.sol" object "C_3_deployed" { code { { diff --git a/test/cmdlineTests/ir_with_assembly_no_memoryguard_creation/output b/test/cmdlineTests/ir_with_assembly_no_memoryguard_creation/output index b7cdc74e9..dff1fb478 100644 --- a/test/cmdlineTests/ir_with_assembly_no_memoryguard_creation/output +++ b/test/cmdlineTests/ir_with_assembly_no_memoryguard_creation/output @@ -6,7 +6,7 @@ Optimized IR: * !USE AT YOUR OWN RISK! * *=====================================================*/ -/// @use-src 0:"ir_with_assembly_no_memoryguard_creation/input.sol", 1:"#utility.yul" +/// @use-src 0:"ir_with_assembly_no_memoryguard_creation/input.sol" object "D_12" { code { { @@ -18,7 +18,7 @@ object "D_12" { return(128, _1) } } - /// @use-src 0:"ir_with_assembly_no_memoryguard_creation/input.sol", 1:"#utility.yul" + /// @use-src 0:"ir_with_assembly_no_memoryguard_creation/input.sol" object "D_12_deployed" { code { { diff --git a/test/cmdlineTests/ir_with_assembly_no_memoryguard_runtime/output b/test/cmdlineTests/ir_with_assembly_no_memoryguard_runtime/output index 0dece56bd..2fbed1d26 100644 --- a/test/cmdlineTests/ir_with_assembly_no_memoryguard_runtime/output +++ b/test/cmdlineTests/ir_with_assembly_no_memoryguard_runtime/output @@ -6,7 +6,7 @@ Optimized IR: * !USE AT YOUR OWN RISK! * *=====================================================*/ -/// @use-src 0:"ir_with_assembly_no_memoryguard_runtime/input.sol", 1:"#utility.yul" +/// @use-src 0:"ir_with_assembly_no_memoryguard_runtime/input.sol" object "D_8" { code { { @@ -18,7 +18,7 @@ object "D_8" { return(128, _1) } } - /// @use-src 0:"ir_with_assembly_no_memoryguard_runtime/input.sol", 1:"#utility.yul" + /// @use-src 0:"ir_with_assembly_no_memoryguard_runtime/input.sol" object "D_8_deployed" { code { { diff --git a/test/cmdlineTests/keccak_optimization_deploy_code/output b/test/cmdlineTests/keccak_optimization_deploy_code/output index 4e80153d4..09ea3d776 100644 --- a/test/cmdlineTests/keccak_optimization_deploy_code/output +++ b/test/cmdlineTests/keccak_optimization_deploy_code/output @@ -6,7 +6,7 @@ Optimized IR: * !USE AT YOUR OWN RISK! * *=====================================================*/ -/// @use-src 0:"keccak_optimization_deploy_code/input.sol", 1:"#utility.yul" +/// @use-src 0:"keccak_optimization_deploy_code/input.sol" object "C_12" { code { { @@ -22,7 +22,7 @@ object "C_12" { return(128, _1) } } - /// @use-src 0:"keccak_optimization_deploy_code/input.sol", 1:"#utility.yul" + /// @use-src 0:"keccak_optimization_deploy_code/input.sol" object "C_12_deployed" { code { { diff --git a/test/cmdlineTests/keccak_optimization_low_runs/output b/test/cmdlineTests/keccak_optimization_low_runs/output index 2632b38df..692bd4384 100644 --- a/test/cmdlineTests/keccak_optimization_low_runs/output +++ b/test/cmdlineTests/keccak_optimization_low_runs/output @@ -6,7 +6,7 @@ Optimized IR: * !USE AT YOUR OWN RISK! * *=====================================================*/ -/// @use-src 0:"keccak_optimization_low_runs/input.sol", 1:"#utility.yul" +/// @use-src 0:"keccak_optimization_low_runs/input.sol" object "C_7" { code { { @@ -18,7 +18,7 @@ object "C_7" { return(128, _1) } } - /// @use-src 0:"keccak_optimization_low_runs/input.sol", 1:"#utility.yul" + /// @use-src 0:"keccak_optimization_low_runs/input.sol" object "C_7_deployed" { code { { diff --git a/test/cmdlineTests/name_simplifier/output b/test/cmdlineTests/name_simplifier/output index b8c202c53..a774ead21 100644 --- a/test/cmdlineTests/name_simplifier/output +++ b/test/cmdlineTests/name_simplifier/output @@ -6,7 +6,7 @@ Optimized IR: * !USE AT YOUR OWN RISK! * *=====================================================*/ -/// @use-src 0:"name_simplifier/input.sol", 1:"#utility.yul" +/// @use-src 0:"name_simplifier/input.sol" object "C_59" { code { { @@ -18,7 +18,7 @@ object "C_59" { return(128, _1) } } - /// @use-src 0:"name_simplifier/input.sol", 1:"#utility.yul" + /// @use-src 0:"name_simplifier/input.sol" object "C_59_deployed" { code { { diff --git a/test/cmdlineTests/optimizer_array_sload/output b/test/cmdlineTests/optimizer_array_sload/output index 2355d5993..e7bf19abf 100644 --- a/test/cmdlineTests/optimizer_array_sload/output +++ b/test/cmdlineTests/optimizer_array_sload/output @@ -6,7 +6,7 @@ Optimized IR: * !USE AT YOUR OWN RISK! * *=====================================================*/ -/// @use-src 0:"optimizer_array_sload/input.sol", 1:"#utility.yul" +/// @use-src 0:"optimizer_array_sload/input.sol" object "Arraysum_34" { code { { @@ -18,7 +18,7 @@ object "Arraysum_34" { return(128, _1) } } - /// @use-src 0:"optimizer_array_sload/input.sol", 1:"#utility.yul" + /// @use-src 0:"optimizer_array_sload/input.sol" object "Arraysum_34_deployed" { code { { diff --git a/test/cmdlineTests/revert_strings/output b/test/cmdlineTests/revert_strings/output index 8a9bc748c..be43c5d0d 100644 --- a/test/cmdlineTests/revert_strings/output +++ b/test/cmdlineTests/revert_strings/output @@ -7,7 +7,7 @@ IR: *=====================================================*/ -/// @use-src 0:"revert_strings/input.sol", 1:"#utility.yul" +/// @use-src 0:"revert_strings/input.sol" object "C_15" { code { /// @src 0:59:147 @@ -53,7 +53,7 @@ object "C_15" { } } - /// @use-src 0:"revert_strings/input.sol", 1:"#utility.yul" + /// @use-src 0:"revert_strings/input.sol" object "C_15_deployed" { code { /// @src 0:59:147 diff --git a/test/cmdlineTests/standard_irOptimized_requested/output.json b/test/cmdlineTests/standard_irOptimized_requested/output.json index bb5b9de14..e94582898 100644 --- a/test/cmdlineTests/standard_irOptimized_requested/output.json +++ b/test/cmdlineTests/standard_irOptimized_requested/output.json @@ -5,7 +5,7 @@ * !USE AT YOUR OWN RISK! * *=====================================================*/ -/// @use-src 0:\"A\", 1:\"#utility.yul\" +/// @use-src 0:\"A\" object \"C_7\" { code { /// @src 0:79:121 @@ -25,7 +25,7 @@ object \"C_7\" { function revert_error_ca66f745a3ce8ff40e2ccaf1ad45db7774001b90d25810abd9040049be7bf4bb() { revert(0, 0) } } - /// @use-src 0:\"A\", 1:\"#utility.yul\" + /// @use-src 0:\"A\" object \"C_7_deployed\" { code { /// @src 0:79:121 diff --git a/test/cmdlineTests/standard_ir_requested/output.json b/test/cmdlineTests/standard_ir_requested/output.json index 3d9bb9135..3cc5c0808 100644 --- a/test/cmdlineTests/standard_ir_requested/output.json +++ b/test/cmdlineTests/standard_ir_requested/output.json @@ -6,7 +6,7 @@ *=====================================================*/ -/// @use-src 0:\"A\", 1:\"#utility.yul\" +/// @use-src 0:\"A\" object \"C_7\" { code { /// @src 0:79:121 @@ -37,7 +37,7 @@ object \"C_7\" { } } - /// @use-src 0:\"A\", 1:\"#utility.yul\" + /// @use-src 0:\"A\" object \"C_7_deployed\" { code { /// @src 0:79:121 diff --git a/test/cmdlineTests/standard_viair_requested/output.json b/test/cmdlineTests/standard_viair_requested/output.json index aa3291a25..9fa0b02a9 100644 --- a/test/cmdlineTests/standard_viair_requested/output.json +++ b/test/cmdlineTests/standard_viair_requested/output.json @@ -6,7 +6,7 @@ *=====================================================*/ -/// @use-src 0:\"A\", 1:\"#utility.yul\" +/// @use-src 0:\"A\" object \"C_3\" { code { /// @src 0:79:92 @@ -37,7 +37,7 @@ object \"C_3\" { } } - /// @use-src 0:\"A\", 1:\"#utility.yul\" + /// @use-src 0:\"A\" object \"C_3_deployed\" { code { /// @src 0:79:92 @@ -83,7 +83,7 @@ object \"C_3\" { *=====================================================*/ -/// @use-src 0:\"A\", 1:\"#utility.yul\" +/// @use-src 0:\"A\" object \"D_16\" { code { /// @src 0:93:146 @@ -114,7 +114,7 @@ object \"D_16\" { } } - /// @use-src 0:\"A\", 1:\"#utility.yul\" + /// @use-src 0:\"A\" object \"D_16_deployed\" { code { /// @src 0:93:146 @@ -215,7 +215,7 @@ object \"D_16\" { * !USE AT YOUR OWN RISK! * *=====================================================*/ - /// @use-src 0:\"A\", 1:\"#utility.yul\" + /// @use-src 0:\"A\" object \"C_3\" { code { /// @src 0:79:92 @@ -246,7 +246,7 @@ object \"D_16\" { } } - /// @use-src 0:\"A\", 1:\"#utility.yul\" + /// @use-src 0:\"A\" object \"C_3_deployed\" { code { /// @src 0:79:92 diff --git a/test/cmdlineTests/viair_abicoder_v1/output b/test/cmdlineTests/viair_abicoder_v1/output index ca9bbdc5e..6a164cc43 100644 --- a/test/cmdlineTests/viair_abicoder_v1/output +++ b/test/cmdlineTests/viair_abicoder_v1/output @@ -7,7 +7,7 @@ IR: *=====================================================*/ -/// @use-src 0:"viair_abicoder_v1/input.sol", 1:"#utility.yul" +/// @use-src 0:"viair_abicoder_v1/input.sol" object "test_11" { code { /// @src 0:79:169 @@ -38,7 +38,7 @@ object "test_11" { } } - /// @use-src 0:"viair_abicoder_v1/input.sol", 1:"#utility.yul" + /// @use-src 0:"viair_abicoder_v1/input.sol" object "test_11_deployed" { code { /// @src 0:79:169 diff --git a/test/cmdlineTests/viair_subobjects/output b/test/cmdlineTests/viair_subobjects/output index bfdec9087..03e952c7e 100644 --- a/test/cmdlineTests/viair_subobjects/output +++ b/test/cmdlineTests/viair_subobjects/output @@ -12,7 +12,7 @@ Optimized IR: * !USE AT YOUR OWN RISK! * *=====================================================*/ -/// @use-src 0:"viair_subobjects/input.sol", 1:"#utility.yul" +/// @use-src 0:"viair_subobjects/input.sol" object "C_3" { code { { @@ -24,7 +24,7 @@ object "C_3" { return(128, _1) } } - /// @use-src 0:"viair_subobjects/input.sol", 1:"#utility.yul" + /// @use-src 0:"viair_subobjects/input.sol" object "C_3_deployed" { code { { @@ -51,7 +51,7 @@ Optimized IR: * !USE AT YOUR OWN RISK! * *=====================================================*/ -/// @use-src 0:"viair_subobjects/input.sol", 1:"#utility.yul" +/// @use-src 0:"viair_subobjects/input.sol" object "D_16" { code { { @@ -63,7 +63,7 @@ object "D_16" { return(128, _1) } } - /// @use-src 0:"viair_subobjects/input.sol", 1:"#utility.yul" + /// @use-src 0:"viair_subobjects/input.sol" object "D_16_deployed" { code { { @@ -102,7 +102,7 @@ object "D_16" { revert(0, 0) } } - /// @use-src 0:"viair_subobjects/input.sol", 1:"#utility.yul" + /// @use-src 0:"viair_subobjects/input.sol" object "C_3" { code { { @@ -114,7 +114,7 @@ object "D_16" { return(128, _1) } } - /// @use-src 0:"viair_subobjects/input.sol", 1:"#utility.yul" + /// @use-src 0:"viair_subobjects/input.sol" object "C_3_deployed" { code { { diff --git a/test/cmdlineTests/yul_optimizer_steps/output b/test/cmdlineTests/yul_optimizer_steps/output index bdd97296d..5db709e53 100644 --- a/test/cmdlineTests/yul_optimizer_steps/output +++ b/test/cmdlineTests/yul_optimizer_steps/output @@ -6,7 +6,7 @@ Optimized IR: * !USE AT YOUR OWN RISK! * *=====================================================*/ -/// @use-src 0:"yul_optimizer_steps/input.sol", 1:"#utility.yul" +/// @use-src 0:"yul_optimizer_steps/input.sol" object "C_7" { code { { @@ -25,7 +25,7 @@ object "C_7" { function revert_error_ca66f745a3ce8ff40e2ccaf1ad45db7774001b90d25810abd9040049be7bf4bb() { revert(0, 0) } } - /// @use-src 0:"yul_optimizer_steps/input.sol", 1:"#utility.yul" + /// @use-src 0:"yul_optimizer_steps/input.sol" object "C_7_deployed" { code { { diff --git a/test/cmdlineTests/yul_source_locations/output.json b/test/cmdlineTests/yul_source_locations/output.json index c5d04aebb..4ce705261 100644 --- a/test/cmdlineTests/yul_source_locations/output.json +++ b/test/cmdlineTests/yul_source_locations/output.json @@ -6,7 +6,7 @@ *=====================================================*/ -/// @use-src 0:\"C\", 1:\"D\", 2:\"#utility.yul\" +/// @use-src 0:\"C\" object \"C_54\" { code { /// @src 0:79:428 @@ -156,7 +156,7 @@ object \"C_54\" { } } - /// @use-src 0:\"C\", 1:\"D\", 2:\"#utility.yul\" + /// @use-src 0:\"C\" object \"C_54_deployed\" { code { /// @src 0:79:428 @@ -564,7 +564,7 @@ object \"C_54\" { *=====================================================*/ -/// @use-src 0:\"C\", 1:\"D\", 2:\"#utility.yul\" +/// @use-src 0:\"C\", 1:\"D\" object \"D_72\" { code { /// @src 1:91:166 @@ -781,7 +781,7 @@ object \"D_72\" { } } - /// @use-src 0:\"C\", 1:\"D\", 2:\"#utility.yul\" + /// @use-src 0:\"C\", 1:\"D\" object \"D_72_deployed\" { code { /// @src 1:91:166 diff --git a/test/cmdlineTests/yul_string_format_ascii/output.json b/test/cmdlineTests/yul_string_format_ascii/output.json index d6bce8b6a..76a14d5cb 100644 --- a/test/cmdlineTests/yul_string_format_ascii/output.json +++ b/test/cmdlineTests/yul_string_format_ascii/output.json @@ -6,7 +6,7 @@ *=====================================================*/ -/// @use-src 0:\"A\", 1:\"#utility.yul\" +/// @use-src 0:\"A\" object \"C_11\" { code { /// @src 0:78:164 @@ -37,7 +37,7 @@ object \"C_11\" { } } - /// @use-src 0:\"A\", 1:\"#utility.yul\" + /// @use-src 0:\"A\" object \"C_11_deployed\" { code { /// @src 0:78:164 diff --git a/test/cmdlineTests/yul_string_format_ascii_bytes32/output.json b/test/cmdlineTests/yul_string_format_ascii_bytes32/output.json index ccf999086..39046124f 100644 --- a/test/cmdlineTests/yul_string_format_ascii_bytes32/output.json +++ b/test/cmdlineTests/yul_string_format_ascii_bytes32/output.json @@ -6,7 +6,7 @@ *=====================================================*/ -/// @use-src 0:\"A\", 1:\"#utility.yul\" +/// @use-src 0:\"A\" object \"C_11\" { code { /// @src 0:78:158 @@ -37,7 +37,7 @@ object \"C_11\" { } } - /// @use-src 0:\"A\", 1:\"#utility.yul\" + /// @use-src 0:\"A\" object \"C_11_deployed\" { code { /// @src 0:78:158 diff --git a/test/cmdlineTests/yul_string_format_ascii_bytes32_from_number/output.json b/test/cmdlineTests/yul_string_format_ascii_bytes32_from_number/output.json index f29e4347e..8ff41db27 100644 --- a/test/cmdlineTests/yul_string_format_ascii_bytes32_from_number/output.json +++ b/test/cmdlineTests/yul_string_format_ascii_bytes32_from_number/output.json @@ -6,7 +6,7 @@ *=====================================================*/ -/// @use-src 0:\"A\", 1:\"#utility.yul\" +/// @use-src 0:\"A\" object \"C_11\" { code { /// @src 0:78:159 @@ -37,7 +37,7 @@ object \"C_11\" { } } - /// @use-src 0:\"A\", 1:\"#utility.yul\" + /// @use-src 0:\"A\" object \"C_11_deployed\" { code { /// @src 0:78:159 diff --git a/test/cmdlineTests/yul_string_format_ascii_long/output.json b/test/cmdlineTests/yul_string_format_ascii_long/output.json index d701ce599..8c7c8b38a 100644 --- a/test/cmdlineTests/yul_string_format_ascii_long/output.json +++ b/test/cmdlineTests/yul_string_format_ascii_long/output.json @@ -6,7 +6,7 @@ *=====================================================*/ -/// @use-src 0:\"A\", 1:\"#utility.yul\" +/// @use-src 0:\"A\" object \"C_11\" { code { /// @src 0:78:243 @@ -37,7 +37,7 @@ object \"C_11\" { } } - /// @use-src 0:\"A\", 1:\"#utility.yul\" + /// @use-src 0:\"A\" object \"C_11_deployed\" { code { /// @src 0:78:243 diff --git a/test/cmdlineTests/yul_string_format_hex/output.json b/test/cmdlineTests/yul_string_format_hex/output.json index ac437ccec..58f2d628a 100644 --- a/test/cmdlineTests/yul_string_format_hex/output.json +++ b/test/cmdlineTests/yul_string_format_hex/output.json @@ -6,7 +6,7 @@ *=====================================================*/ -/// @use-src 0:\"A\", 1:\"#utility.yul\" +/// @use-src 0:\"A\" object \"C_11\" { code { /// @src 0:78:159 @@ -37,7 +37,7 @@ object \"C_11\" { } } - /// @use-src 0:\"A\", 1:\"#utility.yul\" + /// @use-src 0:\"A\" object \"C_11_deployed\" { code { /// @src 0:78:159 From 5093cff7aea787021f8735242f2950d99d1fc62e Mon Sep 17 00:00:00 2001 From: chriseth Date: Mon, 6 Sep 2021 18:26:30 +0200 Subject: [PATCH 2/2] Rename source location function. --- libsolidity/codegen/ir/Common.cpp | 6 +-- libsolidity/codegen/ir/Common.h | 7 ++-- libsolidity/codegen/ir/IRGenerator.cpp | 38 +++++++++---------- libsolidity/codegen/ir/IRGenerator.h | 2 +- .../codegen/ir/IRGeneratorForStatements.cpp | 4 +- 5 files changed, 29 insertions(+), 28 deletions(-) diff --git a/libsolidity/codegen/ir/Common.cpp b/libsolidity/codegen/ir/Common.cpp index 6aaecad81..772e9b53e 100644 --- a/libsolidity/codegen/ir/Common.cpp +++ b/libsolidity/codegen/ir/Common.cpp @@ -127,7 +127,7 @@ string IRNames::zeroValue(Type const& _type, string const& _variableName) return "zero_" + _type.identifier() + _variableName; } -string sourceLocationComment(langutil::SourceLocation const& _location, IRGenerationContext& _context) +string dispenseLocationComment(langutil::SourceLocation const& _location, IRGenerationContext& _context) { solAssert(_location.sourceName, ""); _context.markSourceUsed(*_location.sourceName); @@ -139,9 +139,9 @@ string sourceLocationComment(langutil::SourceLocation const& _location, IRGenera + to_string(_location.end); } -string sourceLocationComment(ASTNode const& _node, IRGenerationContext& _context) +string dispenseLocationComment(ASTNode const& _node, IRGenerationContext& _context) { - return sourceLocationComment(_node.location(), _context); + return dispenseLocationComment(_node.location(), _context); } } diff --git a/libsolidity/codegen/ir/Common.h b/libsolidity/codegen/ir/Common.h index ab5372286..3a860f8f1 100644 --- a/libsolidity/codegen/ir/Common.h +++ b/libsolidity/codegen/ir/Common.h @@ -71,10 +71,11 @@ struct IRNames /** * @returns a source location comment in the form of - * `/// @src ::`. + * `/// @src ::` + * and marks the source index as used. */ -std::string sourceLocationComment(langutil::SourceLocation const& _location, IRGenerationContext& _context); -std::string sourceLocationComment(ASTNode const& _node, IRGenerationContext& _context); +std::string dispenseLocationComment(langutil::SourceLocation const& _location, IRGenerationContext& _context); +std::string dispenseLocationComment(ASTNode const& _node, IRGenerationContext& _context); } diff --git a/libsolidity/codegen/ir/IRGenerator.cpp b/libsolidity/codegen/ir/IRGenerator.cpp index 8acb6f599..5affb1c08 100644 --- a/libsolidity/codegen/ir/IRGenerator.cpp +++ b/libsolidity/codegen/ir/IRGenerator.cpp @@ -179,7 +179,7 @@ string IRGenerator::generate( m_context.registerImmutableVariable(*var); t("CreationObject", IRNames::creationObject(_contract)); - t("sourceLocationCommentCreation", sourceLocationComment(_contract)); + t("sourceLocationCommentCreation", dispenseLocationComment(_contract)); t("library", _contract.isLibrary()); FunctionDefinition const* constructor = _contract.constructor(); @@ -220,7 +220,7 @@ string IRGenerator::generate( // Do not register immutables to avoid assignment. t("DeployedObject", IRNames::deployedObject(_contract)); - t("sourceLocationCommentDeployed", sourceLocationComment(_contract)); + t("sourceLocationCommentDeployed", dispenseLocationComment(_contract)); t("library_address", IRNames::libraryAddressImmutable()); t("dispatch", dispatchRoutine(_contract)); set deployedFunctionList = generateQueuedFunctions(); @@ -294,7 +294,7 @@ InternalDispatchMap IRGenerator::generateInternalDispatchFunctions(ContractDefin } )"); - templ("sourceLocationComment", sourceLocationComment(_contract)); + templ("sourceLocationComment", dispenseLocationComment(_contract)); templ("functionName", funName); templ("panic", m_utils.panicFunction(PanicCode::InvalidInternalFunction)); templ("in", suffixedVariableNameList("in_", 0, arity.in)); @@ -347,10 +347,10 @@ string IRGenerator::generateFunction(FunctionDefinition const& _function) )"); - t("sourceLocationComment", sourceLocationComment(_function)); + t("sourceLocationComment", dispenseLocationComment(_function)); t( "contractSourceLocationComment", - sourceLocationComment(m_context.mostDerivedContract()) + dispenseLocationComment(m_context.mostDerivedContract()) ); t("functionName", functionName); @@ -436,10 +436,10 @@ string IRGenerator::generateModifier( _modifierInvocation.name().annotation().referencedDeclaration ); solAssert(modifier, ""); - t("sourceLocationComment", sourceLocationComment(*modifier)); + t("sourceLocationComment", dispenseLocationComment(*modifier)); t( "contractSourceLocationComment", - sourceLocationComment(m_context.mostDerivedContract()) + dispenseLocationComment(m_context.mostDerivedContract()) ); switch (*_modifierInvocation.name().annotation().requiredLookup) @@ -499,10 +499,10 @@ string IRGenerator::generateFunctionWithModifierInner(FunctionDefinition const& } )"); - t("sourceLocationComment", sourceLocationComment(_function)); + t("sourceLocationComment", dispenseLocationComment(_function)); t( "contractSourceLocationComment", - sourceLocationComment(m_context.mostDerivedContract()) + dispenseLocationComment(m_context.mostDerivedContract()) ); t("functionName", functionName); vector retParams; @@ -547,10 +547,10 @@ string IRGenerator::generateGetter(VariableDeclaration const& _varDecl) } )") - ("sourceLocationComment", sourceLocationComment(_varDecl)) + ("sourceLocationComment", dispenseLocationComment(_varDecl)) ( "contractSourceLocationComment", - sourceLocationComment(m_context.mostDerivedContract()) + dispenseLocationComment(m_context.mostDerivedContract()) ) ("functionName", functionName) ("id", to_string(_varDecl.id())) @@ -566,10 +566,10 @@ string IRGenerator::generateGetter(VariableDeclaration const& _varDecl) } )") - ("sourceLocationComment", sourceLocationComment(_varDecl)) + ("sourceLocationComment", dispenseLocationComment(_varDecl)) ( "contractSourceLocationComment", - sourceLocationComment(m_context.mostDerivedContract()) + dispenseLocationComment(m_context.mostDerivedContract()) ) ("functionName", functionName) ("constantValueFunction", IRGeneratorForStatements(m_context, m_utils).constantValueFunction(_varDecl)) @@ -692,10 +692,10 @@ string IRGenerator::generateGetter(VariableDeclaration const& _varDecl) ("params", joinHumanReadable(parameters)) ("retVariables", joinHumanReadable(returnVariables)) ("code", std::move(code)) - ("sourceLocationComment", sourceLocationComment(_varDecl)) + ("sourceLocationComment", dispenseLocationComment(_varDecl)) ( "contractSourceLocationComment", - sourceLocationComment(m_context.mostDerivedContract()) + dispenseLocationComment(m_context.mostDerivedContract()) ) .render(); }); @@ -818,14 +818,14 @@ void IRGenerator::generateConstructors(ContractDefinition const& _contract) for (ASTPointer const& varDecl: contract->constructor()->parameters()) params += m_context.addLocalVariable(*varDecl).stackSlots(); - t("sourceLocationComment", sourceLocationComment( + t("sourceLocationComment", dispenseLocationComment( contract->constructor() ? dynamic_cast(*contract->constructor()) : dynamic_cast(*contract) )); t( "contractSourceLocationComment", - sourceLocationComment(m_context.mostDerivedContract()) + dispenseLocationComment(m_context.mostDerivedContract()) ); t("params", joinHumanReadable(params)); @@ -1073,7 +1073,7 @@ void IRGenerator::resetContext(ContractDefinition const& _contract, ExecutionCon m_context.addStateVariable(*get<0>(var), get<1>(var), get<2>(var)); } -string IRGenerator::sourceLocationComment(ASTNode const& _node) +string IRGenerator::dispenseLocationComment(ASTNode const& _node) { - return ::sourceLocationComment(_node, m_context); + return ::dispenseLocationComment(_node, m_context); } diff --git a/libsolidity/codegen/ir/IRGenerator.h b/libsolidity/codegen/ir/IRGenerator.h index 9ec574752..d5c2cbaec 100644 --- a/libsolidity/codegen/ir/IRGenerator.h +++ b/libsolidity/codegen/ir/IRGenerator.h @@ -119,7 +119,7 @@ private: void resetContext(ContractDefinition const& _contract, ExecutionContext _context); - std::string sourceLocationComment(ASTNode const& _node); + std::string dispenseLocationComment(ASTNode const& _node); langutil::EVMVersion const m_evmVersion; OptimiserSettings const m_optimiserSettings; diff --git a/libsolidity/codegen/ir/IRGeneratorForStatements.cpp b/libsolidity/codegen/ir/IRGeneratorForStatements.cpp index 66e54e893..8f281a10e 100644 --- a/libsolidity/codegen/ir/IRGeneratorForStatements.cpp +++ b/libsolidity/codegen/ir/IRGeneratorForStatements.cpp @@ -217,7 +217,7 @@ std::ostringstream& IRGeneratorForStatementsBase::appendCode(bool _addLocationCo m_currentLocation.isValid() && m_lastLocation != m_currentLocation ) - m_code << sourceLocationComment(m_currentLocation, m_context) << "\n"; + m_code << dispenseLocationComment(m_currentLocation, m_context) << "\n"; m_lastLocation = m_currentLocation; @@ -340,7 +340,7 @@ string IRGeneratorForStatements::constantValueFunction(VariableDeclaration const := } )"); - templ("sourceLocationComment", sourceLocationComment(_constant, m_context)); + templ("sourceLocationComment", dispenseLocationComment(_constant, m_context)); templ("functionName", functionName); IRGeneratorForStatements generator(m_context, m_utils); solAssert(_constant.value(), "");