Compare commits

..

No commits in common. "laptop" and "main" have entirely different histories.
laptop ... main

3 changed files with 31 additions and 48 deletions

View File

@ -1,17 +0,0 @@
test:
cargo test
build:
cargo build
scan-file FILENAME:
cargo run -- scan --file {{ FILENAME }}
scan COMMANDS:
cargo run -- scan "{{ COMMANDS }}"
compile COMMANDS:
cargo run -- run "{{ COMMANDS }}"
compile-file FILENAME:
cargo run -- run --file {{ FILENAME }}

View File

@ -14,7 +14,7 @@ pub struct Compiler<'a> {
} }
impl<'a> Compiler<'a> { impl<'a> Compiler<'a> {
pub fn from_source(source: &'a str) -> Self { pub fn from_source(source: &'a String) -> Self {
Compiler { Compiler {
scanner: Scanner::new(source), scanner: Scanner::new(source),
chunk: None, chunk: None,
@ -31,15 +31,21 @@ impl<'a> Compiler<'a> {
self.expression(); self.expression();
//self.consume(TokenType::TokenEof, "Expect end of expression"); //self.consume(TokenType::TokenEof, "Expect end of expression");
self.emit_return(); self.emit_return();
!self.had_error return !self.had_error;
} }
fn advance(&mut self) { fn advance(&mut self) {
self.previous = self.current; self.previous = self.current.clone();
if let Some(Ok(token)) = self.scanner.next() { while let Some(r) = self.scanner.next() {
self.current = Some(token); match r {
} else { Ok(token) => {
self.error_at_current("error as current token"); self.current = Some(token);
break;
}
_ => {
self.error_at_current("error as current token");
}
}
} }
} }
@ -114,18 +120,18 @@ impl<'a> Compiler<'a> {
} }
} }
use strum_macros::Display; // use strum_macros::Display;
#[derive(Display, PartialEq, Eq, PartialOrd, Ord)] // #[derive(Display, PartialEq, Eq, PartialOrd, Ord)]
enum Precedence { // enum Precedence {
None, // None,
Assignment, // Assignment,
Or, // Or,
And, // And,
Equality, // Equality,
Comparison, // Comparison,
Term, // Term,
Factor, // Factor,
Unary, // Unary,
Call, // Call,
Primary, // Primary,
} // }

View File

@ -101,9 +101,9 @@ fn scan_content(source: &str) {
fn run_content(source: &str) { fn run_content(source: &str) {
let mut _vm: VM = VM::new(); let mut _vm: VM = VM::new();
let owned = &source.to_owned(); let owned = &source.to_owned();
let mut compiler: Compiler = Compiler::from_source(owned); // let mut compiler: Compiler = Compiler::from_source(owned);
compiler.compile(); // compiler.compile();
//todo!("run_content is not hooked up yet"); todo!("run_content is not hooked up yet");
// let mut chunk: Chunk = compiler.compile(); // let mut chunk: Chunk = compiler.compile();
// match vm.interpret(&mut chunk) { // match vm.interpret(&mut chunk) {
// InterpretResult::InterpretOk => exit(0), // InterpretResult::InterpretOk => exit(0),
@ -111,9 +111,3 @@ fn run_content(source: &str) {
// InterpretResult::InterpretRuntimeError => exit(70), // InterpretResult::InterpretRuntimeError => exit(70),
// } // }
} }
fn compile_content(source: &str) {
let mut _vm: VM = VM::new();
let owned = &source.to_owned();
let mut compiler: Compiler = Compiler::from_source(owned);
compiler.compile();
}