From 6a0490257bf235d011004bc303306f617ac6ea31 Mon Sep 17 00:00:00 2001 From: Marc Vertes Date: Mon, 20 Nov 2023 15:54:52 +0100 Subject: parser: add support for unary operators --- vm/vm.go | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'vm/vm.go') diff --git a/vm/vm.go b/vm/vm.go index fa31ff0..21205de 100644 --- a/vm/vm.go +++ b/vm/vm.go @@ -37,6 +37,7 @@ const ( Lower // n1 n2 -- cond ; cond = n1 < n2 Loweri // n1 -- cond ; cond = n1 < $1 Mul // n1 n2 -- prod ; prod = n1*n2 + Not // c -- r ; r = !c Pop // v -- Push // -- v Return // [r1 .. ri] -- ; exit frame: sp = fp, fp = pop @@ -69,6 +70,7 @@ var strop = [...]string{ // for VM tracing. Lower: "Lower", Loweri: "Loweri", Mul: "Mul", + Not: "Not", Pop: "Pop", Push: "Push", Return: "Return", @@ -210,6 +212,8 @@ func (m *Machine) Run() (err error) { mem = mem[:sp-1] case Loweri: mem[sp-1] = mem[sp-1].(int) < int(op[2]) + case Not: + mem[sp-1] = !mem[sp-1].(bool) case Pop: mem = mem[:sp-int(op[2])] case Push: -- cgit v1.2.3