summaryrefslogtreecommitdiffstats
path: root/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib.rs')
-rwxr-xr-xsrc/lib.rs20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 588f873..32a8ffc 100755
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -71,12 +71,26 @@ impl ExportedInterp {
info!("executing single instruction");
}
- pub fn run(&mut self) {
- info!("running to completion");
+ pub fn run(&mut self) -> Result<usize, String> {
+ let Some(interp) = &mut self.i else {
+ return Err("no interpreter".to_string())
+ };
+
+ interp.ip.word = 0;
+ interp.ip.offset = 0;
+ interp.run().or_else(|err| Err(format!("runtime error: {:?}", err)))
+ }
+
+ pub fn stack(&self) -> Vec<i32> {
+ let Some(interp) = &self.i else {
+ return vec![]
+ };
+
+ return interp.stack.0.clone()
}
pub fn wordlist(&self) -> Vec<ExportedByteCode> {
- let Some(interp) = self.i.as_ref() else {
+ let Some(interp) = &self.i else {
return vec![]
};