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") } }