feat(tazjin/rlox): Wire up bytecode interpreter & print results
This makes the bytecode interpreter actually usable. Change-Id: I24afc7ce461c6673dc42581378f6e14da7aece5c Reviewed-on: https://cl.tvl.fyi/c/depot/+/2566 Reviewed-by: tazjin <mail@tazj.in> Tested-by: BuildkiteCI
This commit is contained in:
parent
0c9a7de5be
commit
995d024f03
3 changed files with 11 additions and 19 deletions
|
@ -4,9 +4,6 @@ use super::opcode::OpCode;
|
|||
use super::value::Value;
|
||||
use crate::scanner::{self, Token, TokenKind};
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests;
|
||||
|
||||
struct Compiler<T: Iterator<Item = Token>> {
|
||||
tokens: T,
|
||||
chunk: Chunk,
|
||||
|
@ -225,7 +222,10 @@ impl<T: Iterator<Item = Token>> Compiler<T> {
|
|||
self.emit_op(OpCode::OpReturn);
|
||||
|
||||
#[cfg(feature = "disassemble")]
|
||||
chunk::disassemble_chunk(&self.chunk);
|
||||
{
|
||||
chunk::disassemble_chunk(&self.chunk);
|
||||
println!("== compilation finished ==");
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
|
@ -28,14 +28,3 @@ impl crate::Lox for Interpreter {
|
|||
vm::interpret(chunk).map_err(|e| vec![e])
|
||||
}
|
||||
}
|
||||
|
||||
// pub fn main() {
|
||||
// let mut chunk: Chunk = Default::default();
|
||||
// let constant = chunk.add_constant(1.2);
|
||||
// chunk.add_op(OpCode::OpConstant(constant), 1);
|
||||
// let constant = chunk.add_constant(2.0);
|
||||
// chunk.add_op(OpCode::OpConstant(constant), 2);
|
||||
// chunk.add_op(OpCode::OpAdd, 3);
|
||||
// chunk.add_op(OpCode::OpReturn, 4);
|
||||
// vm::interpret(chunk).expect("it should work");
|
||||
// }
|
||||
|
|
|
@ -11,7 +11,7 @@ mod treewalk;
|
|||
/// Trait for making the different interpreters callable in the same
|
||||
/// way.
|
||||
pub trait Lox {
|
||||
type Value;
|
||||
type Value: std::fmt::Debug;
|
||||
type Error: std::fmt::Display;
|
||||
|
||||
fn create() -> Self;
|
||||
|
@ -69,9 +69,12 @@ fn run_prompt<I: Lox>() {
|
|||
}
|
||||
|
||||
fn run<I: Lox>(lox: &mut I, code: String) {
|
||||
if let Err(errors) = lox.interpret(code) {
|
||||
for error in errors {
|
||||
eprintln!("{}", error);
|
||||
match lox.interpret(code) {
|
||||
Ok(result) => println!("=> {:?}", result),
|
||||
Err(errors) => {
|
||||
for error in errors {
|
||||
eprintln!("{}", error);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue