|
|
|
use crsn::asm::data::literal::Value;
|
|
|
|
use crsn::asm::error::CrsnError;
|
|
|
|
use crsn::asm::instr::op::OpKind;
|
|
|
|
use crsn::asm::parse::arg_parser::TokenParser;
|
|
|
|
use crsn::module::{CrsnExtension, ParseRes};
|
|
|
|
use crsn::runtime::fault::Fault;
|
|
|
|
use crsn::runtime::run_thread::{RunState, ThreadInfo};
|
|
|
|
|
|
|
|
mod defs;
|
|
|
|
mod parse;
|
|
|
|
mod exec;
|
|
|
|
|
|
|
|
#[derive(Debug, Clone)]
|
|
|
|
pub struct StackOps;
|
|
|
|
|
|
|
|
impl StackOps {
|
|
|
|
pub fn new() -> Box<dyn CrsnExtension> {
|
|
|
|
Box::new(Self)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl CrsnExtension for StackOps {
|
|
|
|
fn name(&self) -> &'static str {
|
|
|
|
"stacks"
|
|
|
|
}
|
|
|
|
|
|
|
|
fn parse_op<'a>(&self, keyword: &str, args: TokenParser<'a>) -> Result<ParseRes<'a, OpKind>, CrsnError> {
|
|
|
|
parse::parse(keyword, args)
|
|
|
|
}
|
|
|
|
|
|
|
|
fn drop_obj(&self, _ti: &ThreadInfo, state: &mut RunState, handle: Value) -> Result<Option<()>, Fault> {
|
|
|
|
exec::drop_obj(state, handle)
|
|
|
|
}
|
|
|
|
}
|