/src/solidity/libyul/AST.h
Line | Count | Source |
1 | | /* |
2 | | This file is part of solidity. |
3 | | |
4 | | solidity is free software: you can redistribute it and/or modify |
5 | | it under the terms of the GNU General Public License as published by |
6 | | the Free Software Foundation, either version 3 of the License, or |
7 | | (at your option) any later version. |
8 | | |
9 | | solidity is distributed in the hope that it will be useful, |
10 | | but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 | | GNU General Public License for more details. |
13 | | |
14 | | You should have received a copy of the GNU General Public License |
15 | | along with solidity. If not, see <http://www.gnu.org/licenses/>. |
16 | | */ |
17 | | // SPDX-License-Identifier: GPL-3.0 |
18 | | /** |
19 | | * @author Christian <c@ethdev.com> |
20 | | * @date 2016 |
21 | | * Parsed inline assembly to be used by the AST |
22 | | */ |
23 | | |
24 | | #pragma once |
25 | | |
26 | | #include <libyul/ASTForward.h> |
27 | | #include <libyul/Builtins.h> |
28 | | #include <libyul/YulName.h> |
29 | | |
30 | | #include <liblangutil/DebugData.h> |
31 | | |
32 | | #include <libsolutil/Numeric.h> |
33 | | |
34 | | #include <memory> |
35 | | #include <optional> |
36 | | |
37 | | namespace solidity::yul |
38 | | { |
39 | | |
40 | | class Dialect; |
41 | | |
42 | | struct NameWithDebugData { langutil::DebugData::ConstPtr debugData; YulName name; }; |
43 | | using NameWithDebugDataList = std::vector<NameWithDebugData>; |
44 | | |
45 | | /// Literal number or string (up to 32 bytes) |
46 | | enum class LiteralKind { Number, Boolean, String }; |
47 | | /// Literal value that holds a u256 word of data, can be of LiteralKind type and - in case of arguments to |
48 | | /// builtins - exceed the u256 word (32 bytes), in which case the value is stored as string. The former is constructed |
49 | | /// via u256 word and optional hint and leads to unlimited == false, the latter is |
50 | | /// constructed via the string constructor and leads to unlimited == true. |
51 | | class LiteralValue { |
52 | | public: |
53 | | using Data = u256; |
54 | | using BuiltinStringLiteralData = std::string; |
55 | | using RepresentationHint = std::shared_ptr<std::string>; |
56 | | |
57 | 13.0M | LiteralValue() = default; |
58 | | explicit LiteralValue(std::string _builtinStringLiteralValue); |
59 | | explicit LiteralValue(Data const& _data, std::optional<std::string> const& _hint = std::nullopt); |
60 | | |
61 | | bool operator==(LiteralValue const& _rhs) const; |
62 | | bool operator<(LiteralValue const& _rhs) const; |
63 | | Data const& value() const; |
64 | | BuiltinStringLiteralData const& builtinStringLiteralValue() const; |
65 | | bool unlimited() const; |
66 | | RepresentationHint const& hint() const; |
67 | | |
68 | | private: |
69 | | std::optional<Data> m_numericValue; |
70 | | std::shared_ptr<std::string> m_stringValue; |
71 | | }; |
72 | | struct Literal { langutil::DebugData::ConstPtr debugData; LiteralKind kind; LiteralValue value; }; |
73 | | /// External / internal identifier or label reference |
74 | | struct Identifier { langutil::DebugData::ConstPtr debugData; YulName name; }; |
75 | | /// AST Node representing a reference to one of the built-in functions (as defined by the dialect). |
76 | | /// In the source it's an actual name, while in the AST we only store a handle that can be used to find the function in the Dialect |
77 | | struct BuiltinName { langutil::DebugData::ConstPtr debugData; BuiltinHandle handle; }; |
78 | | /// Assignment ("x := mload(20:u256)", expects push-1-expression on the right hand |
79 | | /// side and requires x to occupy exactly one stack slot. |
80 | | /// |
81 | | /// Multiple assignment ("x, y := f()"), where the left hand side variables each occupy |
82 | | /// a single stack slot and expects a single expression on the right hand returning |
83 | | /// the same amount of items as the number of variables. |
84 | | struct Assignment { langutil::DebugData::ConstPtr debugData; std::vector<Identifier> variableNames; std::unique_ptr<Expression> value; }; |
85 | | struct FunctionCall { langutil::DebugData::ConstPtr debugData; FunctionName functionName; std::vector<Expression> arguments; }; |
86 | | /// Statement that contains only a single expression |
87 | | struct ExpressionStatement { langutil::DebugData::ConstPtr debugData; Expression expression; }; |
88 | | /// Block-scope variable declaration ("let x:u256 := mload(20:u256)"), non-hoisted |
89 | | struct VariableDeclaration { langutil::DebugData::ConstPtr debugData; NameWithDebugDataList variables; std::unique_ptr<Expression> value; }; |
90 | | /// Block that creates a scope (frees declared stack variables) |
91 | | struct Block |
92 | | { |
93 | 11.0M | Block() = default; |
94 | | Block(langutil::DebugData::ConstPtr _debugData, std::vector<Statement> _statements); |
95 | | Block(Block const&) = delete; |
96 | | Block& operator=(Block const&) = delete; |
97 | 94.3M | Block(Block&&) = default; |
98 | 4.05M | Block& operator=(Block&&) = default; |
99 | | |
100 | | langutil::DebugData::ConstPtr debugData; |
101 | | std::vector<Statement> statements; |
102 | | }; |
103 | | /// Function definition ("function f(a, b) -> (d, e) { ... }") |
104 | | struct FunctionDefinition { langutil::DebugData::ConstPtr debugData; YulName name; NameWithDebugDataList parameters; NameWithDebugDataList returnVariables; Block body; }; |
105 | | /// Conditional execution without "else" part. |
106 | | struct If { langutil::DebugData::ConstPtr debugData; std::unique_ptr<Expression> condition; Block body; }; |
107 | | /// Switch case or default case |
108 | | struct Case { langutil::DebugData::ConstPtr debugData; std::unique_ptr<Literal> value; Block body; }; |
109 | | /// Switch statement |
110 | | struct Switch { langutil::DebugData::ConstPtr debugData; std::unique_ptr<Expression> expression; std::vector<Case> cases; }; |
111 | | struct ForLoop { langutil::DebugData::ConstPtr debugData; Block pre; std::unique_ptr<Expression> condition; Block post; Block body; }; |
112 | | /// Break statement (valid within for loop) |
113 | | struct Break { langutil::DebugData::ConstPtr debugData; }; |
114 | | /// Continue statement (valid within for loop) |
115 | | struct Continue { langutil::DebugData::ConstPtr debugData; }; |
116 | | /// Leave statement (valid within function) |
117 | | struct Leave { langutil::DebugData::ConstPtr debugData; }; |
118 | | |
119 | | /// Defined here rather than in Block because it needs all Statement alternatives to be complete. |
120 | | inline Block::Block(langutil::DebugData::ConstPtr _debugData, std::vector<Statement> _statements): |
121 | 31.9M | debugData(std::move(_debugData)), statements(std::move(_statements)) |
122 | 31.9M | {} |
123 | | |
124 | | /// Immutable AST comprised of its top-level block |
125 | | class AST |
126 | | { |
127 | | public: |
128 | 814k | AST(Dialect const& _dialect, Block _root): m_dialect(_dialect), m_root(std::move(_root)) {} |
129 | | |
130 | 2.16M | Dialect const& dialect() const { return m_dialect; } |
131 | 2.14M | Block const& root() const { return m_root; } |
132 | | private: |
133 | | Dialect const& m_dialect; |
134 | | Block m_root; |
135 | | }; |
136 | | |
137 | | bool constexpr isBuiltinFunctionCall(FunctionCall const& _functionCall) noexcept |
138 | 130M | { |
139 | 130M | return std::holds_alternative<BuiltinName>(_functionCall.functionName); |
140 | 130M | } |
141 | | |
142 | | |
143 | | /// Extracts the IR source location from a Yul node. |
144 | | template <class T> inline langutil::SourceLocation nativeLocationOf(T const& _node) |
145 | 38.0M | { |
146 | 38.0M | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; |
147 | 38.0M | } solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::Block>(solidity::yul::Block const&) Line | Count | Source | 145 | 2.25M | { | 146 | 2.25M | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 147 | 2.25M | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::FunctionDefinition>(solidity::yul::FunctionDefinition const&) Line | Count | Source | 145 | 4.93M | { | 146 | 4.93M | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 147 | 4.93M | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::NameWithDebugData>(solidity::yul::NameWithDebugData const&) Line | Count | Source | 145 | 7.44M | { | 146 | 7.44M | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 147 | 7.44M | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::Identifier>(solidity::yul::Identifier const&) Line | Count | Source | 145 | 349k | { | 146 | 349k | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 147 | 349k | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::FunctionCall>(solidity::yul::FunctionCall const&) Line | Count | Source | 145 | 1.53M | { | 146 | 1.53M | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 147 | 1.53M | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::ExpressionStatement>(solidity::yul::ExpressionStatement const&) Line | Count | Source | 145 | 15.5k | { | 146 | 15.5k | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 147 | 15.5k | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::Assignment>(solidity::yul::Assignment const&) Line | Count | Source | 145 | 31.0k | { | 146 | 31.0k | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 147 | 31.0k | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::VariableDeclaration>(solidity::yul::VariableDeclaration const&) Line | Count | Source | 145 | 4.09M | { | 146 | 4.09M | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 147 | 4.09M | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::If>(solidity::yul::If const&) Line | Count | Source | 145 | 60 | { | 146 | 60 | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 147 | 60 | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::Switch>(solidity::yul::Switch const&) Line | Count | Source | 145 | 132k | { | 146 | 132k | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 147 | 132k | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::ForLoop>(solidity::yul::ForLoop const&) Line | Count | Source | 145 | 90 | { | 146 | 90 | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 147 | 90 | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::Break>(solidity::yul::Break const&) Line | Count | Source | 145 | 28 | { | 146 | 28 | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 147 | 28 | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::Continue>(solidity::yul::Continue const&) Line | Count | Source | 145 | 20 | { | 146 | 20 | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 147 | 20 | } |
Unexecuted instantiation: solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::Leave>(solidity::yul::Leave const&) solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::BuiltinName>(solidity::yul::BuiltinName const&) Line | Count | Source | 145 | 16.7M | { | 146 | 16.7M | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 147 | 16.7M | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::Literal>(solidity::yul::Literal const&) Line | Count | Source | 145 | 577k | { | 146 | 577k | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 147 | 577k | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::Case>(solidity::yul::Case const&) Line | Count | Source | 145 | 1.20k | { | 146 | 1.20k | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 147 | 1.20k | } |
|
148 | | |
149 | | /// Extracts the IR source location from a Yul node. |
150 | | template <class... Args> inline langutil::SourceLocation nativeLocationOf(std::variant<Args...> const& _node) |
151 | 19.1M | { |
152 | 19.1M | return std::visit([](auto const& _arg) { return nativeLocationOf(_arg); }, _node);auto solidity::yul::nativeLocationOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::ExpressionStatement>(solidity::yul::ExpressionStatement const&) constLine | Count | Source | 152 | 14.4k | return std::visit([](auto const& _arg) { return nativeLocationOf(_arg); }, _node); |
auto solidity::yul::nativeLocationOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::Assignment>(solidity::yul::Assignment const&) constLine | Count | Source | 152 | 1.50k | return std::visit([](auto const& _arg) { return nativeLocationOf(_arg); }, _node); |
auto solidity::yul::nativeLocationOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::VariableDeclaration>(solidity::yul::VariableDeclaration const&) constLine | Count | Source | 152 | 206 | return std::visit([](auto const& _arg) { return nativeLocationOf(_arg); }, _node); |
auto solidity::yul::nativeLocationOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::FunctionDefinition>(solidity::yul::FunctionDefinition const&) constLine | Count | Source | 152 | 530 | return std::visit([](auto const& _arg) { return nativeLocationOf(_arg); }, _node); |
auto solidity::yul::nativeLocationOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::If>(solidity::yul::If const&) constLine | Count | Source | 152 | 60 | return std::visit([](auto const& _arg) { return nativeLocationOf(_arg); }, _node); |
auto solidity::yul::nativeLocationOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::Switch>(solidity::yul::Switch const&) constLine | Count | Source | 152 | 74 | return std::visit([](auto const& _arg) { return nativeLocationOf(_arg); }, _node); |
auto solidity::yul::nativeLocationOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::ForLoop>(solidity::yul::ForLoop const&) constLine | Count | Source | 152 | 90 | return std::visit([](auto const& _arg) { return nativeLocationOf(_arg); }, _node); |
auto solidity::yul::nativeLocationOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::Break>(solidity::yul::Break const&) constLine | Count | Source | 152 | 28 | return std::visit([](auto const& _arg) { return nativeLocationOf(_arg); }, _node); |
auto solidity::yul::nativeLocationOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::Continue>(solidity::yul::Continue const&) constLine | Count | Source | 152 | 20 | return std::visit([](auto const& _arg) { return nativeLocationOf(_arg); }, _node); |
Unexecuted instantiation: auto solidity::yul::nativeLocationOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::Leave>(solidity::yul::Leave const&) constauto solidity::yul::nativeLocationOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::Block>(solidity::yul::Block const&) constLine | Count | Source | 152 | 30 | return std::visit([](auto const& _arg) { return nativeLocationOf(_arg); }, _node); |
auto solidity::yul::nativeLocationOf<solidity::yul::Identifier, solidity::yul::BuiltinName>(std::__1::variant<solidity::yul::Identifier, solidity::yul::BuiltinName> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::Identifier>(solidity::yul::Identifier const&) constLine | Count | Source | 152 | 9.97k | return std::visit([](auto const& _arg) { return nativeLocationOf(_arg); }, _node); |
auto solidity::yul::nativeLocationOf<solidity::yul::Identifier, solidity::yul::BuiltinName>(std::__1::variant<solidity::yul::Identifier, solidity::yul::BuiltinName> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::BuiltinName>(solidity::yul::BuiltinName const&) constLine | Count | Source | 152 | 16.6M | return std::visit([](auto const& _arg) { return nativeLocationOf(_arg); }, _node); |
auto solidity::yul::nativeLocationOf<solidity::yul::FunctionCall, solidity::yul::Identifier, solidity::yul::Literal>(std::__1::variant<solidity::yul::FunctionCall, solidity::yul::Identifier, solidity::yul::Literal> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::FunctionCall>(solidity::yul::FunctionCall const&) constLine | Count | Source | 152 | 1.52M | return std::visit([](auto const& _arg) { return nativeLocationOf(_arg); }, _node); |
auto solidity::yul::nativeLocationOf<solidity::yul::FunctionCall, solidity::yul::Identifier, solidity::yul::Literal>(std::__1::variant<solidity::yul::FunctionCall, solidity::yul::Identifier, solidity::yul::Literal> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::Identifier>(solidity::yul::Identifier const&) constLine | Count | Source | 152 | 286k | return std::visit([](auto const& _arg) { return nativeLocationOf(_arg); }, _node); |
auto solidity::yul::nativeLocationOf<solidity::yul::FunctionCall, solidity::yul::Identifier, solidity::yul::Literal>(std::__1::variant<solidity::yul::FunctionCall, solidity::yul::Identifier, solidity::yul::Literal> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::Literal>(solidity::yul::Literal const&) constLine | Count | Source | 152 | 576k | return std::visit([](auto const& _arg) { return nativeLocationOf(_arg); }, _node); |
|
153 | 19.1M | } solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&) Line | Count | Source | 151 | 17.0k | { | 152 | 17.0k | return std::visit([](auto const& _arg) { return nativeLocationOf(_arg); }, _node); | 153 | 17.0k | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::Identifier, solidity::yul::BuiltinName>(std::__1::variant<solidity::yul::Identifier, solidity::yul::BuiltinName> const&) Line | Count | Source | 151 | 16.6M | { | 152 | 16.6M | return std::visit([](auto const& _arg) { return nativeLocationOf(_arg); }, _node); | 153 | 16.6M | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::FunctionCall, solidity::yul::Identifier, solidity::yul::Literal>(std::__1::variant<solidity::yul::FunctionCall, solidity::yul::Identifier, solidity::yul::Literal> const&) Line | Count | Source | 151 | 2.39M | { | 152 | 2.39M | return std::visit([](auto const& _arg) { return nativeLocationOf(_arg); }, _node); | 153 | 2.39M | } |
|
154 | | |
155 | | /// Extracts the original source location from a Yul node. |
156 | | template <class T> inline langutil::SourceLocation originLocationOf(T const& _node) |
157 | 28.5M | { |
158 | 28.5M | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; |
159 | 28.5M | } solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::FunctionDefinition>(solidity::yul::FunctionDefinition const&) Line | Count | Source | 157 | 946k | { | 158 | 946k | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 159 | 946k | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::NameWithDebugData>(solidity::yul::NameWithDebugData const&) Line | Count | Source | 157 | 627 | { | 158 | 627 | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 159 | 627 | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::Identifier>(solidity::yul::Identifier const&) Line | Count | Source | 157 | 2.15M | { | 158 | 2.15M | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 159 | 2.15M | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::ExpressionStatement>(solidity::yul::ExpressionStatement const&) Line | Count | Source | 157 | 978k | { | 158 | 978k | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 159 | 978k | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::Assignment>(solidity::yul::Assignment const&) Line | Count | Source | 157 | 445k | { | 158 | 445k | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 159 | 445k | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::VariableDeclaration>(solidity::yul::VariableDeclaration const&) Line | Count | Source | 157 | 1.46M | { | 158 | 1.46M | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 159 | 1.46M | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::If>(solidity::yul::If const&) Line | Count | Source | 157 | 369k | { | 158 | 369k | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 159 | 369k | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::Switch>(solidity::yul::Switch const&) Line | Count | Source | 157 | 63.5k | { | 158 | 63.5k | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 159 | 63.5k | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::ForLoop>(solidity::yul::ForLoop const&) Line | Count | Source | 157 | 337k | { | 158 | 337k | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 159 | 337k | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::Break>(solidity::yul::Break const&) Line | Count | Source | 157 | 37.1k | { | 158 | 37.1k | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 159 | 37.1k | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::Continue>(solidity::yul::Continue const&) Line | Count | Source | 157 | 10.9k | { | 158 | 10.9k | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 159 | 10.9k | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::Leave>(solidity::yul::Leave const&) Line | Count | Source | 157 | 20.2k | { | 158 | 20.2k | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 159 | 20.2k | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::Block>(solidity::yul::Block const&) Line | Count | Source | 157 | 1.28M | { | 158 | 1.28M | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 159 | 1.28M | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::Literal>(solidity::yul::Literal const&) Line | Count | Source | 157 | 5.93M | { | 158 | 5.93M | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 159 | 5.93M | } |
Unexecuted instantiation: solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::BuiltinName>(solidity::yul::BuiltinName const&) solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::FunctionCall>(solidity::yul::FunctionCall const&) Line | Count | Source | 157 | 9.90M | { | 158 | 9.90M | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 159 | 9.90M | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::Case>(solidity::yul::Case const&) Line | Count | Source | 157 | 96.9k | { | 158 | 96.9k | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 159 | 96.9k | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::CFG::FunctionCall>(solidity::yul::CFG::FunctionCall const&) Line | Count | Source | 157 | 250k | { | 158 | 250k | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 159 | 250k | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::CFG::BuiltinCall>(solidity::yul::CFG::BuiltinCall const&) Line | Count | Source | 157 | 1.26M | { | 158 | 1.26M | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 159 | 1.26M | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::VariableSlot>(solidity::yul::VariableSlot const&) Line | Count | Source | 157 | 102k | { | 158 | 102k | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 159 | 102k | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::LiteralSlot>(solidity::yul::LiteralSlot const&) Line | Count | Source | 157 | 1.39M | { | 158 | 1.39M | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 159 | 1.39M | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::CFG::BasicBlock>(solidity::yul::CFG::BasicBlock const&) Line | Count | Source | 157 | 1.29M | { | 158 | 1.29M | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 159 | 1.29M | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::CFG::FunctionInfo>(solidity::yul::CFG::FunctionInfo const&) Line | Count | Source | 157 | 144k | { | 158 | 144k | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 159 | 144k | } |
|
160 | | |
161 | | /// Extracts the original source location from a Yul node. |
162 | | template <class... Args> inline langutil::SourceLocation originLocationOf(std::variant<Args...> const& _node) |
163 | 8.50k | { |
164 | 8.50k | return std::visit([](auto const& _arg) { return originLocationOf(_arg); }, _node);auto solidity::yul::originLocationOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::ExpressionStatement>(solidity::yul::ExpressionStatement const&) constLine | Count | Source | 164 | 7.23k | return std::visit([](auto const& _arg) { return originLocationOf(_arg); }, _node); |
auto solidity::yul::originLocationOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::Assignment>(solidity::yul::Assignment const&) constLine | Count | Source | 164 | 750 | return std::visit([](auto const& _arg) { return originLocationOf(_arg); }, _node); |
auto solidity::yul::originLocationOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::VariableDeclaration>(solidity::yul::VariableDeclaration const&) constLine | Count | Source | 164 | 103 | return std::visit([](auto const& _arg) { return originLocationOf(_arg); }, _node); |
auto solidity::yul::originLocationOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::FunctionDefinition>(solidity::yul::FunctionDefinition const&) constLine | Count | Source | 164 | 265 | return std::visit([](auto const& _arg) { return originLocationOf(_arg); }, _node); |
auto solidity::yul::originLocationOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::If>(solidity::yul::If const&) constLine | Count | Source | 164 | 30 | return std::visit([](auto const& _arg) { return originLocationOf(_arg); }, _node); |
auto solidity::yul::originLocationOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::Switch>(solidity::yul::Switch const&) constLine | Count | Source | 164 | 37 | return std::visit([](auto const& _arg) { return originLocationOf(_arg); }, _node); |
auto solidity::yul::originLocationOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::ForLoop>(solidity::yul::ForLoop const&) constLine | Count | Source | 164 | 45 | return std::visit([](auto const& _arg) { return originLocationOf(_arg); }, _node); |
auto solidity::yul::originLocationOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::Break>(solidity::yul::Break const&) constLine | Count | Source | 164 | 14 | return std::visit([](auto const& _arg) { return originLocationOf(_arg); }, _node); |
auto solidity::yul::originLocationOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::Continue>(solidity::yul::Continue const&) constLine | Count | Source | 164 | 10 | return std::visit([](auto const& _arg) { return originLocationOf(_arg); }, _node); |
Unexecuted instantiation: auto solidity::yul::originLocationOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::Leave>(solidity::yul::Leave const&) constauto solidity::yul::originLocationOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::Block>(solidity::yul::Block const&) constLine | Count | Source | 164 | 15 | return std::visit([](auto const& _arg) { return originLocationOf(_arg); }, _node); |
|
165 | 8.50k | } |
166 | | |
167 | | /// Extracts the debug data from a Yul node. |
168 | | template <class T> inline langutil::DebugData::ConstPtr debugDataOf(T const& _node) |
169 | 112M | { |
170 | 112M | return _node.debugData; |
171 | 112M | } std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::FunctionCall>(solidity::yul::FunctionCall const&) Line | Count | Source | 169 | 8.34M | { | 170 | 8.34M | return _node.debugData; | 171 | 8.34M | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::Identifier>(solidity::yul::Identifier const&) Line | Count | Source | 169 | 13.0M | { | 170 | 13.0M | return _node.debugData; | 171 | 13.0M | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::Literal>(solidity::yul::Literal const&) Line | Count | Source | 169 | 76.6M | { | 170 | 76.6M | return _node.debugData; | 171 | 76.6M | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::BuiltinName>(solidity::yul::BuiltinName const&) Line | Count | Source | 169 | 26 | { | 170 | 26 | return _node.debugData; | 171 | 26 | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::CFG::BasicBlock::Jump>(solidity::yul::CFG::BasicBlock::Jump const&) Line | Count | Source | 169 | 239k | { | 170 | 239k | return _node.debugData; | 171 | 239k | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::CFG::BasicBlock::ConditionalJump>(solidity::yul::CFG::BasicBlock::ConditionalJump const&) Line | Count | Source | 169 | 184k | { | 170 | 184k | return _node.debugData; | 171 | 184k | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::CFG::BasicBlock::FunctionReturn>(solidity::yul::CFG::BasicBlock::FunctionReturn const&) Line | Count | Source | 169 | 130k | { | 170 | 130k | return _node.debugData; | 171 | 130k | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::CFG::BasicBlock>(solidity::yul::CFG::BasicBlock const&) Line | Count | Source | 169 | 490k | { | 170 | 490k | return _node.debugData; | 171 | 490k | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::CFG::FunctionCall>(solidity::yul::CFG::FunctionCall const&) Line | Count | Source | 169 | 250k | { | 170 | 250k | return _node.debugData; | 171 | 250k | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::CFG::BuiltinCall>(solidity::yul::CFG::BuiltinCall const&) Line | Count | Source | 169 | 1.26M | { | 170 | 1.26M | return _node.debugData; | 171 | 1.26M | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::CFG::Assignment>(solidity::yul::CFG::Assignment const&) Line | Count | Source | 169 | 378k | { | 170 | 378k | return _node.debugData; | 171 | 378k | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::CFG::FunctionInfo>(solidity::yul::CFG::FunctionInfo const&) Line | Count | Source | 169 | 144k | { | 170 | 144k | return _node.debugData; | 171 | 144k | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::Block>(solidity::yul::Block const&) Line | Count | Source | 169 | 2.96M | { | 170 | 2.96M | return _node.debugData; | 171 | 2.96M | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::FunctionDefinition>(solidity::yul::FunctionDefinition const&) Line | Count | Source | 169 | 379k | { | 170 | 379k | return _node.debugData; | 171 | 379k | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::If>(solidity::yul::If const&) Line | Count | Source | 169 | 195k | { | 170 | 195k | return _node.debugData; | 171 | 195k | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::Case>(solidity::yul::Case const&) Line | Count | Source | 169 | 497k | { | 170 | 497k | return _node.debugData; | 171 | 497k | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::Switch>(solidity::yul::Switch const&) Line | Count | Source | 169 | 246k | { | 170 | 246k | return _node.debugData; | 171 | 246k | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::Break>(solidity::yul::Break const&) Line | Count | Source | 169 | 23.6k | { | 170 | 23.6k | return _node.debugData; | 171 | 23.6k | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::Continue>(solidity::yul::Continue const&) Line | Count | Source | 169 | 30.6k | { | 170 | 30.6k | return _node.debugData; | 171 | 30.6k | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::Leave>(solidity::yul::Leave const&) Line | Count | Source | 169 | 46.1k | { | 170 | 46.1k | return _node.debugData; | 171 | 46.1k | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::ForLoop>(solidity::yul::ForLoop const&) Line | Count | Source | 169 | 385k | { | 170 | 385k | return _node.debugData; | 171 | 385k | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::ExpressionStatement>(solidity::yul::ExpressionStatement const&) Line | Count | Source | 169 | 24.6k | { | 170 | 24.6k | return _node.debugData; | 171 | 24.6k | } |
Unexecuted instantiation: std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::Assignment>(solidity::yul::Assignment const&) std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::VariableDeclaration>(solidity::yul::VariableDeclaration const&) Line | Count | Source | 169 | 6.87M | { | 170 | 6.87M | return _node.debugData; | 171 | 6.87M | } |
|
172 | | |
173 | | /// Extracts the debug data from a Yul node. |
174 | | template <class... Args> inline langutil::DebugData::ConstPtr debugDataOf(std::variant<Args...> const& _node) |
175 | 106M | { |
176 | 106M | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node);auto solidity::yul::debugDataOf<solidity::yul::FunctionCall, solidity::yul::Identifier, solidity::yul::Literal>(std::__1::variant<solidity::yul::FunctionCall, solidity::yul::Identifier, solidity::yul::Literal> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::FunctionCall>(solidity::yul::FunctionCall const&) constLine | Count | Source | 176 | 8.34M | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node); |
auto solidity::yul::debugDataOf<solidity::yul::FunctionCall, solidity::yul::Identifier, solidity::yul::Literal>(std::__1::variant<solidity::yul::FunctionCall, solidity::yul::Identifier, solidity::yul::Literal> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::Identifier>(solidity::yul::Identifier const&) constLine | Count | Source | 176 | 12.0M | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node); |
auto solidity::yul::debugDataOf<solidity::yul::FunctionCall, solidity::yul::Identifier, solidity::yul::Literal>(std::__1::variant<solidity::yul::FunctionCall, solidity::yul::Identifier, solidity::yul::Literal> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::Literal>(solidity::yul::Literal const&) constLine | Count | Source | 176 | 76.4M | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node); |
auto solidity::yul::debugDataOf<solidity::yul::Literal, solidity::yul::Identifier, solidity::yul::BuiltinName>(std::__1::variant<solidity::yul::Literal, solidity::yul::Identifier, solidity::yul::BuiltinName> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::Literal>(solidity::yul::Literal const&) constLine | Count | Source | 176 | 19 | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node); |
auto solidity::yul::debugDataOf<solidity::yul::Literal, solidity::yul::Identifier, solidity::yul::BuiltinName>(std::__1::variant<solidity::yul::Literal, solidity::yul::Identifier, solidity::yul::BuiltinName> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::Identifier>(solidity::yul::Identifier const&) constLine | Count | Source | 176 | 1.04M | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node); |
auto solidity::yul::debugDataOf<solidity::yul::Literal, solidity::yul::Identifier, solidity::yul::BuiltinName>(std::__1::variant<solidity::yul::Literal, solidity::yul::Identifier, solidity::yul::BuiltinName> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::BuiltinName>(solidity::yul::BuiltinName const&) constLine | Count | Source | 176 | 26 | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node); |
auto solidity::yul::debugDataOf<solidity::yul::CFG::FunctionCall, solidity::yul::CFG::BuiltinCall, solidity::yul::CFG::Assignment>(std::__1::variant<solidity::yul::CFG::FunctionCall, solidity::yul::CFG::BuiltinCall, solidity::yul::CFG::Assignment> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::CFG::FunctionCall>(solidity::yul::CFG::FunctionCall const&) constLine | Count | Source | 176 | 250k | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node); |
auto solidity::yul::debugDataOf<solidity::yul::CFG::FunctionCall, solidity::yul::CFG::BuiltinCall, solidity::yul::CFG::Assignment>(std::__1::variant<solidity::yul::CFG::FunctionCall, solidity::yul::CFG::BuiltinCall, solidity::yul::CFG::Assignment> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::CFG::BuiltinCall>(solidity::yul::CFG::BuiltinCall const&) constLine | Count | Source | 176 | 1.26M | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node); |
auto solidity::yul::debugDataOf<solidity::yul::CFG::FunctionCall, solidity::yul::CFG::BuiltinCall, solidity::yul::CFG::Assignment>(std::__1::variant<solidity::yul::CFG::FunctionCall, solidity::yul::CFG::BuiltinCall, solidity::yul::CFG::Assignment> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::CFG::Assignment>(solidity::yul::CFG::Assignment const&) constLine | Count | Source | 176 | 378k | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node); |
auto solidity::yul::debugDataOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::ExpressionStatement>(solidity::yul::ExpressionStatement const&) constLine | Count | Source | 176 | 24.6k | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node); |
Unexecuted instantiation: auto solidity::yul::debugDataOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::Assignment>(solidity::yul::Assignment const&) constauto solidity::yul::debugDataOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::VariableDeclaration>(solidity::yul::VariableDeclaration const&) constLine | Count | Source | 176 | 6.87M | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node); |
auto solidity::yul::debugDataOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::FunctionDefinition>(solidity::yul::FunctionDefinition const&) constLine | Count | Source | 176 | 318 | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node); |
auto solidity::yul::debugDataOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::If>(solidity::yul::If const&) constLine | Count | Source | 176 | 10.7k | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node); |
auto solidity::yul::debugDataOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::Switch>(solidity::yul::Switch const&) constLine | Count | Source | 176 | 30.9k | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node); |
auto solidity::yul::debugDataOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::ForLoop>(solidity::yul::ForLoop const&) constLine | Count | Source | 176 | 46.9k | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node); |
auto solidity::yul::debugDataOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::Break>(solidity::yul::Break const&) constLine | Count | Source | 176 | 1.69k | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node); |
auto solidity::yul::debugDataOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::Continue>(solidity::yul::Continue const&) constLine | Count | Source | 176 | 4.07k | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node); |
auto solidity::yul::debugDataOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::Leave>(solidity::yul::Leave const&) constLine | Count | Source | 176 | 8.38k | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node); |
auto solidity::yul::debugDataOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&)::{lambda(auto:1 const&)#1}::operator()<solidity::yul::Block>(solidity::yul::Block const&) constLine | Count | Source | 176 | 303 | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node); |
|
177 | 106M | } std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::FunctionCall, solidity::yul::Identifier, solidity::yul::Literal>(std::__1::variant<solidity::yul::FunctionCall, solidity::yul::Identifier, solidity::yul::Literal> const&) Line | Count | Source | 175 | 96.8M | { | 176 | 96.8M | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node); | 177 | 96.8M | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::Literal, solidity::yul::Identifier, solidity::yul::BuiltinName>(std::__1::variant<solidity::yul::Literal, solidity::yul::Identifier, solidity::yul::BuiltinName> const&) Line | Count | Source | 175 | 1.04M | { | 176 | 1.04M | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node); | 177 | 1.04M | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::CFG::FunctionCall, solidity::yul::CFG::BuiltinCall, solidity::yul::CFG::Assignment>(std::__1::variant<solidity::yul::CFG::FunctionCall, solidity::yul::CFG::BuiltinCall, solidity::yul::CFG::Assignment> const&) Line | Count | Source | 175 | 1.89M | { | 176 | 1.89M | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node); | 177 | 1.89M | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block>(std::__1::variant<solidity::yul::ExpressionStatement, solidity::yul::Assignment, solidity::yul::VariableDeclaration, solidity::yul::FunctionDefinition, solidity::yul::If, solidity::yul::Switch, solidity::yul::ForLoop, solidity::yul::Break, solidity::yul::Continue, solidity::yul::Leave, solidity::yul::Block> const&) Line | Count | Source | 175 | 7.00M | { | 176 | 7.00M | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node); | 177 | 7.00M | } |
|
178 | | |
179 | | inline bool hasDefaultCase(Switch const& _switch) |
180 | 389k | { |
181 | 389k | return std::any_of( |
182 | 389k | _switch.cases.begin(), |
183 | 389k | _switch.cases.end(), |
184 | 1.06M | [](Case const& _case) { return !_case.value; } |
185 | 389k | ); |
186 | 389k | } |
187 | | |
188 | | } |