[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Bug report for assignment inside methods
From: |
Mohammad-Reza Nabipoor |
Subject: |
Bug report for assignment inside methods |
Date: |
Mon, 22 May 2023 21:08:28 +0200 |
Hi Jose.
Bug:
(poke) .mem
(poke) byte[] @ 0x10#B = [0x83UB, 0xfUB]
(poke) type Byte = struct uint<8> { uint<1> hi : hi == 1; uint<7> lo; }
(poke) type Num = struct { Byte[] variable; uint<8> last; method set = (Byte[]
v, uint<8> l) void: { variable = v; last = l; } }
(poke) var n = Num @ 0x10#B
(poke) n
Num {
variable=[Byte {
hi=(uint<1>) 0x1,
lo=(uint<7>) 0x03
}],
last=0x0fUB
}
(poke) n.set (Byte[] (), 0)
(poke) dump
76543210 0011 2233 4455 6677 8899 aabb ccdd eeff 0123456789ABCDEF
00000000: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000010: 8300 0000 0000 0000 0000 0000 0000 0000 ................
So, what happens is that in `set' method, on assignments, we call `SSET'
instruction (which in turn calls `pvm_set_struct' function).
When we change the `variable' from an array of size 1 to an array of
size 0, it should fix the boffset of next field (`last') to `0x10#B'.
That's not the case in the current implementation, and the boffset of `last'
stays as `0x11#B'.
Then after `SSET', we call `WRITE' instruction, which will write the empty
array at offset `0x10#B` (which is a NOP) and writes the `last' (which has
value 0) to offset `0x11#B' (which is wrong).
So, you see that `byte @ 0x11#B' has been changed from `0x0fUB' to `0UB'.
So the question is how should I fix the the boffset of values in a struct?
In `pvm_set_struct'?
Or we should add new instruction? Or ...?
Regards,
Mohammad-Reza
- Bug report for assignment inside methods,
Mohammad-Reza Nabipoor <=