add more sensible API for object handles, add drop instruction

This commit is contained in:
2020-09-28 19:36:15 +02:00
parent 79d5aa3cd5
commit d5de189af6
28 changed files with 444 additions and 269 deletions
+19 -13
View File
@@ -9,6 +9,8 @@ use crsn::asm::data::literal::Addr;
use crsn::runtime::run_thread::{RunThread, ThreadToken};
use crsn_arith::ArithOps;
use crsn_stacks::StackOps;
use std::sync::atomic::AtomicU64;
use crsn::runtime::run_thread;
fn main() {
SimpleLogger::new().init().unwrap();
@@ -70,34 +72,38 @@ fn main() {
let program = "
(
(main
(push 0 10)
(push 0 20)
(call emptystack 0)
(push 0 30)
(pop r0 0)
(pop r0 0)
(pop r0 0)
(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)))
(pop _ @arg0 (nz? (j :again)))
(ret)
)
)
";
let parsers = vec![
let parsers = Box::leak(Box::new(vec![
ArithOps::new(),
StackOps::new(),
];
]));
let parsed = crsn::asm::assemble(program, parsers.as_slice()).unwrap();
let mut thread1 = RunThread::new(ThreadToken(0), parsed.clone(), Addr(0), &[]);
thread1.set_speed(Duration::from_millis(250));
let uniq = run_thread::new_uniq();
let _thread2 = RunThread::new(ThreadToken(1), parsed.clone(), Addr(0), &[]);
let mut thread1 = RunThread::new(ThreadToken(0), Some(uniq), 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();