Croissant Runtime
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
crsn/launcher/src/main.rs

113 lines
2.4 KiB

#[macro_use]
extern crate log;
use std::sync::Arc;
use simple_logger::SimpleLogger;
use crsn::asm::data::literal::Addr;
use crsn::runtime::run_thread::{RunThread, ThreadToken};
use crsn::runtime::run_thread;
use crsn_arith::ArithOps;
use crsn_stacks::StackOps;
fn main() {
SimpleLogger::new().init().unwrap();
// ;(dec r0 (z? (ret)))
/*let program = "
(
(main
(ld r0 2)
(:again)
(dec r0)
(jif nz :again)
(fault \"that's it\")
)
)
";*/
/*
let program = "
(
(main
(ld r0 2)
(call add2x r0 15)
(ld r0 res0)
(fault \"that's it\")
)
(add2x
(ld r0 arg0)
(ld r1 arg1)
(add r0 r1)
(add r0 r1)
(ret r0)
)
)
";*/
/* let program = "
(
(main
(j :lbl)
(ld _ arg0)
(fault)
(:lbl)
(call fac 5)
(ld r0 res0)
)
(fac
(cmp arg0 2
(eq? (ret 2)))
(ld r0 arg0)
(dec r0)
(call fac r0)
(ld r0 arg0)
(mul r0 res0)
(ret r0)
)
)
";*/
let program = "
(
(main
(stack r7)
(push @r7 10)
(push @r7 20)
(call emptystack r7)
(push @r7 30)
(pop r0 @r7)
(pop r0 @r7)
(drop @r7)
(pop r0 @r7) ; this fails
(halt)
)
(emptystack
(:again)
(pop _ @arg0 (nz? (j :again)))
(ret)
)
)
";
let parsers = Arc::new(vec![
ArithOps::new(),
StackOps::new(),
]);
let parsed = crsn::asm::assemble(program, parsers).unwrap();
let uniq = run_thread::new_uniq();
let thread1 = RunThread::new(ThreadToken(0), Some(uniq.clone()), parsed.clone(), Addr(0), &[]);
//thread1.set_speed(Duration::from_millis(250));
let _thread2 = RunThread::new(ThreadToken(1), Some(uniq), parsed.clone(), Addr(0), &[]);
let a = thread1.start();
//let b = thread2.start();
a.join().unwrap();
//b.join().unwrap();
}