Coverage Report

Created: 2026-08-14 07:35

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
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) 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
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) 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
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) 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
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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&) const
Line
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
}