//! Reserved names for object members. use crate::obj::sym::{Sym, SymRef, global_sym, global_sym_ref}; use once_cell::sync::Lazy; macro_rules! name { ($name:ident, $text:expr $(,)?) => { pub static $name: Lazy = Lazy::new(|| { let name = $text; let sym = global_sym(name.to_string()); NameInfo { name, sym, } }); } } pub struct NameInfo { pub name: &'static str, pub sym: Sym, } impl NameInfo { pub fn sym_ref(&self) -> SymRef { global_sym_ref(self.sym) } } // // Types // name!(INT_NAME, "Int"); name!(TY_NAME, "Type"); name!(SYM_NAME, "Sym"); // // Members // name!(TY_MEMBER_NAME, "__type__"); name!(CALL_MEMBER_NAME, "__call__"); name!(NAME_MEMBER_NAME, "__name__"); name!(GET_ATTR_MEMBER_NAME, "__get_attr__"); name!(SET_ATTR_MEMBER_NAME, "__set_attr__"); name!(SELF_MEMBER_NAME, "__self__"); name!(FUNC_MEMBER_NAME, "__func__"); // // Predefined VM-aware symbols // name!(SCOPE_NAME, "__scope__"); // // Builtin functions // //name!(REPR_FUN_NAME, REPR_FUN_SYM, "repr"); //name!(GET_LOCAL_FUN_NAME, GET_LOCAL_FUN_SYM, "get_local"); //name!(SET_LOCAL_FUN_NAME, SET_LOCAL_FUN_SYM, "set_local"); // // Builtin constants // name!(TRUE_NAME, "true"); name!(FALSE_NAME, "false"); name!(NIL_NAME, "nil"); // Operator function names name!(EQ_EQ_OP_NAME, "__eq__"); name!(LT_OP_NAME, "__lt__"); name!(GT_OP_NAME, "__gt__"); name!(LT_EQ_OP_NAME, "__le__"); name!(GT_EQ_OP_NAME, "__ge__"); name!(PLUS_OP_NAME, "__add__"); name!(MINUS_OP_NAME, "__sub__"); name!(TIMES_OP_NAME, "__mul__"); name!(DIV_OP_NAME, "__div__");