{
  "programs": [
    "Program {\n    span: 36..972,\n    kind: Script,\n    body: [\n        _,\n        _,\n        _,\n        _,\n        _,\n    ],\n}"
  ],
  "stmts": [
    "Expr(\n    ExprStmt {\n        span: 141..170,\n        expr: _,\n    },\n)",
    "Block(\n    BlockStmt {\n        span: 131..172,\n        stmts: [\n            _,\n        ],\n    },\n)",
    "If(\n    IfStmt {\n        span: 97..172,\n        test: _,\n        cons: _,\n        alt: None,\n    },\n)",
    "Decl(\n    _,\n)",
    "Expr(\n    ExprStmt {\n        span: 284..313,\n        expr: _,\n    },\n)",
    "Block(\n    BlockStmt {\n        span: 274..321,\n        stmts: [\n            _,\n        ],\n    },\n)",
    "If(\n    IfStmt {\n        span: 246..321,\n        test: _,\n        cons: _,\n        alt: None,\n    },\n)",
    "Decl(\n    _,\n)",
    "Expr(\n    ExprStmt {\n        span: 383..413,\n        expr: _,\n    },\n)",
    "Block(\n    BlockStmt {\n        span: 373..423,\n        stmts: [\n            _,\n        ],\n    },\n)",
    "If(\n    IfStmt {\n        span: 344..423,\n        test: _,\n        cons: _,\n        alt: None,\n    },\n)",
    "Decl(\n    _,\n)",
    "Expr(\n    ExprStmt {\n        span: 485..515,\n        expr: _,\n    },\n)",
    "Block(\n    BlockStmt {\n        span: 475..517,\n        stmts: [\n            _,\n        ],\n    },\n)",
    "If(\n    IfStmt {\n        span: 446..517,\n        test: _,\n        cons: _,\n        alt: None,\n    },\n)",
    "Decl(\n    _,\n)",
    "Decl(\n    _,\n)",
    "Expr(\n    ExprStmt {\n        span: 707..740,\n        expr: _,\n    },\n)",
    "Block(\n    BlockStmt {\n        span: 693..751,\n        stmts: [\n            _,\n        ],\n    },\n)",
    "If(\n    IfStmt {\n        span: 659..751,\n        test: _,\n        cons: _,\n        alt: None,\n    },\n)",
    "Expr(\n    ExprStmt {\n        span: 797..826,\n        expr: _,\n    },\n)",
    "Block(\n    BlockStmt {\n        span: 783..832,\n        stmts: [\n            _,\n        ],\n    },\n)",
    "If(\n    IfStmt {\n        span: 749..832,\n        test: _,\n        cons: _,\n        alt: None,\n    },\n)",
    "Block(\n    BlockStmt {\n        span: 649..834,\n        stmts: [\n            _,\n            _,\n        ],\n    },\n)",
    "If(\n    IfStmt {\n        span: 621..834,\n        test: _,\n        cons: _,\n        alt: None,\n    },\n)",
    "Decl(\n    _,\n)",
    "Expr(\n    ExprStmt {\n        span: 940..969,\n        expr: _,\n    },\n)",
    "Block(\n    BlockStmt {\n        span: 930..971,\n        stmts: [\n            _,\n        ],\n    },\n)",
    "If(\n    IfStmt {\n        span: 916..971,\n        test: _,\n        cons: _,\n        alt: None,\n    },\n)",
    "Decl(\n    _,\n)"
  ],
  "decls": [
    "Fn(\n    FnDecl {\n        span: 36..182,\n        ident: Ident {\n            span: 45..47,\n            sym: \"f1\",\n        },\n        declare: false,\n        params: [\n            _,\n            _,\n        ],\n        body: [\n            _,\n        ],\n    },\n)",
    "Var(\n    VarDecl {\n        span: 318..346,\n        kind: Let,\n        declare: false,\n        declarators: [\n            VarDeclarator {\n                span: 318..339,\n                name: _,\n                init: None,\n            },\n        ],\n    },\n)",
    "Var(\n    VarDecl {\n        span: 418..448,\n        kind: Const,\n        declare: false,\n        declarators: [\n            VarDeclarator {\n                span: 418..441,\n                name: _,\n                init: None,\n            },\n        ],\n    },\n)",
    "Fn(\n    FnDecl {\n        span: 174..523,\n        ident: Ident {\n            span: 183..185,\n            sym: \"f2\",\n        },\n        declare: false,\n        params: [\n            _,\n            _,\n        ],\n        body: [\n            _,\n            _,\n            _,\n            _,\n            _,\n        ],\n    },\n)",
    "TsTypeAlias(\n    TsTypeAliasDecl {\n        span: 519..581,\n        ident: Ident {\n            span: 524..529,\n            sym: \"Thing\",\n        },\n        declare: false,\n        type_params: [],\n        ty: _,\n    },\n)",
    "Fn(\n    FnDecl {\n        span: 573..844,\n        ident: Ident {\n            span: 582..584,\n            sym: \"f3\",\n        },\n        declare: false,\n        params: [\n            _,\n            _,\n        ],\n        body: [\n            _,\n        ],\n    },\n)",
    "Fn(\n    FnDecl {\n        span: 836..972,\n        ident: Ident {\n            span: 845..847,\n            sym: \"f4\",\n        },\n        declare: false,\n        params: [\n            _,\n            _,\n        ],\n        body: [\n            _,\n        ],\n    },\n)"
  ],
  "pats": [
    "Ident(\n    Ident {\n        span: 48..51,\n        sym: \"obj\",\n    },\n)",
    "Ident(\n    Ident {\n        span: 78..81,\n        sym: \"key\",\n    },\n)",
    "Ident(\n    Ident {\n        span: 186..189,\n        sym: \"obj\",\n    },\n)",
    "Ident(\n    Ident {\n        span: 227..230,\n        sym: \"key\",\n    },\n)",
    "Ident(\n    Ident {\n        span: 322..326,\n        sym: \"key2\",\n    },\n)",
    "Assign(\n    AssignPat {\n        span: 327..339,\n        left: _,\n        right: _,\n    },\n)",
    "Ident(\n    Ident {\n        span: 424..428,\n        sym: \"key3\",\n    },\n)",
    "Assign(\n    AssignPat {\n        span: 429..441,\n        left: _,\n        right: _,\n    },\n)",
    "Ident(\n    Ident {\n        span: 585..588,\n        sym: \"obj\",\n    },\n)",
    "Ident(\n    Ident {\n        span: 597..600,\n        sym: \"key\",\n    },\n)",
    "Ident(\n    Ident {\n        span: 866..869,\n        sym: \"obj\",\n    },\n)",
    "Ident(\n    Ident {\n        span: 902..905,\n        sym: \"key\",\n    },\n)"
  ],
  "exprs": [
    "Ident(\n    Ident {\n        span: 108..111,\n        sym: \"obj\",\n    },\n)",
    "Ident(\n    Ident {\n        span: 112..115,\n        sym: \"key\",\n    },\n)",
    "Member(\n    MemberExpr {\n        span: 111..120,\n        obj: _,\n        prop: Computed(\n            _,\n        ),\n    },\n)",
    "Unary(\n    UnaryExpr {\n        span: 101..120,\n        op: TypeOf,\n        arg: _,\n    },\n)",
    "Lit(\n    Str(\n        StrLit {\n            span: 121..129,\n            value: \"string\",\n        },\n    ),\n)",
    "Binary(\n    BinaryExpr {\n        span: 117..130,\n        op: EqEqEq,\n        left: _,\n        right: _,\n    },\n)",
    "Ident(\n    Ident {\n        span: 141..144,\n        sym: \"obj\",\n    },\n)",
    "Ident(\n    Ident {\n        span: 145..148,\n        sym: \"key\",\n    },\n)",
    "Member(\n    MemberExpr {\n        span: 144..150,\n        obj: _,\n        prop: Computed(\n            _,\n        ),\n    },\n)",
    "Member(\n    MemberExpr {\n        span: 149..162,\n        obj: _,\n        prop: Ident(\n            Ident {\n                span: 150..161,\n                sym: \"toUpperCase\",\n            },\n        ),\n    },\n)",
    "Call(\n    CallExpr {\n        span: 161..164,\n        callee: _,\n        args: [],\n    },\n)",
    "Ident(\n    Ident {\n        span: 250..253,\n        sym: \"obj\",\n    },\n)",
    "Ident(\n    Ident {\n        span: 254..257,\n        sym: \"key\",\n    },\n)",
    "Member(\n    MemberExpr {\n        span: 253..262,\n        obj: _,\n        prop: Computed(\n            _,\n        ),\n    },\n)",
    "Ident(\n    Ident {\n        span: 263..272,\n        sym: \"undefined\",\n    },\n)",
    "Binary(\n    BinaryExpr {\n        span: 259..273,\n        op: NotEqEq,\n        left: _,\n        right: _,\n    },\n)",
    "Ident(\n    Ident {\n        span: 284..287,\n        sym: \"obj\",\n    },\n)",
    "Ident(\n    Ident {\n        span: 288..291,\n        sym: \"key\",\n    },\n)",
    "Member(\n    MemberExpr {\n        span: 287..293,\n        obj: _,\n        prop: Computed(\n            _,\n        ),\n    },\n)",
    "Member(\n    MemberExpr {\n        span: 292..305,\n        obj: _,\n        prop: Ident(\n            Ident {\n                span: 293..304,\n                sym: \"toUpperCase\",\n            },\n        ),\n    },\n)",
    "Call(\n    CallExpr {\n        span: 304..307,\n        callee: _,\n        args: [],\n    },\n)",
    "Ident(\n    Ident {\n        span: 329..332,\n        sym: \"key\",\n    },\n)",
    "Ident(\n    Ident {\n        span: 335..338,\n        sym: \"key\",\n    },\n)",
    "Binary(\n    BinaryExpr {\n        span: 333..339,\n        op: Add,\n        left: _,\n        right: _,\n    },\n)",
    "Ident(\n    Ident {\n        span: 348..351,\n        sym: \"obj\",\n    },\n)",
    "Ident(\n    Ident {\n        span: 352..356,\n        sym: \"key2\",\n    },\n)",
    "Member(\n    MemberExpr {\n        span: 351..361,\n        obj: _,\n        prop: Computed(\n            _,\n        ),\n    },\n)",
    "Ident(\n    Ident {\n        span: 362..371,\n        sym: \"undefined\",\n    },\n)",
    "Binary(\n    BinaryExpr {\n        span: 358..372,\n        op: NotEqEq,\n        left: _,\n        right: _,\n    },\n)",
    "Ident(\n    Ident {\n        span: 383..386,\n        sym: \"obj\",\n    },\n)",
    "Ident(\n    Ident {\n        span: 387..391,\n        sym: \"key2\",\n    },\n)",
    "Member(\n    MemberExpr {\n        span: 386..393,\n        obj: _,\n        prop: Computed(\n            _,\n        ),\n    },\n)",
    "Member(\n    MemberExpr {\n        span: 392..405,\n        obj: _,\n        prop: Ident(\n            Ident {\n                span: 393..404,\n                sym: \"toUpperCase\",\n            },\n        ),\n    },\n)",
    "Call(\n    CallExpr {\n        span: 404..407,\n        callee: _,\n        args: [],\n    },\n)",
    "Ident(\n    Ident {\n        span: 431..434,\n        sym: \"key\",\n    },\n)",
    "Ident(\n    Ident {\n        span: 437..440,\n        sym: \"key\",\n    },\n)",
    "Binary(\n    BinaryExpr {\n        span: 435..441,\n        op: Add,\n        left: _,\n        right: _,\n    },\n)",
    "Ident(\n    Ident {\n        span: 450..453,\n        sym: \"obj\",\n    },\n)",
    "Ident(\n    Ident {\n        span: 454..458,\n        sym: \"key3\",\n    },\n)",
    "Member(\n    MemberExpr {\n        span: 453..463,\n        obj: _,\n        prop: Computed(\n            _,\n        ),\n    },\n)",
    "Ident(\n    Ident {\n        span: 464..473,\n        sym: \"undefined\",\n    },\n)",
    "Binary(\n    BinaryExpr {\n        span: 460..474,\n        op: NotEqEq,\n        left: _,\n        right: _,\n    },\n)",
    "Ident(\n    Ident {\n        span: 485..488,\n        sym: \"obj\",\n    },\n)",
    "Ident(\n    Ident {\n        span: 489..493,\n        sym: \"key3\",\n    },\n)",
    "Member(\n    MemberExpr {\n        span: 488..495,\n        obj: _,\n        prop: Computed(\n            _,\n        ),\n    },\n)",
    "Member(\n    MemberExpr {\n        span: 494..507,\n        obj: _,\n        prop: Ident(\n            Ident {\n                span: 495..506,\n                sym: \"toUpperCase\",\n            },\n        ),\n    },\n)",
    "Call(\n    CallExpr {\n        span: 506..509,\n        callee: _,\n        args: [],\n    },\n)",
    "Ident(\n    Ident {\n        span: 625..628,\n        sym: \"obj\",\n    },\n)",
    "Ident(\n    Ident {\n        span: 629..632,\n        sym: \"key\",\n    },\n)",
    "Member(\n    MemberExpr {\n        span: 628..637,\n        obj: _,\n        prop: Computed(\n            _,\n        ),\n    },\n)",
    "Ident(\n    Ident {\n        span: 638..647,\n        sym: \"undefined\",\n    },\n)",
    "Binary(\n    BinaryExpr {\n        span: 634..648,\n        op: NotEqEq,\n        left: _,\n        right: _,\n    },\n)",
    "Ident(\n    Ident {\n        span: 670..673,\n        sym: \"obj\",\n    },\n)",
    "Ident(\n    Ident {\n        span: 674..677,\n        sym: \"key\",\n    },\n)",
    "Member(\n    MemberExpr {\n        span: 673..682,\n        obj: _,\n        prop: Computed(\n            _,\n        ),\n    },\n)",
    "Unary(\n    UnaryExpr {\n        span: 663..682,\n        op: TypeOf,\n        arg: _,\n    },\n)",
    "Lit(\n    Str(\n        StrLit {\n            span: 683..691,\n            value: \"string\",\n        },\n    ),\n)",
    "Binary(\n    BinaryExpr {\n        span: 679..692,\n        op: EqEqEq,\n        left: _,\n        right: _,\n    },\n)",
    "Ident(\n    Ident {\n        span: 707..710,\n        sym: \"obj\",\n    },\n)",
    "Ident(\n    Ident {\n        span: 711..714,\n        sym: \"key\",\n    },\n)",
    "Member(\n    MemberExpr {\n        span: 710..716,\n        obj: _,\n        prop: Computed(\n            _,\n        ),\n    },\n)",
    "Member(\n    MemberExpr {\n        span: 715..728,\n        obj: _,\n        prop: Ident(\n            Ident {\n                span: 716..727,\n                sym: \"toUpperCase\",\n            },\n        ),\n    },\n)",
    "Call(\n    CallExpr {\n        span: 727..730,\n        callee: _,\n        args: [],\n    },\n)",
    "Ident(\n    Ident {\n        span: 760..763,\n        sym: \"obj\",\n    },\n)",
    "Ident(\n    Ident {\n        span: 764..767,\n        sym: \"key\",\n    },\n)",
    "Member(\n    MemberExpr {\n        span: 763..772,\n        obj: _,\n        prop: Computed(\n            _,\n        ),\n    },\n)",
    "Unary(\n    UnaryExpr {\n        span: 753..772,\n        op: TypeOf,\n        arg: _,\n    },\n)",
    "Lit(\n    Str(\n        StrLit {\n            span: 773..781,\n            value: \"number\",\n        },\n    ),\n)",
    "Binary(\n    BinaryExpr {\n        span: 769..782,\n        op: EqEqEq,\n        left: _,\n        right: _,\n    },\n)",
    "Ident(\n    Ident {\n        span: 797..800,\n        sym: \"obj\",\n    },\n)",
    "Ident(\n    Ident {\n        span: 801..804,\n        sym: \"key\",\n    },\n)",
    "Member(\n    MemberExpr {\n        span: 800..806,\n        obj: _,\n        prop: Computed(\n            _,\n        ),\n    },\n)",
    "Member(\n    MemberExpr {\n        span: 805..814,\n        obj: _,\n        prop: Ident(\n            Ident {\n                span: 806..813,\n                sym: \"toFixed\",\n            },\n        ),\n    },\n)",
    "Call(\n    CallExpr {\n        span: 813..816,\n        callee: _,\n        args: [],\n    },\n)",
    "Ident(\n    Ident {\n        span: 920..923,\n        sym: \"obj\",\n    },\n)",
    "Ident(\n    Ident {\n        span: 924..927,\n        sym: \"key\",\n    },\n)",
    "Member(\n    MemberExpr {\n        span: 923..929,\n        obj: _,\n        prop: Computed(\n            _,\n        ),\n    },\n)",
    "Ident(\n    Ident {\n        span: 940..943,\n        sym: \"obj\",\n    },\n)",
    "Ident(\n    Ident {\n        span: 944..947,\n        sym: \"key\",\n    },\n)",
    "Member(\n    MemberExpr {\n        span: 943..949,\n        obj: _,\n        prop: Computed(\n            _,\n        ),\n    },\n)",
    "Member(\n    MemberExpr {\n        span: 948..961,\n        obj: _,\n        prop: Ident(\n            Ident {\n                span: 949..960,\n                sym: \"toUpperCase\",\n            },\n        ),\n    },\n)",
    "Call(\n    CallExpr {\n        span: 960..963,\n        callee: _,\n        args: [],\n    },\n)"
  ],
  "module_decls": [],
  "functions": [],
  "classes": [],
  "class_members": [],
  "jsx_elements": [],
  "ts_types": [
    "Keyword(\n    String,\n)",
    "Keyword(\n    Number,\n)",
    "Keyword(\n    Number,\n)",
    "TypeLit(\n    TsTypeLit {\n        span: 532..571,\n        members: [\n            TsTypeMember {\n                span: 534..547,\n                kind: Property,\n                name: Some(\n                    Ident(\n                        Ident {\n                            span: 534..535,\n                            sym: \"a\",\n                        },\n                    ),\n                ),\n                optional: true,\n                readonly: false,\n                params: [],\n                ty: Some(\n                    _,\n                ),\n            },\n            TsTypeMember {\n                span: 546..559,\n                kind: Property,\n                name: Some(\n                    Ident(\n                        Ident {\n                            span: 546..547,\n                            sym: \"b\",\n                        },\n                    ),\n                ),\n                optional: true,\n                readonly: false,\n                params: [],\n                ty: Some(\n                    _,\n                ),\n            },\n            TsTypeMember {\n                span: 558..570,\n                kind: Property,\n                name: Some(\n                    Ident(\n                        Ident {\n                            span: 558..559,\n                            sym: \"c\",\n                        },\n                    ),\n                ),\n                optional: true,\n                readonly: false,\n                params: [],\n                ty: Some(\n                    _,\n                ),\n            },\n        ],\n    },\n)"
  ]
}
