summaryrefslogtreecommitdiff
path: root/vm
diff options
context:
space:
mode:
authorMarc Vertes <mvertes@free.fr>2023-11-15 11:59:15 +0100
committerMarc Vertes <mvertes@free.fr>2023-11-15 11:59:15 +0100
commita4d7fb2da6a8390b818dae8d07391c7d76e365e9 (patch)
tree166d1ed4bb07337ead19fd4f7ebc8d79885e2cfd /vm
parent2eab5877e1c634db872b595dd2414f4031ae4eb5 (diff)
parser: hande const declarations
Only symbols are produced, no bytecode is emitted. The constant expressions are evaluated at compile time using the stdlib package go/constant. The parser handles implicit repetition of the last non-empty expression list. The iota symbol is reset to 0 and incremented for each line of a const block. To be done in a next commit: type conversions.
Diffstat (limited to 'vm')
-rw-r--r--vm/vm.go10
1 files changed, 6 insertions, 4 deletions
diff --git a/vm/vm.go b/vm/vm.go
index ba1f97e..f7f4d78 100644
--- a/vm/vm.go
+++ b/vm/vm.go
@@ -71,12 +71,14 @@ var strop = [...]string{ // for VM tracing.
Subi: "Subi",
}
+type Code [][]int64
+
// Machine represents a virtual machine.
type Machine struct {
- code [][]int64 // code to execute
- mem []any // memory, as a stack
- ip, fp int // instruction and frame pointer
- ic uint64 // instruction counter, incremented at each instruction executed
+ code Code // code to execute
+ mem []any // memory, as a stack
+ ip, fp int // instruction and frame pointer
+ ic uint64 // instruction counter, incremented at each instruction executed
// flags uint // to set options such as restrict CallX, etc...
}