@@ -55,7 +55,7 @@ pair<YulString, BuiltinFunctionForEVM> createEVMFunction(
55
55
f.controlFlowSideEffects .terminates = evmasm::SemanticInformation::terminatesControlFlow (_instruction);
56
56
f.controlFlowSideEffects .reverts = evmasm::SemanticInformation::reverts (_instruction);
57
57
f.isMSize = _instruction == evmasm::Instruction::MSIZE;
58
- f.literalArguments = false ;
58
+ f.literalArguments . reset () ;
59
59
f.instruction = _instruction;
60
60
f.generateCode = [_instruction](
61
61
FunctionCall const &,
@@ -75,17 +75,22 @@ pair<YulString, BuiltinFunctionForEVM> createFunction(
75
75
size_t _params,
76
76
size_t _returns,
77
77
SideEffects _sideEffects,
78
- bool _literalArguments,
78
+ vector< bool > _literalArguments,
79
79
std::function<void (FunctionCall const &, AbstractAssembly&, BuiltinContext&, std::function<void ()>)> _generateCode
80
80
)
81
81
{
82
+ solAssert (_literalArguments.size () == _params || _literalArguments.empty (), " " );
83
+
82
84
YulString name{std::move (_name)};
83
85
BuiltinFunctionForEVM f;
84
86
f.name = name;
85
87
f.parameters .resize (_params);
86
88
f.returns .resize (_returns);
87
89
f.sideEffects = std::move (_sideEffects);
88
- f.literalArguments = _literalArguments;
90
+ if (!_literalArguments.empty ())
91
+ f.literalArguments = std::move (_literalArguments);
92
+ else
93
+ f.literalArguments .reset ();
89
94
f.isMSize = false ;
90
95
f.instruction = {};
91
96
f.generateCode = std::move (_generateCode);
@@ -107,7 +112,7 @@ map<YulString, BuiltinFunctionForEVM> createBuiltins(langutil::EVMVersion _evmVe
107
112
108
113
if (_objectAccess)
109
114
{
110
- builtins.emplace (createFunction (" datasize" , 1 , 1 , SideEffects{}, true , [](
115
+ builtins.emplace (createFunction (" datasize" , 1 , 1 , SideEffects{}, { true } , [](
111
116
FunctionCall const & _call,
112
117
AbstractAssembly& _assembly,
113
118
BuiltinContext& _context,
@@ -128,7 +133,7 @@ map<YulString, BuiltinFunctionForEVM> createBuiltins(langutil::EVMVersion _evmVe
128
133
_assembly.appendDataSize (_context.subIDs .at (dataName));
129
134
}
130
135
}));
131
- builtins.emplace (createFunction (" dataoffset" , 1 , 1 , SideEffects{}, true , [](
136
+ builtins.emplace (createFunction (" dataoffset" , 1 , 1 , SideEffects{}, { true } , [](
132
137
FunctionCall const & _call,
133
138
AbstractAssembly& _assembly,
134
139
BuiltinContext& _context,
@@ -154,7 +159,7 @@ map<YulString, BuiltinFunctionForEVM> createBuiltins(langutil::EVMVersion _evmVe
154
159
3 ,
155
160
0 ,
156
161
SideEffects{false , false , false , false , true },
157
- false ,
162
+ {} ,
158
163
[](
159
164
FunctionCall const &,
160
165
AbstractAssembly& _assembly,
@@ -262,7 +267,7 @@ EVMDialectTyped::EVMDialectTyped(langutil::EVMVersion _evmVersion, bool _objectA
262
267
m_functions[" popbool" _yulstring] = m_functions[" pop" _yulstring];
263
268
m_functions[" popbool" _yulstring].name = " popbool" _yulstring;
264
269
m_functions[" popbool" _yulstring].parameters = {" bool" _yulstring};
265
- m_functions.insert (createFunction (" bool_to_u256" , 1 , 1 , {}, false , [](
270
+ m_functions.insert (createFunction (" bool_to_u256" , 1 , 1 , {}, {} , [](
266
271
FunctionCall const &,
267
272
AbstractAssembly&,
268
273
BuiltinContext&,
@@ -272,7 +277,7 @@ EVMDialectTyped::EVMDialectTyped(langutil::EVMVersion _evmVersion, bool _objectA
272
277
}));
273
278
m_functions[" bool_to_u256" _yulstring].parameters = {" bool" _yulstring};
274
279
m_functions[" bool_to_u256" _yulstring].returns = {" u256" _yulstring};
275
- m_functions.insert (createFunction (" u256_to_bool" , 1 , 1 , {}, false , [](
280
+ m_functions.insert (createFunction (" u256_to_bool" , 1 , 1 , {}, {} , [](
276
281
FunctionCall const &,
277
282
AbstractAssembly& _assembly,
278
283
BuiltinContext&,
0 commit comments