Set skip and limit for decode for memory internal

pull/479/head
ioedeveloper 4 years ago
parent 7a1cbfef79
commit cd38d898c2
  1. 22
      libs/remix-debug/src/solidity-decoder/types/ArrayType.js
  2. 4
      libs/remix-debug/test/decoder/contracts/structArrayLocal.js
  3. 4
      libs/remix-debug/test/decoder/localsTests/structArray.js

@ -72,7 +72,7 @@ class ArrayType extends RefType {
return {value: ret, length: '0x' + size.toString(16), type: this.typeName}
}
decodeFromMemoryInternal (offset, memory) {
decodeFromMemoryInternal (offset, memory, skip) {
const ret = []
let length = this.arraySize
if (this.arraySize === 'dynamic') {
@ -80,12 +80,28 @@ class ArrayType extends RefType {
length = parseInt(length, 16)
offset = offset + 32
}
for (var k = 0; k < length; k++) {
if (isNaN(length)) {
return {
value: '<decoding failed - length is NaN>',
type: this.typeName
}
}
let limit = length
if (!skip) skip = 0
if (skip) offset = offset + (32 * skip)
if ((length - skip) > 500) limit = 500
for (var k = 0; k < limit; k++) {
var contentOffset = offset
ret.push(this.underlyingType.decodeFromMemory(contentOffset, memory))
offset += 32
}
return {value: ret, length: '0x' + length.toString(16), type: this.typeName}
return {
value: ret,
length: '0x' + length.toString(16),
type: this.typeName,
cursor: skip + limit,
hasNext: length > (skip + limit)
}
}
}

@ -79,6 +79,10 @@ contract structArrayLocal {
arrayStruct.b[1] = -23;
arrayStruct.b[2] = -3;
arrayStruct.c = enumdef.three;
bytes32[] memory dynamic = new bytes32[](2);
dynamic[0] = 0x7465737400000000000000000000000000000000000000000000000000000000;
dynamic[1] = 0x7465737400000000000000000000000000000000000000000000000000000000;
}
}
`}

@ -30,7 +30,7 @@ module.exports = function (st, vm, privateKey, contractBytecode, compilationResu
st.fail(error)
})
callTree.event.register('callTreeReady', (scopes, scopeStarts) => {
helper.decodeLocals(st, 1622, traceManager, callTree, function (locals) {
helper.decodeLocals(st, 1719, traceManager, callTree, function (locals) {
try {
st.equals(locals['bytesSimple'].length, '0x14')
st.equals(locals['bytesSimple'].value, '0x746573745f7375706572')
@ -91,6 +91,8 @@ module.exports = function (st, vm, privateKey, contractBytecode, compilationResu
st.equals(locals['arrayStruct'].value.b.value[1].value, '-23')
st.equals(locals['arrayStruct'].value.b.value[2].value, '-3')
st.equals(locals['arrayStruct'].value.c.value, 'three')
st.equals(locals['dynamic'].value[0], '0x74657374')
st.equals(locals['dynamic'].value[1], '0x74657374')
st.equals(Object.keys(locals).length, 8)
} catch (e) {

Loading…
Cancel
Save