pub enum Value {
Int(i64),
Float(f64),
Str(Rc<str>),
Bool(bool),
None,
List(Rc<RefCell<Vec<Value>>>),
Dict(Rc<RefCell<OrderedMap>>),
Object(Rc<RefCell<ObjectData>>),
Function(Rc<FunctionData>),
Class(Rc<FunctionData>),
BoundMethod(Rc<BoundMethodData>),
Error(Rc<ErrorData>),
}Expand description
A dynamically typed Doge value.
Variants§
Int(i64)
Float(f64)
Str(Rc<str>)
Bool(bool)
None
List(Rc<RefCell<Vec<Value>>>)
Dict(Rc<RefCell<OrderedMap>>)
Object(Rc<RefCell<ObjectData>>)
Function(Rc<FunctionData>)
Class(Rc<FunctionData>)
A class name used as a value: a callable that constructs an instance. It
carries the same FunctionData a function value does — its fn_id is a
constructor arm in the call_function dispatcher — so the whole indirect
call path works unchanged, but it keeps a distinct identity (prints
<class Name>, type Class) rather than masquerading as a function.
BoundMethod(Rc<BoundMethodData>)
A method bound to its receiver: such f = a.speak captures both the
object (or List/Dict) and the method name, so calling f(...) dispatches
exactly as a.speak(...) would. Name-based, like a direct method call — it
carries no fn_id, so both engines route it back through their method
dispatch. Prints <method Class.name>, type Method, equal only to the
same method bound to the very same receiver.
Error(Rc<ErrorData>)
Implementations§
Source§impl Value
impl Value
Sourcepub fn dict(entries: OrderedMap) -> Value
pub fn dict(entries: OrderedMap) -> Value
Build a Dict value from an insertion-ordered map.
Sourcepub fn object(class_id: u32, class_name: &str) -> Value
pub fn object(class_id: u32, class_name: &str) -> Value
Build a fresh instance of the class with class_id/class_name and no
fields yet — the constructor fills them in with attr_set.
Sourcepub fn error(kind: ErrorKind, message: &str, file: Rc<str>, line: u32) -> Value
pub fn error(kind: ErrorKind, message: &str, file: Rc<str>, line: u32) -> Value
Build a caught Error value from a raised error’s category, message, and
the file/line it was raised at (err.type / err.message / err.file /
err.line). Built by crate::error::error_value at each catch site.
Sourcepub fn function(fn_id: u32, name: &str, captures: Vec<Cell>) -> Value
pub fn function(fn_id: u32, name: &str, captures: Vec<Cell>) -> Value
Build a first-class function value with fn_id, display name, and the
captured captures cells (empty for a top-level function or a closure that
captures nothing).
Sourcepub fn bound_method(receiver: Value, method: &str) -> Value
pub fn bound_method(receiver: Value, method: &str) -> Value
Build a bound-method value capturing receiver and the method name. The
receiver is any value method dispatch accepts — a many instance, or a
List/Dict for its collection methods.
Sourcepub fn class(fn_id: u32, name: &str) -> Value
pub fn class(fn_id: u32, name: &str) -> Value
Build a class value from the constructor arm fn_id and the class name.
A class captures nothing — calling it always builds a fresh instance — so
its captures are empty and two values for the same class compare equal.
Sourcepub fn dict_from_pairs(pairs: Vec<(Value, Value)>) -> DogeResult
pub fn dict_from_pairs(pairs: Vec<(Value, Value)>) -> DogeResult
Build a Dict from key/value pairs evaluated by a dict literal. Every
key must be a Str; anything else is a catchable type error. Pairs are
inserted in order, so when a key repeats the last entry wins.