1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
use crate::{Identifier, Value}; use alloc::string::{String, ToString}; use alloc::vec::Vec; pub const MACHINE_NAME: &str = "xasm"; #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord)] pub enum Error { InvalidFunctionName, } pub trait Compile<T: Target> { fn compile(self) -> Result<String, Error>; } pub trait Target { fn quote(name: impl ToString) -> String { format!("\"{}\"", name.to_string()) } fn push(value: impl ToString) -> String; fn load(value: impl ToString) -> String; fn store(value: impl ToString) -> String; fn number(value: impl ToString) -> String; fn string(value: impl ToString) -> String; fn copy(value: impl ToString) -> String; fn func(value: impl ToString) -> String; fn foreign_func(value: impl ToString) -> String; fn while_loop(condition: impl ToString, body: impl ToString) -> String; fn if_then_else( condition: impl ToString, then_fn: impl ToString, else_fn: impl ToString) -> String; fn call(func: impl ToString) -> String; fn method_call(method_name: impl ToString) -> String; fn assign(pointer_value: impl ToString) -> String; fn dotname(head: Value, tail: Vec<Identifier>) -> String; fn indexname(head: Value, tail: Vec<Value>) -> String; }