24
24
// / reads a memory address and loads it into the dest variable marks cell as
25
25
// / read before written if cell has never been written
26
26
void interpretert::read (
27
- mp_integer address,
27
+ const mp_integer & address,
28
28
mp_vectort &dest) const
29
29
{
30
30
// copy memory region
@@ -47,7 +47,7 @@ void interpretert::read(
47
47
}
48
48
49
49
void interpretert::read_unbounded (
50
- mp_integer address,
50
+ const mp_integer & address,
51
51
mp_vectort &dest) const
52
52
{
53
53
// copy memory region
@@ -76,7 +76,7 @@ void interpretert::read_unbounded(
76
76
77
77
// / reserves memory block of size at address
78
78
void interpretert::allocate (
79
- mp_integer address,
79
+ const mp_integer & address,
80
80
size_t size)
81
81
{
82
82
// clear memory region
@@ -148,7 +148,7 @@ bool interpretert::count_type_leaves(const typet &ty, mp_integer &result)
148
148
// / \return Offset into a vector of interpreter values; returns true on error
149
149
bool interpretert::byte_offset_to_memory_offset (
150
150
const typet &source_type,
151
- mp_integer offset,
151
+ const mp_integer & offset,
152
152
mp_integer &result)
153
153
{
154
154
if (source_type.id ()==ID_struct)
@@ -228,7 +228,7 @@ bool interpretert::byte_offset_to_memory_offset(
228
228
// / \return The corresponding byte offset. Returns true on error
229
229
bool interpretert::memory_offset_to_byte_offset (
230
230
const typet &source_type,
231
- mp_integer cell_offset ,
231
+ const mp_integer &full_cell_offset ,
232
232
mp_integer &result)
233
233
{
234
234
if (source_type.id ()==ID_struct)
@@ -237,6 +237,7 @@ bool interpretert::memory_offset_to_byte_offset(
237
237
const struct_typet::componentst &components=st.components ();
238
238
member_offset_iterator offsets (st, ns);
239
239
mp_integer previous_member_sizes;
240
+ mp_integer cell_offset=full_cell_offset;
240
241
for (; offsets->first <components.size () && offsets->second !=-1 ; ++offsets)
241
242
{
242
243
const auto &component_type=components[offsets->first ].type ();
@@ -278,13 +279,14 @@ bool interpretert::memory_offset_to_byte_offset(
278
279
mp_integer elem_count;
279
280
if (count_type_leaves (at.subtype (), elem_count))
280
281
return true ;
281
- mp_integer this_idx=cell_offset /elem_count;
282
+ mp_integer this_idx=full_cell_offset /elem_count;
282
283
if (this_idx>=array_size_vec[0 ])
283
284
return true ;
284
285
mp_integer subtype_result;
285
286
bool ret=
286
- memory_offset_to_byte_offset (at.subtype (),
287
- cell_offset%elem_count,
287
+ memory_offset_to_byte_offset (
288
+ at.subtype (),
289
+ full_cell_offset%elem_count,
288
290
subtype_result);
289
291
result=subtype_result+(elem_size*this_idx);
290
292
return ret;
@@ -293,7 +295,7 @@ bool interpretert::memory_offset_to_byte_offset(
293
295
{
294
296
// Primitive type.
295
297
result=0 ;
296
- return cell_offset !=0 ;
298
+ return full_cell_offset !=0 ;
297
299
}
298
300
}
299
301
0 commit comments