separate crates for compiler-lib, compiler-cli and vm
This commit is contained in:
parent
72122bf4fc
commit
4e9a4d1204
17 changed files with 337 additions and 191 deletions
ltvm
12
ltvm/Cargo.toml
Normal file
12
ltvm/Cargo.toml
Normal file
|
@ -0,0 +1,12 @@
|
|||
[package]
|
||||
name = "ltvm"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
ltcore = { path = "../lib-ltcore" }
|
||||
tisc = { path = "../../lib-tisc" }
|
||||
clap = { version = "4.5.15", features = ["derive"] }
|
||||
tiny-ansi = "0.1.0"
|
||||
bincode = "1.3.3"
|
||||
|
55
ltvm/src/main.rs
Normal file
55
ltvm/src/main.rs
Normal file
|
@ -0,0 +1,55 @@
|
|||
use {
|
||||
std::io::Read,
|
||||
clap::Parser,
|
||||
tiny_ansi::TinyAnsi,
|
||||
};
|
||||
|
||||
#[derive(Parser, Debug)]
|
||||
#[command(version, about, long_about = None)]
|
||||
struct Args {
|
||||
/// source files
|
||||
sources: Vec< String >,
|
||||
|
||||
/// entry symbol
|
||||
#[arg(short, long, default_value_t = String::from("main"))]
|
||||
entry: String,
|
||||
|
||||
/// memory size
|
||||
#[arg(short, long, default_value_t = 0x1000)]
|
||||
memsize: usize
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let args = Args::parse();
|
||||
|
||||
let mut vm = tisc::VM::new( args.memsize );
|
||||
let mut linker = tisc::Linker::new();
|
||||
|
||||
let mut symbols = std::collections::HashMap::<String, tisc::LinkAddr>::new();
|
||||
|
||||
for source_path in args.sources.iter() {
|
||||
let mut input = std::io::BufReader::new(
|
||||
std::fs::File::open(source_path).expect("Failed to open file")
|
||||
);
|
||||
|
||||
linker.import( source_path, bincode::deserialize_from( input ).expect("") );
|
||||
}
|
||||
/*
|
||||
let entry_addr = symbols.get(&args.entry)
|
||||
.expect(&format!("cant find entry symbol '{}'", args.entry));
|
||||
*/
|
||||
let entry_addr = linker.get_link_addr(&args.entry).unwrap();
|
||||
let bytecode = linker.link_total().expect("Link error:");
|
||||
|
||||
eprintln!("{} ({} bytes)", "Loaded bytecode.".green(), bytecode.len());
|
||||
eprintln!("================\n");
|
||||
|
||||
vm.load(bytecode);
|
||||
vm.execute(entry_addr);
|
||||
|
||||
eprintln!(
|
||||
"\n================\nVM execution finished\ndatastack = {:?}\n====",
|
||||
vm.data_stack
|
||||
);
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue