@@ -55,7 +55,8 @@ BOOST_AUTO_TEST_CASE(all_assembly_items)
55
55
{
56
56
map<string, unsigned > indices = {
57
57
{ " root.asm" , 0 },
58
- { " sub.asm" , 1 }
58
+ { " sub.asm" , 1 },
59
+ { " verbatim.asm" , 2 }
59
60
};
60
61
Assembly _assembly;
61
62
auto root_asm = make_shared<string>(" root.asm" );
@@ -64,11 +65,22 @@ BOOST_AUTO_TEST_CASE(all_assembly_items)
64
65
Assembly _subAsm;
65
66
auto sub_asm = make_shared<string>(" sub.asm" );
66
67
_subAsm.setSourceLocation ({6 , 8 , sub_asm});
68
+
69
+ Assembly _verbatimAsm;
70
+ auto verbatim_asm = make_shared<string>(" verbatim.asm" );
71
+ _verbatimAsm.setSourceLocation ({8 , 18 , verbatim_asm});
72
+
67
73
// PushImmutable
68
74
_subAsm.appendImmutable (" someImmutable" );
75
+ _subAsm.append (AssemblyItem (PushTag, 0 ));
69
76
_subAsm.append (Instruction::INVALID);
70
77
shared_ptr<Assembly> _subAsmPtr = make_shared<Assembly>(_subAsm);
71
78
79
+ _verbatimAsm.appendVerbatim ({0xff ,0xff }, 0 , 0 );
80
+ _verbatimAsm.appendVerbatim ({0x74 , 0x65 , 0x73 , 0x74 }, 0 , 1 );
81
+ _verbatimAsm.append (Instruction::MSTORE);
82
+ shared_ptr<Assembly> _verbatimAsmPtr = make_shared<Assembly>(_verbatimAsm);
83
+
72
84
// Tag
73
85
auto tag = _assembly.newTag ();
74
86
_assembly.append (tag);
@@ -89,6 +101,10 @@ BOOST_AUTO_TEST_CASE(all_assembly_items)
89
101
auto sub = _assembly.appendSubroutine (_subAsmPtr);
90
102
// PushSub
91
103
_assembly.pushSubroutineOffset (static_cast <size_t >(sub.data ()));
104
+ // PushSubSize
105
+ auto verbatim_sub = _assembly.appendSubroutine (_verbatimAsmPtr);
106
+ // PushSub
107
+ _assembly.pushSubroutineOffset (static_cast <size_t >(verbatim_sub.data ()));
92
108
// PushDeployTimeAddress
93
109
_assembly.append (PushDeployTimeAddress);
94
110
// AssignImmutable.
@@ -105,12 +121,12 @@ BOOST_AUTO_TEST_CASE(all_assembly_items)
105
121
106
122
BOOST_CHECK_EQUAL (
107
123
_assembly.assemble ().toHex (),
108
- " 5b6001600220606f73__ $bf005014d9d0f534b8fcb268bd84c491a2$__"
109
- " 6000566067602260457300000000000000000000000000000000000000005050 "
124
+ " 5b6001600220607c73__ $bf005014d9d0f534b8fcb268bd84c491a2$__"
125
+ " 6000566074602460496007606d7300000000000000000000000000000000000000005050 "
110
126
" 600260010152"
111
127
" 00fe"
112
128
" 7f0000000000000000000000000000000000000000000000000000000000000000"
113
- " fe010203044266eeaa "
129
+ " 6000feffff7465737452010203044266eeaa "
114
130
);
115
131
BOOST_CHECK_EQUAL (
116
132
_assembly.assemblyString (),
@@ -123,6 +139,8 @@ BOOST_AUTO_TEST_CASE(all_assembly_items)
123
139
" data_a6885b3731702da62e8e4a8f584ac46a7f6822f4e2ba50fba902f67b1588d23b\n "
124
140
" dataSize(sub_0)\n "
125
141
" dataOffset(sub_0)\n "
142
+ " dataSize(sub_1)\n "
143
+ " dataOffset(sub_1)\n "
126
144
" deployTimeAddress()\n "
127
145
" assignImmutable(\" 0xc3978657661c4d8e32e3d5f42597c009f0d3859e9f9d0d94325268f9799e2bfb\" )\n "
128
146
" 0x02\n "
@@ -134,13 +152,20 @@ BOOST_AUTO_TEST_CASE(all_assembly_items)
134
152
" sub_0: assembly {\n "
135
153
" /* \" sub.asm\" :6:8 */\n "
136
154
" immutable(\" 0x26f2c0195e9d408feff3abd77d83f2971f3c9a18d1e8a9437c7835ae4211fc9f\" )\n "
155
+ " tag_0\n "
137
156
" invalid\n "
138
157
" }\n "
139
158
" \n "
159
+ " sub_1: assembly {\n "
160
+ " /* \" verbatim.asm\" :8:18 */\n "
161
+ " verbatimbytecode_ffff\n "
162
+ " verbatimbytecode_74657374\n "
163
+ " mstore\n "
164
+ " }\n "
165
+ " \n "
140
166
" auxdata: 0x4266eeaa\n "
141
167
);
142
- BOOST_CHECK_EQUAL (
143
- util::jsonCompactPrint (_assembly.assemblyJSON (indices)),
168
+ string json{
144
169
" {\" .auxdata\" :\" 4266eeaa\" ,\" .code\" :["
145
170
" {\" begin\" :1,\" end\" :3,\" name\" :\" tag\" ,\" source\" :0,\" value\" :\" 1\" },"
146
171
" {\" begin\" :1,\" end\" :3,\" name\" :\" JUMPDEST\" ,\" source\" :0},"
@@ -154,16 +179,32 @@ BOOST_AUTO_TEST_CASE(all_assembly_items)
154
179
" {\" begin\" :1,\" end\" :3,\" name\" :\" PUSH data\" ,\" source\" :0,\" value\" :\" A6885B3731702DA62E8E4A8F584AC46A7F6822F4E2BA50FBA902F67B1588D23B\" },"
155
180
" {\" begin\" :1,\" end\" :3,\" name\" :\" PUSH #[$]\" ,\" source\" :0,\" value\" :\" 0000000000000000000000000000000000000000000000000000000000000000\" },"
156
181
" {\" begin\" :1,\" end\" :3,\" name\" :\" PUSH [$]\" ,\" source\" :0,\" value\" :\" 0000000000000000000000000000000000000000000000000000000000000000\" },"
182
+ " {\" begin\" :1,\" end\" :3,\" name\" :\" PUSH #[$]\" ,\" source\" :0,\" value\" :\" 0000000000000000000000000000000000000000000000000000000000000001\" },"
183
+ " {\" begin\" :1,\" end\" :3,\" name\" :\" PUSH [$]\" ,\" source\" :0,\" value\" :\" 0000000000000000000000000000000000000000000000000000000000000001\" },"
157
184
" {\" begin\" :1,\" end\" :3,\" name\" :\" PUSHDEPLOYADDRESS\" ,\" source\" :0},"
158
185
" {\" begin\" :1,\" end\" :3,\" name\" :\" ASSIGNIMMUTABLE\" ,\" source\" :0,\" value\" :\" someOtherImmutable\" },"
159
186
" {\" begin\" :1,\" end\" :3,\" name\" :\" PUSH\" ,\" source\" :0,\" value\" :\" 2\" },"
160
187
" {\" begin\" :1,\" end\" :3,\" name\" :\" ASSIGNIMMUTABLE\" ,\" source\" :0,\" value\" :\" someImmutable\" },"
161
188
" {\" begin\" :1,\" end\" :3,\" name\" :\" STOP\" ,\" source\" :0}"
162
189
" ],\" .data\" :{\" 0\" :{\" .code\" :["
163
190
" {\" begin\" :6,\" end\" :8,\" name\" :\" PUSHIMMUTABLE\" ,\" source\" :1,\" value\" :\" someImmutable\" },"
191
+ " {\" begin\" :6,\" end\" :8,\" name\" :\" PUSH [ErrorTag]\" ,\" source\" :1},"
164
192
" {\" begin\" :6,\" end\" :8,\" name\" :\" INVALID\" ,\" source\" :1}"
165
- " ]},\" A6885B3731702DA62E8E4A8F584AC46A7F6822F4E2BA50FBA902F67B1588D23B\" :\" 01020304\" }}"
166
- );
193
+ " ]},"
194
+ " \" 1\" :{\" .code\" :["
195
+ " {\" begin\" :8,\" end\" :18,\" name\" :\" VERBATIM\" ,\" source\" :2,\" value\" :\" ffff\" },"
196
+ " {\" begin\" :8,\" end\" :18,\" name\" :\" VERBATIM\" ,\" source\" :2,\" value\" :\" 74657374\" },"
197
+ " {\" begin\" :8,\" end\" :18,\" name\" :\" MSTORE\" ,\" source\" :2}"
198
+ " ]},\" A6885B3731702DA62E8E4A8F584AC46A7F6822F4E2BA50FBA902F67B1588D23B\" :\" 01020304\" },\" sourceList\" :[\" root.asm\" ,\" sub.asm\" ,\" verbatim.asm\" ]}"
199
+ };
200
+ Json::Value jsonValue;
201
+ BOOST_CHECK (util::jsonParseStrict (json, jsonValue));
202
+ BOOST_CHECK_EQUAL (util::jsonCompactPrint (_assembly.assemblyJSON (indices)), util::jsonCompactPrint (jsonValue));
203
+
204
+ Assembly _assemblyFromJson;
205
+ _assemblyFromJson.loadFromAssemblyJSON (_assembly.assemblyJSON (indices));
206
+ BOOST_CHECK_EQUAL (util::jsonCompactPrint (_assemblyFromJson.assemblyJSON (indices)), util::jsonCompactPrint (jsonValue));
207
+ BOOST_CHECK_EQUAL (_assembly.assemble ().toHex (), _assemblyFromJson.assemble ().toHex ());
167
208
}
168
209
169
210
BOOST_AUTO_TEST_CASE (immutables_and_its_source_maps)
@@ -342,7 +383,7 @@ BOOST_AUTO_TEST_CASE(immutable)
342
383
" {\" begin\" :6,\" end\" :8,\" name\" :\" PUSHIMMUTABLE\" ,\" source\" :1,\" value\" :\" someImmutable\" },"
343
384
" {\" begin\" :6,\" end\" :8,\" name\" :\" PUSHIMMUTABLE\" ,\" source\" :1,\" value\" :\" someOtherImmutable\" },"
344
385
" {\" begin\" :6,\" end\" :8,\" name\" :\" PUSHIMMUTABLE\" ,\" source\" :1,\" value\" :\" someImmutable\" }"
345
- " ]}}}"
386
+ " ]}}, \" sourceList \" :[ \" root.asm \" , \" sub.asm \" ] }"
346
387
);
347
388
}
348
389
0 commit comments