glass/transformer/javascript/
js_ast.rs

1use ast::*;
2
3use self::JSASTLiteral::*;
4
5
6pub type JSAST = Vec<Box<JSASTField>>;
7
8
9#[derive(Debug, Clone, PartialEq)]
10pub enum JSASTField {
11    JSASTItem(JSASTItemType),
12    JSASTGroup(JSASTGroupType, JSAST),
13}
14
15
16#[derive(Debug, Clone, PartialEq)]
17pub enum JSASTItemType {
18    JSLiteral(JSASTLiteral),
19    JSAction(ASTAction),
20}
21
22
23#[derive(Debug, Clone, PartialEq)]
24pub enum JSASTGroupType {
25    JSFunction(JSASTLiteral),
26    JSWhile(JSASTLiteral),
27    JSBlock(),
28}
29
30
31#[derive(Debug, Clone, PartialEq)]
32pub enum JSASTLiteral {
33    JSString(String),
34    // JavaScript actually has higher precision, but this'll do
35    JSNumber(f64),
36    JSName(String),
37    JSComment(String),
38    JSUndefined(),
39}
40
41
42
43impl From<ASTLiteral> for JSASTLiteral {
44    fn from(astliteral: ASTLiteral) -> JSASTLiteral {
45        match astliteral {
46            ASTLiteral::String(x) => JSString(x),
47            ASTLiteral::Number(x) => JSNumber(f64::from(x)),
48            ASTLiteral::Name(x) => JSName(x),
49            ASTLiteral::Comment(x) => JSComment(x),
50            ASTLiteral::Null() => JSUndefined(),
51        }
52    }
53}