Skip to content

Commit 29db49e

Browse files
committed
Yul Interpreter: Integrate numerical IDs
1 parent 13b5091 commit 29db49e

File tree

4 files changed

+29
-14
lines changed

4 files changed

+29
-14
lines changed

test/tools/yulInterpreter/Inspector.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ void InspectedInterpreter::run(
5252
)
5353
{
5454
Scope scope;
55-
InspectedInterpreter{_inspector, _state, _ast.dialect(), scope, _disableExternalCalls, _disableMemoryTrace}(_ast.root());
55+
InspectedInterpreter{_inspector, _state, _ast.dialect(), _ast.labels(), scope, _disableExternalCalls, _disableMemoryTrace}(_ast.root());
5656
}
5757

5858
Inspector::NodeAction Inspector::queryUser(langutil::DebugData const& _data, std::map<YulName, u256> const& _variables)
@@ -98,7 +98,7 @@ Inspector::NodeAction Inspector::queryUser(langutil::DebugData const& _data, std
9898
else if (input == "variables" || input == "v")
9999
{
100100
for (auto &&[yulStr, val]: _variables)
101-
printVariable(yulStr.str(), val);
101+
printVariable(m_labels[yulStr], val);
102102
std::cout << std::endl;
103103
}
104104
else if (
@@ -117,9 +117,9 @@ Inspector::NodeAction Inspector::queryUser(langutil::DebugData const& _data, std
117117

118118
bool found = false;
119119
for (auto &&[yulStr, val]: _variables)
120-
if (yulStr.str() == varname)
120+
if (m_labels[yulStr] == varname)
121121
{
122-
printVariable(varname, val);
122+
printVariable(m_labels[yulStr], val);
123123
found = true;
124124
break;
125125
}
@@ -140,14 +140,14 @@ std::string Inspector::currentSource(langutil::DebugData const& _data) const
140140

141141
u256 InspectedInterpreter::evaluate(Expression const& _expression)
142142
{
143-
InspectedExpressionEvaluator ev(m_inspector, m_state, m_dialect, *m_scope, m_variables, m_disableExternalCalls, m_disableMemoryTrace);
143+
InspectedExpressionEvaluator ev(m_inspector, m_state, m_dialect, m_labels, *m_scope, m_variables, m_disableExternalCalls, m_disableMemoryTrace);
144144
ev.visit(_expression);
145145
return ev.value();
146146
}
147147

148148
std::vector<u256> InspectedInterpreter::evaluateMulti(Expression const& _expression)
149149
{
150-
InspectedExpressionEvaluator ev(m_inspector, m_state, m_dialect, *m_scope, m_variables, m_disableExternalCalls, m_disableMemoryTrace);
150+
InspectedExpressionEvaluator ev(m_inspector, m_state, m_dialect, m_labels, *m_scope, m_variables, m_disableExternalCalls, m_disableMemoryTrace);
151151
ev.visit(_expression);
152152
return ev.values();
153153
}

test/tools/yulInterpreter/Inspector.h

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ class Inspector
4646
StepThroughNode,
4747
};
4848

49-
Inspector(std::string const& _source, InterpreterState const& _state)
50-
:m_source(_source), m_state(_state) {}
49+
Inspector(std::string const& _source, InterpreterState const& _state, ASTLabelRegistry const& _labels):
50+
m_source(_source), m_state(_state), m_labels(_labels) {}
5151

5252
/* Asks the user what action to take.
5353
* @returns NodeAction::RunNode if the current AST node (and all children nodes!) should be
@@ -86,6 +86,8 @@ class Inspector
8686
/// State of the interpreter
8787
InterpreterState const& m_state;
8888

89+
ASTLabelRegistry const& m_labels;
90+
8991
/// Last user query command
9092
std::string m_lastInput;
9193

@@ -112,12 +114,13 @@ class InspectedInterpreter: public Interpreter
112114
std::shared_ptr<Inspector> _inspector,
113115
InterpreterState& _state,
114116
Dialect const& _dialect,
117+
ASTLabelRegistry const& _labels,
115118
Scope& _scope,
116119
bool _disableExternalCalls,
117120
bool _disableMemoryTracing,
118121
std::map<YulName, u256> _variables = {}
119122
):
120-
Interpreter(_state, _dialect, _scope, _disableExternalCalls, _disableMemoryTracing, _variables),
123+
Interpreter(_state, _dialect, _labels, _scope, _disableExternalCalls, _disableMemoryTracing, _variables),
121124
m_inspector(_inspector)
122125
{
123126
}
@@ -158,12 +161,13 @@ class InspectedExpressionEvaluator: public ExpressionEvaluator
158161
std::shared_ptr<Inspector> _inspector,
159162
InterpreterState& _state,
160163
Dialect const& _dialect,
164+
ASTLabelRegistry const& _labels,
161165
Scope& _scope,
162166
std::map<YulName, u256> const& _variables,
163167
bool _disableExternalCalls,
164168
bool _disableMemoryTrace
165169
):
166-
ExpressionEvaluator(_state, _dialect, _scope, _variables, _disableExternalCalls, _disableMemoryTrace),
170+
ExpressionEvaluator(_state, _dialect, _labels, _scope, _variables, _disableExternalCalls, _disableMemoryTrace),
167171
m_inspector(_inspector)
168172
{}
169173

@@ -185,6 +189,7 @@ class InspectedExpressionEvaluator: public ExpressionEvaluator
185189
m_inspector,
186190
m_state,
187191
m_dialect,
192+
m_labels,
188193
m_scope,
189194
m_disableExternalCalls,
190195
m_disableMemoryTrace,
@@ -196,10 +201,12 @@ class InspectedExpressionEvaluator: public ExpressionEvaluator
196201
return std::make_unique<InspectedInterpreter>(
197202
std::make_unique<Inspector>(
198203
m_inspector->source(),
199-
_state
204+
_state,
205+
m_labels
200206
),
201207
_state,
202208
m_dialect,
209+
m_labels,
203210
_scope,
204211
m_disableExternalCalls,
205212
m_disableMemoryTrace

test/tools/yulInterpreter/Interpreter.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ void Interpreter::run(
115115
)
116116
{
117117
Scope scope;
118-
Interpreter{_state, _ast.dialect(), scope, _disableExternalCalls, _disableMemoryTrace}(_ast.root());
118+
Interpreter{_state, _ast.dialect(), _ast.labels(), scope, _disableExternalCalls, _disableMemoryTrace}(_ast.root());
119119
}
120120

121121
void Interpreter::operator()(ExpressionStatement const& _expressionStatement)
@@ -250,14 +250,14 @@ void Interpreter::operator()(Block const& _block)
250250

251251
u256 Interpreter::evaluate(Expression const& _expression)
252252
{
253-
ExpressionEvaluator ev(m_state, m_dialect, *m_scope, m_variables, m_disableExternalCalls, m_disableMemoryTrace);
253+
ExpressionEvaluator ev(m_state, m_dialect, m_labels, *m_scope, m_variables, m_disableExternalCalls, m_disableMemoryTrace);
254254
ev.visit(_expression);
255255
return ev.value();
256256
}
257257

258258
std::vector<u256> Interpreter::evaluateMulti(Expression const& _expression)
259259
{
260-
ExpressionEvaluator ev(m_state, m_dialect, *m_scope, m_variables, m_disableExternalCalls, m_disableMemoryTrace);
260+
ExpressionEvaluator ev(m_state, m_dialect, m_labels, *m_scope, m_variables, m_disableExternalCalls, m_disableMemoryTrace);
261261
ev.visit(_expression);
262262
return ev.values();
263263
}

test/tools/yulInterpreter/Interpreter.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,12 +171,14 @@ class Interpreter: public ASTWalker
171171
Interpreter(
172172
InterpreterState& _state,
173173
Dialect const& _dialect,
174+
ASTLabelRegistry const& _labels,
174175
Scope& _scope,
175176
bool _disableExternalCalls,
176177
bool _disableMemoryTracing,
177178
std::map<YulName, u256> _variables = {}
178179
):
179180
m_dialect(_dialect),
181+
m_labels(_labels),
180182
m_state(_state),
181183
m_variables(std::move(_variables)),
182184
m_scope(&_scope),
@@ -216,6 +218,7 @@ class Interpreter: public ASTWalker
216218
void incrementStep();
217219

218220
Dialect const& m_dialect;
221+
ASTLabelRegistry const& m_labels;
219222
InterpreterState& m_state;
220223
/// Values of variables.
221224
std::map<YulName, u256> m_variables;
@@ -235,13 +238,15 @@ class ExpressionEvaluator: public ASTWalker
235238
ExpressionEvaluator(
236239
InterpreterState& _state,
237240
Dialect const& _dialect,
241+
ASTLabelRegistry const& _labels,
238242
Scope& _scope,
239243
std::map<YulName, u256> const& _variables,
240244
bool _disableExternalCalls,
241245
bool _disableMemoryTrace
242246
):
243247
m_state(_state),
244248
m_dialect(_dialect),
249+
m_labels(_labels),
245250
m_variables(_variables),
246251
m_scope(_scope),
247252
m_disableExternalCalls(_disableExternalCalls),
@@ -264,6 +269,7 @@ class ExpressionEvaluator: public ASTWalker
264269
return std::make_unique<Interpreter>(
265270
m_state,
266271
m_dialect,
272+
m_labels,
267273
m_scope,
268274
m_disableExternalCalls,
269275
m_disableMemoryTrace,
@@ -275,6 +281,7 @@ class ExpressionEvaluator: public ASTWalker
275281
return std::make_unique<Interpreter>(
276282
_state,
277283
m_dialect,
284+
m_labels,
278285
_scope,
279286
m_disableExternalCalls,
280287
m_disableMemoryTrace
@@ -297,6 +304,7 @@ class ExpressionEvaluator: public ASTWalker
297304

298305
InterpreterState& m_state;
299306
Dialect const& m_dialect;
307+
ASTLabelRegistry const& m_labels;
300308
/// Values of variables.
301309
std::map<YulName, u256> const& m_variables;
302310
Scope& m_scope;

0 commit comments

Comments
 (0)