From e34991c0811a799b2e31398fdde7e100e63dc4dc Mon Sep 17 00:00:00 2001 From: Chuck Smith Date: Thu, 25 Jan 2024 14:23:23 -0500 Subject: [PATCH] Repl uses VM --- repl/repl.go | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/repl/repl.go b/repl/repl.go index bb3df33..261087d 100644 --- a/repl/repl.go +++ b/repl/repl.go @@ -4,17 +4,16 @@ import ( "bufio" "fmt" "io" - "monkey/evaluator" + "monkey/compiler" "monkey/lexer" - "monkey/object" "monkey/parser" + "monkey/vm" ) const PROMPT = ">> " func Start(in io.Reader, out io.Writer) { scanner := bufio.NewScanner(in) - env := object.NewEnvironment() for { fmt.Fprintf(out, PROMPT) @@ -33,11 +32,23 @@ func Start(in io.Reader, out io.Writer) { continue } - evaluated := evaluator.Eval(program, env) - if evaluated != nil { - io.WriteString(out, evaluated.Inspect()) - io.WriteString(out, "\n") + comp := compiler.New() + err := comp.Compile(program) + if err != nil { + fmt.Fprintf(out, "Woops! Compilation failed:\n %s\n", err) + continue } + + machine := vm.New(comp.Bytecode()) + err = machine.Run() + if err != nil { + fmt.Fprintf(out, "Woops! Executing bytecode failed:\n %s\n", err) + continue + } + + stackTop := machine.StackTop() + io.WriteString(out, stackTop.Inspect()) + io.WriteString(out, "\n") } }