xassembler 0.5.1

Compiler tools for the xasm programming language
Documentation
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 block(body: impl ToString) -> String;
    fn func(body: impl ToString) -> String;
    fn foreign_func(value: impl ToString) -> String;
    fn while_loop(condition: impl ToString, body: impl ToString) -> String;
    fn for_loop(
        counter_identifier: impl ToString,
        element_identifier: impl ToString,
        list_value: 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;
}