mxmlextrema_as3parser/tree/
variable_definition.rs

1use 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}