@@ -107,9 +107,9 @@ def _get_source_code(
107
107
:return:
108
108
"""
109
109
src_mapping = contract .source_mapping
110
- content = self ._compilation_unit .core .source_code [src_mapping .filename .absolute ]
111
- start = src_mapping . start
112
- end = src_mapping . start + src_mapping . length
110
+ src_bytes = self ._compilation_unit .core .source_code [src_mapping .filename .absolute ]. encode (
111
+ "utf8"
112
+ )
113
113
114
114
to_patch = []
115
115
# interface must use external
@@ -124,7 +124,7 @@ def _get_source_code(
124
124
+ f .parameters_src ().source_mapping .length
125
125
)
126
126
attributes_end = f .returns_src ().source_mapping .start
127
- attributes = content [attributes_start :attributes_end ]
127
+ attributes = src_bytes [attributes_start :attributes_end ]. decode ( "utf8" )
128
128
regex = re .search (r"((\sexternal)\s+)|(\sexternal)$|(\)external)$" , attributes )
129
129
if regex :
130
130
to_patch .append (
@@ -140,7 +140,7 @@ def _get_source_code(
140
140
if var .location == "calldata" :
141
141
calldata_start = var .source_mapping .start
142
142
calldata_end = calldata_start + var .source_mapping .length
143
- calldata_idx = content [calldata_start :calldata_end ].find (" calldata " )
143
+ calldata_idx = src_bytes [calldata_start :calldata_end ].find (" calldata " )
144
144
to_patch .append (
145
145
Patch (
146
146
calldata_start + calldata_idx + 1 ,
@@ -158,7 +158,7 @@ def _get_source_code(
158
158
+ f .parameters_src ().source_mapping ["length" ]
159
159
)
160
160
attributes_end = f .returns_src ().source_mapping ["start" ]
161
- attributes = content [attributes_start :attributes_end ]
161
+ attributes = src_bytes [attributes_start :attributes_end ]. decode ( "utf8" )
162
162
regex = (
163
163
re .search (r"((\sexternal)\s+)|(\sexternal)$|(\)external)$" , attributes )
164
164
if visibility == "external"
@@ -183,7 +183,7 @@ def _get_source_code(
183
183
if variable .visibility == "private" :
184
184
attributes_start = variable .source_mapping .start
185
185
attributes_end = attributes_start + variable .source_mapping .length
186
- attributes = content [attributes_start :attributes_end ]
186
+ attributes = src_bytes [attributes_start :attributes_end ]. decode ( "utf8" )
187
187
regex = re .search (r" private " , attributes )
188
188
if regex :
189
189
to_patch .append (
@@ -211,26 +211,47 @@ def _get_source_code(
211
211
212
212
to_patch .sort (key = lambda x : x .index , reverse = True )
213
213
214
- content = content [start :end ]
214
+ content = src_mapping .content .encode ("utf8" )
215
+ start = src_mapping .start
215
216
for patch in to_patch :
216
217
patch_type = patch .patch_type
217
218
index = patch .index
218
219
index = index - start
219
220
if patch_type == "public_to_external" :
220
- content = content [:index ] + "public" + content [index + len ("external" ) :]
221
+ content = (
222
+ content [:index ].decode ("utf8" )
223
+ + "public"
224
+ + content [index + len ("external" ) :].decode ("utf8" )
225
+ )
221
226
elif patch_type == "external_to_internal" :
222
- content = content [:index ] + "internal" + content [index + len ("external" ) :]
227
+ content = (
228
+ content [:index ].decode ("utf8" )
229
+ + "internal"
230
+ + content [index + len ("external" ) :].decode ("utf8" )
231
+ )
223
232
elif patch_type == "public_to_internal" :
224
- content = content [:index ] + "internal" + content [index + len ("public" ) :]
233
+ content = (
234
+ content [:index ].decode ("utf8" )
235
+ + "internal"
236
+ + content [index + len ("public" ) :].decode ("utf8" )
237
+ )
225
238
elif patch_type == "private_to_internal" :
226
- content = content [:index ] + "internal" + content [index + len ("private" ) :]
239
+ content = (
240
+ content [:index ].decode ("utf8" )
241
+ + "internal"
242
+ + content [index + len ("private" ) :].decode ("utf8" )
243
+ )
227
244
elif patch_type == "calldata_to_memory" :
228
- content = content [:index ] + "memory" + content [index + len ("calldata" ) :]
245
+ content = (
246
+ content [:index ].decode ("utf8" )
247
+ + "memory"
248
+ + content [index + len ("calldata" ) :].decode ("utf8" )
249
+ )
229
250
else :
230
251
assert patch_type == "line_removal"
231
- content = content [:index ] + " // " + content [index :]
252
+ content = content [:index ]. decode ( "utf8" ) + " // " + content [index :]. decode ( "utf8" )
232
253
233
- self ._source_codes [contract ] = content
254
+ self ._source_codes [contract ] = content . decode ( "utf8" )
234
255
235
256
def _pragmas (self ) -> str :
236
257
"""
0 commit comments