/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 | 12.3M | 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 { langutil::DebugData::ConstPtr debugData; std::vector<Statement> statements; }; |
92 | | /// Function definition ("function f(a, b) -> (d, e) { ... }") |
93 | | struct FunctionDefinition { langutil::DebugData::ConstPtr debugData; YulName name; NameWithDebugDataList parameters; NameWithDebugDataList returnVariables; Block body; }; |
94 | | /// Conditional execution without "else" part. |
95 | | struct If { langutil::DebugData::ConstPtr debugData; std::unique_ptr<Expression> condition; Block body; }; |
96 | | /// Switch case or default case |
97 | | struct Case { langutil::DebugData::ConstPtr debugData; std::unique_ptr<Literal> value; Block body; }; |
98 | | /// Switch statement |
99 | | struct Switch { langutil::DebugData::ConstPtr debugData; std::unique_ptr<Expression> expression; std::vector<Case> cases; }; |
100 | | struct ForLoop { langutil::DebugData::ConstPtr debugData; Block pre; std::unique_ptr<Expression> condition; Block post; Block body; }; |
101 | | /// Break statement (valid within for loop) |
102 | | struct Break { langutil::DebugData::ConstPtr debugData; }; |
103 | | /// Continue statement (valid within for loop) |
104 | | struct Continue { langutil::DebugData::ConstPtr debugData; }; |
105 | | /// Leave statement (valid within function) |
106 | | struct Leave { langutil::DebugData::ConstPtr debugData; }; |
107 | | |
108 | | /// Immutable AST comprised of its top-level block |
109 | | class AST |
110 | | { |
111 | | public: |
112 | 822k | AST(Dialect const& _dialect, Block _root): m_dialect(_dialect), m_root(std::move(_root)) {} |
113 | | |
114 | 2.07M | Dialect const& dialect() const { return m_dialect; } |
115 | 2.06M | Block const& root() const { return m_root; } |
116 | | private: |
117 | | Dialect const& m_dialect; |
118 | | Block m_root; |
119 | | }; |
120 | | |
121 | | bool constexpr isBuiltinFunctionCall(FunctionCall const& _functionCall) noexcept |
122 | 118M | { |
123 | 118M | return std::holds_alternative<BuiltinName>(_functionCall.functionName); |
124 | 118M | } |
125 | | |
126 | | |
127 | | /// Extracts the IR source location from a Yul node. |
128 | | template <class T> inline langutil::SourceLocation nativeLocationOf(T const& _node) |
129 | 40.3M | { |
130 | 40.3M | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; |
131 | 40.3M | } solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::Block>(solidity::yul::Block const&) Line | Count | Source | 129 | 2.11M | { | 130 | 2.11M | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 131 | 2.11M | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::FunctionDefinition>(solidity::yul::FunctionDefinition const&) Line | Count | Source | 129 | 5.28M | { | 130 | 5.28M | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 131 | 5.28M | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::NameWithDebugData>(solidity::yul::NameWithDebugData const&) Line | Count | Source | 129 | 7.95M | { | 130 | 7.95M | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 131 | 7.95M | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::Identifier>(solidity::yul::Identifier const&) Line | Count | Source | 129 | 322k | { | 130 | 322k | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 131 | 322k | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::FunctionCall>(solidity::yul::FunctionCall const&) Line | Count | Source | 129 | 1.48M | { | 130 | 1.48M | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 131 | 1.48M | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::ExpressionStatement>(solidity::yul::ExpressionStatement const&) Line | Count | Source | 129 | 14.8k | { | 130 | 14.8k | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 131 | 14.8k | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::Assignment>(solidity::yul::Assignment const&) Line | Count | Source | 129 | 29.1k | { | 130 | 29.1k | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 131 | 29.1k | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::VariableDeclaration>(solidity::yul::VariableDeclaration const&) Line | Count | Source | 129 | 4.34M | { | 130 | 4.34M | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 131 | 4.34M | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::If>(solidity::yul::If const&) Line | Count | Source | 129 | 60 | { | 130 | 60 | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 131 | 60 | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::Switch>(solidity::yul::Switch const&) Line | Count | Source | 129 | 132k | { | 130 | 132k | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 131 | 132k | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::ForLoop>(solidity::yul::ForLoop const&) Line | Count | Source | 129 | 120 | { | 130 | 120 | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 131 | 120 | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::Break>(solidity::yul::Break const&) Line | Count | Source | 129 | 28 | { | 130 | 28 | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 131 | 28 | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::Continue>(solidity::yul::Continue const&) Line | Count | Source | 129 | 24 | { | 130 | 24 | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 131 | 24 | } |
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 | 129 | 18.2M | { | 130 | 18.2M | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 131 | 18.2M | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::Literal>(solidity::yul::Literal const&) Line | Count | Source | 129 | 500k | { | 130 | 500k | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 131 | 500k | } |
solidity::langutil::SourceLocation solidity::yul::nativeLocationOf<solidity::yul::Case>(solidity::yul::Case const&) Line | Count | Source | 129 | 1.12k | { | 130 | 1.12k | return _node.debugData ? _node.debugData->nativeLocation : langutil::SourceLocation{}; | 131 | 1.12k | } |
|
132 | | |
133 | | /// Extracts the IR source location from a Yul node. |
134 | | template <class... Args> inline langutil::SourceLocation nativeLocationOf(std::variant<Args...> const& _node) |
135 | 20.4M | { |
136 | 20.4M | 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 | 136 | 13.8k | 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 | 136 | 1.51k | 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 | 136 | 224 | 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 | 136 | 378 | 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 | 136 | 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 | 136 | 64 | 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 | 136 | 120 | 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 | 136 | 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 | 136 | 24 | 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 | 136 | 38 | 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 | 136 | 8.47k | 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 | 136 | 18.1M | 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 | 136 | 1.47M | 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 | 136 | 264k | 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 | 136 | 499k | return std::visit([](auto const& _arg) { return nativeLocationOf(_arg); }, _node); |
|
137 | 20.4M | } 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 | 135 | 16.3k | { | 136 | 16.3k | return std::visit([](auto const& _arg) { return nativeLocationOf(_arg); }, _node); | 137 | 16.3k | } |
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 | 135 | 18.1M | { | 136 | 18.1M | return std::visit([](auto const& _arg) { return nativeLocationOf(_arg); }, _node); | 137 | 18.1M | } |
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 | 135 | 2.23M | { | 136 | 2.23M | return std::visit([](auto const& _arg) { return nativeLocationOf(_arg); }, _node); | 137 | 2.23M | } |
|
138 | | |
139 | | /// Extracts the original source location from a Yul node. |
140 | | template <class T> inline langutil::SourceLocation originLocationOf(T const& _node) |
141 | 28.0M | { |
142 | 28.0M | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; |
143 | 28.0M | } solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::FunctionDefinition>(solidity::yul::FunctionDefinition const&) Line | Count | Source | 141 | 854k | { | 142 | 854k | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 143 | 854k | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::NameWithDebugData>(solidity::yul::NameWithDebugData const&) Line | Count | Source | 141 | 573 | { | 142 | 573 | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 143 | 573 | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::Identifier>(solidity::yul::Identifier const&) Line | Count | Source | 141 | 1.88M | { | 142 | 1.88M | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 143 | 1.88M | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::ExpressionStatement>(solidity::yul::ExpressionStatement const&) Line | Count | Source | 141 | 926k | { | 142 | 926k | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 143 | 926k | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::Assignment>(solidity::yul::Assignment const&) Line | Count | Source | 141 | 372k | { | 142 | 372k | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 143 | 372k | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::VariableDeclaration>(solidity::yul::VariableDeclaration const&) Line | Count | Source | 141 | 1.42M | { | 142 | 1.42M | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 143 | 1.42M | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::If>(solidity::yul::If const&) Line | Count | Source | 141 | 334k | { | 142 | 334k | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 143 | 334k | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::Switch>(solidity::yul::Switch const&) Line | Count | Source | 141 | 85.2k | { | 142 | 85.2k | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 143 | 85.2k | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::ForLoop>(solidity::yul::ForLoop const&) Line | Count | Source | 141 | 291k | { | 142 | 291k | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 143 | 291k | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::Break>(solidity::yul::Break const&) Line | Count | Source | 141 | 36.3k | { | 142 | 36.3k | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 143 | 36.3k | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::Continue>(solidity::yul::Continue const&) Line | Count | Source | 141 | 15.4k | { | 142 | 15.4k | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 143 | 15.4k | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::Leave>(solidity::yul::Leave const&) Line | Count | Source | 141 | 26.7k | { | 142 | 26.7k | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 143 | 26.7k | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::Block>(solidity::yul::Block const&) Line | Count | Source | 141 | 1.17M | { | 142 | 1.17M | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 143 | 1.17M | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::Literal>(solidity::yul::Literal const&) Line | Count | Source | 141 | 5.85M | { | 142 | 5.85M | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 143 | 5.85M | } |
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 | 141 | 9.77M | { | 142 | 9.77M | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 143 | 9.77M | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::Case>(solidity::yul::Case const&) Line | Count | Source | 141 | 100k | { | 142 | 100k | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 143 | 100k | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::CFG::FunctionCall>(solidity::yul::CFG::FunctionCall const&) Line | Count | Source | 141 | 264k | { | 142 | 264k | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 143 | 264k | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::CFG::BuiltinCall>(solidity::yul::CFG::BuiltinCall const&) Line | Count | Source | 141 | 1.41M | { | 142 | 1.41M | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 143 | 1.41M | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::VariableSlot>(solidity::yul::VariableSlot const&) Line | Count | Source | 141 | 109k | { | 142 | 109k | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 143 | 109k | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::LiteralSlot>(solidity::yul::LiteralSlot const&) Line | Count | Source | 141 | 1.54M | { | 142 | 1.54M | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 143 | 1.54M | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::CFG::BasicBlock>(solidity::yul::CFG::BasicBlock const&) Line | Count | Source | 141 | 1.40M | { | 142 | 1.40M | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 143 | 1.40M | } |
solidity::langutil::SourceLocation solidity::yul::originLocationOf<solidity::yul::CFG::FunctionInfo>(solidity::yul::CFG::FunctionInfo const&) Line | Count | Source | 141 | 153k | { | 142 | 153k | return _node.debugData ? _node.debugData->originLocation : langutil::SourceLocation{}; | 143 | 153k | } |
|
144 | | |
145 | | /// Extracts the original source location from a Yul node. |
146 | | template <class... Args> inline langutil::SourceLocation originLocationOf(std::variant<Args...> const& _node) |
147 | 8.15k | { |
148 | 8.15k | 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 | 148 | 6.93k | 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 | 148 | 757 | 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 | 148 | 112 | 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 | 148 | 189 | 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 | 148 | 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 | 148 | 32 | 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 | 148 | 60 | 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 | 148 | 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 | 148 | 12 | 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 | 148 | 19 | return std::visit([](auto const& _arg) { return originLocationOf(_arg); }, _node); |
|
149 | 8.15k | } |
150 | | |
151 | | /// Extracts the debug data from a Yul node. |
152 | | template <class T> inline langutil::DebugData::ConstPtr debugDataOf(T const& _node) |
153 | 102M | { |
154 | 102M | return _node.debugData; |
155 | 102M | } std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::FunctionCall>(solidity::yul::FunctionCall const&) Line | Count | Source | 153 | 7.80M | { | 154 | 7.80M | return _node.debugData; | 155 | 7.80M | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::Identifier>(solidity::yul::Identifier const&) Line | Count | Source | 153 | 11.5M | { | 154 | 11.5M | return _node.debugData; | 155 | 11.5M | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::Literal>(solidity::yul::Literal const&) Line | Count | Source | 153 | 66.9M | { | 154 | 66.9M | return _node.debugData; | 155 | 66.9M | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::BuiltinName>(solidity::yul::BuiltinName const&) Line | Count | Source | 153 | 22 | { | 154 | 22 | return _node.debugData; | 155 | 22 | } |
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 | 153 | 263k | { | 154 | 263k | return _node.debugData; | 155 | 263k | } |
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 | 153 | 200k | { | 154 | 200k | return _node.debugData; | 155 | 200k | } |
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 | 153 | 140k | { | 154 | 140k | return _node.debugData; | 155 | 140k | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::CFG::BasicBlock>(solidity::yul::CFG::BasicBlock const&) Line | Count | Source | 153 | 681k | { | 154 | 681k | return _node.debugData; | 155 | 681k | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::CFG::FunctionCall>(solidity::yul::CFG::FunctionCall const&) Line | Count | Source | 153 | 264k | { | 154 | 264k | return _node.debugData; | 155 | 264k | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::CFG::BuiltinCall>(solidity::yul::CFG::BuiltinCall const&) Line | Count | Source | 153 | 1.41M | { | 154 | 1.41M | return _node.debugData; | 155 | 1.41M | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::CFG::Assignment>(solidity::yul::CFG::Assignment const&) Line | Count | Source | 153 | 418k | { | 154 | 418k | return _node.debugData; | 155 | 418k | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::CFG::FunctionInfo>(solidity::yul::CFG::FunctionInfo const&) Line | Count | Source | 153 | 153k | { | 154 | 153k | return _node.debugData; | 155 | 153k | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::Block>(solidity::yul::Block const&) Line | Count | Source | 153 | 4.19M | { | 154 | 4.19M | return _node.debugData; | 155 | 4.19M | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::FunctionDefinition>(solidity::yul::FunctionDefinition const&) Line | Count | Source | 153 | 543k | { | 154 | 543k | return _node.debugData; | 155 | 543k | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::If>(solidity::yul::If const&) Line | Count | Source | 153 | 259k | { | 154 | 259k | return _node.debugData; | 155 | 259k | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::Case>(solidity::yul::Case const&) Line | Count | Source | 153 | 837k | { | 154 | 837k | return _node.debugData; | 155 | 837k | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::Switch>(solidity::yul::Switch const&) Line | Count | Source | 153 | 390k | { | 154 | 390k | return _node.debugData; | 155 | 390k | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::Break>(solidity::yul::Break const&) Line | Count | Source | 153 | 27.7k | { | 154 | 27.7k | return _node.debugData; | 155 | 27.7k | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::Continue>(solidity::yul::Continue const&) Line | Count | Source | 153 | 33.4k | { | 154 | 33.4k | return _node.debugData; | 155 | 33.4k | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::Leave>(solidity::yul::Leave const&) Line | Count | Source | 153 | 64.5k | { | 154 | 64.5k | return _node.debugData; | 155 | 64.5k | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::ForLoop>(solidity::yul::ForLoop const&) Line | Count | Source | 153 | 501k | { | 154 | 501k | return _node.debugData; | 155 | 501k | } |
std::__1::shared_ptr<solidity::langutil::DebugData const> solidity::yul::debugDataOf<solidity::yul::ExpressionStatement>(solidity::yul::ExpressionStatement const&) Line | Count | Source | 153 | 26.5k | { | 154 | 26.5k | return _node.debugData; | 155 | 26.5k | } |
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 | 153 | 5.84M | { | 154 | 5.84M | return _node.debugData; | 155 | 5.84M | } |
|
156 | | |
157 | | /// Extracts the debug data from a Yul node. |
158 | | template <class... Args> inline langutil::DebugData::ConstPtr debugDataOf(std::variant<Args...> const& _node) |
159 | 94.0M | { |
160 | 94.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::FunctionCall>(solidity::yul::FunctionCall const&) constLine | Count | Source | 160 | 7.80M | 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 | 160 | 10.6M | 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 | 160 | 66.6M | 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 | 160 | 18 | 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 | 160 | 965k | 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 | 160 | 22 | 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 | 160 | 264k | 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 | 160 | 1.41M | 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 | 160 | 418k | 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 | 160 | 26.5k | 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 | 160 | 5.84M | 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 | 160 | 450 | 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 | 160 | 9.44k | 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 | 160 | 30.5k | 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 | 160 | 40.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 | 160 | 1.24k | 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 | 160 | 3.54k | 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 | 160 | 6.19k | 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 | 160 | 675 | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node); |
|
161 | 94.0M | } 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 | 159 | 85.0M | { | 160 | 85.0M | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node); | 161 | 85.0M | } |
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 | 159 | 965k | { | 160 | 965k | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node); | 161 | 965k | } |
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 | 159 | 2.10M | { | 160 | 2.10M | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node); | 161 | 2.10M | } |
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 | 159 | 5.96M | { | 160 | 5.96M | return std::visit([](auto const& _arg) { return debugDataOf(_arg); }, _node); | 161 | 5.96M | } |
|
162 | | |
163 | | inline bool hasDefaultCase(Switch const& _switch) |
164 | 309k | { |
165 | 309k | return std::any_of( |
166 | 309k | _switch.cases.begin(), |
167 | 309k | _switch.cases.end(), |
168 | 903k | [](Case const& _case) { return !_case.value; } |
169 | 309k | ); |
170 | 309k | } |
171 | | |
172 | | } |