The first two patches fix some problems where the context stack was being accessed with a 0-based index, or with a wrong sp. This "worked" because of another bug in checking the index of #basicAt: and #basicAt:put: whenever a class had both fixed and indexed instance variables. Interestingly, the check worked for the JIT compiler but was broken in the interpreter, hence the bugs were already visible but only in the JIT.
To make a better fix for patch 2, I would really like to bump the version of the image format, and remove the "receiver" variable of contexts. Instead, the receiver would always be in the first stack slot. This removes the case where the stack is empty, and simplifies things a bit. It can be done later, though. Please test these patches more so that we can apply them and also fix the JIT. Thanks! Paolo Paolo Bonzini (4): fix off by one sp for PUSH_LITERAL/MAKE_DIRTY_BLOCK combined bytecode fix off-by-one using ContextPart's sp instance variable tweak index_oop_spec and index_oop_put_spec index computations fix overflow check for #basicAt: and #basicAt:put: ChangeLog | 6 ++++++ kernel/BlkClosure.st | 9 ++++++--- kernel/ContextPart.st | 10 ++++++---- libgst/ChangeLog | 22 ++++++++++++++++++++++ libgst/dict.inl | 44 ++++++++++++++++++++++++-------------------- libgst/genvm-parse.y | 12 ++++++++++-- libgst/vm.def | 4 ++++ 7 files changed, 78 insertions(+), 29 deletions(-) -- 1.8.3.1 _______________________________________________ help-smalltalk mailing list help-smalltalk@gnu.org https://lists.gnu.org/mailman/listinfo/help-smalltalk