From 9c8ae2aed31ef1995f41bc928278c02c48f03fef Mon Sep 17 00:00:00 2001 From: HiveBeats Date: Sat, 20 Jan 2024 18:08:05 +0700 Subject: [PATCH] fix instuction pointer increment --- elm.go | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/elm.go b/elm.go index bd9af45..a0b65c3 100644 --- a/elm.go +++ b/elm.go @@ -77,6 +77,7 @@ func (m* Machine) Execute() error { m.stack[m.sp] = 0 m.sp-- + m.ip++ case DUP: if (m.sp - instr.Operand <= 0) { return errors.New("Stack Underflow") @@ -92,6 +93,7 @@ func (m* Machine) Execute() error { m.stack[m.sp] = m.stack[m.sp - 1 - instr.Operand] m.sp++ + m.ip++ case ADD: if (m.sp < 2) { return errors.New("Stack size is less than required to execute binary operation") @@ -270,23 +272,7 @@ func (m* Machine) InterpretProgramFromFile(filename string) error { func main() { m := Constructor() - // m.Push(Inst{Operation: PUSH, Operand: 1}) - // m.Push(Inst{Operation: PUSH, Operand: 2}) - // m.Push(Inst{Operation: ADD}) - // m.Push(Inst{Operation: PUSH, Operand: 2}) - // m.Push(Inst{Operation: SUB}) - // m.Push(Inst{Operation: PUSH, Operand: 6}) - // m.Push(Inst{Operation: MUL}) - // m.Push(Inst{Operation: PUSH, Operand: 2}) - // m.Push(Inst{Operation: DIV}) - // m.Push(Inst{Operation: HALT}) - - // m.Push(Inst{Operation: PUSH, Operand: 1}) - // m.Push(Inst{Operation: JMPIF, Operand: 3}) - // m.Push(Inst{Operation: HALT}) - // m.Push(Inst{Operation: PUSH, Operand: 1}) - // m.Push(Inst{Operation: PUSH, Operand: 2}) - // m.Push(Inst{Operation: HALT}) + err := m.InterpretProgramFromFile("program.lil") if err != nil { fmt.Fprintf(os.Stderr, "[ERR] %s\n", err); @@ -294,7 +280,7 @@ func main() { } stackCounter := 0 - for !m.isHalted { + for !m.isHalted && stackCounter < 100 { err = m.Execute() m.Print() if err != nil {