On Nov 9, 2007, at 14:10 , Mathieu Suen wrote:
On Nov 9, 2007, at 1:13 PM, Michael Haupt wrote:
Hi,
On 11/9/07, André Wendt andre.wendt@hpi.uni-potsdam.de wrote:
However, modifying the interpreter loop to:
while (1) { printNumtoFile(currentBytecode, foo->vmLogFile); switch (currentBytecode) { .. } }
didn't work: printNumtoFile() gets executed exactly once. I've debugged this with GDB: currentBytecode gets modified from within the CASE statements and the program never gets past the switch() statement.
that's most certainly because you are using a GNUified version of the interpreter (right?). That one applies threading to the interpreter implementation, so the loop body is not actually executed like a loop body usually is. Instead, interpreter logic jumps directly to and fro in the bytecode routines.
Intresting could you explain how?
It replace each "case 123:" with a label and each "break" with "goto *jumpTable[currentBytecode]", and initializes the jumpTable with the labels.
Also how to solve the problem?
Modify the BREAK macro in sqGnu.h.
- Bert -