Repl uses VM

This commit is contained in:
Chuck Smith
2024-01-25 14:23:23 -05:00
parent ca263209a4
commit e34991c081

View File

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