use crate::core::source::Span;
use super::{GlobalVarId, PlayerVarId, SubroutineId, ValueId};
#[derive(Debug, Clone)]
pub struct ValueNode {
pub value: Value,
pub span: Option<Span>,
}
#[derive(Debug, Clone)]
pub enum Value {
Number {
value: f64,
text: String,
},
String(String),
LocalizedString(String),
Bool(bool),
Null,
Array(Vec<ValueId>),
Vector {
x: ValueId,
y: ValueId,
z: ValueId,
},
Enum {
value_type: String,
value: String,
},
GlobalVariable(GlobalVarId),
PlayerVariable {
player: ValueId,
variable: PlayerVarId,
},
Subroutine(SubroutineId),
EventPlayer,
Call {
name: String,
args: Vec<ValueId>,
},
}
impl ValueNode {
pub fn new(value: Value, span: Option<Span>) -> Self {
ValueNode { value, span }
}
}