DEV Community

Rahul Jha
Rahul Jha

Posted on • Updated on

Daily Log: Day 9 & 10

  • The stack we talked about in the last post is to hold intermediary values generated by our interpreter, e.g.:
  fun echo(n):
      print n;
      return n;

  print echo(echo(1) + echo(2)) + (echo(4) + echo(5));
Enter fullscreen mode Exit fullscreen mode

While our interpreter is computing echo(2), it would need some space in memory to hold the output from echo(1) -- That's where the stack comes in. Similarly, it would need to store the output of echo(1) + echo(2), while it computes echo(4) + echo(5). These "produced" values are all pushed in a stack.

  • After implementing the stack, noticed that the order of execution of opcodes is not correct in the last output:
== Test Chunk ==
0000  122 OP_CONSANT          0 '1.2'
0002  123 OP_CONSANT          1 '456'
0004  124 OP_RETURN
0001    | OP_CONSANT          0 '1.2'
1.2
0003    | OP_RETURN
456
0005    0 OP_CONSANT          0 '1.2'
Enter fullscreen mode Exit fullscreen mode

The chunk.code should look like this:

OP_CONSTANT
0 // Address of 1.2 in chunk.values
OP_CONSTANT
1 // Address of 456 in chunk.values
OP_RETURN
Enter fullscreen mode Exit fullscreen mode

and chunk.values:

1.2
456
Enter fullscreen mode Exit fullscreen mode

Now, notice that OP_RETURN was executed before the last OP_CONSTANT. Still debugging why.

Top comments (0)