Coverage Report

Created: 2026-10-26 06:53

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
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::Block>(solidity::yul::Block const&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
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::Block>(solidity::yul::Block const&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
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::VariableDeclaration>(solidity::yul::VariableDeclaration const&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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
}