mxmlextrema_as3parser/tree/
variable_definition.rs1use crate::ns::*;
2use serde::{Serialize, Deserialize};
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct VariableDefinition {
6 pub location: Location,
7 pub asdoc: Option<Rc<Asdoc>>,
8 pub attributes: Vec<Attribute>,
9 pub kind: (VariableDefinitionKind, Location),
10 pub bindings: Vec<Rc<VariableBinding>>,
11}
12
13#[derive(Debug, Copy, Clone, Serialize, Deserialize, PartialEq, Eq)]
14pub enum VariableDefinitionKind {
15 Var,
16 Const,
17}
18
19#[derive(Debug, Clone, Serialize, Deserialize)]
20pub struct SimpleVariableDefinition {
21 pub location: Location,
22 pub kind: (VariableDefinitionKind, Location),
23 pub bindings: Vec<Rc<VariableBinding>>,
24}
25
26#[derive(Debug, Clone, Serialize, Deserialize)]
27pub struct VariableBinding {
28 pub destructuring: TypedDestructuring,
29 pub initializer: Option<Rc<Expression>>,
30}
31
32impl VariableBinding {
33 pub fn location(&self) -> Location {
34 self.initializer.as_ref().map_or(self.destructuring.location.clone(), |init| self.destructuring.location.combine_with(init.location()))
35 }
36}