--- a/crates/jrsonnet-rowan-parser/jsonnet.ungram +++ b/crates/jrsonnet-rowan-parser/jsonnet.ungram @@ -5,32 +5,47 @@ SourceFile = Expr -ExprBinary = - lhs:LhsExpr - BinaryOperator - rhs:Expr -ExprUnary = - UnaryOperator - rhs:Expr -ExprSlice = - Expr - SliceDesc -ExprIndex = - Expr +SuffixIndex = + '?'? '.' index:Name -ExprIndexExpr = - base:LhsExpr +SuffixIndexExpr = + ('?' '.')? '[' index:Expr ']' -ExprApply = - Expr +SuffixSlice = + SliceDesc +SuffixApply = ArgsDesc 'tailstrict'? +Suffix = + SuffixIndex +| SuffixIndexExpr +| SuffixSlice +| SuffixApply + +StmtLocal = + 'local' + (Bind (',' Bind)* ','?) + ';' +StmtAssert = + Assertion + ';' +Stmt = + StmtLocal +| StmtAssert + +ExprBinary = + lhs:Expr + BinaryOperator + rhs:Expr +ExprUnary = + UnaryOperator + rhs:Expr ExprObjExtend = - LhsExpr Expr + Expr ExprParened = '(' Expr @@ -79,29 +94,18 @@ ParamsDesc ')' Expr -ExprAssert = - Assertion - ';' - Expr ExprError = 'error' Expr -StmtLocal = - 'local' - (Bind (',' Bind)* ','?) - ';' - Expr = - StmtLocal* + Stmt* ExprBase + Suffix* + ExprBase = ExprBinary | ExprUnary -| ExprSlice -| ExprIndex -| ExprIndexExpr -| ExprApply | ExprObjExtend | ExprParened | ExprString @@ -114,11 +118,10 @@ | ExprVar | ExprIfThenElse | ExprFunction -| ExprAssert | ExprError BinaryOperator = - '||' | '&&' + '||' | '??' | '&&' | '|' | '^' | '&' | '==' | '!=' | '<' | '>' | '<=' | '>=' | 'in' | '<<' | '>>' @@ -242,7 +245,7 @@ ForSpec = 'for' - bind:Name + bind:Destruct 'in' Expr IfSpec = @@ -278,7 +281,7 @@ Assertion = 'assert' - condition:LhsExpr + condition:Expr ( ':' message:Expr @@ -336,7 +339,6 @@ // Aliases used to resolve node type conflicts TrueExpr=Expr FalseExpr=Expr -LhsExpr=Expr // Trivia - tokens which will be implicitly skipped for parser Trivia = --- a/crates/jrsonnet-rowan-parser/src/generated/nodes.rs +++ b/crates/jrsonnet-rowan-parser/src/generated/nodes.rs @@ -23,61 +23,70 @@ pub(crate) syntax: SyntaxNode, } impl Expr { - pub fn stmt_locals(&self) -> AstChildren { + pub fn stmts(&self) -> AstChildren { support::children(&self.syntax) } pub fn expr_base(&self) -> Option { support::child(&self.syntax) } + pub fn suffixs(&self) -> AstChildren { + support::children(&self.syntax) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct ExprBinary { +pub struct SuffixIndex { pub(crate) syntax: SyntaxNode, } -impl ExprBinary { - pub fn lhs(&self) -> Option { - support::child(&self.syntax) +impl SuffixIndex { + pub fn question_mark_token(&self) -> Option { + support::token(&self.syntax, T![?]) } - pub fn binary_operator(&self) -> Option { - support::token_child(&self.syntax) + pub fn dot_token(&self) -> Option { + support::token(&self.syntax, T![.]) } - pub fn rhs(&self) -> Option { + pub fn index(&self) -> Option { support::child(&self.syntax) } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct LhsExpr { +pub struct Name { pub(crate) syntax: SyntaxNode, } -impl LhsExpr { - pub fn expr(&self) -> Option { - support::child(&self.syntax) +impl Name { + pub fn ident_lit(&self) -> Option { + support::token(&self.syntax, IDENT) } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct ExprUnary { +pub struct SuffixIndexExpr { pub(crate) syntax: SyntaxNode, } -impl ExprUnary { - pub fn unary_operator(&self) -> Option { - support::token_child(&self.syntax) +impl SuffixIndexExpr { + pub fn question_mark_token(&self) -> Option { + support::token(&self.syntax, T![?]) } - pub fn rhs(&self) -> Option { + pub fn dot_token(&self) -> Option { + support::token(&self.syntax, T![.]) + } + pub fn l_brack_token(&self) -> Option { + support::token(&self.syntax, T!['[']) + } + pub fn index(&self) -> Option { support::child(&self.syntax) } + pub fn r_brack_token(&self) -> Option { + support::token(&self.syntax, T![']']) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct ExprSlice { +pub struct SuffixSlice { pub(crate) syntax: SyntaxNode, } -impl ExprSlice { - pub fn expr(&self) -> Option { - support::child(&self.syntax) - } +impl SuffixSlice { pub fn slice_desc(&self) -> Option { support::child(&self.syntax) } @@ -109,79 +118,108 @@ } #[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct ExprIndex { +pub struct SuffixApply { pub(crate) syntax: SyntaxNode, } -impl ExprIndex { - pub fn expr(&self) -> Option { +impl SuffixApply { + pub fn args_desc(&self) -> Option { support::child(&self.syntax) } - pub fn dot_token(&self) -> Option { - support::token(&self.syntax, T![.]) + pub fn tailstrict_kw_token(&self) -> Option { + support::token(&self.syntax, T![tailstrict]) + } +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct ArgsDesc { + pub(crate) syntax: SyntaxNode, +} +impl ArgsDesc { + pub fn l_paren_token(&self) -> Option { + support::token(&self.syntax, T!['(']) + } + pub fn args(&self) -> AstChildren { + support::children(&self.syntax) } - pub fn index(&self) -> Option { - support::child(&self.syntax) + pub fn r_paren_token(&self) -> Option { + support::token(&self.syntax, T![')']) } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct Name { +pub struct StmtLocal { pub(crate) syntax: SyntaxNode, } -impl Name { - pub fn ident_lit(&self) -> Option { - support::token(&self.syntax, IDENT) +impl StmtLocal { + pub fn local_kw_token(&self) -> Option { + support::token(&self.syntax, T![local]) + } + pub fn binds(&self) -> AstChildren { + support::children(&self.syntax) + } + pub fn semi_token(&self) -> Option { + support::token(&self.syntax, T![;]) } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct ExprIndexExpr { +pub struct StmtAssert { pub(crate) syntax: SyntaxNode, } -impl ExprIndexExpr { - pub fn base(&self) -> Option { +impl StmtAssert { + pub fn assertion(&self) -> Option { support::child(&self.syntax) } - pub fn l_brack_token(&self) -> Option { - support::token(&self.syntax, T!['[']) + pub fn semi_token(&self) -> Option { + support::token(&self.syntax, T![;]) } - pub fn index(&self) -> Option { +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct Assertion { + pub(crate) syntax: SyntaxNode, +} +impl Assertion { + pub fn assert_kw_token(&self) -> Option { + support::token(&self.syntax, T![assert]) + } + pub fn condition(&self) -> Option { support::child(&self.syntax) } - pub fn r_brack_token(&self) -> Option { - support::token(&self.syntax, T![']']) + pub fn colon_token(&self) -> Option { + support::token(&self.syntax, T![:]) + } + pub fn message(&self) -> Option { + support::child(&self.syntax) } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct ExprApply { +pub struct ExprBinary { pub(crate) syntax: SyntaxNode, } -impl ExprApply { - pub fn expr(&self) -> Option { +impl ExprBinary { + pub fn lhs(&self) -> Option { support::child(&self.syntax) } - pub fn args_desc(&self) -> Option { - support::child(&self.syntax) + pub fn binary_operator(&self) -> Option { + support::token_child(&self.syntax) } - pub fn tailstrict_kw_token(&self) -> Option { - support::token(&self.syntax, T![tailstrict]) + pub fn rhs(&self) -> Option { + support::child(&self.syntax) } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct ArgsDesc { +pub struct ExprUnary { pub(crate) syntax: SyntaxNode, } -impl ArgsDesc { - pub fn l_paren_token(&self) -> Option { - support::token(&self.syntax, T!['(']) - } - pub fn args(&self) -> AstChildren { - support::children(&self.syntax) +impl ExprUnary { + pub fn unary_operator(&self) -> Option { + support::token_child(&self.syntax) } - pub fn r_paren_token(&self) -> Option { - support::token(&self.syntax, T![')']) + pub fn rhs(&self) -> Option { + support::child(&self.syntax) } } @@ -190,9 +228,6 @@ pub(crate) syntax: SyntaxNode, } impl ExprObjExtend { - pub fn lhs_expr(&self) -> Option { - support::child(&self.syntax) - } pub fn expr(&self) -> Option { support::child(&self.syntax) } @@ -395,45 +430,10 @@ } pub fn r_paren_token(&self) -> Option { support::token(&self.syntax, T![')']) - } -} - -#[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct ExprAssert { - pub(crate) syntax: SyntaxNode, -} -impl ExprAssert { - pub fn assertion(&self) -> Option { - support::child(&self.syntax) - } - pub fn semi_token(&self) -> Option { - support::token(&self.syntax, T![;]) - } - pub fn expr(&self) -> Option { - support::child(&self.syntax) } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct Assertion { - pub(crate) syntax: SyntaxNode, -} -impl Assertion { - pub fn assert_kw_token(&self) -> Option { - support::token(&self.syntax, T![assert]) - } - pub fn condition(&self) -> Option { - support::child(&self.syntax) - } - pub fn colon_token(&self) -> Option { - support::token(&self.syntax, T![:]) - } - pub fn message(&self) -> Option { - support::child(&self.syntax) - } -} - -#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct ExprError { pub(crate) syntax: SyntaxNode, } @@ -447,22 +447,6 @@ } #[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct StmtLocal { - pub(crate) syntax: SyntaxNode, -} -impl StmtLocal { - pub fn local_kw_token(&self) -> Option { - support::token(&self.syntax, T![local]) - } - pub fn binds(&self) -> AstChildren { - support::children(&self.syntax) - } - pub fn semi_token(&self) -> Option { - support::token(&self.syntax, T![;]) - } -} - -#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct SliceDescEnd { pub(crate) syntax: SyntaxNode, } @@ -641,7 +625,7 @@ pub fn for_kw_token(&self) -> Option { support::token(&self.syntax, T![for]) } - pub fn bind(&self) -> Option { + pub fn bind(&self) -> Option { support::child(&self.syntax) } pub fn in_kw_token(&self) -> Option { @@ -820,6 +804,26 @@ } #[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub enum Suffix { + SuffixIndex(SuffixIndex), + SuffixIndexExpr(SuffixIndexExpr), + SuffixSlice(SuffixSlice), + SuffixApply(SuffixApply), +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub enum Bind { + BindDestruct(BindDestruct), + BindFunction(BindFunction), +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub enum Stmt { + StmtLocal(StmtLocal), + StmtAssert(StmtAssert), +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub enum ObjBody { ObjBodyComp(ObjBodyComp), ObjBodyMemberList(ObjBodyMemberList), @@ -829,22 +833,12 @@ pub enum CompSpec { ForSpec(ForSpec), IfSpec(IfSpec), -} - -#[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub enum Bind { - BindDestruct(BindDestruct), - BindFunction(BindFunction), } #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub enum ExprBase { ExprBinary(ExprBinary), ExprUnary(ExprUnary), - ExprSlice(ExprSlice), - ExprIndex(ExprIndex), - ExprIndexExpr(ExprIndexExpr), - ExprApply(ExprApply), ExprObjExtend(ExprObjExtend), ExprParened(ExprParened), ExprString(ExprString), @@ -857,7 +851,6 @@ ExprVar(ExprVar), ExprIfThenElse(ExprIfThenElse), ExprFunction(ExprFunction), - ExprAssert(ExprAssert), ExprError(ExprError), } @@ -905,6 +898,7 @@ #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum BinaryOperatorKind { Or, + NullCoaelse, And, BitOr, BitXor, @@ -1078,9 +1072,9 @@ &self.syntax } } -impl AstNode for ExprBinary { +impl AstNode for SuffixIndex { fn can_cast(kind: SyntaxKind) -> bool { - kind == EXPR_BINARY + kind == SUFFIX_INDEX } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { @@ -1093,9 +1087,9 @@ &self.syntax } } -impl AstNode for LhsExpr { +impl AstNode for Name { fn can_cast(kind: SyntaxKind) -> bool { - kind == LHS_EXPR + kind == NAME } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { @@ -1108,9 +1102,9 @@ &self.syntax } } -impl AstNode for ExprUnary { +impl AstNode for SuffixIndexExpr { fn can_cast(kind: SyntaxKind) -> bool { - kind == EXPR_UNARY + kind == SUFFIX_INDEX_EXPR } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { @@ -1123,9 +1117,9 @@ &self.syntax } } -impl AstNode for ExprSlice { +impl AstNode for SuffixSlice { fn can_cast(kind: SyntaxKind) -> bool { - kind == EXPR_SLICE + kind == SUFFIX_SLICE } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { @@ -1153,9 +1147,9 @@ &self.syntax } } -impl AstNode for ExprIndex { +impl AstNode for SuffixApply { fn can_cast(kind: SyntaxKind) -> bool { - kind == EXPR_INDEX + kind == SUFFIX_APPLY } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { @@ -1168,9 +1162,9 @@ &self.syntax } } -impl AstNode for Name { +impl AstNode for ArgsDesc { fn can_cast(kind: SyntaxKind) -> bool { - kind == NAME + kind == ARGS_DESC } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { @@ -1183,9 +1177,9 @@ &self.syntax } } -impl AstNode for ExprIndexExpr { +impl AstNode for StmtLocal { fn can_cast(kind: SyntaxKind) -> bool { - kind == EXPR_INDEX_EXPR + kind == STMT_LOCAL } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { @@ -1198,9 +1192,39 @@ &self.syntax } } -impl AstNode for ExprApply { +impl AstNode for StmtAssert { + fn can_cast(kind: SyntaxKind) -> bool { + kind == STMT_ASSERT + } + fn cast(syntax: SyntaxNode) -> Option { + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + fn syntax(&self) -> &SyntaxNode { + &self.syntax + } +} +impl AstNode for Assertion { + fn can_cast(kind: SyntaxKind) -> bool { + kind == ASSERTION + } + fn cast(syntax: SyntaxNode) -> Option { + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + fn syntax(&self) -> &SyntaxNode { + &self.syntax + } +} +impl AstNode for ExprBinary { fn can_cast(kind: SyntaxKind) -> bool { - kind == EXPR_APPLY + kind == EXPR_BINARY } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { @@ -1213,9 +1237,9 @@ &self.syntax } } -impl AstNode for ArgsDesc { +impl AstNode for ExprUnary { fn can_cast(kind: SyntaxKind) -> bool { - kind == ARGS_DESC + kind == EXPR_UNARY } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { @@ -1441,21 +1465,6 @@ impl AstNode for ParamsDesc { fn can_cast(kind: SyntaxKind) -> bool { kind == PARAMS_DESC - } - fn cast(syntax: SyntaxNode) -> Option { - if Self::can_cast(syntax.kind()) { - Some(Self { syntax }) - } else { - None - } - } - fn syntax(&self) -> &SyntaxNode { - &self.syntax - } -} -impl AstNode for ExprAssert { - fn can_cast(kind: SyntaxKind) -> bool { - kind == EXPR_ASSERT } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { @@ -1468,21 +1477,6 @@ &self.syntax } } -impl AstNode for Assertion { - fn can_cast(kind: SyntaxKind) -> bool { - kind == ASSERTION - } - fn cast(syntax: SyntaxNode) -> Option { - if Self::can_cast(syntax.kind()) { - Some(Self { syntax }) - } else { - None - } - } - fn syntax(&self) -> &SyntaxNode { - &self.syntax - } -} impl AstNode for ExprError { fn can_cast(kind: SyntaxKind) -> bool { kind == EXPR_ERROR @@ -1498,21 +1492,6 @@ &self.syntax } } -impl AstNode for StmtLocal { - fn can_cast(kind: SyntaxKind) -> bool { - kind == STMT_LOCAL - } - fn cast(syntax: SyntaxNode) -> Option { - if Self::can_cast(syntax.kind()) { - Some(Self { syntax }) - } else { - None - } - } - fn syntax(&self) -> &SyntaxNode { - &self.syntax - } -} impl AstNode for SliceDescEnd { fn can_cast(kind: SyntaxKind) -> bool { kind == SLICE_DESC_END @@ -1873,6 +1852,116 @@ &self.syntax } } +impl From for Suffix { + fn from(node: SuffixIndex) -> Suffix { + Suffix::SuffixIndex(node) + } +} +impl From for Suffix { + fn from(node: SuffixIndexExpr) -> Suffix { + Suffix::SuffixIndexExpr(node) + } +} +impl From for Suffix { + fn from(node: SuffixSlice) -> Suffix { + Suffix::SuffixSlice(node) + } +} +impl From for Suffix { + fn from(node: SuffixApply) -> Suffix { + Suffix::SuffixApply(node) + } +} +impl AstNode for Suffix { + fn can_cast(kind: SyntaxKind) -> bool { + match kind { + SUFFIX_INDEX | SUFFIX_INDEX_EXPR | SUFFIX_SLICE | SUFFIX_APPLY => true, + _ => false, + } + } + fn cast(syntax: SyntaxNode) -> Option { + let res = match syntax.kind() { + SUFFIX_INDEX => Suffix::SuffixIndex(SuffixIndex { syntax }), + SUFFIX_INDEX_EXPR => Suffix::SuffixIndexExpr(SuffixIndexExpr { syntax }), + SUFFIX_SLICE => Suffix::SuffixSlice(SuffixSlice { syntax }), + SUFFIX_APPLY => Suffix::SuffixApply(SuffixApply { syntax }), + _ => return None, + }; + Some(res) + } + fn syntax(&self) -> &SyntaxNode { + match self { + Suffix::SuffixIndex(it) => &it.syntax, + Suffix::SuffixIndexExpr(it) => &it.syntax, + Suffix::SuffixSlice(it) => &it.syntax, + Suffix::SuffixApply(it) => &it.syntax, + } + } +} +impl From for Bind { + fn from(node: BindDestruct) -> Bind { + Bind::BindDestruct(node) + } +} +impl From for Bind { + fn from(node: BindFunction) -> Bind { + Bind::BindFunction(node) + } +} +impl AstNode for Bind { + fn can_cast(kind: SyntaxKind) -> bool { + match kind { + BIND_DESTRUCT | BIND_FUNCTION => true, + _ => false, + } + } + fn cast(syntax: SyntaxNode) -> Option { + let res = match syntax.kind() { + BIND_DESTRUCT => Bind::BindDestruct(BindDestruct { syntax }), + BIND_FUNCTION => Bind::BindFunction(BindFunction { syntax }), + _ => return None, + }; + Some(res) + } + fn syntax(&self) -> &SyntaxNode { + match self { + Bind::BindDestruct(it) => &it.syntax, + Bind::BindFunction(it) => &it.syntax, + } + } +} +impl From for Stmt { + fn from(node: StmtLocal) -> Stmt { + Stmt::StmtLocal(node) + } +} +impl From for Stmt { + fn from(node: StmtAssert) -> Stmt { + Stmt::StmtAssert(node) + } +} +impl AstNode for Stmt { + fn can_cast(kind: SyntaxKind) -> bool { + match kind { + STMT_LOCAL | STMT_ASSERT => true, + _ => false, + } + } + fn cast(syntax: SyntaxNode) -> Option { + let res = match syntax.kind() { + STMT_LOCAL => Stmt::StmtLocal(StmtLocal { syntax }), + STMT_ASSERT => Stmt::StmtAssert(StmtAssert { syntax }), + _ => return None, + }; + Some(res) + } + fn syntax(&self) -> &SyntaxNode { + match self { + Stmt::StmtLocal(it) => &it.syntax, + Stmt::StmtAssert(it) => &it.syntax, + } + } +} impl From for ObjBody { fn from(node: ObjBodyComp) -> ObjBody { ObjBody::ObjBodyComp(node) @@ -1935,40 +2024,8 @@ CompSpec::ForSpec(it) => &it.syntax, CompSpec::IfSpec(it) => &it.syntax, } - } -} -impl From for Bind { - fn from(node: BindDestruct) -> Bind { - Bind::BindDestruct(node) - } -} -impl From for Bind { - fn from(node: BindFunction) -> Bind { - Bind::BindFunction(node) } } -impl AstNode for Bind { - fn can_cast(kind: SyntaxKind) -> bool { - match kind { - BIND_DESTRUCT | BIND_FUNCTION => true, - _ => false, - } - } - fn cast(syntax: SyntaxNode) -> Option { - let res = match syntax.kind() { - BIND_DESTRUCT => Bind::BindDestruct(BindDestruct { syntax }), - BIND_FUNCTION => Bind::BindFunction(BindFunction { syntax }), - _ => return None, - }; - Some(res) - } - fn syntax(&self) -> &SyntaxNode { - match self { - Bind::BindDestruct(it) => &it.syntax, - Bind::BindFunction(it) => &it.syntax, - } - } -} impl From for ExprBase { fn from(node: ExprBinary) -> ExprBase { ExprBase::ExprBinary(node) @@ -1977,28 +2034,8 @@ impl From for ExprBase { fn from(node: ExprUnary) -> ExprBase { ExprBase::ExprUnary(node) - } -} -impl From for ExprBase { - fn from(node: ExprSlice) -> ExprBase { - ExprBase::ExprSlice(node) } } -impl From for ExprBase { - fn from(node: ExprIndex) -> ExprBase { - ExprBase::ExprIndex(node) - } -} -impl From for ExprBase { - fn from(node: ExprIndexExpr) -> ExprBase { - ExprBase::ExprIndexExpr(node) - } -} -impl From for ExprBase { - fn from(node: ExprApply) -> ExprBase { - ExprBase::ExprApply(node) - } -} impl From for ExprBase { fn from(node: ExprObjExtend) -> ExprBase { ExprBase::ExprObjExtend(node) @@ -2057,11 +2094,6 @@ impl From for ExprBase { fn from(node: ExprFunction) -> ExprBase { ExprBase::ExprFunction(node) - } -} -impl From for ExprBase { - fn from(node: ExprAssert) -> ExprBase { - ExprBase::ExprAssert(node) } } impl From for ExprBase { @@ -2072,10 +2104,9 @@ impl AstNode for ExprBase { fn can_cast(kind: SyntaxKind) -> bool { match kind { - EXPR_BINARY | EXPR_UNARY | EXPR_SLICE | EXPR_INDEX | EXPR_INDEX_EXPR | EXPR_APPLY - | EXPR_OBJ_EXTEND | EXPR_PARENED | EXPR_STRING | EXPR_NUMBER | EXPR_LITERAL - | EXPR_ARRAY | EXPR_OBJECT | EXPR_ARRAY_COMP | EXPR_IMPORT | EXPR_VAR - | EXPR_IF_THEN_ELSE | EXPR_FUNCTION | EXPR_ASSERT | EXPR_ERROR => true, + EXPR_BINARY | EXPR_UNARY | EXPR_OBJ_EXTEND | EXPR_PARENED | EXPR_STRING + | EXPR_NUMBER | EXPR_LITERAL | EXPR_ARRAY | EXPR_OBJECT | EXPR_ARRAY_COMP + | EXPR_IMPORT | EXPR_VAR | EXPR_IF_THEN_ELSE | EXPR_FUNCTION | EXPR_ERROR => true, _ => false, } } @@ -2083,10 +2114,6 @@ let res = match syntax.kind() { EXPR_BINARY => ExprBase::ExprBinary(ExprBinary { syntax }), EXPR_UNARY => ExprBase::ExprUnary(ExprUnary { syntax }), - EXPR_SLICE => ExprBase::ExprSlice(ExprSlice { syntax }), - EXPR_INDEX => ExprBase::ExprIndex(ExprIndex { syntax }), - EXPR_INDEX_EXPR => ExprBase::ExprIndexExpr(ExprIndexExpr { syntax }), - EXPR_APPLY => ExprBase::ExprApply(ExprApply { syntax }), EXPR_OBJ_EXTEND => ExprBase::ExprObjExtend(ExprObjExtend { syntax }), EXPR_PARENED => ExprBase::ExprParened(ExprParened { syntax }), EXPR_STRING => ExprBase::ExprString(ExprString { syntax }), @@ -2099,7 +2126,6 @@ EXPR_VAR => ExprBase::ExprVar(ExprVar { syntax }), EXPR_IF_THEN_ELSE => ExprBase::ExprIfThenElse(ExprIfThenElse { syntax }), EXPR_FUNCTION => ExprBase::ExprFunction(ExprFunction { syntax }), - EXPR_ASSERT => ExprBase::ExprAssert(ExprAssert { syntax }), EXPR_ERROR => ExprBase::ExprError(ExprError { syntax }), _ => return None, }; @@ -2109,10 +2135,6 @@ match self { ExprBase::ExprBinary(it) => &it.syntax, ExprBase::ExprUnary(it) => &it.syntax, - ExprBase::ExprSlice(it) => &it.syntax, - ExprBase::ExprIndex(it) => &it.syntax, - ExprBase::ExprIndexExpr(it) => &it.syntax, - ExprBase::ExprApply(it) => &it.syntax, ExprBase::ExprObjExtend(it) => &it.syntax, ExprBase::ExprParened(it) => &it.syntax, ExprBase::ExprString(it) => &it.syntax, @@ -2125,7 +2147,6 @@ ExprBase::ExprVar(it) => &it.syntax, ExprBase::ExprIfThenElse(it) => &it.syntax, ExprBase::ExprFunction(it) => &it.syntax, - ExprBase::ExprAssert(it) => &it.syntax, ExprBase::ExprError(it) => &it.syntax, } } @@ -2344,14 +2365,16 @@ impl BinaryOperatorKind { fn can_cast(kind: SyntaxKind) -> bool { match kind { - OR | AND | BIT_OR | BIT_XOR | BIT_AND | EQ | NE | LT | GT | LE | GE | IN_KW | LHS - | RHS | PLUS | MINUS | MUL | DIV | MODULO | META_OBJECT_APPLY | ERROR_NO_OPERATOR => true, + OR | NULL_COAELSE | AND | BIT_OR | BIT_XOR | BIT_AND | EQ | NE | LT | GT | LE | GE + | IN_KW | LHS | RHS | PLUS | MINUS | MUL | DIV | MODULO | META_OBJECT_APPLY + | ERROR_NO_OPERATOR => true, _ => false, } } pub fn cast(kind: SyntaxKind) -> Option { let res = match kind { OR => Self::Or, + NULL_COAELSE => Self::NullCoaelse, AND => Self::And, BIT_OR => Self::BitOr, BIT_XOR => Self::BitXor, @@ -2742,21 +2765,31 @@ std::fmt::Display::fmt(self.syntax(), f) } } -impl std::fmt::Display for ObjBody { +impl std::fmt::Display for Suffix { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + std::fmt::Display::fmt(self.syntax(), f) + } +} +impl std::fmt::Display for Bind { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { std::fmt::Display::fmt(self.syntax(), f) } } -impl std::fmt::Display for CompSpec { +impl std::fmt::Display for Stmt { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { std::fmt::Display::fmt(self.syntax(), f) } } -impl std::fmt::Display for Bind { +impl std::fmt::Display for ObjBody { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { std::fmt::Display::fmt(self.syntax(), f) } } +impl std::fmt::Display for CompSpec { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + std::fmt::Display::fmt(self.syntax(), f) + } +} impl std::fmt::Display for ExprBase { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { std::fmt::Display::fmt(self.syntax(), f) @@ -2797,22 +2830,22 @@ std::fmt::Display::fmt(self.syntax(), f) } } -impl std::fmt::Display for ExprBinary { +impl std::fmt::Display for SuffixIndex { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { std::fmt::Display::fmt(self.syntax(), f) } } -impl std::fmt::Display for LhsExpr { +impl std::fmt::Display for Name { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { std::fmt::Display::fmt(self.syntax(), f) } } -impl std::fmt::Display for ExprUnary { +impl std::fmt::Display for SuffixIndexExpr { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { std::fmt::Display::fmt(self.syntax(), f) } } -impl std::fmt::Display for ExprSlice { +impl std::fmt::Display for SuffixSlice { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { std::fmt::Display::fmt(self.syntax(), f) } @@ -2822,31 +2855,41 @@ std::fmt::Display::fmt(self.syntax(), f) } } -impl std::fmt::Display for ExprIndex { +impl std::fmt::Display for SuffixApply { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { std::fmt::Display::fmt(self.syntax(), f) } } -impl std::fmt::Display for Name { +impl std::fmt::Display for ArgsDesc { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { std::fmt::Display::fmt(self.syntax(), f) } } -impl std::fmt::Display for ExprIndexExpr { +impl std::fmt::Display for StmtLocal { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { std::fmt::Display::fmt(self.syntax(), f) } } -impl std::fmt::Display for ExprApply { +impl std::fmt::Display for StmtAssert { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { std::fmt::Display::fmt(self.syntax(), f) } } -impl std::fmt::Display for ArgsDesc { +impl std::fmt::Display for Assertion { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { std::fmt::Display::fmt(self.syntax(), f) } } +impl std::fmt::Display for ExprBinary { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + std::fmt::Display::fmt(self.syntax(), f) + } +} +impl std::fmt::Display for ExprUnary { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + std::fmt::Display::fmt(self.syntax(), f) + } +} impl std::fmt::Display for ExprObjExtend { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { std::fmt::Display::fmt(self.syntax(), f) @@ -2918,26 +2961,11 @@ } } impl std::fmt::Display for ParamsDesc { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - std::fmt::Display::fmt(self.syntax(), f) - } -} -impl std::fmt::Display for ExprAssert { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - std::fmt::Display::fmt(self.syntax(), f) - } -} -impl std::fmt::Display for Assertion { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { std::fmt::Display::fmt(self.syntax(), f) } } impl std::fmt::Display for ExprError { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - std::fmt::Display::fmt(self.syntax(), f) - } -} -impl std::fmt::Display for StmtLocal { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { std::fmt::Display::fmt(self.syntax(), f) } --- a/crates/jrsonnet-rowan-parser/src/generated/syntax_kinds.rs +++ b/crates/jrsonnet-rowan-parser/src/generated/syntax_kinds.rs @@ -19,6 +19,8 @@ EOF, #[token("||")] OR, + #[token("??")] + NULL_COAELSE, #[token("&&")] AND, #[token("|")] @@ -137,6 +139,8 @@ ERROR_COMMENT_UNTERMINATED, #[token("tailstrict")] TAILSTRICT_KW, + #[token("local")] + LOCAL_KW, #[token("importstr")] IMPORTSTR_KW, #[token("importbin")] @@ -153,8 +157,6 @@ FUNCTION_KW, #[token("error")] ERROR_KW, - #[token("local")] - LOCAL_KW, #[token("in")] IN_KW, META_OBJECT_APPLY, @@ -181,16 +183,18 @@ LEXING_ERROR, SOURCE_FILE, EXPR, - EXPR_BINARY, - LHS_EXPR, - EXPR_UNARY, - EXPR_SLICE, - SLICE_DESC, - EXPR_INDEX, + SUFFIX_INDEX, NAME, - EXPR_INDEX_EXPR, - EXPR_APPLY, + SUFFIX_INDEX_EXPR, + SUFFIX_SLICE, + SLICE_DESC, + SUFFIX_APPLY, ARGS_DESC, + STMT_LOCAL, + STMT_ASSERT, + ASSERTION, + EXPR_BINARY, + EXPR_UNARY, EXPR_OBJ_EXTEND, EXPR_PARENED, EXPR_LITERAL, @@ -206,10 +210,7 @@ FALSE_EXPR, EXPR_FUNCTION, PARAMS_DESC, - EXPR_ASSERT, - ASSERTION, EXPR_ERROR, - STMT_LOCAL, SLICE_DESC_END, SLICE_DESC_STEP, ARG, @@ -234,9 +235,11 @@ DESTRUCT_OBJECT_FIELD, DESTRUCT_REST, DESTRUCT_ARRAY_ELEMENT, + SUFFIX, + BIND, + STMT, OBJ_BODY, COMP_SPEC, - BIND, EXPR_BASE, MEMBER_COMP, MEMBER, @@ -259,21 +262,21 @@ impl SyntaxKind { pub fn is_keyword(self) -> bool { match self { - OR | AND | BIT_OR | BIT_XOR | BIT_AND | EQ | NE | LT | GT | LE | GE | LHS | RHS - | PLUS | MINUS | MUL | DIV | MODULO | NOT | BIT_NOT | L_BRACK | R_BRACK | L_PAREN - | R_PAREN | L_BRACE | R_BRACE | COLON | COLONCOLON | COLONCOLONCOLON | SEMI | DOT - | DOTDOTDOT | COMMA | DOLLAR | ASSIGN | QUESTION_MARK | TAILSTRICT_KW - | IMPORTSTR_KW | IMPORTBIN_KW | IMPORT_KW | IF_KW | THEN_KW | ELSE_KW | FUNCTION_KW - | ERROR_KW | LOCAL_KW | IN_KW | NULL_KW | TRUE_KW | FALSE_KW | SELF_KW | SUPER_KW - | FOR_KW | ASSERT_KW => true, + OR | NULL_COAELSE | AND | BIT_OR | BIT_XOR | BIT_AND | EQ | NE | LT | GT | LE | GE + | LHS | RHS | PLUS | MINUS | MUL | DIV | MODULO | NOT | BIT_NOT | L_BRACK | R_BRACK + | L_PAREN | R_PAREN | L_BRACE | R_BRACE | COLON | COLONCOLON | COLONCOLONCOLON + | SEMI | DOT | DOTDOTDOT | COMMA | DOLLAR | ASSIGN | QUESTION_MARK | TAILSTRICT_KW + | LOCAL_KW | IMPORTSTR_KW | IMPORTBIN_KW | IMPORT_KW | IF_KW | THEN_KW | ELSE_KW + | FUNCTION_KW | ERROR_KW | IN_KW | NULL_KW | TRUE_KW | FALSE_KW | SELF_KW + | SUPER_KW | FOR_KW | ASSERT_KW => true, _ => false, } } pub fn is_enum(self) -> bool { match self { - OBJ_BODY | COMP_SPEC | BIND | EXPR_BASE | MEMBER_COMP | MEMBER | FIELD_NAME - | DESTRUCT | DESTRUCT_ARRAY_PART | BINARY_OPERATOR | UNARY_OPERATOR | LITERAL - | TEXT | NUMBER | IMPORT_KIND | VISIBILITY | TRIVIA | CUSTOM_ERROR => true, + SUFFIX | BIND | STMT | OBJ_BODY | COMP_SPEC | EXPR_BASE | MEMBER_COMP | MEMBER + | FIELD_NAME | DESTRUCT | DESTRUCT_ARRAY_PART | BINARY_OPERATOR | UNARY_OPERATOR + | LITERAL | TEXT | NUMBER | IMPORT_KIND | VISIBILITY | TRIVIA | CUSTOM_ERROR => true, _ => false, } } @@ -286,5 +289,5 @@ } } #[macro_export] -macro_rules ! T { [||] => { $ crate :: SyntaxKind :: OR } ; [&&] => { $ crate :: SyntaxKind :: AND } ; [|] => { $ crate :: SyntaxKind :: BIT_OR } ; [^] => { $ crate :: SyntaxKind :: BIT_XOR } ; [&] => { $ crate :: SyntaxKind :: BIT_AND } ; [==] => { $ crate :: SyntaxKind :: EQ } ; [!=] => { $ crate :: SyntaxKind :: NE } ; [<] => { $ crate :: SyntaxKind :: LT } ; [>] => { $ crate :: SyntaxKind :: GT } ; [<=] => { $ crate :: SyntaxKind :: LE } ; [>=] => { $ crate :: SyntaxKind :: GE } ; [<<] => { $ crate :: SyntaxKind :: LHS } ; [>>] => { $ crate :: SyntaxKind :: RHS } ; [+] => { $ crate :: SyntaxKind :: PLUS } ; [-] => { $ crate :: SyntaxKind :: MINUS } ; [*] => { $ crate :: SyntaxKind :: MUL } ; [/] => { $ crate :: SyntaxKind :: DIV } ; [%] => { $ crate :: SyntaxKind :: MODULO } ; [!] => { $ crate :: SyntaxKind :: NOT } ; [~] => { $ crate :: SyntaxKind :: BIT_NOT } ; ['['] => { $ crate :: SyntaxKind :: L_BRACK } ; [']'] => { $ crate :: SyntaxKind :: R_BRACK } ; ['('] => { $ crate :: SyntaxKind :: L_PAREN } ; [')'] => { $ crate :: SyntaxKind :: R_PAREN } ; ['{'] => { $ crate :: SyntaxKind :: L_BRACE } ; ['}'] => { $ crate :: SyntaxKind :: R_BRACE } ; [:] => { $ crate :: SyntaxKind :: COLON } ; [::] => { $ crate :: SyntaxKind :: COLONCOLON } ; [:::] => { $ crate :: SyntaxKind :: COLONCOLONCOLON } ; [;] => { $ crate :: SyntaxKind :: SEMI } ; [.] => { $ crate :: SyntaxKind :: DOT } ; [...] => { $ crate :: SyntaxKind :: DOTDOTDOT } ; [,] => { $ crate :: SyntaxKind :: COMMA } ; ['$'] => { $ crate :: SyntaxKind :: DOLLAR } ; [=] => { $ crate :: SyntaxKind :: ASSIGN } ; [?] => { $ crate :: SyntaxKind :: QUESTION_MARK } ; [tailstrict] => { $ crate :: SyntaxKind :: TAILSTRICT_KW } ; [importstr] => { $ crate :: SyntaxKind :: IMPORTSTR_KW } ; [importbin] => { $ crate :: SyntaxKind :: IMPORTBIN_KW } ; [import] => { $ crate :: SyntaxKind :: IMPORT_KW } ; [if] => { $ crate :: SyntaxKind :: IF_KW } ; [then] => { $ crate :: SyntaxKind :: THEN_KW } ; [else] => { $ crate :: SyntaxKind :: ELSE_KW } ; [function] => { $ crate :: SyntaxKind :: FUNCTION_KW } ; [error] => { $ crate :: SyntaxKind :: ERROR_KW } ; [local] => { $ crate :: SyntaxKind :: LOCAL_KW } ; [in] => { $ crate :: SyntaxKind :: IN_KW } ; [null] => { $ crate :: SyntaxKind :: NULL_KW } ; [true] => { $ crate :: SyntaxKind :: TRUE_KW } ; [false] => { $ crate :: SyntaxKind :: FALSE_KW } ; [self] => { $ crate :: SyntaxKind :: SELF_KW } ; [super] => { $ crate :: SyntaxKind :: SUPER_KW } ; [for] => { $ crate :: SyntaxKind :: FOR_KW } ; [assert] => { $ crate :: SyntaxKind :: ASSERT_KW } } +macro_rules ! T { [||] => { $ crate :: SyntaxKind :: OR } ; [??] => { $ crate :: SyntaxKind :: NULL_COAELSE } ; [&&] => { $ crate :: SyntaxKind :: AND } ; [|] => { $ crate :: SyntaxKind :: BIT_OR } ; [^] => { $ crate :: SyntaxKind :: BIT_XOR } ; [&] => { $ crate :: SyntaxKind :: BIT_AND } ; [==] => { $ crate :: SyntaxKind :: EQ } ; [!=] => { $ crate :: SyntaxKind :: NE } ; [<] => { $ crate :: SyntaxKind :: LT } ; [>] => { $ crate :: SyntaxKind :: GT } ; [<=] => { $ crate :: SyntaxKind :: LE } ; [>=] => { $ crate :: SyntaxKind :: GE } ; [<<] => { $ crate :: SyntaxKind :: LHS } ; [>>] => { $ crate :: SyntaxKind :: RHS } ; [+] => { $ crate :: SyntaxKind :: PLUS } ; [-] => { $ crate :: SyntaxKind :: MINUS } ; [*] => { $ crate :: SyntaxKind :: MUL } ; [/] => { $ crate :: SyntaxKind :: DIV } ; [%] => { $ crate :: SyntaxKind :: MODULO } ; [!] => { $ crate :: SyntaxKind :: NOT } ; [~] => { $ crate :: SyntaxKind :: BIT_NOT } ; ['['] => { $ crate :: SyntaxKind :: L_BRACK } ; [']'] => { $ crate :: SyntaxKind :: R_BRACK } ; ['('] => { $ crate :: SyntaxKind :: L_PAREN } ; [')'] => { $ crate :: SyntaxKind :: R_PAREN } ; ['{'] => { $ crate :: SyntaxKind :: L_BRACE } ; ['}'] => { $ crate :: SyntaxKind :: R_BRACE } ; [:] => { $ crate :: SyntaxKind :: COLON } ; [::] => { $ crate :: SyntaxKind :: COLONCOLON } ; [:::] => { $ crate :: SyntaxKind :: COLONCOLONCOLON } ; [;] => { $ crate :: SyntaxKind :: SEMI } ; [.] => { $ crate :: SyntaxKind :: DOT } ; [...] => { $ crate :: SyntaxKind :: DOTDOTDOT } ; [,] => { $ crate :: SyntaxKind :: COMMA } ; ['$'] => { $ crate :: SyntaxKind :: DOLLAR } ; [=] => { $ crate :: SyntaxKind :: ASSIGN } ; [?] => { $ crate :: SyntaxKind :: QUESTION_MARK } ; [tailstrict] => { $ crate :: SyntaxKind :: TAILSTRICT_KW } ; [local] => { $ crate :: SyntaxKind :: LOCAL_KW } ; [importstr] => { $ crate :: SyntaxKind :: IMPORTSTR_KW } ; [importbin] => { $ crate :: SyntaxKind :: IMPORTBIN_KW } ; [import] => { $ crate :: SyntaxKind :: IMPORT_KW } ; [if] => { $ crate :: SyntaxKind :: IF_KW } ; [then] => { $ crate :: SyntaxKind :: THEN_KW } ; [else] => { $ crate :: SyntaxKind :: ELSE_KW } ; [function] => { $ crate :: SyntaxKind :: FUNCTION_KW } ; [error] => { $ crate :: SyntaxKind :: ERROR_KW } ; [in] => { $ crate :: SyntaxKind :: IN_KW } ; [null] => { $ crate :: SyntaxKind :: NULL_KW } ; [true] => { $ crate :: SyntaxKind :: TRUE_KW } ; [false] => { $ crate :: SyntaxKind :: FALSE_KW } ; [self] => { $ crate :: SyntaxKind :: SELF_KW } ; [super] => { $ crate :: SyntaxKind :: SUPER_KW } ; [for] => { $ crate :: SyntaxKind :: FOR_KW } ; [assert] => { $ crate :: SyntaxKind :: ASSERT_KW } } pub use T; --- a/crates/jrsonnet-rowan-parser/src/lib.rs +++ b/crates/jrsonnet-rowan-parser/src/lib.rs @@ -23,6 +23,11 @@ pub use language::*; pub use token_set::SyntaxKindSet; +use self::{ + ast::support, + generated::nodes::{Expr, ExprBinary, ExprObjExtend}, +}; + pub fn parse(input: &str) -> (SourceFile, Vec) { let lexemes = lex(input); let kinds = lexemes @@ -42,3 +47,25 @@ parse.errors, ) } +impl ExprBinary { + pub fn lhs_work(&self) -> Option { + support::child(self.syntax()) + } + pub fn rhs_work(&self) -> Option { + let mut children = support::children(self.syntax()); + // skip lhs + children.next()?; + children.next() + } +} +impl ExprObjExtend { + pub fn lhs_work(&self) -> Option { + support::child(self.syntax()) + } + pub fn rhs_work(&self) -> Option { + let mut children = support::children(self.syntax()); + // skip lhs + children.next()?; + children.next() + } +} --- a/crates/jrsonnet-rowan-parser/src/parser.rs +++ b/crates/jrsonnet-rowan-parser/src/parser.rs @@ -293,30 +293,38 @@ } fn expr(p: &mut Parser) -> CompletedMarker { - while p.at(T![local]) { + let m = p.start(); + while p.at(T![local]) || p.at(T![assert]) { let m = p.start(); - p.bump(); - loop { - if p.at(T![;]) { - p.bump(); + if p.at(T![local]) { + p.bump(); + loop { + if p.at(T![;]) { + p.bump(); + break; + } + bind(p); + + if p.at(T![,]) { + p.bump(); + continue; + } + p.expect(T![;]); break; } - bind(p); - - if p.at(T![,]) { - p.bump(); - continue; - } + m.complete(p, STMT_LOCAL); + } else { + assertion(p); p.expect(T![;]); - break; + m.complete(p, STMT_ASSERT); } - m.complete(p, STMT_LOCAL); } match expr_binding_power(p, 0) { Ok(m) => m, Err(m) => m, - } + }; + m.complete(p, EXPR) } fn expr_binding_power( p: &mut Parser, @@ -337,8 +345,10 @@ p.bump(); } - let m = lhs.wrap(p, LHS_EXPR).precede(p); - let parsed_rhs = expr_binding_power(p, right_binding_power).is_ok(); + let m = lhs.wrap(p, EXPR).precede(p); + let parsed_rhs = expr_binding_power(p, right_binding_power) + .map(|v| v.precede(p).complete(p, EXPR)) + .is_ok(); lhs = m.complete( p, if op == BinaryOperatorKind::MetaObjectApply { @@ -361,7 +371,7 @@ if p.at(T![for]) { let m = p.start(); p.bump(); - name(p); + destruct(p); p.expect(T![in]); expr(p); m.complete(p, FOR_SPEC) @@ -420,7 +430,7 @@ fn assertion(p: &mut Parser) { let m = p.start(); p.bump_assert(T![assert]); - expr(p).wrap(p, LHS_EXPR); + expr(p); if p.at(T![:]) { p.bump(); expr(p); @@ -504,7 +514,7 @@ for errored in compspecs { errored.wrap_error( p, - "compspec may only be used if there is only one array element", + "compspec may only be used if there is only one object element", ); } m.complete(p, OBJ_BODY_MEMBER_LIST); @@ -612,8 +622,8 @@ p.expect(T![']']); break; } - elems += 1; expr(p); + elems += 1; while p.at_ts(COMPSPEC) { compspecs.push(compspec(p)); } @@ -679,32 +689,47 @@ true } -fn lhs(p: &mut Parser) -> Result { - let mut lhs = lhs_basic(p)?; - +fn suffix(p: &mut Parser) { loop { - if p.at(T![.]) { - let m = lhs.precede(p); + let start = p.start(); + let _marker: CompletedMarker = if p.at(T![?]) { p.bump(); + p.expect(T![.]); + if p.at(IDENT) { + name(p); + start.complete(p, SUFFIX_INDEX) + } else if p.at(T!['[']) { + p.bump(); + expr(p); + p.expect(T![']']); + start.complete(p, SUFFIX_INDEX_EXPR) + } else { + start.complete_missing(p, ExpectedSyntax::Named("index")) + } + } else if p.at(T![.]) { + p.bump(); name(p); - lhs = m.complete(p, EXPR_INDEX); + start.complete(p, SUFFIX_INDEX) } else if p.at(T!['[']) { if slice_desc_or_index(p) { - lhs = lhs.precede(p).complete(p, EXPR_SLICE); + start.complete(p, SUFFIX_SLICE) } else { - lhs = lhs - .wrap(p, LHS_EXPR) - .precede(p) - .complete(p, EXPR_INDEX_EXPR); + start.complete(p, SUFFIX_INDEX_EXPR) } } else if p.at(T!['(']) { - let m = lhs.precede(p); args_desc(p); - lhs = m.complete(p, EXPR_APPLY); + start.complete(p, SUFFIX_APPLY) } else { + start.forget(p); break; - } + }; } +} + +fn lhs(p: &mut Parser) -> Result { + let lhs = lhs_basic(p)?; + + suffix(p); Ok(lhs) } @@ -885,12 +910,6 @@ p.bump(); expr(p); m.complete(p, EXPR_ERROR) - } else if p.at(T![assert]) { - let m = p.start(); - assertion(p); - p.expect(T![;]); - expr(p); - m.complete(p, EXPR_ASSERT) } else if p.at(T![import]) || p.at(T![importstr]) || p.at(T![importbin]) { let m = p.start(); p.bump(); --- a/crates/jrsonnet-rowan-parser/src/precedence.rs +++ b/crates/jrsonnet-rowan-parser/src/precedence.rs @@ -13,6 +13,7 @@ Self::BitXor => (8, 9), Self::BitOr => (6, 7), Self::And => (4, 5), + Self::NullCoaelse => (2, 3), Self::Or => (2, 3), Self::ErrorNoOperator => (0, 1), } --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec.snap @@ -3,32 +3,39 @@ expression: "[a for a in [1, 2, 3]]\n" --- SOURCE_FILE@0..23 - EXPR_ARRAY_COMP@0..22 - L_BRACK@0..1 "[" - EXPR_VAR@1..2 - NAME@1..2 - IDENT@1..2 "a" - WHITESPACE@2..3 " " - FOR_SPEC@3..21 - FOR_KW@3..6 "for" - WHITESPACE@6..7 " " - NAME@7..8 - IDENT@7..8 "a" - WHITESPACE@8..9 " " - IN_KW@9..11 "in" - WHITESPACE@11..12 " " - EXPR_ARRAY@12..21 - L_BRACK@12..13 "[" - EXPR_NUMBER@13..14 - FLOAT@13..14 "1" - COMMA@14..15 "," - WHITESPACE@15..16 " " - EXPR_NUMBER@16..17 - FLOAT@16..17 "2" - COMMA@17..18 "," - WHITESPACE@18..19 " " - EXPR_NUMBER@19..20 - FLOAT@19..20 "3" - R_BRACK@20..21 "]" - R_BRACK@21..22 "]" + EXPR@0..22 + EXPR_ARRAY_COMP@0..22 + L_BRACK@0..1 "[" + EXPR@1..2 + EXPR_VAR@1..2 + NAME@1..2 + IDENT@1..2 "a" + WHITESPACE@2..3 " " + FOR_SPEC@3..21 + FOR_KW@3..6 "for" + WHITESPACE@6..7 " " + DESTRUCT_FULL@7..8 + NAME@7..8 + IDENT@7..8 "a" + WHITESPACE@8..9 " " + IN_KW@9..11 "in" + WHITESPACE@11..12 " " + EXPR@12..21 + EXPR_ARRAY@12..21 + L_BRACK@12..13 "[" + EXPR@13..14 + EXPR_NUMBER@13..14 + FLOAT@13..14 "1" + COMMA@14..15 "," + WHITESPACE@15..16 " " + EXPR@16..17 + EXPR_NUMBER@16..17 + FLOAT@16..17 "2" + COMMA@17..18 "," + WHITESPACE@18..19 " " + EXPR@19..20 + EXPR_NUMBER@19..20 + FLOAT@19..20 "3" + R_BRACK@20..21 "]" + R_BRACK@21..22 "]" WHITESPACE@22..23 "\n" --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_comma.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_comma.snap @@ -3,33 +3,40 @@ expression: "[a, for a in [1, 2, 3]]\n" --- SOURCE_FILE@0..24 - EXPR_ARRAY_COMP@0..23 - L_BRACK@0..1 "[" - EXPR_VAR@1..2 - NAME@1..2 - IDENT@1..2 "a" - COMMA@2..3 "," - WHITESPACE@3..4 " " - FOR_SPEC@4..22 - FOR_KW@4..7 "for" - WHITESPACE@7..8 " " - NAME@8..9 - IDENT@8..9 "a" - WHITESPACE@9..10 " " - IN_KW@10..12 "in" - WHITESPACE@12..13 " " - EXPR_ARRAY@13..22 - L_BRACK@13..14 "[" - EXPR_NUMBER@14..15 - FLOAT@14..15 "1" - COMMA@15..16 "," - WHITESPACE@16..17 " " - EXPR_NUMBER@17..18 - FLOAT@17..18 "2" - COMMA@18..19 "," - WHITESPACE@19..20 " " - EXPR_NUMBER@20..21 - FLOAT@20..21 "3" - R_BRACK@21..22 "]" - R_BRACK@22..23 "]" + EXPR@0..23 + EXPR_ARRAY_COMP@0..23 + L_BRACK@0..1 "[" + EXPR@1..2 + EXPR_VAR@1..2 + NAME@1..2 + IDENT@1..2 "a" + COMMA@2..3 "," + WHITESPACE@3..4 " " + FOR_SPEC@4..22 + FOR_KW@4..7 "for" + WHITESPACE@7..8 " " + DESTRUCT_FULL@8..9 + NAME@8..9 + IDENT@8..9 "a" + WHITESPACE@9..10 " " + IN_KW@10..12 "in" + WHITESPACE@12..13 " " + EXPR@13..22 + EXPR_ARRAY@13..22 + L_BRACK@13..14 "[" + EXPR@14..15 + EXPR_NUMBER@14..15 + FLOAT@14..15 "1" + COMMA@15..16 "," + WHITESPACE@16..17 " " + EXPR@17..18 + EXPR_NUMBER@17..18 + FLOAT@17..18 "2" + COMMA@18..19 "," + WHITESPACE@19..20 " " + EXPR@20..21 + EXPR_NUMBER@20..21 + FLOAT@20..21 "3" + R_BRACK@21..22 "]" + R_BRACK@22..23 "]" WHITESPACE@23..24 "\n" --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_incompatible_with_multiple_elems.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_incompatible_with_multiple_elems.snap @@ -3,40 +3,48 @@ expression: "[a for a in [1, 2, 3], b]\n" --- SOURCE_FILE@0..26 - EXPR_ARRAY@0..25 - L_BRACK@0..1 "[" - EXPR_VAR@1..2 - NAME@1..2 - IDENT@1..2 "a" - WHITESPACE@2..3 " " - ERROR_CUSTOM@3..21 - FOR_SPEC@3..21 - FOR_KW@3..6 "for" - WHITESPACE@6..7 " " - NAME@7..8 - IDENT@7..8 "a" - WHITESPACE@8..9 " " - IN_KW@9..11 "in" - WHITESPACE@11..12 " " - EXPR_ARRAY@12..21 - L_BRACK@12..13 "[" - EXPR_NUMBER@13..14 - FLOAT@13..14 "1" - COMMA@14..15 "," - WHITESPACE@15..16 " " - EXPR_NUMBER@16..17 - FLOAT@16..17 "2" - COMMA@17..18 "," - WHITESPACE@18..19 " " - EXPR_NUMBER@19..20 - FLOAT@19..20 "3" - R_BRACK@20..21 "]" - COMMA@21..22 "," - WHITESPACE@22..23 " " - EXPR_VAR@23..24 - NAME@23..24 - IDENT@23..24 "b" - R_BRACK@24..25 "]" + EXPR@0..25 + EXPR_ARRAY@0..25 + L_BRACK@0..1 "[" + EXPR@1..2 + EXPR_VAR@1..2 + NAME@1..2 + IDENT@1..2 "a" + WHITESPACE@2..3 " " + ERROR_CUSTOM@3..21 + FOR_SPEC@3..21 + FOR_KW@3..6 "for" + WHITESPACE@6..7 " " + DESTRUCT_FULL@7..8 + NAME@7..8 + IDENT@7..8 "a" + WHITESPACE@8..9 " " + IN_KW@9..11 "in" + WHITESPACE@11..12 " " + EXPR@12..21 + EXPR_ARRAY@12..21 + L_BRACK@12..13 "[" + EXPR@13..14 + EXPR_NUMBER@13..14 + FLOAT@13..14 "1" + COMMA@14..15 "," + WHITESPACE@15..16 " " + EXPR@16..17 + EXPR_NUMBER@16..17 + FLOAT@16..17 "2" + COMMA@17..18 "," + WHITESPACE@18..19 " " + EXPR@19..20 + EXPR_NUMBER@19..20 + FLOAT@19..20 "3" + R_BRACK@20..21 "]" + COMMA@21..22 "," + WHITESPACE@22..23 " " + EXPR@23..24 + EXPR_VAR@23..24 + NAME@23..24 + IDENT@23..24 "b" + R_BRACK@24..25 "]" WHITESPACE@25..26 "\n" === LocatedSyntaxError { error: Custom { error: "compspec may only be used if there is only one array element" }, range: 3..21 } --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_incompatible_with_multiple_elems_w.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_incompatible_with_multiple_elems_w.snap @@ -3,46 +3,55 @@ expression: "[a, b, for a in [1, 2, 3], c]\n" --- SOURCE_FILE@0..30 - EXPR_ARRAY@0..29 - L_BRACK@0..1 "[" - EXPR_VAR@1..2 - NAME@1..2 - IDENT@1..2 "a" - COMMA@2..3 "," - WHITESPACE@3..4 " " - EXPR_VAR@4..5 - NAME@4..5 - IDENT@4..5 "b" - COMMA@5..6 "," - WHITESPACE@6..7 " " - ERROR_CUSTOM@7..25 - FOR_SPEC@7..25 - FOR_KW@7..10 "for" - WHITESPACE@10..11 " " - NAME@11..12 - IDENT@11..12 "a" - WHITESPACE@12..13 " " - IN_KW@13..15 "in" - WHITESPACE@15..16 " " - EXPR_ARRAY@16..25 - L_BRACK@16..17 "[" - EXPR_NUMBER@17..18 - FLOAT@17..18 "1" - COMMA@18..19 "," - WHITESPACE@19..20 " " - EXPR_NUMBER@20..21 - FLOAT@20..21 "2" - COMMA@21..22 "," - WHITESPACE@22..23 " " - EXPR_NUMBER@23..24 - FLOAT@23..24 "3" - R_BRACK@24..25 "]" - COMMA@25..26 "," - WHITESPACE@26..27 " " - EXPR_VAR@27..28 - NAME@27..28 - IDENT@27..28 "c" - R_BRACK@28..29 "]" + EXPR@0..29 + EXPR_ARRAY@0..29 + L_BRACK@0..1 "[" + EXPR@1..2 + EXPR_VAR@1..2 + NAME@1..2 + IDENT@1..2 "a" + COMMA@2..3 "," + WHITESPACE@3..4 " " + EXPR@4..5 + EXPR_VAR@4..5 + NAME@4..5 + IDENT@4..5 "b" + COMMA@5..6 "," + WHITESPACE@6..7 " " + ERROR_CUSTOM@7..25 + FOR_SPEC@7..25 + FOR_KW@7..10 "for" + WHITESPACE@10..11 " " + DESTRUCT_FULL@11..12 + NAME@11..12 + IDENT@11..12 "a" + WHITESPACE@12..13 " " + IN_KW@13..15 "in" + WHITESPACE@15..16 " " + EXPR@16..25 + EXPR_ARRAY@16..25 + L_BRACK@16..17 "[" + EXPR@17..18 + EXPR_NUMBER@17..18 + FLOAT@17..18 "1" + COMMA@18..19 "," + WHITESPACE@19..20 " " + EXPR@20..21 + EXPR_NUMBER@20..21 + FLOAT@20..21 "2" + COMMA@21..22 "," + WHITESPACE@22..23 " " + EXPR@23..24 + EXPR_NUMBER@23..24 + FLOAT@23..24 "3" + R_BRACK@24..25 "]" + COMMA@25..26 "," + WHITESPACE@26..27 " " + EXPR@27..28 + EXPR_VAR@27..28 + NAME@27..28 + IDENT@27..28 "c" + R_BRACK@28..29 "]" WHITESPACE@29..30 "\n" === LocatedSyntaxError { error: Custom { error: "compspec may only be used if there is only one array element" }, range: 7..25 } --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_no_elems.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_no_elems.snap @@ -3,31 +3,38 @@ expression: "[for a in [1, 2, 3]]\n" --- SOURCE_FILE@0..21 - EXPR_ARRAY_COMP@0..20 - L_BRACK@0..1 "[" - ERROR_MISSING_TOKEN@1..1 - FOR_SPEC@1..19 - FOR_KW@1..4 "for" - WHITESPACE@4..5 " " - NAME@5..6 - IDENT@5..6 "a" - WHITESPACE@6..7 " " - IN_KW@7..9 "in" - WHITESPACE@9..10 " " - EXPR_ARRAY@10..19 - L_BRACK@10..11 "[" - EXPR_NUMBER@11..12 - FLOAT@11..12 "1" - COMMA@12..13 "," - WHITESPACE@13..14 " " - EXPR_NUMBER@14..15 - FLOAT@14..15 "2" - COMMA@15..16 "," - WHITESPACE@16..17 " " - EXPR_NUMBER@17..18 - FLOAT@17..18 "3" - R_BRACK@18..19 "]" - R_BRACK@19..20 "]" + EXPR@0..20 + EXPR_ARRAY_COMP@0..20 + L_BRACK@0..1 "[" + EXPR@1..1 + ERROR_MISSING_TOKEN@1..1 + FOR_SPEC@1..19 + FOR_KW@1..4 "for" + WHITESPACE@4..5 " " + DESTRUCT_FULL@5..6 + NAME@5..6 + IDENT@5..6 "a" + WHITESPACE@6..7 " " + IN_KW@7..9 "in" + WHITESPACE@9..10 " " + EXPR@10..19 + EXPR_ARRAY@10..19 + L_BRACK@10..11 "[" + EXPR@11..12 + EXPR_NUMBER@11..12 + FLOAT@11..12 "1" + COMMA@12..13 "," + WHITESPACE@13..14 " " + EXPR@14..15 + EXPR_NUMBER@14..15 + FLOAT@14..15 "2" + COMMA@15..16 "," + WHITESPACE@16..17 " " + EXPR@17..18 + EXPR_NUMBER@17..18 + FLOAT@17..18 "3" + R_BRACK@18..19 "]" + R_BRACK@19..20 "]" WHITESPACE@20..21 "\n" === LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 1..1 } --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__continue_after_total_failure.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__continue_after_total_failure.snap @@ -3,26 +3,29 @@ expression: "local intr = $intrinsic(test);\n\nlocal a = 1, b = 2, c = a + b;\n\n[c]\n" --- SOURCE_FILE@0..68 - STMT_LOCAL@0..23 - LOCAL_KW@0..5 "local" - WHITESPACE@5..6 " " - BIND_DESTRUCT@6..14 - DESTRUCT_FULL@6..10 - NAME@6..10 - IDENT@6..10 "intr" - WHITESPACE@10..11 " " - ASSIGN@11..12 "=" - WHITESPACE@12..13 " " - EXPR_LITERAL@13..14 - DOLLAR@13..14 "$" - ERROR_UNEXPECTED_TOKEN@14..23 - IDENT@14..23 "intrinsic" - EXPR_PARENED@23..29 - L_PAREN@23..24 "(" - EXPR_VAR@24..28 - NAME@24..28 - IDENT@24..28 "test" - R_PAREN@28..29 ")" + EXPR@0..29 + STMT_LOCAL@0..23 + LOCAL_KW@0..5 "local" + WHITESPACE@5..6 " " + BIND_DESTRUCT@6..14 + DESTRUCT_FULL@6..10 + NAME@6..10 + IDENT@6..10 "intr" + WHITESPACE@10..11 " " + ASSIGN@11..12 "=" + WHITESPACE@12..13 " " + EXPR@13..14 + EXPR_LITERAL@13..14 + DOLLAR@13..14 "$" + ERROR_UNEXPECTED_TOKEN@14..23 + IDENT@14..23 "intrinsic" + EXPR_PARENED@23..29 + L_PAREN@23..24 "(" + EXPR@24..28 + EXPR_VAR@24..28 + NAME@24..28 + IDENT@24..28 "test" + R_PAREN@28..29 ")" ERROR_CUSTOM@29..67 SEMI@29..30 ";" WHITESPACE@30..32 "\n\n" @@ -58,14 +61,14 @@ R_BRACK@66..67 "]" WHITESPACE@67..68 "\n" === -LocatedSyntaxError { error: Unexpected { expected: Unnamed(SyntaxKindSet([L_BRACK, L_PAREN, L_BRACE, SEMI, DOT, COMMA])), found: IDENT }, range: 14..23 } +LocatedSyntaxError { error: Unexpected { expected: Unnamed(SyntaxKindSet([L_BRACK, L_PAREN, L_BRACE, SEMI, DOT, COMMA, QUESTION_MARK])), found: IDENT }, range: 14..23 } LocatedSyntaxError { error: Custom { error: "unexpected tokens after end" }, range: 29..67 } === x syntax error ,-[1:1] 1 | ,-> local intr = $intrinsic(test); : || ^^^^|^^^^ - : || `-- expected L_BRACK, L_PAREN, L_BRACE, SEMI, DOT or COMMA, found IDENT + : || `-- expected L_BRACK, L_PAREN, L_BRACE, SEMI, DOT, COMMA or QUESTION_MARK, found IDENT 2 | | 3 | | local a = 1, b = 2, c = a + b; 4 | | --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__destruct.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__destruct.snap @@ -3,252 +3,263 @@ expression: "local [a, b, c] = arr;\nlocal [a, ...] = arr_rest;\nlocal [..., a] = rest_arr;\nlocal [...] = rest_in_arr;\nlocal [a, ...n] = arr_rest_n;\nlocal [...n, a] = rest_arr_n;\nlocal [...n] = rest_in_arr_n;\n\nlocal {a, b, c} = obj;\nlocal {a, b, c, ...} = obj_rest;\nlocal {a, b, c, ...n} = obj_rest_n;\n\nnull\n" --- SOURCE_FILE@0..293 - STMT_LOCAL@0..22 - LOCAL_KW@0..5 "local" - WHITESPACE@5..6 " " - BIND_DESTRUCT@6..21 - DESTRUCT_ARRAY@6..15 - L_BRACK@6..7 "[" - DESTRUCT_FULL@7..8 - NAME@7..8 - IDENT@7..8 "a" - COMMA@8..9 "," - WHITESPACE@9..10 " " - DESTRUCT_FULL@10..11 - NAME@10..11 - IDENT@10..11 "b" - COMMA@11..12 "," - WHITESPACE@12..13 " " - DESTRUCT_FULL@13..14 - NAME@13..14 - IDENT@13..14 "c" - R_BRACK@14..15 "]" - WHITESPACE@15..16 " " - ASSIGN@16..17 "=" - WHITESPACE@17..18 " " - EXPR_VAR@18..21 - NAME@18..21 - IDENT@18..21 "arr" - SEMI@21..22 ";" - WHITESPACE@22..23 "\n" - STMT_LOCAL@23..49 - LOCAL_KW@23..28 "local" - WHITESPACE@28..29 " " - BIND_DESTRUCT@29..48 - DESTRUCT_ARRAY@29..37 - L_BRACK@29..30 "[" - DESTRUCT_FULL@30..31 - NAME@30..31 - IDENT@30..31 "a" - COMMA@31..32 "," - WHITESPACE@32..33 " " - DESTRUCT_REST@33..36 - DOTDOTDOT@33..36 "..." - R_BRACK@36..37 "]" - WHITESPACE@37..38 " " - ASSIGN@38..39 "=" - WHITESPACE@39..40 " " - EXPR_VAR@40..48 - NAME@40..48 - IDENT@40..48 "arr_rest" - SEMI@48..49 ";" - WHITESPACE@49..50 "\n" - STMT_LOCAL@50..76 - LOCAL_KW@50..55 "local" - WHITESPACE@55..56 " " - BIND_DESTRUCT@56..75 - DESTRUCT_ARRAY@56..64 - L_BRACK@56..57 "[" - DESTRUCT_REST@57..60 - DOTDOTDOT@57..60 "..." - COMMA@60..61 "," - WHITESPACE@61..62 " " - DESTRUCT_FULL@62..63 - NAME@62..63 - IDENT@62..63 "a" - R_BRACK@63..64 "]" - WHITESPACE@64..65 " " - ASSIGN@65..66 "=" - WHITESPACE@66..67 " " - EXPR_VAR@67..75 - NAME@67..75 - IDENT@67..75 "rest_arr" - SEMI@75..76 ";" - WHITESPACE@76..77 "\n" - STMT_LOCAL@77..103 - LOCAL_KW@77..82 "local" - WHITESPACE@82..83 " " - BIND_DESTRUCT@83..102 - DESTRUCT_ARRAY@83..88 - L_BRACK@83..84 "[" - DESTRUCT_REST@84..87 - DOTDOTDOT@84..87 "..." - R_BRACK@87..88 "]" - WHITESPACE@88..89 " " - ASSIGN@89..90 "=" - WHITESPACE@90..91 " " - EXPR_VAR@91..102 - NAME@91..102 - IDENT@91..102 "rest_in_arr" - SEMI@102..103 ";" - WHITESPACE@103..104 "\n" - STMT_LOCAL@104..133 - LOCAL_KW@104..109 "local" - WHITESPACE@109..110 " " - BIND_DESTRUCT@110..132 - DESTRUCT_ARRAY@110..119 - L_BRACK@110..111 "[" - DESTRUCT_FULL@111..112 - NAME@111..112 - IDENT@111..112 "a" - COMMA@112..113 "," - WHITESPACE@113..114 " " - DESTRUCT_REST@114..118 - DOTDOTDOT@114..117 "..." - IDENT@117..118 "n" - R_BRACK@118..119 "]" - WHITESPACE@119..120 " " - ASSIGN@120..121 "=" - WHITESPACE@121..122 " " - EXPR_VAR@122..132 - NAME@122..132 - IDENT@122..132 "arr_rest_n" - SEMI@132..133 ";" - WHITESPACE@133..134 "\n" - STMT_LOCAL@134..163 - LOCAL_KW@134..139 "local" - WHITESPACE@139..140 " " - BIND_DESTRUCT@140..162 - DESTRUCT_ARRAY@140..149 - L_BRACK@140..141 "[" - DESTRUCT_REST@141..145 - DOTDOTDOT@141..144 "..." - IDENT@144..145 "n" - COMMA@145..146 "," - WHITESPACE@146..147 " " - DESTRUCT_FULL@147..148 - NAME@147..148 - IDENT@147..148 "a" - R_BRACK@148..149 "]" - WHITESPACE@149..150 " " - ASSIGN@150..151 "=" - WHITESPACE@151..152 " " - EXPR_VAR@152..162 - NAME@152..162 - IDENT@152..162 "rest_arr_n" - SEMI@162..163 ";" - WHITESPACE@163..164 "\n" - STMT_LOCAL@164..193 - LOCAL_KW@164..169 "local" - WHITESPACE@169..170 " " - BIND_DESTRUCT@170..192 - DESTRUCT_ARRAY@170..176 - L_BRACK@170..171 "[" - DESTRUCT_REST@171..175 - DOTDOTDOT@171..174 "..." - IDENT@174..175 "n" - R_BRACK@175..176 "]" - WHITESPACE@176..177 " " - ASSIGN@177..178 "=" - WHITESPACE@178..179 " " - EXPR_VAR@179..192 - NAME@179..192 - IDENT@179..192 "rest_in_arr_n" - SEMI@192..193 ";" - WHITESPACE@193..195 "\n\n" - STMT_LOCAL@195..217 - LOCAL_KW@195..200 "local" - WHITESPACE@200..201 " " - BIND_DESTRUCT@201..216 - DESTRUCT_OBJECT@201..210 - L_BRACE@201..202 "{" - DESTRUCT_OBJECT_FIELD@202..203 - NAME@202..203 - IDENT@202..203 "a" - COMMA@203..204 "," - WHITESPACE@204..205 " " - DESTRUCT_OBJECT_FIELD@205..206 - NAME@205..206 - IDENT@205..206 "b" - COMMA@206..207 "," - WHITESPACE@207..208 " " - DESTRUCT_OBJECT_FIELD@208..209 - NAME@208..209 - IDENT@208..209 "c" - R_BRACE@209..210 "}" - WHITESPACE@210..211 " " - ASSIGN@211..212 "=" - WHITESPACE@212..213 " " - EXPR_VAR@213..216 - NAME@213..216 - IDENT@213..216 "obj" - SEMI@216..217 ";" - WHITESPACE@217..218 "\n" - STMT_LOCAL@218..250 - LOCAL_KW@218..223 "local" - WHITESPACE@223..224 " " - BIND_DESTRUCT@224..249 - DESTRUCT_OBJECT@224..238 - L_BRACE@224..225 "{" - DESTRUCT_OBJECT_FIELD@225..226 - NAME@225..226 - IDENT@225..226 "a" - COMMA@226..227 "," - WHITESPACE@227..228 " " - DESTRUCT_OBJECT_FIELD@228..229 - NAME@228..229 - IDENT@228..229 "b" - COMMA@229..230 "," - WHITESPACE@230..231 " " - DESTRUCT_OBJECT_FIELD@231..232 - NAME@231..232 - IDENT@231..232 "c" - COMMA@232..233 "," - WHITESPACE@233..234 " " - DESTRUCT_REST@234..237 - DOTDOTDOT@234..237 "..." - R_BRACE@237..238 "}" - WHITESPACE@238..239 " " - ASSIGN@239..240 "=" - WHITESPACE@240..241 " " - EXPR_VAR@241..249 - NAME@241..249 - IDENT@241..249 "obj_rest" - SEMI@249..250 ";" - WHITESPACE@250..251 "\n" - STMT_LOCAL@251..286 - LOCAL_KW@251..256 "local" - WHITESPACE@256..257 " " - BIND_DESTRUCT@257..285 - DESTRUCT_OBJECT@257..272 - L_BRACE@257..258 "{" - DESTRUCT_OBJECT_FIELD@258..259 - NAME@258..259 - IDENT@258..259 "a" - COMMA@259..260 "," - WHITESPACE@260..261 " " - DESTRUCT_OBJECT_FIELD@261..262 - NAME@261..262 - IDENT@261..262 "b" - COMMA@262..263 "," - WHITESPACE@263..264 " " - DESTRUCT_OBJECT_FIELD@264..265 - NAME@264..265 - IDENT@264..265 "c" - COMMA@265..266 "," - WHITESPACE@266..267 " " - DESTRUCT_REST@267..271 - DOTDOTDOT@267..270 "..." - IDENT@270..271 "n" - R_BRACE@271..272 "}" - WHITESPACE@272..273 " " - ASSIGN@273..274 "=" - WHITESPACE@274..275 " " - EXPR_VAR@275..285 - NAME@275..285 - IDENT@275..285 "obj_rest_n" - SEMI@285..286 ";" - WHITESPACE@286..288 "\n\n" - EXPR_LITERAL@288..292 - NULL_KW@288..292 "null" + EXPR@0..292 + STMT_LOCAL@0..22 + LOCAL_KW@0..5 "local" + WHITESPACE@5..6 " " + BIND_DESTRUCT@6..21 + DESTRUCT_ARRAY@6..15 + L_BRACK@6..7 "[" + DESTRUCT_FULL@7..8 + NAME@7..8 + IDENT@7..8 "a" + COMMA@8..9 "," + WHITESPACE@9..10 " " + DESTRUCT_FULL@10..11 + NAME@10..11 + IDENT@10..11 "b" + COMMA@11..12 "," + WHITESPACE@12..13 " " + DESTRUCT_FULL@13..14 + NAME@13..14 + IDENT@13..14 "c" + R_BRACK@14..15 "]" + WHITESPACE@15..16 " " + ASSIGN@16..17 "=" + WHITESPACE@17..18 " " + EXPR@18..21 + EXPR_VAR@18..21 + NAME@18..21 + IDENT@18..21 "arr" + SEMI@21..22 ";" + WHITESPACE@22..23 "\n" + STMT_LOCAL@23..49 + LOCAL_KW@23..28 "local" + WHITESPACE@28..29 " " + BIND_DESTRUCT@29..48 + DESTRUCT_ARRAY@29..37 + L_BRACK@29..30 "[" + DESTRUCT_FULL@30..31 + NAME@30..31 + IDENT@30..31 "a" + COMMA@31..32 "," + WHITESPACE@32..33 " " + DESTRUCT_REST@33..36 + DOTDOTDOT@33..36 "..." + R_BRACK@36..37 "]" + WHITESPACE@37..38 " " + ASSIGN@38..39 "=" + WHITESPACE@39..40 " " + EXPR@40..48 + EXPR_VAR@40..48 + NAME@40..48 + IDENT@40..48 "arr_rest" + SEMI@48..49 ";" + WHITESPACE@49..50 "\n" + STMT_LOCAL@50..76 + LOCAL_KW@50..55 "local" + WHITESPACE@55..56 " " + BIND_DESTRUCT@56..75 + DESTRUCT_ARRAY@56..64 + L_BRACK@56..57 "[" + DESTRUCT_REST@57..60 + DOTDOTDOT@57..60 "..." + COMMA@60..61 "," + WHITESPACE@61..62 " " + DESTRUCT_FULL@62..63 + NAME@62..63 + IDENT@62..63 "a" + R_BRACK@63..64 "]" + WHITESPACE@64..65 " " + ASSIGN@65..66 "=" + WHITESPACE@66..67 " " + EXPR@67..75 + EXPR_VAR@67..75 + NAME@67..75 + IDENT@67..75 "rest_arr" + SEMI@75..76 ";" + WHITESPACE@76..77 "\n" + STMT_LOCAL@77..103 + LOCAL_KW@77..82 "local" + WHITESPACE@82..83 " " + BIND_DESTRUCT@83..102 + DESTRUCT_ARRAY@83..88 + L_BRACK@83..84 "[" + DESTRUCT_REST@84..87 + DOTDOTDOT@84..87 "..." + R_BRACK@87..88 "]" + WHITESPACE@88..89 " " + ASSIGN@89..90 "=" + WHITESPACE@90..91 " " + EXPR@91..102 + EXPR_VAR@91..102 + NAME@91..102 + IDENT@91..102 "rest_in_arr" + SEMI@102..103 ";" + WHITESPACE@103..104 "\n" + STMT_LOCAL@104..133 + LOCAL_KW@104..109 "local" + WHITESPACE@109..110 " " + BIND_DESTRUCT@110..132 + DESTRUCT_ARRAY@110..119 + L_BRACK@110..111 "[" + DESTRUCT_FULL@111..112 + NAME@111..112 + IDENT@111..112 "a" + COMMA@112..113 "," + WHITESPACE@113..114 " " + DESTRUCT_REST@114..118 + DOTDOTDOT@114..117 "..." + IDENT@117..118 "n" + R_BRACK@118..119 "]" + WHITESPACE@119..120 " " + ASSIGN@120..121 "=" + WHITESPACE@121..122 " " + EXPR@122..132 + EXPR_VAR@122..132 + NAME@122..132 + IDENT@122..132 "arr_rest_n" + SEMI@132..133 ";" + WHITESPACE@133..134 "\n" + STMT_LOCAL@134..163 + LOCAL_KW@134..139 "local" + WHITESPACE@139..140 " " + BIND_DESTRUCT@140..162 + DESTRUCT_ARRAY@140..149 + L_BRACK@140..141 "[" + DESTRUCT_REST@141..145 + DOTDOTDOT@141..144 "..." + IDENT@144..145 "n" + COMMA@145..146 "," + WHITESPACE@146..147 " " + DESTRUCT_FULL@147..148 + NAME@147..148 + IDENT@147..148 "a" + R_BRACK@148..149 "]" + WHITESPACE@149..150 " " + ASSIGN@150..151 "=" + WHITESPACE@151..152 " " + EXPR@152..162 + EXPR_VAR@152..162 + NAME@152..162 + IDENT@152..162 "rest_arr_n" + SEMI@162..163 ";" + WHITESPACE@163..164 "\n" + STMT_LOCAL@164..193 + LOCAL_KW@164..169 "local" + WHITESPACE@169..170 " " + BIND_DESTRUCT@170..192 + DESTRUCT_ARRAY@170..176 + L_BRACK@170..171 "[" + DESTRUCT_REST@171..175 + DOTDOTDOT@171..174 "..." + IDENT@174..175 "n" + R_BRACK@175..176 "]" + WHITESPACE@176..177 " " + ASSIGN@177..178 "=" + WHITESPACE@178..179 " " + EXPR@179..192 + EXPR_VAR@179..192 + NAME@179..192 + IDENT@179..192 "rest_in_arr_n" + SEMI@192..193 ";" + WHITESPACE@193..195 "\n\n" + STMT_LOCAL@195..217 + LOCAL_KW@195..200 "local" + WHITESPACE@200..201 " " + BIND_DESTRUCT@201..216 + DESTRUCT_OBJECT@201..210 + L_BRACE@201..202 "{" + DESTRUCT_OBJECT_FIELD@202..203 + NAME@202..203 + IDENT@202..203 "a" + COMMA@203..204 "," + WHITESPACE@204..205 " " + DESTRUCT_OBJECT_FIELD@205..206 + NAME@205..206 + IDENT@205..206 "b" + COMMA@206..207 "," + WHITESPACE@207..208 " " + DESTRUCT_OBJECT_FIELD@208..209 + NAME@208..209 + IDENT@208..209 "c" + R_BRACE@209..210 "}" + WHITESPACE@210..211 " " + ASSIGN@211..212 "=" + WHITESPACE@212..213 " " + EXPR@213..216 + EXPR_VAR@213..216 + NAME@213..216 + IDENT@213..216 "obj" + SEMI@216..217 ";" + WHITESPACE@217..218 "\n" + STMT_LOCAL@218..250 + LOCAL_KW@218..223 "local" + WHITESPACE@223..224 " " + BIND_DESTRUCT@224..249 + DESTRUCT_OBJECT@224..238 + L_BRACE@224..225 "{" + DESTRUCT_OBJECT_FIELD@225..226 + NAME@225..226 + IDENT@225..226 "a" + COMMA@226..227 "," + WHITESPACE@227..228 " " + DESTRUCT_OBJECT_FIELD@228..229 + NAME@228..229 + IDENT@228..229 "b" + COMMA@229..230 "," + WHITESPACE@230..231 " " + DESTRUCT_OBJECT_FIELD@231..232 + NAME@231..232 + IDENT@231..232 "c" + COMMA@232..233 "," + WHITESPACE@233..234 " " + DESTRUCT_REST@234..237 + DOTDOTDOT@234..237 "..." + R_BRACE@237..238 "}" + WHITESPACE@238..239 " " + ASSIGN@239..240 "=" + WHITESPACE@240..241 " " + EXPR@241..249 + EXPR_VAR@241..249 + NAME@241..249 + IDENT@241..249 "obj_rest" + SEMI@249..250 ";" + WHITESPACE@250..251 "\n" + STMT_LOCAL@251..286 + LOCAL_KW@251..256 "local" + WHITESPACE@256..257 " " + BIND_DESTRUCT@257..285 + DESTRUCT_OBJECT@257..272 + L_BRACE@257..258 "{" + DESTRUCT_OBJECT_FIELD@258..259 + NAME@258..259 + IDENT@258..259 "a" + COMMA@259..260 "," + WHITESPACE@260..261 " " + DESTRUCT_OBJECT_FIELD@261..262 + NAME@261..262 + IDENT@261..262 "b" + COMMA@262..263 "," + WHITESPACE@263..264 " " + DESTRUCT_OBJECT_FIELD@264..265 + NAME@264..265 + IDENT@264..265 "c" + COMMA@265..266 "," + WHITESPACE@266..267 " " + DESTRUCT_REST@267..271 + DOTDOTDOT@267..270 "..." + IDENT@270..271 "n" + R_BRACE@271..272 "}" + WHITESPACE@272..273 " " + ASSIGN@273..274 "=" + WHITESPACE@274..275 " " + EXPR@275..285 + EXPR_VAR@275..285 + NAME@275..285 + IDENT@275..285 "obj_rest_n" + SEMI@285..286 ";" + WHITESPACE@286..288 "\n\n" + EXPR_LITERAL@288..292 + NULL_KW@288..292 "null" WHITESPACE@292..293 "\n" --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__empty.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__empty.snap @@ -4,7 +4,8 @@ --- SOURCE_FILE@0..1 WHITESPACE@0..1 " " - ERROR_MISSING_TOKEN@1..1 + EXPR@1..1 + ERROR_MISSING_TOKEN@1..1 === LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 1..1 } === --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function.snap @@ -3,37 +3,40 @@ expression: "function(a, b = 1) a + b\n" --- SOURCE_FILE@0..25 - EXPR_FUNCTION@0..24 - FUNCTION_KW@0..8 "function" - PARAMS_DESC@8..18 - L_PAREN@8..9 "(" - PARAM@9..10 - DESTRUCT_FULL@9..10 - NAME@9..10 - IDENT@9..10 "a" - COMMA@10..11 "," - WHITESPACE@11..12 " " - PARAM@12..17 - DESTRUCT_FULL@12..13 - NAME@12..13 - IDENT@12..13 "b" - WHITESPACE@13..14 " " - ASSIGN@14..15 "=" - WHITESPACE@15..16 " " - EXPR_NUMBER@16..17 - FLOAT@16..17 "1" - R_PAREN@17..18 ")" - WHITESPACE@18..19 " " - EXPR_BINARY@19..24 - LHS_EXPR@19..20 - EXPR_VAR@19..20 - NAME@19..20 - IDENT@19..20 "a" - WHITESPACE@20..21 " " - PLUS@21..22 "+" - WHITESPACE@22..23 " " - EXPR_VAR@23..24 - NAME@23..24 - IDENT@23..24 "b" + EXPR@0..24 + EXPR_FUNCTION@0..24 + FUNCTION_KW@0..8 "function" + PARAMS_DESC@8..18 + L_PAREN@8..9 "(" + PARAM@9..10 + DESTRUCT_FULL@9..10 + NAME@9..10 + IDENT@9..10 "a" + COMMA@10..11 "," + WHITESPACE@11..12 " " + PARAM@12..17 + DESTRUCT_FULL@12..13 + NAME@12..13 + IDENT@12..13 "b" + WHITESPACE@13..14 " " + ASSIGN@14..15 "=" + WHITESPACE@15..16 " " + EXPR@16..17 + EXPR_NUMBER@16..17 + FLOAT@16..17 "1" + R_PAREN@17..18 ")" + WHITESPACE@18..19 " " + EXPR@19..24 + EXPR_BINARY@19..24 + EXPR@19..20 + EXPR_VAR@19..20 + NAME@19..20 + IDENT@19..20 "a" + WHITESPACE@20..21 " " + PLUS@21..22 "+" + WHITESPACE@22..23 " " + EXPR@23..24 + EXPR_VAR@23..24 + NAME@23..24 + IDENT@23..24 "b" WHITESPACE@24..25 "\n" - --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_body.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_body.snap @@ -3,23 +3,25 @@ expression: "function(a, b)\n" --- SOURCE_FILE@0..15 - EXPR_FUNCTION@0..15 - FUNCTION_KW@0..8 "function" - PARAMS_DESC@8..14 - L_PAREN@8..9 "(" - PARAM@9..10 - DESTRUCT_FULL@9..10 - NAME@9..10 - IDENT@9..10 "a" - COMMA@10..11 "," - WHITESPACE@11..12 " " - PARAM@12..13 - DESTRUCT_FULL@12..13 - NAME@12..13 - IDENT@12..13 "b" - R_PAREN@13..14 ")" - WHITESPACE@14..15 "\n" - ERROR_MISSING_TOKEN@15..15 + EXPR@0..15 + EXPR_FUNCTION@0..15 + FUNCTION_KW@0..8 "function" + PARAMS_DESC@8..14 + L_PAREN@8..9 "(" + PARAM@9..10 + DESTRUCT_FULL@9..10 + NAME@9..10 + IDENT@9..10 "a" + COMMA@10..11 "," + WHITESPACE@11..12 " " + PARAM@12..13 + DESTRUCT_FULL@12..13 + NAME@12..13 + IDENT@12..13 "b" + R_PAREN@13..14 ")" + WHITESPACE@14..15 "\n" + EXPR@15..15 + ERROR_MISSING_TOKEN@15..15 === LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 15..15 } === --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_no_value.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_no_value.snap @@ -3,37 +3,41 @@ expression: "function(a, b = ) a + b\n" --- SOURCE_FILE@0..24 - EXPR_FUNCTION@0..23 - FUNCTION_KW@0..8 "function" - PARAMS_DESC@8..17 - L_PAREN@8..9 "(" - PARAM@9..10 - DESTRUCT_FULL@9..10 - NAME@9..10 - IDENT@9..10 "a" - COMMA@10..11 "," - WHITESPACE@11..12 " " - PARAM@12..16 - DESTRUCT_FULL@12..13 - NAME@12..13 - IDENT@12..13 "b" - WHITESPACE@13..14 " " - ASSIGN@14..15 "=" - WHITESPACE@15..16 " " - ERROR_MISSING_TOKEN@16..16 - R_PAREN@16..17 ")" - WHITESPACE@17..18 " " - EXPR_BINARY@18..23 - LHS_EXPR@18..19 - EXPR_VAR@18..19 - NAME@18..19 - IDENT@18..19 "a" - WHITESPACE@19..20 " " - PLUS@20..21 "+" - WHITESPACE@21..22 " " - EXPR_VAR@22..23 - NAME@22..23 - IDENT@22..23 "b" + EXPR@0..23 + EXPR_FUNCTION@0..23 + FUNCTION_KW@0..8 "function" + PARAMS_DESC@8..17 + L_PAREN@8..9 "(" + PARAM@9..10 + DESTRUCT_FULL@9..10 + NAME@9..10 + IDENT@9..10 "a" + COMMA@10..11 "," + WHITESPACE@11..12 " " + PARAM@12..16 + DESTRUCT_FULL@12..13 + NAME@12..13 + IDENT@12..13 "b" + WHITESPACE@13..14 " " + ASSIGN@14..15 "=" + WHITESPACE@15..16 " " + EXPR@16..16 + ERROR_MISSING_TOKEN@16..16 + R_PAREN@16..17 ")" + WHITESPACE@17..18 " " + EXPR@18..23 + EXPR_BINARY@18..23 + EXPR@18..19 + EXPR_VAR@18..19 + NAME@18..19 + IDENT@18..19 "a" + WHITESPACE@19..20 " " + PLUS@20..21 "+" + WHITESPACE@21..22 " " + EXPR@22..23 + EXPR_VAR@22..23 + NAME@22..23 + IDENT@22..23 "b" WHITESPACE@23..24 "\n" === LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 16..16 } --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_rparen.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_rparen.snap @@ -3,23 +3,25 @@ expression: "function(a, b\n" --- SOURCE_FILE@0..14 - EXPR_FUNCTION@0..14 - FUNCTION_KW@0..8 "function" - PARAMS_DESC@8..14 - L_PAREN@8..9 "(" - PARAM@9..10 - DESTRUCT_FULL@9..10 - NAME@9..10 - IDENT@9..10 "a" - COMMA@10..11 "," - WHITESPACE@11..12 " " - PARAM@12..13 - DESTRUCT_FULL@12..13 - NAME@12..13 - IDENT@12..13 "b" - WHITESPACE@13..14 "\n" - ERROR_MISSING_TOKEN@14..14 - ERROR_MISSING_TOKEN@14..14 + EXPR@0..14 + EXPR_FUNCTION@0..14 + FUNCTION_KW@0..8 "function" + PARAMS_DESC@8..14 + L_PAREN@8..9 "(" + PARAM@9..10 + DESTRUCT_FULL@9..10 + NAME@9..10 + IDENT@9..10 "a" + COMMA@10..11 "," + WHITESPACE@11..12 " " + PARAM@12..13 + DESTRUCT_FULL@12..13 + NAME@12..13 + IDENT@12..13 "b" + WHITESPACE@13..14 "\n" + ERROR_MISSING_TOKEN@14..14 + EXPR@14..14 + ERROR_MISSING_TOKEN@14..14 === LocatedSyntaxError { error: Missing { expected: Unnamed(SyntaxKindSet([R_PAREN, COMMA, ASSIGN])) }, range: 14..14 } LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 14..14 } --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_method.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_method.snap @@ -3,50 +3,53 @@ expression: "local\n\ta(x) = x,\n\ta = function(x) x,\n; c\n" --- SOURCE_FILE@0..41 - STMT_LOCAL@0..38 - LOCAL_KW@0..5 "local" - WHITESPACE@5..7 "\n\t" - BIND_FUNCTION@7..15 - NAME@7..8 - IDENT@7..8 "a" - PARAMS_DESC@8..11 - L_PAREN@8..9 "(" - PARAM@9..10 - DESTRUCT_FULL@9..10 - NAME@9..10 - IDENT@9..10 "x" - R_PAREN@10..11 ")" - WHITESPACE@11..12 " " - ASSIGN@12..13 "=" - WHITESPACE@13..14 " " - EXPR_VAR@14..15 - NAME@14..15 - IDENT@14..15 "x" - COMMA@15..16 "," - WHITESPACE@16..18 "\n\t" - BIND_FUNCTION@18..35 - NAME@18..19 - IDENT@18..19 "a" - WHITESPACE@19..20 " " - ASSIGN@20..21 "=" - WHITESPACE@21..22 " " - FUNCTION_KW@22..30 "function" - PARAMS_DESC@30..33 - L_PAREN@30..31 "(" - PARAM@31..32 - DESTRUCT_FULL@31..32 - NAME@31..32 - IDENT@31..32 "x" - R_PAREN@32..33 ")" - WHITESPACE@33..34 " " - EXPR_VAR@34..35 - NAME@34..35 - IDENT@34..35 "x" - COMMA@35..36 "," - WHITESPACE@36..37 "\n" - SEMI@37..38 ";" - WHITESPACE@38..39 " " - EXPR_VAR@39..40 - NAME@39..40 - IDENT@39..40 "c" + EXPR@0..40 + STMT_LOCAL@0..38 + LOCAL_KW@0..5 "local" + WHITESPACE@5..7 "\n\t" + BIND_FUNCTION@7..15 + NAME@7..8 + IDENT@7..8 "a" + PARAMS_DESC@8..11 + L_PAREN@8..9 "(" + PARAM@9..10 + DESTRUCT_FULL@9..10 + NAME@9..10 + IDENT@9..10 "x" + R_PAREN@10..11 ")" + WHITESPACE@11..12 " " + ASSIGN@12..13 "=" + WHITESPACE@13..14 " " + EXPR@14..15 + EXPR_VAR@14..15 + NAME@14..15 + IDENT@14..15 "x" + COMMA@15..16 "," + WHITESPACE@16..18 "\n\t" + BIND_FUNCTION@18..35 + NAME@18..19 + IDENT@18..19 "a" + WHITESPACE@19..20 " " + ASSIGN@20..21 "=" + WHITESPACE@21..22 " " + FUNCTION_KW@22..30 "function" + PARAMS_DESC@30..33 + L_PAREN@30..31 "(" + PARAM@31..32 + DESTRUCT_FULL@31..32 + NAME@31..32 + IDENT@31..32 "x" + R_PAREN@32..33 ")" + WHITESPACE@33..34 " " + EXPR@34..35 + EXPR_VAR@34..35 + NAME@34..35 + IDENT@34..35 "x" + COMMA@35..36 "," + WHITESPACE@36..37 "\n" + SEMI@37..38 ";" + WHITESPACE@38..39 " " + EXPR_VAR@39..40 + NAME@39..40 + IDENT@39..40 "c" WHITESPACE@40..41 "\n" --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_no_value_recovery.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_no_value_recovery.snap @@ -3,37 +3,40 @@ expression: "local a =\nlocal b = 3;\n1\n" --- SOURCE_FILE@0..25 - STMT_LOCAL@0..25 - LOCAL_KW@0..5 "local" - WHITESPACE@5..6 " " - BIND_DESTRUCT@6..24 - DESTRUCT_FULL@6..7 - NAME@6..7 - IDENT@6..7 "a" - WHITESPACE@7..8 " " - ASSIGN@8..9 "=" - WHITESPACE@9..10 "\n" - STMT_LOCAL@10..22 - LOCAL_KW@10..15 "local" - WHITESPACE@15..16 " " - BIND_DESTRUCT@16..21 - DESTRUCT_FULL@16..17 - NAME@16..17 - IDENT@16..17 "b" - WHITESPACE@17..18 " " - ASSIGN@18..19 "=" - WHITESPACE@19..20 " " - EXPR_NUMBER@20..21 - FLOAT@20..21 "3" - SEMI@21..22 ";" - WHITESPACE@22..23 "\n" - EXPR_NUMBER@23..24 - FLOAT@23..24 "1" - WHITESPACE@24..25 "\n" + EXPR@0..25 + STMT_LOCAL@0..25 + LOCAL_KW@0..5 "local" + WHITESPACE@5..6 " " + BIND_DESTRUCT@6..24 + DESTRUCT_FULL@6..7 + NAME@6..7 + IDENT@6..7 "a" + WHITESPACE@7..8 " " + ASSIGN@8..9 "=" + WHITESPACE@9..10 "\n" + EXPR@10..24 + STMT_LOCAL@10..22 + LOCAL_KW@10..15 "local" + WHITESPACE@15..16 " " + BIND_DESTRUCT@16..21 + DESTRUCT_FULL@16..17 + NAME@16..17 + IDENT@16..17 "b" + WHITESPACE@17..18 " " + ASSIGN@18..19 "=" + WHITESPACE@19..20 " " + EXPR@20..21 + EXPR_NUMBER@20..21 + FLOAT@20..21 "3" + SEMI@21..22 ";" + WHITESPACE@22..23 "\n" + EXPR_NUMBER@23..24 + FLOAT@23..24 "1" + WHITESPACE@24..25 "\n" + ERROR_MISSING_TOKEN@25..25 ERROR_MISSING_TOKEN@25..25 - ERROR_MISSING_TOKEN@25..25 === -LocatedSyntaxError { error: Missing { expected: Unnamed(SyntaxKindSet([L_BRACK, L_PAREN, L_BRACE, SEMI, DOT, COMMA])) }, range: 25..25 } +LocatedSyntaxError { error: Missing { expected: Unnamed(SyntaxKindSet([L_BRACK, L_PAREN, L_BRACE, SEMI, DOT, COMMA, QUESTION_MARK])) }, range: 25..25 } LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 25..25 } === x syntax error @@ -42,5 +45,5 @@ 3 | 1 : ^^ : |`-- missing expression - : `-- missing L_BRACK, L_PAREN, L_BRACE, SEMI, DOT or COMMA + : `-- missing L_BRACK, L_PAREN, L_BRACE, SEMI, DOT, COMMA or QUESTION_MARK `---- --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_novalue.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_novalue.snap @@ -3,19 +3,21 @@ expression: "local a =\n" --- SOURCE_FILE@0..10 - STMT_LOCAL@0..10 - LOCAL_KW@0..5 "local" - WHITESPACE@5..6 " " - BIND_DESTRUCT@6..10 - DESTRUCT_FULL@6..7 - NAME@6..7 - IDENT@6..7 "a" - WHITESPACE@7..8 " " - ASSIGN@8..9 "=" - WHITESPACE@9..10 "\n" + EXPR@0..10 + STMT_LOCAL@0..10 + LOCAL_KW@0..5 "local" + WHITESPACE@5..6 " " + BIND_DESTRUCT@6..10 + DESTRUCT_FULL@6..7 + NAME@6..7 + IDENT@6..7 "a" + WHITESPACE@7..8 " " + ASSIGN@8..9 "=" + WHITESPACE@9..10 "\n" + EXPR@10..10 + ERROR_MISSING_TOKEN@10..10 ERROR_MISSING_TOKEN@10..10 ERROR_MISSING_TOKEN@10..10 - ERROR_MISSING_TOKEN@10..10 === LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 10..10 } LocatedSyntaxError { error: Missing { expected: Unnamed(SyntaxKindSet([SEMI, COMMA])) }, range: 10..10 } --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__named_before_positional.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__named_before_positional.snap @@ -3,57 +3,65 @@ expression: "a(1, 2, b=4, 3, 5, k = 12, 6)\n" --- SOURCE_FILE@0..30 - EXPR_APPLY@0..29 + EXPR@0..29 EXPR_VAR@0..1 NAME@0..1 IDENT@0..1 "a" - ARGS_DESC@1..29 - L_PAREN@1..2 "(" - ARG@2..3 - EXPR_NUMBER@2..3 - FLOAT@2..3 "1" - COMMA@3..4 "," - WHITESPACE@4..5 " " - ARG@5..6 - EXPR_NUMBER@5..6 - FLOAT@5..6 "2" - COMMA@6..7 "," - WHITESPACE@7..8 " " - ARG@8..11 - NAME@8..9 - IDENT@8..9 "b" - ASSIGN@9..10 "=" - EXPR_NUMBER@10..11 - FLOAT@10..11 "4" - COMMA@11..12 "," - WHITESPACE@12..13 " " - ERROR_CUSTOM@13..14 - ARG@13..14 - EXPR_NUMBER@13..14 - FLOAT@13..14 "3" - COMMA@14..15 "," - WHITESPACE@15..16 " " - ERROR_CUSTOM@16..17 - ARG@16..17 - EXPR_NUMBER@16..17 - FLOAT@16..17 "5" - COMMA@17..18 "," - WHITESPACE@18..19 " " - ARG@19..25 - NAME@19..20 - IDENT@19..20 "k" - WHITESPACE@20..21 " " - ASSIGN@21..22 "=" - WHITESPACE@22..23 " " - EXPR_NUMBER@23..25 - FLOAT@23..25 "12" - COMMA@25..26 "," - WHITESPACE@26..27 " " - ERROR_CUSTOM@27..28 - ARG@27..28 - EXPR_NUMBER@27..28 - FLOAT@27..28 "6" - R_PAREN@28..29 ")" + SUFFIX_APPLY@1..29 + ARGS_DESC@1..29 + L_PAREN@1..2 "(" + ARG@2..3 + EXPR@2..3 + EXPR_NUMBER@2..3 + FLOAT@2..3 "1" + COMMA@3..4 "," + WHITESPACE@4..5 " " + ARG@5..6 + EXPR@5..6 + EXPR_NUMBER@5..6 + FLOAT@5..6 "2" + COMMA@6..7 "," + WHITESPACE@7..8 " " + ARG@8..11 + NAME@8..9 + IDENT@8..9 "b" + ASSIGN@9..10 "=" + EXPR@10..11 + EXPR_NUMBER@10..11 + FLOAT@10..11 "4" + COMMA@11..12 "," + WHITESPACE@12..13 " " + ERROR_CUSTOM@13..14 + ARG@13..14 + EXPR@13..14 + EXPR_NUMBER@13..14 + FLOAT@13..14 "3" + COMMA@14..15 "," + WHITESPACE@15..16 " " + ERROR_CUSTOM@16..17 + ARG@16..17 + EXPR@16..17 + EXPR_NUMBER@16..17 + FLOAT@16..17 "5" + COMMA@17..18 "," + WHITESPACE@18..19 " " + ARG@19..25 + NAME@19..20 + IDENT@19..20 "k" + WHITESPACE@20..21 " " + ASSIGN@21..22 "=" + WHITESPACE@22..23 " " + EXPR@23..25 + EXPR_NUMBER@23..25 + FLOAT@23..25 "12" + COMMA@25..26 "," + WHITESPACE@26..27 " " + ERROR_CUSTOM@27..28 + ARG@27..28 + EXPR@27..28 + EXPR_NUMBER@27..28 + FLOAT@27..28 "6" + R_PAREN@28..29 ")" WHITESPACE@29..30 "\n" === LocatedSyntaxError { error: Custom { error: "can't use positional arguments after named" }, range: 13..14 } --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_lhs.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_lhs.snap @@ -3,7 +3,8 @@ expression: "+ 2\n" --- SOURCE_FILE@0..4 - ERROR_MISSING_TOKEN@0..0 + EXPR@0..0 + ERROR_MISSING_TOKEN@0..0 ERROR_CUSTOM@0..3 PLUS@0..1 "+" WHITESPACE@1..2 " " --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_operator.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_operator.snap @@ -3,8 +3,9 @@ expression: "2 2\n" --- SOURCE_FILE@0..4 - EXPR_NUMBER@0..1 - FLOAT@0..1 "2" + EXPR@0..1 + EXPR_NUMBER@0..1 + FLOAT@0..1 "2" WHITESPACE@1..2 " " ERROR_CUSTOM@2..3 FLOAT@2..3 "2" --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_rhs.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_rhs.snap @@ -3,15 +3,16 @@ expression: "a +\n" --- SOURCE_FILE@0..4 - EXPR_BINARY@0..4 - LHS_EXPR@0..1 - EXPR_VAR@0..1 - NAME@0..1 - IDENT@0..1 "a" - WHITESPACE@1..2 " " - PLUS@2..3 "+" - WHITESPACE@3..4 "\n" - ERROR_MISSING_TOKEN@4..4 + EXPR@0..4 + EXPR_BINARY@0..4 + EXPR@0..1 + EXPR_VAR@0..1 + NAME@0..1 + IDENT@0..1 "a" + WHITESPACE@1..2 " " + PLUS@2..3 "+" + WHITESPACE@3..4 "\n" + ERROR_MISSING_TOKEN@4..4 === LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 4..4 } === --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec.snap @@ -3,37 +3,44 @@ expression: "{a:1 for a in [1, 2, 3]}\n" --- SOURCE_FILE@0..25 - EXPR_OBJECT@0..24 - OBJ_BODY_COMP@0..24 - L_BRACE@0..1 "{" - MEMBER_FIELD_NORMAL@1..4 - FIELD_NAME_FIXED@1..2 - NAME@1..2 - IDENT@1..2 "a" - COLON@2..3 ":" - EXPR_NUMBER@3..4 - FLOAT@3..4 "1" - WHITESPACE@4..5 " " - FOR_SPEC@5..23 - FOR_KW@5..8 "for" - WHITESPACE@8..9 " " - NAME@9..10 - IDENT@9..10 "a" - WHITESPACE@10..11 " " - IN_KW@11..13 "in" - WHITESPACE@13..14 " " - EXPR_ARRAY@14..23 - L_BRACK@14..15 "[" - EXPR_NUMBER@15..16 - FLOAT@15..16 "1" - COMMA@16..17 "," - WHITESPACE@17..18 " " - EXPR_NUMBER@18..19 - FLOAT@18..19 "2" - COMMA@19..20 "," - WHITESPACE@20..21 " " - EXPR_NUMBER@21..22 - FLOAT@21..22 "3" - R_BRACK@22..23 "]" - R_BRACE@23..24 "}" + EXPR@0..24 + EXPR_OBJECT@0..24 + OBJ_BODY_COMP@0..24 + L_BRACE@0..1 "{" + MEMBER_FIELD_NORMAL@1..4 + FIELD_NAME_FIXED@1..2 + NAME@1..2 + IDENT@1..2 "a" + COLON@2..3 ":" + EXPR@3..4 + EXPR_NUMBER@3..4 + FLOAT@3..4 "1" + WHITESPACE@4..5 " " + FOR_SPEC@5..23 + FOR_KW@5..8 "for" + WHITESPACE@8..9 " " + DESTRUCT_FULL@9..10 + NAME@9..10 + IDENT@9..10 "a" + WHITESPACE@10..11 " " + IN_KW@11..13 "in" + WHITESPACE@13..14 " " + EXPR@14..23 + EXPR_ARRAY@14..23 + L_BRACK@14..15 "[" + EXPR@15..16 + EXPR_NUMBER@15..16 + FLOAT@15..16 "1" + COMMA@16..17 "," + WHITESPACE@17..18 " " + EXPR@18..19 + EXPR_NUMBER@18..19 + FLOAT@18..19 "2" + COMMA@19..20 "," + WHITESPACE@20..21 " " + EXPR@21..22 + EXPR_NUMBER@21..22 + FLOAT@21..22 "3" + R_BRACK@22..23 "]" + R_BRACE@23..24 "}" WHITESPACE@24..25 "\n" --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_comma.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_comma.snap @@ -3,38 +3,45 @@ expression: "{a:1, for a in [1, 2, 3]}\n" --- SOURCE_FILE@0..26 - EXPR_OBJECT@0..25 - OBJ_BODY_COMP@0..25 - L_BRACE@0..1 "{" - MEMBER_FIELD_NORMAL@1..4 - FIELD_NAME_FIXED@1..2 - NAME@1..2 - IDENT@1..2 "a" - COLON@2..3 ":" - EXPR_NUMBER@3..4 - FLOAT@3..4 "1" - COMMA@4..5 "," - WHITESPACE@5..6 " " - FOR_SPEC@6..24 - FOR_KW@6..9 "for" - WHITESPACE@9..10 " " - NAME@10..11 - IDENT@10..11 "a" - WHITESPACE@11..12 " " - IN_KW@12..14 "in" - WHITESPACE@14..15 " " - EXPR_ARRAY@15..24 - L_BRACK@15..16 "[" - EXPR_NUMBER@16..17 - FLOAT@16..17 "1" - COMMA@17..18 "," - WHITESPACE@18..19 " " - EXPR_NUMBER@19..20 - FLOAT@19..20 "2" - COMMA@20..21 "," - WHITESPACE@21..22 " " - EXPR_NUMBER@22..23 - FLOAT@22..23 "3" - R_BRACK@23..24 "]" - R_BRACE@24..25 "}" + EXPR@0..25 + EXPR_OBJECT@0..25 + OBJ_BODY_COMP@0..25 + L_BRACE@0..1 "{" + MEMBER_FIELD_NORMAL@1..4 + FIELD_NAME_FIXED@1..2 + NAME@1..2 + IDENT@1..2 "a" + COLON@2..3 ":" + EXPR@3..4 + EXPR_NUMBER@3..4 + FLOAT@3..4 "1" + COMMA@4..5 "," + WHITESPACE@5..6 " " + FOR_SPEC@6..24 + FOR_KW@6..9 "for" + WHITESPACE@9..10 " " + DESTRUCT_FULL@10..11 + NAME@10..11 + IDENT@10..11 "a" + WHITESPACE@11..12 " " + IN_KW@12..14 "in" + WHITESPACE@14..15 " " + EXPR@15..24 + EXPR_ARRAY@15..24 + L_BRACK@15..16 "[" + EXPR@16..17 + EXPR_NUMBER@16..17 + FLOAT@16..17 "1" + COMMA@17..18 "," + WHITESPACE@18..19 " " + EXPR@19..20 + EXPR_NUMBER@19..20 + FLOAT@19..20 "2" + COMMA@20..21 "," + WHITESPACE@21..22 " " + EXPR@22..23 + EXPR_NUMBER@22..23 + FLOAT@22..23 "3" + R_BRACK@23..24 "]" + R_BRACE@24..25 "}" WHITESPACE@25..26 "\n" --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_asserts.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_asserts.snap @@ -3,48 +3,55 @@ expression: "{assert 1, a: 1 for a in [1,2,3]}\n" --- SOURCE_FILE@0..34 - EXPR_OBJECT@0..33 - OBJ_BODY_COMP@0..33 - L_BRACE@0..1 "{" - ERROR_CUSTOM@1..9 - MEMBER_ASSERT_STMT@1..9 - ASSERTION@1..9 - ASSERT_KW@1..7 "assert" - WHITESPACE@7..8 " " - LHS_EXPR@8..9 - EXPR_NUMBER@8..9 - FLOAT@8..9 "1" - COMMA@9..10 "," - WHITESPACE@10..11 " " - MEMBER_FIELD_NORMAL@11..15 - FIELD_NAME_FIXED@11..12 - NAME@11..12 - IDENT@11..12 "a" - COLON@12..13 ":" - WHITESPACE@13..14 " " - EXPR_NUMBER@14..15 - FLOAT@14..15 "1" - WHITESPACE@15..16 " " - FOR_SPEC@16..32 - FOR_KW@16..19 "for" - WHITESPACE@19..20 " " - NAME@20..21 - IDENT@20..21 "a" - WHITESPACE@21..22 " " - IN_KW@22..24 "in" - WHITESPACE@24..25 " " - EXPR_ARRAY@25..32 - L_BRACK@25..26 "[" - EXPR_NUMBER@26..27 - FLOAT@26..27 "1" - COMMA@27..28 "," - EXPR_NUMBER@28..29 - FLOAT@28..29 "2" - COMMA@29..30 "," - EXPR_NUMBER@30..31 - FLOAT@30..31 "3" - R_BRACK@31..32 "]" - R_BRACE@32..33 "}" + EXPR@0..33 + EXPR_OBJECT@0..33 + OBJ_BODY_COMP@0..33 + L_BRACE@0..1 "{" + ERROR_CUSTOM@1..9 + MEMBER_ASSERT_STMT@1..9 + ASSERTION@1..9 + ASSERT_KW@1..7 "assert" + WHITESPACE@7..8 " " + EXPR@8..9 + EXPR_NUMBER@8..9 + FLOAT@8..9 "1" + COMMA@9..10 "," + WHITESPACE@10..11 " " + MEMBER_FIELD_NORMAL@11..15 + FIELD_NAME_FIXED@11..12 + NAME@11..12 + IDENT@11..12 "a" + COLON@12..13 ":" + WHITESPACE@13..14 " " + EXPR@14..15 + EXPR_NUMBER@14..15 + FLOAT@14..15 "1" + WHITESPACE@15..16 " " + FOR_SPEC@16..32 + FOR_KW@16..19 "for" + WHITESPACE@19..20 " " + DESTRUCT_FULL@20..21 + NAME@20..21 + IDENT@20..21 "a" + WHITESPACE@21..22 " " + IN_KW@22..24 "in" + WHITESPACE@24..25 " " + EXPR@25..32 + EXPR_ARRAY@25..32 + L_BRACK@25..26 "[" + EXPR@26..27 + EXPR_NUMBER@26..27 + FLOAT@26..27 "1" + COMMA@27..28 "," + EXPR@28..29 + EXPR_NUMBER@28..29 + FLOAT@28..29 "2" + COMMA@29..30 "," + EXPR@30..31 + EXPR_NUMBER@30..31 + FLOAT@30..31 "3" + R_BRACK@31..32 "]" + R_BRACE@32..33 "}" WHITESPACE@33..34 "\n" === LocatedSyntaxError { error: Custom { error: "asserts can't be used in object comprehensions" }, range: 1..9 } --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_multiple_elems.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_multiple_elems.snap @@ -3,56 +3,64 @@ expression: "{a:1 for a in [1, 2, 3], b:1}\n" --- SOURCE_FILE@0..30 - EXPR_OBJECT@0..29 - OBJ_BODY_MEMBER_LIST@0..29 - L_BRACE@0..1 "{" - MEMBER_FIELD_NORMAL@1..4 - FIELD_NAME_FIXED@1..2 - NAME@1..2 - IDENT@1..2 "a" - COLON@2..3 ":" - EXPR_NUMBER@3..4 - FLOAT@3..4 "1" - WHITESPACE@4..5 " " - ERROR_CUSTOM@5..23 - FOR_SPEC@5..23 - FOR_KW@5..8 "for" - WHITESPACE@8..9 " " - NAME@9..10 - IDENT@9..10 "a" - WHITESPACE@10..11 " " - IN_KW@11..13 "in" - WHITESPACE@13..14 " " - EXPR_ARRAY@14..23 - L_BRACK@14..15 "[" - EXPR_NUMBER@15..16 - FLOAT@15..16 "1" - COMMA@16..17 "," - WHITESPACE@17..18 " " - EXPR_NUMBER@18..19 - FLOAT@18..19 "2" - COMMA@19..20 "," - WHITESPACE@20..21 " " - EXPR_NUMBER@21..22 - FLOAT@21..22 "3" - R_BRACK@22..23 "]" - COMMA@23..24 "," - WHITESPACE@24..25 " " - MEMBER_FIELD_NORMAL@25..28 - FIELD_NAME_FIXED@25..26 - NAME@25..26 - IDENT@25..26 "b" - COLON@26..27 ":" - EXPR_NUMBER@27..28 - FLOAT@27..28 "1" - R_BRACE@28..29 "}" + EXPR@0..29 + EXPR_OBJECT@0..29 + OBJ_BODY_MEMBER_LIST@0..29 + L_BRACE@0..1 "{" + MEMBER_FIELD_NORMAL@1..4 + FIELD_NAME_FIXED@1..2 + NAME@1..2 + IDENT@1..2 "a" + COLON@2..3 ":" + EXPR@3..4 + EXPR_NUMBER@3..4 + FLOAT@3..4 "1" + WHITESPACE@4..5 " " + ERROR_CUSTOM@5..23 + FOR_SPEC@5..23 + FOR_KW@5..8 "for" + WHITESPACE@8..9 " " + DESTRUCT_FULL@9..10 + NAME@9..10 + IDENT@9..10 "a" + WHITESPACE@10..11 " " + IN_KW@11..13 "in" + WHITESPACE@13..14 " " + EXPR@14..23 + EXPR_ARRAY@14..23 + L_BRACK@14..15 "[" + EXPR@15..16 + EXPR_NUMBER@15..16 + FLOAT@15..16 "1" + COMMA@16..17 "," + WHITESPACE@17..18 " " + EXPR@18..19 + EXPR_NUMBER@18..19 + FLOAT@18..19 "2" + COMMA@19..20 "," + WHITESPACE@20..21 " " + EXPR@21..22 + EXPR_NUMBER@21..22 + FLOAT@21..22 "3" + R_BRACK@22..23 "]" + COMMA@23..24 "," + WHITESPACE@24..25 " " + MEMBER_FIELD_NORMAL@25..28 + FIELD_NAME_FIXED@25..26 + NAME@25..26 + IDENT@25..26 "b" + COLON@26..27 ":" + EXPR@27..28 + EXPR_NUMBER@27..28 + FLOAT@27..28 "1" + R_BRACE@28..29 "}" WHITESPACE@29..30 "\n" === -LocatedSyntaxError { error: Custom { error: "compspec may only be used if there is only one array element" }, range: 5..23 } +LocatedSyntaxError { error: Custom { error: "compspec may only be used if there is only one object element" }, range: 5..23 } === x syntax error ,---- 1 | {a:1 for a in [1, 2, 3], b:1} : ^^^^^^^^^|^^^^^^^^ - : `-- compspec may only be used if there is only one array element + : `-- compspec may only be used if there is only one object element `---- --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_multiple_elems_w.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_multiple_elems_w.snap @@ -3,66 +3,75 @@ expression: "{a:1, b:1, for a in [1, 2, 3], c:1}\n" --- SOURCE_FILE@0..36 - EXPR_OBJECT@0..35 - OBJ_BODY_MEMBER_LIST@0..35 - L_BRACE@0..1 "{" - MEMBER_FIELD_NORMAL@1..4 - FIELD_NAME_FIXED@1..2 - NAME@1..2 - IDENT@1..2 "a" - COLON@2..3 ":" - EXPR_NUMBER@3..4 - FLOAT@3..4 "1" - COMMA@4..5 "," - WHITESPACE@5..6 " " - MEMBER_FIELD_NORMAL@6..9 - FIELD_NAME_FIXED@6..7 - NAME@6..7 - IDENT@6..7 "b" - COLON@7..8 ":" - EXPR_NUMBER@8..9 - FLOAT@8..9 "1" - COMMA@9..10 "," - WHITESPACE@10..11 " " - ERROR_CUSTOM@11..29 - FOR_SPEC@11..29 - FOR_KW@11..14 "for" - WHITESPACE@14..15 " " - NAME@15..16 - IDENT@15..16 "a" - WHITESPACE@16..17 " " - IN_KW@17..19 "in" - WHITESPACE@19..20 " " - EXPR_ARRAY@20..29 - L_BRACK@20..21 "[" - EXPR_NUMBER@21..22 - FLOAT@21..22 "1" - COMMA@22..23 "," - WHITESPACE@23..24 " " - EXPR_NUMBER@24..25 - FLOAT@24..25 "2" - COMMA@25..26 "," - WHITESPACE@26..27 " " - EXPR_NUMBER@27..28 - FLOAT@27..28 "3" - R_BRACK@28..29 "]" - COMMA@29..30 "," - WHITESPACE@30..31 " " - MEMBER_FIELD_NORMAL@31..34 - FIELD_NAME_FIXED@31..32 - NAME@31..32 - IDENT@31..32 "c" - COLON@32..33 ":" - EXPR_NUMBER@33..34 - FLOAT@33..34 "1" - R_BRACE@34..35 "}" + EXPR@0..35 + EXPR_OBJECT@0..35 + OBJ_BODY_MEMBER_LIST@0..35 + L_BRACE@0..1 "{" + MEMBER_FIELD_NORMAL@1..4 + FIELD_NAME_FIXED@1..2 + NAME@1..2 + IDENT@1..2 "a" + COLON@2..3 ":" + EXPR@3..4 + EXPR_NUMBER@3..4 + FLOAT@3..4 "1" + COMMA@4..5 "," + WHITESPACE@5..6 " " + MEMBER_FIELD_NORMAL@6..9 + FIELD_NAME_FIXED@6..7 + NAME@6..7 + IDENT@6..7 "b" + COLON@7..8 ":" + EXPR@8..9 + EXPR_NUMBER@8..9 + FLOAT@8..9 "1" + COMMA@9..10 "," + WHITESPACE@10..11 " " + ERROR_CUSTOM@11..29 + FOR_SPEC@11..29 + FOR_KW@11..14 "for" + WHITESPACE@14..15 " " + DESTRUCT_FULL@15..16 + NAME@15..16 + IDENT@15..16 "a" + WHITESPACE@16..17 " " + IN_KW@17..19 "in" + WHITESPACE@19..20 " " + EXPR@20..29 + EXPR_ARRAY@20..29 + L_BRACK@20..21 "[" + EXPR@21..22 + EXPR_NUMBER@21..22 + FLOAT@21..22 "1" + COMMA@22..23 "," + WHITESPACE@23..24 " " + EXPR@24..25 + EXPR_NUMBER@24..25 + FLOAT@24..25 "2" + COMMA@25..26 "," + WHITESPACE@26..27 " " + EXPR@27..28 + EXPR_NUMBER@27..28 + FLOAT@27..28 "3" + R_BRACK@28..29 "]" + COMMA@29..30 "," + WHITESPACE@30..31 " " + MEMBER_FIELD_NORMAL@31..34 + FIELD_NAME_FIXED@31..32 + NAME@31..32 + IDENT@31..32 "c" + COLON@32..33 ":" + EXPR@33..34 + EXPR_NUMBER@33..34 + FLOAT@33..34 "1" + R_BRACE@34..35 "}" WHITESPACE@35..36 "\n" === -LocatedSyntaxError { error: Custom { error: "compspec may only be used if there is only one array element" }, range: 11..29 } +LocatedSyntaxError { error: Custom { error: "compspec may only be used if there is only one object element" }, range: 11..29 } === x syntax error ,---- 1 | {a:1, b:1, for a in [1, 2, 3], c:1} : ^^^^^^^^^|^^^^^^^^ - : `-- compspec may only be used if there is only one array element + : `-- compspec may only be used if there is only one object element `---- --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_no_elems.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_no_elems.snap @@ -3,32 +3,38 @@ expression: "{for a in [1, 2, 3]}\n" --- SOURCE_FILE@0..21 - EXPR_OBJECT@0..20 - OBJ_BODY_COMP@0..20 - L_BRACE@0..1 "{" - ERROR_MISSING_TOKEN@1..1 - FOR_SPEC@1..19 - FOR_KW@1..4 "for" - WHITESPACE@4..5 " " - NAME@5..6 - IDENT@5..6 "a" - WHITESPACE@6..7 " " - IN_KW@7..9 "in" - WHITESPACE@9..10 " " - EXPR_ARRAY@10..19 - L_BRACK@10..11 "[" - EXPR_NUMBER@11..12 - FLOAT@11..12 "1" - COMMA@12..13 "," - WHITESPACE@13..14 " " - EXPR_NUMBER@14..15 - FLOAT@14..15 "2" - COMMA@15..16 "," - WHITESPACE@16..17 " " - EXPR_NUMBER@17..18 - FLOAT@17..18 "3" - R_BRACK@18..19 "]" - R_BRACE@19..20 "}" + EXPR@0..20 + EXPR_OBJECT@0..20 + OBJ_BODY_COMP@0..20 + L_BRACE@0..1 "{" + ERROR_MISSING_TOKEN@1..1 + FOR_SPEC@1..19 + FOR_KW@1..4 "for" + WHITESPACE@4..5 " " + DESTRUCT_FULL@5..6 + NAME@5..6 + IDENT@5..6 "a" + WHITESPACE@6..7 " " + IN_KW@7..9 "in" + WHITESPACE@9..10 " " + EXPR@10..19 + EXPR_ARRAY@10..19 + L_BRACK@10..11 "[" + EXPR@11..12 + EXPR_NUMBER@11..12 + FLOAT@11..12 "1" + COMMA@12..13 "," + WHITESPACE@13..14 " " + EXPR@14..15 + EXPR_NUMBER@14..15 + FLOAT@14..15 "2" + COMMA@15..16 "," + WHITESPACE@16..17 " " + EXPR@17..18 + EXPR_NUMBER@17..18 + FLOAT@17..18 "3" + R_BRACK@18..19 "]" + R_BRACE@19..20 "}" WHITESPACE@20..21 "\n" === LocatedSyntaxError { error: Missing { expected: Named("field definition") }, range: 1..1 } --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_method.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_method.snap @@ -3,47 +3,50 @@ expression: "{\n\ta(x): x,\n\ta: function(x) x,\n}\n" --- SOURCE_FILE@0..33 - EXPR_OBJECT@0..32 - OBJ_BODY_MEMBER_LIST@0..32 - L_BRACE@0..1 "{" - WHITESPACE@1..3 "\n\t" - MEMBER_FIELD_METHOD@3..10 - FIELD_NAME_FIXED@3..4 - NAME@3..4 - IDENT@3..4 "a" - PARAMS_DESC@4..7 - L_PAREN@4..5 "(" - PARAM@5..6 - DESTRUCT_FULL@5..6 - NAME@5..6 - IDENT@5..6 "x" - R_PAREN@6..7 ")" - COLON@7..8 ":" - WHITESPACE@8..9 " " - EXPR_VAR@9..10 - NAME@9..10 - IDENT@9..10 "x" - COMMA@10..11 "," - WHITESPACE@11..13 "\n\t" - MEMBER_FIELD_METHOD@13..29 - FIELD_NAME_FIXED@13..14 - NAME@13..14 - IDENT@13..14 "a" - COLON@14..15 ":" - WHITESPACE@15..16 " " - FUNCTION_KW@16..24 "function" - PARAMS_DESC@24..27 - L_PAREN@24..25 "(" - PARAM@25..26 - DESTRUCT_FULL@25..26 - NAME@25..26 - IDENT@25..26 "x" - R_PAREN@26..27 ")" - WHITESPACE@27..28 " " - EXPR_VAR@28..29 - NAME@28..29 - IDENT@28..29 "x" - COMMA@29..30 "," - WHITESPACE@30..31 "\n" - R_BRACE@31..32 "}" + EXPR@0..32 + EXPR_OBJECT@0..32 + OBJ_BODY_MEMBER_LIST@0..32 + L_BRACE@0..1 "{" + WHITESPACE@1..3 "\n\t" + MEMBER_FIELD_METHOD@3..10 + FIELD_NAME_FIXED@3..4 + NAME@3..4 + IDENT@3..4 "a" + PARAMS_DESC@4..7 + L_PAREN@4..5 "(" + PARAM@5..6 + DESTRUCT_FULL@5..6 + NAME@5..6 + IDENT@5..6 "x" + R_PAREN@6..7 ")" + COLON@7..8 ":" + WHITESPACE@8..9 " " + EXPR@9..10 + EXPR_VAR@9..10 + NAME@9..10 + IDENT@9..10 "x" + COMMA@10..11 "," + WHITESPACE@11..13 "\n\t" + MEMBER_FIELD_METHOD@13..29 + FIELD_NAME_FIXED@13..14 + NAME@13..14 + IDENT@13..14 "a" + COLON@14..15 ":" + WHITESPACE@15..16 " " + FUNCTION_KW@16..24 "function" + PARAMS_DESC@24..27 + L_PAREN@24..25 "(" + PARAM@25..26 + DESTRUCT_FULL@25..26 + NAME@25..26 + IDENT@25..26 "x" + R_PAREN@26..27 ")" + WHITESPACE@27..28 " " + EXPR@28..29 + EXPR_VAR@28..29 + NAME@28..29 + IDENT@28..29 "x" + COMMA@29..30 "," + WHITESPACE@30..31 "\n" + R_BRACE@31..32 "}" WHITESPACE@32..33 "\n" --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__plain_call.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__plain_call.snap @@ -3,51 +3,56 @@ expression: "std.substr(a, 0, std.length(b)) == b\n" --- SOURCE_FILE@0..37 - EXPR_BINARY@0..36 - LHS_EXPR@0..31 - EXPR_APPLY@0..31 - EXPR_INDEX@0..10 - EXPR_VAR@0..3 - NAME@0..3 - IDENT@0..3 "std" - DOT@3..4 "." - NAME@4..10 - IDENT@4..10 "substr" + EXPR@0..36 + EXPR_BINARY@0..36 + EXPR@0..3 + EXPR_VAR@0..3 + NAME@0..3 + IDENT@0..3 "std" + SUFFIX_INDEX@3..10 + DOT@3..4 "." + NAME@4..10 + IDENT@4..10 "substr" + SUFFIX_APPLY@10..31 ARGS_DESC@10..31 L_PAREN@10..11 "(" ARG@11..12 - EXPR_VAR@11..12 - NAME@11..12 - IDENT@11..12 "a" + EXPR@11..12 + EXPR_VAR@11..12 + NAME@11..12 + IDENT@11..12 "a" COMMA@12..13 "," WHITESPACE@13..14 " " ARG@14..15 - EXPR_NUMBER@14..15 - FLOAT@14..15 "0" + EXPR@14..15 + EXPR_NUMBER@14..15 + FLOAT@14..15 "0" COMMA@15..16 "," WHITESPACE@16..17 " " ARG@17..30 - EXPR_APPLY@17..30 - EXPR_INDEX@17..27 - EXPR_VAR@17..20 - NAME@17..20 - IDENT@17..20 "std" + EXPR@17..30 + EXPR_VAR@17..20 + NAME@17..20 + IDENT@17..20 "std" + SUFFIX_INDEX@20..27 DOT@20..21 "." NAME@21..27 IDENT@21..27 "length" - ARGS_DESC@27..30 - L_PAREN@27..28 "(" - ARG@28..29 - EXPR_VAR@28..29 - NAME@28..29 - IDENT@28..29 "b" - R_PAREN@29..30 ")" + SUFFIX_APPLY@27..30 + ARGS_DESC@27..30 + L_PAREN@27..28 "(" + ARG@28..29 + EXPR@28..29 + EXPR_VAR@28..29 + NAME@28..29 + IDENT@28..29 "b" + R_PAREN@29..30 ")" R_PAREN@30..31 ")" - WHITESPACE@31..32 " " - EQ@32..34 "==" - WHITESPACE@34..35 " " - EXPR_VAR@35..36 - NAME@35..36 - IDENT@35..36 "b" + WHITESPACE@31..32 " " + EQ@32..34 "==" + WHITESPACE@34..35 " " + EXPR@35..36 + EXPR_VAR@35..36 + NAME@35..36 + IDENT@35..36 "b" WHITESPACE@36..37 "\n" - --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__stdlib.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__stdlib.snap @@ -1,6750 +1,5686 @@ --- source: crates/jrsonnet-rowan-parser/src/tests.rs -expression: "{\n local std = self,\n local id = std.id,\n\n thisFile:: error 'std.thisFile is deprecated, to enable its support in jrsonnet - recompile it with \"legacy-this-file\" support.\\nThis will slow down stdlib caching a bit, though',\n\n toString(a):: '' + a,\n\n lstripChars(str, chars)::\n if std.length(str) > 0 && std.member(chars, str[0]) then\n std.lstripChars(str[1:], chars)\n else\n str,\n\n rstripChars(str, chars)::\n local len = std.length(str);\n if len > 0 && std.member(chars, str[len - 1]) then\n std.rstripChars(str[:len - 1], chars)\n else\n str,\n\n stripChars(str, chars)::\n std.lstripChars(std.rstripChars(str, chars), chars),\n\n stringChars(str)::\n std.makeArray(std.length(str), function(i) str[i]),\n\n splitLimitR(str, c, maxsplits)::\n if maxsplits == -1 then\n std.splitLimit(str, c, -1)\n else\n local revStr(str) = std.join('', std.reverse(std.stringChars(str)));\n std.map(function(e) revStr(e), std.reverse(std.splitLimit(revStr(str), revStr(c), maxsplits))),\n\n split(str, c):: std.splitLimit(str, c, -1),\n\n mapWithIndex(func, arr)::\n if !std.isFunction(func) then\n error ('std.mapWithIndex first param must be function, got ' + std.type(func))\n else if !std.isArray(arr) && !std.isString(arr) then\n error ('std.mapWithIndex second param must be array, got ' + std.type(arr))\n else\n std.makeArray(std.length(arr), function(i) func(i, arr[i])),\n\n mapWithKey(func, obj)::\n if !std.isFunction(func) then\n error ('std.mapWithKey first param must be function, got ' + std.type(func))\n else if !std.isObject(obj) then\n error ('std.mapWithKey second param must be object, got ' + std.type(obj))\n else\n { [k]: func(k, obj[k]) for k in std.objectFields(obj) },\n\n lines(arr)::\n std.join('\\n', arr + ['']),\n\n deepJoin(arr)::\n if std.isString(arr) then\n arr\n else if std.isArray(arr) then\n std.join('', [std.deepJoin(x) for x in arr])\n else\n error 'Expected string or array, got %s' % std.type(arr),\n\n filterMap(filter_func, map_func, arr)::\n if !std.isFunction(filter_func) then\n error ('std.filterMap first param must be function, got ' + std.type(filter_func))\n else if !std.isFunction(map_func) then\n error ('std.filterMap second param must be function, got ' + std.type(map_func))\n else if !std.isArray(arr) then\n error ('std.filterMap third param must be array, got ' + std.type(arr))\n else\n std.map(map_func, std.filter(filter_func, arr)),\n\n assertEqual(a, b)::\n if a == b then\n true\n else\n error 'Assertion failed. ' + a + ' != ' + b,\n\n clamp(x, minVal, maxVal)::\n if x < minVal then minVal\n else if x > maxVal then maxVal\n else x,\n\n flattenArrays(arrs)::\n std.foldl(function(a, b) a + b, arrs, []),\n\n manifestIni(ini)::\n local body_lines(body) =\n std.join([], [\n local value_or_values = body[k];\n if std.isArray(value_or_values) then\n ['%s = %s' % [k, value] for value in value_or_values]\n else\n ['%s = %s' % [k, value_or_values]]\n\n for k in std.objectFields(body)\n ]);\n\n local section_lines(sname, sbody) = ['[%s]' % [sname]] + body_lines(sbody),\n main_body = if std.objectHas(ini, 'main') then body_lines(ini.main) else [],\n all_sections = [\n section_lines(k, ini.sections[k])\n for k in std.objectFields(ini.sections)\n ];\n std.join('\\n', main_body + std.flattenArrays(all_sections) + ['']),\n\n manifestToml(value):: std.manifestTomlEx(value, ' '),\n\n escapeStringPython(str)::\n std.escapeStringJson(str),\n\n escapeStringBash(str_)::\n local str = std.toString(str_);\n local trans(ch) =\n if ch == \"'\" then\n \"'\\\"'\\\"'\"\n else\n ch;\n \"'%s'\" % std.join('', [trans(ch) for ch in std.stringChars(str)]),\n\n escapeStringDollars(str_)::\n local str = std.toString(str_);\n local trans(ch) =\n if ch == '$' then\n '$$'\n else\n ch;\n std.foldl(function(a, b) a + trans(b), std.stringChars(str), ''),\n\n local xml_escapes = {\n '<': '<',\n '>': '>',\n '&': '&',\n '\"': '"',\n \"'\": ''',\n },\n\n escapeStringXML(str_)::\n local str = std.toString(str_);\n std.join('', [std.get(xml_escapes, ch, ch) for ch in std.stringChars(str)]),\n\n manifestJson(value):: std.manifestJsonEx(value, ' ') tailstrict,\n\n manifestJsonMinified(value):: std.manifestJsonEx(value, '', '', ':'),\n\n manifestYamlStream(value, indent_array_in_object=false, c_document_end=true, quote_keys=true)::\n if !std.isArray(value) then\n error 'manifestYamlStream only takes arrays, got ' + std.type(value)\n else\n '---\\n' + std.join(\n '\\n---\\n', [std.manifestYamlDoc(e, indent_array_in_object, quote_keys) for e in value]\n ) + if c_document_end then '\\n...\\n' else '\\n',\n\n manifestPython(v)::\n if std.isObject(v) then\n local fields = [\n '%s: %s' % [std.escapeStringPython(k), std.manifestPython(v[k])]\n for k in std.objectFields(v)\n ];\n '{%s}' % [std.join(', ', fields)]\n else if std.isArray(v) then\n '[%s]' % [std.join(', ', [std.manifestPython(v2) for v2 in v])]\n else if std.isString(v) then\n '%s' % [std.escapeStringPython(v)]\n else if std.isFunction(v) then\n error 'cannot manifest function'\n else if std.isNumber(v) then\n std.toString(v)\n else if v == true then\n 'True'\n else if v == false then\n 'False'\n else if v == null then\n 'None',\n\n manifestPythonVars(conf)::\n local vars = ['%s = %s' % [k, std.manifestPython(conf[k])] for k in std.objectFields(conf)];\n std.join('\\n', vars + ['']),\n\n manifestXmlJsonml(value)::\n if !std.isArray(value) then\n error 'Expected a JSONML value (an array), got %s' % std.type(value)\n else\n local aux(v) =\n if std.isString(v) then\n v\n else\n local tag = v[0];\n local has_attrs = std.length(v) > 1 && std.isObject(v[1]);\n local attrs = if has_attrs then v[1] else {};\n local children = if has_attrs then v[2:] else v[1:];\n local attrs_str =\n std.join('', [' %s=\"%s\"' % [k, attrs[k]] for k in std.objectFields(attrs)]);\n std.deepJoin(['<', tag, attrs_str, '>', [aux(x) for x in children], '']);\n\n aux(value),\n\n setUnion(a, b, keyF=id)::\n // NOTE: order matters, values in `a` win\n local aux(a, b, i, j, acc) =\n if i >= std.length(a) then\n acc + b[j:]\n else if j >= std.length(b) then\n acc + a[i:]\n else\n local ak = keyF(a[i]);\n local bk = keyF(b[j]);\n if ak == bk then\n aux(a, b, i + 1, j + 1, acc + [a[i]]) tailstrict\n else if ak < bk then\n aux(a, b, i + 1, j, acc + [a[i]]) tailstrict\n else\n aux(a, b, i, j + 1, acc + [b[j]]) tailstrict;\n aux(a, b, 0, 0, []),\n\n setDiff(a, b, keyF=id)::\n local aux(a, b, i, j, acc) =\n if i >= std.length(a) then\n acc\n else if j >= std.length(b) then\n acc + a[i:]\n else\n if keyF(a[i]) == keyF(b[j]) then\n aux(a, b, i + 1, j + 1, acc) tailstrict\n else if keyF(a[i]) < keyF(b[j]) then\n aux(a, b, i + 1, j, acc + [a[i]]) tailstrict\n else\n aux(a, b, i, j + 1, acc) tailstrict;\n aux(a, b, 0, 0, []) tailstrict,\n\n mergePatch(target, patch)::\n if std.isObject(patch) then\n local target_object =\n if std.isObject(target) then target else {};\n\n local target_fields =\n if std.isObject(target_object) then std.objectFields(target_object) else [];\n\n local null_fields = [k for k in std.objectFields(patch) if patch[k] == null];\n local both_fields = std.setUnion(target_fields, std.objectFields(patch));\n\n {\n [k]:\n if !std.objectHas(patch, k) then\n target_object[k]\n else if !std.objectHas(target_object, k) then\n std.mergePatch(null, patch[k]) tailstrict\n else\n std.mergePatch(target_object[k], patch[k]) tailstrict\n for k in std.setDiff(both_fields, null_fields)\n }\n else\n patch,\n\n get(o, f, default=null, inc_hidden=true)::\n if std.objectHasEx(o, f, inc_hidden) then o[f] else default,\n\n objectFields(o)::\n std.objectFieldsEx(o, false),\n\n objectFieldsAll(o)::\n std.objectFieldsEx(o, true),\n\n objectHas(o, f)::\n std.objectHasEx(o, f, false),\n\n objectHasAll(o, f)::\n std.objectHasEx(o, f, true),\n\n objectValues(o)::\n [o[k] for k in std.objectFields(o)],\n\n objectValuesAll(o)::\n [o[k] for k in std.objectFieldsAll(o)],\n\n resolvePath(f, r)::\n local arr = std.split(f, '/');\n std.join('/', std.makeArray(std.length(arr) - 1, function(i) arr[i]) + [r]),\n\n prune(a)::\n local isContent(b) =\n if b == null then\n false\n else if std.isArray(b) then\n std.length(b) > 0\n else if std.isObject(b) then\n std.length(b) > 0\n else\n true;\n if std.isArray(a) then\n [std.prune(x) for x in a if isContent($.prune(x))]\n else if std.isObject(a) then {\n [x]: $.prune(a[x])\n for x in std.objectFields(a)\n if isContent(std.prune(a[x]))\n } else\n a,\n\n find(value, arr)::\n if !std.isArray(arr) then\n error 'find second parameter should be an array, got ' + std.type(arr)\n else\n std.filter(function(i) arr[i] == value, std.range(0, std.length(arr) - 1)),\n\n // Compat\n __compare_array(arr1, arr2)::\n assert std.isArray(arr1) && std.isArray(arr2);\n std.__compare(arr1, arr2),\n __array_less(arr1, arr2):: std.__compare_array(arr1, arr2) == -1,\n __array_greater(arr1, arr2):: std.__compare_array(arr1, arr2) == 1,\n __array_less_or_equal(arr1, arr2):: std.__compare_array(arr1, arr2) <= 0,\n __array_greater_or_equal(arr1, arr2):: std.__compare_array(arr1, arr2) >= 0,\n}\n" +expression: "{\n local std = self,\n local id = std.id,\n\n thisFile:: error 'std.thisFile is deprecated, to enable its support in jrsonnet - recompile it with \"legacy-this-file\" support.\\nThis will slow down stdlib caching a bit, though',\n\n lstripChars(str, chars)::\n if std.length(str) > 0 && std.member(chars, str[0]) then\n std.lstripChars(str[1:], chars)\n else\n str,\n\n rstripChars(str, chars)::\n local len = std.length(str);\n if len > 0 && std.member(chars, str[len - 1]) then\n std.rstripChars(str[:len - 1], chars)\n else\n str,\n\n stripChars(str, chars)::\n std.lstripChars(std.rstripChars(str, chars), chars),\n\n splitLimitR(str, c, maxsplits)::\n if maxsplits == -1 then\n std.splitLimit(str, c, -1)\n else\n local revStr(str) = std.join('', std.reverse(std.stringChars(str)));\n std.map(function(e) revStr(e), std.reverse(std.splitLimit(revStr(str), revStr(c), maxsplits))),\n\n split(str, c):: std.splitLimit(str, c, -1),\n\n mapWithIndex(func, arr)::\n if !std.isFunction(func) then\n error ('std.mapWithIndex first param must be function, got ' + std.type(func))\n else if !std.isArray(arr) && !std.isString(arr) then\n error ('std.mapWithIndex second param must be array, got ' + std.type(arr))\n else\n std.makeArray(std.length(arr), function(i) func(i, arr[i])),\n\n mapWithKey(func, obj)::\n if !std.isFunction(func) then\n error ('std.mapWithKey first param must be function, got ' + std.type(func))\n else if !std.isObject(obj) then\n error ('std.mapWithKey second param must be object, got ' + std.type(obj))\n else\n { [k]: func(k, obj[k]) for k in std.objectFields(obj) },\n\n lines(arr)::\n std.join('\\n', arr + ['']),\n\n deepJoin(arr)::\n if std.isString(arr) then\n arr\n else if std.isArray(arr) then\n std.join('', [std.deepJoin(x) for x in arr])\n else\n error 'Expected string or array, got %s' % std.type(arr),\n\n assertEqual(a, b)::\n if a == b then\n true\n else\n error 'Assertion failed. ' + a + ' != ' + b,\n\n clamp(x, minVal, maxVal)::\n if x < minVal then minVal\n else if x > maxVal then maxVal\n else x,\n\n manifestIni(ini)::\n local body_lines(body) =\n std.join([], [\n local value_or_values = body[k];\n if std.isArray(value_or_values) then\n ['%s = %s' % [k, value] for value in value_or_values]\n else\n ['%s = %s' % [k, value_or_values]]\n\n for k in std.objectFields(body)\n ]);\n\n local section_lines(sname, sbody) = ['[%s]' % [sname]] + body_lines(sbody),\n main_body = if std.objectHas(ini, 'main') then body_lines(ini.main) else [],\n all_sections = [\n section_lines(k, ini.sections[k])\n for k in std.objectFields(ini.sections)\n ];\n std.join('\\n', main_body + std.flattenArrays(all_sections) + ['']),\n\n manifestToml(value):: std.manifestTomlEx(value, ' '),\n\n escapeStringPython(str)::\n std.escapeStringJson(str),\n\n escapeStringBash(str_)::\n local str = std.toString(str_);\n local trans(ch) =\n if ch == \"'\" then\n \"'\\\"'\\\"'\"\n else\n ch;\n \"'%s'\" % std.join('', [trans(ch) for ch in std.stringChars(str)]),\n\n escapeStringDollars(str_)::\n local str = std.toString(str_);\n local trans(ch) =\n if ch == '$' then\n '$$'\n else\n ch;\n std.foldl(function(a, b) a + trans(b), std.stringChars(str), ''),\n\n local xml_escapes = {\n '<': '<',\n '>': '>',\n '&': '&',\n '\"': '"',\n \"'\": ''',\n },\n\n escapeStringXML(str_)::\n local str = std.toString(str_);\n std.join('', [std.get(xml_escapes, ch, ch) for ch in std.stringChars(str)]),\n\n manifestJson(value):: std.manifestJsonEx(value, ' ') tailstrict,\n\n manifestJsonMinified(value):: std.manifestJsonEx(value, '', '', ':'),\n\n manifestYamlStream(value, indent_array_in_object=false, c_document_end=true, quote_keys=true)::\n if !std.isArray(value) then\n error 'manifestYamlStream only takes arrays, got ' + std.type(value)\n else\n '---\\n' + std.join(\n '\\n---\\n', [std.manifestYamlDoc(e, indent_array_in_object, quote_keys) for e in value]\n ) + if c_document_end then '\\n...\\n' else '\\n',\n\n manifestPython(v)::\n if std.isObject(v) then\n local fields = [\n '%s: %s' % [std.escapeStringPython(k), std.manifestPython(v[k])]\n for k in std.objectFields(v)\n ];\n '{%s}' % [std.join(', ', fields)]\n else if std.isArray(v) then\n '[%s]' % [std.join(', ', [std.manifestPython(v2) for v2 in v])]\n else if std.isString(v) then\n '%s' % [std.escapeStringPython(v)]\n else if std.isFunction(v) then\n error 'cannot manifest function'\n else if std.isNumber(v) then\n std.toString(v)\n else if v == true then\n 'True'\n else if v == false then\n 'False'\n else if v == null then\n 'None',\n\n manifestPythonVars(conf)::\n local vars = ['%s = %s' % [k, std.manifestPython(conf[k])] for k in std.objectFields(conf)];\n std.join('\\n', vars + ['']),\n\n manifestXmlJsonml(value)::\n if !std.isArray(value) then\n error 'Expected a JSONML value (an array), got %s' % std.type(value)\n else\n local aux(v) =\n if std.isString(v) then\n v\n else\n local tag = v[0];\n local has_attrs = std.length(v) > 1 && std.isObject(v[1]);\n local attrs = if has_attrs then v[1] else {};\n local children = if has_attrs then v[2:] else v[1:];\n local attrs_str =\n std.join('', [' %s=\"%s\"' % [k, attrs[k]] for k in std.objectFields(attrs)]);\n std.deepJoin(['<', tag, attrs_str, '>', [aux(x) for x in children], '']);\n\n aux(value),\n\n mergePatch(target, patch)::\n if std.isObject(patch) then\n local target_object =\n if std.isObject(target) then target else {};\n\n local target_fields =\n if std.isObject(target_object) then std.objectFields(target_object) else [];\n\n local null_fields = [k for k in std.objectFields(patch) if patch[k] == null];\n local both_fields = std.setUnion(target_fields, std.objectFields(patch));\n\n {\n [k]:\n if !std.objectHas(patch, k) then\n target_object[k]\n else if !std.objectHas(target_object, k) then\n std.mergePatch(null, patch[k]) tailstrict\n else\n std.mergePatch(target_object[k], patch[k]) tailstrict\n for k in std.setDiff(both_fields, null_fields)\n }\n else\n patch,\n\n get(o, f, default=null, inc_hidden=true)::\n if std.objectHasEx(o, f, inc_hidden) then o[f] else default,\n\n resolvePath(f, r)::\n local arr = std.split(f, '/');\n std.join('/', std.makeArray(std.length(arr) - 1, function(i) arr[i]) + [r]),\n\n prune(a)::\n local isContent(b) =\n if b == null then\n false\n else if std.isArray(b) then\n std.length(b) > 0\n else if std.isObject(b) then\n std.length(b) > 0\n else\n true;\n if std.isArray(a) then\n [std.prune(x) for x in a if isContent($.prune(x))]\n else if std.isObject(a) then {\n [x]: $.prune(a[x])\n for x in std.objectFields(a)\n if isContent(std.prune(a[x]))\n } else\n a,\n\n find(value, arr)::\n if !std.isArray(arr) then\n error 'find second parameter should be an array, got ' + std.type(arr)\n else\n std.filter(function(i) arr[i] == value, std.range(0, std.length(arr) - 1)),\n\n // Compat\n __compare_array(arr1, arr2)::\n assert std.isArray(arr1) && std.isArray(arr2);\n std.__compare(arr1, arr2),\n __array_less(arr1, arr2):: std.__compare_array(arr1, arr2) == -1,\n __array_greater(arr1, arr2):: std.__compare_array(arr1, arr2) == 1,\n __array_less_or_equal(arr1, arr2):: std.__compare_array(arr1, arr2) <= 0,\n __array_greater_or_equal(arr1, arr2):: std.__compare_array(arr1, arr2) >= 0,\n}\n" --- -SOURCE_FILE@0..9860 - EXPR_OBJECT@0..9859 - OBJ_BODY_MEMBER_LIST@0..9859 - L_BRACE@0..1 "{" - WHITESPACE@1..4 "\n " - MEMBER_BIND_STMT@4..20 - OBJ_LOCAL@4..20 - LOCAL_KW@4..9 "local" - WHITESPACE@9..10 " " - BIND_DESTRUCT@10..20 - DESTRUCT_FULL@10..13 - NAME@10..13 - IDENT@10..13 "std" - WHITESPACE@13..14 " " - ASSIGN@14..15 "=" - WHITESPACE@15..16 " " - EXPR_LITERAL@16..20 - SELF_KW@16..20 "self" - COMMA@20..21 "," - WHITESPACE@21..24 "\n " - MEMBER_BIND_STMT@24..41 - OBJ_LOCAL@24..41 - LOCAL_KW@24..29 "local" - WHITESPACE@29..30 " " - BIND_DESTRUCT@30..41 - DESTRUCT_FULL@30..32 - NAME@30..32 - IDENT@30..32 "id" - WHITESPACE@32..33 " " - ASSIGN@33..34 "=" - WHITESPACE@34..35 " " - EXPR_INDEX@35..41 - EXPR_VAR@35..38 - NAME@35..38 - IDENT@35..38 "std" - DOT@38..39 "." - NAME@39..41 - IDENT@39..41 "id" - COMMA@41..42 "," - WHITESPACE@42..46 "\n\n " - MEMBER_FIELD_NORMAL@46..224 - FIELD_NAME_FIXED@46..54 - NAME@46..54 - IDENT@46..54 "thisFile" - COLONCOLON@54..56 "::" - WHITESPACE@56..57 " " - EXPR_ERROR@57..224 - ERROR_KW@57..62 "error" - WHITESPACE@62..63 " " - EXPR_STRING@63..224 - STRING_SINGLE@63..224 "'std.thisFile is depr ..." - COMMA@224..225 "," - WHITESPACE@225..229 "\n\n " - MEMBER_FIELD_METHOD@229..249 - FIELD_NAME_FIXED@229..237 - NAME@229..237 - IDENT@229..237 "toString" - PARAMS_DESC@237..240 - L_PAREN@237..238 "(" - PARAM@238..239 - DESTRUCT_FULL@238..239 - NAME@238..239 - IDENT@238..239 "a" - R_PAREN@239..240 ")" - COLONCOLON@240..242 "::" - WHITESPACE@242..243 " " - EXPR_BINARY@243..249 - LHS_EXPR@243..245 - EXPR_STRING@243..245 - STRING_SINGLE@243..245 "''" - WHITESPACE@245..246 " " - PLUS@246..247 "+" - WHITESPACE@247..248 " " - EXPR_VAR@248..249 - NAME@248..249 - IDENT@248..249 "a" - COMMA@249..250 "," - WHITESPACE@250..254 "\n\n " - MEMBER_FIELD_METHOD@254..397 - FIELD_NAME_FIXED@254..265 - NAME@254..265 - IDENT@254..265 "lstripChars" - PARAMS_DESC@265..277 - L_PAREN@265..266 "(" - PARAM@266..269 - DESTRUCT_FULL@266..269 - NAME@266..269 - IDENT@266..269 "str" - COMMA@269..270 "," - WHITESPACE@270..271 " " - PARAM@271..276 - DESTRUCT_FULL@271..276 - NAME@271..276 - IDENT@271..276 "chars" - R_PAREN@276..277 ")" - COLONCOLON@277..279 "::" - WHITESPACE@279..284 "\n " - EXPR_IF_THEN_ELSE@284..397 - IF_KW@284..286 "if" - WHITESPACE@286..287 " " - EXPR_BINARY@287..335 - LHS_EXPR@287..306 - EXPR_BINARY@287..306 - LHS_EXPR@287..302 - EXPR_APPLY@287..302 - EXPR_INDEX@287..297 - EXPR_VAR@287..290 - NAME@287..290 - IDENT@287..290 "std" - DOT@290..291 "." - NAME@291..297 - IDENT@291..297 "length" - ARGS_DESC@297..302 - L_PAREN@297..298 "(" - ARG@298..301 - EXPR_VAR@298..301 - NAME@298..301 - IDENT@298..301 "str" - R_PAREN@301..302 ")" - WHITESPACE@302..303 " " - GT@303..304 ">" - WHITESPACE@304..305 " " - EXPR_NUMBER@305..306 - FLOAT@305..306 "0" - WHITESPACE@306..307 " " - AND@307..309 "&&" - WHITESPACE@309..310 " " - EXPR_APPLY@310..335 - EXPR_INDEX@310..320 - EXPR_VAR@310..313 - NAME@310..313 - IDENT@310..313 "std" - DOT@313..314 "." - NAME@314..320 - IDENT@314..320 "member" - ARGS_DESC@320..335 - L_PAREN@320..321 "(" - ARG@321..326 - EXPR_VAR@321..326 - NAME@321..326 - IDENT@321..326 "chars" - COMMA@326..327 "," - WHITESPACE@327..328 " " - ARG@328..334 - EXPR_INDEX_EXPR@328..334 - LHS_EXPR@328..331 - EXPR_VAR@328..331 - NAME@328..331 - IDENT@328..331 "str" - L_BRACK@331..332 "[" - EXPR_NUMBER@332..333 - FLOAT@332..333 "0" - R_BRACK@333..334 "]" - R_PAREN@334..335 ")" - WHITESPACE@335..336 " " - THEN_KW@336..340 "then" - WHITESPACE@340..347 "\n " - TRUE_EXPR@347..378 - EXPR_APPLY@347..378 - EXPR_INDEX@347..362 - EXPR_VAR@347..350 - NAME@347..350 - IDENT@347..350 "std" - DOT@350..351 "." - NAME@351..362 - IDENT@351..362 "lstripChars" - ARGS_DESC@362..378 - L_PAREN@362..363 "(" - ARG@363..370 - EXPR_SLICE@363..370 - EXPR_VAR@363..366 - NAME@363..366 - IDENT@363..366 "str" - SLICE_DESC@366..370 - L_BRACK@366..367 "[" - EXPR_NUMBER@367..368 - FLOAT@367..368 "1" - COLON@368..369 ":" - R_BRACK@369..370 "]" - COMMA@370..371 "," - WHITESPACE@371..372 " " - ARG@372..377 - EXPR_VAR@372..377 - NAME@372..377 - IDENT@372..377 "chars" - R_PAREN@377..378 ")" - WHITESPACE@378..383 "\n " - ELSE_KW@383..387 "else" - WHITESPACE@387..394 "\n " - FALSE_EXPR@394..397 - EXPR_VAR@394..397 - NAME@394..397 - IDENT@394..397 "str" - COMMA@397..398 "," - WHITESPACE@398..402 "\n\n " - MEMBER_FIELD_METHOD@402..578 - FIELD_NAME_FIXED@402..413 - NAME@402..413 - IDENT@402..413 "rstripChars" - PARAMS_DESC@413..425 - L_PAREN@413..414 "(" - PARAM@414..417 - DESTRUCT_FULL@414..417 - NAME@414..417 - IDENT@414..417 "str" - COMMA@417..418 "," - WHITESPACE@418..419 " " - PARAM@419..424 - DESTRUCT_FULL@419..424 - NAME@419..424 - IDENT@419..424 "chars" - R_PAREN@424..425 ")" - COLONCOLON@425..427 "::" - WHITESPACE@427..432 "\n " - STMT_LOCAL@432..460 - LOCAL_KW@432..437 "local" - WHITESPACE@437..438 " " - BIND_DESTRUCT@438..459 - DESTRUCT_FULL@438..441 - NAME@438..441 - IDENT@438..441 "len" - WHITESPACE@441..442 " " - ASSIGN@442..443 "=" - WHITESPACE@443..444 " " - EXPR_APPLY@444..459 - EXPR_INDEX@444..454 - EXPR_VAR@444..447 - NAME@444..447 - IDENT@444..447 "std" - DOT@447..448 "." - NAME@448..454 - IDENT@448..454 "length" - ARGS_DESC@454..459 - L_PAREN@454..455 "(" - ARG@455..458 - EXPR_VAR@455..458 - NAME@455..458 - IDENT@455..458 "str" - R_PAREN@458..459 ")" - SEMI@459..460 ";" - WHITESPACE@460..465 "\n " - EXPR_IF_THEN_ELSE@465..578 - IF_KW@465..467 "if" - WHITESPACE@467..468 " " - EXPR_BINARY@468..510 - LHS_EXPR@468..475 - EXPR_BINARY@468..475 - LHS_EXPR@468..471 - EXPR_VAR@468..471 - NAME@468..471 - IDENT@468..471 "len" - WHITESPACE@471..472 " " - GT@472..473 ">" - WHITESPACE@473..474 " " - EXPR_NUMBER@474..475 - FLOAT@474..475 "0" - WHITESPACE@475..476 " " - AND@476..478 "&&" - WHITESPACE@478..479 " " - EXPR_APPLY@479..510 - EXPR_INDEX@479..489 - EXPR_VAR@479..482 - NAME@479..482 - IDENT@479..482 "std" - DOT@482..483 "." - NAME@483..489 - IDENT@483..489 "member" - ARGS_DESC@489..510 - L_PAREN@489..490 "(" - ARG@490..495 - EXPR_VAR@490..495 - NAME@490..495 - IDENT@490..495 "chars" - COMMA@495..496 "," - WHITESPACE@496..497 " " - ARG@497..509 - EXPR_INDEX_EXPR@497..509 - LHS_EXPR@497..500 - EXPR_VAR@497..500 - NAME@497..500 - IDENT@497..500 "str" - L_BRACK@500..501 "[" - EXPR_BINARY@501..508 - LHS_EXPR@501..504 - EXPR_VAR@501..504 - NAME@501..504 - IDENT@501..504 "len" - WHITESPACE@504..505 " " - MINUS@505..506 "-" - WHITESPACE@506..507 " " - EXPR_NUMBER@507..508 - FLOAT@507..508 "1" - R_BRACK@508..509 "]" - R_PAREN@509..510 ")" - WHITESPACE@510..511 " " - THEN_KW@511..515 "then" - WHITESPACE@515..522 "\n " - TRUE_EXPR@522..559 - EXPR_APPLY@522..559 - EXPR_INDEX@522..537 - EXPR_VAR@522..525 - NAME@522..525 - IDENT@522..525 "std" - DOT@525..526 "." - NAME@526..537 - IDENT@526..537 "rstripChars" - ARGS_DESC@537..559 - L_PAREN@537..538 "(" - ARG@538..551 - EXPR_SLICE@538..551 - EXPR_VAR@538..541 - NAME@538..541 - IDENT@538..541 "str" - SLICE_DESC@541..551 - L_BRACK@541..542 "[" - COLON@542..543 ":" - SLICE_DESC_END@543..550 - EXPR_BINARY@543..550 - LHS_EXPR@543..546 - EXPR_VAR@543..546 - NAME@543..546 - IDENT@543..546 "len" - WHITESPACE@546..547 " " - MINUS@547..548 "-" - WHITESPACE@548..549 " " - EXPR_NUMBER@549..550 - FLOAT@549..550 "1" - R_BRACK@550..551 "]" - COMMA@551..552 "," - WHITESPACE@552..553 " " - ARG@553..558 - EXPR_VAR@553..558 - NAME@553..558 - IDENT@553..558 "chars" - R_PAREN@558..559 ")" - WHITESPACE@559..564 "\n " - ELSE_KW@564..568 "else" - WHITESPACE@568..575 "\n " - FALSE_EXPR@575..578 - EXPR_VAR@575..578 - NAME@575..578 - IDENT@575..578 "str" - COMMA@578..579 "," - WHITESPACE@579..583 "\n\n " - MEMBER_FIELD_METHOD@583..663 - FIELD_NAME_FIXED@583..593 - NAME@583..593 - IDENT@583..593 "stripChars" - PARAMS_DESC@593..605 - L_PAREN@593..594 "(" - PARAM@594..597 - DESTRUCT_FULL@594..597 - NAME@594..597 - IDENT@594..597 "str" - COMMA@597..598 "," - WHITESPACE@598..599 " " - PARAM@599..604 - DESTRUCT_FULL@599..604 - NAME@599..604 - IDENT@599..604 "chars" - R_PAREN@604..605 ")" - COLONCOLON@605..607 "::" - WHITESPACE@607..612 "\n " - EXPR_APPLY@612..663 - EXPR_INDEX@612..627 - EXPR_VAR@612..615 - NAME@612..615 - IDENT@612..615 "std" - DOT@615..616 "." - NAME@616..627 - IDENT@616..627 "lstripChars" - ARGS_DESC@627..663 - L_PAREN@627..628 "(" - ARG@628..655 - EXPR_APPLY@628..655 - EXPR_INDEX@628..643 - EXPR_VAR@628..631 - NAME@628..631 - IDENT@628..631 "std" - DOT@631..632 "." - NAME@632..643 - IDENT@632..643 "rstripChars" - ARGS_DESC@643..655 - L_PAREN@643..644 "(" - ARG@644..647 - EXPR_VAR@644..647 - NAME@644..647 - IDENT@644..647 "str" - COMMA@647..648 "," - WHITESPACE@648..649 " " - ARG@649..654 - EXPR_VAR@649..654 - NAME@649..654 - IDENT@649..654 "chars" - R_PAREN@654..655 ")" - COMMA@655..656 "," - WHITESPACE@656..657 " " - ARG@657..662 - EXPR_VAR@657..662 - NAME@657..662 - IDENT@657..662 "chars" - R_PAREN@662..663 ")" - COMMA@663..664 "," - WHITESPACE@664..668 "\n\n " - MEMBER_FIELD_METHOD@668..741 - FIELD_NAME_FIXED@668..679 - NAME@668..679 - IDENT@668..679 "stringChars" - PARAMS_DESC@679..684 - L_PAREN@679..680 "(" - PARAM@680..683 - DESTRUCT_FULL@680..683 - NAME@680..683 - IDENT@680..683 "str" - R_PAREN@683..684 ")" - COLONCOLON@684..686 "::" - WHITESPACE@686..691 "\n " - EXPR_APPLY@691..741 - EXPR_INDEX@691..704 - EXPR_VAR@691..694 - NAME@691..694 - IDENT@691..694 "std" - DOT@694..695 "." - NAME@695..704 - IDENT@695..704 "makeArray" - ARGS_DESC@704..741 - L_PAREN@704..705 "(" - ARG@705..720 - EXPR_APPLY@705..720 - EXPR_INDEX@705..715 - EXPR_VAR@705..708 - NAME@705..708 - IDENT@705..708 "std" - DOT@708..709 "." - NAME@709..715 - IDENT@709..715 "length" - ARGS_DESC@715..720 - L_PAREN@715..716 "(" - ARG@716..719 - EXPR_VAR@716..719 - NAME@716..719 - IDENT@716..719 "str" - R_PAREN@719..720 ")" - COMMA@720..721 "," - WHITESPACE@721..722 " " - ARG@722..740 - EXPR_FUNCTION@722..740 - FUNCTION_KW@722..730 "function" - PARAMS_DESC@730..733 - L_PAREN@730..731 "(" - PARAM@731..732 - DESTRUCT_FULL@731..732 - NAME@731..732 - IDENT@731..732 "i" - R_PAREN@732..733 ")" - WHITESPACE@733..734 " " - EXPR_INDEX_EXPR@734..740 - LHS_EXPR@734..737 - EXPR_VAR@734..737 - NAME@734..737 - IDENT@734..737 "str" - L_BRACK@737..738 "[" - EXPR_VAR@738..739 - NAME@738..739 - IDENT@738..739 "i" - R_BRACK@739..740 "]" - R_PAREN@740..741 ")" - COMMA@741..742 "," - WHITESPACE@742..746 "\n\n " - MEMBER_FIELD_METHOD@746..1024 - FIELD_NAME_FIXED@746..757 - NAME@746..757 - IDENT@746..757 "splitLimitR" - PARAMS_DESC@757..776 - L_PAREN@757..758 "(" - PARAM@758..761 - DESTRUCT_FULL@758..761 - NAME@758..761 - IDENT@758..761 "str" - COMMA@761..762 "," - WHITESPACE@762..763 " " - PARAM@763..764 - DESTRUCT_FULL@763..764 - NAME@763..764 - IDENT@763..764 "c" - COMMA@764..765 "," - WHITESPACE@765..766 " " - PARAM@766..775 - DESTRUCT_FULL@766..775 - NAME@766..775 - IDENT@766..775 "maxsplits" - R_PAREN@775..776 ")" - COLONCOLON@776..778 "::" - WHITESPACE@778..783 "\n " - EXPR_IF_THEN_ELSE@783..1024 - IF_KW@783..785 "if" - WHITESPACE@785..786 " " - EXPR_BINARY@786..801 - LHS_EXPR@786..795 - EXPR_VAR@786..795 - NAME@786..795 - IDENT@786..795 "maxsplits" - WHITESPACE@795..796 " " - EQ@796..798 "==" - WHITESPACE@798..799 " " - EXPR_UNARY@799..801 - MINUS@799..800 "-" - EXPR_NUMBER@800..801 - FLOAT@800..801 "1" - WHITESPACE@801..802 " " - THEN_KW@802..806 "then" - WHITESPACE@806..813 "\n " - TRUE_EXPR@813..839 - EXPR_APPLY@813..839 - EXPR_INDEX@813..827 - EXPR_VAR@813..816 - NAME@813..816 - IDENT@813..816 "std" - DOT@816..817 "." - NAME@817..827 - IDENT@817..827 "splitLimit" - ARGS_DESC@827..839 - L_PAREN@827..828 "(" - ARG@828..831 - EXPR_VAR@828..831 - NAME@828..831 - IDENT@828..831 "str" - COMMA@831..832 "," - WHITESPACE@832..833 " " - ARG@833..834 - EXPR_VAR@833..834 - NAME@833..834 - IDENT@833..834 "c" - COMMA@834..835 "," - WHITESPACE@835..836 " " - ARG@836..838 - EXPR_UNARY@836..838 - MINUS@836..837 "-" - EXPR_NUMBER@837..838 - FLOAT@837..838 "1" - R_PAREN@838..839 ")" - WHITESPACE@839..844 "\n " - ELSE_KW@844..848 "else" - WHITESPACE@848..855 "\n " - STMT_LOCAL@855..923 - LOCAL_KW@855..860 "local" - WHITESPACE@860..861 " " - BIND_FUNCTION@861..922 - NAME@861..867 - IDENT@861..867 "revStr" - PARAMS_DESC@867..872 - L_PAREN@867..868 "(" - PARAM@868..871 - DESTRUCT_FULL@868..871 - NAME@868..871 - IDENT@868..871 "str" - R_PAREN@871..872 ")" - WHITESPACE@872..873 " " - ASSIGN@873..874 "=" - WHITESPACE@874..875 " " - EXPR_APPLY@875..922 - EXPR_INDEX@875..883 - EXPR_VAR@875..878 - NAME@875..878 - IDENT@875..878 "std" - DOT@878..879 "." - NAME@879..883 - IDENT@879..883 "join" - ARGS_DESC@883..922 - L_PAREN@883..884 "(" - ARG@884..886 - EXPR_STRING@884..886 - STRING_SINGLE@884..886 "''" - COMMA@886..887 "," - WHITESPACE@887..888 " " - ARG@888..921 - EXPR_APPLY@888..921 - EXPR_INDEX@888..899 - EXPR_VAR@888..891 - NAME@888..891 - IDENT@888..891 "std" - DOT@891..892 "." - NAME@892..899 - IDENT@892..899 "reverse" - ARGS_DESC@899..921 - L_PAREN@899..900 "(" - ARG@900..920 - EXPR_APPLY@900..920 - EXPR_INDEX@900..915 - EXPR_VAR@900..903 - NAME@900..903 - IDENT@900..903 "std" - DOT@903..904 "." - NAME@904..915 - IDENT@904..915 "stringChars" - ARGS_DESC@915..920 - L_PAREN@915..916 "(" - ARG@916..919 - EXPR_VAR@916..919 - NAME@916..919 - IDENT@916..919 "str" +SOURCE_FILE@0..7835 + EXPR@0..7834 + EXPR_OBJECT@0..7834 + OBJ_BODY_MEMBER_LIST@0..7834 + L_BRACE@0..1 "{" + WHITESPACE@1..4 "\n " + MEMBER_BIND_STMT@4..20 + OBJ_LOCAL@4..20 + LOCAL_KW@4..9 "local" + WHITESPACE@9..10 " " + BIND_DESTRUCT@10..20 + DESTRUCT_FULL@10..13 + NAME@10..13 + IDENT@10..13 "std" + WHITESPACE@13..14 " " + ASSIGN@14..15 "=" + WHITESPACE@15..16 " " + EXPR@16..20 + EXPR_LITERAL@16..20 + SELF_KW@16..20 "self" + COMMA@20..21 "," + WHITESPACE@21..24 "\n " + MEMBER_BIND_STMT@24..41 + OBJ_LOCAL@24..41 + LOCAL_KW@24..29 "local" + WHITESPACE@29..30 " " + BIND_DESTRUCT@30..41 + DESTRUCT_FULL@30..32 + NAME@30..32 + IDENT@30..32 "id" + WHITESPACE@32..33 " " + ASSIGN@33..34 "=" + WHITESPACE@34..35 " " + EXPR@35..41 + EXPR_VAR@35..38 + NAME@35..38 + IDENT@35..38 "std" + SUFFIX_INDEX@38..41 + DOT@38..39 "." + NAME@39..41 + IDENT@39..41 "id" + COMMA@41..42 "," + WHITESPACE@42..46 "\n\n " + MEMBER_FIELD_NORMAL@46..224 + FIELD_NAME_FIXED@46..54 + NAME@46..54 + IDENT@46..54 "thisFile" + COLONCOLON@54..56 "::" + WHITESPACE@56..57 " " + EXPR@57..224 + EXPR_ERROR@57..224 + ERROR_KW@57..62 "error" + WHITESPACE@62..63 " " + EXPR@63..224 + EXPR_STRING@63..224 + STRING_SINGLE@63..224 "'std.thisFile is depr ..." + COMMA@224..225 "," + WHITESPACE@225..229 "\n\n " + MEMBER_FIELD_METHOD@229..372 + FIELD_NAME_FIXED@229..240 + NAME@229..240 + IDENT@229..240 "lstripChars" + PARAMS_DESC@240..252 + L_PAREN@240..241 "(" + PARAM@241..244 + DESTRUCT_FULL@241..244 + NAME@241..244 + IDENT@241..244 "str" + COMMA@244..245 "," + WHITESPACE@245..246 " " + PARAM@246..251 + DESTRUCT_FULL@246..251 + NAME@246..251 + IDENT@246..251 "chars" + R_PAREN@251..252 ")" + COLONCOLON@252..254 "::" + WHITESPACE@254..259 "\n " + EXPR@259..372 + EXPR_IF_THEN_ELSE@259..372 + IF_KW@259..261 "if" + WHITESPACE@261..262 " " + EXPR@262..310 + EXPR_BINARY@262..310 + EXPR@262..281 + EXPR_BINARY@262..281 + EXPR@262..265 + EXPR_VAR@262..265 + NAME@262..265 + IDENT@262..265 "std" + SUFFIX_INDEX@265..272 + DOT@265..266 "." + NAME@266..272 + IDENT@266..272 "length" + SUFFIX_APPLY@272..277 + ARGS_DESC@272..277 + L_PAREN@272..273 "(" + ARG@273..276 + EXPR@273..276 + EXPR_VAR@273..276 + NAME@273..276 + IDENT@273..276 "str" + R_PAREN@276..277 ")" + WHITESPACE@277..278 " " + GT@278..279 ">" + WHITESPACE@279..280 " " + EXPR@280..281 + EXPR_NUMBER@280..281 + FLOAT@280..281 "0" + WHITESPACE@281..282 " " + AND@282..284 "&&" + WHITESPACE@284..285 " " + EXPR@285..310 + EXPR_VAR@285..288 + NAME@285..288 + IDENT@285..288 "std" + SUFFIX_INDEX@288..295 + DOT@288..289 "." + NAME@289..295 + IDENT@289..295 "member" + SUFFIX_APPLY@295..310 + ARGS_DESC@295..310 + L_PAREN@295..296 "(" + ARG@296..301 + EXPR@296..301 + EXPR_VAR@296..301 + NAME@296..301 + IDENT@296..301 "chars" + COMMA@301..302 "," + WHITESPACE@302..303 " " + ARG@303..309 + EXPR@303..309 + EXPR_VAR@303..306 + NAME@303..306 + IDENT@303..306 "str" + SUFFIX_INDEX_EXPR@306..309 + L_BRACK@306..307 "[" + EXPR@307..308 + EXPR_NUMBER@307..308 + FLOAT@307..308 "0" + R_BRACK@308..309 "]" + R_PAREN@309..310 ")" + WHITESPACE@310..311 " " + THEN_KW@311..315 "then" + WHITESPACE@315..322 "\n " + TRUE_EXPR@322..353 + EXPR@322..353 + EXPR_VAR@322..325 + NAME@322..325 + IDENT@322..325 "std" + SUFFIX_INDEX@325..337 + DOT@325..326 "." + NAME@326..337 + IDENT@326..337 "lstripChars" + SUFFIX_APPLY@337..353 + ARGS_DESC@337..353 + L_PAREN@337..338 "(" + ARG@338..345 + EXPR@338..345 + EXPR_VAR@338..341 + NAME@338..341 + IDENT@338..341 "str" + SUFFIX_SLICE@341..345 + SLICE_DESC@341..345 + L_BRACK@341..342 "[" + EXPR@342..343 + EXPR_NUMBER@342..343 + FLOAT@342..343 "1" + COLON@343..344 ":" + R_BRACK@344..345 "]" + COMMA@345..346 "," + WHITESPACE@346..347 " " + ARG@347..352 + EXPR@347..352 + EXPR_VAR@347..352 + NAME@347..352 + IDENT@347..352 "chars" + R_PAREN@352..353 ")" + WHITESPACE@353..358 "\n " + ELSE_KW@358..362 "else" + WHITESPACE@362..369 "\n " + FALSE_EXPR@369..372 + EXPR@369..372 + EXPR_VAR@369..372 + NAME@369..372 + IDENT@369..372 "str" + COMMA@372..373 "," + WHITESPACE@373..377 "\n\n " + MEMBER_FIELD_METHOD@377..553 + FIELD_NAME_FIXED@377..388 + NAME@377..388 + IDENT@377..388 "rstripChars" + PARAMS_DESC@388..400 + L_PAREN@388..389 "(" + PARAM@389..392 + DESTRUCT_FULL@389..392 + NAME@389..392 + IDENT@389..392 "str" + COMMA@392..393 "," + WHITESPACE@393..394 " " + PARAM@394..399 + DESTRUCT_FULL@394..399 + NAME@394..399 + IDENT@394..399 "chars" + R_PAREN@399..400 ")" + COLONCOLON@400..402 "::" + WHITESPACE@402..407 "\n " + EXPR@407..553 + STMT_LOCAL@407..435 + LOCAL_KW@407..412 "local" + WHITESPACE@412..413 " " + BIND_DESTRUCT@413..434 + DESTRUCT_FULL@413..416 + NAME@413..416 + IDENT@413..416 "len" + WHITESPACE@416..417 " " + ASSIGN@417..418 "=" + WHITESPACE@418..419 " " + EXPR@419..434 + EXPR_VAR@419..422 + NAME@419..422 + IDENT@419..422 "std" + SUFFIX_INDEX@422..429 + DOT@422..423 "." + NAME@423..429 + IDENT@423..429 "length" + SUFFIX_APPLY@429..434 + ARGS_DESC@429..434 + L_PAREN@429..430 "(" + ARG@430..433 + EXPR@430..433 + EXPR_VAR@430..433 + NAME@430..433 + IDENT@430..433 "str" + R_PAREN@433..434 ")" + SEMI@434..435 ";" + WHITESPACE@435..440 "\n " + EXPR_IF_THEN_ELSE@440..553 + IF_KW@440..442 "if" + WHITESPACE@442..443 " " + EXPR@443..485 + EXPR_BINARY@443..485 + EXPR@443..450 + EXPR_BINARY@443..450 + EXPR@443..446 + EXPR_VAR@443..446 + NAME@443..446 + IDENT@443..446 "len" + WHITESPACE@446..447 " " + GT@447..448 ">" + WHITESPACE@448..449 " " + EXPR@449..450 + EXPR_NUMBER@449..450 + FLOAT@449..450 "0" + WHITESPACE@450..451 " " + AND@451..453 "&&" + WHITESPACE@453..454 " " + EXPR@454..485 + EXPR_VAR@454..457 + NAME@454..457 + IDENT@454..457 "std" + SUFFIX_INDEX@457..464 + DOT@457..458 "." + NAME@458..464 + IDENT@458..464 "member" + SUFFIX_APPLY@464..485 + ARGS_DESC@464..485 + L_PAREN@464..465 "(" + ARG@465..470 + EXPR@465..470 + EXPR_VAR@465..470 + NAME@465..470 + IDENT@465..470 "chars" + COMMA@470..471 "," + WHITESPACE@471..472 " " + ARG@472..484 + EXPR@472..484 + EXPR_VAR@472..475 + NAME@472..475 + IDENT@472..475 "str" + SUFFIX_INDEX_EXPR@475..484 + L_BRACK@475..476 "[" + EXPR@476..483 + EXPR_BINARY@476..483 + EXPR@476..479 + EXPR_VAR@476..479 + NAME@476..479 + IDENT@476..479 "len" + WHITESPACE@479..480 " " + MINUS@480..481 "-" + WHITESPACE@481..482 " " + EXPR@482..483 + EXPR_NUMBER@482..483 + FLOAT@482..483 "1" + R_BRACK@483..484 "]" + R_PAREN@484..485 ")" + WHITESPACE@485..486 " " + THEN_KW@486..490 "then" + WHITESPACE@490..497 "\n " + TRUE_EXPR@497..534 + EXPR@497..534 + EXPR_VAR@497..500 + NAME@497..500 + IDENT@497..500 "std" + SUFFIX_INDEX@500..512 + DOT@500..501 "." + NAME@501..512 + IDENT@501..512 "rstripChars" + SUFFIX_APPLY@512..534 + ARGS_DESC@512..534 + L_PAREN@512..513 "(" + ARG@513..526 + EXPR@513..526 + EXPR_VAR@513..516 + NAME@513..516 + IDENT@513..516 "str" + SUFFIX_SLICE@516..526 + SLICE_DESC@516..526 + L_BRACK@516..517 "[" + COLON@517..518 ":" + SLICE_DESC_END@518..525 + EXPR@518..525 + EXPR_BINARY@518..525 + EXPR@518..521 + EXPR_VAR@518..521 + NAME@518..521 + IDENT@518..521 "len" + WHITESPACE@521..522 " " + MINUS@522..523 "-" + WHITESPACE@523..524 " " + EXPR@524..525 + EXPR_NUMBER@524..525 + FLOAT@524..525 "1" + R_BRACK@525..526 "]" + COMMA@526..527 "," + WHITESPACE@527..528 " " + ARG@528..533 + EXPR@528..533 + EXPR_VAR@528..533 + NAME@528..533 + IDENT@528..533 "chars" + R_PAREN@533..534 ")" + WHITESPACE@534..539 "\n " + ELSE_KW@539..543 "else" + WHITESPACE@543..550 "\n " + FALSE_EXPR@550..553 + EXPR@550..553 + EXPR_VAR@550..553 + NAME@550..553 + IDENT@550..553 "str" + COMMA@553..554 "," + WHITESPACE@554..558 "\n\n " + MEMBER_FIELD_METHOD@558..638 + FIELD_NAME_FIXED@558..568 + NAME@558..568 + IDENT@558..568 "stripChars" + PARAMS_DESC@568..580 + L_PAREN@568..569 "(" + PARAM@569..572 + DESTRUCT_FULL@569..572 + NAME@569..572 + IDENT@569..572 "str" + COMMA@572..573 "," + WHITESPACE@573..574 " " + PARAM@574..579 + DESTRUCT_FULL@574..579 + NAME@574..579 + IDENT@574..579 "chars" + R_PAREN@579..580 ")" + COLONCOLON@580..582 "::" + WHITESPACE@582..587 "\n " + EXPR@587..638 + EXPR_VAR@587..590 + NAME@587..590 + IDENT@587..590 "std" + SUFFIX_INDEX@590..602 + DOT@590..591 "." + NAME@591..602 + IDENT@591..602 "lstripChars" + SUFFIX_APPLY@602..638 + ARGS_DESC@602..638 + L_PAREN@602..603 "(" + ARG@603..630 + EXPR@603..630 + EXPR_VAR@603..606 + NAME@603..606 + IDENT@603..606 "std" + SUFFIX_INDEX@606..618 + DOT@606..607 "." + NAME@607..618 + IDENT@607..618 "rstripChars" + SUFFIX_APPLY@618..630 + ARGS_DESC@618..630 + L_PAREN@618..619 "(" + ARG@619..622 + EXPR@619..622 + EXPR_VAR@619..622 + NAME@619..622 + IDENT@619..622 "str" + COMMA@622..623 "," + WHITESPACE@623..624 " " + ARG@624..629 + EXPR@624..629 + EXPR_VAR@624..629 + NAME@624..629 + IDENT@624..629 "chars" + R_PAREN@629..630 ")" + COMMA@630..631 "," + WHITESPACE@631..632 " " + ARG@632..637 + EXPR@632..637 + EXPR_VAR@632..637 + NAME@632..637 + IDENT@632..637 "chars" + R_PAREN@637..638 ")" + COMMA@638..639 "," + WHITESPACE@639..643 "\n\n " + MEMBER_FIELD_METHOD@643..921 + FIELD_NAME_FIXED@643..654 + NAME@643..654 + IDENT@643..654 "splitLimitR" + PARAMS_DESC@654..673 + L_PAREN@654..655 "(" + PARAM@655..658 + DESTRUCT_FULL@655..658 + NAME@655..658 + IDENT@655..658 "str" + COMMA@658..659 "," + WHITESPACE@659..660 " " + PARAM@660..661 + DESTRUCT_FULL@660..661 + NAME@660..661 + IDENT@660..661 "c" + COMMA@661..662 "," + WHITESPACE@662..663 " " + PARAM@663..672 + DESTRUCT_FULL@663..672 + NAME@663..672 + IDENT@663..672 "maxsplits" + R_PAREN@672..673 ")" + COLONCOLON@673..675 "::" + WHITESPACE@675..680 "\n " + EXPR@680..921 + EXPR_IF_THEN_ELSE@680..921 + IF_KW@680..682 "if" + WHITESPACE@682..683 " " + EXPR@683..698 + EXPR_BINARY@683..698 + EXPR@683..692 + EXPR_VAR@683..692 + NAME@683..692 + IDENT@683..692 "maxsplits" + WHITESPACE@692..693 " " + EQ@693..695 "==" + WHITESPACE@695..696 " " + EXPR@696..698 + EXPR_UNARY@696..698 + MINUS@696..697 "-" + EXPR_NUMBER@697..698 + FLOAT@697..698 "1" + WHITESPACE@698..699 " " + THEN_KW@699..703 "then" + WHITESPACE@703..710 "\n " + TRUE_EXPR@710..736 + EXPR@710..736 + EXPR_VAR@710..713 + NAME@710..713 + IDENT@710..713 "std" + SUFFIX_INDEX@713..724 + DOT@713..714 "." + NAME@714..724 + IDENT@714..724 "splitLimit" + SUFFIX_APPLY@724..736 + ARGS_DESC@724..736 + L_PAREN@724..725 "(" + ARG@725..728 + EXPR@725..728 + EXPR_VAR@725..728 + NAME@725..728 + IDENT@725..728 "str" + COMMA@728..729 "," + WHITESPACE@729..730 " " + ARG@730..731 + EXPR@730..731 + EXPR_VAR@730..731 + NAME@730..731 + IDENT@730..731 "c" + COMMA@731..732 "," + WHITESPACE@732..733 " " + ARG@733..735 + EXPR@733..735 + EXPR_UNARY@733..735 + MINUS@733..734 "-" + EXPR_NUMBER@734..735 + FLOAT@734..735 "1" + R_PAREN@735..736 ")" + WHITESPACE@736..741 "\n " + ELSE_KW@741..745 "else" + WHITESPACE@745..752 "\n " + FALSE_EXPR@752..921 + EXPR@752..921 + STMT_LOCAL@752..820 + LOCAL_KW@752..757 "local" + WHITESPACE@757..758 " " + BIND_FUNCTION@758..819 + NAME@758..764 + IDENT@758..764 "revStr" + PARAMS_DESC@764..769 + L_PAREN@764..765 "(" + PARAM@765..768 + DESTRUCT_FULL@765..768 + NAME@765..768 + IDENT@765..768 "str" + R_PAREN@768..769 ")" + WHITESPACE@769..770 " " + ASSIGN@770..771 "=" + WHITESPACE@771..772 " " + EXPR@772..819 + EXPR_VAR@772..775 + NAME@772..775 + IDENT@772..775 "std" + SUFFIX_INDEX@775..780 + DOT@775..776 "." + NAME@776..780 + IDENT@776..780 "join" + SUFFIX_APPLY@780..819 + ARGS_DESC@780..819 + L_PAREN@780..781 "(" + ARG@781..783 + EXPR@781..783 + EXPR_STRING@781..783 + STRING_SINGLE@781..783 "''" + COMMA@783..784 "," + WHITESPACE@784..785 " " + ARG@785..818 + EXPR@785..818 + EXPR_VAR@785..788 + NAME@785..788 + IDENT@785..788 "std" + SUFFIX_INDEX@788..796 + DOT@788..789 "." + NAME@789..796 + IDENT@789..796 "reverse" + SUFFIX_APPLY@796..818 + ARGS_DESC@796..818 + L_PAREN@796..797 "(" + ARG@797..817 + EXPR@797..817 + EXPR_VAR@797..800 + NAME@797..800 + IDENT@797..800 "std" + SUFFIX_INDEX@800..812 + DOT@800..801 "." + NAME@801..812 + IDENT@801..812 "stringChars" + SUFFIX_APPLY@812..817 + ARGS_DESC@812..817 + L_PAREN@812..813 "(" + ARG@813..816 + EXPR@813..816 + EXPR_VAR@813..816 + NAME@813..816 + IDENT@813..816 "str" + R_PAREN@816..817 ")" + R_PAREN@817..818 ")" + R_PAREN@818..819 ")" + SEMI@819..820 ";" + WHITESPACE@820..827 "\n " + EXPR_VAR@827..830 + NAME@827..830 + IDENT@827..830 "std" + SUFFIX_INDEX@830..834 + DOT@830..831 "." + NAME@831..834 + IDENT@831..834 "map" + SUFFIX_APPLY@834..921 + ARGS_DESC@834..921 + L_PAREN@834..835 "(" + ARG@835..856 + EXPR@835..856 + EXPR_FUNCTION@835..856 + FUNCTION_KW@835..843 "function" + PARAMS_DESC@843..846 + L_PAREN@843..844 "(" + PARAM@844..845 + DESTRUCT_FULL@844..845 + NAME@844..845 + IDENT@844..845 "e" + R_PAREN@845..846 ")" + WHITESPACE@846..847 " " + EXPR@847..856 + EXPR_VAR@847..853 + NAME@847..853 + IDENT@847..853 "revStr" + SUFFIX_APPLY@853..856 + ARGS_DESC@853..856 + L_PAREN@853..854 "(" + ARG@854..855 + EXPR@854..855 + EXPR_VAR@854..855 + NAME@854..855 + IDENT@854..855 "e" + R_PAREN@855..856 ")" + COMMA@856..857 "," + WHITESPACE@857..858 " " + ARG@858..920 + EXPR@858..920 + EXPR_VAR@858..861 + NAME@858..861 + IDENT@858..861 "std" + SUFFIX_INDEX@861..869 + DOT@861..862 "." + NAME@862..869 + IDENT@862..869 "reverse" + SUFFIX_APPLY@869..920 + ARGS_DESC@869..920 + L_PAREN@869..870 "(" + ARG@870..919 + EXPR@870..919 + EXPR_VAR@870..873 + NAME@870..873 + IDENT@870..873 "std" + SUFFIX_INDEX@873..884 + DOT@873..874 "." + NAME@874..884 + IDENT@874..884 "splitLimit" + SUFFIX_APPLY@884..919 + ARGS_DESC@884..919 + L_PAREN@884..885 "(" + ARG@885..896 + EXPR@885..896 + EXPR_VAR@885..891 + NAME@885..891 + IDENT@885..891 "revStr" + SUFFIX_APPLY@891..896 + ARGS_DESC@891..896 + L_PAREN@891..892 "(" + ARG@892..895 + EXPR@892..895 + EXPR_VAR@892..895 + NAME@892..895 + IDENT@892..895 "str" + R_PAREN@895..896 ")" + COMMA@896..897 "," + WHITESPACE@897..898 " " + ARG@898..907 + EXPR@898..907 + EXPR_VAR@898..904 + NAME@898..904 + IDENT@898..904 "revStr" + SUFFIX_APPLY@904..907 + ARGS_DESC@904..907 + L_PAREN@904..905 "(" + ARG@905..906 + EXPR@905..906 + EXPR_VAR@905..906 + NAME@905..906 + IDENT@905..906 "c" + R_PAREN@906..907 ")" + COMMA@907..908 "," + WHITESPACE@908..909 " " + ARG@909..918 + EXPR@909..918 + EXPR_VAR@909..918 + NAME@909..918 + IDENT@909..918 "maxsplits" + R_PAREN@918..919 ")" R_PAREN@919..920 ")" - R_PAREN@920..921 ")" - R_PAREN@921..922 ")" - SEMI@922..923 ";" - WHITESPACE@923..930 "\n " - FALSE_EXPR@930..1024 - EXPR_APPLY@930..1024 - EXPR_INDEX@930..937 - EXPR_VAR@930..933 - NAME@930..933 - IDENT@930..933 "std" - DOT@933..934 "." - NAME@934..937 - IDENT@934..937 "map" - ARGS_DESC@937..1024 - L_PAREN@937..938 "(" - ARG@938..959 - EXPR_FUNCTION@938..959 - FUNCTION_KW@938..946 "function" - PARAMS_DESC@946..949 - L_PAREN@946..947 "(" - PARAM@947..948 - DESTRUCT_FULL@947..948 - NAME@947..948 - IDENT@947..948 "e" - R_PAREN@948..949 ")" - WHITESPACE@949..950 " " - EXPR_APPLY@950..959 - EXPR_VAR@950..956 - NAME@950..956 - IDENT@950..956 "revStr" - ARGS_DESC@956..959 - L_PAREN@956..957 "(" - ARG@957..958 - EXPR_VAR@957..958 - NAME@957..958 - IDENT@957..958 "e" - R_PAREN@958..959 ")" - COMMA@959..960 "," - WHITESPACE@960..961 " " - ARG@961..1023 - EXPR_APPLY@961..1023 - EXPR_INDEX@961..972 - EXPR_VAR@961..964 - NAME@961..964 - IDENT@961..964 "std" - DOT@964..965 "." - NAME@965..972 - IDENT@965..972 "reverse" - ARGS_DESC@972..1023 - L_PAREN@972..973 "(" - ARG@973..1022 - EXPR_APPLY@973..1022 - EXPR_INDEX@973..987 - EXPR_VAR@973..976 - NAME@973..976 - IDENT@973..976 "std" - DOT@976..977 "." - NAME@977..987 - IDENT@977..987 "splitLimit" - ARGS_DESC@987..1022 - L_PAREN@987..988 "(" - ARG@988..999 - EXPR_APPLY@988..999 - EXPR_VAR@988..994 - NAME@988..994 - IDENT@988..994 "revStr" - ARGS_DESC@994..999 - L_PAREN@994..995 "(" - ARG@995..998 - EXPR_VAR@995..998 - NAME@995..998 - IDENT@995..998 "str" - R_PAREN@998..999 ")" - COMMA@999..1000 "," - WHITESPACE@1000..1001 " " - ARG@1001..1010 - EXPR_APPLY@1001..1010 - EXPR_VAR@1001..1007 - NAME@1001..1007 - IDENT@1001..1007 "revStr" - ARGS_DESC@1007..1010 - L_PAREN@1007..1008 "(" - ARG@1008..1009 - EXPR_VAR@1008..1009 - NAME@1008..1009 - IDENT@1008..1009 "c" - R_PAREN@1009..1010 ")" - COMMA@1010..1011 "," - WHITESPACE@1011..1012 " " - ARG@1012..1021 - EXPR_VAR@1012..1021 - NAME@1012..1021 - IDENT@1012..1021 "maxsplits" - R_PAREN@1021..1022 ")" - R_PAREN@1022..1023 ")" - R_PAREN@1023..1024 ")" - COMMA@1024..1025 "," - WHITESPACE@1025..1029 "\n\n " - MEMBER_FIELD_METHOD@1029..1071 - FIELD_NAME_FIXED@1029..1034 - NAME@1029..1034 - IDENT@1029..1034 "split" - PARAMS_DESC@1034..1042 - L_PAREN@1034..1035 "(" - PARAM@1035..1038 - DESTRUCT_FULL@1035..1038 - NAME@1035..1038 - IDENT@1035..1038 "str" - COMMA@1038..1039 "," - WHITESPACE@1039..1040 " " - PARAM@1040..1041 - DESTRUCT_FULL@1040..1041 - NAME@1040..1041 - IDENT@1040..1041 "c" - R_PAREN@1041..1042 ")" - COLONCOLON@1042..1044 "::" - WHITESPACE@1044..1045 " " - EXPR_APPLY@1045..1071 - EXPR_INDEX@1045..1059 - EXPR_VAR@1045..1048 - NAME@1045..1048 - IDENT@1045..1048 "std" - DOT@1048..1049 "." - NAME@1049..1059 - IDENT@1049..1059 "splitLimit" - ARGS_DESC@1059..1071 - L_PAREN@1059..1060 "(" - ARG@1060..1063 - EXPR_VAR@1060..1063 - NAME@1060..1063 - IDENT@1060..1063 "str" - COMMA@1063..1064 "," - WHITESPACE@1064..1065 " " - ARG@1065..1066 - EXPR_VAR@1065..1066 - NAME@1065..1066 - IDENT@1065..1066 "c" - COMMA@1066..1067 "," - WHITESPACE@1067..1068 " " - ARG@1068..1070 - EXPR_UNARY@1068..1070 - MINUS@1068..1069 "-" - EXPR_NUMBER@1069..1070 - FLOAT@1069..1070 "1" - R_PAREN@1070..1071 ")" - COMMA@1071..1072 "," - WHITESPACE@1072..1076 "\n\n " - MEMBER_FIELD_METHOD@1076..1434 - FIELD_NAME_FIXED@1076..1088 - NAME@1076..1088 - IDENT@1076..1088 "mapWithIndex" - PARAMS_DESC@1088..1099 - L_PAREN@1088..1089 "(" - PARAM@1089..1093 - DESTRUCT_FULL@1089..1093 - NAME@1089..1093 - IDENT@1089..1093 "func" - COMMA@1093..1094 "," - WHITESPACE@1094..1095 " " - PARAM@1095..1098 - DESTRUCT_FULL@1095..1098 - NAME@1095..1098 - IDENT@1095..1098 "arr" - R_PAREN@1098..1099 ")" - COLONCOLON@1099..1101 "::" - WHITESPACE@1101..1106 "\n " - EXPR_IF_THEN_ELSE@1106..1434 - IF_KW@1106..1108 "if" - WHITESPACE@1108..1109 " " - EXPR_UNARY@1109..1130 - NOT@1109..1110 "!" - EXPR_APPLY@1110..1130 - EXPR_INDEX@1110..1124 - EXPR_VAR@1110..1113 - NAME@1110..1113 - IDENT@1110..1113 "std" - DOT@1113..1114 "." - NAME@1114..1124 - IDENT@1114..1124 "isFunction" - ARGS_DESC@1124..1130 - L_PAREN@1124..1125 "(" - ARG@1125..1129 - EXPR_VAR@1125..1129 - NAME@1125..1129 - IDENT@1125..1129 "func" - R_PAREN@1129..1130 ")" - WHITESPACE@1130..1131 " " - THEN_KW@1131..1135 "then" - WHITESPACE@1135..1142 "\n " - TRUE_EXPR@1142..1220 - EXPR_ERROR@1142..1220 - ERROR_KW@1142..1147 "error" - WHITESPACE@1147..1148 " " - EXPR_PARENED@1148..1220 - L_PAREN@1148..1149 "(" - EXPR_BINARY@1149..1219 - LHS_EXPR@1149..1202 - EXPR_STRING@1149..1202 - STRING_SINGLE@1149..1202 "'std.mapWithIndex fir ..." - WHITESPACE@1202..1203 " " - PLUS@1203..1204 "+" - WHITESPACE@1204..1205 " " - EXPR_APPLY@1205..1219 - EXPR_INDEX@1205..1213 - EXPR_VAR@1205..1208 - NAME@1205..1208 - IDENT@1205..1208 "std" - DOT@1208..1209 "." - NAME@1209..1213 - IDENT@1209..1213 "type" - ARGS_DESC@1213..1219 - L_PAREN@1213..1214 "(" - ARG@1214..1218 - EXPR_VAR@1214..1218 - NAME@1214..1218 - IDENT@1214..1218 "func" - R_PAREN@1218..1219 ")" - R_PAREN@1219..1220 ")" - WHITESPACE@1220..1225 "\n " - ELSE_KW@1225..1229 "else" - WHITESPACE@1229..1230 " " - FALSE_EXPR@1230..1434 - EXPR_IF_THEN_ELSE@1230..1434 - IF_KW@1230..1232 "if" - WHITESPACE@1232..1233 " " - EXPR_BINARY@1233..1272 - LHS_EXPR@1233..1250 - EXPR_UNARY@1233..1250 - NOT@1233..1234 "!" - EXPR_APPLY@1234..1250 - EXPR_INDEX@1234..1245 - EXPR_VAR@1234..1237 - NAME@1234..1237 - IDENT@1234..1237 "std" - DOT@1237..1238 "." - NAME@1238..1245 - IDENT@1238..1245 "isArray" - ARGS_DESC@1245..1250 - L_PAREN@1245..1246 "(" - ARG@1246..1249 - EXPR_VAR@1246..1249 - NAME@1246..1249 - IDENT@1246..1249 "arr" - R_PAREN@1249..1250 ")" - WHITESPACE@1250..1251 " " - AND@1251..1253 "&&" - WHITESPACE@1253..1254 " " - EXPR_UNARY@1254..1272 - NOT@1254..1255 "!" - EXPR_APPLY@1255..1272 - EXPR_INDEX@1255..1267 - EXPR_VAR@1255..1258 - NAME@1255..1258 - IDENT@1255..1258 "std" - DOT@1258..1259 "." - NAME@1259..1267 - IDENT@1259..1267 "isString" - ARGS_DESC@1267..1272 - L_PAREN@1267..1268 "(" - ARG@1268..1271 - EXPR_VAR@1268..1271 - NAME@1268..1271 - IDENT@1268..1271 "arr" - R_PAREN@1271..1272 ")" - WHITESPACE@1272..1273 " " - THEN_KW@1273..1277 "then" - WHITESPACE@1277..1284 "\n " - TRUE_EXPR@1284..1359 - EXPR_ERROR@1284..1359 - ERROR_KW@1284..1289 "error" - WHITESPACE@1289..1290 " " - EXPR_PARENED@1290..1359 - L_PAREN@1290..1291 "(" - EXPR_BINARY@1291..1358 - LHS_EXPR@1291..1342 - EXPR_STRING@1291..1342 - STRING_SINGLE@1291..1342 "'std.mapWithIndex sec ..." - WHITESPACE@1342..1343 " " - PLUS@1343..1344 "+" - WHITESPACE@1344..1345 " " - EXPR_APPLY@1345..1358 - EXPR_INDEX@1345..1353 - EXPR_VAR@1345..1348 - NAME@1345..1348 - IDENT@1345..1348 "std" - DOT@1348..1349 "." - NAME@1349..1353 - IDENT@1349..1353 "type" - ARGS_DESC@1353..1358 - L_PAREN@1353..1354 "(" - ARG@1354..1357 - EXPR_VAR@1354..1357 - NAME@1354..1357 - IDENT@1354..1357 "arr" - R_PAREN@1357..1358 ")" - R_PAREN@1358..1359 ")" - WHITESPACE@1359..1364 "\n " - ELSE_KW@1364..1368 "else" - WHITESPACE@1368..1375 "\n " - FALSE_EXPR@1375..1434 - EXPR_APPLY@1375..1434 - EXPR_INDEX@1375..1388 - EXPR_VAR@1375..1378 - NAME@1375..1378 - IDENT@1375..1378 "std" - DOT@1378..1379 "." - NAME@1379..1388 - IDENT@1379..1388 "makeArray" - ARGS_DESC@1388..1434 - L_PAREN@1388..1389 "(" - ARG@1389..1404 - EXPR_APPLY@1389..1404 - EXPR_INDEX@1389..1399 - EXPR_VAR@1389..1392 - NAME@1389..1392 - IDENT@1389..1392 "std" - DOT@1392..1393 "." - NAME@1393..1399 - IDENT@1393..1399 "length" - ARGS_DESC@1399..1404 - L_PAREN@1399..1400 "(" - ARG@1400..1403 - EXPR_VAR@1400..1403 - NAME@1400..1403 - IDENT@1400..1403 "arr" - R_PAREN@1403..1404 ")" - COMMA@1404..1405 "," + R_PAREN@920..921 ")" + COMMA@921..922 "," + WHITESPACE@922..926 "\n\n " + MEMBER_FIELD_METHOD@926..968 + FIELD_NAME_FIXED@926..931 + NAME@926..931 + IDENT@926..931 "split" + PARAMS_DESC@931..939 + L_PAREN@931..932 "(" + PARAM@932..935 + DESTRUCT_FULL@932..935 + NAME@932..935 + IDENT@932..935 "str" + COMMA@935..936 "," + WHITESPACE@936..937 " " + PARAM@937..938 + DESTRUCT_FULL@937..938 + NAME@937..938 + IDENT@937..938 "c" + R_PAREN@938..939 ")" + COLONCOLON@939..941 "::" + WHITESPACE@941..942 " " + EXPR@942..968 + EXPR_VAR@942..945 + NAME@942..945 + IDENT@942..945 "std" + SUFFIX_INDEX@945..956 + DOT@945..946 "." + NAME@946..956 + IDENT@946..956 "splitLimit" + SUFFIX_APPLY@956..968 + ARGS_DESC@956..968 + L_PAREN@956..957 "(" + ARG@957..960 + EXPR@957..960 + EXPR_VAR@957..960 + NAME@957..960 + IDENT@957..960 "str" + COMMA@960..961 "," + WHITESPACE@961..962 " " + ARG@962..963 + EXPR@962..963 + EXPR_VAR@962..963 + NAME@962..963 + IDENT@962..963 "c" + COMMA@963..964 "," + WHITESPACE@964..965 " " + ARG@965..967 + EXPR@965..967 + EXPR_UNARY@965..967 + MINUS@965..966 "-" + EXPR_NUMBER@966..967 + FLOAT@966..967 "1" + R_PAREN@967..968 ")" + COMMA@968..969 "," + WHITESPACE@969..973 "\n\n " + MEMBER_FIELD_METHOD@973..1331 + FIELD_NAME_FIXED@973..985 + NAME@973..985 + IDENT@973..985 "mapWithIndex" + PARAMS_DESC@985..996 + L_PAREN@985..986 "(" + PARAM@986..990 + DESTRUCT_FULL@986..990 + NAME@986..990 + IDENT@986..990 "func" + COMMA@990..991 "," + WHITESPACE@991..992 " " + PARAM@992..995 + DESTRUCT_FULL@992..995 + NAME@992..995 + IDENT@992..995 "arr" + R_PAREN@995..996 ")" + COLONCOLON@996..998 "::" + WHITESPACE@998..1003 "\n " + EXPR@1003..1331 + EXPR_IF_THEN_ELSE@1003..1331 + IF_KW@1003..1005 "if" + WHITESPACE@1005..1006 " " + EXPR@1006..1027 + EXPR_UNARY@1006..1027 + NOT@1006..1007 "!" + EXPR_VAR@1007..1010 + NAME@1007..1010 + IDENT@1007..1010 "std" + SUFFIX_INDEX@1010..1021 + DOT@1010..1011 "." + NAME@1011..1021 + IDENT@1011..1021 "isFunction" + SUFFIX_APPLY@1021..1027 + ARGS_DESC@1021..1027 + L_PAREN@1021..1022 "(" + ARG@1022..1026 + EXPR@1022..1026 + EXPR_VAR@1022..1026 + NAME@1022..1026 + IDENT@1022..1026 "func" + R_PAREN@1026..1027 ")" + WHITESPACE@1027..1028 " " + THEN_KW@1028..1032 "then" + WHITESPACE@1032..1039 "\n " + TRUE_EXPR@1039..1117 + EXPR@1039..1117 + EXPR_ERROR@1039..1117 + ERROR_KW@1039..1044 "error" + WHITESPACE@1044..1045 " " + EXPR@1045..1117 + EXPR_PARENED@1045..1117 + L_PAREN@1045..1046 "(" + EXPR@1046..1116 + EXPR_BINARY@1046..1116 + EXPR@1046..1099 + EXPR_STRING@1046..1099 + STRING_SINGLE@1046..1099 "'std.mapWithIndex fir ..." + WHITESPACE@1099..1100 " " + PLUS@1100..1101 "+" + WHITESPACE@1101..1102 " " + EXPR@1102..1116 + EXPR_VAR@1102..1105 + NAME@1102..1105 + IDENT@1102..1105 "std" + SUFFIX_INDEX@1105..1110 + DOT@1105..1106 "." + NAME@1106..1110 + IDENT@1106..1110 "type" + SUFFIX_APPLY@1110..1116 + ARGS_DESC@1110..1116 + L_PAREN@1110..1111 "(" + ARG@1111..1115 + EXPR@1111..1115 + EXPR_VAR@1111..1115 + NAME@1111..1115 + IDENT@1111..1115 "func" + R_PAREN@1115..1116 ")" + R_PAREN@1116..1117 ")" + WHITESPACE@1117..1122 "\n " + ELSE_KW@1122..1126 "else" + WHITESPACE@1126..1127 " " + FALSE_EXPR@1127..1331 + EXPR@1127..1331 + EXPR_IF_THEN_ELSE@1127..1331 + IF_KW@1127..1129 "if" + WHITESPACE@1129..1130 " " + EXPR@1130..1169 + EXPR_BINARY@1130..1169 + EXPR@1130..1147 + EXPR_UNARY@1130..1147 + NOT@1130..1131 "!" + EXPR_VAR@1131..1134 + NAME@1131..1134 + IDENT@1131..1134 "std" + SUFFIX_INDEX@1134..1142 + DOT@1134..1135 "." + NAME@1135..1142 + IDENT@1135..1142 "isArray" + SUFFIX_APPLY@1142..1147 + ARGS_DESC@1142..1147 + L_PAREN@1142..1143 "(" + ARG@1143..1146 + EXPR@1143..1146 + EXPR_VAR@1143..1146 + NAME@1143..1146 + IDENT@1143..1146 "arr" + R_PAREN@1146..1147 ")" + WHITESPACE@1147..1148 " " + AND@1148..1150 "&&" + WHITESPACE@1150..1151 " " + EXPR@1151..1169 + EXPR_UNARY@1151..1169 + NOT@1151..1152 "!" + EXPR_VAR@1152..1155 + NAME@1152..1155 + IDENT@1152..1155 "std" + SUFFIX_INDEX@1155..1164 + DOT@1155..1156 "." + NAME@1156..1164 + IDENT@1156..1164 "isString" + SUFFIX_APPLY@1164..1169 + ARGS_DESC@1164..1169 + L_PAREN@1164..1165 "(" + ARG@1165..1168 + EXPR@1165..1168 + EXPR_VAR@1165..1168 + NAME@1165..1168 + IDENT@1165..1168 "arr" + R_PAREN@1168..1169 ")" + WHITESPACE@1169..1170 " " + THEN_KW@1170..1174 "then" + WHITESPACE@1174..1181 "\n " + TRUE_EXPR@1181..1256 + EXPR@1181..1256 + EXPR_ERROR@1181..1256 + ERROR_KW@1181..1186 "error" + WHITESPACE@1186..1187 " " + EXPR@1187..1256 + EXPR_PARENED@1187..1256 + L_PAREN@1187..1188 "(" + EXPR@1188..1255 + EXPR_BINARY@1188..1255 + EXPR@1188..1239 + EXPR_STRING@1188..1239 + STRING_SINGLE@1188..1239 "'std.mapWithIndex sec ..." + WHITESPACE@1239..1240 " " + PLUS@1240..1241 "+" + WHITESPACE@1241..1242 " " + EXPR@1242..1255 + EXPR_VAR@1242..1245 + NAME@1242..1245 + IDENT@1242..1245 "std" + SUFFIX_INDEX@1245..1250 + DOT@1245..1246 "." + NAME@1246..1250 + IDENT@1246..1250 "type" + SUFFIX_APPLY@1250..1255 + ARGS_DESC@1250..1255 + L_PAREN@1250..1251 "(" + ARG@1251..1254 + EXPR@1251..1254 + EXPR_VAR@1251..1254 + NAME@1251..1254 + IDENT@1251..1254 "arr" + R_PAREN@1254..1255 ")" + R_PAREN@1255..1256 ")" + WHITESPACE@1256..1261 "\n " + ELSE_KW@1261..1265 "else" + WHITESPACE@1265..1272 "\n " + FALSE_EXPR@1272..1331 + EXPR@1272..1331 + EXPR_VAR@1272..1275 + NAME@1272..1275 + IDENT@1272..1275 "std" + SUFFIX_INDEX@1275..1285 + DOT@1275..1276 "." + NAME@1276..1285 + IDENT@1276..1285 "makeArray" + SUFFIX_APPLY@1285..1331 + ARGS_DESC@1285..1331 + L_PAREN@1285..1286 "(" + ARG@1286..1301 + EXPR@1286..1301 + EXPR_VAR@1286..1289 + NAME@1286..1289 + IDENT@1286..1289 "std" + SUFFIX_INDEX@1289..1296 + DOT@1289..1290 "." + NAME@1290..1296 + IDENT@1290..1296 "length" + SUFFIX_APPLY@1296..1301 + ARGS_DESC@1296..1301 + L_PAREN@1296..1297 "(" + ARG@1297..1300 + EXPR@1297..1300 + EXPR_VAR@1297..1300 + NAME@1297..1300 + IDENT@1297..1300 "arr" + R_PAREN@1300..1301 ")" + COMMA@1301..1302 "," + WHITESPACE@1302..1303 " " + ARG@1303..1330 + EXPR@1303..1330 + EXPR_FUNCTION@1303..1330 + FUNCTION_KW@1303..1311 "function" + PARAMS_DESC@1311..1314 + L_PAREN@1311..1312 "(" + PARAM@1312..1313 + DESTRUCT_FULL@1312..1313 + NAME@1312..1313 + IDENT@1312..1313 "i" + R_PAREN@1313..1314 ")" + WHITESPACE@1314..1315 " " + EXPR@1315..1330 + EXPR_VAR@1315..1319 + NAME@1315..1319 + IDENT@1315..1319 "func" + SUFFIX_APPLY@1319..1330 + ARGS_DESC@1319..1330 + L_PAREN@1319..1320 "(" + ARG@1320..1321 + EXPR@1320..1321 + EXPR_VAR@1320..1321 + NAME@1320..1321 + IDENT@1320..1321 "i" + COMMA@1321..1322 "," + WHITESPACE@1322..1323 " " + ARG@1323..1329 + EXPR@1323..1329 + EXPR_VAR@1323..1326 + NAME@1323..1326 + IDENT@1323..1326 "arr" + SUFFIX_INDEX_EXPR@1326..1329 + L_BRACK@1326..1327 "[" + EXPR@1327..1328 + EXPR_VAR@1327..1328 + NAME@1327..1328 + IDENT@1327..1328 "i" + R_BRACK@1328..1329 "]" + R_PAREN@1329..1330 ")" + R_PAREN@1330..1331 ")" + COMMA@1331..1332 "," + WHITESPACE@1332..1336 "\n\n " + MEMBER_FIELD_METHOD@1336..1664 + FIELD_NAME_FIXED@1336..1346 + NAME@1336..1346 + IDENT@1336..1346 "mapWithKey" + PARAMS_DESC@1346..1357 + L_PAREN@1346..1347 "(" + PARAM@1347..1351 + DESTRUCT_FULL@1347..1351 + NAME@1347..1351 + IDENT@1347..1351 "func" + COMMA@1351..1352 "," + WHITESPACE@1352..1353 " " + PARAM@1353..1356 + DESTRUCT_FULL@1353..1356 + NAME@1353..1356 + IDENT@1353..1356 "obj" + R_PAREN@1356..1357 ")" + COLONCOLON@1357..1359 "::" + WHITESPACE@1359..1364 "\n " + EXPR@1364..1664 + EXPR_IF_THEN_ELSE@1364..1664 + IF_KW@1364..1366 "if" + WHITESPACE@1366..1367 " " + EXPR@1367..1388 + EXPR_UNARY@1367..1388 + NOT@1367..1368 "!" + EXPR_VAR@1368..1371 + NAME@1368..1371 + IDENT@1368..1371 "std" + SUFFIX_INDEX@1371..1382 + DOT@1371..1372 "." + NAME@1372..1382 + IDENT@1372..1382 "isFunction" + SUFFIX_APPLY@1382..1388 + ARGS_DESC@1382..1388 + L_PAREN@1382..1383 "(" + ARG@1383..1387 + EXPR@1383..1387 + EXPR_VAR@1383..1387 + NAME@1383..1387 + IDENT@1383..1387 "func" + R_PAREN@1387..1388 ")" + WHITESPACE@1388..1389 " " + THEN_KW@1389..1393 "then" + WHITESPACE@1393..1400 "\n " + TRUE_EXPR@1400..1476 + EXPR@1400..1476 + EXPR_ERROR@1400..1476 + ERROR_KW@1400..1405 "error" WHITESPACE@1405..1406 " " - ARG@1406..1433 - EXPR_FUNCTION@1406..1433 - FUNCTION_KW@1406..1414 "function" - PARAMS_DESC@1414..1417 - L_PAREN@1414..1415 "(" - PARAM@1415..1416 - DESTRUCT_FULL@1415..1416 - NAME@1415..1416 - IDENT@1415..1416 "i" - R_PAREN@1416..1417 ")" - WHITESPACE@1417..1418 " " - EXPR_APPLY@1418..1433 - EXPR_VAR@1418..1422 - NAME@1418..1422 - IDENT@1418..1422 "func" - ARGS_DESC@1422..1433 - L_PAREN@1422..1423 "(" - ARG@1423..1424 - EXPR_VAR@1423..1424 - NAME@1423..1424 - IDENT@1423..1424 "i" - COMMA@1424..1425 "," - WHITESPACE@1425..1426 " " - ARG@1426..1432 - EXPR_INDEX_EXPR@1426..1432 - LHS_EXPR@1426..1429 - EXPR_VAR@1426..1429 - NAME@1426..1429 - IDENT@1426..1429 "arr" - L_BRACK@1429..1430 "[" - EXPR_VAR@1430..1431 - NAME@1430..1431 - IDENT@1430..1431 "i" - R_BRACK@1431..1432 "]" - R_PAREN@1432..1433 ")" - R_PAREN@1433..1434 ")" - COMMA@1434..1435 "," - WHITESPACE@1435..1439 "\n\n " - MEMBER_FIELD_METHOD@1439..1767 - FIELD_NAME_FIXED@1439..1449 - NAME@1439..1449 - IDENT@1439..1449 "mapWithKey" - PARAMS_DESC@1449..1460 - L_PAREN@1449..1450 "(" - PARAM@1450..1454 - DESTRUCT_FULL@1450..1454 - NAME@1450..1454 - IDENT@1450..1454 "func" - COMMA@1454..1455 "," - WHITESPACE@1455..1456 " " - PARAM@1456..1459 - DESTRUCT_FULL@1456..1459 - NAME@1456..1459 - IDENT@1456..1459 "obj" - R_PAREN@1459..1460 ")" - COLONCOLON@1460..1462 "::" - WHITESPACE@1462..1467 "\n " - EXPR_IF_THEN_ELSE@1467..1767 - IF_KW@1467..1469 "if" - WHITESPACE@1469..1470 " " - EXPR_UNARY@1470..1491 - NOT@1470..1471 "!" - EXPR_APPLY@1471..1491 - EXPR_INDEX@1471..1485 - EXPR_VAR@1471..1474 - NAME@1471..1474 - IDENT@1471..1474 "std" - DOT@1474..1475 "." - NAME@1475..1485 - IDENT@1475..1485 "isFunction" - ARGS_DESC@1485..1491 - L_PAREN@1485..1486 "(" - ARG@1486..1490 - EXPR_VAR@1486..1490 - NAME@1486..1490 - IDENT@1486..1490 "func" - R_PAREN@1490..1491 ")" - WHITESPACE@1491..1492 " " - THEN_KW@1492..1496 "then" - WHITESPACE@1496..1503 "\n " - TRUE_EXPR@1503..1579 - EXPR_ERROR@1503..1579 - ERROR_KW@1503..1508 "error" - WHITESPACE@1508..1509 " " - EXPR_PARENED@1509..1579 - L_PAREN@1509..1510 "(" - EXPR_BINARY@1510..1578 - LHS_EXPR@1510..1561 - EXPR_STRING@1510..1561 - STRING_SINGLE@1510..1561 "'std.mapWithKey first ..." - WHITESPACE@1561..1562 " " - PLUS@1562..1563 "+" - WHITESPACE@1563..1564 " " - EXPR_APPLY@1564..1578 - EXPR_INDEX@1564..1572 - EXPR_VAR@1564..1567 - NAME@1564..1567 - IDENT@1564..1567 "std" - DOT@1567..1568 "." - NAME@1568..1572 - IDENT@1568..1572 "type" - ARGS_DESC@1572..1578 - L_PAREN@1572..1573 "(" - ARG@1573..1577 - EXPR_VAR@1573..1577 - NAME@1573..1577 - IDENT@1573..1577 "func" - R_PAREN@1577..1578 ")" - R_PAREN@1578..1579 ")" - WHITESPACE@1579..1584 "\n " - ELSE_KW@1584..1588 "else" - WHITESPACE@1588..1589 " " - FALSE_EXPR@1589..1767 - EXPR_IF_THEN_ELSE@1589..1767 - IF_KW@1589..1591 "if" - WHITESPACE@1591..1592 " " - EXPR_UNARY@1592..1610 - NOT@1592..1593 "!" - EXPR_APPLY@1593..1610 - EXPR_INDEX@1593..1605 - EXPR_VAR@1593..1596 - NAME@1593..1596 - IDENT@1593..1596 "std" - DOT@1596..1597 "." - NAME@1597..1605 - IDENT@1597..1605 "isObject" - ARGS_DESC@1605..1610 - L_PAREN@1605..1606 "(" - ARG@1606..1609 - EXPR_VAR@1606..1609 - NAME@1606..1609 - IDENT@1606..1609 "obj" - R_PAREN@1609..1610 ")" - WHITESPACE@1610..1611 " " - THEN_KW@1611..1615 "then" - WHITESPACE@1615..1622 "\n " - TRUE_EXPR@1622..1696 - EXPR_ERROR@1622..1696 - ERROR_KW@1622..1627 "error" - WHITESPACE@1627..1628 " " - EXPR_PARENED@1628..1696 - L_PAREN@1628..1629 "(" - EXPR_BINARY@1629..1695 - LHS_EXPR@1629..1679 - EXPR_STRING@1629..1679 - STRING_SINGLE@1629..1679 "'std.mapWithKey secon ..." - WHITESPACE@1679..1680 " " - PLUS@1680..1681 "+" - WHITESPACE@1681..1682 " " - EXPR_APPLY@1682..1695 - EXPR_INDEX@1682..1690 - EXPR_VAR@1682..1685 - NAME@1682..1685 - IDENT@1682..1685 "std" - DOT@1685..1686 "." - NAME@1686..1690 - IDENT@1686..1690 "type" - ARGS_DESC@1690..1695 - L_PAREN@1690..1691 "(" - ARG@1691..1694 - EXPR_VAR@1691..1694 - NAME@1691..1694 - IDENT@1691..1694 "obj" - R_PAREN@1694..1695 ")" - R_PAREN@1695..1696 ")" - WHITESPACE@1696..1701 "\n " - ELSE_KW@1701..1705 "else" - WHITESPACE@1705..1712 "\n " - FALSE_EXPR@1712..1767 - EXPR_OBJECT@1712..1767 - OBJ_BODY_COMP@1712..1767 - L_BRACE@1712..1713 "{" - WHITESPACE@1713..1714 " " - MEMBER_FIELD_NORMAL@1714..1734 - FIELD_NAME_DYNAMIC@1714..1717 - L_BRACK@1714..1715 "[" - EXPR_VAR@1715..1716 - NAME@1715..1716 - IDENT@1715..1716 "k" - R_BRACK@1716..1717 "]" - COLON@1717..1718 ":" - WHITESPACE@1718..1719 " " - EXPR_APPLY@1719..1734 - EXPR_VAR@1719..1723 - NAME@1719..1723 - IDENT@1719..1723 "func" - ARGS_DESC@1723..1734 - L_PAREN@1723..1724 "(" - ARG@1724..1725 - EXPR_VAR@1724..1725 - NAME@1724..1725 - IDENT@1724..1725 "k" - COMMA@1725..1726 "," - WHITESPACE@1726..1727 " " - ARG@1727..1733 - EXPR_INDEX_EXPR@1727..1733 - LHS_EXPR@1727..1730 - EXPR_VAR@1727..1730 - NAME@1727..1730 - IDENT@1727..1730 "obj" - L_BRACK@1730..1731 "[" - EXPR_VAR@1731..1732 - NAME@1731..1732 - IDENT@1731..1732 "k" - R_BRACK@1732..1733 "]" - R_PAREN@1733..1734 ")" - WHITESPACE@1734..1735 " " - FOR_SPEC@1735..1765 - FOR_KW@1735..1738 "for" - WHITESPACE@1738..1739 " " - NAME@1739..1740 - IDENT@1739..1740 "k" - WHITESPACE@1740..1741 " " - IN_KW@1741..1743 "in" - WHITESPACE@1743..1744 " " - EXPR_APPLY@1744..1765 - EXPR_INDEX@1744..1760 - EXPR_VAR@1744..1747 - NAME@1744..1747 - IDENT@1744..1747 "std" - DOT@1747..1748 "." - NAME@1748..1760 - IDENT@1748..1760 "objectFields" - ARGS_DESC@1760..1765 - L_PAREN@1760..1761 "(" - ARG@1761..1764 - EXPR_VAR@1761..1764 - NAME@1761..1764 - IDENT@1761..1764 "obj" - R_PAREN@1764..1765 ")" - WHITESPACE@1765..1766 " " - R_BRACE@1766..1767 "}" - COMMA@1767..1768 "," - WHITESPACE@1768..1772 "\n\n " - MEMBER_FIELD_METHOD@1772..1815 - FIELD_NAME_FIXED@1772..1777 - NAME@1772..1777 - IDENT@1772..1777 "lines" - PARAMS_DESC@1777..1782 - L_PAREN@1777..1778 "(" - PARAM@1778..1781 - DESTRUCT_FULL@1778..1781 - NAME@1778..1781 - IDENT@1778..1781 "arr" - R_PAREN@1781..1782 ")" - COLONCOLON@1782..1784 "::" - WHITESPACE@1784..1789 "\n " - EXPR_APPLY@1789..1815 - EXPR_INDEX@1789..1797 - EXPR_VAR@1789..1792 - NAME@1789..1792 - IDENT@1789..1792 "std" - DOT@1792..1793 "." - NAME@1793..1797 - IDENT@1793..1797 "join" - ARGS_DESC@1797..1815 - L_PAREN@1797..1798 "(" - ARG@1798..1802 - EXPR_STRING@1798..1802 - STRING_SINGLE@1798..1802 "'\\n'" - COMMA@1802..1803 "," - WHITESPACE@1803..1804 " " - ARG@1804..1814 - EXPR_BINARY@1804..1814 - LHS_EXPR@1804..1807 - EXPR_VAR@1804..1807 - NAME@1804..1807 - IDENT@1804..1807 "arr" - WHITESPACE@1807..1808 " " - PLUS@1808..1809 "+" - WHITESPACE@1809..1810 " " - EXPR_ARRAY@1810..1814 - L_BRACK@1810..1811 "[" - EXPR_STRING@1811..1813 - STRING_SINGLE@1811..1813 "''" - R_BRACK@1813..1814 "]" - R_PAREN@1814..1815 ")" - COMMA@1815..1816 "," - WHITESPACE@1816..1820 "\n\n " - MEMBER_FIELD_METHOD@1820..2032 - FIELD_NAME_FIXED@1820..1828 - NAME@1820..1828 - IDENT@1820..1828 "deepJoin" - PARAMS_DESC@1828..1833 - L_PAREN@1828..1829 "(" - PARAM@1829..1832 - DESTRUCT_FULL@1829..1832 - NAME@1829..1832 - IDENT@1829..1832 "arr" - R_PAREN@1832..1833 ")" - COLONCOLON@1833..1835 "::" - WHITESPACE@1835..1840 "\n " - EXPR_IF_THEN_ELSE@1840..2032 - IF_KW@1840..1842 "if" - WHITESPACE@1842..1843 " " - EXPR_APPLY@1843..1860 - EXPR_INDEX@1843..1855 - EXPR_VAR@1843..1846 - NAME@1843..1846 - IDENT@1843..1846 "std" - DOT@1846..1847 "." - NAME@1847..1855 - IDENT@1847..1855 "isString" - ARGS_DESC@1855..1860 - L_PAREN@1855..1856 "(" - ARG@1856..1859 - EXPR_VAR@1856..1859 - NAME@1856..1859 - IDENT@1856..1859 "arr" - R_PAREN@1859..1860 ")" - WHITESPACE@1860..1861 " " - THEN_KW@1861..1865 "then" - WHITESPACE@1865..1872 "\n " - TRUE_EXPR@1872..1875 - EXPR_VAR@1872..1875 - NAME@1872..1875 - IDENT@1872..1875 "arr" - WHITESPACE@1875..1880 "\n " - ELSE_KW@1880..1884 "else" - WHITESPACE@1884..1885 " " - FALSE_EXPR@1885..2032 - EXPR_IF_THEN_ELSE@1885..2032 - IF_KW@1885..1887 "if" - WHITESPACE@1887..1888 " " - EXPR_APPLY@1888..1904 - EXPR_INDEX@1888..1899 - EXPR_VAR@1888..1891 - NAME@1888..1891 - IDENT@1888..1891 "std" - DOT@1891..1892 "." - NAME@1892..1899 - IDENT@1892..1899 "isArray" - ARGS_DESC@1899..1904 - L_PAREN@1899..1900 "(" - ARG@1900..1903 - EXPR_VAR@1900..1903 - NAME@1900..1903 - IDENT@1900..1903 "arr" - R_PAREN@1903..1904 ")" - WHITESPACE@1904..1905 " " - THEN_KW@1905..1909 "then" - WHITESPACE@1909..1916 "\n " - TRUE_EXPR@1916..1960 - EXPR_APPLY@1916..1960 - EXPR_INDEX@1916..1924 - EXPR_VAR@1916..1919 - NAME@1916..1919 - IDENT@1916..1919 "std" - DOT@1919..1920 "." - NAME@1920..1924 - IDENT@1920..1924 "join" - ARGS_DESC@1924..1960 - L_PAREN@1924..1925 "(" - ARG@1925..1927 - EXPR_STRING@1925..1927 - STRING_SINGLE@1925..1927 "''" - COMMA@1927..1928 "," - WHITESPACE@1928..1929 " " - ARG@1929..1959 - EXPR_ARRAY_COMP@1929..1959 - L_BRACK@1929..1930 "[" - EXPR_APPLY@1930..1945 - EXPR_INDEX@1930..1942 - EXPR_VAR@1930..1933 - NAME@1930..1933 - IDENT@1930..1933 "std" - DOT@1933..1934 "." - NAME@1934..1942 - IDENT@1934..1942 "deepJoin" - ARGS_DESC@1942..1945 - L_PAREN@1942..1943 "(" - ARG@1943..1944 - EXPR_VAR@1943..1944 - NAME@1943..1944 - IDENT@1943..1944 "x" - R_PAREN@1944..1945 ")" - WHITESPACE@1945..1946 " " - FOR_SPEC@1946..1958 - FOR_KW@1946..1949 "for" - WHITESPACE@1949..1950 " " - NAME@1950..1951 - IDENT@1950..1951 "x" - WHITESPACE@1951..1952 " " - IN_KW@1952..1954 "in" - WHITESPACE@1954..1955 " " - EXPR_VAR@1955..1958 - NAME@1955..1958 - IDENT@1955..1958 "arr" - R_BRACK@1958..1959 "]" - R_PAREN@1959..1960 ")" - WHITESPACE@1960..1965 "\n " - ELSE_KW@1965..1969 "else" - WHITESPACE@1969..1976 "\n " - FALSE_EXPR@1976..2032 - EXPR_ERROR@1976..2032 - ERROR_KW@1976..1981 "error" - WHITESPACE@1981..1982 " " - EXPR_BINARY@1982..2032 - LHS_EXPR@1982..2016 - EXPR_STRING@1982..2016 - STRING_SINGLE@1982..2016 "'Expected string or a ..." - WHITESPACE@2016..2017 " " - MODULO@2017..2018 "%" - WHITESPACE@2018..2019 " " - EXPR_APPLY@2019..2032 - EXPR_INDEX@2019..2027 - EXPR_VAR@2019..2022 - NAME@2019..2022 - IDENT@2019..2022 "std" - DOT@2022..2023 "." - NAME@2023..2027 - IDENT@2023..2027 "type" - ARGS_DESC@2027..2032 - L_PAREN@2027..2028 "(" - ARG@2028..2031 - EXPR_VAR@2028..2031 - NAME@2028..2031 - IDENT@2028..2031 "arr" - R_PAREN@2031..2032 ")" - COMMA@2032..2033 "," - WHITESPACE@2033..2037 "\n\n " - MEMBER_FIELD_METHOD@2037..2512 - FIELD_NAME_FIXED@2037..2046 - NAME@2037..2046 - IDENT@2037..2046 "filterMap" - PARAMS_DESC@2046..2074 - L_PAREN@2046..2047 "(" - PARAM@2047..2058 - DESTRUCT_FULL@2047..2058 - NAME@2047..2058 - IDENT@2047..2058 "filter_func" - COMMA@2058..2059 "," - WHITESPACE@2059..2060 " " - PARAM@2060..2068 - DESTRUCT_FULL@2060..2068 - NAME@2060..2068 - IDENT@2060..2068 "map_func" - COMMA@2068..2069 "," - WHITESPACE@2069..2070 " " - PARAM@2070..2073 - DESTRUCT_FULL@2070..2073 - NAME@2070..2073 - IDENT@2070..2073 "arr" - R_PAREN@2073..2074 ")" - COLONCOLON@2074..2076 "::" - WHITESPACE@2076..2081 "\n " - EXPR_IF_THEN_ELSE@2081..2512 - IF_KW@2081..2083 "if" - WHITESPACE@2083..2084 " " - EXPR_UNARY@2084..2112 - NOT@2084..2085 "!" - EXPR_APPLY@2085..2112 - EXPR_INDEX@2085..2099 - EXPR_VAR@2085..2088 - NAME@2085..2088 - IDENT@2085..2088 "std" - DOT@2088..2089 "." - NAME@2089..2099 - IDENT@2089..2099 "isFunction" - ARGS_DESC@2099..2112 - L_PAREN@2099..2100 "(" - ARG@2100..2111 - EXPR_VAR@2100..2111 - NAME@2100..2111 - IDENT@2100..2111 "filter_func" - R_PAREN@2111..2112 ")" - WHITESPACE@2112..2113 " " - THEN_KW@2113..2117 "then" - WHITESPACE@2117..2124 "\n " - TRUE_EXPR@2124..2206 - EXPR_ERROR@2124..2206 - ERROR_KW@2124..2129 "error" - WHITESPACE@2129..2130 " " - EXPR_PARENED@2130..2206 - L_PAREN@2130..2131 "(" - EXPR_BINARY@2131..2205 - LHS_EXPR@2131..2181 - EXPR_STRING@2131..2181 - STRING_SINGLE@2131..2181 "'std.filterMap first ..." - WHITESPACE@2181..2182 " " - PLUS@2182..2183 "+" - WHITESPACE@2183..2184 " " - EXPR_APPLY@2184..2205 - EXPR_INDEX@2184..2192 - EXPR_VAR@2184..2187 - NAME@2184..2187 - IDENT@2184..2187 "std" - DOT@2187..2188 "." - NAME@2188..2192 - IDENT@2188..2192 "type" - ARGS_DESC@2192..2205 - L_PAREN@2192..2193 "(" - ARG@2193..2204 - EXPR_VAR@2193..2204 - NAME@2193..2204 - IDENT@2193..2204 "filter_func" - R_PAREN@2204..2205 ")" - R_PAREN@2205..2206 ")" - WHITESPACE@2206..2211 "\n " - ELSE_KW@2211..2215 "else" - WHITESPACE@2215..2216 " " - FALSE_EXPR@2216..2512 - EXPR_IF_THEN_ELSE@2216..2512 - IF_KW@2216..2218 "if" - WHITESPACE@2218..2219 " " - EXPR_UNARY@2219..2244 - NOT@2219..2220 "!" - EXPR_APPLY@2220..2244 - EXPR_INDEX@2220..2234 - EXPR_VAR@2220..2223 - NAME@2220..2223 - IDENT@2220..2223 "std" - DOT@2223..2224 "." - NAME@2224..2234 - IDENT@2224..2234 "isFunction" - ARGS_DESC@2234..2244 - L_PAREN@2234..2235 "(" - ARG@2235..2243 - EXPR_VAR@2235..2243 - NAME@2235..2243 - IDENT@2235..2243 "map_func" - R_PAREN@2243..2244 ")" - WHITESPACE@2244..2245 " " - THEN_KW@2245..2249 "then" - WHITESPACE@2249..2256 "\n " - TRUE_EXPR@2256..2336 - EXPR_ERROR@2256..2336 - ERROR_KW@2256..2261 "error" - WHITESPACE@2261..2262 " " - EXPR_PARENED@2262..2336 - L_PAREN@2262..2263 "(" - EXPR_BINARY@2263..2335 - LHS_EXPR@2263..2314 - EXPR_STRING@2263..2314 - STRING_SINGLE@2263..2314 "'std.filterMap second ..." - WHITESPACE@2314..2315 " " - PLUS@2315..2316 "+" - WHITESPACE@2316..2317 " " - EXPR_APPLY@2317..2335 - EXPR_INDEX@2317..2325 - EXPR_VAR@2317..2320 - NAME@2317..2320 - IDENT@2317..2320 "std" - DOT@2320..2321 "." - NAME@2321..2325 - IDENT@2321..2325 "type" - ARGS_DESC@2325..2335 - L_PAREN@2325..2326 "(" - ARG@2326..2334 - EXPR_VAR@2326..2334 - NAME@2326..2334 - IDENT@2326..2334 "map_func" - R_PAREN@2334..2335 ")" - R_PAREN@2335..2336 ")" - WHITESPACE@2336..2341 "\n " - ELSE_KW@2341..2345 "else" - WHITESPACE@2345..2346 " " - FALSE_EXPR@2346..2512 - EXPR_IF_THEN_ELSE@2346..2512 - IF_KW@2346..2348 "if" - WHITESPACE@2348..2349 " " - EXPR_UNARY@2349..2366 - NOT@2349..2350 "!" - EXPR_APPLY@2350..2366 - EXPR_INDEX@2350..2361 - EXPR_VAR@2350..2353 - NAME@2350..2353 - IDENT@2350..2353 "std" - DOT@2353..2354 "." - NAME@2354..2361 - IDENT@2354..2361 "isArray" - ARGS_DESC@2361..2366 - L_PAREN@2361..2362 "(" - ARG@2362..2365 - EXPR_VAR@2362..2365 - NAME@2362..2365 - IDENT@2362..2365 "arr" - R_PAREN@2365..2366 ")" - WHITESPACE@2366..2367 " " - THEN_KW@2367..2371 "then" - WHITESPACE@2371..2378 "\n " - TRUE_EXPR@2378..2449 - EXPR_ERROR@2378..2449 - ERROR_KW@2378..2383 "error" - WHITESPACE@2383..2384 " " - EXPR_PARENED@2384..2449 - L_PAREN@2384..2385 "(" - EXPR_BINARY@2385..2448 - LHS_EXPR@2385..2432 - EXPR_STRING@2385..2432 - STRING_SINGLE@2385..2432 "'std.filterMap third ..." - WHITESPACE@2432..2433 " " - PLUS@2433..2434 "+" - WHITESPACE@2434..2435 " " - EXPR_APPLY@2435..2448 - EXPR_INDEX@2435..2443 - EXPR_VAR@2435..2438 - NAME@2435..2438 - IDENT@2435..2438 "std" - DOT@2438..2439 "." - NAME@2439..2443 - IDENT@2439..2443 "type" - ARGS_DESC@2443..2448 - L_PAREN@2443..2444 "(" - ARG@2444..2447 - EXPR_VAR@2444..2447 - NAME@2444..2447 - IDENT@2444..2447 "arr" - R_PAREN@2447..2448 ")" - R_PAREN@2448..2449 ")" - WHITESPACE@2449..2454 "\n " - ELSE_KW@2454..2458 "else" - WHITESPACE@2458..2465 "\n " - FALSE_EXPR@2465..2512 - EXPR_APPLY@2465..2512 - EXPR_INDEX@2465..2472 - EXPR_VAR@2465..2468 - NAME@2465..2468 - IDENT@2465..2468 "std" - DOT@2468..2469 "." - NAME@2469..2472 - IDENT@2469..2472 "map" - ARGS_DESC@2472..2512 - L_PAREN@2472..2473 "(" - ARG@2473..2481 - EXPR_VAR@2473..2481 - NAME@2473..2481 - IDENT@2473..2481 "map_func" - COMMA@2481..2482 "," - WHITESPACE@2482..2483 " " - ARG@2483..2511 - EXPR_APPLY@2483..2511 - EXPR_INDEX@2483..2493 - EXPR_VAR@2483..2486 - NAME@2483..2486 - IDENT@2483..2486 "std" - DOT@2486..2487 "." - NAME@2487..2493 - IDENT@2487..2493 "filter" - ARGS_DESC@2493..2511 - L_PAREN@2493..2494 "(" - ARG@2494..2505 - EXPR_VAR@2494..2505 - NAME@2494..2505 - IDENT@2494..2505 "filter_func" - COMMA@2505..2506 "," - WHITESPACE@2506..2507 " " - ARG@2507..2510 - EXPR_VAR@2507..2510 - NAME@2507..2510 - IDENT@2507..2510 "arr" - R_PAREN@2510..2511 ")" - R_PAREN@2511..2512 ")" - COMMA@2512..2513 "," - WHITESPACE@2513..2517 "\n\n " - MEMBER_FIELD_METHOD@2517..2625 - FIELD_NAME_FIXED@2517..2528 - NAME@2517..2528 - IDENT@2517..2528 "assertEqual" - PARAMS_DESC@2528..2534 - L_PAREN@2528..2529 "(" - PARAM@2529..2530 - DESTRUCT_FULL@2529..2530 - NAME@2529..2530 - IDENT@2529..2530 "a" - COMMA@2530..2531 "," - WHITESPACE@2531..2532 " " - PARAM@2532..2533 - DESTRUCT_FULL@2532..2533 - NAME@2532..2533 - IDENT@2532..2533 "b" - R_PAREN@2533..2534 ")" - COLONCOLON@2534..2536 "::" - WHITESPACE@2536..2541 "\n " - EXPR_IF_THEN_ELSE@2541..2625 - IF_KW@2541..2543 "if" - WHITESPACE@2543..2544 " " - EXPR_BINARY@2544..2550 - LHS_EXPR@2544..2545 - EXPR_VAR@2544..2545 - NAME@2544..2545 - IDENT@2544..2545 "a" - WHITESPACE@2545..2546 " " - EQ@2546..2548 "==" - WHITESPACE@2548..2549 " " - EXPR_VAR@2549..2550 - NAME@2549..2550 - IDENT@2549..2550 "b" - WHITESPACE@2550..2551 " " - THEN_KW@2551..2555 "then" - WHITESPACE@2555..2562 "\n " - TRUE_EXPR@2562..2566 - EXPR_LITERAL@2562..2566 - TRUE_KW@2562..2566 "true" - WHITESPACE@2566..2571 "\n " - ELSE_KW@2571..2575 "else" - WHITESPACE@2575..2582 "\n " - FALSE_EXPR@2582..2625 - EXPR_ERROR@2582..2625 - ERROR_KW@2582..2587 "error" - WHITESPACE@2587..2588 " " - EXPR_BINARY@2588..2625 - LHS_EXPR@2588..2621 - EXPR_BINARY@2588..2621 - LHS_EXPR@2588..2612 - EXPR_BINARY@2588..2612 - LHS_EXPR@2588..2608 - EXPR_STRING@2588..2608 - STRING_SINGLE@2588..2608 "'Assertion failed. '" - WHITESPACE@2608..2609 " " - PLUS@2609..2610 "+" - WHITESPACE@2610..2611 " " - EXPR_VAR@2611..2612 - NAME@2611..2612 - IDENT@2611..2612 "a" - WHITESPACE@2612..2613 " " - PLUS@2613..2614 "+" + EXPR@1406..1476 + EXPR_PARENED@1406..1476 + L_PAREN@1406..1407 "(" + EXPR@1407..1475 + EXPR_BINARY@1407..1475 + EXPR@1407..1458 + EXPR_STRING@1407..1458 + STRING_SINGLE@1407..1458 "'std.mapWithKey first ..." + WHITESPACE@1458..1459 " " + PLUS@1459..1460 "+" + WHITESPACE@1460..1461 " " + EXPR@1461..1475 + EXPR_VAR@1461..1464 + NAME@1461..1464 + IDENT@1461..1464 "std" + SUFFIX_INDEX@1464..1469 + DOT@1464..1465 "." + NAME@1465..1469 + IDENT@1465..1469 "type" + SUFFIX_APPLY@1469..1475 + ARGS_DESC@1469..1475 + L_PAREN@1469..1470 "(" + ARG@1470..1474 + EXPR@1470..1474 + EXPR_VAR@1470..1474 + NAME@1470..1474 + IDENT@1470..1474 "func" + R_PAREN@1474..1475 ")" + R_PAREN@1475..1476 ")" + WHITESPACE@1476..1481 "\n " + ELSE_KW@1481..1485 "else" + WHITESPACE@1485..1486 " " + FALSE_EXPR@1486..1664 + EXPR@1486..1664 + EXPR_IF_THEN_ELSE@1486..1664 + IF_KW@1486..1488 "if" + WHITESPACE@1488..1489 " " + EXPR@1489..1507 + EXPR_UNARY@1489..1507 + NOT@1489..1490 "!" + EXPR_VAR@1490..1493 + NAME@1490..1493 + IDENT@1490..1493 "std" + SUFFIX_INDEX@1493..1502 + DOT@1493..1494 "." + NAME@1494..1502 + IDENT@1494..1502 "isObject" + SUFFIX_APPLY@1502..1507 + ARGS_DESC@1502..1507 + L_PAREN@1502..1503 "(" + ARG@1503..1506 + EXPR@1503..1506 + EXPR_VAR@1503..1506 + NAME@1503..1506 + IDENT@1503..1506 "obj" + R_PAREN@1506..1507 ")" + WHITESPACE@1507..1508 " " + THEN_KW@1508..1512 "then" + WHITESPACE@1512..1519 "\n " + TRUE_EXPR@1519..1593 + EXPR@1519..1593 + EXPR_ERROR@1519..1593 + ERROR_KW@1519..1524 "error" + WHITESPACE@1524..1525 " " + EXPR@1525..1593 + EXPR_PARENED@1525..1593 + L_PAREN@1525..1526 "(" + EXPR@1526..1592 + EXPR_BINARY@1526..1592 + EXPR@1526..1576 + EXPR_STRING@1526..1576 + STRING_SINGLE@1526..1576 "'std.mapWithKey secon ..." + WHITESPACE@1576..1577 " " + PLUS@1577..1578 "+" + WHITESPACE@1578..1579 " " + EXPR@1579..1592 + EXPR_VAR@1579..1582 + NAME@1579..1582 + IDENT@1579..1582 "std" + SUFFIX_INDEX@1582..1587 + DOT@1582..1583 "." + NAME@1583..1587 + IDENT@1583..1587 "type" + SUFFIX_APPLY@1587..1592 + ARGS_DESC@1587..1592 + L_PAREN@1587..1588 "(" + ARG@1588..1591 + EXPR@1588..1591 + EXPR_VAR@1588..1591 + NAME@1588..1591 + IDENT@1588..1591 "obj" + R_PAREN@1591..1592 ")" + R_PAREN@1592..1593 ")" + WHITESPACE@1593..1598 "\n " + ELSE_KW@1598..1602 "else" + WHITESPACE@1602..1609 "\n " + FALSE_EXPR@1609..1664 + EXPR@1609..1664 + EXPR_OBJECT@1609..1664 + OBJ_BODY_COMP@1609..1664 + L_BRACE@1609..1610 "{" + WHITESPACE@1610..1611 " " + MEMBER_FIELD_NORMAL@1611..1631 + FIELD_NAME_DYNAMIC@1611..1614 + L_BRACK@1611..1612 "[" + EXPR@1612..1613 + EXPR_VAR@1612..1613 + NAME@1612..1613 + IDENT@1612..1613 "k" + R_BRACK@1613..1614 "]" + COLON@1614..1615 ":" + WHITESPACE@1615..1616 " " + EXPR@1616..1631 + EXPR_VAR@1616..1620 + NAME@1616..1620 + IDENT@1616..1620 "func" + SUFFIX_APPLY@1620..1631 + ARGS_DESC@1620..1631 + L_PAREN@1620..1621 "(" + ARG@1621..1622 + EXPR@1621..1622 + EXPR_VAR@1621..1622 + NAME@1621..1622 + IDENT@1621..1622 "k" + COMMA@1622..1623 "," + WHITESPACE@1623..1624 " " + ARG@1624..1630 + EXPR@1624..1630 + EXPR_VAR@1624..1627 + NAME@1624..1627 + IDENT@1624..1627 "obj" + SUFFIX_INDEX_EXPR@1627..1630 + L_BRACK@1627..1628 "[" + EXPR@1628..1629 + EXPR_VAR@1628..1629 + NAME@1628..1629 + IDENT@1628..1629 "k" + R_BRACK@1629..1630 "]" + R_PAREN@1630..1631 ")" + WHITESPACE@1631..1632 " " + FOR_SPEC@1632..1662 + FOR_KW@1632..1635 "for" + WHITESPACE@1635..1636 " " + DESTRUCT_FULL@1636..1637 + NAME@1636..1637 + IDENT@1636..1637 "k" + WHITESPACE@1637..1638 " " + IN_KW@1638..1640 "in" + WHITESPACE@1640..1641 " " + EXPR@1641..1662 + EXPR_VAR@1641..1644 + NAME@1641..1644 + IDENT@1641..1644 "std" + SUFFIX_INDEX@1644..1657 + DOT@1644..1645 "." + NAME@1645..1657 + IDENT@1645..1657 "objectFields" + SUFFIX_APPLY@1657..1662 + ARGS_DESC@1657..1662 + L_PAREN@1657..1658 "(" + ARG@1658..1661 + EXPR@1658..1661 + EXPR_VAR@1658..1661 + NAME@1658..1661 + IDENT@1658..1661 "obj" + R_PAREN@1661..1662 ")" + WHITESPACE@1662..1663 " " + R_BRACE@1663..1664 "}" + COMMA@1664..1665 "," + WHITESPACE@1665..1669 "\n\n " + MEMBER_FIELD_METHOD@1669..1712 + FIELD_NAME_FIXED@1669..1674 + NAME@1669..1674 + IDENT@1669..1674 "lines" + PARAMS_DESC@1674..1679 + L_PAREN@1674..1675 "(" + PARAM@1675..1678 + DESTRUCT_FULL@1675..1678 + NAME@1675..1678 + IDENT@1675..1678 "arr" + R_PAREN@1678..1679 ")" + COLONCOLON@1679..1681 "::" + WHITESPACE@1681..1686 "\n " + EXPR@1686..1712 + EXPR_VAR@1686..1689 + NAME@1686..1689 + IDENT@1686..1689 "std" + SUFFIX_INDEX@1689..1694 + DOT@1689..1690 "." + NAME@1690..1694 + IDENT@1690..1694 "join" + SUFFIX_APPLY@1694..1712 + ARGS_DESC@1694..1712 + L_PAREN@1694..1695 "(" + ARG@1695..1699 + EXPR@1695..1699 + EXPR_STRING@1695..1699 + STRING_SINGLE@1695..1699 "'\\n'" + COMMA@1699..1700 "," + WHITESPACE@1700..1701 " " + ARG@1701..1711 + EXPR@1701..1711 + EXPR_BINARY@1701..1711 + EXPR@1701..1704 + EXPR_VAR@1701..1704 + NAME@1701..1704 + IDENT@1701..1704 "arr" + WHITESPACE@1704..1705 " " + PLUS@1705..1706 "+" + WHITESPACE@1706..1707 " " + EXPR@1707..1711 + EXPR_ARRAY@1707..1711 + L_BRACK@1707..1708 "[" + EXPR@1708..1710 + EXPR_STRING@1708..1710 + STRING_SINGLE@1708..1710 "''" + R_BRACK@1710..1711 "]" + R_PAREN@1711..1712 ")" + COMMA@1712..1713 "," + WHITESPACE@1713..1717 "\n\n " + MEMBER_FIELD_METHOD@1717..1929 + FIELD_NAME_FIXED@1717..1725 + NAME@1717..1725 + IDENT@1717..1725 "deepJoin" + PARAMS_DESC@1725..1730 + L_PAREN@1725..1726 "(" + PARAM@1726..1729 + DESTRUCT_FULL@1726..1729 + NAME@1726..1729 + IDENT@1726..1729 "arr" + R_PAREN@1729..1730 ")" + COLONCOLON@1730..1732 "::" + WHITESPACE@1732..1737 "\n " + EXPR@1737..1929 + EXPR_IF_THEN_ELSE@1737..1929 + IF_KW@1737..1739 "if" + WHITESPACE@1739..1740 " " + EXPR@1740..1757 + EXPR_VAR@1740..1743 + NAME@1740..1743 + IDENT@1740..1743 "std" + SUFFIX_INDEX@1743..1752 + DOT@1743..1744 "." + NAME@1744..1752 + IDENT@1744..1752 "isString" + SUFFIX_APPLY@1752..1757 + ARGS_DESC@1752..1757 + L_PAREN@1752..1753 "(" + ARG@1753..1756 + EXPR@1753..1756 + EXPR_VAR@1753..1756 + NAME@1753..1756 + IDENT@1753..1756 "arr" + R_PAREN@1756..1757 ")" + WHITESPACE@1757..1758 " " + THEN_KW@1758..1762 "then" + WHITESPACE@1762..1769 "\n " + TRUE_EXPR@1769..1772 + EXPR@1769..1772 + EXPR_VAR@1769..1772 + NAME@1769..1772 + IDENT@1769..1772 "arr" + WHITESPACE@1772..1777 "\n " + ELSE_KW@1777..1781 "else" + WHITESPACE@1781..1782 " " + FALSE_EXPR@1782..1929 + EXPR@1782..1929 + EXPR_IF_THEN_ELSE@1782..1929 + IF_KW@1782..1784 "if" + WHITESPACE@1784..1785 " " + EXPR@1785..1801 + EXPR_VAR@1785..1788 + NAME@1785..1788 + IDENT@1785..1788 "std" + SUFFIX_INDEX@1788..1796 + DOT@1788..1789 "." + NAME@1789..1796 + IDENT@1789..1796 "isArray" + SUFFIX_APPLY@1796..1801 + ARGS_DESC@1796..1801 + L_PAREN@1796..1797 "(" + ARG@1797..1800 + EXPR@1797..1800 + EXPR_VAR@1797..1800 + NAME@1797..1800 + IDENT@1797..1800 "arr" + R_PAREN@1800..1801 ")" + WHITESPACE@1801..1802 " " + THEN_KW@1802..1806 "then" + WHITESPACE@1806..1813 "\n " + TRUE_EXPR@1813..1857 + EXPR@1813..1857 + EXPR_VAR@1813..1816 + NAME@1813..1816 + IDENT@1813..1816 "std" + SUFFIX_INDEX@1816..1821 + DOT@1816..1817 "." + NAME@1817..1821 + IDENT@1817..1821 "join" + SUFFIX_APPLY@1821..1857 + ARGS_DESC@1821..1857 + L_PAREN@1821..1822 "(" + ARG@1822..1824 + EXPR@1822..1824 + EXPR_STRING@1822..1824 + STRING_SINGLE@1822..1824 "''" + COMMA@1824..1825 "," + WHITESPACE@1825..1826 " " + ARG@1826..1856 + EXPR@1826..1856 + EXPR_ARRAY_COMP@1826..1856 + L_BRACK@1826..1827 "[" + EXPR@1827..1842 + EXPR_VAR@1827..1830 + NAME@1827..1830 + IDENT@1827..1830 "std" + SUFFIX_INDEX@1830..1839 + DOT@1830..1831 "." + NAME@1831..1839 + IDENT@1831..1839 "deepJoin" + SUFFIX_APPLY@1839..1842 + ARGS_DESC@1839..1842 + L_PAREN@1839..1840 "(" + ARG@1840..1841 + EXPR@1840..1841 + EXPR_VAR@1840..1841 + NAME@1840..1841 + IDENT@1840..1841 "x" + R_PAREN@1841..1842 ")" + WHITESPACE@1842..1843 " " + FOR_SPEC@1843..1855 + FOR_KW@1843..1846 "for" + WHITESPACE@1846..1847 " " + DESTRUCT_FULL@1847..1848 + NAME@1847..1848 + IDENT@1847..1848 "x" + WHITESPACE@1848..1849 " " + IN_KW@1849..1851 "in" + WHITESPACE@1851..1852 " " + EXPR@1852..1855 + EXPR_VAR@1852..1855 + NAME@1852..1855 + IDENT@1852..1855 "arr" + R_BRACK@1855..1856 "]" + R_PAREN@1856..1857 ")" + WHITESPACE@1857..1862 "\n " + ELSE_KW@1862..1866 "else" + WHITESPACE@1866..1873 "\n " + FALSE_EXPR@1873..1929 + EXPR@1873..1929 + EXPR_ERROR@1873..1929 + ERROR_KW@1873..1878 "error" + WHITESPACE@1878..1879 " " + EXPR@1879..1929 + EXPR_BINARY@1879..1929 + EXPR@1879..1913 + EXPR_STRING@1879..1913 + STRING_SINGLE@1879..1913 "'Expected string or a ..." + WHITESPACE@1913..1914 " " + MODULO@1914..1915 "%" + WHITESPACE@1915..1916 " " + EXPR@1916..1929 + EXPR_VAR@1916..1919 + NAME@1916..1919 + IDENT@1916..1919 "std" + SUFFIX_INDEX@1919..1924 + DOT@1919..1920 "." + NAME@1920..1924 + IDENT@1920..1924 "type" + SUFFIX_APPLY@1924..1929 + ARGS_DESC@1924..1929 + L_PAREN@1924..1925 "(" + ARG@1925..1928 + EXPR@1925..1928 + EXPR_VAR@1925..1928 + NAME@1925..1928 + IDENT@1925..1928 "arr" + R_PAREN@1928..1929 ")" + COMMA@1929..1930 "," + WHITESPACE@1930..1934 "\n\n " + MEMBER_FIELD_METHOD@1934..2042 + FIELD_NAME_FIXED@1934..1945 + NAME@1934..1945 + IDENT@1934..1945 "assertEqual" + PARAMS_DESC@1945..1951 + L_PAREN@1945..1946 "(" + PARAM@1946..1947 + DESTRUCT_FULL@1946..1947 + NAME@1946..1947 + IDENT@1946..1947 "a" + COMMA@1947..1948 "," + WHITESPACE@1948..1949 " " + PARAM@1949..1950 + DESTRUCT_FULL@1949..1950 + NAME@1949..1950 + IDENT@1949..1950 "b" + R_PAREN@1950..1951 ")" + COLONCOLON@1951..1953 "::" + WHITESPACE@1953..1958 "\n " + EXPR@1958..2042 + EXPR_IF_THEN_ELSE@1958..2042 + IF_KW@1958..1960 "if" + WHITESPACE@1960..1961 " " + EXPR@1961..1967 + EXPR_BINARY@1961..1967 + EXPR@1961..1962 + EXPR_VAR@1961..1962 + NAME@1961..1962 + IDENT@1961..1962 "a" + WHITESPACE@1962..1963 " " + EQ@1963..1965 "==" + WHITESPACE@1965..1966 " " + EXPR@1966..1967 + EXPR_VAR@1966..1967 + NAME@1966..1967 + IDENT@1966..1967 "b" + WHITESPACE@1967..1968 " " + THEN_KW@1968..1972 "then" + WHITESPACE@1972..1979 "\n " + TRUE_EXPR@1979..1983 + EXPR@1979..1983 + EXPR_LITERAL@1979..1983 + TRUE_KW@1979..1983 "true" + WHITESPACE@1983..1988 "\n " + ELSE_KW@1988..1992 "else" + WHITESPACE@1992..1999 "\n " + FALSE_EXPR@1999..2042 + EXPR@1999..2042 + EXPR_ERROR@1999..2042 + ERROR_KW@1999..2004 "error" + WHITESPACE@2004..2005 " " + EXPR@2005..2042 + EXPR_BINARY@2005..2042 + EXPR@2005..2038 + EXPR_BINARY@2005..2038 + EXPR@2005..2029 + EXPR_BINARY@2005..2029 + EXPR@2005..2025 + EXPR_STRING@2005..2025 + STRING_SINGLE@2005..2025 "'Assertion failed. '" + WHITESPACE@2025..2026 " " + PLUS@2026..2027 "+" + WHITESPACE@2027..2028 " " + EXPR@2028..2029 + EXPR_VAR@2028..2029 + NAME@2028..2029 + IDENT@2028..2029 "a" + WHITESPACE@2029..2030 " " + PLUS@2030..2031 "+" + WHITESPACE@2031..2032 " " + EXPR@2032..2038 + EXPR_STRING@2032..2038 + STRING_SINGLE@2032..2038 "' != '" + WHITESPACE@2038..2039 " " + PLUS@2039..2040 "+" + WHITESPACE@2040..2041 " " + EXPR@2041..2042 + EXPR_VAR@2041..2042 + NAME@2041..2042 + IDENT@2041..2042 "b" + COMMA@2042..2043 "," + WHITESPACE@2043..2047 "\n\n " + MEMBER_FIELD_METHOD@2047..2149 + FIELD_NAME_FIXED@2047..2052 + NAME@2047..2052 + IDENT@2047..2052 "clamp" + PARAMS_DESC@2052..2071 + L_PAREN@2052..2053 "(" + PARAM@2053..2054 + DESTRUCT_FULL@2053..2054 + NAME@2053..2054 + IDENT@2053..2054 "x" + COMMA@2054..2055 "," + WHITESPACE@2055..2056 " " + PARAM@2056..2062 + DESTRUCT_FULL@2056..2062 + NAME@2056..2062 + IDENT@2056..2062 "minVal" + COMMA@2062..2063 "," + WHITESPACE@2063..2064 " " + PARAM@2064..2070 + DESTRUCT_FULL@2064..2070 + NAME@2064..2070 + IDENT@2064..2070 "maxVal" + R_PAREN@2070..2071 ")" + COLONCOLON@2071..2073 "::" + WHITESPACE@2073..2078 "\n " + EXPR@2078..2149 + EXPR_IF_THEN_ELSE@2078..2149 + IF_KW@2078..2080 "if" + WHITESPACE@2080..2081 " " + EXPR@2081..2091 + EXPR_BINARY@2081..2091 + EXPR@2081..2082 + EXPR_VAR@2081..2082 + NAME@2081..2082 + IDENT@2081..2082 "x" + WHITESPACE@2082..2083 " " + LT@2083..2084 "<" + WHITESPACE@2084..2085 " " + EXPR@2085..2091 + EXPR_VAR@2085..2091 + NAME@2085..2091 + IDENT@2085..2091 "minVal" + WHITESPACE@2091..2092 " " + THEN_KW@2092..2096 "then" + WHITESPACE@2096..2097 " " + TRUE_EXPR@2097..2103 + EXPR@2097..2103 + EXPR_VAR@2097..2103 + NAME@2097..2103 + IDENT@2097..2103 "minVal" + WHITESPACE@2103..2108 "\n " + ELSE_KW@2108..2112 "else" + WHITESPACE@2112..2113 " " + FALSE_EXPR@2113..2149 + EXPR@2113..2149 + EXPR_IF_THEN_ELSE@2113..2149 + IF_KW@2113..2115 "if" + WHITESPACE@2115..2116 " " + EXPR@2116..2126 + EXPR_BINARY@2116..2126 + EXPR@2116..2117 + EXPR_VAR@2116..2117 + NAME@2116..2117 + IDENT@2116..2117 "x" + WHITESPACE@2117..2118 " " + GT@2118..2119 ">" + WHITESPACE@2119..2120 " " + EXPR@2120..2126 + EXPR_VAR@2120..2126 + NAME@2120..2126 + IDENT@2120..2126 "maxVal" + WHITESPACE@2126..2127 " " + THEN_KW@2127..2131 "then" + WHITESPACE@2131..2132 " " + TRUE_EXPR@2132..2138 + EXPR@2132..2138 + EXPR_VAR@2132..2138 + NAME@2132..2138 + IDENT@2132..2138 "maxVal" + WHITESPACE@2138..2143 "\n " + ELSE_KW@2143..2147 "else" + WHITESPACE@2147..2148 " " + FALSE_EXPR@2148..2149 + EXPR@2148..2149 + EXPR_VAR@2148..2149 + NAME@2148..2149 + IDENT@2148..2149 "x" + COMMA@2149..2150 "," + WHITESPACE@2150..2154 "\n\n " + MEMBER_FIELD_METHOD@2154..2840 + FIELD_NAME_FIXED@2154..2165 + NAME@2154..2165 + IDENT@2154..2165 "manifestIni" + PARAMS_DESC@2165..2170 + L_PAREN@2165..2166 "(" + PARAM@2166..2169 + DESTRUCT_FULL@2166..2169 + NAME@2166..2169 + IDENT@2166..2169 "ini" + R_PAREN@2169..2170 ")" + COLONCOLON@2170..2172 "::" + WHITESPACE@2172..2177 "\n " + EXPR@2177..2840 + STMT_LOCAL@2177..2481 + LOCAL_KW@2177..2182 "local" + WHITESPACE@2182..2183 " " + BIND_FUNCTION@2183..2480 + NAME@2183..2193 + IDENT@2183..2193 "body_lines" + PARAMS_DESC@2193..2199 + L_PAREN@2193..2194 "(" + PARAM@2194..2198 + DESTRUCT_FULL@2194..2198 + NAME@2194..2198 + IDENT@2194..2198 "body" + R_PAREN@2198..2199 ")" + WHITESPACE@2199..2200 " " + ASSIGN@2200..2201 "=" + WHITESPACE@2201..2208 "\n " + EXPR@2208..2480 + EXPR_VAR@2208..2211 + NAME@2208..2211 + IDENT@2208..2211 "std" + SUFFIX_INDEX@2211..2216 + DOT@2211..2212 "." + NAME@2212..2216 + IDENT@2212..2216 "join" + SUFFIX_APPLY@2216..2480 + ARGS_DESC@2216..2480 + L_PAREN@2216..2217 "(" + ARG@2217..2219 + EXPR@2217..2219 + EXPR_ARRAY@2217..2219 + L_BRACK@2217..2218 "[" + R_BRACK@2218..2219 "]" + COMMA@2219..2220 "," + WHITESPACE@2220..2221 " " + ARG@2221..2479 + EXPR@2221..2479 + EXPR_ARRAY_COMP@2221..2479 + L_BRACK@2221..2222 "[" + WHITESPACE@2222..2231 "\n " + EXPR@2231..2430 + STMT_LOCAL@2231..2263 + LOCAL_KW@2231..2236 "local" + WHITESPACE@2236..2237 " " + BIND_DESTRUCT@2237..2262 + DESTRUCT_FULL@2237..2252 + NAME@2237..2252 + IDENT@2237..2252 "value_or_values" + WHITESPACE@2252..2253 " " + ASSIGN@2253..2254 "=" + WHITESPACE@2254..2255 " " + EXPR@2255..2262 + EXPR_VAR@2255..2259 + NAME@2255..2259 + IDENT@2255..2259 "body" + SUFFIX_INDEX_EXPR@2259..2262 + L_BRACK@2259..2260 "[" + EXPR@2260..2261 + EXPR_VAR@2260..2261 + NAME@2260..2261 + IDENT@2260..2261 "k" + R_BRACK@2261..2262 "]" + SEMI@2262..2263 ";" + WHITESPACE@2263..2272 "\n " + EXPR_IF_THEN_ELSE@2272..2430 + IF_KW@2272..2274 "if" + WHITESPACE@2274..2275 " " + EXPR@2275..2303 + EXPR_VAR@2275..2278 + NAME@2275..2278 + IDENT@2275..2278 "std" + SUFFIX_INDEX@2278..2286 + DOT@2278..2279 "." + NAME@2279..2286 + IDENT@2279..2286 "isArray" + SUFFIX_APPLY@2286..2303 + ARGS_DESC@2286..2303 + L_PAREN@2286..2287 "(" + ARG@2287..2302 + EXPR@2287..2302 + EXPR_VAR@2287..2302 + NAME@2287..2302 + IDENT@2287..2302 "value_or_values" + R_PAREN@2302..2303 ")" + WHITESPACE@2303..2304 " " + THEN_KW@2304..2308 "then" + WHITESPACE@2308..2319 "\n " + TRUE_EXPR@2319..2372 + EXPR@2319..2372 + EXPR_ARRAY_COMP@2319..2372 + L_BRACK@2319..2320 "[" + EXPR@2320..2342 + EXPR_BINARY@2320..2342 + EXPR@2320..2329 + EXPR_STRING@2320..2329 + STRING_SINGLE@2320..2329 "'%s = %s'" + WHITESPACE@2329..2330 " " + MODULO@2330..2331 "%" + WHITESPACE@2331..2332 " " + EXPR@2332..2342 + EXPR_ARRAY@2332..2342 + L_BRACK@2332..2333 "[" + EXPR@2333..2334 + EXPR_VAR@2333..2334 + NAME@2333..2334 + IDENT@2333..2334 "k" + COMMA@2334..2335 "," + WHITESPACE@2335..2336 " " + EXPR@2336..2341 + EXPR_VAR@2336..2341 + NAME@2336..2341 + IDENT@2336..2341 "value" + R_BRACK@2341..2342 "]" + WHITESPACE@2342..2343 " " + FOR_SPEC@2343..2371 + FOR_KW@2343..2346 "for" + WHITESPACE@2346..2347 " " + DESTRUCT_FULL@2347..2352 + NAME@2347..2352 + IDENT@2347..2352 "value" + WHITESPACE@2352..2353 " " + IN_KW@2353..2355 "in" + WHITESPACE@2355..2356 " " + EXPR@2356..2371 + EXPR_VAR@2356..2371 + NAME@2356..2371 + IDENT@2356..2371 "value_or_values" + R_BRACK@2371..2372 "]" + WHITESPACE@2372..2381 "\n " + ELSE_KW@2381..2385 "else" + WHITESPACE@2385..2396 "\n " + FALSE_EXPR@2396..2430 + EXPR@2396..2430 + EXPR_ARRAY@2396..2430 + L_BRACK@2396..2397 "[" + EXPR@2397..2429 + EXPR_BINARY@2397..2429 + EXPR@2397..2406 + EXPR_STRING@2397..2406 + STRING_SINGLE@2397..2406 "'%s = %s'" + WHITESPACE@2406..2407 " " + MODULO@2407..2408 "%" + WHITESPACE@2408..2409 " " + EXPR@2409..2429 + EXPR_ARRAY@2409..2429 + L_BRACK@2409..2410 "[" + EXPR@2410..2411 + EXPR_VAR@2410..2411 + NAME@2410..2411 + IDENT@2410..2411 "k" + COMMA@2411..2412 "," + WHITESPACE@2412..2413 " " + EXPR@2413..2428 + EXPR_VAR@2413..2428 + NAME@2413..2428 + IDENT@2413..2428 "value_or_values" + R_BRACK@2428..2429 "]" + R_BRACK@2429..2430 "]" + WHITESPACE@2430..2440 "\n\n " + FOR_SPEC@2440..2471 + FOR_KW@2440..2443 "for" + WHITESPACE@2443..2444 " " + DESTRUCT_FULL@2444..2445 + NAME@2444..2445 + IDENT@2444..2445 "k" + WHITESPACE@2445..2446 " " + IN_KW@2446..2448 "in" + WHITESPACE@2448..2449 " " + EXPR@2449..2471 + EXPR_VAR@2449..2452 + NAME@2449..2452 + IDENT@2449..2452 "std" + SUFFIX_INDEX@2452..2465 + DOT@2452..2453 "." + NAME@2453..2465 + IDENT@2453..2465 "objectFields" + SUFFIX_APPLY@2465..2471 + ARGS_DESC@2465..2471 + L_PAREN@2465..2466 "(" + ARG@2466..2470 + EXPR@2466..2470 + EXPR_VAR@2466..2470 + NAME@2466..2470 + IDENT@2466..2470 "body" + R_PAREN@2470..2471 ")" + WHITESPACE@2471..2478 "\n " + R_BRACK@2478..2479 "]" + R_PAREN@2479..2480 ")" + SEMI@2480..2481 ";" + WHITESPACE@2481..2487 "\n\n " + STMT_LOCAL@2487..2769 + LOCAL_KW@2487..2492 "local" + WHITESPACE@2492..2493 " " + BIND_FUNCTION@2493..2561 + NAME@2493..2506 + IDENT@2493..2506 "section_lines" + PARAMS_DESC@2506..2520 + L_PAREN@2506..2507 "(" + PARAM@2507..2512 + DESTRUCT_FULL@2507..2512 + NAME@2507..2512 + IDENT@2507..2512 "sname" + COMMA@2512..2513 "," + WHITESPACE@2513..2514 " " + PARAM@2514..2519 + DESTRUCT_FULL@2514..2519 + NAME@2514..2519 + IDENT@2514..2519 "sbody" + R_PAREN@2519..2520 ")" + WHITESPACE@2520..2521 " " + ASSIGN@2521..2522 "=" + WHITESPACE@2522..2523 " " + EXPR@2523..2561 + EXPR_BINARY@2523..2561 + EXPR@2523..2541 + EXPR_ARRAY@2523..2541 + L_BRACK@2523..2524 "[" + EXPR@2524..2540 + EXPR_BINARY@2524..2540 + EXPR@2524..2530 + EXPR_STRING@2524..2530 + STRING_SINGLE@2524..2530 "'[%s]'" + WHITESPACE@2530..2531 " " + MODULO@2531..2532 "%" + WHITESPACE@2532..2533 " " + EXPR@2533..2540 + EXPR_ARRAY@2533..2540 + L_BRACK@2533..2534 "[" + EXPR@2534..2539 + EXPR_VAR@2534..2539 + NAME@2534..2539 + IDENT@2534..2539 "sname" + R_BRACK@2539..2540 "]" + R_BRACK@2540..2541 "]" + WHITESPACE@2541..2542 " " + PLUS@2542..2543 "+" + WHITESPACE@2543..2544 " " + EXPR@2544..2561 + EXPR_VAR@2544..2554 + NAME@2544..2554 + IDENT@2544..2554 "body_lines" + SUFFIX_APPLY@2554..2561 + ARGS_DESC@2554..2561 + L_PAREN@2554..2555 "(" + ARG@2555..2560 + EXPR@2555..2560 + EXPR_VAR@2555..2560 + NAME@2555..2560 + IDENT@2555..2560 "sbody" + R_PAREN@2560..2561 ")" + COMMA@2561..2562 "," + WHITESPACE@2562..2573 "\n " + BIND_DESTRUCT@2573..2648 + DESTRUCT_FULL@2573..2582 + NAME@2573..2582 + IDENT@2573..2582 "main_body" + WHITESPACE@2582..2583 " " + ASSIGN@2583..2584 "=" + WHITESPACE@2584..2585 " " + EXPR@2585..2648 + EXPR_IF_THEN_ELSE@2585..2648 + IF_KW@2585..2587 "if" + WHITESPACE@2587..2588 " " + EXPR@2588..2614 + EXPR_VAR@2588..2591 + NAME@2588..2591 + IDENT@2588..2591 "std" + SUFFIX_INDEX@2591..2601 + DOT@2591..2592 "." + NAME@2592..2601 + IDENT@2592..2601 "objectHas" + SUFFIX_APPLY@2601..2614 + ARGS_DESC@2601..2614 + L_PAREN@2601..2602 "(" + ARG@2602..2605 + EXPR@2602..2605 + EXPR_VAR@2602..2605 + NAME@2602..2605 + IDENT@2602..2605 "ini" + COMMA@2605..2606 "," + WHITESPACE@2606..2607 " " + ARG@2607..2613 + EXPR@2607..2613 + EXPR_STRING@2607..2613 + STRING_SINGLE@2607..2613 "'main'" + R_PAREN@2613..2614 ")" WHITESPACE@2614..2615 " " - EXPR_STRING@2615..2621 - STRING_SINGLE@2615..2621 "' != '" - WHITESPACE@2621..2622 " " - PLUS@2622..2623 "+" - WHITESPACE@2623..2624 " " - EXPR_VAR@2624..2625 - NAME@2624..2625 - IDENT@2624..2625 "b" - COMMA@2625..2626 "," - WHITESPACE@2626..2630 "\n\n " - MEMBER_FIELD_METHOD@2630..2732 - FIELD_NAME_FIXED@2630..2635 - NAME@2630..2635 - IDENT@2630..2635 "clamp" - PARAMS_DESC@2635..2654 - L_PAREN@2635..2636 "(" - PARAM@2636..2637 - DESTRUCT_FULL@2636..2637 - NAME@2636..2637 - IDENT@2636..2637 "x" - COMMA@2637..2638 "," - WHITESPACE@2638..2639 " " - PARAM@2639..2645 - DESTRUCT_FULL@2639..2645 - NAME@2639..2645 - IDENT@2639..2645 "minVal" - COMMA@2645..2646 "," - WHITESPACE@2646..2647 " " - PARAM@2647..2653 - DESTRUCT_FULL@2647..2653 - NAME@2647..2653 - IDENT@2647..2653 "maxVal" - R_PAREN@2653..2654 ")" - COLONCOLON@2654..2656 "::" - WHITESPACE@2656..2661 "\n " - EXPR_IF_THEN_ELSE@2661..2732 - IF_KW@2661..2663 "if" - WHITESPACE@2663..2664 " " - EXPR_BINARY@2664..2674 - LHS_EXPR@2664..2665 - EXPR_VAR@2664..2665 - NAME@2664..2665 - IDENT@2664..2665 "x" - WHITESPACE@2665..2666 " " - LT@2666..2667 "<" - WHITESPACE@2667..2668 " " - EXPR_VAR@2668..2674 - NAME@2668..2674 - IDENT@2668..2674 "minVal" - WHITESPACE@2674..2675 " " - THEN_KW@2675..2679 "then" - WHITESPACE@2679..2680 " " - TRUE_EXPR@2680..2686 - EXPR_VAR@2680..2686 - NAME@2680..2686 - IDENT@2680..2686 "minVal" - WHITESPACE@2686..2691 "\n " - ELSE_KW@2691..2695 "else" - WHITESPACE@2695..2696 " " - FALSE_EXPR@2696..2732 - EXPR_IF_THEN_ELSE@2696..2732 - IF_KW@2696..2698 "if" - WHITESPACE@2698..2699 " " - EXPR_BINARY@2699..2709 - LHS_EXPR@2699..2700 - EXPR_VAR@2699..2700 - NAME@2699..2700 - IDENT@2699..2700 "x" - WHITESPACE@2700..2701 " " - GT@2701..2702 ">" - WHITESPACE@2702..2703 " " - EXPR_VAR@2703..2709 - NAME@2703..2709 - IDENT@2703..2709 "maxVal" - WHITESPACE@2709..2710 " " - THEN_KW@2710..2714 "then" - WHITESPACE@2714..2715 " " - TRUE_EXPR@2715..2721 - EXPR_VAR@2715..2721 - NAME@2715..2721 - IDENT@2715..2721 "maxVal" - WHITESPACE@2721..2726 "\n " - ELSE_KW@2726..2730 "else" - WHITESPACE@2730..2731 " " - FALSE_EXPR@2731..2732 - EXPR_VAR@2731..2732 - NAME@2731..2732 - IDENT@2731..2732 "x" - COMMA@2732..2733 "," - WHITESPACE@2733..2737 "\n\n " - MEMBER_FIELD_METHOD@2737..2804 - FIELD_NAME_FIXED@2737..2750 - NAME@2737..2750 - IDENT@2737..2750 "flattenArrays" - PARAMS_DESC@2750..2756 - L_PAREN@2750..2751 "(" - PARAM@2751..2755 - DESTRUCT_FULL@2751..2755 - NAME@2751..2755 - IDENT@2751..2755 "arrs" - R_PAREN@2755..2756 ")" - COLONCOLON@2756..2758 "::" - WHITESPACE@2758..2763 "\n " - EXPR_APPLY@2763..2804 - EXPR_INDEX@2763..2772 - EXPR_VAR@2763..2766 - NAME@2763..2766 - IDENT@2763..2766 "std" - DOT@2766..2767 "." - NAME@2767..2772 - IDENT@2767..2772 "foldl" - ARGS_DESC@2772..2804 - L_PAREN@2772..2773 "(" - ARG@2773..2793 - EXPR_FUNCTION@2773..2793 - FUNCTION_KW@2773..2781 "function" - PARAMS_DESC@2781..2787 - L_PAREN@2781..2782 "(" - PARAM@2782..2783 - DESTRUCT_FULL@2782..2783 - NAME@2782..2783 - IDENT@2782..2783 "a" - COMMA@2783..2784 "," - WHITESPACE@2784..2785 " " - PARAM@2785..2786 - DESTRUCT_FULL@2785..2786 - NAME@2785..2786 - IDENT@2785..2786 "b" - R_PAREN@2786..2787 ")" - WHITESPACE@2787..2788 " " - EXPR_BINARY@2788..2793 - LHS_EXPR@2788..2789 - EXPR_VAR@2788..2789 - NAME@2788..2789 - IDENT@2788..2789 "a" - WHITESPACE@2789..2790 " " - PLUS@2790..2791 "+" - WHITESPACE@2791..2792 " " - EXPR_VAR@2792..2793 - NAME@2792..2793 - IDENT@2792..2793 "b" - COMMA@2793..2794 "," - WHITESPACE@2794..2795 " " - ARG@2795..2799 - EXPR_VAR@2795..2799 - NAME@2795..2799 - IDENT@2795..2799 "arrs" - COMMA@2799..2800 "," - WHITESPACE@2800..2801 " " - ARG@2801..2803 - EXPR_ARRAY@2801..2803 - L_BRACK@2801..2802 "[" - R_BRACK@2802..2803 "]" - R_PAREN@2803..2804 ")" - COMMA@2804..2805 "," - WHITESPACE@2805..2809 "\n\n " - MEMBER_FIELD_METHOD@2809..3495 - FIELD_NAME_FIXED@2809..2820 - NAME@2809..2820 - IDENT@2809..2820 "manifestIni" - PARAMS_DESC@2820..2825 - L_PAREN@2820..2821 "(" - PARAM@2821..2824 - DESTRUCT_FULL@2821..2824 - NAME@2821..2824 - IDENT@2821..2824 "ini" - R_PAREN@2824..2825 ")" - COLONCOLON@2825..2827 "::" - WHITESPACE@2827..2832 "\n " - STMT_LOCAL@2832..3136 - LOCAL_KW@2832..2837 "local" - WHITESPACE@2837..2838 " " - BIND_FUNCTION@2838..3135 - NAME@2838..2848 - IDENT@2838..2848 "body_lines" - PARAMS_DESC@2848..2854 - L_PAREN@2848..2849 "(" - PARAM@2849..2853 - DESTRUCT_FULL@2849..2853 - NAME@2849..2853 - IDENT@2849..2853 "body" - R_PAREN@2853..2854 ")" - WHITESPACE@2854..2855 " " - ASSIGN@2855..2856 "=" - WHITESPACE@2856..2863 "\n " - EXPR_APPLY@2863..3135 - EXPR_INDEX@2863..2871 - EXPR_VAR@2863..2866 - NAME@2863..2866 - IDENT@2863..2866 "std" - DOT@2866..2867 "." - NAME@2867..2871 - IDENT@2867..2871 "join" - ARGS_DESC@2871..3135 - L_PAREN@2871..2872 "(" - ARG@2872..2874 - EXPR_ARRAY@2872..2874 - L_BRACK@2872..2873 "[" - R_BRACK@2873..2874 "]" - COMMA@2874..2875 "," - WHITESPACE@2875..2876 " " - ARG@2876..3134 - EXPR_ARRAY_COMP@2876..3134 - L_BRACK@2876..2877 "[" - WHITESPACE@2877..2886 "\n " - STMT_LOCAL@2886..2918 - LOCAL_KW@2886..2891 "local" - WHITESPACE@2891..2892 " " - BIND_DESTRUCT@2892..2917 - DESTRUCT_FULL@2892..2907 - NAME@2892..2907 - IDENT@2892..2907 "value_or_values" - WHITESPACE@2907..2908 " " - ASSIGN@2908..2909 "=" - WHITESPACE@2909..2910 " " - EXPR_INDEX_EXPR@2910..2917 - LHS_EXPR@2910..2914 - EXPR_VAR@2910..2914 - NAME@2910..2914 - IDENT@2910..2914 "body" - L_BRACK@2914..2915 "[" - EXPR_VAR@2915..2916 - NAME@2915..2916 - IDENT@2915..2916 "k" - R_BRACK@2916..2917 "]" - SEMI@2917..2918 ";" - WHITESPACE@2918..2927 "\n " - EXPR_IF_THEN_ELSE@2927..3085 - IF_KW@2927..2929 "if" - WHITESPACE@2929..2930 " " - EXPR_APPLY@2930..2958 - EXPR_INDEX@2930..2941 - EXPR_VAR@2930..2933 - NAME@2930..2933 - IDENT@2930..2933 "std" - DOT@2933..2934 "." - NAME@2934..2941 - IDENT@2934..2941 "isArray" - ARGS_DESC@2941..2958 - L_PAREN@2941..2942 "(" - ARG@2942..2957 - EXPR_VAR@2942..2957 - NAME@2942..2957 - IDENT@2942..2957 "value_or_values" - R_PAREN@2957..2958 ")" - WHITESPACE@2958..2959 " " - THEN_KW@2959..2963 "then" - WHITESPACE@2963..2974 "\n " - TRUE_EXPR@2974..3027 - EXPR_ARRAY_COMP@2974..3027 - L_BRACK@2974..2975 "[" - EXPR_BINARY@2975..2997 - LHS_EXPR@2975..2984 - EXPR_STRING@2975..2984 - STRING_SINGLE@2975..2984 "'%s = %s'" - WHITESPACE@2984..2985 " " - MODULO@2985..2986 "%" - WHITESPACE@2986..2987 " " - EXPR_ARRAY@2987..2997 - L_BRACK@2987..2988 "[" - EXPR_VAR@2988..2989 - NAME@2988..2989 - IDENT@2988..2989 "k" - COMMA@2989..2990 "," - WHITESPACE@2990..2991 " " - EXPR_VAR@2991..2996 - NAME@2991..2996 - IDENT@2991..2996 "value" - R_BRACK@2996..2997 "]" - WHITESPACE@2997..2998 " " - FOR_SPEC@2998..3026 - FOR_KW@2998..3001 "for" - WHITESPACE@3001..3002 " " - NAME@3002..3007 - IDENT@3002..3007 "value" - WHITESPACE@3007..3008 " " - IN_KW@3008..3010 "in" - WHITESPACE@3010..3011 " " - EXPR_VAR@3011..3026 - NAME@3011..3026 - IDENT@3011..3026 "value_or_values" - R_BRACK@3026..3027 "]" - WHITESPACE@3027..3036 "\n " - ELSE_KW@3036..3040 "else" - WHITESPACE@3040..3051 "\n " - FALSE_EXPR@3051..3085 - EXPR_ARRAY@3051..3085 - L_BRACK@3051..3052 "[" - EXPR_BINARY@3052..3084 - LHS_EXPR@3052..3061 - EXPR_STRING@3052..3061 - STRING_SINGLE@3052..3061 "'%s = %s'" - WHITESPACE@3061..3062 " " - MODULO@3062..3063 "%" - WHITESPACE@3063..3064 " " - EXPR_ARRAY@3064..3084 - L_BRACK@3064..3065 "[" - EXPR_VAR@3065..3066 - NAME@3065..3066 - IDENT@3065..3066 "k" - COMMA@3066..3067 "," - WHITESPACE@3067..3068 " " - EXPR_VAR@3068..3083 - NAME@3068..3083 - IDENT@3068..3083 "value_or_values" - R_BRACK@3083..3084 "]" - R_BRACK@3084..3085 "]" - WHITESPACE@3085..3095 "\n\n " - FOR_SPEC@3095..3126 - FOR_KW@3095..3098 "for" - WHITESPACE@3098..3099 " " - NAME@3099..3100 - IDENT@3099..3100 "k" - WHITESPACE@3100..3101 " " - IN_KW@3101..3103 "in" - WHITESPACE@3103..3104 " " - EXPR_APPLY@3104..3126 - EXPR_INDEX@3104..3120 - EXPR_VAR@3104..3107 - NAME@3104..3107 - IDENT@3104..3107 "std" - DOT@3107..3108 "." - NAME@3108..3120 - IDENT@3108..3120 "objectFields" - ARGS_DESC@3120..3126 - L_PAREN@3120..3121 "(" - ARG@3121..3125 - EXPR_VAR@3121..3125 - NAME@3121..3125 - IDENT@3121..3125 "body" - R_PAREN@3125..3126 ")" - WHITESPACE@3126..3133 "\n " - R_BRACK@3133..3134 "]" - R_PAREN@3134..3135 ")" - SEMI@3135..3136 ";" - WHITESPACE@3136..3142 "\n\n " - STMT_LOCAL@3142..3424 - LOCAL_KW@3142..3147 "local" - WHITESPACE@3147..3148 " " - BIND_FUNCTION@3148..3216 - NAME@3148..3161 - IDENT@3148..3161 "section_lines" - PARAMS_DESC@3161..3175 - L_PAREN@3161..3162 "(" - PARAM@3162..3167 - DESTRUCT_FULL@3162..3167 - NAME@3162..3167 - IDENT@3162..3167 "sname" - COMMA@3167..3168 "," - WHITESPACE@3168..3169 " " - PARAM@3169..3174 - DESTRUCT_FULL@3169..3174 - NAME@3169..3174 - IDENT@3169..3174 "sbody" - R_PAREN@3174..3175 ")" - WHITESPACE@3175..3176 " " - ASSIGN@3176..3177 "=" - WHITESPACE@3177..3178 " " - EXPR_BINARY@3178..3216 - LHS_EXPR@3178..3196 - EXPR_ARRAY@3178..3196 - L_BRACK@3178..3179 "[" - EXPR_BINARY@3179..3195 - LHS_EXPR@3179..3185 - EXPR_STRING@3179..3185 - STRING_SINGLE@3179..3185 "'[%s]'" - WHITESPACE@3185..3186 " " - MODULO@3186..3187 "%" - WHITESPACE@3187..3188 " " - EXPR_ARRAY@3188..3195 - L_BRACK@3188..3189 "[" - EXPR_VAR@3189..3194 - NAME@3189..3194 - IDENT@3189..3194 "sname" - R_BRACK@3194..3195 "]" - R_BRACK@3195..3196 "]" - WHITESPACE@3196..3197 " " - PLUS@3197..3198 "+" - WHITESPACE@3198..3199 " " - EXPR_APPLY@3199..3216 - EXPR_VAR@3199..3209 - NAME@3199..3209 - IDENT@3199..3209 "body_lines" - ARGS_DESC@3209..3216 - L_PAREN@3209..3210 "(" - ARG@3210..3215 - EXPR_VAR@3210..3215 - NAME@3210..3215 - IDENT@3210..3215 "sbody" - R_PAREN@3215..3216 ")" - COMMA@3216..3217 "," - WHITESPACE@3217..3228 "\n " - BIND_DESTRUCT@3228..3303 - DESTRUCT_FULL@3228..3237 - NAME@3228..3237 - IDENT@3228..3237 "main_body" - WHITESPACE@3237..3238 " " - ASSIGN@3238..3239 "=" - WHITESPACE@3239..3240 " " - EXPR_IF_THEN_ELSE@3240..3303 - IF_KW@3240..3242 "if" - WHITESPACE@3242..3243 " " - EXPR_APPLY@3243..3269 - EXPR_INDEX@3243..3256 - EXPR_VAR@3243..3246 - NAME@3243..3246 - IDENT@3243..3246 "std" - DOT@3246..3247 "." - NAME@3247..3256 - IDENT@3247..3256 "objectHas" - ARGS_DESC@3256..3269 - L_PAREN@3256..3257 "(" - ARG@3257..3260 - EXPR_VAR@3257..3260 - NAME@3257..3260 - IDENT@3257..3260 "ini" - COMMA@3260..3261 "," - WHITESPACE@3261..3262 " " - ARG@3262..3268 - EXPR_STRING@3262..3268 - STRING_SINGLE@3262..3268 "'main'" - R_PAREN@3268..3269 ")" - WHITESPACE@3269..3270 " " - THEN_KW@3270..3274 "then" - WHITESPACE@3274..3275 " " - TRUE_EXPR@3275..3295 - EXPR_APPLY@3275..3295 - EXPR_VAR@3275..3285 - NAME@3275..3285 - IDENT@3275..3285 "body_lines" - ARGS_DESC@3285..3295 - L_PAREN@3285..3286 "(" - ARG@3286..3294 - EXPR_INDEX@3286..3294 - EXPR_VAR@3286..3289 - NAME@3286..3289 - IDENT@3286..3289 "ini" - DOT@3289..3290 "." - NAME@3290..3294 - IDENT@3290..3294 "main" - R_PAREN@3294..3295 ")" - WHITESPACE@3295..3296 " " - ELSE_KW@3296..3300 "else" - WHITESPACE@3300..3301 " " - FALSE_EXPR@3301..3303 - EXPR_ARRAY@3301..3303 - L_BRACK@3301..3302 "[" - R_BRACK@3302..3303 "]" - COMMA@3303..3304 "," - WHITESPACE@3304..3315 "\n " - BIND_DESTRUCT@3315..3423 - DESTRUCT_FULL@3315..3327 - NAME@3315..3327 - IDENT@3315..3327 "all_sections" - WHITESPACE@3327..3328 " " - ASSIGN@3328..3329 "=" - WHITESPACE@3329..3330 " " - EXPR_ARRAY_COMP@3330..3423 - L_BRACK@3330..3331 "[" - WHITESPACE@3331..3338 "\n " - EXPR_APPLY@3338..3371 - EXPR_VAR@3338..3351 - NAME@3338..3351 - IDENT@3338..3351 "section_lines" - ARGS_DESC@3351..3371 - L_PAREN@3351..3352 "(" - ARG@3352..3353 - EXPR_VAR@3352..3353 - NAME@3352..3353 - IDENT@3352..3353 "k" - COMMA@3353..3354 "," - WHITESPACE@3354..3355 " " - ARG@3355..3370 - EXPR_INDEX_EXPR@3355..3370 - LHS_EXPR@3355..3367 - EXPR_INDEX@3355..3367 - EXPR_VAR@3355..3358 - NAME@3355..3358 - IDENT@3355..3358 "ini" - DOT@3358..3359 "." - NAME@3359..3367 - IDENT@3359..3367 "sections" - L_BRACK@3367..3368 "[" - EXPR_VAR@3368..3369 - NAME@3368..3369 - IDENT@3368..3369 "k" - R_BRACK@3369..3370 "]" - R_PAREN@3370..3371 ")" - WHITESPACE@3371..3378 "\n " - FOR_SPEC@3378..3417 - FOR_KW@3378..3381 "for" - WHITESPACE@3381..3382 " " - NAME@3382..3383 - IDENT@3382..3383 "k" - WHITESPACE@3383..3384 " " - IN_KW@3384..3386 "in" - WHITESPACE@3386..3387 " " - EXPR_APPLY@3387..3417 - EXPR_INDEX@3387..3403 - EXPR_VAR@3387..3390 - NAME@3387..3390 - IDENT@3387..3390 "std" - DOT@3390..3391 "." - NAME@3391..3403 - IDENT@3391..3403 "objectFields" - ARGS_DESC@3403..3417 - L_PAREN@3403..3404 "(" - ARG@3404..3416 - EXPR_INDEX@3404..3416 - EXPR_VAR@3404..3407 - NAME@3404..3407 - IDENT@3404..3407 "ini" - DOT@3407..3408 "." - NAME@3408..3416 - IDENT@3408..3416 "sections" - R_PAREN@3416..3417 ")" - WHITESPACE@3417..3422 "\n " - R_BRACK@3422..3423 "]" - SEMI@3423..3424 ";" - WHITESPACE@3424..3429 "\n " - EXPR_APPLY@3429..3495 - EXPR_INDEX@3429..3437 - EXPR_VAR@3429..3432 - NAME@3429..3432 - IDENT@3429..3432 "std" - DOT@3432..3433 "." - NAME@3433..3437 - IDENT@3433..3437 "join" - ARGS_DESC@3437..3495 - L_PAREN@3437..3438 "(" - ARG@3438..3442 - EXPR_STRING@3438..3442 - STRING_SINGLE@3438..3442 "'\\n'" - COMMA@3442..3443 "," - WHITESPACE@3443..3444 " " - ARG@3444..3494 - EXPR_BINARY@3444..3494 - LHS_EXPR@3444..3487 - EXPR_BINARY@3444..3487 - LHS_EXPR@3444..3453 - EXPR_VAR@3444..3453 - NAME@3444..3453 - IDENT@3444..3453 "main_body" - WHITESPACE@3453..3454 " " - PLUS@3454..3455 "+" - WHITESPACE@3455..3456 " " - EXPR_APPLY@3456..3487 - EXPR_INDEX@3456..3473 - EXPR_VAR@3456..3459 - NAME@3456..3459 - IDENT@3456..3459 "std" - DOT@3459..3460 "." - NAME@3460..3473 - IDENT@3460..3473 "flattenArrays" - ARGS_DESC@3473..3487 - L_PAREN@3473..3474 "(" - ARG@3474..3486 - EXPR_VAR@3474..3486 - NAME@3474..3486 - IDENT@3474..3486 "all_sections" - R_PAREN@3486..3487 ")" - WHITESPACE@3487..3488 " " - PLUS@3488..3489 "+" - WHITESPACE@3489..3490 " " - EXPR_ARRAY@3490..3494 - L_BRACK@3490..3491 "[" - EXPR_STRING@3491..3493 - STRING_SINGLE@3491..3493 "''" - R_BRACK@3493..3494 "]" - R_PAREN@3494..3495 ")" - COMMA@3495..3496 "," - WHITESPACE@3496..3500 "\n\n " - MEMBER_FIELD_METHOD@3500..3553 - FIELD_NAME_FIXED@3500..3512 - NAME@3500..3512 - IDENT@3500..3512 "manifestToml" - PARAMS_DESC@3512..3519 - L_PAREN@3512..3513 "(" - PARAM@3513..3518 - DESTRUCT_FULL@3513..3518 - NAME@3513..3518 - IDENT@3513..3518 "value" - R_PAREN@3518..3519 ")" - COLONCOLON@3519..3521 "::" - WHITESPACE@3521..3522 " " - EXPR_APPLY@3522..3553 - EXPR_INDEX@3522..3540 - EXPR_VAR@3522..3525 - NAME@3522..3525 - IDENT@3522..3525 "std" - DOT@3525..3526 "." - NAME@3526..3540 - IDENT@3526..3540 "manifestTomlEx" - ARGS_DESC@3540..3553 - L_PAREN@3540..3541 "(" - ARG@3541..3546 - EXPR_VAR@3541..3546 - NAME@3541..3546 - IDENT@3541..3546 "value" - COMMA@3546..3547 "," - WHITESPACE@3547..3548 " " - ARG@3548..3552 - EXPR_STRING@3548..3552 - STRING_SINGLE@3548..3552 "' '" - R_PAREN@3552..3553 ")" - COMMA@3553..3554 "," - WHITESPACE@3554..3558 "\n\n " - MEMBER_FIELD_METHOD@3558..3613 - FIELD_NAME_FIXED@3558..3576 - NAME@3558..3576 - IDENT@3558..3576 "escapeStringPython" - PARAMS_DESC@3576..3581 - L_PAREN@3576..3577 "(" - PARAM@3577..3580 - DESTRUCT_FULL@3577..3580 - NAME@3577..3580 - IDENT@3577..3580 "str" - R_PAREN@3580..3581 ")" - COLONCOLON@3581..3583 "::" - WHITESPACE@3583..3588 "\n " - EXPR_APPLY@3588..3613 - EXPR_INDEX@3588..3608 + THEN_KW@2615..2619 "then" + WHITESPACE@2619..2620 " " + TRUE_EXPR@2620..2640 + EXPR@2620..2640 + EXPR_VAR@2620..2630 + NAME@2620..2630 + IDENT@2620..2630 "body_lines" + SUFFIX_APPLY@2630..2640 + ARGS_DESC@2630..2640 + L_PAREN@2630..2631 "(" + ARG@2631..2639 + EXPR@2631..2639 + EXPR_VAR@2631..2634 + NAME@2631..2634 + IDENT@2631..2634 "ini" + SUFFIX_INDEX@2634..2639 + DOT@2634..2635 "." + NAME@2635..2639 + IDENT@2635..2639 "main" + R_PAREN@2639..2640 ")" + WHITESPACE@2640..2641 " " + ELSE_KW@2641..2645 "else" + WHITESPACE@2645..2646 " " + FALSE_EXPR@2646..2648 + EXPR@2646..2648 + EXPR_ARRAY@2646..2648 + L_BRACK@2646..2647 "[" + R_BRACK@2647..2648 "]" + COMMA@2648..2649 "," + WHITESPACE@2649..2660 "\n " + BIND_DESTRUCT@2660..2768 + DESTRUCT_FULL@2660..2672 + NAME@2660..2672 + IDENT@2660..2672 "all_sections" + WHITESPACE@2672..2673 " " + ASSIGN@2673..2674 "=" + WHITESPACE@2674..2675 " " + EXPR@2675..2768 + EXPR_ARRAY_COMP@2675..2768 + L_BRACK@2675..2676 "[" + WHITESPACE@2676..2683 "\n " + EXPR@2683..2716 + EXPR_VAR@2683..2696 + NAME@2683..2696 + IDENT@2683..2696 "section_lines" + SUFFIX_APPLY@2696..2716 + ARGS_DESC@2696..2716 + L_PAREN@2696..2697 "(" + ARG@2697..2698 + EXPR@2697..2698 + EXPR_VAR@2697..2698 + NAME@2697..2698 + IDENT@2697..2698 "k" + COMMA@2698..2699 "," + WHITESPACE@2699..2700 " " + ARG@2700..2715 + EXPR@2700..2715 + EXPR_VAR@2700..2703 + NAME@2700..2703 + IDENT@2700..2703 "ini" + SUFFIX_INDEX@2703..2712 + DOT@2703..2704 "." + NAME@2704..2712 + IDENT@2704..2712 "sections" + SUFFIX_INDEX_EXPR@2712..2715 + L_BRACK@2712..2713 "[" + EXPR@2713..2714 + EXPR_VAR@2713..2714 + NAME@2713..2714 + IDENT@2713..2714 "k" + R_BRACK@2714..2715 "]" + R_PAREN@2715..2716 ")" + WHITESPACE@2716..2723 "\n " + FOR_SPEC@2723..2762 + FOR_KW@2723..2726 "for" + WHITESPACE@2726..2727 " " + DESTRUCT_FULL@2727..2728 + NAME@2727..2728 + IDENT@2727..2728 "k" + WHITESPACE@2728..2729 " " + IN_KW@2729..2731 "in" + WHITESPACE@2731..2732 " " + EXPR@2732..2762 + EXPR_VAR@2732..2735 + NAME@2732..2735 + IDENT@2732..2735 "std" + SUFFIX_INDEX@2735..2748 + DOT@2735..2736 "." + NAME@2736..2748 + IDENT@2736..2748 "objectFields" + SUFFIX_APPLY@2748..2762 + ARGS_DESC@2748..2762 + L_PAREN@2748..2749 "(" + ARG@2749..2761 + EXPR@2749..2761 + EXPR_VAR@2749..2752 + NAME@2749..2752 + IDENT@2749..2752 "ini" + SUFFIX_INDEX@2752..2761 + DOT@2752..2753 "." + NAME@2753..2761 + IDENT@2753..2761 "sections" + R_PAREN@2761..2762 ")" + WHITESPACE@2762..2767 "\n " + R_BRACK@2767..2768 "]" + SEMI@2768..2769 ";" + WHITESPACE@2769..2774 "\n " + EXPR_VAR@2774..2777 + NAME@2774..2777 + IDENT@2774..2777 "std" + SUFFIX_INDEX@2777..2782 + DOT@2777..2778 "." + NAME@2778..2782 + IDENT@2778..2782 "join" + SUFFIX_APPLY@2782..2840 + ARGS_DESC@2782..2840 + L_PAREN@2782..2783 "(" + ARG@2783..2787 + EXPR@2783..2787 + EXPR_STRING@2783..2787 + STRING_SINGLE@2783..2787 "'\\n'" + COMMA@2787..2788 "," + WHITESPACE@2788..2789 " " + ARG@2789..2839 + EXPR@2789..2839 + EXPR_BINARY@2789..2839 + EXPR@2789..2832 + EXPR_BINARY@2789..2832 + EXPR@2789..2798 + EXPR_VAR@2789..2798 + NAME@2789..2798 + IDENT@2789..2798 "main_body" + WHITESPACE@2798..2799 " " + PLUS@2799..2800 "+" + WHITESPACE@2800..2801 " " + EXPR@2801..2832 + EXPR_VAR@2801..2804 + NAME@2801..2804 + IDENT@2801..2804 "std" + SUFFIX_INDEX@2804..2818 + DOT@2804..2805 "." + NAME@2805..2818 + IDENT@2805..2818 "flattenArrays" + SUFFIX_APPLY@2818..2832 + ARGS_DESC@2818..2832 + L_PAREN@2818..2819 "(" + ARG@2819..2831 + EXPR@2819..2831 + EXPR_VAR@2819..2831 + NAME@2819..2831 + IDENT@2819..2831 "all_sections" + R_PAREN@2831..2832 ")" + WHITESPACE@2832..2833 " " + PLUS@2833..2834 "+" + WHITESPACE@2834..2835 " " + EXPR@2835..2839 + EXPR_ARRAY@2835..2839 + L_BRACK@2835..2836 "[" + EXPR@2836..2838 + EXPR_STRING@2836..2838 + STRING_SINGLE@2836..2838 "''" + R_BRACK@2838..2839 "]" + R_PAREN@2839..2840 ")" + COMMA@2840..2841 "," + WHITESPACE@2841..2845 "\n\n " + MEMBER_FIELD_METHOD@2845..2898 + FIELD_NAME_FIXED@2845..2857 + NAME@2845..2857 + IDENT@2845..2857 "manifestToml" + PARAMS_DESC@2857..2864 + L_PAREN@2857..2858 "(" + PARAM@2858..2863 + DESTRUCT_FULL@2858..2863 + NAME@2858..2863 + IDENT@2858..2863 "value" + R_PAREN@2863..2864 ")" + COLONCOLON@2864..2866 "::" + WHITESPACE@2866..2867 " " + EXPR@2867..2898 + EXPR_VAR@2867..2870 + NAME@2867..2870 + IDENT@2867..2870 "std" + SUFFIX_INDEX@2870..2885 + DOT@2870..2871 "." + NAME@2871..2885 + IDENT@2871..2885 "manifestTomlEx" + SUFFIX_APPLY@2885..2898 + ARGS_DESC@2885..2898 + L_PAREN@2885..2886 "(" + ARG@2886..2891 + EXPR@2886..2891 + EXPR_VAR@2886..2891 + NAME@2886..2891 + IDENT@2886..2891 "value" + COMMA@2891..2892 "," + WHITESPACE@2892..2893 " " + ARG@2893..2897 + EXPR@2893..2897 + EXPR_STRING@2893..2897 + STRING_SINGLE@2893..2897 "' '" + R_PAREN@2897..2898 ")" + COMMA@2898..2899 "," + WHITESPACE@2899..2903 "\n\n " + MEMBER_FIELD_METHOD@2903..2958 + FIELD_NAME_FIXED@2903..2921 + NAME@2903..2921 + IDENT@2903..2921 "escapeStringPython" + PARAMS_DESC@2921..2926 + L_PAREN@2921..2922 "(" + PARAM@2922..2925 + DESTRUCT_FULL@2922..2925 + NAME@2922..2925 + IDENT@2922..2925 "str" + R_PAREN@2925..2926 ")" + COLONCOLON@2926..2928 "::" + WHITESPACE@2928..2933 "\n " + EXPR@2933..2958 + EXPR_VAR@2933..2936 + NAME@2933..2936 + IDENT@2933..2936 "std" + SUFFIX_INDEX@2936..2953 + DOT@2936..2937 "." + NAME@2937..2953 + IDENT@2937..2953 "escapeStringJson" + SUFFIX_APPLY@2953..2958 + ARGS_DESC@2953..2958 + L_PAREN@2953..2954 "(" + ARG@2954..2957 + EXPR@2954..2957 + EXPR_VAR@2954..2957 + NAME@2954..2957 + IDENT@2954..2957 "str" + R_PAREN@2957..2958 ")" + COMMA@2958..2959 "," + WHITESPACE@2959..2963 "\n\n " + MEMBER_FIELD_METHOD@2963..3180 + FIELD_NAME_FIXED@2963..2979 + NAME@2963..2979 + IDENT@2963..2979 "escapeStringBash" + PARAMS_DESC@2979..2985 + L_PAREN@2979..2980 "(" + PARAM@2980..2984 + DESTRUCT_FULL@2980..2984 + NAME@2980..2984 + IDENT@2980..2984 "str_" + R_PAREN@2984..2985 ")" + COLONCOLON@2985..2987 "::" + WHITESPACE@2987..2992 "\n " + EXPR@2992..3180 + STMT_LOCAL@2992..3023 + LOCAL_KW@2992..2997 "local" + WHITESPACE@2997..2998 " " + BIND_DESTRUCT@2998..3022 + DESTRUCT_FULL@2998..3001 + NAME@2998..3001 + IDENT@2998..3001 "str" + WHITESPACE@3001..3002 " " + ASSIGN@3002..3003 "=" + WHITESPACE@3003..3004 " " + EXPR@3004..3022 + EXPR_VAR@3004..3007 + NAME@3004..3007 + IDENT@3004..3007 "std" + SUFFIX_INDEX@3007..3016 + DOT@3007..3008 "." + NAME@3008..3016 + IDENT@3008..3016 "toString" + SUFFIX_APPLY@3016..3022 + ARGS_DESC@3016..3022 + L_PAREN@3016..3017 "(" + ARG@3017..3021 + EXPR@3017..3021 + EXPR_VAR@3017..3021 + NAME@3017..3021 + IDENT@3017..3021 "str_" + R_PAREN@3021..3022 ")" + SEMI@3022..3023 ";" + WHITESPACE@3023..3028 "\n " + STMT_LOCAL@3028..3110 + LOCAL_KW@3028..3033 "local" + WHITESPACE@3033..3034 " " + BIND_FUNCTION@3034..3109 + NAME@3034..3039 + IDENT@3034..3039 "trans" + PARAMS_DESC@3039..3043 + L_PAREN@3039..3040 "(" + PARAM@3040..3042 + DESTRUCT_FULL@3040..3042 + NAME@3040..3042 + IDENT@3040..3042 "ch" + R_PAREN@3042..3043 ")" + WHITESPACE@3043..3044 " " + ASSIGN@3044..3045 "=" + WHITESPACE@3045..3052 "\n " + EXPR@3052..3109 + EXPR_IF_THEN_ELSE@3052..3109 + IF_KW@3052..3054 "if" + WHITESPACE@3054..3055 " " + EXPR@3055..3064 + EXPR_BINARY@3055..3064 + EXPR@3055..3057 + EXPR_VAR@3055..3057 + NAME@3055..3057 + IDENT@3055..3057 "ch" + WHITESPACE@3057..3058 " " + EQ@3058..3060 "==" + WHITESPACE@3060..3061 " " + EXPR@3061..3064 + EXPR_STRING@3061..3064 + STRING_DOUBLE@3061..3064 "\"'\"" + WHITESPACE@3064..3065 " " + THEN_KW@3065..3069 "then" + WHITESPACE@3069..3078 "\n " + TRUE_EXPR@3078..3087 + EXPR@3078..3087 + EXPR_STRING@3078..3087 + STRING_DOUBLE@3078..3087 "\"'\\\"'\\\"'\"" + WHITESPACE@3087..3094 "\n " + ELSE_KW@3094..3098 "else" + WHITESPACE@3098..3107 "\n " + FALSE_EXPR@3107..3109 + EXPR@3107..3109 + EXPR_VAR@3107..3109 + NAME@3107..3109 + IDENT@3107..3109 "ch" + SEMI@3109..3110 ";" + WHITESPACE@3110..3115 "\n " + EXPR_BINARY@3115..3180 + EXPR@3115..3121 + EXPR_STRING@3115..3121 + STRING_DOUBLE@3115..3121 "\"'%s'\"" + WHITESPACE@3121..3122 " " + MODULO@3122..3123 "%" + WHITESPACE@3123..3124 " " + EXPR@3124..3180 + EXPR_VAR@3124..3127 + NAME@3124..3127 + IDENT@3124..3127 "std" + SUFFIX_INDEX@3127..3132 + DOT@3127..3128 "." + NAME@3128..3132 + IDENT@3128..3132 "join" + SUFFIX_APPLY@3132..3180 + ARGS_DESC@3132..3180 + L_PAREN@3132..3133 "(" + ARG@3133..3135 + EXPR@3133..3135 + EXPR_STRING@3133..3135 + STRING_SINGLE@3133..3135 "''" + COMMA@3135..3136 "," + WHITESPACE@3136..3137 " " + ARG@3137..3179 + EXPR@3137..3179 + EXPR_ARRAY_COMP@3137..3179 + L_BRACK@3137..3138 "[" + EXPR@3138..3147 + EXPR_VAR@3138..3143 + NAME@3138..3143 + IDENT@3138..3143 "trans" + SUFFIX_APPLY@3143..3147 + ARGS_DESC@3143..3147 + L_PAREN@3143..3144 "(" + ARG@3144..3146 + EXPR@3144..3146 + EXPR_VAR@3144..3146 + NAME@3144..3146 + IDENT@3144..3146 "ch" + R_PAREN@3146..3147 ")" + WHITESPACE@3147..3148 " " + FOR_SPEC@3148..3178 + FOR_KW@3148..3151 "for" + WHITESPACE@3151..3152 " " + DESTRUCT_FULL@3152..3154 + NAME@3152..3154 + IDENT@3152..3154 "ch" + WHITESPACE@3154..3155 " " + IN_KW@3155..3157 "in" + WHITESPACE@3157..3158 " " + EXPR@3158..3178 + EXPR_VAR@3158..3161 + NAME@3158..3161 + IDENT@3158..3161 "std" + SUFFIX_INDEX@3161..3173 + DOT@3161..3162 "." + NAME@3162..3173 + IDENT@3162..3173 "stringChars" + SUFFIX_APPLY@3173..3178 + ARGS_DESC@3173..3178 + L_PAREN@3173..3174 "(" + ARG@3174..3177 + EXPR@3174..3177 + EXPR_VAR@3174..3177 + NAME@3174..3177 + IDENT@3174..3177 "str" + R_PAREN@3177..3178 ")" + R_BRACK@3178..3179 "]" + R_PAREN@3179..3180 ")" + COMMA@3180..3181 "," + WHITESPACE@3181..3185 "\n\n " + MEMBER_FIELD_METHOD@3185..3399 + FIELD_NAME_FIXED@3185..3204 + NAME@3185..3204 + IDENT@3185..3204 "escapeStringDollars" + PARAMS_DESC@3204..3210 + L_PAREN@3204..3205 "(" + PARAM@3205..3209 + DESTRUCT_FULL@3205..3209 + NAME@3205..3209 + IDENT@3205..3209 "str_" + R_PAREN@3209..3210 ")" + COLONCOLON@3210..3212 "::" + WHITESPACE@3212..3217 "\n " + EXPR@3217..3399 + STMT_LOCAL@3217..3248 + LOCAL_KW@3217..3222 "local" + WHITESPACE@3222..3223 " " + BIND_DESTRUCT@3223..3247 + DESTRUCT_FULL@3223..3226 + NAME@3223..3226 + IDENT@3223..3226 "str" + WHITESPACE@3226..3227 " " + ASSIGN@3227..3228 "=" + WHITESPACE@3228..3229 " " + EXPR@3229..3247 + EXPR_VAR@3229..3232 + NAME@3229..3232 + IDENT@3229..3232 "std" + SUFFIX_INDEX@3232..3241 + DOT@3232..3233 "." + NAME@3233..3241 + IDENT@3233..3241 "toString" + SUFFIX_APPLY@3241..3247 + ARGS_DESC@3241..3247 + L_PAREN@3241..3242 "(" + ARG@3242..3246 + EXPR@3242..3246 + EXPR_VAR@3242..3246 + NAME@3242..3246 + IDENT@3242..3246 "str_" + R_PAREN@3246..3247 ")" + SEMI@3247..3248 ";" + WHITESPACE@3248..3253 "\n " + STMT_LOCAL@3253..3330 + LOCAL_KW@3253..3258 "local" + WHITESPACE@3258..3259 " " + BIND_FUNCTION@3259..3329 + NAME@3259..3264 + IDENT@3259..3264 "trans" + PARAMS_DESC@3264..3268 + L_PAREN@3264..3265 "(" + PARAM@3265..3267 + DESTRUCT_FULL@3265..3267 + NAME@3265..3267 + IDENT@3265..3267 "ch" + R_PAREN@3267..3268 ")" + WHITESPACE@3268..3269 " " + ASSIGN@3269..3270 "=" + WHITESPACE@3270..3277 "\n " + EXPR@3277..3329 + EXPR_IF_THEN_ELSE@3277..3329 + IF_KW@3277..3279 "if" + WHITESPACE@3279..3280 " " + EXPR@3280..3289 + EXPR_BINARY@3280..3289 + EXPR@3280..3282 + EXPR_VAR@3280..3282 + NAME@3280..3282 + IDENT@3280..3282 "ch" + WHITESPACE@3282..3283 " " + EQ@3283..3285 "==" + WHITESPACE@3285..3286 " " + EXPR@3286..3289 + EXPR_STRING@3286..3289 + STRING_SINGLE@3286..3289 "'$'" + WHITESPACE@3289..3290 " " + THEN_KW@3290..3294 "then" + WHITESPACE@3294..3303 "\n " + TRUE_EXPR@3303..3307 + EXPR@3303..3307 + EXPR_STRING@3303..3307 + STRING_SINGLE@3303..3307 "'$$'" + WHITESPACE@3307..3314 "\n " + ELSE_KW@3314..3318 "else" + WHITESPACE@3318..3327 "\n " + FALSE_EXPR@3327..3329 + EXPR@3327..3329 + EXPR_VAR@3327..3329 + NAME@3327..3329 + IDENT@3327..3329 "ch" + SEMI@3329..3330 ";" + WHITESPACE@3330..3335 "\n " + EXPR_VAR@3335..3338 + NAME@3335..3338 + IDENT@3335..3338 "std" + SUFFIX_INDEX@3338..3344 + DOT@3338..3339 "." + NAME@3339..3344 + IDENT@3339..3344 "foldl" + SUFFIX_APPLY@3344..3399 + ARGS_DESC@3344..3399 + L_PAREN@3344..3345 "(" + ARG@3345..3372 + EXPR@3345..3372 + EXPR_FUNCTION@3345..3372 + FUNCTION_KW@3345..3353 "function" + PARAMS_DESC@3353..3359 + L_PAREN@3353..3354 "(" + PARAM@3354..3355 + DESTRUCT_FULL@3354..3355 + NAME@3354..3355 + IDENT@3354..3355 "a" + COMMA@3355..3356 "," + WHITESPACE@3356..3357 " " + PARAM@3357..3358 + DESTRUCT_FULL@3357..3358 + NAME@3357..3358 + IDENT@3357..3358 "b" + R_PAREN@3358..3359 ")" + WHITESPACE@3359..3360 " " + EXPR@3360..3372 + EXPR_BINARY@3360..3372 + EXPR@3360..3361 + EXPR_VAR@3360..3361 + NAME@3360..3361 + IDENT@3360..3361 "a" + WHITESPACE@3361..3362 " " + PLUS@3362..3363 "+" + WHITESPACE@3363..3364 " " + EXPR@3364..3372 + EXPR_VAR@3364..3369 + NAME@3364..3369 + IDENT@3364..3369 "trans" + SUFFIX_APPLY@3369..3372 + ARGS_DESC@3369..3372 + L_PAREN@3369..3370 "(" + ARG@3370..3371 + EXPR@3370..3371 + EXPR_VAR@3370..3371 + NAME@3370..3371 + IDENT@3370..3371 "b" + R_PAREN@3371..3372 ")" + COMMA@3372..3373 "," + WHITESPACE@3373..3374 " " + ARG@3374..3394 + EXPR@3374..3394 + EXPR_VAR@3374..3377 + NAME@3374..3377 + IDENT@3374..3377 "std" + SUFFIX_INDEX@3377..3389 + DOT@3377..3378 "." + NAME@3378..3389 + IDENT@3378..3389 "stringChars" + SUFFIX_APPLY@3389..3394 + ARGS_DESC@3389..3394 + L_PAREN@3389..3390 "(" + ARG@3390..3393 + EXPR@3390..3393 + EXPR_VAR@3390..3393 + NAME@3390..3393 + IDENT@3390..3393 "str" + R_PAREN@3393..3394 ")" + COMMA@3394..3395 "," + WHITESPACE@3395..3396 " " + ARG@3396..3398 + EXPR@3396..3398 + EXPR_STRING@3396..3398 + STRING_SINGLE@3396..3398 "''" + R_PAREN@3398..3399 ")" + COMMA@3399..3400 "," + WHITESPACE@3400..3404 "\n\n " + MEMBER_BIND_STMT@3404..3519 + OBJ_LOCAL@3404..3519 + LOCAL_KW@3404..3409 "local" + WHITESPACE@3409..3410 " " + BIND_DESTRUCT@3410..3519 + DESTRUCT_FULL@3410..3421 + NAME@3410..3421 + IDENT@3410..3421 "xml_escapes" + WHITESPACE@3421..3422 " " + ASSIGN@3422..3423 "=" + WHITESPACE@3423..3424 " " + EXPR@3424..3519 + EXPR_OBJECT@3424..3519 + OBJ_BODY_MEMBER_LIST@3424..3519 + L_BRACE@3424..3425 "{" + WHITESPACE@3425..3430 "\n " + MEMBER_FIELD_NORMAL@3430..3441 + FIELD_NAME_FIXED@3430..3433 + STRING_SINGLE@3430..3433 "'<'" + COLON@3433..3434 ":" + WHITESPACE@3434..3435 " " + EXPR@3435..3441 + EXPR_STRING@3435..3441 + STRING_SINGLE@3435..3441 "'<'" + COMMA@3441..3442 "," + WHITESPACE@3442..3447 "\n " + MEMBER_FIELD_NORMAL@3447..3458 + FIELD_NAME_FIXED@3447..3450 + STRING_SINGLE@3447..3450 "'>'" + COLON@3450..3451 ":" + WHITESPACE@3451..3452 " " + EXPR@3452..3458 + EXPR_STRING@3452..3458 + STRING_SINGLE@3452..3458 "'>'" + COMMA@3458..3459 "," + WHITESPACE@3459..3464 "\n " + MEMBER_FIELD_NORMAL@3464..3476 + FIELD_NAME_FIXED@3464..3467 + STRING_SINGLE@3464..3467 "'&'" + COLON@3467..3468 ":" + WHITESPACE@3468..3469 " " + EXPR@3469..3476 + EXPR_STRING@3469..3476 + STRING_SINGLE@3469..3476 "'&'" + COMMA@3476..3477 "," + WHITESPACE@3477..3482 "\n " + MEMBER_FIELD_NORMAL@3482..3495 + FIELD_NAME_FIXED@3482..3485 + STRING_SINGLE@3482..3485 "'\"'" + COLON@3485..3486 ":" + WHITESPACE@3486..3487 " " + EXPR@3487..3495 + EXPR_STRING@3487..3495 + STRING_SINGLE@3487..3495 "'"'" + COMMA@3495..3496 "," + WHITESPACE@3496..3501 "\n " + MEMBER_FIELD_NORMAL@3501..3514 + FIELD_NAME_FIXED@3501..3504 + STRING_DOUBLE@3501..3504 "\"'\"" + COLON@3504..3505 ":" + WHITESPACE@3505..3506 " " + EXPR@3506..3514 + EXPR_STRING@3506..3514 + STRING_SINGLE@3506..3514 "'''" + COMMA@3514..3515 "," + WHITESPACE@3515..3518 "\n " + R_BRACE@3518..3519 "}" + COMMA@3519..3520 "," + WHITESPACE@3520..3524 "\n\n " + MEMBER_FIELD_METHOD@3524..3663 + FIELD_NAME_FIXED@3524..3539 + NAME@3524..3539 + IDENT@3524..3539 "escapeStringXML" + PARAMS_DESC@3539..3545 + L_PAREN@3539..3540 "(" + PARAM@3540..3544 + DESTRUCT_FULL@3540..3544 + NAME@3540..3544 + IDENT@3540..3544 "str_" + R_PAREN@3544..3545 ")" + COLONCOLON@3545..3547 "::" + WHITESPACE@3547..3552 "\n " + EXPR@3552..3663 + STMT_LOCAL@3552..3583 + LOCAL_KW@3552..3557 "local" + WHITESPACE@3557..3558 " " + BIND_DESTRUCT@3558..3582 + DESTRUCT_FULL@3558..3561 + NAME@3558..3561 + IDENT@3558..3561 "str" + WHITESPACE@3561..3562 " " + ASSIGN@3562..3563 "=" + WHITESPACE@3563..3564 " " + EXPR@3564..3582 + EXPR_VAR@3564..3567 + NAME@3564..3567 + IDENT@3564..3567 "std" + SUFFIX_INDEX@3567..3576 + DOT@3567..3568 "." + NAME@3568..3576 + IDENT@3568..3576 "toString" + SUFFIX_APPLY@3576..3582 + ARGS_DESC@3576..3582 + L_PAREN@3576..3577 "(" + ARG@3577..3581 + EXPR@3577..3581 + EXPR_VAR@3577..3581 + NAME@3577..3581 + IDENT@3577..3581 "str_" + R_PAREN@3581..3582 ")" + SEMI@3582..3583 ";" + WHITESPACE@3583..3588 "\n " EXPR_VAR@3588..3591 NAME@3588..3591 IDENT@3588..3591 "std" - DOT@3591..3592 "." - NAME@3592..3608 - IDENT@3592..3608 "escapeStringJson" - ARGS_DESC@3608..3613 - L_PAREN@3608..3609 "(" - ARG@3609..3612 - EXPR_VAR@3609..3612 - NAME@3609..3612 - IDENT@3609..3612 "str" - R_PAREN@3612..3613 ")" - COMMA@3613..3614 "," - WHITESPACE@3614..3618 "\n\n " - MEMBER_FIELD_METHOD@3618..3835 - FIELD_NAME_FIXED@3618..3634 - NAME@3618..3634 - IDENT@3618..3634 "escapeStringBash" - PARAMS_DESC@3634..3640 - L_PAREN@3634..3635 "(" - PARAM@3635..3639 - DESTRUCT_FULL@3635..3639 - NAME@3635..3639 - IDENT@3635..3639 "str_" - R_PAREN@3639..3640 ")" - COLONCOLON@3640..3642 "::" - WHITESPACE@3642..3647 "\n " - STMT_LOCAL@3647..3678 - LOCAL_KW@3647..3652 "local" - WHITESPACE@3652..3653 " " - BIND_DESTRUCT@3653..3677 - DESTRUCT_FULL@3653..3656 - NAME@3653..3656 - IDENT@3653..3656 "str" - WHITESPACE@3656..3657 " " - ASSIGN@3657..3658 "=" - WHITESPACE@3658..3659 " " - EXPR_APPLY@3659..3677 - EXPR_INDEX@3659..3671 - EXPR_VAR@3659..3662 - NAME@3659..3662 - IDENT@3659..3662 "std" - DOT@3662..3663 "." - NAME@3663..3671 - IDENT@3663..3671 "toString" - ARGS_DESC@3671..3677 - L_PAREN@3671..3672 "(" - ARG@3672..3676 - EXPR_VAR@3672..3676 - NAME@3672..3676 - IDENT@3672..3676 "str_" - R_PAREN@3676..3677 ")" - SEMI@3677..3678 ";" - WHITESPACE@3678..3683 "\n " - STMT_LOCAL@3683..3765 - LOCAL_KW@3683..3688 "local" - WHITESPACE@3688..3689 " " - BIND_FUNCTION@3689..3764 - NAME@3689..3694 - IDENT@3689..3694 "trans" - PARAMS_DESC@3694..3698 - L_PAREN@3694..3695 "(" - PARAM@3695..3697 - DESTRUCT_FULL@3695..3697 - NAME@3695..3697 - IDENT@3695..3697 "ch" - R_PAREN@3697..3698 ")" - WHITESPACE@3698..3699 " " - ASSIGN@3699..3700 "=" - WHITESPACE@3700..3707 "\n " - EXPR_IF_THEN_ELSE@3707..3764 - IF_KW@3707..3709 "if" - WHITESPACE@3709..3710 " " - EXPR_BINARY@3710..3719 - LHS_EXPR@3710..3712 - EXPR_VAR@3710..3712 - NAME@3710..3712 - IDENT@3710..3712 "ch" - WHITESPACE@3712..3713 " " - EQ@3713..3715 "==" + SUFFIX_INDEX@3591..3596 + DOT@3591..3592 "." + NAME@3592..3596 + IDENT@3592..3596 "join" + SUFFIX_APPLY@3596..3663 + ARGS_DESC@3596..3663 + L_PAREN@3596..3597 "(" + ARG@3597..3599 + EXPR@3597..3599 + EXPR_STRING@3597..3599 + STRING_SINGLE@3597..3599 "''" + COMMA@3599..3600 "," + WHITESPACE@3600..3601 " " + ARG@3601..3662 + EXPR@3601..3662 + EXPR_ARRAY_COMP@3601..3662 + L_BRACK@3601..3602 "[" + EXPR@3602..3630 + EXPR_VAR@3602..3605 + NAME@3602..3605 + IDENT@3602..3605 "std" + SUFFIX_INDEX@3605..3609 + DOT@3605..3606 "." + NAME@3606..3609 + IDENT@3606..3609 "get" + SUFFIX_APPLY@3609..3630 + ARGS_DESC@3609..3630 + L_PAREN@3609..3610 "(" + ARG@3610..3621 + EXPR@3610..3621 + EXPR_VAR@3610..3621 + NAME@3610..3621 + IDENT@3610..3621 "xml_escapes" + COMMA@3621..3622 "," + WHITESPACE@3622..3623 " " + ARG@3623..3625 + EXPR@3623..3625 + EXPR_VAR@3623..3625 + NAME@3623..3625 + IDENT@3623..3625 "ch" + COMMA@3625..3626 "," + WHITESPACE@3626..3627 " " + ARG@3627..3629 + EXPR@3627..3629 + EXPR_VAR@3627..3629 + NAME@3627..3629 + IDENT@3627..3629 "ch" + R_PAREN@3629..3630 ")" + WHITESPACE@3630..3631 " " + FOR_SPEC@3631..3661 + FOR_KW@3631..3634 "for" + WHITESPACE@3634..3635 " " + DESTRUCT_FULL@3635..3637 + NAME@3635..3637 + IDENT@3635..3637 "ch" + WHITESPACE@3637..3638 " " + IN_KW@3638..3640 "in" + WHITESPACE@3640..3641 " " + EXPR@3641..3661 + EXPR_VAR@3641..3644 + NAME@3641..3644 + IDENT@3641..3644 "std" + SUFFIX_INDEX@3644..3656 + DOT@3644..3645 "." + NAME@3645..3656 + IDENT@3645..3656 "stringChars" + SUFFIX_APPLY@3656..3661 + ARGS_DESC@3656..3661 + L_PAREN@3656..3657 "(" + ARG@3657..3660 + EXPR@3657..3660 + EXPR_VAR@3657..3660 + NAME@3657..3660 + IDENT@3657..3660 "str" + R_PAREN@3660..3661 ")" + R_BRACK@3661..3662 "]" + R_PAREN@3662..3663 ")" + COMMA@3663..3664 "," + WHITESPACE@3664..3668 "\n\n " + MEMBER_FIELD_METHOD@3668..3734 + FIELD_NAME_FIXED@3668..3680 + NAME@3668..3680 + IDENT@3668..3680 "manifestJson" + PARAMS_DESC@3680..3687 + L_PAREN@3680..3681 "(" + PARAM@3681..3686 + DESTRUCT_FULL@3681..3686 + NAME@3681..3686 + IDENT@3681..3686 "value" + R_PAREN@3686..3687 ")" + COLONCOLON@3687..3689 "::" + WHITESPACE@3689..3690 " " + EXPR@3690..3734 + EXPR_VAR@3690..3693 + NAME@3690..3693 + IDENT@3690..3693 "std" + SUFFIX_INDEX@3693..3708 + DOT@3693..3694 "." + NAME@3694..3708 + IDENT@3694..3708 "manifestJsonEx" + SUFFIX_APPLY@3708..3734 + ARGS_DESC@3708..3734 + L_PAREN@3708..3709 "(" + ARG@3709..3714 + EXPR@3709..3714 + EXPR_VAR@3709..3714 + NAME@3709..3714 + IDENT@3709..3714 "value" + COMMA@3714..3715 "," WHITESPACE@3715..3716 " " - EXPR_STRING@3716..3719 - STRING_DOUBLE@3716..3719 "\"'\"" - WHITESPACE@3719..3720 " " - THEN_KW@3720..3724 "then" - WHITESPACE@3724..3733 "\n " - TRUE_EXPR@3733..3742 - EXPR_STRING@3733..3742 - STRING_DOUBLE@3733..3742 "\"'\\\"'\\\"'\"" - WHITESPACE@3742..3749 "\n " - ELSE_KW@3749..3753 "else" - WHITESPACE@3753..3762 "\n " - FALSE_EXPR@3762..3764 - EXPR_VAR@3762..3764 - NAME@3762..3764 - IDENT@3762..3764 "ch" - SEMI@3764..3765 ";" - WHITESPACE@3765..3770 "\n " - EXPR_BINARY@3770..3835 - LHS_EXPR@3770..3776 - EXPR_STRING@3770..3776 - STRING_DOUBLE@3770..3776 "\"'%s'\"" - WHITESPACE@3776..3777 " " - MODULO@3777..3778 "%" - WHITESPACE@3778..3779 " " - EXPR_APPLY@3779..3835 - EXPR_INDEX@3779..3787 - EXPR_VAR@3779..3782 - NAME@3779..3782 - IDENT@3779..3782 "std" - DOT@3782..3783 "." - NAME@3783..3787 - IDENT@3783..3787 "join" - ARGS_DESC@3787..3835 - L_PAREN@3787..3788 "(" - ARG@3788..3790 - EXPR_STRING@3788..3790 - STRING_SINGLE@3788..3790 "''" - COMMA@3790..3791 "," - WHITESPACE@3791..3792 " " - ARG@3792..3834 - EXPR_ARRAY_COMP@3792..3834 - L_BRACK@3792..3793 "[" - EXPR_APPLY@3793..3802 - EXPR_VAR@3793..3798 - NAME@3793..3798 - IDENT@3793..3798 "trans" - ARGS_DESC@3798..3802 - L_PAREN@3798..3799 "(" - ARG@3799..3801 - EXPR_VAR@3799..3801 - NAME@3799..3801 - IDENT@3799..3801 "ch" - R_PAREN@3801..3802 ")" - WHITESPACE@3802..3803 " " - FOR_SPEC@3803..3833 - FOR_KW@3803..3806 "for" - WHITESPACE@3806..3807 " " - NAME@3807..3809 - IDENT@3807..3809 "ch" - WHITESPACE@3809..3810 " " - IN_KW@3810..3812 "in" - WHITESPACE@3812..3813 " " - EXPR_APPLY@3813..3833 - EXPR_INDEX@3813..3828 - EXPR_VAR@3813..3816 - NAME@3813..3816 - IDENT@3813..3816 "std" - DOT@3816..3817 "." - NAME@3817..3828 - IDENT@3817..3828 "stringChars" - ARGS_DESC@3828..3833 - L_PAREN@3828..3829 "(" - ARG@3829..3832 - EXPR_VAR@3829..3832 - NAME@3829..3832 - IDENT@3829..3832 "str" - R_PAREN@3832..3833 ")" - R_BRACK@3833..3834 "]" - R_PAREN@3834..3835 ")" - COMMA@3835..3836 "," - WHITESPACE@3836..3840 "\n\n " - MEMBER_FIELD_METHOD@3840..4054 - FIELD_NAME_FIXED@3840..3859 - NAME@3840..3859 - IDENT@3840..3859 "escapeStringDollars" - PARAMS_DESC@3859..3865 - L_PAREN@3859..3860 "(" - PARAM@3860..3864 - DESTRUCT_FULL@3860..3864 - NAME@3860..3864 - IDENT@3860..3864 "str_" - R_PAREN@3864..3865 ")" - COLONCOLON@3865..3867 "::" - WHITESPACE@3867..3872 "\n " - STMT_LOCAL@3872..3903 - LOCAL_KW@3872..3877 "local" - WHITESPACE@3877..3878 " " - BIND_DESTRUCT@3878..3902 - DESTRUCT_FULL@3878..3881 - NAME@3878..3881 - IDENT@3878..3881 "str" - WHITESPACE@3881..3882 " " - ASSIGN@3882..3883 "=" - WHITESPACE@3883..3884 " " - EXPR_APPLY@3884..3902 - EXPR_INDEX@3884..3896 - EXPR_VAR@3884..3887 - NAME@3884..3887 - IDENT@3884..3887 "std" - DOT@3887..3888 "." - NAME@3888..3896 - IDENT@3888..3896 "toString" - ARGS_DESC@3896..3902 - L_PAREN@3896..3897 "(" - ARG@3897..3901 - EXPR_VAR@3897..3901 - NAME@3897..3901 - IDENT@3897..3901 "str_" - R_PAREN@3901..3902 ")" - SEMI@3902..3903 ";" - WHITESPACE@3903..3908 "\n " - STMT_LOCAL@3908..3985 - LOCAL_KW@3908..3913 "local" - WHITESPACE@3913..3914 " " - BIND_FUNCTION@3914..3984 - NAME@3914..3919 - IDENT@3914..3919 "trans" - PARAMS_DESC@3919..3923 - L_PAREN@3919..3920 "(" - PARAM@3920..3922 - DESTRUCT_FULL@3920..3922 - NAME@3920..3922 - IDENT@3920..3922 "ch" - R_PAREN@3922..3923 ")" - WHITESPACE@3923..3924 " " - ASSIGN@3924..3925 "=" - WHITESPACE@3925..3932 "\n " - EXPR_IF_THEN_ELSE@3932..3984 - IF_KW@3932..3934 "if" + ARG@3716..3722 + EXPR@3716..3722 + EXPR_STRING@3716..3722 + STRING_SINGLE@3716..3722 "' '" + R_PAREN@3722..3723 ")" + WHITESPACE@3723..3724 " " + TAILSTRICT_KW@3724..3734 "tailstrict" + COMMA@3734..3735 "," + WHITESPACE@3735..3739 "\n\n " + MEMBER_FIELD_METHOD@3739..3807 + FIELD_NAME_FIXED@3739..3759 + NAME@3739..3759 + IDENT@3739..3759 "manifestJsonMinified" + PARAMS_DESC@3759..3766 + L_PAREN@3759..3760 "(" + PARAM@3760..3765 + DESTRUCT_FULL@3760..3765 + NAME@3760..3765 + IDENT@3760..3765 "value" + R_PAREN@3765..3766 ")" + COLONCOLON@3766..3768 "::" + WHITESPACE@3768..3769 " " + EXPR@3769..3807 + EXPR_VAR@3769..3772 + NAME@3769..3772 + IDENT@3769..3772 "std" + SUFFIX_INDEX@3772..3787 + DOT@3772..3773 "." + NAME@3773..3787 + IDENT@3773..3787 "manifestJsonEx" + SUFFIX_APPLY@3787..3807 + ARGS_DESC@3787..3807 + L_PAREN@3787..3788 "(" + ARG@3788..3793 + EXPR@3788..3793 + EXPR_VAR@3788..3793 + NAME@3788..3793 + IDENT@3788..3793 "value" + COMMA@3793..3794 "," + WHITESPACE@3794..3795 " " + ARG@3795..3797 + EXPR@3795..3797 + EXPR_STRING@3795..3797 + STRING_SINGLE@3795..3797 "''" + COMMA@3797..3798 "," + WHITESPACE@3798..3799 " " + ARG@3799..3801 + EXPR@3799..3801 + EXPR_STRING@3799..3801 + STRING_SINGLE@3799..3801 "''" + COMMA@3801..3802 "," + WHITESPACE@3802..3803 " " + ARG@3803..3806 + EXPR@3803..3806 + EXPR_STRING@3803..3806 + STRING_SINGLE@3803..3806 "':'" + R_PAREN@3806..3807 ")" + COMMA@3807..3808 "," + WHITESPACE@3808..3812 "\n\n " + MEMBER_FIELD_METHOD@3812..4197 + FIELD_NAME_FIXED@3812..3830 + NAME@3812..3830 + IDENT@3812..3830 "manifestYamlStream" + PARAMS_DESC@3830..3905 + L_PAREN@3830..3831 "(" + PARAM@3831..3836 + DESTRUCT_FULL@3831..3836 + NAME@3831..3836 + IDENT@3831..3836 "value" + COMMA@3836..3837 "," + WHITESPACE@3837..3838 " " + PARAM@3838..3866 + DESTRUCT_FULL@3838..3860 + NAME@3838..3860 + IDENT@3838..3860 "indent_array_in_object" + ASSIGN@3860..3861 "=" + EXPR@3861..3866 + EXPR_LITERAL@3861..3866 + FALSE_KW@3861..3866 "false" + COMMA@3866..3867 "," + WHITESPACE@3867..3868 " " + PARAM@3868..3887 + DESTRUCT_FULL@3868..3882 + NAME@3868..3882 + IDENT@3868..3882 "c_document_end" + ASSIGN@3882..3883 "=" + EXPR@3883..3887 + EXPR_LITERAL@3883..3887 + TRUE_KW@3883..3887 "true" + COMMA@3887..3888 "," + WHITESPACE@3888..3889 " " + PARAM@3889..3904 + DESTRUCT_FULL@3889..3899 + NAME@3889..3899 + IDENT@3889..3899 "quote_keys" + ASSIGN@3899..3900 "=" + EXPR@3900..3904 + EXPR_LITERAL@3900..3904 + TRUE_KW@3900..3904 "true" + R_PAREN@3904..3905 ")" + COLONCOLON@3905..3907 "::" + WHITESPACE@3907..3912 "\n " + EXPR@3912..4197 + EXPR_IF_THEN_ELSE@3912..4197 + IF_KW@3912..3914 "if" + WHITESPACE@3914..3915 " " + EXPR@3915..3934 + EXPR_UNARY@3915..3934 + NOT@3915..3916 "!" + EXPR_VAR@3916..3919 + NAME@3916..3919 + IDENT@3916..3919 "std" + SUFFIX_INDEX@3919..3927 + DOT@3919..3920 "." + NAME@3920..3927 + IDENT@3920..3927 "isArray" + SUFFIX_APPLY@3927..3934 + ARGS_DESC@3927..3934 + L_PAREN@3927..3928 "(" + ARG@3928..3933 + EXPR@3928..3933 + EXPR_VAR@3928..3933 + NAME@3928..3933 + IDENT@3928..3933 "value" + R_PAREN@3933..3934 ")" WHITESPACE@3934..3935 " " - EXPR_BINARY@3935..3944 - LHS_EXPR@3935..3937 - EXPR_VAR@3935..3937 - NAME@3935..3937 - IDENT@3935..3937 "ch" - WHITESPACE@3937..3938 " " - EQ@3938..3940 "==" - WHITESPACE@3940..3941 " " - EXPR_STRING@3941..3944 - STRING_SINGLE@3941..3944 "'$'" - WHITESPACE@3944..3945 " " - THEN_KW@3945..3949 "then" - WHITESPACE@3949..3958 "\n " - TRUE_EXPR@3958..3962 - EXPR_STRING@3958..3962 - STRING_SINGLE@3958..3962 "'$$'" - WHITESPACE@3962..3969 "\n " - ELSE_KW@3969..3973 "else" - WHITESPACE@3973..3982 "\n " - FALSE_EXPR@3982..3984 - EXPR_VAR@3982..3984 - NAME@3982..3984 - IDENT@3982..3984 "ch" - SEMI@3984..3985 ";" - WHITESPACE@3985..3990 "\n " - EXPR_APPLY@3990..4054 - EXPR_INDEX@3990..3999 - EXPR_VAR@3990..3993 - NAME@3990..3993 - IDENT@3990..3993 "std" - DOT@3993..3994 "." - NAME@3994..3999 - IDENT@3994..3999 "foldl" - ARGS_DESC@3999..4054 - L_PAREN@3999..4000 "(" - ARG@4000..4027 - EXPR_FUNCTION@4000..4027 - FUNCTION_KW@4000..4008 "function" - PARAMS_DESC@4008..4014 - L_PAREN@4008..4009 "(" - PARAM@4009..4010 - DESTRUCT_FULL@4009..4010 - NAME@4009..4010 - IDENT@4009..4010 "a" - COMMA@4010..4011 "," - WHITESPACE@4011..4012 " " - PARAM@4012..4013 - DESTRUCT_FULL@4012..4013 - NAME@4012..4013 - IDENT@4012..4013 "b" - R_PAREN@4013..4014 ")" - WHITESPACE@4014..4015 " " - EXPR_BINARY@4015..4027 - LHS_EXPR@4015..4016 - EXPR_VAR@4015..4016 - NAME@4015..4016 - IDENT@4015..4016 "a" - WHITESPACE@4016..4017 " " - PLUS@4017..4018 "+" - WHITESPACE@4018..4019 " " - EXPR_APPLY@4019..4027 - EXPR_VAR@4019..4024 - NAME@4019..4024 - IDENT@4019..4024 "trans" - ARGS_DESC@4024..4027 - L_PAREN@4024..4025 "(" - ARG@4025..4026 - EXPR_VAR@4025..4026 - NAME@4025..4026 - IDENT@4025..4026 "b" - R_PAREN@4026..4027 ")" - COMMA@4027..4028 "," - WHITESPACE@4028..4029 " " - ARG@4029..4049 - EXPR_APPLY@4029..4049 - EXPR_INDEX@4029..4044 - EXPR_VAR@4029..4032 - NAME@4029..4032 - IDENT@4029..4032 "std" - DOT@4032..4033 "." - NAME@4033..4044 - IDENT@4033..4044 "stringChars" - ARGS_DESC@4044..4049 - L_PAREN@4044..4045 "(" - ARG@4045..4048 - EXPR_VAR@4045..4048 - NAME@4045..4048 - IDENT@4045..4048 "str" - R_PAREN@4048..4049 ")" - COMMA@4049..4050 "," - WHITESPACE@4050..4051 " " - ARG@4051..4053 - EXPR_STRING@4051..4053 - STRING_SINGLE@4051..4053 "''" - R_PAREN@4053..4054 ")" - COMMA@4054..4055 "," - WHITESPACE@4055..4059 "\n\n " - MEMBER_BIND_STMT@4059..4174 - OBJ_LOCAL@4059..4174 - LOCAL_KW@4059..4064 "local" - WHITESPACE@4064..4065 " " - BIND_DESTRUCT@4065..4174 - DESTRUCT_FULL@4065..4076 - NAME@4065..4076 - IDENT@4065..4076 "xml_escapes" - WHITESPACE@4076..4077 " " - ASSIGN@4077..4078 "=" - WHITESPACE@4078..4079 " " - EXPR_OBJECT@4079..4174 - OBJ_BODY_MEMBER_LIST@4079..4174 - L_BRACE@4079..4080 "{" - WHITESPACE@4080..4085 "\n " - MEMBER_FIELD_NORMAL@4085..4096 - FIELD_NAME_FIXED@4085..4088 - STRING_SINGLE@4085..4088 "'<'" - COLON@4088..4089 ":" - WHITESPACE@4089..4090 " " - EXPR_STRING@4090..4096 - STRING_SINGLE@4090..4096 "'<'" - COMMA@4096..4097 "," - WHITESPACE@4097..4102 "\n " - MEMBER_FIELD_NORMAL@4102..4113 - FIELD_NAME_FIXED@4102..4105 - STRING_SINGLE@4102..4105 "'>'" - COLON@4105..4106 ":" - WHITESPACE@4106..4107 " " - EXPR_STRING@4107..4113 - STRING_SINGLE@4107..4113 "'>'" - COMMA@4113..4114 "," - WHITESPACE@4114..4119 "\n " - MEMBER_FIELD_NORMAL@4119..4131 - FIELD_NAME_FIXED@4119..4122 - STRING_SINGLE@4119..4122 "'&'" - COLON@4122..4123 ":" - WHITESPACE@4123..4124 " " - EXPR_STRING@4124..4131 - STRING_SINGLE@4124..4131 "'&'" - COMMA@4131..4132 "," - WHITESPACE@4132..4137 "\n " - MEMBER_FIELD_NORMAL@4137..4150 - FIELD_NAME_FIXED@4137..4140 - STRING_SINGLE@4137..4140 "'\"'" - COLON@4140..4141 ":" - WHITESPACE@4141..4142 " " - EXPR_STRING@4142..4150 - STRING_SINGLE@4142..4150 "'"'" - COMMA@4150..4151 "," - WHITESPACE@4151..4156 "\n " - MEMBER_FIELD_NORMAL@4156..4169 - FIELD_NAME_FIXED@4156..4159 - STRING_DOUBLE@4156..4159 "\"'\"" - COLON@4159..4160 ":" - WHITESPACE@4160..4161 " " - EXPR_STRING@4161..4169 - STRING_SINGLE@4161..4169 "'''" - COMMA@4169..4170 "," - WHITESPACE@4170..4173 "\n " - R_BRACE@4173..4174 "}" - COMMA@4174..4175 "," - WHITESPACE@4175..4179 "\n\n " - MEMBER_FIELD_METHOD@4179..4318 - FIELD_NAME_FIXED@4179..4194 - NAME@4179..4194 - IDENT@4179..4194 "escapeStringXML" - PARAMS_DESC@4194..4200 - L_PAREN@4194..4195 "(" - PARAM@4195..4199 - DESTRUCT_FULL@4195..4199 - NAME@4195..4199 - IDENT@4195..4199 "str_" - R_PAREN@4199..4200 ")" - COLONCOLON@4200..4202 "::" - WHITESPACE@4202..4207 "\n " - STMT_LOCAL@4207..4238 - LOCAL_KW@4207..4212 "local" - WHITESPACE@4212..4213 " " - BIND_DESTRUCT@4213..4237 - DESTRUCT_FULL@4213..4216 - NAME@4213..4216 - IDENT@4213..4216 "str" - WHITESPACE@4216..4217 " " - ASSIGN@4217..4218 "=" - WHITESPACE@4218..4219 " " - EXPR_APPLY@4219..4237 - EXPR_INDEX@4219..4231 - EXPR_VAR@4219..4222 - NAME@4219..4222 - IDENT@4219..4222 "std" - DOT@4222..4223 "." - NAME@4223..4231 - IDENT@4223..4231 "toString" - ARGS_DESC@4231..4237 - L_PAREN@4231..4232 "(" - ARG@4232..4236 - EXPR_VAR@4232..4236 - NAME@4232..4236 - IDENT@4232..4236 "str_" - R_PAREN@4236..4237 ")" - SEMI@4237..4238 ";" - WHITESPACE@4238..4243 "\n " - EXPR_APPLY@4243..4318 - EXPR_INDEX@4243..4251 - EXPR_VAR@4243..4246 - NAME@4243..4246 - IDENT@4243..4246 "std" - DOT@4246..4247 "." - NAME@4247..4251 - IDENT@4247..4251 "join" - ARGS_DESC@4251..4318 - L_PAREN@4251..4252 "(" - ARG@4252..4254 - EXPR_STRING@4252..4254 - STRING_SINGLE@4252..4254 "''" - COMMA@4254..4255 "," - WHITESPACE@4255..4256 " " - ARG@4256..4317 - EXPR_ARRAY_COMP@4256..4317 - L_BRACK@4256..4257 "[" - EXPR_APPLY@4257..4285 - EXPR_INDEX@4257..4264 - EXPR_VAR@4257..4260 - NAME@4257..4260 - IDENT@4257..4260 "std" - DOT@4260..4261 "." - NAME@4261..4264 - IDENT@4261..4264 "get" - ARGS_DESC@4264..4285 - L_PAREN@4264..4265 "(" - ARG@4265..4276 - EXPR_VAR@4265..4276 - NAME@4265..4276 - IDENT@4265..4276 "xml_escapes" - COMMA@4276..4277 "," - WHITESPACE@4277..4278 " " - ARG@4278..4280 - EXPR_VAR@4278..4280 - NAME@4278..4280 - IDENT@4278..4280 "ch" - COMMA@4280..4281 "," - WHITESPACE@4281..4282 " " - ARG@4282..4284 - EXPR_VAR@4282..4284 - NAME@4282..4284 - IDENT@4282..4284 "ch" - R_PAREN@4284..4285 ")" - WHITESPACE@4285..4286 " " - FOR_SPEC@4286..4316 - FOR_KW@4286..4289 "for" - WHITESPACE@4289..4290 " " - NAME@4290..4292 - IDENT@4290..4292 "ch" - WHITESPACE@4292..4293 " " - IN_KW@4293..4295 "in" - WHITESPACE@4295..4296 " " - EXPR_APPLY@4296..4316 - EXPR_INDEX@4296..4311 - EXPR_VAR@4296..4299 - NAME@4296..4299 - IDENT@4296..4299 "std" - DOT@4299..4300 "." - NAME@4300..4311 - IDENT@4300..4311 "stringChars" - ARGS_DESC@4311..4316 - L_PAREN@4311..4312 "(" - ARG@4312..4315 - EXPR_VAR@4312..4315 - NAME@4312..4315 - IDENT@4312..4315 "str" - R_PAREN@4315..4316 ")" - R_BRACK@4316..4317 "]" - R_PAREN@4317..4318 ")" - COMMA@4318..4319 "," - WHITESPACE@4319..4323 "\n\n " - MEMBER_FIELD_METHOD@4323..4389 - FIELD_NAME_FIXED@4323..4335 - NAME@4323..4335 - IDENT@4323..4335 "manifestJson" - PARAMS_DESC@4335..4342 - L_PAREN@4335..4336 "(" - PARAM@4336..4341 - DESTRUCT_FULL@4336..4341 - NAME@4336..4341 - IDENT@4336..4341 "value" - R_PAREN@4341..4342 ")" - COLONCOLON@4342..4344 "::" - WHITESPACE@4344..4345 " " - EXPR_APPLY@4345..4389 - EXPR_INDEX@4345..4363 - EXPR_VAR@4345..4348 - NAME@4345..4348 - IDENT@4345..4348 "std" - DOT@4348..4349 "." - NAME@4349..4363 - IDENT@4349..4363 "manifestJsonEx" - ARGS_DESC@4363..4389 - L_PAREN@4363..4364 "(" - ARG@4364..4369 - EXPR_VAR@4364..4369 - NAME@4364..4369 - IDENT@4364..4369 "value" - COMMA@4369..4370 "," - WHITESPACE@4370..4371 " " - ARG@4371..4377 - EXPR_STRING@4371..4377 - STRING_SINGLE@4371..4377 "' '" - R_PAREN@4377..4378 ")" - WHITESPACE@4378..4379 " " - TAILSTRICT_KW@4379..4389 "tailstrict" - COMMA@4389..4390 "," - WHITESPACE@4390..4394 "\n\n " - MEMBER_FIELD_METHOD@4394..4462 - FIELD_NAME_FIXED@4394..4414 - NAME@4394..4414 - IDENT@4394..4414 "manifestJsonMinified" - PARAMS_DESC@4414..4421 - L_PAREN@4414..4415 "(" - PARAM@4415..4420 - DESTRUCT_FULL@4415..4420 - NAME@4415..4420 - IDENT@4415..4420 "value" - R_PAREN@4420..4421 ")" - COLONCOLON@4421..4423 "::" - WHITESPACE@4423..4424 " " - EXPR_APPLY@4424..4462 - EXPR_INDEX@4424..4442 - EXPR_VAR@4424..4427 - NAME@4424..4427 - IDENT@4424..4427 "std" - DOT@4427..4428 "." - NAME@4428..4442 - IDENT@4428..4442 "manifestJsonEx" - ARGS_DESC@4442..4462 - L_PAREN@4442..4443 "(" - ARG@4443..4448 - EXPR_VAR@4443..4448 - NAME@4443..4448 - IDENT@4443..4448 "value" - COMMA@4448..4449 "," - WHITESPACE@4449..4450 " " - ARG@4450..4452 - EXPR_STRING@4450..4452 - STRING_SINGLE@4450..4452 "''" - COMMA@4452..4453 "," - WHITESPACE@4453..4454 " " - ARG@4454..4456 - EXPR_STRING@4454..4456 - STRING_SINGLE@4454..4456 "''" - COMMA@4456..4457 "," - WHITESPACE@4457..4458 " " - ARG@4458..4461 - EXPR_STRING@4458..4461 - STRING_SINGLE@4458..4461 "':'" - R_PAREN@4461..4462 ")" - COMMA@4462..4463 "," - WHITESPACE@4463..4467 "\n\n " - MEMBER_FIELD_METHOD@4467..4852 - FIELD_NAME_FIXED@4467..4485 - NAME@4467..4485 - IDENT@4467..4485 "manifestYamlStream" - PARAMS_DESC@4485..4560 - L_PAREN@4485..4486 "(" - PARAM@4486..4491 - DESTRUCT_FULL@4486..4491 - NAME@4486..4491 - IDENT@4486..4491 "value" - COMMA@4491..4492 "," - WHITESPACE@4492..4493 " " - PARAM@4493..4521 - DESTRUCT_FULL@4493..4515 - NAME@4493..4515 - IDENT@4493..4515 "indent_array_in_object" - ASSIGN@4515..4516 "=" - EXPR_LITERAL@4516..4521 - FALSE_KW@4516..4521 "false" - COMMA@4521..4522 "," - WHITESPACE@4522..4523 " " - PARAM@4523..4542 - DESTRUCT_FULL@4523..4537 - NAME@4523..4537 - IDENT@4523..4537 "c_document_end" - ASSIGN@4537..4538 "=" - EXPR_LITERAL@4538..4542 - TRUE_KW@4538..4542 "true" - COMMA@4542..4543 "," - WHITESPACE@4543..4544 " " - PARAM@4544..4559 - DESTRUCT_FULL@4544..4554 - NAME@4544..4554 - IDENT@4544..4554 "quote_keys" - ASSIGN@4554..4555 "=" - EXPR_LITERAL@4555..4559 - TRUE_KW@4555..4559 "true" - R_PAREN@4559..4560 ")" - COLONCOLON@4560..4562 "::" - WHITESPACE@4562..4567 "\n " - EXPR_IF_THEN_ELSE@4567..4852 - IF_KW@4567..4569 "if" - WHITESPACE@4569..4570 " " - EXPR_UNARY@4570..4589 - NOT@4570..4571 "!" - EXPR_APPLY@4571..4589 - EXPR_INDEX@4571..4582 - EXPR_VAR@4571..4574 - NAME@4571..4574 - IDENT@4571..4574 "std" - DOT@4574..4575 "." - NAME@4575..4582 - IDENT@4575..4582 "isArray" - ARGS_DESC@4582..4589 - L_PAREN@4582..4583 "(" - ARG@4583..4588 - EXPR_VAR@4583..4588 - NAME@4583..4588 - IDENT@4583..4588 "value" - R_PAREN@4588..4589 ")" - WHITESPACE@4589..4590 " " - THEN_KW@4590..4594 "then" - WHITESPACE@4594..4601 "\n " - TRUE_EXPR@4601..4669 - EXPR_ERROR@4601..4669 - ERROR_KW@4601..4606 "error" - WHITESPACE@4606..4607 " " - EXPR_BINARY@4607..4669 - LHS_EXPR@4607..4651 - EXPR_STRING@4607..4651 - STRING_SINGLE@4607..4651 "'manifestYamlStream o ..." - WHITESPACE@4651..4652 " " - PLUS@4652..4653 "+" - WHITESPACE@4653..4654 " " - EXPR_APPLY@4654..4669 - EXPR_INDEX@4654..4662 - EXPR_VAR@4654..4657 - NAME@4654..4657 - IDENT@4654..4657 "std" - DOT@4657..4658 "." - NAME@4658..4662 - IDENT@4658..4662 "type" - ARGS_DESC@4662..4669 - L_PAREN@4662..4663 "(" - ARG@4663..4668 - EXPR_VAR@4663..4668 - NAME@4663..4668 - IDENT@4663..4668 "value" - R_PAREN@4668..4669 ")" - WHITESPACE@4669..4674 "\n " - ELSE_KW@4674..4678 "else" - WHITESPACE@4678..4685 "\n " - FALSE_EXPR@4685..4852 - EXPR_BINARY@4685..4852 - LHS_EXPR@4685..4807 - EXPR_BINARY@4685..4807 - LHS_EXPR@4685..4692 - EXPR_STRING@4685..4692 - STRING_SINGLE@4685..4692 "'---\\n'" - WHITESPACE@4692..4693 " " - PLUS@4693..4694 "+" - WHITESPACE@4694..4695 " " - EXPR_APPLY@4695..4807 - EXPR_INDEX@4695..4703 - EXPR_VAR@4695..4698 - NAME@4695..4698 - IDENT@4695..4698 "std" - DOT@4698..4699 "." - NAME@4699..4703 - IDENT@4699..4703 "join" - ARGS_DESC@4703..4807 - L_PAREN@4703..4704 "(" - WHITESPACE@4704..4713 "\n " - ARG@4713..4722 - EXPR_STRING@4713..4722 - STRING_SINGLE@4713..4722 "'\\n---\\n'" - COMMA@4722..4723 "," - WHITESPACE@4723..4724 " " - ARG@4724..4799 - EXPR_ARRAY_COMP@4724..4799 - L_BRACK@4724..4725 "[" - EXPR_APPLY@4725..4783 - EXPR_INDEX@4725..4744 - EXPR_VAR@4725..4728 - NAME@4725..4728 - IDENT@4725..4728 "std" - DOT@4728..4729 "." - NAME@4729..4744 - IDENT@4729..4744 "manifestYamlDoc" - ARGS_DESC@4744..4783 - L_PAREN@4744..4745 "(" - ARG@4745..4746 - EXPR_VAR@4745..4746 - NAME@4745..4746 - IDENT@4745..4746 "e" - COMMA@4746..4747 "," - WHITESPACE@4747..4748 " " - ARG@4748..4770 - EXPR_VAR@4748..4770 - NAME@4748..4770 - IDENT@4748..4770 "indent_array_in_object" - COMMA@4770..4771 "," - WHITESPACE@4771..4772 " " - ARG@4772..4782 - EXPR_VAR@4772..4782 - NAME@4772..4782 - IDENT@4772..4782 "quote_keys" - R_PAREN@4782..4783 ")" - WHITESPACE@4783..4784 " " - FOR_SPEC@4784..4798 - FOR_KW@4784..4787 "for" - WHITESPACE@4787..4788 " " - NAME@4788..4789 - IDENT@4788..4789 "e" - WHITESPACE@4789..4790 " " - IN_KW@4790..4792 "in" - WHITESPACE@4792..4793 " " - EXPR_VAR@4793..4798 - NAME@4793..4798 - IDENT@4793..4798 "value" - R_BRACK@4798..4799 "]" - WHITESPACE@4799..4806 "\n " - R_PAREN@4806..4807 ")" - WHITESPACE@4807..4808 " " - PLUS@4808..4809 "+" - WHITESPACE@4809..4810 " " - EXPR_IF_THEN_ELSE@4810..4852 - IF_KW@4810..4812 "if" - WHITESPACE@4812..4813 " " - EXPR_VAR@4813..4827 - NAME@4813..4827 - IDENT@4813..4827 "c_document_end" - WHITESPACE@4827..4828 " " - THEN_KW@4828..4832 "then" - WHITESPACE@4832..4833 " " - TRUE_EXPR@4833..4842 - EXPR_STRING@4833..4842 - STRING_SINGLE@4833..4842 "'\\n...\\n'" - WHITESPACE@4842..4843 " " - ELSE_KW@4843..4847 "else" - WHITESPACE@4847..4848 " " - FALSE_EXPR@4848..4852 - EXPR_STRING@4848..4852 - STRING_SINGLE@4848..4852 "'\\n'" - COMMA@4852..4853 "," - WHITESPACE@4853..4857 "\n\n " - MEMBER_FIELD_METHOD@4857..5513 - FIELD_NAME_FIXED@4857..4871 - NAME@4857..4871 - IDENT@4857..4871 "manifestPython" - PARAMS_DESC@4871..4874 - L_PAREN@4871..4872 "(" - PARAM@4872..4873 - DESTRUCT_FULL@4872..4873 - NAME@4872..4873 - IDENT@4872..4873 "v" - R_PAREN@4873..4874 ")" - COLONCOLON@4874..4876 "::" - WHITESPACE@4876..4881 "\n " - EXPR_IF_THEN_ELSE@4881..5513 - IF_KW@4881..4883 "if" - WHITESPACE@4883..4884 " " - EXPR_APPLY@4884..4899 - EXPR_INDEX@4884..4896 - EXPR_VAR@4884..4887 - NAME@4884..4887 - IDENT@4884..4887 "std" - DOT@4887..4888 "." - NAME@4888..4896 - IDENT@4888..4896 "isObject" - ARGS_DESC@4896..4899 - L_PAREN@4896..4897 "(" - ARG@4897..4898 - EXPR_VAR@4897..4898 - NAME@4897..4898 - IDENT@4897..4898 "v" - R_PAREN@4898..4899 ")" - WHITESPACE@4899..4900 " " - THEN_KW@4900..4904 "then" - WHITESPACE@4904..4911 "\n " - STMT_LOCAL@4911..5046 - LOCAL_KW@4911..4916 "local" - WHITESPACE@4916..4917 " " - BIND_DESTRUCT@4917..5045 - DESTRUCT_FULL@4917..4923 - NAME@4917..4923 - IDENT@4917..4923 "fields" - WHITESPACE@4923..4924 " " - ASSIGN@4924..4925 "=" - WHITESPACE@4925..4926 " " - EXPR_ARRAY_COMP@4926..5045 - L_BRACK@4926..4927 "[" - WHITESPACE@4927..4936 "\n " - EXPR_BINARY@4936..5000 - LHS_EXPR@4936..4944 - EXPR_STRING@4936..4944 - STRING_SINGLE@4936..4944 "'%s: %s'" - WHITESPACE@4944..4945 " " - MODULO@4945..4946 "%" - WHITESPACE@4946..4947 " " - EXPR_ARRAY@4947..5000 - L_BRACK@4947..4948 "[" - EXPR_APPLY@4948..4973 - EXPR_INDEX@4948..4970 - EXPR_VAR@4948..4951 - NAME@4948..4951 - IDENT@4948..4951 "std" - DOT@4951..4952 "." - NAME@4952..4970 - IDENT@4952..4970 "escapeStringPython" - ARGS_DESC@4970..4973 - L_PAREN@4970..4971 "(" - ARG@4971..4972 - EXPR_VAR@4971..4972 - NAME@4971..4972 - IDENT@4971..4972 "k" - R_PAREN@4972..4973 ")" - COMMA@4973..4974 "," - WHITESPACE@4974..4975 " " - EXPR_APPLY@4975..4999 - EXPR_INDEX@4975..4993 - EXPR_VAR@4975..4978 - NAME@4975..4978 - IDENT@4975..4978 "std" - DOT@4978..4979 "." - NAME@4979..4993 - IDENT@4979..4993 "manifestPython" - ARGS_DESC@4993..4999 - L_PAREN@4993..4994 "(" - ARG@4994..4998 - EXPR_INDEX_EXPR@4994..4998 - LHS_EXPR@4994..4995 - EXPR_VAR@4994..4995 - NAME@4994..4995 - IDENT@4994..4995 "v" - L_BRACK@4995..4996 "[" - EXPR_VAR@4996..4997 - NAME@4996..4997 - IDENT@4996..4997 "k" - R_BRACK@4997..4998 "]" - R_PAREN@4998..4999 ")" - R_BRACK@4999..5000 "]" - WHITESPACE@5000..5009 "\n " - FOR_SPEC@5009..5037 - FOR_KW@5009..5012 "for" - WHITESPACE@5012..5013 " " - NAME@5013..5014 - IDENT@5013..5014 "k" - WHITESPACE@5014..5015 " " - IN_KW@5015..5017 "in" - WHITESPACE@5017..5018 " " - EXPR_APPLY@5018..5037 - EXPR_INDEX@5018..5034 - EXPR_VAR@5018..5021 - NAME@5018..5021 - IDENT@5018..5021 "std" - DOT@5021..5022 "." - NAME@5022..5034 - IDENT@5022..5034 "objectFields" - ARGS_DESC@5034..5037 - L_PAREN@5034..5035 "(" - ARG@5035..5036 - EXPR_VAR@5035..5036 - NAME@5035..5036 - IDENT@5035..5036 "v" - R_PAREN@5036..5037 ")" - WHITESPACE@5037..5044 "\n " - R_BRACK@5044..5045 "]" - SEMI@5045..5046 ";" - WHITESPACE@5046..5053 "\n " - TRUE_EXPR@5053..5086 - EXPR_BINARY@5053..5086 - LHS_EXPR@5053..5059 - EXPR_STRING@5053..5059 - STRING_SINGLE@5053..5059 "'{%s}'" - WHITESPACE@5059..5060 " " - MODULO@5060..5061 "%" - WHITESPACE@5061..5062 " " - EXPR_ARRAY@5062..5086 - L_BRACK@5062..5063 "[" - EXPR_APPLY@5063..5085 - EXPR_INDEX@5063..5071 - EXPR_VAR@5063..5066 - NAME@5063..5066 - IDENT@5063..5066 "std" - DOT@5066..5067 "." - NAME@5067..5071 - IDENT@5067..5071 "join" - ARGS_DESC@5071..5085 - L_PAREN@5071..5072 "(" - ARG@5072..5076 - EXPR_STRING@5072..5076 - STRING_SINGLE@5072..5076 "', '" - COMMA@5076..5077 "," - WHITESPACE@5077..5078 " " - ARG@5078..5084 - EXPR_VAR@5078..5084 - NAME@5078..5084 - IDENT@5078..5084 "fields" - R_PAREN@5084..5085 ")" - R_BRACK@5085..5086 "]" - WHITESPACE@5086..5091 "\n " - ELSE_KW@5091..5095 "else" - WHITESPACE@5095..5096 " " - FALSE_EXPR@5096..5513 - EXPR_IF_THEN_ELSE@5096..5513 - IF_KW@5096..5098 "if" - WHITESPACE@5098..5099 " " - EXPR_APPLY@5099..5113 - EXPR_INDEX@5099..5110 - EXPR_VAR@5099..5102 - NAME@5099..5102 - IDENT@5099..5102 "std" - DOT@5102..5103 "." - NAME@5103..5110 - IDENT@5103..5110 "isArray" - ARGS_DESC@5110..5113 - L_PAREN@5110..5111 "(" - ARG@5111..5112 - EXPR_VAR@5111..5112 - NAME@5111..5112 - IDENT@5111..5112 "v" - R_PAREN@5112..5113 ")" - WHITESPACE@5113..5114 " " - THEN_KW@5114..5118 "then" - WHITESPACE@5118..5125 "\n " - TRUE_EXPR@5125..5188 - EXPR_BINARY@5125..5188 - LHS_EXPR@5125..5131 - EXPR_STRING@5125..5131 - STRING_SINGLE@5125..5131 "'[%s]'" - WHITESPACE@5131..5132 " " - MODULO@5132..5133 "%" - WHITESPACE@5133..5134 " " - EXPR_ARRAY@5134..5188 - L_BRACK@5134..5135 "[" - EXPR_APPLY@5135..5187 - EXPR_INDEX@5135..5143 - EXPR_VAR@5135..5138 - NAME@5135..5138 - IDENT@5135..5138 "std" - DOT@5138..5139 "." - NAME@5139..5143 - IDENT@5139..5143 "join" - ARGS_DESC@5143..5187 - L_PAREN@5143..5144 "(" - ARG@5144..5148 - EXPR_STRING@5144..5148 - STRING_SINGLE@5144..5148 "', '" - COMMA@5148..5149 "," - WHITESPACE@5149..5150 " " - ARG@5150..5186 - EXPR_ARRAY_COMP@5150..5186 - L_BRACK@5150..5151 "[" - EXPR_APPLY@5151..5173 - EXPR_INDEX@5151..5169 - EXPR_VAR@5151..5154 - NAME@5151..5154 - IDENT@5151..5154 "std" - DOT@5154..5155 "." - NAME@5155..5169 - IDENT@5155..5169 "manifestPython" - ARGS_DESC@5169..5173 - L_PAREN@5169..5170 "(" - ARG@5170..5172 - EXPR_VAR@5170..5172 - NAME@5170..5172 - IDENT@5170..5172 "v2" - R_PAREN@5172..5173 ")" - WHITESPACE@5173..5174 " " - FOR_SPEC@5174..5185 - FOR_KW@5174..5177 "for" - WHITESPACE@5177..5178 " " - NAME@5178..5180 - IDENT@5178..5180 "v2" - WHITESPACE@5180..5181 " " - IN_KW@5181..5183 "in" - WHITESPACE@5183..5184 " " - EXPR_VAR@5184..5185 - NAME@5184..5185 - IDENT@5184..5185 "v" - R_BRACK@5185..5186 "]" - R_PAREN@5186..5187 ")" - R_BRACK@5187..5188 "]" - WHITESPACE@5188..5193 "\n " - ELSE_KW@5193..5197 "else" - WHITESPACE@5197..5198 " " - FALSE_EXPR@5198..5513 - EXPR_IF_THEN_ELSE@5198..5513 - IF_KW@5198..5200 "if" - WHITESPACE@5200..5201 " " - EXPR_APPLY@5201..5216 - EXPR_INDEX@5201..5213 - EXPR_VAR@5201..5204 - NAME@5201..5204 - IDENT@5201..5204 "std" - DOT@5204..5205 "." - NAME@5205..5213 - IDENT@5205..5213 "isString" - ARGS_DESC@5213..5216 - L_PAREN@5213..5214 "(" - ARG@5214..5215 - EXPR_VAR@5214..5215 - NAME@5214..5215 - IDENT@5214..5215 "v" - R_PAREN@5215..5216 ")" - WHITESPACE@5216..5217 " " - THEN_KW@5217..5221 "then" - WHITESPACE@5221..5228 "\n " - TRUE_EXPR@5228..5262 - EXPR_BINARY@5228..5262 - LHS_EXPR@5228..5232 - EXPR_STRING@5228..5232 - STRING_SINGLE@5228..5232 "'%s'" - WHITESPACE@5232..5233 " " - MODULO@5233..5234 "%" - WHITESPACE@5234..5235 " " - EXPR_ARRAY@5235..5262 - L_BRACK@5235..5236 "[" - EXPR_APPLY@5236..5261 - EXPR_INDEX@5236..5258 - EXPR_VAR@5236..5239 - NAME@5236..5239 - IDENT@5236..5239 "std" - DOT@5239..5240 "." - NAME@5240..5258 - IDENT@5240..5258 "escapeStringPython" - ARGS_DESC@5258..5261 - L_PAREN@5258..5259 "(" - ARG@5259..5260 - EXPR_VAR@5259..5260 - NAME@5259..5260 - IDENT@5259..5260 "v" - R_PAREN@5260..5261 ")" - R_BRACK@5261..5262 "]" - WHITESPACE@5262..5267 "\n " - ELSE_KW@5267..5271 "else" - WHITESPACE@5271..5272 " " - FALSE_EXPR@5272..5513 - EXPR_IF_THEN_ELSE@5272..5513 - IF_KW@5272..5274 "if" - WHITESPACE@5274..5275 " " - EXPR_APPLY@5275..5292 - EXPR_INDEX@5275..5289 - EXPR_VAR@5275..5278 - NAME@5275..5278 - IDENT@5275..5278 "std" - DOT@5278..5279 "." - NAME@5279..5289 - IDENT@5279..5289 "isFunction" - ARGS_DESC@5289..5292 - L_PAREN@5289..5290 "(" - ARG@5290..5291 - EXPR_VAR@5290..5291 - NAME@5290..5291 - IDENT@5290..5291 "v" - R_PAREN@5291..5292 ")" - WHITESPACE@5292..5293 " " - THEN_KW@5293..5297 "then" - WHITESPACE@5297..5304 "\n " - TRUE_EXPR@5304..5336 - EXPR_ERROR@5304..5336 - ERROR_KW@5304..5309 "error" - WHITESPACE@5309..5310 " " - EXPR_STRING@5310..5336 - STRING_SINGLE@5310..5336 "'cannot manifest func ..." - WHITESPACE@5336..5341 "\n " - ELSE_KW@5341..5345 "else" - WHITESPACE@5345..5346 " " - FALSE_EXPR@5346..5513 - EXPR_IF_THEN_ELSE@5346..5513 - IF_KW@5346..5348 "if" - WHITESPACE@5348..5349 " " - EXPR_APPLY@5349..5364 - EXPR_INDEX@5349..5361 - EXPR_VAR@5349..5352 - NAME@5349..5352 - IDENT@5349..5352 "std" - DOT@5352..5353 "." - NAME@5353..5361 - IDENT@5353..5361 "isNumber" - ARGS_DESC@5361..5364 - L_PAREN@5361..5362 "(" - ARG@5362..5363 - EXPR_VAR@5362..5363 - NAME@5362..5363 - IDENT@5362..5363 "v" - R_PAREN@5363..5364 ")" - WHITESPACE@5364..5365 " " - THEN_KW@5365..5369 "then" - WHITESPACE@5369..5376 "\n " - TRUE_EXPR@5376..5391 - EXPR_APPLY@5376..5391 - EXPR_INDEX@5376..5388 - EXPR_VAR@5376..5379 - NAME@5376..5379 - IDENT@5376..5379 "std" - DOT@5379..5380 "." - NAME@5380..5388 - IDENT@5380..5388 "toString" - ARGS_DESC@5388..5391 - L_PAREN@5388..5389 "(" - ARG@5389..5390 - EXPR_VAR@5389..5390 - NAME@5389..5390 - IDENT@5389..5390 "v" - R_PAREN@5390..5391 ")" - WHITESPACE@5391..5396 "\n " - ELSE_KW@5396..5400 "else" - WHITESPACE@5400..5401 " " - FALSE_EXPR@5401..5513 - EXPR_IF_THEN_ELSE@5401..5513 - IF_KW@5401..5403 "if" - WHITESPACE@5403..5404 " " - EXPR_BINARY@5404..5413 - LHS_EXPR@5404..5405 - EXPR_VAR@5404..5405 - NAME@5404..5405 - IDENT@5404..5405 "v" - WHITESPACE@5405..5406 " " - EQ@5406..5408 "==" - WHITESPACE@5408..5409 " " - EXPR_LITERAL@5409..5413 - TRUE_KW@5409..5413 "true" - WHITESPACE@5413..5414 " " - THEN_KW@5414..5418 "then" - WHITESPACE@5418..5425 "\n " - TRUE_EXPR@5425..5431 - EXPR_STRING@5425..5431 - STRING_SINGLE@5425..5431 "'True'" - WHITESPACE@5431..5436 "\n " - ELSE_KW@5436..5440 "else" - WHITESPACE@5440..5441 " " - FALSE_EXPR@5441..5513 - EXPR_IF_THEN_ELSE@5441..5513 - IF_KW@5441..5443 "if" - WHITESPACE@5443..5444 " " - EXPR_BINARY@5444..5454 - LHS_EXPR@5444..5445 - EXPR_VAR@5444..5445 - NAME@5444..5445 - IDENT@5444..5445 "v" - WHITESPACE@5445..5446 " " - EQ@5446..5448 "==" - WHITESPACE@5448..5449 " " - EXPR_LITERAL@5449..5454 - FALSE_KW@5449..5454 "false" - WHITESPACE@5454..5455 " " - THEN_KW@5455..5459 "then" - WHITESPACE@5459..5466 "\n " - TRUE_EXPR@5466..5473 - EXPR_STRING@5466..5473 - STRING_SINGLE@5466..5473 "'False'" - WHITESPACE@5473..5478 "\n " - ELSE_KW@5478..5482 "else" - WHITESPACE@5482..5483 " " - FALSE_EXPR@5483..5513 - EXPR_IF_THEN_ELSE@5483..5513 - IF_KW@5483..5485 "if" - WHITESPACE@5485..5486 " " - EXPR_BINARY@5486..5495 - LHS_EXPR@5486..5487 - EXPR_VAR@5486..5487 - NAME@5486..5487 - IDENT@5486..5487 "v" - WHITESPACE@5487..5488 " " - EQ@5488..5490 "==" - WHITESPACE@5490..5491 " " - EXPR_LITERAL@5491..5495 - NULL_KW@5491..5495 "null" - WHITESPACE@5495..5496 " " - THEN_KW@5496..5500 "then" - WHITESPACE@5500..5507 "\n " - TRUE_EXPR@5507..5513 - EXPR_STRING@5507..5513 - STRING_SINGLE@5507..5513 "'None'" - COMMA@5513..5514 "," - WHITESPACE@5514..5518 "\n\n " - MEMBER_FIELD_METHOD@5518..5673 - FIELD_NAME_FIXED@5518..5536 - NAME@5518..5536 - IDENT@5518..5536 "manifestPythonVars" - PARAMS_DESC@5536..5542 - L_PAREN@5536..5537 "(" - PARAM@5537..5541 - DESTRUCT_FULL@5537..5541 - NAME@5537..5541 - IDENT@5537..5541 "conf" - R_PAREN@5541..5542 ")" - COLONCOLON@5542..5544 "::" - WHITESPACE@5544..5549 "\n " - STMT_LOCAL@5549..5641 - LOCAL_KW@5549..5554 "local" - WHITESPACE@5554..5555 " " - BIND_DESTRUCT@5555..5640 - DESTRUCT_FULL@5555..5559 - NAME@5555..5559 - IDENT@5555..5559 "vars" - WHITESPACE@5559..5560 " " - ASSIGN@5560..5561 "=" - WHITESPACE@5561..5562 " " - EXPR_ARRAY_COMP@5562..5640 - L_BRACK@5562..5563 "[" - EXPR_BINARY@5563..5607 - LHS_EXPR@5563..5572 - EXPR_STRING@5563..5572 - STRING_SINGLE@5563..5572 "'%s = %s'" - WHITESPACE@5572..5573 " " - MODULO@5573..5574 "%" - WHITESPACE@5574..5575 " " - EXPR_ARRAY@5575..5607 - L_BRACK@5575..5576 "[" - EXPR_VAR@5576..5577 - NAME@5576..5577 - IDENT@5576..5577 "k" - COMMA@5577..5578 "," - WHITESPACE@5578..5579 " " - EXPR_APPLY@5579..5606 - EXPR_INDEX@5579..5597 - EXPR_VAR@5579..5582 - NAME@5579..5582 - IDENT@5579..5582 "std" - DOT@5582..5583 "." - NAME@5583..5597 - IDENT@5583..5597 "manifestPython" - ARGS_DESC@5597..5606 - L_PAREN@5597..5598 "(" - ARG@5598..5605 - EXPR_INDEX_EXPR@5598..5605 - LHS_EXPR@5598..5602 - EXPR_VAR@5598..5602 - NAME@5598..5602 - IDENT@5598..5602 "conf" - L_BRACK@5602..5603 "[" - EXPR_VAR@5603..5604 - NAME@5603..5604 - IDENT@5603..5604 "k" - R_BRACK@5604..5605 "]" - R_PAREN@5605..5606 ")" - R_BRACK@5606..5607 "]" - WHITESPACE@5607..5608 " " - FOR_SPEC@5608..5639 - FOR_KW@5608..5611 "for" - WHITESPACE@5611..5612 " " - NAME@5612..5613 - IDENT@5612..5613 "k" - WHITESPACE@5613..5614 " " - IN_KW@5614..5616 "in" - WHITESPACE@5616..5617 " " - EXPR_APPLY@5617..5639 - EXPR_INDEX@5617..5633 - EXPR_VAR@5617..5620 - NAME@5617..5620 - IDENT@5617..5620 "std" - DOT@5620..5621 "." - NAME@5621..5633 - IDENT@5621..5633 "objectFields" - ARGS_DESC@5633..5639 - L_PAREN@5633..5634 "(" - ARG@5634..5638 - EXPR_VAR@5634..5638 - NAME@5634..5638 - IDENT@5634..5638 "conf" - R_PAREN@5638..5639 ")" - R_BRACK@5639..5640 "]" - SEMI@5640..5641 ";" - WHITESPACE@5641..5646 "\n " - EXPR_APPLY@5646..5673 - EXPR_INDEX@5646..5654 - EXPR_VAR@5646..5649 - NAME@5646..5649 - IDENT@5646..5649 "std" - DOT@5649..5650 "." - NAME@5650..5654 - IDENT@5650..5654 "join" - ARGS_DESC@5654..5673 - L_PAREN@5654..5655 "(" - ARG@5655..5659 - EXPR_STRING@5655..5659 - STRING_SINGLE@5655..5659 "'\\n'" - COMMA@5659..5660 "," - WHITESPACE@5660..5661 " " - ARG@5661..5672 - EXPR_BINARY@5661..5672 - LHS_EXPR@5661..5665 - EXPR_VAR@5661..5665 - NAME@5661..5665 - IDENT@5661..5665 "vars" - WHITESPACE@5665..5666 " " - PLUS@5666..5667 "+" - WHITESPACE@5667..5668 " " - EXPR_ARRAY@5668..5672 - L_BRACK@5668..5669 "[" - EXPR_STRING@5669..5671 - STRING_SINGLE@5669..5671 "''" - R_BRACK@5671..5672 "]" - R_PAREN@5672..5673 ")" - COMMA@5673..5674 "," - WHITESPACE@5674..5678 "\n\n " - MEMBER_FIELD_METHOD@5678..6345 - FIELD_NAME_FIXED@5678..5695 - NAME@5678..5695 - IDENT@5678..5695 "manifestXmlJsonml" - PARAMS_DESC@5695..5702 - L_PAREN@5695..5696 "(" - PARAM@5696..5701 - DESTRUCT_FULL@5696..5701 - NAME@5696..5701 - IDENT@5696..5701 "value" - R_PAREN@5701..5702 ")" - COLONCOLON@5702..5704 "::" - WHITESPACE@5704..5709 "\n " - EXPR_IF_THEN_ELSE@5709..6345 - IF_KW@5709..5711 "if" - WHITESPACE@5711..5712 " " - EXPR_UNARY@5712..5731 - NOT@5712..5713 "!" - EXPR_APPLY@5713..5731 - EXPR_INDEX@5713..5724 - EXPR_VAR@5713..5716 - NAME@5713..5716 - IDENT@5713..5716 "std" - DOT@5716..5717 "." - NAME@5717..5724 - IDENT@5717..5724 "isArray" - ARGS_DESC@5724..5731 - L_PAREN@5724..5725 "(" - ARG@5725..5730 - EXPR_VAR@5725..5730 - NAME@5725..5730 - IDENT@5725..5730 "value" - R_PAREN@5730..5731 ")" - WHITESPACE@5731..5732 " " - THEN_KW@5732..5736 "then" - WHITESPACE@5736..5743 "\n " - TRUE_EXPR@5743..5811 - EXPR_ERROR@5743..5811 - ERROR_KW@5743..5748 "error" - WHITESPACE@5748..5749 " " - EXPR_BINARY@5749..5811 - LHS_EXPR@5749..5793 - EXPR_STRING@5749..5793 - STRING_SINGLE@5749..5793 "'Expected a JSONML va ..." - WHITESPACE@5793..5794 " " - MODULO@5794..5795 "%" - WHITESPACE@5795..5796 " " - EXPR_APPLY@5796..5811 - EXPR_INDEX@5796..5804 - EXPR_VAR@5796..5799 - NAME@5796..5799 - IDENT@5796..5799 "std" - DOT@5799..5800 "." - NAME@5800..5804 - IDENT@5800..5804 "type" - ARGS_DESC@5804..5811 - L_PAREN@5804..5805 "(" - ARG@5805..5810 - EXPR_VAR@5805..5810 - NAME@5805..5810 - IDENT@5805..5810 "value" - R_PAREN@5810..5811 ")" - WHITESPACE@5811..5816 "\n " - ELSE_KW@5816..5820 "else" - WHITESPACE@5820..5827 "\n " - STMT_LOCAL@5827..6327 - LOCAL_KW@5827..5832 "local" - WHITESPACE@5832..5833 " " - BIND_FUNCTION@5833..6326 - NAME@5833..5836 - IDENT@5833..5836 "aux" - PARAMS_DESC@5836..5839 - L_PAREN@5836..5837 "(" - PARAM@5837..5838 - DESTRUCT_FULL@5837..5838 - NAME@5837..5838 - IDENT@5837..5838 "v" - R_PAREN@5838..5839 ")" - WHITESPACE@5839..5840 " " - ASSIGN@5840..5841 "=" - WHITESPACE@5841..5850 "\n " - EXPR_IF_THEN_ELSE@5850..6326 - IF_KW@5850..5852 "if" - WHITESPACE@5852..5853 " " - EXPR_APPLY@5853..5868 - EXPR_INDEX@5853..5865 - EXPR_VAR@5853..5856 - NAME@5853..5856 - IDENT@5853..5856 "std" - DOT@5856..5857 "." - NAME@5857..5865 - IDENT@5857..5865 "isString" - ARGS_DESC@5865..5868 - L_PAREN@5865..5866 "(" - ARG@5866..5867 - EXPR_VAR@5866..5867 - NAME@5866..5867 - IDENT@5866..5867 "v" - R_PAREN@5867..5868 ")" - WHITESPACE@5868..5869 " " - THEN_KW@5869..5873 "then" - WHITESPACE@5873..5884 "\n " - TRUE_EXPR@5884..5885 - EXPR_VAR@5884..5885 - NAME@5884..5885 - IDENT@5884..5885 "v" - WHITESPACE@5885..5894 "\n " - ELSE_KW@5894..5898 "else" - WHITESPACE@5898..5909 "\n " - STMT_LOCAL@5909..5926 - LOCAL_KW@5909..5914 "local" - WHITESPACE@5914..5915 " " - BIND_DESTRUCT@5915..5925 - DESTRUCT_FULL@5915..5918 - NAME@5915..5918 - IDENT@5915..5918 "tag" - WHITESPACE@5918..5919 " " - ASSIGN@5919..5920 "=" - WHITESPACE@5920..5921 " " - EXPR_INDEX_EXPR@5921..5925 - LHS_EXPR@5921..5922 - EXPR_VAR@5921..5922 - NAME@5921..5922 - IDENT@5921..5922 "v" - L_BRACK@5922..5923 "[" - EXPR_NUMBER@5923..5924 - FLOAT@5923..5924 "0" - R_BRACK@5924..5925 "]" - SEMI@5925..5926 ";" - WHITESPACE@5926..5937 "\n " - STMT_LOCAL@5937..5995 - LOCAL_KW@5937..5942 "local" - WHITESPACE@5942..5943 " " - BIND_DESTRUCT@5943..5994 - DESTRUCT_FULL@5943..5952 - NAME@5943..5952 - IDENT@5943..5952 "has_attrs" - WHITESPACE@5952..5953 " " - ASSIGN@5953..5954 "=" - WHITESPACE@5954..5955 " " - EXPR_BINARY@5955..5994 - LHS_EXPR@5955..5972 - EXPR_BINARY@5955..5972 - LHS_EXPR@5955..5968 - EXPR_APPLY@5955..5968 - EXPR_INDEX@5955..5965 - EXPR_VAR@5955..5958 - NAME@5955..5958 - IDENT@5955..5958 "std" - DOT@5958..5959 "." - NAME@5959..5965 - IDENT@5959..5965 "length" - ARGS_DESC@5965..5968 - L_PAREN@5965..5966 "(" - ARG@5966..5967 - EXPR_VAR@5966..5967 - NAME@5966..5967 - IDENT@5966..5967 "v" - R_PAREN@5967..5968 ")" - WHITESPACE@5968..5969 " " - GT@5969..5970 ">" - WHITESPACE@5970..5971 " " - EXPR_NUMBER@5971..5972 - FLOAT@5971..5972 "1" - WHITESPACE@5972..5973 " " - AND@5973..5975 "&&" - WHITESPACE@5975..5976 " " - EXPR_APPLY@5976..5994 - EXPR_INDEX@5976..5988 - EXPR_VAR@5976..5979 - NAME@5976..5979 - IDENT@5976..5979 "std" - DOT@5979..5980 "." - NAME@5980..5988 - IDENT@5980..5988 "isObject" - ARGS_DESC@5988..5994 - L_PAREN@5988..5989 "(" - ARG@5989..5993 - EXPR_INDEX_EXPR@5989..5993 - LHS_EXPR@5989..5990 - EXPR_VAR@5989..5990 - NAME@5989..5990 - IDENT@5989..5990 "v" - L_BRACK@5990..5991 "[" - EXPR_NUMBER@5991..5992 - FLOAT@5991..5992 "1" - R_BRACK@5992..5993 "]" - R_PAREN@5993..5994 ")" - SEMI@5994..5995 ";" - WHITESPACE@5995..6006 "\n " - STMT_LOCAL@6006..6051 - LOCAL_KW@6006..6011 "local" - WHITESPACE@6011..6012 " " - BIND_DESTRUCT@6012..6050 - DESTRUCT_FULL@6012..6017 - NAME@6012..6017 - IDENT@6012..6017 "attrs" - WHITESPACE@6017..6018 " " - ASSIGN@6018..6019 "=" - WHITESPACE@6019..6020 " " - EXPR_IF_THEN_ELSE@6020..6050 - IF_KW@6020..6022 "if" - WHITESPACE@6022..6023 " " - EXPR_VAR@6023..6032 - NAME@6023..6032 - IDENT@6023..6032 "has_attrs" - WHITESPACE@6032..6033 " " - THEN_KW@6033..6037 "then" - WHITESPACE@6037..6038 " " - TRUE_EXPR@6038..6042 - EXPR_INDEX_EXPR@6038..6042 - LHS_EXPR@6038..6039 - EXPR_VAR@6038..6039 - NAME@6038..6039 - IDENT@6038..6039 "v" - L_BRACK@6039..6040 "[" - EXPR_NUMBER@6040..6041 - FLOAT@6040..6041 "1" - R_BRACK@6041..6042 "]" - WHITESPACE@6042..6043 " " - ELSE_KW@6043..6047 "else" - WHITESPACE@6047..6048 " " - FALSE_EXPR@6048..6050 - EXPR_OBJECT@6048..6050 - OBJ_BODY_MEMBER_LIST@6048..6050 - L_BRACE@6048..6049 "{" - R_BRACE@6049..6050 "}" - SEMI@6050..6051 ";" - WHITESPACE@6051..6062 "\n " - STMT_LOCAL@6062..6114 - LOCAL_KW@6062..6067 "local" - WHITESPACE@6067..6068 " " - BIND_DESTRUCT@6068..6113 - DESTRUCT_FULL@6068..6076 - NAME@6068..6076 - IDENT@6068..6076 "children" - WHITESPACE@6076..6077 " " - ASSIGN@6077..6078 "=" - WHITESPACE@6078..6079 " " - EXPR_IF_THEN_ELSE@6079..6113 - IF_KW@6079..6081 "if" - WHITESPACE@6081..6082 " " - EXPR_VAR@6082..6091 - NAME@6082..6091 - IDENT@6082..6091 "has_attrs" - WHITESPACE@6091..6092 " " - THEN_KW@6092..6096 "then" - WHITESPACE@6096..6097 " " - TRUE_EXPR@6097..6102 - EXPR_SLICE@6097..6102 - EXPR_VAR@6097..6098 - NAME@6097..6098 - IDENT@6097..6098 "v" - SLICE_DESC@6098..6102 - L_BRACK@6098..6099 "[" - EXPR_NUMBER@6099..6100 - FLOAT@6099..6100 "2" - COLON@6100..6101 ":" - R_BRACK@6101..6102 "]" - WHITESPACE@6102..6103 " " - ELSE_KW@6103..6107 "else" - WHITESPACE@6107..6108 " " - FALSE_EXPR@6108..6113 - EXPR_SLICE@6108..6113 - EXPR_VAR@6108..6109 - NAME@6108..6109 - IDENT@6108..6109 "v" - SLICE_DESC@6109..6113 - L_BRACK@6109..6110 "[" - EXPR_NUMBER@6110..6111 - FLOAT@6110..6111 "1" - COLON@6111..6112 ":" - R_BRACK@6112..6113 "]" - SEMI@6113..6114 ";" - WHITESPACE@6114..6125 "\n " - STMT_LOCAL@6125..6231 - LOCAL_KW@6125..6130 "local" - WHITESPACE@6130..6131 " " - BIND_DESTRUCT@6131..6230 - DESTRUCT_FULL@6131..6140 - NAME@6131..6140 - IDENT@6131..6140 "attrs_str" - WHITESPACE@6140..6141 " " - ASSIGN@6141..6142 "=" - WHITESPACE@6142..6155 "\n " - EXPR_APPLY@6155..6230 - EXPR_INDEX@6155..6163 - EXPR_VAR@6155..6158 - NAME@6155..6158 - IDENT@6155..6158 "std" - DOT@6158..6159 "." - NAME@6159..6163 - IDENT@6159..6163 "join" - ARGS_DESC@6163..6230 - L_PAREN@6163..6164 "(" - ARG@6164..6166 - EXPR_STRING@6164..6166 - STRING_SINGLE@6164..6166 "''" - COMMA@6166..6167 "," - WHITESPACE@6167..6168 " " - ARG@6168..6229 - EXPR_ARRAY_COMP@6168..6229 - L_BRACK@6168..6169 "[" - EXPR_BINARY@6169..6195 - LHS_EXPR@6169..6179 - EXPR_STRING@6169..6179 - STRING_SINGLE@6169..6179 "' %s=\"%s\"'" - WHITESPACE@6179..6180 " " - MODULO@6180..6181 "%" - WHITESPACE@6181..6182 " " - EXPR_ARRAY@6182..6195 - L_BRACK@6182..6183 "[" - EXPR_VAR@6183..6184 - NAME@6183..6184 - IDENT@6183..6184 "k" - COMMA@6184..6185 "," - WHITESPACE@6185..6186 " " - EXPR_INDEX_EXPR@6186..6194 - LHS_EXPR@6186..6191 - EXPR_VAR@6186..6191 - NAME@6186..6191 - IDENT@6186..6191 "attrs" - L_BRACK@6191..6192 "[" - EXPR_VAR@6192..6193 - NAME@6192..6193 - IDENT@6192..6193 "k" - R_BRACK@6193..6194 "]" - R_BRACK@6194..6195 "]" - WHITESPACE@6195..6196 " " - FOR_SPEC@6196..6228 - FOR_KW@6196..6199 "for" - WHITESPACE@6199..6200 " " - NAME@6200..6201 - IDENT@6200..6201 "k" - WHITESPACE@6201..6202 " " - IN_KW@6202..6204 "in" - WHITESPACE@6204..6205 " " - EXPR_APPLY@6205..6228 - EXPR_INDEX@6205..6221 - EXPR_VAR@6205..6208 - NAME@6205..6208 - IDENT@6205..6208 "std" - DOT@6208..6209 "." - NAME@6209..6221 - IDENT@6209..6221 "objectFields" - ARGS_DESC@6221..6228 - L_PAREN@6221..6222 "(" - ARG@6222..6227 - EXPR_VAR@6222..6227 - NAME@6222..6227 - IDENT@6222..6227 "attrs" - R_PAREN@6227..6228 ")" - R_BRACK@6228..6229 "]" - R_PAREN@6229..6230 ")" - SEMI@6230..6231 ";" - WHITESPACE@6231..6242 "\n " - FALSE_EXPR@6242..6326 - EXPR_APPLY@6242..6326 - EXPR_INDEX@6242..6254 - EXPR_VAR@6242..6245 - NAME@6242..6245 - IDENT@6242..6245 "std" - DOT@6245..6246 "." - NAME@6246..6254 - IDENT@6246..6254 "deepJoin" - ARGS_DESC@6254..6326 - L_PAREN@6254..6255 "(" - ARG@6255..6325 - EXPR_ARRAY@6255..6325 - L_BRACK@6255..6256 "[" - EXPR_STRING@6256..6259 - STRING_SINGLE@6256..6259 "'<'" - COMMA@6259..6260 "," - WHITESPACE@6260..6261 " " - EXPR_VAR@6261..6264 - NAME@6261..6264 - IDENT@6261..6264 "tag" - COMMA@6264..6265 "," - WHITESPACE@6265..6266 " " - EXPR_VAR@6266..6275 - NAME@6266..6275 - IDENT@6266..6275 "attrs_str" - COMMA@6275..6276 "," - WHITESPACE@6276..6277 " " - EXPR_STRING@6277..6280 - STRING_SINGLE@6277..6280 "'>'" - COMMA@6280..6281 "," - WHITESPACE@6281..6282 " " - EXPR_ARRAY_COMP@6282..6308 - L_BRACK@6282..6283 "[" - EXPR_APPLY@6283..6289 - EXPR_VAR@6283..6286 - NAME@6283..6286 - IDENT@6283..6286 "aux" - ARGS_DESC@6286..6289 - L_PAREN@6286..6287 "(" - ARG@6287..6288 - EXPR_VAR@6287..6288 - NAME@6287..6288 - IDENT@6287..6288 "x" - R_PAREN@6288..6289 ")" - WHITESPACE@6289..6290 " " - FOR_SPEC@6290..6307 - FOR_KW@6290..6293 "for" - WHITESPACE@6293..6294 " " - NAME@6294..6295 - IDENT@6294..6295 "x" - WHITESPACE@6295..6296 " " - IN_KW@6296..6298 "in" - WHITESPACE@6298..6299 " " - EXPR_VAR@6299..6307 - NAME@6299..6307 - IDENT@6299..6307 "children" - R_BRACK@6307..6308 "]" - COMMA@6308..6309 "," - WHITESPACE@6309..6310 " " - EXPR_STRING@6310..6314 - STRING_SINGLE@6310..6314 "''" - R_BRACK@6324..6325 "]" - R_PAREN@6325..6326 ")" - SEMI@6326..6327 ";" - WHITESPACE@6327..6335 "\n\n " - FALSE_EXPR@6335..6345 - EXPR_APPLY@6335..6345 - EXPR_VAR@6335..6338 - NAME@6335..6338 - IDENT@6335..6338 "aux" - ARGS_DESC@6338..6345 - L_PAREN@6338..6339 "(" - ARG@6339..6344 - EXPR_VAR@6339..6344 - NAME@6339..6344 - IDENT@6339..6344 "value" - R_PAREN@6344..6345 ")" - COMMA@6345..6346 "," - WHITESPACE@6346..6350 "\n\n " - MEMBER_FIELD_METHOD@6350..6899 - FIELD_NAME_FIXED@6350..6358 - NAME@6350..6358 - IDENT@6350..6358 "setUnion" - PARAMS_DESC@6358..6373 - L_PAREN@6358..6359 "(" - PARAM@6359..6360 - DESTRUCT_FULL@6359..6360 - NAME@6359..6360 - IDENT@6359..6360 "a" - COMMA@6360..6361 "," - WHITESPACE@6361..6362 " " - PARAM@6362..6363 - DESTRUCT_FULL@6362..6363 - NAME@6362..6363 - IDENT@6362..6363 "b" - COMMA@6363..6364 "," - WHITESPACE@6364..6365 " " - PARAM@6365..6372 - DESTRUCT_FULL@6365..6369 - NAME@6365..6369 - IDENT@6365..6369 "keyF" - ASSIGN@6369..6370 "=" - EXPR_VAR@6370..6372 - NAME@6370..6372 - IDENT@6370..6372 "id" - R_PAREN@6372..6373 ")" - COLONCOLON@6373..6375 "::" - WHITESPACE@6375..6380 "\n " - SINGLE_LINE_SLASH_COMMENT@6380..6422 "// NOTE: order matter ..." - WHITESPACE@6422..6426 " " - STMT_LOCAL@6426..6875 - LOCAL_KW@6426..6431 "local" - WHITESPACE@6431..6432 " " - BIND_FUNCTION@6432..6874 - NAME@6432..6435 - IDENT@6432..6435 "aux" - PARAMS_DESC@6435..6452 - L_PAREN@6435..6436 "(" - PARAM@6436..6437 - DESTRUCT_FULL@6436..6437 - NAME@6436..6437 - IDENT@6436..6437 "a" - COMMA@6437..6438 "," - WHITESPACE@6438..6439 " " - PARAM@6439..6440 - DESTRUCT_FULL@6439..6440 - NAME@6439..6440 - IDENT@6439..6440 "b" - COMMA@6440..6441 "," - WHITESPACE@6441..6442 " " - PARAM@6442..6443 - DESTRUCT_FULL@6442..6443 - NAME@6442..6443 - IDENT@6442..6443 "i" - COMMA@6443..6444 "," - WHITESPACE@6444..6445 " " - PARAM@6445..6446 - DESTRUCT_FULL@6445..6446 - NAME@6445..6446 - IDENT@6445..6446 "j" - COMMA@6446..6447 "," - WHITESPACE@6447..6448 " " - PARAM@6448..6451 - DESTRUCT_FULL@6448..6451 - NAME@6448..6451 - IDENT@6448..6451 "acc" - R_PAREN@6451..6452 ")" - WHITESPACE@6452..6453 " " - ASSIGN@6453..6454 "=" - WHITESPACE@6454..6461 "\n " - EXPR_IF_THEN_ELSE@6461..6874 - IF_KW@6461..6463 "if" - WHITESPACE@6463..6464 " " - EXPR_BINARY@6464..6482 - LHS_EXPR@6464..6465 - EXPR_VAR@6464..6465 - NAME@6464..6465 - IDENT@6464..6465 "i" - WHITESPACE@6465..6466 " " - GE@6466..6468 ">=" - WHITESPACE@6468..6469 " " - EXPR_APPLY@6469..6482 - EXPR_INDEX@6469..6479 - EXPR_VAR@6469..6472 - NAME@6469..6472 - IDENT@6469..6472 "std" - DOT@6472..6473 "." - NAME@6473..6479 - IDENT@6473..6479 "length" - ARGS_DESC@6479..6482 - L_PAREN@6479..6480 "(" - ARG@6480..6481 - EXPR_VAR@6480..6481 - NAME@6480..6481 - IDENT@6480..6481 "a" - R_PAREN@6481..6482 ")" - WHITESPACE@6482..6483 " " - THEN_KW@6483..6487 "then" - WHITESPACE@6487..6496 "\n " - TRUE_EXPR@6496..6507 - EXPR_BINARY@6496..6507 - LHS_EXPR@6496..6499 - EXPR_VAR@6496..6499 - NAME@6496..6499 - IDENT@6496..6499 "acc" - WHITESPACE@6499..6500 " " - PLUS@6500..6501 "+" - WHITESPACE@6501..6502 " " - EXPR_SLICE@6502..6507 - EXPR_VAR@6502..6503 - NAME@6502..6503 - IDENT@6502..6503 "b" - SLICE_DESC@6503..6507 - L_BRACK@6503..6504 "[" - EXPR_VAR@6504..6505 - NAME@6504..6505 - IDENT@6504..6505 "j" - COLON@6505..6506 ":" - R_BRACK@6506..6507 "]" - WHITESPACE@6507..6514 "\n " - ELSE_KW@6514..6518 "else" - WHITESPACE@6518..6519 " " - FALSE_EXPR@6519..6874 - EXPR_IF_THEN_ELSE@6519..6874 - IF_KW@6519..6521 "if" - WHITESPACE@6521..6522 " " - EXPR_BINARY@6522..6540 - LHS_EXPR@6522..6523 - EXPR_VAR@6522..6523 - NAME@6522..6523 - IDENT@6522..6523 "j" - WHITESPACE@6523..6524 " " - GE@6524..6526 ">=" - WHITESPACE@6526..6527 " " - EXPR_APPLY@6527..6540 - EXPR_INDEX@6527..6537 - EXPR_VAR@6527..6530 - NAME@6527..6530 - IDENT@6527..6530 "std" - DOT@6530..6531 "." - NAME@6531..6537 - IDENT@6531..6537 "length" - ARGS_DESC@6537..6540 - L_PAREN@6537..6538 "(" - ARG@6538..6539 - EXPR_VAR@6538..6539 - NAME@6538..6539 - IDENT@6538..6539 "b" - R_PAREN@6539..6540 ")" - WHITESPACE@6540..6541 " " - THEN_KW@6541..6545 "then" - WHITESPACE@6545..6554 "\n " - TRUE_EXPR@6554..6565 - EXPR_BINARY@6554..6565 - LHS_EXPR@6554..6557 - EXPR_VAR@6554..6557 - NAME@6554..6557 - IDENT@6554..6557 "acc" - WHITESPACE@6557..6558 " " - PLUS@6558..6559 "+" - WHITESPACE@6559..6560 " " - EXPR_SLICE@6560..6565 - EXPR_VAR@6560..6561 - NAME@6560..6561 - IDENT@6560..6561 "a" - SLICE_DESC@6561..6565 - L_BRACK@6561..6562 "[" - EXPR_VAR@6562..6563 - NAME@6562..6563 - IDENT@6562..6563 "i" - COLON@6563..6564 ":" - R_BRACK@6564..6565 "]" - WHITESPACE@6565..6572 "\n " - ELSE_KW@6572..6576 "else" - WHITESPACE@6576..6585 "\n " - STMT_LOCAL@6585..6607 - LOCAL_KW@6585..6590 "local" - WHITESPACE@6590..6591 " " - BIND_DESTRUCT@6591..6606 - DESTRUCT_FULL@6591..6593 - NAME@6591..6593 - IDENT@6591..6593 "ak" - WHITESPACE@6593..6594 " " - ASSIGN@6594..6595 "=" - WHITESPACE@6595..6596 " " - EXPR_APPLY@6596..6606 - EXPR_VAR@6596..6600 - NAME@6596..6600 - IDENT@6596..6600 "keyF" - ARGS_DESC@6600..6606 - L_PAREN@6600..6601 "(" - ARG@6601..6605 - EXPR_INDEX_EXPR@6601..6605 - LHS_EXPR@6601..6602 - EXPR_VAR@6601..6602 - NAME@6601..6602 - IDENT@6601..6602 "a" - L_BRACK@6602..6603 "[" - EXPR_VAR@6603..6604 - NAME@6603..6604 - IDENT@6603..6604 "i" - R_BRACK@6604..6605 "]" - R_PAREN@6605..6606 ")" - SEMI@6606..6607 ";" - WHITESPACE@6607..6616 "\n " - STMT_LOCAL@6616..6638 - LOCAL_KW@6616..6621 "local" - WHITESPACE@6621..6622 " " - BIND_DESTRUCT@6622..6637 - DESTRUCT_FULL@6622..6624 - NAME@6622..6624 - IDENT@6622..6624 "bk" - WHITESPACE@6624..6625 " " - ASSIGN@6625..6626 "=" - WHITESPACE@6626..6627 " " - EXPR_APPLY@6627..6637 - EXPR_VAR@6627..6631 - NAME@6627..6631 - IDENT@6627..6631 "keyF" - ARGS_DESC@6631..6637 - L_PAREN@6631..6632 "(" - ARG@6632..6636 - EXPR_INDEX_EXPR@6632..6636 - LHS_EXPR@6632..6633 - EXPR_VAR@6632..6633 - NAME@6632..6633 - IDENT@6632..6633 "b" - L_BRACK@6633..6634 "[" - EXPR_VAR@6634..6635 - NAME@6634..6635 - IDENT@6634..6635 "j" - R_BRACK@6635..6636 "]" - R_PAREN@6636..6637 ")" - SEMI@6637..6638 ";" - WHITESPACE@6638..6647 "\n " - FALSE_EXPR@6647..6874 - EXPR_IF_THEN_ELSE@6647..6874 - IF_KW@6647..6649 "if" - WHITESPACE@6649..6650 " " - EXPR_BINARY@6650..6658 - LHS_EXPR@6650..6652 - EXPR_VAR@6650..6652 - NAME@6650..6652 - IDENT@6650..6652 "ak" - WHITESPACE@6652..6653 " " - EQ@6653..6655 "==" - WHITESPACE@6655..6656 " " - EXPR_VAR@6656..6658 - NAME@6656..6658 - IDENT@6656..6658 "bk" - WHITESPACE@6658..6659 " " - THEN_KW@6659..6663 "then" - WHITESPACE@6663..6674 "\n " - TRUE_EXPR@6674..6722 - EXPR_APPLY@6674..6722 - EXPR_VAR@6674..6677 - NAME@6674..6677 - IDENT@6674..6677 "aux" - ARGS_DESC@6677..6722 - L_PAREN@6677..6678 "(" - ARG@6678..6679 - EXPR_VAR@6678..6679 - NAME@6678..6679 - IDENT@6678..6679 "a" - COMMA@6679..6680 "," - WHITESPACE@6680..6681 " " - ARG@6681..6682 - EXPR_VAR@6681..6682 - NAME@6681..6682 - IDENT@6681..6682 "b" - COMMA@6682..6683 "," - WHITESPACE@6683..6684 " " - ARG@6684..6689 - EXPR_BINARY@6684..6689 - LHS_EXPR@6684..6685 - EXPR_VAR@6684..6685 - NAME@6684..6685 - IDENT@6684..6685 "i" - WHITESPACE@6685..6686 " " - PLUS@6686..6687 "+" - WHITESPACE@6687..6688 " " - EXPR_NUMBER@6688..6689 - FLOAT@6688..6689 "1" - COMMA@6689..6690 "," - WHITESPACE@6690..6691 " " - ARG@6691..6696 - EXPR_BINARY@6691..6696 - LHS_EXPR@6691..6692 - EXPR_VAR@6691..6692 - NAME@6691..6692 - IDENT@6691..6692 "j" - WHITESPACE@6692..6693 " " - PLUS@6693..6694 "+" - WHITESPACE@6694..6695 " " - EXPR_NUMBER@6695..6696 - FLOAT@6695..6696 "1" - COMMA@6696..6697 "," - WHITESPACE@6697..6698 " " - ARG@6698..6710 - EXPR_BINARY@6698..6710 - LHS_EXPR@6698..6701 - EXPR_VAR@6698..6701 - NAME@6698..6701 - IDENT@6698..6701 "acc" + THEN_KW@3935..3939 "then" + WHITESPACE@3939..3946 "\n " + TRUE_EXPR@3946..4014 + EXPR@3946..4014 + EXPR_ERROR@3946..4014 + ERROR_KW@3946..3951 "error" + WHITESPACE@3951..3952 " " + EXPR@3952..4014 + EXPR_BINARY@3952..4014 + EXPR@3952..3996 + EXPR_STRING@3952..3996 + STRING_SINGLE@3952..3996 "'manifestYamlStream o ..." + WHITESPACE@3996..3997 " " + PLUS@3997..3998 "+" + WHITESPACE@3998..3999 " " + EXPR@3999..4014 + EXPR_VAR@3999..4002 + NAME@3999..4002 + IDENT@3999..4002 "std" + SUFFIX_INDEX@4002..4007 + DOT@4002..4003 "." + NAME@4003..4007 + IDENT@4003..4007 "type" + SUFFIX_APPLY@4007..4014 + ARGS_DESC@4007..4014 + L_PAREN@4007..4008 "(" + ARG@4008..4013 + EXPR@4008..4013 + EXPR_VAR@4008..4013 + NAME@4008..4013 + IDENT@4008..4013 "value" + R_PAREN@4013..4014 ")" + WHITESPACE@4014..4019 "\n " + ELSE_KW@4019..4023 "else" + WHITESPACE@4023..4030 "\n " + FALSE_EXPR@4030..4197 + EXPR@4030..4197 + EXPR_BINARY@4030..4197 + EXPR@4030..4152 + EXPR_BINARY@4030..4152 + EXPR@4030..4037 + EXPR_STRING@4030..4037 + STRING_SINGLE@4030..4037 "'---\\n'" + WHITESPACE@4037..4038 " " + PLUS@4038..4039 "+" + WHITESPACE@4039..4040 " " + EXPR@4040..4152 + EXPR_VAR@4040..4043 + NAME@4040..4043 + IDENT@4040..4043 "std" + SUFFIX_INDEX@4043..4048 + DOT@4043..4044 "." + NAME@4044..4048 + IDENT@4044..4048 "join" + SUFFIX_APPLY@4048..4152 + ARGS_DESC@4048..4152 + L_PAREN@4048..4049 "(" + WHITESPACE@4049..4058 "\n " + ARG@4058..4067 + EXPR@4058..4067 + EXPR_STRING@4058..4067 + STRING_SINGLE@4058..4067 "'\\n---\\n'" + COMMA@4067..4068 "," + WHITESPACE@4068..4069 " " + ARG@4069..4144 + EXPR@4069..4144 + EXPR_ARRAY_COMP@4069..4144 + L_BRACK@4069..4070 "[" + EXPR@4070..4128 + EXPR_VAR@4070..4073 + NAME@4070..4073 + IDENT@4070..4073 "std" + SUFFIX_INDEX@4073..4089 + DOT@4073..4074 "." + NAME@4074..4089 + IDENT@4074..4089 "manifestYamlDoc" + SUFFIX_APPLY@4089..4128 + ARGS_DESC@4089..4128 + L_PAREN@4089..4090 "(" + ARG@4090..4091 + EXPR@4090..4091 + EXPR_VAR@4090..4091 + NAME@4090..4091 + IDENT@4090..4091 "e" + COMMA@4091..4092 "," + WHITESPACE@4092..4093 " " + ARG@4093..4115 + EXPR@4093..4115 + EXPR_VAR@4093..4115 + NAME@4093..4115 + IDENT@4093..4115 "indent_array_in_object" + COMMA@4115..4116 "," + WHITESPACE@4116..4117 " " + ARG@4117..4127 + EXPR@4117..4127 + EXPR_VAR@4117..4127 + NAME@4117..4127 + IDENT@4117..4127 "quote_keys" + R_PAREN@4127..4128 ")" + WHITESPACE@4128..4129 " " + FOR_SPEC@4129..4143 + FOR_KW@4129..4132 "for" + WHITESPACE@4132..4133 " " + DESTRUCT_FULL@4133..4134 + NAME@4133..4134 + IDENT@4133..4134 "e" + WHITESPACE@4134..4135 " " + IN_KW@4135..4137 "in" + WHITESPACE@4137..4138 " " + EXPR@4138..4143 + EXPR_VAR@4138..4143 + NAME@4138..4143 + IDENT@4138..4143 "value" + R_BRACK@4143..4144 "]" + WHITESPACE@4144..4151 "\n " + R_PAREN@4151..4152 ")" + WHITESPACE@4152..4153 " " + PLUS@4153..4154 "+" + WHITESPACE@4154..4155 " " + EXPR@4155..4197 + EXPR_IF_THEN_ELSE@4155..4197 + IF_KW@4155..4157 "if" + WHITESPACE@4157..4158 " " + EXPR@4158..4172 + EXPR_VAR@4158..4172 + NAME@4158..4172 + IDENT@4158..4172 "c_document_end" + WHITESPACE@4172..4173 " " + THEN_KW@4173..4177 "then" + WHITESPACE@4177..4178 " " + TRUE_EXPR@4178..4187 + EXPR@4178..4187 + EXPR_STRING@4178..4187 + STRING_SINGLE@4178..4187 "'\\n...\\n'" + WHITESPACE@4187..4188 " " + ELSE_KW@4188..4192 "else" + WHITESPACE@4192..4193 " " + FALSE_EXPR@4193..4197 + EXPR@4193..4197 + EXPR_STRING@4193..4197 + STRING_SINGLE@4193..4197 "'\\n'" + COMMA@4197..4198 "," + WHITESPACE@4198..4202 "\n\n " + MEMBER_FIELD_METHOD@4202..4858 + FIELD_NAME_FIXED@4202..4216 + NAME@4202..4216 + IDENT@4202..4216 "manifestPython" + PARAMS_DESC@4216..4219 + L_PAREN@4216..4217 "(" + PARAM@4217..4218 + DESTRUCT_FULL@4217..4218 + NAME@4217..4218 + IDENT@4217..4218 "v" + R_PAREN@4218..4219 ")" + COLONCOLON@4219..4221 "::" + WHITESPACE@4221..4226 "\n " + EXPR@4226..4858 + EXPR_IF_THEN_ELSE@4226..4858 + IF_KW@4226..4228 "if" + WHITESPACE@4228..4229 " " + EXPR@4229..4244 + EXPR_VAR@4229..4232 + NAME@4229..4232 + IDENT@4229..4232 "std" + SUFFIX_INDEX@4232..4241 + DOT@4232..4233 "." + NAME@4233..4241 + IDENT@4233..4241 "isObject" + SUFFIX_APPLY@4241..4244 + ARGS_DESC@4241..4244 + L_PAREN@4241..4242 "(" + ARG@4242..4243 + EXPR@4242..4243 + EXPR_VAR@4242..4243 + NAME@4242..4243 + IDENT@4242..4243 "v" + R_PAREN@4243..4244 ")" + WHITESPACE@4244..4245 " " + THEN_KW@4245..4249 "then" + WHITESPACE@4249..4256 "\n " + TRUE_EXPR@4256..4431 + EXPR@4256..4431 + STMT_LOCAL@4256..4391 + LOCAL_KW@4256..4261 "local" + WHITESPACE@4261..4262 " " + BIND_DESTRUCT@4262..4390 + DESTRUCT_FULL@4262..4268 + NAME@4262..4268 + IDENT@4262..4268 "fields" + WHITESPACE@4268..4269 " " + ASSIGN@4269..4270 "=" + WHITESPACE@4270..4271 " " + EXPR@4271..4390 + EXPR_ARRAY_COMP@4271..4390 + L_BRACK@4271..4272 "[" + WHITESPACE@4272..4281 "\n " + EXPR@4281..4345 + EXPR_BINARY@4281..4345 + EXPR@4281..4289 + EXPR_STRING@4281..4289 + STRING_SINGLE@4281..4289 "'%s: %s'" + WHITESPACE@4289..4290 " " + MODULO@4290..4291 "%" + WHITESPACE@4291..4292 " " + EXPR@4292..4345 + EXPR_ARRAY@4292..4345 + L_BRACK@4292..4293 "[" + EXPR@4293..4318 + EXPR_VAR@4293..4296 + NAME@4293..4296 + IDENT@4293..4296 "std" + SUFFIX_INDEX@4296..4315 + DOT@4296..4297 "." + NAME@4297..4315 + IDENT@4297..4315 "escapeStringPython" + SUFFIX_APPLY@4315..4318 + ARGS_DESC@4315..4318 + L_PAREN@4315..4316 "(" + ARG@4316..4317 + EXPR@4316..4317 + EXPR_VAR@4316..4317 + NAME@4316..4317 + IDENT@4316..4317 "k" + R_PAREN@4317..4318 ")" + COMMA@4318..4319 "," + WHITESPACE@4319..4320 " " + EXPR@4320..4344 + EXPR_VAR@4320..4323 + NAME@4320..4323 + IDENT@4320..4323 "std" + SUFFIX_INDEX@4323..4338 + DOT@4323..4324 "." + NAME@4324..4338 + IDENT@4324..4338 "manifestPython" + SUFFIX_APPLY@4338..4344 + ARGS_DESC@4338..4344 + L_PAREN@4338..4339 "(" + ARG@4339..4343 + EXPR@4339..4343 + EXPR_VAR@4339..4340 + NAME@4339..4340 + IDENT@4339..4340 "v" + SUFFIX_INDEX_EXPR@4340..4343 + L_BRACK@4340..4341 "[" + EXPR@4341..4342 + EXPR_VAR@4341..4342 + NAME@4341..4342 + IDENT@4341..4342 "k" + R_BRACK@4342..4343 "]" + R_PAREN@4343..4344 ")" + R_BRACK@4344..4345 "]" + WHITESPACE@4345..4354 "\n " + FOR_SPEC@4354..4382 + FOR_KW@4354..4357 "for" + WHITESPACE@4357..4358 " " + DESTRUCT_FULL@4358..4359 + NAME@4358..4359 + IDENT@4358..4359 "k" + WHITESPACE@4359..4360 " " + IN_KW@4360..4362 "in" + WHITESPACE@4362..4363 " " + EXPR@4363..4382 + EXPR_VAR@4363..4366 + NAME@4363..4366 + IDENT@4363..4366 "std" + SUFFIX_INDEX@4366..4379 + DOT@4366..4367 "." + NAME@4367..4379 + IDENT@4367..4379 "objectFields" + SUFFIX_APPLY@4379..4382 + ARGS_DESC@4379..4382 + L_PAREN@4379..4380 "(" + ARG@4380..4381 + EXPR@4380..4381 + EXPR_VAR@4380..4381 + NAME@4380..4381 + IDENT@4380..4381 "v" + R_PAREN@4381..4382 ")" + WHITESPACE@4382..4389 "\n " + R_BRACK@4389..4390 "]" + SEMI@4390..4391 ";" + WHITESPACE@4391..4398 "\n " + EXPR_BINARY@4398..4431 + EXPR@4398..4404 + EXPR_STRING@4398..4404 + STRING_SINGLE@4398..4404 "'{%s}'" + WHITESPACE@4404..4405 " " + MODULO@4405..4406 "%" + WHITESPACE@4406..4407 " " + EXPR@4407..4431 + EXPR_ARRAY@4407..4431 + L_BRACK@4407..4408 "[" + EXPR@4408..4430 + EXPR_VAR@4408..4411 + NAME@4408..4411 + IDENT@4408..4411 "std" + SUFFIX_INDEX@4411..4416 + DOT@4411..4412 "." + NAME@4412..4416 + IDENT@4412..4416 "join" + SUFFIX_APPLY@4416..4430 + ARGS_DESC@4416..4430 + L_PAREN@4416..4417 "(" + ARG@4417..4421 + EXPR@4417..4421 + EXPR_STRING@4417..4421 + STRING_SINGLE@4417..4421 "', '" + COMMA@4421..4422 "," + WHITESPACE@4422..4423 " " + ARG@4423..4429 + EXPR@4423..4429 + EXPR_VAR@4423..4429 + NAME@4423..4429 + IDENT@4423..4429 "fields" + R_PAREN@4429..4430 ")" + R_BRACK@4430..4431 "]" + WHITESPACE@4431..4436 "\n " + ELSE_KW@4436..4440 "else" + WHITESPACE@4440..4441 " " + FALSE_EXPR@4441..4858 + EXPR@4441..4858 + EXPR_IF_THEN_ELSE@4441..4858 + IF_KW@4441..4443 "if" + WHITESPACE@4443..4444 " " + EXPR@4444..4458 + EXPR_VAR@4444..4447 + NAME@4444..4447 + IDENT@4444..4447 "std" + SUFFIX_INDEX@4447..4455 + DOT@4447..4448 "." + NAME@4448..4455 + IDENT@4448..4455 "isArray" + SUFFIX_APPLY@4455..4458 + ARGS_DESC@4455..4458 + L_PAREN@4455..4456 "(" + ARG@4456..4457 + EXPR@4456..4457 + EXPR_VAR@4456..4457 + NAME@4456..4457 + IDENT@4456..4457 "v" + R_PAREN@4457..4458 ")" + WHITESPACE@4458..4459 " " + THEN_KW@4459..4463 "then" + WHITESPACE@4463..4470 "\n " + TRUE_EXPR@4470..4533 + EXPR@4470..4533 + EXPR_BINARY@4470..4533 + EXPR@4470..4476 + EXPR_STRING@4470..4476 + STRING_SINGLE@4470..4476 "'[%s]'" + WHITESPACE@4476..4477 " " + MODULO@4477..4478 "%" + WHITESPACE@4478..4479 " " + EXPR@4479..4533 + EXPR_ARRAY@4479..4533 + L_BRACK@4479..4480 "[" + EXPR@4480..4532 + EXPR_VAR@4480..4483 + NAME@4480..4483 + IDENT@4480..4483 "std" + SUFFIX_INDEX@4483..4488 + DOT@4483..4484 "." + NAME@4484..4488 + IDENT@4484..4488 "join" + SUFFIX_APPLY@4488..4532 + ARGS_DESC@4488..4532 + L_PAREN@4488..4489 "(" + ARG@4489..4493 + EXPR@4489..4493 + EXPR_STRING@4489..4493 + STRING_SINGLE@4489..4493 "', '" + COMMA@4493..4494 "," + WHITESPACE@4494..4495 " " + ARG@4495..4531 + EXPR@4495..4531 + EXPR_ARRAY_COMP@4495..4531 + L_BRACK@4495..4496 "[" + EXPR@4496..4518 + EXPR_VAR@4496..4499 + NAME@4496..4499 + IDENT@4496..4499 "std" + SUFFIX_INDEX@4499..4514 + DOT@4499..4500 "." + NAME@4500..4514 + IDENT@4500..4514 "manifestPython" + SUFFIX_APPLY@4514..4518 + ARGS_DESC@4514..4518 + L_PAREN@4514..4515 "(" + ARG@4515..4517 + EXPR@4515..4517 + EXPR_VAR@4515..4517 + NAME@4515..4517 + IDENT@4515..4517 "v2" + R_PAREN@4517..4518 ")" + WHITESPACE@4518..4519 " " + FOR_SPEC@4519..4530 + FOR_KW@4519..4522 "for" + WHITESPACE@4522..4523 " " + DESTRUCT_FULL@4523..4525 + NAME@4523..4525 + IDENT@4523..4525 "v2" + WHITESPACE@4525..4526 " " + IN_KW@4526..4528 "in" + WHITESPACE@4528..4529 " " + EXPR@4529..4530 + EXPR_VAR@4529..4530 + NAME@4529..4530 + IDENT@4529..4530 "v" + R_BRACK@4530..4531 "]" + R_PAREN@4531..4532 ")" + R_BRACK@4532..4533 "]" + WHITESPACE@4533..4538 "\n " + ELSE_KW@4538..4542 "else" + WHITESPACE@4542..4543 " " + FALSE_EXPR@4543..4858 + EXPR@4543..4858 + EXPR_IF_THEN_ELSE@4543..4858 + IF_KW@4543..4545 "if" + WHITESPACE@4545..4546 " " + EXPR@4546..4561 + EXPR_VAR@4546..4549 + NAME@4546..4549 + IDENT@4546..4549 "std" + SUFFIX_INDEX@4549..4558 + DOT@4549..4550 "." + NAME@4550..4558 + IDENT@4550..4558 "isString" + SUFFIX_APPLY@4558..4561 + ARGS_DESC@4558..4561 + L_PAREN@4558..4559 "(" + ARG@4559..4560 + EXPR@4559..4560 + EXPR_VAR@4559..4560 + NAME@4559..4560 + IDENT@4559..4560 "v" + R_PAREN@4560..4561 ")" + WHITESPACE@4561..4562 " " + THEN_KW@4562..4566 "then" + WHITESPACE@4566..4573 "\n " + TRUE_EXPR@4573..4607 + EXPR@4573..4607 + EXPR_BINARY@4573..4607 + EXPR@4573..4577 + EXPR_STRING@4573..4577 + STRING_SINGLE@4573..4577 "'%s'" + WHITESPACE@4577..4578 " " + MODULO@4578..4579 "%" + WHITESPACE@4579..4580 " " + EXPR@4580..4607 + EXPR_ARRAY@4580..4607 + L_BRACK@4580..4581 "[" + EXPR@4581..4606 + EXPR_VAR@4581..4584 + NAME@4581..4584 + IDENT@4581..4584 "std" + SUFFIX_INDEX@4584..4603 + DOT@4584..4585 "." + NAME@4585..4603 + IDENT@4585..4603 "escapeStringPython" + SUFFIX_APPLY@4603..4606 + ARGS_DESC@4603..4606 + L_PAREN@4603..4604 "(" + ARG@4604..4605 + EXPR@4604..4605 + EXPR_VAR@4604..4605 + NAME@4604..4605 + IDENT@4604..4605 "v" + R_PAREN@4605..4606 ")" + R_BRACK@4606..4607 "]" + WHITESPACE@4607..4612 "\n " + ELSE_KW@4612..4616 "else" + WHITESPACE@4616..4617 " " + FALSE_EXPR@4617..4858 + EXPR@4617..4858 + EXPR_IF_THEN_ELSE@4617..4858 + IF_KW@4617..4619 "if" + WHITESPACE@4619..4620 " " + EXPR@4620..4637 + EXPR_VAR@4620..4623 + NAME@4620..4623 + IDENT@4620..4623 "std" + SUFFIX_INDEX@4623..4634 + DOT@4623..4624 "." + NAME@4624..4634 + IDENT@4624..4634 "isFunction" + SUFFIX_APPLY@4634..4637 + ARGS_DESC@4634..4637 + L_PAREN@4634..4635 "(" + ARG@4635..4636 + EXPR@4635..4636 + EXPR_VAR@4635..4636 + NAME@4635..4636 + IDENT@4635..4636 "v" + R_PAREN@4636..4637 ")" + WHITESPACE@4637..4638 " " + THEN_KW@4638..4642 "then" + WHITESPACE@4642..4649 "\n " + TRUE_EXPR@4649..4681 + EXPR@4649..4681 + EXPR_ERROR@4649..4681 + ERROR_KW@4649..4654 "error" + WHITESPACE@4654..4655 " " + EXPR@4655..4681 + EXPR_STRING@4655..4681 + STRING_SINGLE@4655..4681 "'cannot manifest func ..." + WHITESPACE@4681..4686 "\n " + ELSE_KW@4686..4690 "else" + WHITESPACE@4690..4691 " " + FALSE_EXPR@4691..4858 + EXPR@4691..4858 + EXPR_IF_THEN_ELSE@4691..4858 + IF_KW@4691..4693 "if" + WHITESPACE@4693..4694 " " + EXPR@4694..4709 + EXPR_VAR@4694..4697 + NAME@4694..4697 + IDENT@4694..4697 "std" + SUFFIX_INDEX@4697..4706 + DOT@4697..4698 "." + NAME@4698..4706 + IDENT@4698..4706 "isNumber" + SUFFIX_APPLY@4706..4709 + ARGS_DESC@4706..4709 + L_PAREN@4706..4707 "(" + ARG@4707..4708 + EXPR@4707..4708 + EXPR_VAR@4707..4708 + NAME@4707..4708 + IDENT@4707..4708 "v" + R_PAREN@4708..4709 ")" + WHITESPACE@4709..4710 " " + THEN_KW@4710..4714 "then" + WHITESPACE@4714..4721 "\n " + TRUE_EXPR@4721..4736 + EXPR@4721..4736 + EXPR_VAR@4721..4724 + NAME@4721..4724 + IDENT@4721..4724 "std" + SUFFIX_INDEX@4724..4733 + DOT@4724..4725 "." + NAME@4725..4733 + IDENT@4725..4733 "toString" + SUFFIX_APPLY@4733..4736 + ARGS_DESC@4733..4736 + L_PAREN@4733..4734 "(" + ARG@4734..4735 + EXPR@4734..4735 + EXPR_VAR@4734..4735 + NAME@4734..4735 + IDENT@4734..4735 "v" + R_PAREN@4735..4736 ")" + WHITESPACE@4736..4741 "\n " + ELSE_KW@4741..4745 "else" + WHITESPACE@4745..4746 " " + FALSE_EXPR@4746..4858 + EXPR@4746..4858 + EXPR_IF_THEN_ELSE@4746..4858 + IF_KW@4746..4748 "if" + WHITESPACE@4748..4749 " " + EXPR@4749..4758 + EXPR_BINARY@4749..4758 + EXPR@4749..4750 + EXPR_VAR@4749..4750 + NAME@4749..4750 + IDENT@4749..4750 "v" + WHITESPACE@4750..4751 " " + EQ@4751..4753 "==" + WHITESPACE@4753..4754 " " + EXPR@4754..4758 + EXPR_LITERAL@4754..4758 + TRUE_KW@4754..4758 "true" + WHITESPACE@4758..4759 " " + THEN_KW@4759..4763 "then" + WHITESPACE@4763..4770 "\n " + TRUE_EXPR@4770..4776 + EXPR@4770..4776 + EXPR_STRING@4770..4776 + STRING_SINGLE@4770..4776 "'True'" + WHITESPACE@4776..4781 "\n " + ELSE_KW@4781..4785 "else" + WHITESPACE@4785..4786 " " + FALSE_EXPR@4786..4858 + EXPR@4786..4858 + EXPR_IF_THEN_ELSE@4786..4858 + IF_KW@4786..4788 "if" + WHITESPACE@4788..4789 " " + EXPR@4789..4799 + EXPR_BINARY@4789..4799 + EXPR@4789..4790 + EXPR_VAR@4789..4790 + NAME@4789..4790 + IDENT@4789..4790 "v" + WHITESPACE@4790..4791 " " + EQ@4791..4793 "==" + WHITESPACE@4793..4794 " " + EXPR@4794..4799 + EXPR_LITERAL@4794..4799 + FALSE_KW@4794..4799 "false" + WHITESPACE@4799..4800 " " + THEN_KW@4800..4804 "then" + WHITESPACE@4804..4811 "\n " + TRUE_EXPR@4811..4818 + EXPR@4811..4818 + EXPR_STRING@4811..4818 + STRING_SINGLE@4811..4818 "'False'" + WHITESPACE@4818..4823 "\n " + ELSE_KW@4823..4827 "else" + WHITESPACE@4827..4828 " " + FALSE_EXPR@4828..4858 + EXPR@4828..4858 + EXPR_IF_THEN_ELSE@4828..4858 + IF_KW@4828..4830 "if" + WHITESPACE@4830..4831 " " + EXPR@4831..4840 + EXPR_BINARY@4831..4840 + EXPR@4831..4832 + EXPR_VAR@4831..4832 + NAME@4831..4832 + IDENT@4831..4832 "v" + WHITESPACE@4832..4833 " " + EQ@4833..4835 "==" + WHITESPACE@4835..4836 " " + EXPR@4836..4840 + EXPR_LITERAL@4836..4840 + NULL_KW@4836..4840 "null" + WHITESPACE@4840..4841 " " + THEN_KW@4841..4845 "then" + WHITESPACE@4845..4852 "\n " + TRUE_EXPR@4852..4858 + EXPR@4852..4858 + EXPR_STRING@4852..4858 + STRING_SINGLE@4852..4858 "'None'" + COMMA@4858..4859 "," + WHITESPACE@4859..4863 "\n\n " + MEMBER_FIELD_METHOD@4863..5018 + FIELD_NAME_FIXED@4863..4881 + NAME@4863..4881 + IDENT@4863..4881 "manifestPythonVars" + PARAMS_DESC@4881..4887 + L_PAREN@4881..4882 "(" + PARAM@4882..4886 + DESTRUCT_FULL@4882..4886 + NAME@4882..4886 + IDENT@4882..4886 "conf" + R_PAREN@4886..4887 ")" + COLONCOLON@4887..4889 "::" + WHITESPACE@4889..4894 "\n " + EXPR@4894..5018 + STMT_LOCAL@4894..4986 + LOCAL_KW@4894..4899 "local" + WHITESPACE@4899..4900 " " + BIND_DESTRUCT@4900..4985 + DESTRUCT_FULL@4900..4904 + NAME@4900..4904 + IDENT@4900..4904 "vars" + WHITESPACE@4904..4905 " " + ASSIGN@4905..4906 "=" + WHITESPACE@4906..4907 " " + EXPR@4907..4985 + EXPR_ARRAY_COMP@4907..4985 + L_BRACK@4907..4908 "[" + EXPR@4908..4952 + EXPR_BINARY@4908..4952 + EXPR@4908..4917 + EXPR_STRING@4908..4917 + STRING_SINGLE@4908..4917 "'%s = %s'" + WHITESPACE@4917..4918 " " + MODULO@4918..4919 "%" + WHITESPACE@4919..4920 " " + EXPR@4920..4952 + EXPR_ARRAY@4920..4952 + L_BRACK@4920..4921 "[" + EXPR@4921..4922 + EXPR_VAR@4921..4922 + NAME@4921..4922 + IDENT@4921..4922 "k" + COMMA@4922..4923 "," + WHITESPACE@4923..4924 " " + EXPR@4924..4951 + EXPR_VAR@4924..4927 + NAME@4924..4927 + IDENT@4924..4927 "std" + SUFFIX_INDEX@4927..4942 + DOT@4927..4928 "." + NAME@4928..4942 + IDENT@4928..4942 "manifestPython" + SUFFIX_APPLY@4942..4951 + ARGS_DESC@4942..4951 + L_PAREN@4942..4943 "(" + ARG@4943..4950 + EXPR@4943..4950 + EXPR_VAR@4943..4947 + NAME@4943..4947 + IDENT@4943..4947 "conf" + SUFFIX_INDEX_EXPR@4947..4950 + L_BRACK@4947..4948 "[" + EXPR@4948..4949 + EXPR_VAR@4948..4949 + NAME@4948..4949 + IDENT@4948..4949 "k" + R_BRACK@4949..4950 "]" + R_PAREN@4950..4951 ")" + R_BRACK@4951..4952 "]" + WHITESPACE@4952..4953 " " + FOR_SPEC@4953..4984 + FOR_KW@4953..4956 "for" + WHITESPACE@4956..4957 " " + DESTRUCT_FULL@4957..4958 + NAME@4957..4958 + IDENT@4957..4958 "k" + WHITESPACE@4958..4959 " " + IN_KW@4959..4961 "in" + WHITESPACE@4961..4962 " " + EXPR@4962..4984 + EXPR_VAR@4962..4965 + NAME@4962..4965 + IDENT@4962..4965 "std" + SUFFIX_INDEX@4965..4978 + DOT@4965..4966 "." + NAME@4966..4978 + IDENT@4966..4978 "objectFields" + SUFFIX_APPLY@4978..4984 + ARGS_DESC@4978..4984 + L_PAREN@4978..4979 "(" + ARG@4979..4983 + EXPR@4979..4983 + EXPR_VAR@4979..4983 + NAME@4979..4983 + IDENT@4979..4983 "conf" + R_PAREN@4983..4984 ")" + R_BRACK@4984..4985 "]" + SEMI@4985..4986 ";" + WHITESPACE@4986..4991 "\n " + EXPR_VAR@4991..4994 + NAME@4991..4994 + IDENT@4991..4994 "std" + SUFFIX_INDEX@4994..4999 + DOT@4994..4995 "." + NAME@4995..4999 + IDENT@4995..4999 "join" + SUFFIX_APPLY@4999..5018 + ARGS_DESC@4999..5018 + L_PAREN@4999..5000 "(" + ARG@5000..5004 + EXPR@5000..5004 + EXPR_STRING@5000..5004 + STRING_SINGLE@5000..5004 "'\\n'" + COMMA@5004..5005 "," + WHITESPACE@5005..5006 " " + ARG@5006..5017 + EXPR@5006..5017 + EXPR_BINARY@5006..5017 + EXPR@5006..5010 + EXPR_VAR@5006..5010 + NAME@5006..5010 + IDENT@5006..5010 "vars" + WHITESPACE@5010..5011 " " + PLUS@5011..5012 "+" + WHITESPACE@5012..5013 " " + EXPR@5013..5017 + EXPR_ARRAY@5013..5017 + L_BRACK@5013..5014 "[" + EXPR@5014..5016 + EXPR_STRING@5014..5016 + STRING_SINGLE@5014..5016 "''" + R_BRACK@5016..5017 "]" + R_PAREN@5017..5018 ")" + COMMA@5018..5019 "," + WHITESPACE@5019..5023 "\n\n " + MEMBER_FIELD_METHOD@5023..5690 + FIELD_NAME_FIXED@5023..5040 + NAME@5023..5040 + IDENT@5023..5040 "manifestXmlJsonml" + PARAMS_DESC@5040..5047 + L_PAREN@5040..5041 "(" + PARAM@5041..5046 + DESTRUCT_FULL@5041..5046 + NAME@5041..5046 + IDENT@5041..5046 "value" + R_PAREN@5046..5047 ")" + COLONCOLON@5047..5049 "::" + WHITESPACE@5049..5054 "\n " + EXPR@5054..5690 + EXPR_IF_THEN_ELSE@5054..5690 + IF_KW@5054..5056 "if" + WHITESPACE@5056..5057 " " + EXPR@5057..5076 + EXPR_UNARY@5057..5076 + NOT@5057..5058 "!" + EXPR_VAR@5058..5061 + NAME@5058..5061 + IDENT@5058..5061 "std" + SUFFIX_INDEX@5061..5069 + DOT@5061..5062 "." + NAME@5062..5069 + IDENT@5062..5069 "isArray" + SUFFIX_APPLY@5069..5076 + ARGS_DESC@5069..5076 + L_PAREN@5069..5070 "(" + ARG@5070..5075 + EXPR@5070..5075 + EXPR_VAR@5070..5075 + NAME@5070..5075 + IDENT@5070..5075 "value" + R_PAREN@5075..5076 ")" + WHITESPACE@5076..5077 " " + THEN_KW@5077..5081 "then" + WHITESPACE@5081..5088 "\n " + TRUE_EXPR@5088..5156 + EXPR@5088..5156 + EXPR_ERROR@5088..5156 + ERROR_KW@5088..5093 "error" + WHITESPACE@5093..5094 " " + EXPR@5094..5156 + EXPR_BINARY@5094..5156 + EXPR@5094..5138 + EXPR_STRING@5094..5138 + STRING_SINGLE@5094..5138 "'Expected a JSONML va ..." + WHITESPACE@5138..5139 " " + MODULO@5139..5140 "%" + WHITESPACE@5140..5141 " " + EXPR@5141..5156 + EXPR_VAR@5141..5144 + NAME@5141..5144 + IDENT@5141..5144 "std" + SUFFIX_INDEX@5144..5149 + DOT@5144..5145 "." + NAME@5145..5149 + IDENT@5145..5149 "type" + SUFFIX_APPLY@5149..5156 + ARGS_DESC@5149..5156 + L_PAREN@5149..5150 "(" + ARG@5150..5155 + EXPR@5150..5155 + EXPR_VAR@5150..5155 + NAME@5150..5155 + IDENT@5150..5155 "value" + R_PAREN@5155..5156 ")" + WHITESPACE@5156..5161 "\n " + ELSE_KW@5161..5165 "else" + WHITESPACE@5165..5172 "\n " + FALSE_EXPR@5172..5690 + EXPR@5172..5690 + STMT_LOCAL@5172..5672 + LOCAL_KW@5172..5177 "local" + WHITESPACE@5177..5178 " " + BIND_FUNCTION@5178..5671 + NAME@5178..5181 + IDENT@5178..5181 "aux" + PARAMS_DESC@5181..5184 + L_PAREN@5181..5182 "(" + PARAM@5182..5183 + DESTRUCT_FULL@5182..5183 + NAME@5182..5183 + IDENT@5182..5183 "v" + R_PAREN@5183..5184 ")" + WHITESPACE@5184..5185 " " + ASSIGN@5185..5186 "=" + WHITESPACE@5186..5195 "\n " + EXPR@5195..5671 + EXPR_IF_THEN_ELSE@5195..5671 + IF_KW@5195..5197 "if" + WHITESPACE@5197..5198 " " + EXPR@5198..5213 + EXPR_VAR@5198..5201 + NAME@5198..5201 + IDENT@5198..5201 "std" + SUFFIX_INDEX@5201..5210 + DOT@5201..5202 "." + NAME@5202..5210 + IDENT@5202..5210 "isString" + SUFFIX_APPLY@5210..5213 + ARGS_DESC@5210..5213 + L_PAREN@5210..5211 "(" + ARG@5211..5212 + EXPR@5211..5212 + EXPR_VAR@5211..5212 + NAME@5211..5212 + IDENT@5211..5212 "v" + R_PAREN@5212..5213 ")" + WHITESPACE@5213..5214 " " + THEN_KW@5214..5218 "then" + WHITESPACE@5218..5229 "\n " + TRUE_EXPR@5229..5230 + EXPR@5229..5230 + EXPR_VAR@5229..5230 + NAME@5229..5230 + IDENT@5229..5230 "v" + WHITESPACE@5230..5239 "\n " + ELSE_KW@5239..5243 "else" + WHITESPACE@5243..5254 "\n " + FALSE_EXPR@5254..5671 + EXPR@5254..5671 + STMT_LOCAL@5254..5271 + LOCAL_KW@5254..5259 "local" + WHITESPACE@5259..5260 " " + BIND_DESTRUCT@5260..5270 + DESTRUCT_FULL@5260..5263 + NAME@5260..5263 + IDENT@5260..5263 "tag" + WHITESPACE@5263..5264 " " + ASSIGN@5264..5265 "=" + WHITESPACE@5265..5266 " " + EXPR@5266..5270 + EXPR_VAR@5266..5267 + NAME@5266..5267 + IDENT@5266..5267 "v" + SUFFIX_INDEX_EXPR@5267..5270 + L_BRACK@5267..5268 "[" + EXPR@5268..5269 + EXPR_NUMBER@5268..5269 + FLOAT@5268..5269 "0" + R_BRACK@5269..5270 "]" + SEMI@5270..5271 ";" + WHITESPACE@5271..5282 "\n " + STMT_LOCAL@5282..5340 + LOCAL_KW@5282..5287 "local" + WHITESPACE@5287..5288 " " + BIND_DESTRUCT@5288..5339 + DESTRUCT_FULL@5288..5297 + NAME@5288..5297 + IDENT@5288..5297 "has_attrs" + WHITESPACE@5297..5298 " " + ASSIGN@5298..5299 "=" + WHITESPACE@5299..5300 " " + EXPR@5300..5339 + EXPR_BINARY@5300..5339 + EXPR@5300..5317 + EXPR_BINARY@5300..5317 + EXPR@5300..5303 + EXPR_VAR@5300..5303 + NAME@5300..5303 + IDENT@5300..5303 "std" + SUFFIX_INDEX@5303..5310 + DOT@5303..5304 "." + NAME@5304..5310 + IDENT@5304..5310 "length" + SUFFIX_APPLY@5310..5313 + ARGS_DESC@5310..5313 + L_PAREN@5310..5311 "(" + ARG@5311..5312 + EXPR@5311..5312 + EXPR_VAR@5311..5312 + NAME@5311..5312 + IDENT@5311..5312 "v" + R_PAREN@5312..5313 ")" + WHITESPACE@5313..5314 " " + GT@5314..5315 ">" + WHITESPACE@5315..5316 " " + EXPR@5316..5317 + EXPR_NUMBER@5316..5317 + FLOAT@5316..5317 "1" + WHITESPACE@5317..5318 " " + AND@5318..5320 "&&" + WHITESPACE@5320..5321 " " + EXPR@5321..5339 + EXPR_VAR@5321..5324 + NAME@5321..5324 + IDENT@5321..5324 "std" + SUFFIX_INDEX@5324..5333 + DOT@5324..5325 "." + NAME@5325..5333 + IDENT@5325..5333 "isObject" + SUFFIX_APPLY@5333..5339 + ARGS_DESC@5333..5339 + L_PAREN@5333..5334 "(" + ARG@5334..5338 + EXPR@5334..5338 + EXPR_VAR@5334..5335 + NAME@5334..5335 + IDENT@5334..5335 "v" + SUFFIX_INDEX_EXPR@5335..5338 + L_BRACK@5335..5336 "[" + EXPR@5336..5337 + EXPR_NUMBER@5336..5337 + FLOAT@5336..5337 "1" + R_BRACK@5337..5338 "]" + R_PAREN@5338..5339 ")" + SEMI@5339..5340 ";" + WHITESPACE@5340..5351 "\n " + STMT_LOCAL@5351..5396 + LOCAL_KW@5351..5356 "local" + WHITESPACE@5356..5357 " " + BIND_DESTRUCT@5357..5395 + DESTRUCT_FULL@5357..5362 + NAME@5357..5362 + IDENT@5357..5362 "attrs" + WHITESPACE@5362..5363 " " + ASSIGN@5363..5364 "=" + WHITESPACE@5364..5365 " " + EXPR@5365..5395 + EXPR_IF_THEN_ELSE@5365..5395 + IF_KW@5365..5367 "if" + WHITESPACE@5367..5368 " " + EXPR@5368..5377 + EXPR_VAR@5368..5377 + NAME@5368..5377 + IDENT@5368..5377 "has_attrs" + WHITESPACE@5377..5378 " " + THEN_KW@5378..5382 "then" + WHITESPACE@5382..5383 " " + TRUE_EXPR@5383..5387 + EXPR@5383..5387 + EXPR_VAR@5383..5384 + NAME@5383..5384 + IDENT@5383..5384 "v" + SUFFIX_INDEX_EXPR@5384..5387 + L_BRACK@5384..5385 "[" + EXPR@5385..5386 + EXPR_NUMBER@5385..5386 + FLOAT@5385..5386 "1" + R_BRACK@5386..5387 "]" + WHITESPACE@5387..5388 " " + ELSE_KW@5388..5392 "else" + WHITESPACE@5392..5393 " " + FALSE_EXPR@5393..5395 + EXPR@5393..5395 + EXPR_OBJECT@5393..5395 + OBJ_BODY_MEMBER_LIST@5393..5395 + L_BRACE@5393..5394 "{" + R_BRACE@5394..5395 "}" + SEMI@5395..5396 ";" + WHITESPACE@5396..5407 "\n " + STMT_LOCAL@5407..5459 + LOCAL_KW@5407..5412 "local" + WHITESPACE@5412..5413 " " + BIND_DESTRUCT@5413..5458 + DESTRUCT_FULL@5413..5421 + NAME@5413..5421 + IDENT@5413..5421 "children" + WHITESPACE@5421..5422 " " + ASSIGN@5422..5423 "=" + WHITESPACE@5423..5424 " " + EXPR@5424..5458 + EXPR_IF_THEN_ELSE@5424..5458 + IF_KW@5424..5426 "if" + WHITESPACE@5426..5427 " " + EXPR@5427..5436 + EXPR_VAR@5427..5436 + NAME@5427..5436 + IDENT@5427..5436 "has_attrs" + WHITESPACE@5436..5437 " " + THEN_KW@5437..5441 "then" + WHITESPACE@5441..5442 " " + TRUE_EXPR@5442..5447 + EXPR@5442..5447 + EXPR_VAR@5442..5443 + NAME@5442..5443 + IDENT@5442..5443 "v" + SUFFIX_SLICE@5443..5447 + SLICE_DESC@5443..5447 + L_BRACK@5443..5444 "[" + EXPR@5444..5445 + EXPR_NUMBER@5444..5445 + FLOAT@5444..5445 "2" + COLON@5445..5446 ":" + R_BRACK@5446..5447 "]" + WHITESPACE@5447..5448 " " + ELSE_KW@5448..5452 "else" + WHITESPACE@5452..5453 " " + FALSE_EXPR@5453..5458 + EXPR@5453..5458 + EXPR_VAR@5453..5454 + NAME@5453..5454 + IDENT@5453..5454 "v" + SUFFIX_SLICE@5454..5458 + SLICE_DESC@5454..5458 + L_BRACK@5454..5455 "[" + EXPR@5455..5456 + EXPR_NUMBER@5455..5456 + FLOAT@5455..5456 "1" + COLON@5456..5457 ":" + R_BRACK@5457..5458 "]" + SEMI@5458..5459 ";" + WHITESPACE@5459..5470 "\n " + STMT_LOCAL@5470..5576 + LOCAL_KW@5470..5475 "local" + WHITESPACE@5475..5476 " " + BIND_DESTRUCT@5476..5575 + DESTRUCT_FULL@5476..5485 + NAME@5476..5485 + IDENT@5476..5485 "attrs_str" + WHITESPACE@5485..5486 " " + ASSIGN@5486..5487 "=" + WHITESPACE@5487..5500 "\n " + EXPR@5500..5575 + EXPR_VAR@5500..5503 + NAME@5500..5503 + IDENT@5500..5503 "std" + SUFFIX_INDEX@5503..5508 + DOT@5503..5504 "." + NAME@5504..5508 + IDENT@5504..5508 "join" + SUFFIX_APPLY@5508..5575 + ARGS_DESC@5508..5575 + L_PAREN@5508..5509 "(" + ARG@5509..5511 + EXPR@5509..5511 + EXPR_STRING@5509..5511 + STRING_SINGLE@5509..5511 "''" + COMMA@5511..5512 "," + WHITESPACE@5512..5513 " " + ARG@5513..5574 + EXPR@5513..5574 + EXPR_ARRAY_COMP@5513..5574 + L_BRACK@5513..5514 "[" + EXPR@5514..5540 + EXPR_BINARY@5514..5540 + EXPR@5514..5524 + EXPR_STRING@5514..5524 + STRING_SINGLE@5514..5524 "' %s=\"%s\"'" + WHITESPACE@5524..5525 " " + MODULO@5525..5526 "%" + WHITESPACE@5526..5527 " " + EXPR@5527..5540 + EXPR_ARRAY@5527..5540 + L_BRACK@5527..5528 "[" + EXPR@5528..5529 + EXPR_VAR@5528..5529 + NAME@5528..5529 + IDENT@5528..5529 "k" + COMMA@5529..5530 "," + WHITESPACE@5530..5531 " " + EXPR@5531..5539 + EXPR_VAR@5531..5536 + NAME@5531..5536 + IDENT@5531..5536 "attrs" + SUFFIX_INDEX_EXPR@5536..5539 + L_BRACK@5536..5537 "[" + EXPR@5537..5538 + EXPR_VAR@5537..5538 + NAME@5537..5538 + IDENT@5537..5538 "k" + R_BRACK@5538..5539 "]" + R_BRACK@5539..5540 "]" + WHITESPACE@5540..5541 " " + FOR_SPEC@5541..5573 + FOR_KW@5541..5544 "for" + WHITESPACE@5544..5545 " " + DESTRUCT_FULL@5545..5546 + NAME@5545..5546 + IDENT@5545..5546 "k" + WHITESPACE@5546..5547 " " + IN_KW@5547..5549 "in" + WHITESPACE@5549..5550 " " + EXPR@5550..5573 + EXPR_VAR@5550..5553 + NAME@5550..5553 + IDENT@5550..5553 "std" + SUFFIX_INDEX@5553..5566 + DOT@5553..5554 "." + NAME@5554..5566 + IDENT@5554..5566 "objectFields" + SUFFIX_APPLY@5566..5573 + ARGS_DESC@5566..5573 + L_PAREN@5566..5567 "(" + ARG@5567..5572 + EXPR@5567..5572 + EXPR_VAR@5567..5572 + NAME@5567..5572 + IDENT@5567..5572 "attrs" + R_PAREN@5572..5573 ")" + R_BRACK@5573..5574 "]" + R_PAREN@5574..5575 ")" + SEMI@5575..5576 ";" + WHITESPACE@5576..5587 "\n " + EXPR_VAR@5587..5590 + NAME@5587..5590 + IDENT@5587..5590 "std" + SUFFIX_INDEX@5590..5599 + DOT@5590..5591 "." + NAME@5591..5599 + IDENT@5591..5599 "deepJoin" + SUFFIX_APPLY@5599..5671 + ARGS_DESC@5599..5671 + L_PAREN@5599..5600 "(" + ARG@5600..5670 + EXPR@5600..5670 + EXPR_ARRAY@5600..5670 + L_BRACK@5600..5601 "[" + EXPR@5601..5604 + EXPR_STRING@5601..5604 + STRING_SINGLE@5601..5604 "'<'" + COMMA@5604..5605 "," + WHITESPACE@5605..5606 " " + EXPR@5606..5609 + EXPR_VAR@5606..5609 + NAME@5606..5609 + IDENT@5606..5609 "tag" + COMMA@5609..5610 "," + WHITESPACE@5610..5611 " " + EXPR@5611..5620 + EXPR_VAR@5611..5620 + NAME@5611..5620 + IDENT@5611..5620 "attrs_str" + COMMA@5620..5621 "," + WHITESPACE@5621..5622 " " + EXPR@5622..5625 + EXPR_STRING@5622..5625 + STRING_SINGLE@5622..5625 "'>'" + COMMA@5625..5626 "," + WHITESPACE@5626..5627 " " + EXPR@5627..5653 + EXPR_ARRAY_COMP@5627..5653 + L_BRACK@5627..5628 "[" + EXPR@5628..5634 + EXPR_VAR@5628..5631 + NAME@5628..5631 + IDENT@5628..5631 "aux" + SUFFIX_APPLY@5631..5634 + ARGS_DESC@5631..5634 + L_PAREN@5631..5632 "(" + ARG@5632..5633 + EXPR@5632..5633 + EXPR_VAR@5632..5633 + NAME@5632..5633 + IDENT@5632..5633 "x" + R_PAREN@5633..5634 ")" + WHITESPACE@5634..5635 " " + FOR_SPEC@5635..5652 + FOR_KW@5635..5638 "for" + WHITESPACE@5638..5639 " " + DESTRUCT_FULL@5639..5640 + NAME@5639..5640 + IDENT@5639..5640 "x" + WHITESPACE@5640..5641 " " + IN_KW@5641..5643 "in" + WHITESPACE@5643..5644 " " + EXPR@5644..5652 + EXPR_VAR@5644..5652 + NAME@5644..5652 + IDENT@5644..5652 "children" + R_BRACK@5652..5653 "]" + COMMA@5653..5654 "," + WHITESPACE@5654..5655 " " + EXPR@5655..5659 + EXPR_STRING@5655..5659 + STRING_SINGLE@5655..5659 "''" + R_BRACK@5669..5670 "]" + R_PAREN@5670..5671 ")" + SEMI@5671..5672 ";" + WHITESPACE@5672..5680 "\n\n " + EXPR_VAR@5680..5683 + NAME@5680..5683 + IDENT@5680..5683 "aux" + SUFFIX_APPLY@5683..5690 + ARGS_DESC@5683..5690 + L_PAREN@5683..5684 "(" + ARG@5684..5689 + EXPR@5684..5689 + EXPR_VAR@5684..5689 + NAME@5684..5689 + IDENT@5684..5689 "value" + R_PAREN@5689..5690 ")" + COMMA@5690..5691 "," + WHITESPACE@5691..5695 "\n\n " + MEMBER_FIELD_METHOD@5695..6483 + FIELD_NAME_FIXED@5695..5705 + NAME@5695..5705 + IDENT@5695..5705 "mergePatch" + PARAMS_DESC@5705..5720 + L_PAREN@5705..5706 "(" + PARAM@5706..5712 + DESTRUCT_FULL@5706..5712 + NAME@5706..5712 + IDENT@5706..5712 "target" + COMMA@5712..5713 "," + WHITESPACE@5713..5714 " " + PARAM@5714..5719 + DESTRUCT_FULL@5714..5719 + NAME@5714..5719 + IDENT@5714..5719 "patch" + R_PAREN@5719..5720 ")" + COLONCOLON@5720..5722 "::" + WHITESPACE@5722..5727 "\n " + EXPR@5727..6483 + EXPR_IF_THEN_ELSE@5727..6483 + IF_KW@5727..5729 "if" + WHITESPACE@5729..5730 " " + EXPR@5730..5749 + EXPR_VAR@5730..5733 + NAME@5730..5733 + IDENT@5730..5733 "std" + SUFFIX_INDEX@5733..5742 + DOT@5733..5734 "." + NAME@5734..5742 + IDENT@5734..5742 "isObject" + SUFFIX_APPLY@5742..5749 + ARGS_DESC@5742..5749 + L_PAREN@5742..5743 "(" + ARG@5743..5748 + EXPR@5743..5748 + EXPR_VAR@5743..5748 + NAME@5743..5748 + IDENT@5743..5748 "patch" + R_PAREN@5748..5749 ")" + WHITESPACE@5749..5750 " " + THEN_KW@5750..5754 "then" + WHITESPACE@5754..5761 "\n " + TRUE_EXPR@5761..6462 + EXPR@5761..6462 + STMT_LOCAL@5761..5835 + LOCAL_KW@5761..5766 "local" + WHITESPACE@5766..5767 " " + BIND_DESTRUCT@5767..5834 + DESTRUCT_FULL@5767..5780 + NAME@5767..5780 + IDENT@5767..5780 "target_object" + WHITESPACE@5780..5781 " " + ASSIGN@5781..5782 "=" + WHITESPACE@5782..5791 "\n " + EXPR@5791..5834 + EXPR_IF_THEN_ELSE@5791..5834 + IF_KW@5791..5793 "if" + WHITESPACE@5793..5794 " " + EXPR@5794..5814 + EXPR_VAR@5794..5797 + NAME@5794..5797 + IDENT@5794..5797 "std" + SUFFIX_INDEX@5797..5806 + DOT@5797..5798 "." + NAME@5798..5806 + IDENT@5798..5806 "isObject" + SUFFIX_APPLY@5806..5814 + ARGS_DESC@5806..5814 + L_PAREN@5806..5807 "(" + ARG@5807..5813 + EXPR@5807..5813 + EXPR_VAR@5807..5813 + NAME@5807..5813 + IDENT@5807..5813 "target" + R_PAREN@5813..5814 ")" + WHITESPACE@5814..5815 " " + THEN_KW@5815..5819 "then" + WHITESPACE@5819..5820 " " + TRUE_EXPR@5820..5826 + EXPR@5820..5826 + EXPR_VAR@5820..5826 + NAME@5820..5826 + IDENT@5820..5826 "target" + WHITESPACE@5826..5827 " " + ELSE_KW@5827..5831 "else" + WHITESPACE@5831..5832 " " + FALSE_EXPR@5832..5834 + EXPR@5832..5834 + EXPR_OBJECT@5832..5834 + OBJ_BODY_MEMBER_LIST@5832..5834 + L_BRACE@5832..5833 "{" + R_BRACE@5833..5834 "}" + SEMI@5834..5835 ";" + WHITESPACE@5835..5843 "\n\n " + STMT_LOCAL@5843..5949 + LOCAL_KW@5843..5848 "local" + WHITESPACE@5848..5849 " " + BIND_DESTRUCT@5849..5948 + DESTRUCT_FULL@5849..5862 + NAME@5849..5862 + IDENT@5849..5862 "target_fields" + WHITESPACE@5862..5863 " " + ASSIGN@5863..5864 "=" + WHITESPACE@5864..5873 "\n " + EXPR@5873..5948 + EXPR_IF_THEN_ELSE@5873..5948 + IF_KW@5873..5875 "if" + WHITESPACE@5875..5876 " " + EXPR@5876..5903 + EXPR_VAR@5876..5879 + NAME@5876..5879 + IDENT@5876..5879 "std" + SUFFIX_INDEX@5879..5888 + DOT@5879..5880 "." + NAME@5880..5888 + IDENT@5880..5888 "isObject" + SUFFIX_APPLY@5888..5903 + ARGS_DESC@5888..5903 + L_PAREN@5888..5889 "(" + ARG@5889..5902 + EXPR@5889..5902 + EXPR_VAR@5889..5902 + NAME@5889..5902 + IDENT@5889..5902 "target_object" + R_PAREN@5902..5903 ")" + WHITESPACE@5903..5904 " " + THEN_KW@5904..5908 "then" + WHITESPACE@5908..5909 " " + TRUE_EXPR@5909..5940 + EXPR@5909..5940 + EXPR_VAR@5909..5912 + NAME@5909..5912 + IDENT@5909..5912 "std" + SUFFIX_INDEX@5912..5925 + DOT@5912..5913 "." + NAME@5913..5925 + IDENT@5913..5925 "objectFields" + SUFFIX_APPLY@5925..5940 + ARGS_DESC@5925..5940 + L_PAREN@5925..5926 "(" + ARG@5926..5939 + EXPR@5926..5939 + EXPR_VAR@5926..5939 + NAME@5926..5939 + IDENT@5926..5939 "target_object" + R_PAREN@5939..5940 ")" + WHITESPACE@5940..5941 " " + ELSE_KW@5941..5945 "else" + WHITESPACE@5945..5946 " " + FALSE_EXPR@5946..5948 + EXPR@5946..5948 + EXPR_ARRAY@5946..5948 + L_BRACK@5946..5947 "[" + R_BRACK@5947..5948 "]" + SEMI@5948..5949 ";" + WHITESPACE@5949..5957 "\n\n " + STMT_LOCAL@5957..6034 + LOCAL_KW@5957..5962 "local" + WHITESPACE@5962..5963 " " + BIND_DESTRUCT@5963..6033 + DESTRUCT_FULL@5963..5974 + NAME@5963..5974 + IDENT@5963..5974 "null_fields" + WHITESPACE@5974..5975 " " + ASSIGN@5975..5976 "=" + WHITESPACE@5976..5977 " " + EXPR@5977..6033 + EXPR_ARRAY_COMP@5977..6033 + L_BRACK@5977..5978 "[" + EXPR@5978..5979 + EXPR_VAR@5978..5979 + NAME@5978..5979 + IDENT@5978..5979 "k" + WHITESPACE@5979..5980 " " + FOR_SPEC@5980..6012 + FOR_KW@5980..5983 "for" + WHITESPACE@5983..5984 " " + DESTRUCT_FULL@5984..5985 + NAME@5984..5985 + IDENT@5984..5985 "k" + WHITESPACE@5985..5986 " " + IN_KW@5986..5988 "in" + WHITESPACE@5988..5989 " " + EXPR@5989..6012 + EXPR_VAR@5989..5992 + NAME@5989..5992 + IDENT@5989..5992 "std" + SUFFIX_INDEX@5992..6005 + DOT@5992..5993 "." + NAME@5993..6005 + IDENT@5993..6005 "objectFields" + SUFFIX_APPLY@6005..6012 + ARGS_DESC@6005..6012 + L_PAREN@6005..6006 "(" + ARG@6006..6011 + EXPR@6006..6011 + EXPR_VAR@6006..6011 + NAME@6006..6011 + IDENT@6006..6011 "patch" + R_PAREN@6011..6012 ")" + WHITESPACE@6012..6013 " " + IF_SPEC@6013..6032 + IF_KW@6013..6015 "if" + WHITESPACE@6015..6016 " " + EXPR@6016..6032 + EXPR_BINARY@6016..6032 + EXPR@6016..6021 + EXPR_VAR@6016..6021 + NAME@6016..6021 + IDENT@6016..6021 "patch" + SUFFIX_INDEX_EXPR@6021..6024 + L_BRACK@6021..6022 "[" + EXPR@6022..6023 + EXPR_VAR@6022..6023 + NAME@6022..6023 + IDENT@6022..6023 "k" + R_BRACK@6023..6024 "]" + WHITESPACE@6024..6025 " " + EQ@6025..6027 "==" + WHITESPACE@6027..6028 " " + EXPR@6028..6032 + EXPR_LITERAL@6028..6032 + NULL_KW@6028..6032 "null" + R_BRACK@6032..6033 "]" + SEMI@6033..6034 ";" + WHITESPACE@6034..6041 "\n " + STMT_LOCAL@6041..6114 + LOCAL_KW@6041..6046 "local" + WHITESPACE@6046..6047 " " + BIND_DESTRUCT@6047..6113 + DESTRUCT_FULL@6047..6058 + NAME@6047..6058 + IDENT@6047..6058 "both_fields" + WHITESPACE@6058..6059 " " + ASSIGN@6059..6060 "=" + WHITESPACE@6060..6061 " " + EXPR@6061..6113 + EXPR_VAR@6061..6064 + NAME@6061..6064 + IDENT@6061..6064 "std" + SUFFIX_INDEX@6064..6073 + DOT@6064..6065 "." + NAME@6065..6073 + IDENT@6065..6073 "setUnion" + SUFFIX_APPLY@6073..6113 + ARGS_DESC@6073..6113 + L_PAREN@6073..6074 "(" + ARG@6074..6087 + EXPR@6074..6087 + EXPR_VAR@6074..6087 + NAME@6074..6087 + IDENT@6074..6087 "target_fields" + COMMA@6087..6088 "," + WHITESPACE@6088..6089 " " + ARG@6089..6112 + EXPR@6089..6112 + EXPR_VAR@6089..6092 + NAME@6089..6092 + IDENT@6089..6092 "std" + SUFFIX_INDEX@6092..6105 + DOT@6092..6093 "." + NAME@6093..6105 + IDENT@6093..6105 "objectFields" + SUFFIX_APPLY@6105..6112 + ARGS_DESC@6105..6112 + L_PAREN@6105..6106 "(" + ARG@6106..6111 + EXPR@6106..6111 + EXPR_VAR@6106..6111 + NAME@6106..6111 + IDENT@6106..6111 "patch" + R_PAREN@6111..6112 ")" + R_PAREN@6112..6113 ")" + SEMI@6113..6114 ";" + WHITESPACE@6114..6122 "\n\n " + EXPR_OBJECT@6122..6462 + OBJ_BODY_COMP@6122..6462 + L_BRACE@6122..6123 "{" + WHITESPACE@6123..6132 "\n " + MEMBER_FIELD_NORMAL@6132..6399 + FIELD_NAME_DYNAMIC@6132..6135 + L_BRACK@6132..6133 "[" + EXPR@6133..6134 + EXPR_VAR@6133..6134 + NAME@6133..6134 + IDENT@6133..6134 "k" + R_BRACK@6134..6135 "]" + COLON@6135..6136 ":" + WHITESPACE@6136..6147 "\n " + EXPR@6147..6399 + EXPR_IF_THEN_ELSE@6147..6399 + IF_KW@6147..6149 "if" + WHITESPACE@6149..6150 " " + EXPR@6150..6174 + EXPR_UNARY@6150..6174 + NOT@6150..6151 "!" + EXPR_VAR@6151..6154 + NAME@6151..6154 + IDENT@6151..6154 "std" + SUFFIX_INDEX@6154..6164 + DOT@6154..6155 "." + NAME@6155..6164 + IDENT@6155..6164 "objectHas" + SUFFIX_APPLY@6164..6174 + ARGS_DESC@6164..6174 + L_PAREN@6164..6165 "(" + ARG@6165..6170 + EXPR@6165..6170 + EXPR_VAR@6165..6170 + NAME@6165..6170 + IDENT@6165..6170 "patch" + COMMA@6170..6171 "," + WHITESPACE@6171..6172 " " + ARG@6172..6173 + EXPR@6172..6173 + EXPR_VAR@6172..6173 + NAME@6172..6173 + IDENT@6172..6173 "k" + R_PAREN@6173..6174 ")" + WHITESPACE@6174..6175 " " + THEN_KW@6175..6179 "then" + WHITESPACE@6179..6192 "\n " + TRUE_EXPR@6192..6208 + EXPR@6192..6208 + EXPR_VAR@6192..6205 + NAME@6192..6205 + IDENT@6192..6205 "target_object" + SUFFIX_INDEX_EXPR@6205..6208 + L_BRACK@6205..6206 "[" + EXPR@6206..6207 + EXPR_VAR@6206..6207 + NAME@6206..6207 + IDENT@6206..6207 "k" + R_BRACK@6207..6208 "]" + WHITESPACE@6208..6219 "\n " + ELSE_KW@6219..6223 "else" + WHITESPACE@6223..6224 " " + FALSE_EXPR@6224..6399 + EXPR@6224..6399 + EXPR_IF_THEN_ELSE@6224..6399 + IF_KW@6224..6226 "if" + WHITESPACE@6226..6227 " " + EXPR@6227..6259 + EXPR_UNARY@6227..6259 + NOT@6227..6228 "!" + EXPR_VAR@6228..6231 + NAME@6228..6231 + IDENT@6228..6231 "std" + SUFFIX_INDEX@6231..6241 + DOT@6231..6232 "." + NAME@6232..6241 + IDENT@6232..6241 "objectHas" + SUFFIX_APPLY@6241..6259 + ARGS_DESC@6241..6259 + L_PAREN@6241..6242 "(" + ARG@6242..6255 + EXPR@6242..6255 + EXPR_VAR@6242..6255 + NAME@6242..6255 + IDENT@6242..6255 "target_object" + COMMA@6255..6256 "," + WHITESPACE@6256..6257 " " + ARG@6257..6258 + EXPR@6257..6258 + EXPR_VAR@6257..6258 + NAME@6257..6258 + IDENT@6257..6258 "k" + R_PAREN@6258..6259 ")" + WHITESPACE@6259..6260 " " + THEN_KW@6260..6264 "then" + WHITESPACE@6264..6277 "\n " + TRUE_EXPR@6277..6318 + EXPR@6277..6318 + EXPR_VAR@6277..6280 + NAME@6277..6280 + IDENT@6277..6280 "std" + SUFFIX_INDEX@6280..6291 + DOT@6280..6281 "." + NAME@6281..6291 + IDENT@6281..6291 "mergePatch" + SUFFIX_APPLY@6291..6318 + ARGS_DESC@6291..6318 + L_PAREN@6291..6292 "(" + ARG@6292..6296 + EXPR@6292..6296 + EXPR_LITERAL@6292..6296 + NULL_KW@6292..6296 "null" + COMMA@6296..6297 "," + WHITESPACE@6297..6298 " " + ARG@6298..6306 + EXPR@6298..6306 + EXPR_VAR@6298..6303 + NAME@6298..6303 + IDENT@6298..6303 "patch" + SUFFIX_INDEX_EXPR@6303..6306 + L_BRACK@6303..6304 "[" + EXPR@6304..6305 + EXPR_VAR@6304..6305 + NAME@6304..6305 + IDENT@6304..6305 "k" + R_BRACK@6305..6306 "]" + R_PAREN@6306..6307 ")" + WHITESPACE@6307..6308 " " + TAILSTRICT_KW@6308..6318 "tailstrict" + WHITESPACE@6318..6329 "\n " + ELSE_KW@6329..6333 "else" + WHITESPACE@6333..6346 "\n " + FALSE_EXPR@6346..6399 + EXPR@6346..6399 + EXPR_VAR@6346..6349 + NAME@6346..6349 + IDENT@6346..6349 "std" + SUFFIX_INDEX@6349..6360 + DOT@6349..6350 "." + NAME@6350..6360 + IDENT@6350..6360 "mergePatch" + SUFFIX_APPLY@6360..6399 + ARGS_DESC@6360..6399 + L_PAREN@6360..6361 "(" + ARG@6361..6377 + EXPR@6361..6377 + EXPR_VAR@6361..6374 + NAME@6361..6374 + IDENT@6361..6374 "target_object" + SUFFIX_INDEX_EXPR@6374..6377 + L_BRACK@6374..6375 "[" + EXPR@6375..6376 + EXPR_VAR@6375..6376 + NAME@6375..6376 + IDENT@6375..6376 "k" + R_BRACK@6376..6377 "]" + COMMA@6377..6378 "," + WHITESPACE@6378..6379 " " + ARG@6379..6387 + EXPR@6379..6387 + EXPR_VAR@6379..6384 + NAME@6379..6384 + IDENT@6379..6384 "patch" + SUFFIX_INDEX_EXPR@6384..6387 + L_BRACK@6384..6385 "[" + EXPR@6385..6386 + EXPR_VAR@6385..6386 + NAME@6385..6386 + IDENT@6385..6386 "k" + R_BRACK@6386..6387 "]" + R_PAREN@6387..6388 ")" + WHITESPACE@6388..6389 " " + TAILSTRICT_KW@6389..6399 "tailstrict" + WHITESPACE@6399..6408 "\n " + FOR_SPEC@6408..6454 + FOR_KW@6408..6411 "for" + WHITESPACE@6411..6412 " " + DESTRUCT_FULL@6412..6413 + NAME@6412..6413 + IDENT@6412..6413 "k" + WHITESPACE@6413..6414 " " + IN_KW@6414..6416 "in" + WHITESPACE@6416..6417 " " + EXPR@6417..6454 + EXPR_VAR@6417..6420 + NAME@6417..6420 + IDENT@6417..6420 "std" + SUFFIX_INDEX@6420..6428 + DOT@6420..6421 "." + NAME@6421..6428 + IDENT@6421..6428 "setDiff" + SUFFIX_APPLY@6428..6454 + ARGS_DESC@6428..6454 + L_PAREN@6428..6429 "(" + ARG@6429..6440 + EXPR@6429..6440 + EXPR_VAR@6429..6440 + NAME@6429..6440 + IDENT@6429..6440 "both_fields" + COMMA@6440..6441 "," + WHITESPACE@6441..6442 " " + ARG@6442..6453 + EXPR@6442..6453 + EXPR_VAR@6442..6453 + NAME@6442..6453 + IDENT@6442..6453 "null_fields" + R_PAREN@6453..6454 ")" + WHITESPACE@6454..6461 "\n " + R_BRACE@6461..6462 "}" + WHITESPACE@6462..6467 "\n " + ELSE_KW@6467..6471 "else" + WHITESPACE@6471..6478 "\n " + FALSE_EXPR@6478..6483 + EXPR@6478..6483 + EXPR_VAR@6478..6483 + NAME@6478..6483 + IDENT@6478..6483 "patch" + COMMA@6483..6484 "," + WHITESPACE@6484..6488 "\n\n " + MEMBER_FIELD_METHOD@6488..6594 + FIELD_NAME_FIXED@6488..6491 + NAME@6488..6491 + IDENT@6488..6491 "get" + PARAMS_DESC@6491..6528 + L_PAREN@6491..6492 "(" + PARAM@6492..6493 + DESTRUCT_FULL@6492..6493 + NAME@6492..6493 + IDENT@6492..6493 "o" + COMMA@6493..6494 "," + WHITESPACE@6494..6495 " " + PARAM@6495..6496 + DESTRUCT_FULL@6495..6496 + NAME@6495..6496 + IDENT@6495..6496 "f" + COMMA@6496..6497 "," + WHITESPACE@6497..6498 " " + PARAM@6498..6510 + DESTRUCT_FULL@6498..6505 + NAME@6498..6505 + IDENT@6498..6505 "default" + ASSIGN@6505..6506 "=" + EXPR@6506..6510 + EXPR_LITERAL@6506..6510 + NULL_KW@6506..6510 "null" + COMMA@6510..6511 "," + WHITESPACE@6511..6512 " " + PARAM@6512..6527 + DESTRUCT_FULL@6512..6522 + NAME@6512..6522 + IDENT@6512..6522 "inc_hidden" + ASSIGN@6522..6523 "=" + EXPR@6523..6527 + EXPR_LITERAL@6523..6527 + TRUE_KW@6523..6527 "true" + R_PAREN@6527..6528 ")" + COLONCOLON@6528..6530 "::" + WHITESPACE@6530..6535 "\n " + EXPR@6535..6594 + EXPR_IF_THEN_ELSE@6535..6594 + IF_KW@6535..6537 "if" + WHITESPACE@6537..6538 " " + EXPR@6538..6571 + EXPR_VAR@6538..6541 + NAME@6538..6541 + IDENT@6538..6541 "std" + SUFFIX_INDEX@6541..6553 + DOT@6541..6542 "." + NAME@6542..6553 + IDENT@6542..6553 "objectHasEx" + SUFFIX_APPLY@6553..6571 + ARGS_DESC@6553..6571 + L_PAREN@6553..6554 "(" + ARG@6554..6555 + EXPR@6554..6555 + EXPR_VAR@6554..6555 + NAME@6554..6555 + IDENT@6554..6555 "o" + COMMA@6555..6556 "," + WHITESPACE@6556..6557 " " + ARG@6557..6558 + EXPR@6557..6558 + EXPR_VAR@6557..6558 + NAME@6557..6558 + IDENT@6557..6558 "f" + COMMA@6558..6559 "," + WHITESPACE@6559..6560 " " + ARG@6560..6570 + EXPR@6560..6570 + EXPR_VAR@6560..6570 + NAME@6560..6570 + IDENT@6560..6570 "inc_hidden" + R_PAREN@6570..6571 ")" + WHITESPACE@6571..6572 " " + THEN_KW@6572..6576 "then" + WHITESPACE@6576..6577 " " + TRUE_EXPR@6577..6581 + EXPR@6577..6581 + EXPR_VAR@6577..6578 + NAME@6577..6578 + IDENT@6577..6578 "o" + SUFFIX_INDEX_EXPR@6578..6581 + L_BRACK@6578..6579 "[" + EXPR@6579..6580 + EXPR_VAR@6579..6580 + NAME@6579..6580 + IDENT@6579..6580 "f" + R_BRACK@6580..6581 "]" + WHITESPACE@6581..6582 " " + ELSE_KW@6582..6586 "else" + WHITESPACE@6586..6587 " " + FALSE_EXPR@6587..6594 + EXPR@6587..6594 + EXPR_VAR@6587..6594 + NAME@6587..6594 + IDENT@6587..6594 "default" + COMMA@6594..6595 "," + WHITESPACE@6595..6599 "\n\n " + MEMBER_FIELD_METHOD@6599..6733 + FIELD_NAME_FIXED@6599..6610 + NAME@6599..6610 + IDENT@6599..6610 "resolvePath" + PARAMS_DESC@6610..6616 + L_PAREN@6610..6611 "(" + PARAM@6611..6612 + DESTRUCT_FULL@6611..6612 + NAME@6611..6612 + IDENT@6611..6612 "f" + COMMA@6612..6613 "," + WHITESPACE@6613..6614 " " + PARAM@6614..6615 + DESTRUCT_FULL@6614..6615 + NAME@6614..6615 + IDENT@6614..6615 "r" + R_PAREN@6615..6616 ")" + COLONCOLON@6616..6618 "::" + WHITESPACE@6618..6623 "\n " + EXPR@6623..6733 + STMT_LOCAL@6623..6653 + LOCAL_KW@6623..6628 "local" + WHITESPACE@6628..6629 " " + BIND_DESTRUCT@6629..6652 + DESTRUCT_FULL@6629..6632 + NAME@6629..6632 + IDENT@6629..6632 "arr" + WHITESPACE@6632..6633 " " + ASSIGN@6633..6634 "=" + WHITESPACE@6634..6635 " " + EXPR@6635..6652 + EXPR_VAR@6635..6638 + NAME@6635..6638 + IDENT@6635..6638 "std" + SUFFIX_INDEX@6638..6644 + DOT@6638..6639 "." + NAME@6639..6644 + IDENT@6639..6644 "split" + SUFFIX_APPLY@6644..6652 + ARGS_DESC@6644..6652 + L_PAREN@6644..6645 "(" + ARG@6645..6646 + EXPR@6645..6646 + EXPR_VAR@6645..6646 + NAME@6645..6646 + IDENT@6645..6646 "f" + COMMA@6646..6647 "," + WHITESPACE@6647..6648 " " + ARG@6648..6651 + EXPR@6648..6651 + EXPR_STRING@6648..6651 + STRING_SINGLE@6648..6651 "'/'" + R_PAREN@6651..6652 ")" + SEMI@6652..6653 ";" + WHITESPACE@6653..6658 "\n " + EXPR_VAR@6658..6661 + NAME@6658..6661 + IDENT@6658..6661 "std" + SUFFIX_INDEX@6661..6666 + DOT@6661..6662 "." + NAME@6662..6666 + IDENT@6662..6666 "join" + SUFFIX_APPLY@6666..6733 + ARGS_DESC@6666..6733 + L_PAREN@6666..6667 "(" + ARG@6667..6670 + EXPR@6667..6670 + EXPR_STRING@6667..6670 + STRING_SINGLE@6667..6670 "'/'" + COMMA@6670..6671 "," + WHITESPACE@6671..6672 " " + ARG@6672..6732 + EXPR@6672..6732 + EXPR_BINARY@6672..6732 + EXPR@6672..6675 + EXPR_VAR@6672..6675 + NAME@6672..6675 + IDENT@6672..6675 "std" + SUFFIX_INDEX@6675..6685 + DOT@6675..6676 "." + NAME@6676..6685 + IDENT@6676..6685 "makeArray" + SUFFIX_APPLY@6685..6726 + ARGS_DESC@6685..6726 + L_PAREN@6685..6686 "(" + ARG@6686..6705 + EXPR@6686..6705 + EXPR_BINARY@6686..6705 + EXPR@6686..6689 + EXPR_VAR@6686..6689 + NAME@6686..6689 + IDENT@6686..6689 "std" + SUFFIX_INDEX@6689..6696 + DOT@6689..6690 "." + NAME@6690..6696 + IDENT@6690..6696 "length" + SUFFIX_APPLY@6696..6701 + ARGS_DESC@6696..6701 + L_PAREN@6696..6697 "(" + ARG@6697..6700 + EXPR@6697..6700 + EXPR_VAR@6697..6700 + NAME@6697..6700 + IDENT@6697..6700 "arr" + R_PAREN@6700..6701 ")" WHITESPACE@6701..6702 " " - PLUS@6702..6703 "+" + MINUS@6702..6703 "-" WHITESPACE@6703..6704 " " - EXPR_ARRAY@6704..6710 - L_BRACK@6704..6705 "[" - EXPR_INDEX_EXPR@6705..6709 - LHS_EXPR@6705..6706 - EXPR_VAR@6705..6706 - NAME@6705..6706 - IDENT@6705..6706 "a" - L_BRACK@6706..6707 "[" - EXPR_VAR@6707..6708 - NAME@6707..6708 - IDENT@6707..6708 "i" - R_BRACK@6708..6709 "]" - R_BRACK@6709..6710 "]" - R_PAREN@6710..6711 ")" - WHITESPACE@6711..6712 " " - TAILSTRICT_KW@6712..6722 "tailstrict" - WHITESPACE@6722..6731 "\n " - ELSE_KW@6731..6735 "else" - WHITESPACE@6735..6736 " " - FALSE_EXPR@6736..6874 - EXPR_IF_THEN_ELSE@6736..6874 - IF_KW@6736..6738 "if" - WHITESPACE@6738..6739 " " - EXPR_BINARY@6739..6746 - LHS_EXPR@6739..6741 - EXPR_VAR@6739..6741 - NAME@6739..6741 - IDENT@6739..6741 "ak" - WHITESPACE@6741..6742 " " - LT@6742..6743 "<" - WHITESPACE@6743..6744 " " - EXPR_VAR@6744..6746 - NAME@6744..6746 - IDENT@6744..6746 "bk" - WHITESPACE@6746..6747 " " - THEN_KW@6747..6751 "then" - WHITESPACE@6751..6762 "\n " - TRUE_EXPR@6762..6806 - EXPR_APPLY@6762..6806 - EXPR_VAR@6762..6765 - NAME@6762..6765 - IDENT@6762..6765 "aux" - ARGS_DESC@6765..6806 - L_PAREN@6765..6766 "(" - ARG@6766..6767 - EXPR_VAR@6766..6767 - NAME@6766..6767 - IDENT@6766..6767 "a" - COMMA@6767..6768 "," - WHITESPACE@6768..6769 " " - ARG@6769..6770 - EXPR_VAR@6769..6770 - NAME@6769..6770 - IDENT@6769..6770 "b" - COMMA@6770..6771 "," - WHITESPACE@6771..6772 " " - ARG@6772..6777 - EXPR_BINARY@6772..6777 - LHS_EXPR@6772..6773 - EXPR_VAR@6772..6773 - NAME@6772..6773 - IDENT@6772..6773 "i" - WHITESPACE@6773..6774 " " - PLUS@6774..6775 "+" - WHITESPACE@6775..6776 " " - EXPR_NUMBER@6776..6777 - FLOAT@6776..6777 "1" - COMMA@6777..6778 "," - WHITESPACE@6778..6779 " " - ARG@6779..6780 - EXPR_VAR@6779..6780 - NAME@6779..6780 - IDENT@6779..6780 "j" - COMMA@6780..6781 "," - WHITESPACE@6781..6782 " " - ARG@6782..6794 - EXPR_BINARY@6782..6794 - LHS_EXPR@6782..6785 - EXPR_VAR@6782..6785 - NAME@6782..6785 - IDENT@6782..6785 "acc" - WHITESPACE@6785..6786 " " - PLUS@6786..6787 "+" - WHITESPACE@6787..6788 " " - EXPR_ARRAY@6788..6794 - L_BRACK@6788..6789 "[" - EXPR_INDEX_EXPR@6789..6793 - LHS_EXPR@6789..6790 - EXPR_VAR@6789..6790 - NAME@6789..6790 - IDENT@6789..6790 "a" - L_BRACK@6790..6791 "[" - EXPR_VAR@6791..6792 - NAME@6791..6792 - IDENT@6791..6792 "i" - R_BRACK@6792..6793 "]" - R_BRACK@6793..6794 "]" - R_PAREN@6794..6795 ")" - WHITESPACE@6795..6796 " " - TAILSTRICT_KW@6796..6806 "tailstrict" - WHITESPACE@6806..6815 "\n " - ELSE_KW@6815..6819 "else" - WHITESPACE@6819..6830 "\n " - FALSE_EXPR@6830..6874 - EXPR_APPLY@6830..6874 - EXPR_VAR@6830..6833 - NAME@6830..6833 - IDENT@6830..6833 "aux" - ARGS_DESC@6833..6874 - L_PAREN@6833..6834 "(" - ARG@6834..6835 - EXPR_VAR@6834..6835 - NAME@6834..6835 - IDENT@6834..6835 "a" - COMMA@6835..6836 "," - WHITESPACE@6836..6837 " " - ARG@6837..6838 - EXPR_VAR@6837..6838 - NAME@6837..6838 - IDENT@6837..6838 "b" - COMMA@6838..6839 "," - WHITESPACE@6839..6840 " " - ARG@6840..6841 - EXPR_VAR@6840..6841 - NAME@6840..6841 - IDENT@6840..6841 "i" - COMMA@6841..6842 "," - WHITESPACE@6842..6843 " " - ARG@6843..6848 - EXPR_BINARY@6843..6848 - LHS_EXPR@6843..6844 - EXPR_VAR@6843..6844 - NAME@6843..6844 - IDENT@6843..6844 "j" - WHITESPACE@6844..6845 " " - PLUS@6845..6846 "+" - WHITESPACE@6846..6847 " " - EXPR_NUMBER@6847..6848 - FLOAT@6847..6848 "1" - COMMA@6848..6849 "," - WHITESPACE@6849..6850 " " - ARG@6850..6862 - EXPR_BINARY@6850..6862 - LHS_EXPR@6850..6853 - EXPR_VAR@6850..6853 - NAME@6850..6853 - IDENT@6850..6853 "acc" - WHITESPACE@6853..6854 " " - PLUS@6854..6855 "+" - WHITESPACE@6855..6856 " " - EXPR_ARRAY@6856..6862 - L_BRACK@6856..6857 "[" - EXPR_INDEX_EXPR@6857..6861 - LHS_EXPR@6857..6858 - EXPR_VAR@6857..6858 - NAME@6857..6858 - IDENT@6857..6858 "b" - L_BRACK@6858..6859 "[" - EXPR_VAR@6859..6860 - NAME@6859..6860 - IDENT@6859..6860 "j" - R_BRACK@6860..6861 "]" - R_BRACK@6861..6862 "]" - R_PAREN@6862..6863 ")" - WHITESPACE@6863..6864 " " - TAILSTRICT_KW@6864..6874 "tailstrict" - SEMI@6874..6875 ";" - WHITESPACE@6875..6880 "\n " - EXPR_APPLY@6880..6899 - EXPR_VAR@6880..6883 - NAME@6880..6883 - IDENT@6880..6883 "aux" - ARGS_DESC@6883..6899 - L_PAREN@6883..6884 "(" - ARG@6884..6885 - EXPR_VAR@6884..6885 - NAME@6884..6885 - IDENT@6884..6885 "a" - COMMA@6885..6886 "," - WHITESPACE@6886..6887 " " - ARG@6887..6888 - EXPR_VAR@6887..6888 - NAME@6887..6888 - IDENT@6887..6888 "b" - COMMA@6888..6889 "," - WHITESPACE@6889..6890 " " - ARG@6890..6891 - EXPR_NUMBER@6890..6891 - FLOAT@6890..6891 "0" - COMMA@6891..6892 "," - WHITESPACE@6892..6893 " " - ARG@6893..6894 - EXPR_NUMBER@6893..6894 - FLOAT@6893..6894 "0" - COMMA@6894..6895 "," - WHITESPACE@6895..6896 " " - ARG@6896..6898 - EXPR_ARRAY@6896..6898 - L_BRACK@6896..6897 "[" - R_BRACK@6897..6898 "]" - R_PAREN@6898..6899 ")" - COMMA@6899..6900 "," - WHITESPACE@6900..6904 "\n\n " - MEMBER_FIELD_METHOD@6904..7361 - FIELD_NAME_FIXED@6904..6911 - NAME@6904..6911 - IDENT@6904..6911 "setDiff" - PARAMS_DESC@6911..6926 - L_PAREN@6911..6912 "(" - PARAM@6912..6913 - DESTRUCT_FULL@6912..6913 - NAME@6912..6913 - IDENT@6912..6913 "a" - COMMA@6913..6914 "," - WHITESPACE@6914..6915 " " - PARAM@6915..6916 - DESTRUCT_FULL@6915..6916 - NAME@6915..6916 - IDENT@6915..6916 "b" - COMMA@6916..6917 "," - WHITESPACE@6917..6918 " " - PARAM@6918..6925 - DESTRUCT_FULL@6918..6922 - NAME@6918..6922 - IDENT@6918..6922 "keyF" - ASSIGN@6922..6923 "=" - EXPR_VAR@6923..6925 - NAME@6923..6925 - IDENT@6923..6925 "id" - R_PAREN@6925..6926 ")" - COLONCOLON@6926..6928 "::" - WHITESPACE@6928..6933 "\n " - STMT_LOCAL@6933..7326 - LOCAL_KW@6933..6938 "local" - WHITESPACE@6938..6939 " " - BIND_FUNCTION@6939..7325 - NAME@6939..6942 - IDENT@6939..6942 "aux" - PARAMS_DESC@6942..6959 - L_PAREN@6942..6943 "(" - PARAM@6943..6944 - DESTRUCT_FULL@6943..6944 - NAME@6943..6944 - IDENT@6943..6944 "a" - COMMA@6944..6945 "," - WHITESPACE@6945..6946 " " - PARAM@6946..6947 - DESTRUCT_FULL@6946..6947 - NAME@6946..6947 - IDENT@6946..6947 "b" - COMMA@6947..6948 "," - WHITESPACE@6948..6949 " " - PARAM@6949..6950 - DESTRUCT_FULL@6949..6950 - NAME@6949..6950 - IDENT@6949..6950 "i" - COMMA@6950..6951 "," - WHITESPACE@6951..6952 " " - PARAM@6952..6953 - DESTRUCT_FULL@6952..6953 - NAME@6952..6953 - IDENT@6952..6953 "j" - COMMA@6953..6954 "," - WHITESPACE@6954..6955 " " - PARAM@6955..6958 - DESTRUCT_FULL@6955..6958 - NAME@6955..6958 - IDENT@6955..6958 "acc" - R_PAREN@6958..6959 ")" - WHITESPACE@6959..6960 " " - ASSIGN@6960..6961 "=" - WHITESPACE@6961..6968 "\n " - EXPR_IF_THEN_ELSE@6968..7325 - IF_KW@6968..6970 "if" - WHITESPACE@6970..6971 " " - EXPR_BINARY@6971..6989 - LHS_EXPR@6971..6972 - EXPR_VAR@6971..6972 - NAME@6971..6972 - IDENT@6971..6972 "i" - WHITESPACE@6972..6973 " " - GE@6973..6975 ">=" - WHITESPACE@6975..6976 " " - EXPR_APPLY@6976..6989 - EXPR_INDEX@6976..6986 - EXPR_VAR@6976..6979 - NAME@6976..6979 - IDENT@6976..6979 "std" - DOT@6979..6980 "." - NAME@6980..6986 - IDENT@6980..6986 "length" - ARGS_DESC@6986..6989 - L_PAREN@6986..6987 "(" - ARG@6987..6988 - EXPR_VAR@6987..6988 - NAME@6987..6988 - IDENT@6987..6988 "a" - R_PAREN@6988..6989 ")" - WHITESPACE@6989..6990 " " - THEN_KW@6990..6994 "then" - WHITESPACE@6994..7003 "\n " - TRUE_EXPR@7003..7006 - EXPR_VAR@7003..7006 - NAME@7003..7006 - IDENT@7003..7006 "acc" - WHITESPACE@7006..7013 "\n " - ELSE_KW@7013..7017 "else" - WHITESPACE@7017..7018 " " - FALSE_EXPR@7018..7325 - EXPR_IF_THEN_ELSE@7018..7325 - IF_KW@7018..7020 "if" - WHITESPACE@7020..7021 " " - EXPR_BINARY@7021..7039 - LHS_EXPR@7021..7022 - EXPR_VAR@7021..7022 - NAME@7021..7022 - IDENT@7021..7022 "j" - WHITESPACE@7022..7023 " " - GE@7023..7025 ">=" - WHITESPACE@7025..7026 " " - EXPR_APPLY@7026..7039 - EXPR_INDEX@7026..7036 - EXPR_VAR@7026..7029 - NAME@7026..7029 - IDENT@7026..7029 "std" - DOT@7029..7030 "." - NAME@7030..7036 - IDENT@7030..7036 "length" - ARGS_DESC@7036..7039 - L_PAREN@7036..7037 "(" - ARG@7037..7038 - EXPR_VAR@7037..7038 - NAME@7037..7038 - IDENT@7037..7038 "b" - R_PAREN@7038..7039 ")" - WHITESPACE@7039..7040 " " - THEN_KW@7040..7044 "then" - WHITESPACE@7044..7053 "\n " - TRUE_EXPR@7053..7064 - EXPR_BINARY@7053..7064 - LHS_EXPR@7053..7056 - EXPR_VAR@7053..7056 - NAME@7053..7056 - IDENT@7053..7056 "acc" - WHITESPACE@7056..7057 " " - PLUS@7057..7058 "+" - WHITESPACE@7058..7059 " " - EXPR_SLICE@7059..7064 - EXPR_VAR@7059..7060 - NAME@7059..7060 - IDENT@7059..7060 "a" - SLICE_DESC@7060..7064 - L_BRACK@7060..7061 "[" - EXPR_VAR@7061..7062 - NAME@7061..7062 - IDENT@7061..7062 "i" - COLON@7062..7063 ":" - R_BRACK@7063..7064 "]" - WHITESPACE@7064..7071 "\n " - ELSE_KW@7071..7075 "else" - WHITESPACE@7075..7084 "\n " - FALSE_EXPR@7084..7325 - EXPR_IF_THEN_ELSE@7084..7325 - IF_KW@7084..7086 "if" - WHITESPACE@7086..7087 " " - EXPR_BINARY@7087..7111 - LHS_EXPR@7087..7097 - EXPR_APPLY@7087..7097 - EXPR_VAR@7087..7091 - NAME@7087..7091 - IDENT@7087..7091 "keyF" - ARGS_DESC@7091..7097 - L_PAREN@7091..7092 "(" - ARG@7092..7096 - EXPR_INDEX_EXPR@7092..7096 - LHS_EXPR@7092..7093 - EXPR_VAR@7092..7093 - NAME@7092..7093 - IDENT@7092..7093 "a" - L_BRACK@7093..7094 "[" - EXPR_VAR@7094..7095 - NAME@7094..7095 - IDENT@7094..7095 "i" - R_BRACK@7095..7096 "]" - R_PAREN@7096..7097 ")" - WHITESPACE@7097..7098 " " - EQ@7098..7100 "==" - WHITESPACE@7100..7101 " " - EXPR_APPLY@7101..7111 - EXPR_VAR@7101..7105 - NAME@7101..7105 - IDENT@7101..7105 "keyF" - ARGS_DESC@7105..7111 - L_PAREN@7105..7106 "(" - ARG@7106..7110 - EXPR_INDEX_EXPR@7106..7110 - LHS_EXPR@7106..7107 - EXPR_VAR@7106..7107 - NAME@7106..7107 - IDENT@7106..7107 "b" - L_BRACK@7107..7108 "[" - EXPR_VAR@7108..7109 - NAME@7108..7109 - IDENT@7108..7109 "j" - R_BRACK@7109..7110 "]" - R_PAREN@7110..7111 ")" - WHITESPACE@7111..7112 " " - THEN_KW@7112..7116 "then" - WHITESPACE@7116..7127 "\n " - TRUE_EXPR@7127..7166 - EXPR_APPLY@7127..7166 - EXPR_VAR@7127..7130 - NAME@7127..7130 - IDENT@7127..7130 "aux" - ARGS_DESC@7130..7166 - L_PAREN@7130..7131 "(" - ARG@7131..7132 - EXPR_VAR@7131..7132 - NAME@7131..7132 - IDENT@7131..7132 "a" - COMMA@7132..7133 "," - WHITESPACE@7133..7134 " " - ARG@7134..7135 - EXPR_VAR@7134..7135 - NAME@7134..7135 - IDENT@7134..7135 "b" - COMMA@7135..7136 "," - WHITESPACE@7136..7137 " " - ARG@7137..7142 - EXPR_BINARY@7137..7142 - LHS_EXPR@7137..7138 - EXPR_VAR@7137..7138 - NAME@7137..7138 - IDENT@7137..7138 "i" - WHITESPACE@7138..7139 " " - PLUS@7139..7140 "+" - WHITESPACE@7140..7141 " " - EXPR_NUMBER@7141..7142 - FLOAT@7141..7142 "1" - COMMA@7142..7143 "," - WHITESPACE@7143..7144 " " - ARG@7144..7149 - EXPR_BINARY@7144..7149 - LHS_EXPR@7144..7145 - EXPR_VAR@7144..7145 - NAME@7144..7145 - IDENT@7144..7145 "j" - WHITESPACE@7145..7146 " " - PLUS@7146..7147 "+" - WHITESPACE@7147..7148 " " - EXPR_NUMBER@7148..7149 - FLOAT@7148..7149 "1" - COMMA@7149..7150 "," - WHITESPACE@7150..7151 " " - ARG@7151..7154 - EXPR_VAR@7151..7154 - NAME@7151..7154 - IDENT@7151..7154 "acc" - R_PAREN@7154..7155 ")" - WHITESPACE@7155..7156 " " - TAILSTRICT_KW@7156..7166 "tailstrict" - WHITESPACE@7166..7175 "\n " - ELSE_KW@7175..7179 "else" - WHITESPACE@7179..7180 " " - FALSE_EXPR@7180..7325 - EXPR_IF_THEN_ELSE@7180..7325 - IF_KW@7180..7182 "if" - WHITESPACE@7182..7183 " " - EXPR_BINARY@7183..7206 - LHS_EXPR@7183..7193 - EXPR_APPLY@7183..7193 - EXPR_VAR@7183..7187 - NAME@7183..7187 - IDENT@7183..7187 "keyF" - ARGS_DESC@7187..7193 - L_PAREN@7187..7188 "(" - ARG@7188..7192 - EXPR_INDEX_EXPR@7188..7192 - LHS_EXPR@7188..7189 - EXPR_VAR@7188..7189 - NAME@7188..7189 - IDENT@7188..7189 "a" - L_BRACK@7189..7190 "[" - EXPR_VAR@7190..7191 - NAME@7190..7191 - IDENT@7190..7191 "i" - R_BRACK@7191..7192 "]" - R_PAREN@7192..7193 ")" - WHITESPACE@7193..7194 " " - LT@7194..7195 "<" - WHITESPACE@7195..7196 " " - EXPR_APPLY@7196..7206 - EXPR_VAR@7196..7200 - NAME@7196..7200 - IDENT@7196..7200 "keyF" - ARGS_DESC@7200..7206 - L_PAREN@7200..7201 "(" - ARG@7201..7205 - EXPR_INDEX_EXPR@7201..7205 - LHS_EXPR@7201..7202 - EXPR_VAR@7201..7202 - NAME@7201..7202 - IDENT@7201..7202 "b" - L_BRACK@7202..7203 "[" - EXPR_VAR@7203..7204 - NAME@7203..7204 - IDENT@7203..7204 "j" - R_BRACK@7204..7205 "]" - R_PAREN@7205..7206 ")" - WHITESPACE@7206..7207 " " - THEN_KW@7207..7211 "then" - WHITESPACE@7211..7222 "\n " - TRUE_EXPR@7222..7266 - EXPR_APPLY@7222..7266 - EXPR_VAR@7222..7225 - NAME@7222..7225 - IDENT@7222..7225 "aux" - ARGS_DESC@7225..7266 - L_PAREN@7225..7226 "(" - ARG@7226..7227 - EXPR_VAR@7226..7227 - NAME@7226..7227 - IDENT@7226..7227 "a" - COMMA@7227..7228 "," - WHITESPACE@7228..7229 " " - ARG@7229..7230 - EXPR_VAR@7229..7230 - NAME@7229..7230 - IDENT@7229..7230 "b" - COMMA@7230..7231 "," - WHITESPACE@7231..7232 " " - ARG@7232..7237 - EXPR_BINARY@7232..7237 - LHS_EXPR@7232..7233 - EXPR_VAR@7232..7233 - NAME@7232..7233 - IDENT@7232..7233 "i" - WHITESPACE@7233..7234 " " - PLUS@7234..7235 "+" - WHITESPACE@7235..7236 " " - EXPR_NUMBER@7236..7237 - FLOAT@7236..7237 "1" - COMMA@7237..7238 "," - WHITESPACE@7238..7239 " " - ARG@7239..7240 - EXPR_VAR@7239..7240 - NAME@7239..7240 - IDENT@7239..7240 "j" - COMMA@7240..7241 "," - WHITESPACE@7241..7242 " " - ARG@7242..7254 - EXPR_BINARY@7242..7254 - LHS_EXPR@7242..7245 - EXPR_VAR@7242..7245 - NAME@7242..7245 - IDENT@7242..7245 "acc" - WHITESPACE@7245..7246 " " - PLUS@7246..7247 "+" - WHITESPACE@7247..7248 " " - EXPR_ARRAY@7248..7254 - L_BRACK@7248..7249 "[" - EXPR_INDEX_EXPR@7249..7253 - LHS_EXPR@7249..7250 - EXPR_VAR@7249..7250 - NAME@7249..7250 - IDENT@7249..7250 "a" - L_BRACK@7250..7251 "[" - EXPR_VAR@7251..7252 - NAME@7251..7252 - IDENT@7251..7252 "i" - R_BRACK@7252..7253 "]" - R_BRACK@7253..7254 "]" - R_PAREN@7254..7255 ")" - WHITESPACE@7255..7256 " " - TAILSTRICT_KW@7256..7266 "tailstrict" - WHITESPACE@7266..7275 "\n " - ELSE_KW@7275..7279 "else" - WHITESPACE@7279..7290 "\n " - FALSE_EXPR@7290..7325 - EXPR_APPLY@7290..7325 - EXPR_VAR@7290..7293 - NAME@7290..7293 - IDENT@7290..7293 "aux" - ARGS_DESC@7293..7325 - L_PAREN@7293..7294 "(" - ARG@7294..7295 - EXPR_VAR@7294..7295 - NAME@7294..7295 - IDENT@7294..7295 "a" - COMMA@7295..7296 "," - WHITESPACE@7296..7297 " " - ARG@7297..7298 - EXPR_VAR@7297..7298 - NAME@7297..7298 - IDENT@7297..7298 "b" - COMMA@7298..7299 "," - WHITESPACE@7299..7300 " " - ARG@7300..7301 - EXPR_VAR@7300..7301 - NAME@7300..7301 - IDENT@7300..7301 "i" - COMMA@7301..7302 "," - WHITESPACE@7302..7303 " " - ARG@7303..7308 - EXPR_BINARY@7303..7308 - LHS_EXPR@7303..7304 - EXPR_VAR@7303..7304 - NAME@7303..7304 - IDENT@7303..7304 "j" - WHITESPACE@7304..7305 " " - PLUS@7305..7306 "+" - WHITESPACE@7306..7307 " " - EXPR_NUMBER@7307..7308 - FLOAT@7307..7308 "1" - COMMA@7308..7309 "," - WHITESPACE@7309..7310 " " - ARG@7310..7313 - EXPR_VAR@7310..7313 - NAME@7310..7313 - IDENT@7310..7313 "acc" - R_PAREN@7313..7314 ")" - WHITESPACE@7314..7315 " " - TAILSTRICT_KW@7315..7325 "tailstrict" - SEMI@7325..7326 ";" - WHITESPACE@7326..7331 "\n " - EXPR_APPLY@7331..7361 - EXPR_VAR@7331..7334 - NAME@7331..7334 - IDENT@7331..7334 "aux" - ARGS_DESC@7334..7361 - L_PAREN@7334..7335 "(" - ARG@7335..7336 - EXPR_VAR@7335..7336 - NAME@7335..7336 - IDENT@7335..7336 "a" - COMMA@7336..7337 "," - WHITESPACE@7337..7338 " " - ARG@7338..7339 - EXPR_VAR@7338..7339 - NAME@7338..7339 - IDENT@7338..7339 "b" - COMMA@7339..7340 "," - WHITESPACE@7340..7341 " " - ARG@7341..7342 - EXPR_NUMBER@7341..7342 - FLOAT@7341..7342 "0" - COMMA@7342..7343 "," - WHITESPACE@7343..7344 " " - ARG@7344..7345 - EXPR_NUMBER@7344..7345 - FLOAT@7344..7345 "0" - COMMA@7345..7346 "," - WHITESPACE@7346..7347 " " - ARG@7347..7349 - EXPR_ARRAY@7347..7349 - L_BRACK@7347..7348 "[" - R_BRACK@7348..7349 "]" - R_PAREN@7349..7350 ")" - WHITESPACE@7350..7351 " " - TAILSTRICT_KW@7351..7361 "tailstrict" - COMMA@7361..7362 "," - WHITESPACE@7362..7366 "\n\n " - MEMBER_FIELD_METHOD@7366..8154 - FIELD_NAME_FIXED@7366..7376 - NAME@7366..7376 - IDENT@7366..7376 "mergePatch" - PARAMS_DESC@7376..7391 - L_PAREN@7376..7377 "(" - PARAM@7377..7383 - DESTRUCT_FULL@7377..7383 - NAME@7377..7383 - IDENT@7377..7383 "target" - COMMA@7383..7384 "," - WHITESPACE@7384..7385 " " - PARAM@7385..7390 - DESTRUCT_FULL@7385..7390 - NAME@7385..7390 - IDENT@7385..7390 "patch" - R_PAREN@7390..7391 ")" - COLONCOLON@7391..7393 "::" - WHITESPACE@7393..7398 "\n " - EXPR_IF_THEN_ELSE@7398..8154 - IF_KW@7398..7400 "if" - WHITESPACE@7400..7401 " " - EXPR_APPLY@7401..7420 - EXPR_INDEX@7401..7413 - EXPR_VAR@7401..7404 - NAME@7401..7404 - IDENT@7401..7404 "std" - DOT@7404..7405 "." - NAME@7405..7413 - IDENT@7405..7413 "isObject" - ARGS_DESC@7413..7420 - L_PAREN@7413..7414 "(" - ARG@7414..7419 - EXPR_VAR@7414..7419 - NAME@7414..7419 - IDENT@7414..7419 "patch" - R_PAREN@7419..7420 ")" - WHITESPACE@7420..7421 " " - THEN_KW@7421..7425 "then" - WHITESPACE@7425..7432 "\n " - STMT_LOCAL@7432..7506 - LOCAL_KW@7432..7437 "local" - WHITESPACE@7437..7438 " " - BIND_DESTRUCT@7438..7505 - DESTRUCT_FULL@7438..7451 - NAME@7438..7451 - IDENT@7438..7451 "target_object" - WHITESPACE@7451..7452 " " - ASSIGN@7452..7453 "=" - WHITESPACE@7453..7462 "\n " - EXPR_IF_THEN_ELSE@7462..7505 - IF_KW@7462..7464 "if" - WHITESPACE@7464..7465 " " - EXPR_APPLY@7465..7485 - EXPR_INDEX@7465..7477 - EXPR_VAR@7465..7468 - NAME@7465..7468 - IDENT@7465..7468 "std" - DOT@7468..7469 "." - NAME@7469..7477 - IDENT@7469..7477 "isObject" - ARGS_DESC@7477..7485 - L_PAREN@7477..7478 "(" - ARG@7478..7484 - EXPR_VAR@7478..7484 - NAME@7478..7484 - IDENT@7478..7484 "target" - R_PAREN@7484..7485 ")" - WHITESPACE@7485..7486 " " - THEN_KW@7486..7490 "then" - WHITESPACE@7490..7491 " " - TRUE_EXPR@7491..7497 - EXPR_VAR@7491..7497 - NAME@7491..7497 - IDENT@7491..7497 "target" - WHITESPACE@7497..7498 " " - ELSE_KW@7498..7502 "else" - WHITESPACE@7502..7503 " " - FALSE_EXPR@7503..7505 - EXPR_OBJECT@7503..7505 - OBJ_BODY_MEMBER_LIST@7503..7505 - L_BRACE@7503..7504 "{" - R_BRACE@7504..7505 "}" - SEMI@7505..7506 ";" - WHITESPACE@7506..7514 "\n\n " - STMT_LOCAL@7514..7620 - LOCAL_KW@7514..7519 "local" - WHITESPACE@7519..7520 " " - BIND_DESTRUCT@7520..7619 - DESTRUCT_FULL@7520..7533 - NAME@7520..7533 - IDENT@7520..7533 "target_fields" - WHITESPACE@7533..7534 " " - ASSIGN@7534..7535 "=" - WHITESPACE@7535..7544 "\n " - EXPR_IF_THEN_ELSE@7544..7619 - IF_KW@7544..7546 "if" - WHITESPACE@7546..7547 " " - EXPR_APPLY@7547..7574 - EXPR_INDEX@7547..7559 - EXPR_VAR@7547..7550 - NAME@7547..7550 - IDENT@7547..7550 "std" - DOT@7550..7551 "." - NAME@7551..7559 - IDENT@7551..7559 "isObject" - ARGS_DESC@7559..7574 - L_PAREN@7559..7560 "(" - ARG@7560..7573 - EXPR_VAR@7560..7573 - NAME@7560..7573 - IDENT@7560..7573 "target_object" - R_PAREN@7573..7574 ")" - WHITESPACE@7574..7575 " " - THEN_KW@7575..7579 "then" - WHITESPACE@7579..7580 " " - TRUE_EXPR@7580..7611 - EXPR_APPLY@7580..7611 - EXPR_INDEX@7580..7596 - EXPR_VAR@7580..7583 - NAME@7580..7583 - IDENT@7580..7583 "std" - DOT@7583..7584 "." - NAME@7584..7596 - IDENT@7584..7596 "objectFields" - ARGS_DESC@7596..7611 - L_PAREN@7596..7597 "(" - ARG@7597..7610 - EXPR_VAR@7597..7610 - NAME@7597..7610 - IDENT@7597..7610 "target_object" - R_PAREN@7610..7611 ")" - WHITESPACE@7611..7612 " " - ELSE_KW@7612..7616 "else" - WHITESPACE@7616..7617 " " - FALSE_EXPR@7617..7619 - EXPR_ARRAY@7617..7619 - L_BRACK@7617..7618 "[" - R_BRACK@7618..7619 "]" - SEMI@7619..7620 ";" - WHITESPACE@7620..7628 "\n\n " - STMT_LOCAL@7628..7705 - LOCAL_KW@7628..7633 "local" - WHITESPACE@7633..7634 " " - BIND_DESTRUCT@7634..7704 - DESTRUCT_FULL@7634..7645 - NAME@7634..7645 - IDENT@7634..7645 "null_fields" - WHITESPACE@7645..7646 " " - ASSIGN@7646..7647 "=" - WHITESPACE@7647..7648 " " - EXPR_ARRAY_COMP@7648..7704 - L_BRACK@7648..7649 "[" - EXPR_VAR@7649..7650 - NAME@7649..7650 - IDENT@7649..7650 "k" - WHITESPACE@7650..7651 " " - FOR_SPEC@7651..7683 - FOR_KW@7651..7654 "for" - WHITESPACE@7654..7655 " " - NAME@7655..7656 - IDENT@7655..7656 "k" - WHITESPACE@7656..7657 " " - IN_KW@7657..7659 "in" - WHITESPACE@7659..7660 " " - EXPR_APPLY@7660..7683 - EXPR_INDEX@7660..7676 - EXPR_VAR@7660..7663 - NAME@7660..7663 - IDENT@7660..7663 "std" - DOT@7663..7664 "." - NAME@7664..7676 - IDENT@7664..7676 "objectFields" - ARGS_DESC@7676..7683 - L_PAREN@7676..7677 "(" - ARG@7677..7682 - EXPR_VAR@7677..7682 - NAME@7677..7682 - IDENT@7677..7682 "patch" - R_PAREN@7682..7683 ")" - WHITESPACE@7683..7684 " " - IF_SPEC@7684..7703 - IF_KW@7684..7686 "if" - WHITESPACE@7686..7687 " " - EXPR_BINARY@7687..7703 - LHS_EXPR@7687..7695 - EXPR_INDEX_EXPR@7687..7695 - LHS_EXPR@7687..7692 - EXPR_VAR@7687..7692 - NAME@7687..7692 - IDENT@7687..7692 "patch" - L_BRACK@7692..7693 "[" - EXPR_VAR@7693..7694 - NAME@7693..7694 - IDENT@7693..7694 "k" - R_BRACK@7694..7695 "]" - WHITESPACE@7695..7696 " " - EQ@7696..7698 "==" - WHITESPACE@7698..7699 " " - EXPR_LITERAL@7699..7703 - NULL_KW@7699..7703 "null" - R_BRACK@7703..7704 "]" - SEMI@7704..7705 ";" - WHITESPACE@7705..7712 "\n " - STMT_LOCAL@7712..7785 - LOCAL_KW@7712..7717 "local" - WHITESPACE@7717..7718 " " - BIND_DESTRUCT@7718..7784 - DESTRUCT_FULL@7718..7729 - NAME@7718..7729 - IDENT@7718..7729 "both_fields" - WHITESPACE@7729..7730 " " - ASSIGN@7730..7731 "=" - WHITESPACE@7731..7732 " " - EXPR_APPLY@7732..7784 - EXPR_INDEX@7732..7744 - EXPR_VAR@7732..7735 - NAME@7732..7735 - IDENT@7732..7735 "std" - DOT@7735..7736 "." - NAME@7736..7744 - IDENT@7736..7744 "setUnion" - ARGS_DESC@7744..7784 - L_PAREN@7744..7745 "(" - ARG@7745..7758 - EXPR_VAR@7745..7758 - NAME@7745..7758 - IDENT@7745..7758 "target_fields" - COMMA@7758..7759 "," - WHITESPACE@7759..7760 " " - ARG@7760..7783 - EXPR_APPLY@7760..7783 - EXPR_INDEX@7760..7776 - EXPR_VAR@7760..7763 - NAME@7760..7763 - IDENT@7760..7763 "std" - DOT@7763..7764 "." - NAME@7764..7776 - IDENT@7764..7776 "objectFields" - ARGS_DESC@7776..7783 - L_PAREN@7776..7777 "(" - ARG@7777..7782 - EXPR_VAR@7777..7782 - NAME@7777..7782 - IDENT@7777..7782 "patch" - R_PAREN@7782..7783 ")" - R_PAREN@7783..7784 ")" - SEMI@7784..7785 ";" - WHITESPACE@7785..7793 "\n\n " - TRUE_EXPR@7793..8133 - EXPR_OBJECT@7793..8133 - OBJ_BODY_COMP@7793..8133 - L_BRACE@7793..7794 "{" - WHITESPACE@7794..7803 "\n " - MEMBER_FIELD_NORMAL@7803..8070 - FIELD_NAME_DYNAMIC@7803..7806 - L_BRACK@7803..7804 "[" - EXPR_VAR@7804..7805 - NAME@7804..7805 - IDENT@7804..7805 "k" - R_BRACK@7805..7806 "]" - COLON@7806..7807 ":" - WHITESPACE@7807..7818 "\n " - EXPR_IF_THEN_ELSE@7818..8070 - IF_KW@7818..7820 "if" - WHITESPACE@7820..7821 " " - EXPR_UNARY@7821..7845 - NOT@7821..7822 "!" - EXPR_APPLY@7822..7845 - EXPR_INDEX@7822..7835 - EXPR_VAR@7822..7825 - NAME@7822..7825 - IDENT@7822..7825 "std" - DOT@7825..7826 "." - NAME@7826..7835 - IDENT@7826..7835 "objectHas" - ARGS_DESC@7835..7845 - L_PAREN@7835..7836 "(" - ARG@7836..7841 - EXPR_VAR@7836..7841 - NAME@7836..7841 - IDENT@7836..7841 "patch" - COMMA@7841..7842 "," - WHITESPACE@7842..7843 " " - ARG@7843..7844 - EXPR_VAR@7843..7844 - NAME@7843..7844 - IDENT@7843..7844 "k" - R_PAREN@7844..7845 ")" - WHITESPACE@7845..7846 " " - THEN_KW@7846..7850 "then" - WHITESPACE@7850..7863 "\n " - TRUE_EXPR@7863..7879 - EXPR_INDEX_EXPR@7863..7879 - LHS_EXPR@7863..7876 - EXPR_VAR@7863..7876 - NAME@7863..7876 - IDENT@7863..7876 "target_object" - L_BRACK@7876..7877 "[" - EXPR_VAR@7877..7878 - NAME@7877..7878 - IDENT@7877..7878 "k" - R_BRACK@7878..7879 "]" - WHITESPACE@7879..7890 "\n " - ELSE_KW@7890..7894 "else" - WHITESPACE@7894..7895 " " - FALSE_EXPR@7895..8070 - EXPR_IF_THEN_ELSE@7895..8070 - IF_KW@7895..7897 "if" - WHITESPACE@7897..7898 " " - EXPR_UNARY@7898..7930 - NOT@7898..7899 "!" - EXPR_APPLY@7899..7930 - EXPR_INDEX@7899..7912 - EXPR_VAR@7899..7902 - NAME@7899..7902 - IDENT@7899..7902 "std" - DOT@7902..7903 "." - NAME@7903..7912 - IDENT@7903..7912 "objectHas" - ARGS_DESC@7912..7930 - L_PAREN@7912..7913 "(" - ARG@7913..7926 - EXPR_VAR@7913..7926 - NAME@7913..7926 - IDENT@7913..7926 "target_object" - COMMA@7926..7927 "," - WHITESPACE@7927..7928 " " - ARG@7928..7929 - EXPR_VAR@7928..7929 - NAME@7928..7929 - IDENT@7928..7929 "k" - R_PAREN@7929..7930 ")" - WHITESPACE@7930..7931 " " - THEN_KW@7931..7935 "then" - WHITESPACE@7935..7948 "\n " - TRUE_EXPR@7948..7989 - EXPR_APPLY@7948..7989 - EXPR_INDEX@7948..7962 - EXPR_VAR@7948..7951 - NAME@7948..7951 - IDENT@7948..7951 "std" - DOT@7951..7952 "." - NAME@7952..7962 - IDENT@7952..7962 "mergePatch" - ARGS_DESC@7962..7989 - L_PAREN@7962..7963 "(" - ARG@7963..7967 - EXPR_LITERAL@7963..7967 - NULL_KW@7963..7967 "null" - COMMA@7967..7968 "," - WHITESPACE@7968..7969 " " - ARG@7969..7977 - EXPR_INDEX_EXPR@7969..7977 - LHS_EXPR@7969..7974 - EXPR_VAR@7969..7974 - NAME@7969..7974 - IDENT@7969..7974 "patch" - L_BRACK@7974..7975 "[" - EXPR_VAR@7975..7976 - NAME@7975..7976 - IDENT@7975..7976 "k" - R_BRACK@7976..7977 "]" - R_PAREN@7977..7978 ")" - WHITESPACE@7978..7979 " " - TAILSTRICT_KW@7979..7989 "tailstrict" - WHITESPACE@7989..8000 "\n " - ELSE_KW@8000..8004 "else" - WHITESPACE@8004..8017 "\n " - FALSE_EXPR@8017..8070 - EXPR_APPLY@8017..8070 - EXPR_INDEX@8017..8031 - EXPR_VAR@8017..8020 - NAME@8017..8020 - IDENT@8017..8020 "std" - DOT@8020..8021 "." - NAME@8021..8031 - IDENT@8021..8031 "mergePatch" - ARGS_DESC@8031..8070 - L_PAREN@8031..8032 "(" - ARG@8032..8048 - EXPR_INDEX_EXPR@8032..8048 - LHS_EXPR@8032..8045 - EXPR_VAR@8032..8045 - NAME@8032..8045 - IDENT@8032..8045 "target_object" - L_BRACK@8045..8046 "[" - EXPR_VAR@8046..8047 - NAME@8046..8047 - IDENT@8046..8047 "k" - R_BRACK@8047..8048 "]" - COMMA@8048..8049 "," - WHITESPACE@8049..8050 " " - ARG@8050..8058 - EXPR_INDEX_EXPR@8050..8058 - LHS_EXPR@8050..8055 - EXPR_VAR@8050..8055 - NAME@8050..8055 - IDENT@8050..8055 "patch" - L_BRACK@8055..8056 "[" - EXPR_VAR@8056..8057 - NAME@8056..8057 - IDENT@8056..8057 "k" - R_BRACK@8057..8058 "]" - R_PAREN@8058..8059 ")" - WHITESPACE@8059..8060 " " - TAILSTRICT_KW@8060..8070 "tailstrict" - WHITESPACE@8070..8079 "\n " - FOR_SPEC@8079..8125 - FOR_KW@8079..8082 "for" - WHITESPACE@8082..8083 " " - NAME@8083..8084 - IDENT@8083..8084 "k" - WHITESPACE@8084..8085 " " - IN_KW@8085..8087 "in" - WHITESPACE@8087..8088 " " - EXPR_APPLY@8088..8125 - EXPR_INDEX@8088..8099 - EXPR_VAR@8088..8091 - NAME@8088..8091 - IDENT@8088..8091 "std" - DOT@8091..8092 "." - NAME@8092..8099 - IDENT@8092..8099 "setDiff" - ARGS_DESC@8099..8125 - L_PAREN@8099..8100 "(" - ARG@8100..8111 - EXPR_VAR@8100..8111 - NAME@8100..8111 - IDENT@8100..8111 "both_fields" - COMMA@8111..8112 "," - WHITESPACE@8112..8113 " " - ARG@8113..8124 - EXPR_VAR@8113..8124 - NAME@8113..8124 - IDENT@8113..8124 "null_fields" - R_PAREN@8124..8125 ")" - WHITESPACE@8125..8132 "\n " - R_BRACE@8132..8133 "}" - WHITESPACE@8133..8138 "\n " - ELSE_KW@8138..8142 "else" - WHITESPACE@8142..8149 "\n " - FALSE_EXPR@8149..8154 - EXPR_VAR@8149..8154 - NAME@8149..8154 - IDENT@8149..8154 "patch" - COMMA@8154..8155 "," - WHITESPACE@8155..8159 "\n\n " - MEMBER_FIELD_METHOD@8159..8265 - FIELD_NAME_FIXED@8159..8162 - NAME@8159..8162 - IDENT@8159..8162 "get" - PARAMS_DESC@8162..8199 - L_PAREN@8162..8163 "(" - PARAM@8163..8164 - DESTRUCT_FULL@8163..8164 - NAME@8163..8164 - IDENT@8163..8164 "o" - COMMA@8164..8165 "," - WHITESPACE@8165..8166 " " - PARAM@8166..8167 - DESTRUCT_FULL@8166..8167 - NAME@8166..8167 - IDENT@8166..8167 "f" - COMMA@8167..8168 "," - WHITESPACE@8168..8169 " " - PARAM@8169..8181 - DESTRUCT_FULL@8169..8176 - NAME@8169..8176 - IDENT@8169..8176 "default" - ASSIGN@8176..8177 "=" - EXPR_LITERAL@8177..8181 - NULL_KW@8177..8181 "null" - COMMA@8181..8182 "," - WHITESPACE@8182..8183 " " - PARAM@8183..8198 - DESTRUCT_FULL@8183..8193 - NAME@8183..8193 - IDENT@8183..8193 "inc_hidden" - ASSIGN@8193..8194 "=" - EXPR_LITERAL@8194..8198 - TRUE_KW@8194..8198 "true" - R_PAREN@8198..8199 ")" - COLONCOLON@8199..8201 "::" - WHITESPACE@8201..8206 "\n " - EXPR_IF_THEN_ELSE@8206..8265 - IF_KW@8206..8208 "if" - WHITESPACE@8208..8209 " " - EXPR_APPLY@8209..8242 - EXPR_INDEX@8209..8224 - EXPR_VAR@8209..8212 - NAME@8209..8212 - IDENT@8209..8212 "std" - DOT@8212..8213 "." - NAME@8213..8224 - IDENT@8213..8224 "objectHasEx" - ARGS_DESC@8224..8242 - L_PAREN@8224..8225 "(" - ARG@8225..8226 - EXPR_VAR@8225..8226 - NAME@8225..8226 - IDENT@8225..8226 "o" - COMMA@8226..8227 "," - WHITESPACE@8227..8228 " " - ARG@8228..8229 - EXPR_VAR@8228..8229 - NAME@8228..8229 - IDENT@8228..8229 "f" - COMMA@8229..8230 "," - WHITESPACE@8230..8231 " " - ARG@8231..8241 - EXPR_VAR@8231..8241 - NAME@8231..8241 - IDENT@8231..8241 "inc_hidden" - R_PAREN@8241..8242 ")" - WHITESPACE@8242..8243 " " - THEN_KW@8243..8247 "then" - WHITESPACE@8247..8248 " " - TRUE_EXPR@8248..8252 - EXPR_INDEX_EXPR@8248..8252 - LHS_EXPR@8248..8249 - EXPR_VAR@8248..8249 - NAME@8248..8249 - IDENT@8248..8249 "o" - L_BRACK@8249..8250 "[" - EXPR_VAR@8250..8251 - NAME@8250..8251 - IDENT@8250..8251 "f" - R_BRACK@8251..8252 "]" - WHITESPACE@8252..8253 " " - ELSE_KW@8253..8257 "else" - WHITESPACE@8257..8258 " " - FALSE_EXPR@8258..8265 - EXPR_VAR@8258..8265 - NAME@8258..8265 - IDENT@8258..8265 "default" - COMMA@8265..8266 "," - WHITESPACE@8266..8270 "\n\n " - MEMBER_FIELD_METHOD@8270..8320 - FIELD_NAME_FIXED@8270..8282 - NAME@8270..8282 - IDENT@8270..8282 "objectFields" - PARAMS_DESC@8282..8285 - L_PAREN@8282..8283 "(" - PARAM@8283..8284 - DESTRUCT_FULL@8283..8284 - NAME@8283..8284 - IDENT@8283..8284 "o" - R_PAREN@8284..8285 ")" - COLONCOLON@8285..8287 "::" - WHITESPACE@8287..8292 "\n " - EXPR_APPLY@8292..8320 - EXPR_INDEX@8292..8310 - EXPR_VAR@8292..8295 - NAME@8292..8295 - IDENT@8292..8295 "std" - DOT@8295..8296 "." - NAME@8296..8310 - IDENT@8296..8310 "objectFieldsEx" - ARGS_DESC@8310..8320 - L_PAREN@8310..8311 "(" - ARG@8311..8312 - EXPR_VAR@8311..8312 - NAME@8311..8312 - IDENT@8311..8312 "o" - COMMA@8312..8313 "," - WHITESPACE@8313..8314 " " - ARG@8314..8319 - EXPR_LITERAL@8314..8319 - FALSE_KW@8314..8319 "false" - R_PAREN@8319..8320 ")" - COMMA@8320..8321 "," - WHITESPACE@8321..8325 "\n\n " - MEMBER_FIELD_METHOD@8325..8377 - FIELD_NAME_FIXED@8325..8340 - NAME@8325..8340 - IDENT@8325..8340 "objectFieldsAll" - PARAMS_DESC@8340..8343 - L_PAREN@8340..8341 "(" - PARAM@8341..8342 - DESTRUCT_FULL@8341..8342 - NAME@8341..8342 - IDENT@8341..8342 "o" - R_PAREN@8342..8343 ")" - COLONCOLON@8343..8345 "::" - WHITESPACE@8345..8350 "\n " - EXPR_APPLY@8350..8377 - EXPR_INDEX@8350..8368 - EXPR_VAR@8350..8353 - NAME@8350..8353 - IDENT@8350..8353 "std" - DOT@8353..8354 "." - NAME@8354..8368 - IDENT@8354..8368 "objectFieldsEx" - ARGS_DESC@8368..8377 - L_PAREN@8368..8369 "(" - ARG@8369..8370 - EXPR_VAR@8369..8370 - NAME@8369..8370 - IDENT@8369..8370 "o" - COMMA@8370..8371 "," - WHITESPACE@8371..8372 " " - ARG@8372..8376 - EXPR_LITERAL@8372..8376 - TRUE_KW@8372..8376 "true" - R_PAREN@8376..8377 ")" - COMMA@8377..8378 "," - WHITESPACE@8378..8382 "\n\n " - MEMBER_FIELD_METHOD@8382..8432 - FIELD_NAME_FIXED@8382..8391 - NAME@8382..8391 - IDENT@8382..8391 "objectHas" - PARAMS_DESC@8391..8397 - L_PAREN@8391..8392 "(" - PARAM@8392..8393 - DESTRUCT_FULL@8392..8393 - NAME@8392..8393 - IDENT@8392..8393 "o" - COMMA@8393..8394 "," - WHITESPACE@8394..8395 " " - PARAM@8395..8396 - DESTRUCT_FULL@8395..8396 - NAME@8395..8396 - IDENT@8395..8396 "f" - R_PAREN@8396..8397 ")" - COLONCOLON@8397..8399 "::" - WHITESPACE@8399..8404 "\n " - EXPR_APPLY@8404..8432 - EXPR_INDEX@8404..8419 - EXPR_VAR@8404..8407 - NAME@8404..8407 - IDENT@8404..8407 "std" - DOT@8407..8408 "." - NAME@8408..8419 - IDENT@8408..8419 "objectHasEx" - ARGS_DESC@8419..8432 - L_PAREN@8419..8420 "(" - ARG@8420..8421 - EXPR_VAR@8420..8421 - NAME@8420..8421 - IDENT@8420..8421 "o" - COMMA@8421..8422 "," - WHITESPACE@8422..8423 " " - ARG@8423..8424 - EXPR_VAR@8423..8424 - NAME@8423..8424 - IDENT@8423..8424 "f" - COMMA@8424..8425 "," - WHITESPACE@8425..8426 " " - ARG@8426..8431 - EXPR_LITERAL@8426..8431 - FALSE_KW@8426..8431 "false" - R_PAREN@8431..8432 ")" - COMMA@8432..8433 "," - WHITESPACE@8433..8437 "\n\n " - MEMBER_FIELD_METHOD@8437..8489 - FIELD_NAME_FIXED@8437..8449 - NAME@8437..8449 - IDENT@8437..8449 "objectHasAll" - PARAMS_DESC@8449..8455 - L_PAREN@8449..8450 "(" - PARAM@8450..8451 - DESTRUCT_FULL@8450..8451 - NAME@8450..8451 - IDENT@8450..8451 "o" - COMMA@8451..8452 "," - WHITESPACE@8452..8453 " " - PARAM@8453..8454 - DESTRUCT_FULL@8453..8454 - NAME@8453..8454 - IDENT@8453..8454 "f" - R_PAREN@8454..8455 ")" - COLONCOLON@8455..8457 "::" - WHITESPACE@8457..8462 "\n " - EXPR_APPLY@8462..8489 - EXPR_INDEX@8462..8477 - EXPR_VAR@8462..8465 - NAME@8462..8465 - IDENT@8462..8465 "std" - DOT@8465..8466 "." - NAME@8466..8477 - IDENT@8466..8477 "objectHasEx" - ARGS_DESC@8477..8489 - L_PAREN@8477..8478 "(" - ARG@8478..8479 - EXPR_VAR@8478..8479 - NAME@8478..8479 - IDENT@8478..8479 "o" - COMMA@8479..8480 "," - WHITESPACE@8480..8481 " " - ARG@8481..8482 - EXPR_VAR@8481..8482 - NAME@8481..8482 - IDENT@8481..8482 "f" - COMMA@8482..8483 "," - WHITESPACE@8483..8484 " " - ARG@8484..8488 - EXPR_LITERAL@8484..8488 - TRUE_KW@8484..8488 "true" - R_PAREN@8488..8489 ")" - COMMA@8489..8490 "," - WHITESPACE@8490..8494 "\n\n " - MEMBER_FIELD_METHOD@8494..8551 - FIELD_NAME_FIXED@8494..8506 - NAME@8494..8506 - IDENT@8494..8506 "objectValues" - PARAMS_DESC@8506..8509 - L_PAREN@8506..8507 "(" - PARAM@8507..8508 - DESTRUCT_FULL@8507..8508 - NAME@8507..8508 - IDENT@8507..8508 "o" - R_PAREN@8508..8509 ")" - COLONCOLON@8509..8511 "::" - WHITESPACE@8511..8516 "\n " - EXPR_ARRAY_COMP@8516..8551 - L_BRACK@8516..8517 "[" - EXPR_INDEX_EXPR@8517..8521 - LHS_EXPR@8517..8518 - EXPR_VAR@8517..8518 - NAME@8517..8518 - IDENT@8517..8518 "o" - L_BRACK@8518..8519 "[" - EXPR_VAR@8519..8520 - NAME@8519..8520 - IDENT@8519..8520 "k" - R_BRACK@8520..8521 "]" - WHITESPACE@8521..8522 " " - FOR_SPEC@8522..8550 - FOR_KW@8522..8525 "for" - WHITESPACE@8525..8526 " " - NAME@8526..8527 - IDENT@8526..8527 "k" - WHITESPACE@8527..8528 " " - IN_KW@8528..8530 "in" - WHITESPACE@8530..8531 " " - EXPR_APPLY@8531..8550 - EXPR_INDEX@8531..8547 - EXPR_VAR@8531..8534 - NAME@8531..8534 - IDENT@8531..8534 "std" - DOT@8534..8535 "." - NAME@8535..8547 - IDENT@8535..8547 "objectFields" - ARGS_DESC@8547..8550 - L_PAREN@8547..8548 "(" - ARG@8548..8549 - EXPR_VAR@8548..8549 - NAME@8548..8549 - IDENT@8548..8549 "o" - R_PAREN@8549..8550 ")" - R_BRACK@8550..8551 "]" - COMMA@8551..8552 "," - WHITESPACE@8552..8556 "\n\n " - MEMBER_FIELD_METHOD@8556..8619 - FIELD_NAME_FIXED@8556..8571 - NAME@8556..8571 - IDENT@8556..8571 "objectValuesAll" - PARAMS_DESC@8571..8574 - L_PAREN@8571..8572 "(" - PARAM@8572..8573 - DESTRUCT_FULL@8572..8573 - NAME@8572..8573 - IDENT@8572..8573 "o" - R_PAREN@8573..8574 ")" - COLONCOLON@8574..8576 "::" - WHITESPACE@8576..8581 "\n " - EXPR_ARRAY_COMP@8581..8619 - L_BRACK@8581..8582 "[" - EXPR_INDEX_EXPR@8582..8586 - LHS_EXPR@8582..8583 - EXPR_VAR@8582..8583 - NAME@8582..8583 - IDENT@8582..8583 "o" - L_BRACK@8583..8584 "[" - EXPR_VAR@8584..8585 - NAME@8584..8585 - IDENT@8584..8585 "k" - R_BRACK@8585..8586 "]" - WHITESPACE@8586..8587 " " - FOR_SPEC@8587..8618 - FOR_KW@8587..8590 "for" - WHITESPACE@8590..8591 " " - NAME@8591..8592 - IDENT@8591..8592 "k" - WHITESPACE@8592..8593 " " - IN_KW@8593..8595 "in" - WHITESPACE@8595..8596 " " - EXPR_APPLY@8596..8618 - EXPR_INDEX@8596..8615 - EXPR_VAR@8596..8599 - NAME@8596..8599 - IDENT@8596..8599 "std" - DOT@8599..8600 "." - NAME@8600..8615 - IDENT@8600..8615 "objectFieldsAll" - ARGS_DESC@8615..8618 - L_PAREN@8615..8616 "(" - ARG@8616..8617 - EXPR_VAR@8616..8617 - NAME@8616..8617 - IDENT@8616..8617 "o" - R_PAREN@8617..8618 ")" - R_BRACK@8618..8619 "]" - COMMA@8619..8620 "," - WHITESPACE@8620..8624 "\n\n " - MEMBER_FIELD_METHOD@8624..8758 - FIELD_NAME_FIXED@8624..8635 - NAME@8624..8635 - IDENT@8624..8635 "resolvePath" - PARAMS_DESC@8635..8641 - L_PAREN@8635..8636 "(" - PARAM@8636..8637 - DESTRUCT_FULL@8636..8637 - NAME@8636..8637 - IDENT@8636..8637 "f" - COMMA@8637..8638 "," - WHITESPACE@8638..8639 " " - PARAM@8639..8640 - DESTRUCT_FULL@8639..8640 - NAME@8639..8640 - IDENT@8639..8640 "r" - R_PAREN@8640..8641 ")" - COLONCOLON@8641..8643 "::" - WHITESPACE@8643..8648 "\n " - STMT_LOCAL@8648..8678 - LOCAL_KW@8648..8653 "local" - WHITESPACE@8653..8654 " " - BIND_DESTRUCT@8654..8677 - DESTRUCT_FULL@8654..8657 - NAME@8654..8657 - IDENT@8654..8657 "arr" - WHITESPACE@8657..8658 " " - ASSIGN@8658..8659 "=" - WHITESPACE@8659..8660 " " - EXPR_APPLY@8660..8677 - EXPR_INDEX@8660..8669 - EXPR_VAR@8660..8663 - NAME@8660..8663 - IDENT@8660..8663 "std" - DOT@8663..8664 "." - NAME@8664..8669 - IDENT@8664..8669 "split" - ARGS_DESC@8669..8677 - L_PAREN@8669..8670 "(" - ARG@8670..8671 - EXPR_VAR@8670..8671 - NAME@8670..8671 - IDENT@8670..8671 "f" - COMMA@8671..8672 "," - WHITESPACE@8672..8673 " " - ARG@8673..8676 - EXPR_STRING@8673..8676 - STRING_SINGLE@8673..8676 "'/'" - R_PAREN@8676..8677 ")" - SEMI@8677..8678 ";" - WHITESPACE@8678..8683 "\n " - EXPR_APPLY@8683..8758 - EXPR_INDEX@8683..8691 - EXPR_VAR@8683..8686 - NAME@8683..8686 - IDENT@8683..8686 "std" - DOT@8686..8687 "." - NAME@8687..8691 - IDENT@8687..8691 "join" - ARGS_DESC@8691..8758 - L_PAREN@8691..8692 "(" - ARG@8692..8695 - EXPR_STRING@8692..8695 - STRING_SINGLE@8692..8695 "'/'" - COMMA@8695..8696 "," - WHITESPACE@8696..8697 " " - ARG@8697..8757 - EXPR_BINARY@8697..8757 - LHS_EXPR@8697..8751 - EXPR_APPLY@8697..8751 - EXPR_INDEX@8697..8710 - EXPR_VAR@8697..8700 - NAME@8697..8700 - IDENT@8697..8700 "std" - DOT@8700..8701 "." - NAME@8701..8710 - IDENT@8701..8710 "makeArray" - ARGS_DESC@8710..8751 - L_PAREN@8710..8711 "(" - ARG@8711..8730 - EXPR_BINARY@8711..8730 - LHS_EXPR@8711..8726 - EXPR_APPLY@8711..8726 - EXPR_INDEX@8711..8721 - EXPR_VAR@8711..8714 - NAME@8711..8714 - IDENT@8711..8714 "std" - DOT@8714..8715 "." - NAME@8715..8721 - IDENT@8715..8721 "length" - ARGS_DESC@8721..8726 - L_PAREN@8721..8722 "(" - ARG@8722..8725 - EXPR_VAR@8722..8725 - NAME@8722..8725 - IDENT@8722..8725 "arr" - R_PAREN@8725..8726 ")" - WHITESPACE@8726..8727 " " - MINUS@8727..8728 "-" - WHITESPACE@8728..8729 " " - EXPR_NUMBER@8729..8730 - FLOAT@8729..8730 "1" - COMMA@8730..8731 "," - WHITESPACE@8731..8732 " " - ARG@8732..8750 - EXPR_FUNCTION@8732..8750 - FUNCTION_KW@8732..8740 "function" - PARAMS_DESC@8740..8743 - L_PAREN@8740..8741 "(" - PARAM@8741..8742 - DESTRUCT_FULL@8741..8742 - NAME@8741..8742 - IDENT@8741..8742 "i" - R_PAREN@8742..8743 ")" - WHITESPACE@8743..8744 " " - EXPR_INDEX_EXPR@8744..8750 - LHS_EXPR@8744..8747 - EXPR_VAR@8744..8747 - NAME@8744..8747 - IDENT@8744..8747 "arr" - L_BRACK@8747..8748 "[" - EXPR_VAR@8748..8749 - NAME@8748..8749 - IDENT@8748..8749 "i" - R_BRACK@8749..8750 "]" - R_PAREN@8750..8751 ")" - WHITESPACE@8751..8752 " " - PLUS@8752..8753 "+" - WHITESPACE@8753..8754 " " - EXPR_ARRAY@8754..8757 - L_BRACK@8754..8755 "[" - EXPR_VAR@8755..8756 - NAME@8755..8756 - IDENT@8755..8756 "r" - R_BRACK@8756..8757 "]" - R_PAREN@8757..8758 ")" - COMMA@8758..8759 "," - WHITESPACE@8759..8763 "\n\n " - MEMBER_FIELD_METHOD@8763..9216 - FIELD_NAME_FIXED@8763..8768 - NAME@8763..8768 - IDENT@8763..8768 "prune" - PARAMS_DESC@8768..8771 - L_PAREN@8768..8769 "(" - PARAM@8769..8770 - DESTRUCT_FULL@8769..8770 - NAME@8769..8770 - IDENT@8769..8770 "a" - R_PAREN@8770..8771 ")" - COLONCOLON@8771..8773 "::" - WHITESPACE@8773..8778 "\n " - STMT_LOCAL@8778..8982 - LOCAL_KW@8778..8783 "local" - WHITESPACE@8783..8784 " " - BIND_FUNCTION@8784..8981 - NAME@8784..8793 - IDENT@8784..8793 "isContent" - PARAMS_DESC@8793..8796 - L_PAREN@8793..8794 "(" - PARAM@8794..8795 - DESTRUCT_FULL@8794..8795 - NAME@8794..8795 - IDENT@8794..8795 "b" - R_PAREN@8795..8796 ")" - WHITESPACE@8796..8797 " " - ASSIGN@8797..8798 "=" - WHITESPACE@8798..8805 "\n " - EXPR_IF_THEN_ELSE@8805..8981 - IF_KW@8805..8807 "if" - WHITESPACE@8807..8808 " " - EXPR_BINARY@8808..8817 - LHS_EXPR@8808..8809 - EXPR_VAR@8808..8809 - NAME@8808..8809 - IDENT@8808..8809 "b" - WHITESPACE@8809..8810 " " - EQ@8810..8812 "==" - WHITESPACE@8812..8813 " " - EXPR_LITERAL@8813..8817 - NULL_KW@8813..8817 "null" - WHITESPACE@8817..8818 " " - THEN_KW@8818..8822 "then" - WHITESPACE@8822..8831 "\n " - TRUE_EXPR@8831..8836 - EXPR_LITERAL@8831..8836 - FALSE_KW@8831..8836 "false" - WHITESPACE@8836..8843 "\n " - ELSE_KW@8843..8847 "else" - WHITESPACE@8847..8848 " " - FALSE_EXPR@8848..8981 - EXPR_IF_THEN_ELSE@8848..8981 - IF_KW@8848..8850 "if" - WHITESPACE@8850..8851 " " - EXPR_APPLY@8851..8865 - EXPR_INDEX@8851..8862 - EXPR_VAR@8851..8854 - NAME@8851..8854 - IDENT@8851..8854 "std" - DOT@8854..8855 "." - NAME@8855..8862 - IDENT@8855..8862 "isArray" - ARGS_DESC@8862..8865 - L_PAREN@8862..8863 "(" - ARG@8863..8864 - EXPR_VAR@8863..8864 - NAME@8863..8864 - IDENT@8863..8864 "b" - R_PAREN@8864..8865 ")" - WHITESPACE@8865..8866 " " - THEN_KW@8866..8870 "then" - WHITESPACE@8870..8879 "\n " - TRUE_EXPR@8879..8896 - EXPR_BINARY@8879..8896 - LHS_EXPR@8879..8892 - EXPR_APPLY@8879..8892 - EXPR_INDEX@8879..8889 - EXPR_VAR@8879..8882 - NAME@8879..8882 - IDENT@8879..8882 "std" - DOT@8882..8883 "." - NAME@8883..8889 - IDENT@8883..8889 "length" - ARGS_DESC@8889..8892 - L_PAREN@8889..8890 "(" - ARG@8890..8891 - EXPR_VAR@8890..8891 - NAME@8890..8891 - IDENT@8890..8891 "b" - R_PAREN@8891..8892 ")" - WHITESPACE@8892..8893 " " - GT@8893..8894 ">" - WHITESPACE@8894..8895 " " - EXPR_NUMBER@8895..8896 - FLOAT@8895..8896 "0" - WHITESPACE@8896..8903 "\n " - ELSE_KW@8903..8907 "else" - WHITESPACE@8907..8908 " " - FALSE_EXPR@8908..8981 - EXPR_IF_THEN_ELSE@8908..8981 - IF_KW@8908..8910 "if" - WHITESPACE@8910..8911 " " - EXPR_APPLY@8911..8926 - EXPR_INDEX@8911..8923 - EXPR_VAR@8911..8914 - NAME@8911..8914 - IDENT@8911..8914 "std" - DOT@8914..8915 "." - NAME@8915..8923 - IDENT@8915..8923 "isObject" - ARGS_DESC@8923..8926 - L_PAREN@8923..8924 "(" - ARG@8924..8925 - EXPR_VAR@8924..8925 - NAME@8924..8925 - IDENT@8924..8925 "b" - R_PAREN@8925..8926 ")" - WHITESPACE@8926..8927 " " - THEN_KW@8927..8931 "then" - WHITESPACE@8931..8940 "\n " - TRUE_EXPR@8940..8957 - EXPR_BINARY@8940..8957 - LHS_EXPR@8940..8953 - EXPR_APPLY@8940..8953 - EXPR_INDEX@8940..8950 - EXPR_VAR@8940..8943 - NAME@8940..8943 - IDENT@8940..8943 "std" - DOT@8943..8944 "." - NAME@8944..8950 - IDENT@8944..8950 "length" - ARGS_DESC@8950..8953 - L_PAREN@8950..8951 "(" - ARG@8951..8952 - EXPR_VAR@8951..8952 - NAME@8951..8952 - IDENT@8951..8952 "b" - R_PAREN@8952..8953 ")" - WHITESPACE@8953..8954 " " - GT@8954..8955 ">" - WHITESPACE@8955..8956 " " - EXPR_NUMBER@8956..8957 - FLOAT@8956..8957 "0" - WHITESPACE@8957..8964 "\n " - ELSE_KW@8964..8968 "else" - WHITESPACE@8968..8977 "\n " - FALSE_EXPR@8977..8981 - EXPR_LITERAL@8977..8981 - TRUE_KW@8977..8981 "true" - SEMI@8981..8982 ";" - WHITESPACE@8982..8987 "\n " - EXPR_IF_THEN_ELSE@8987..9216 - IF_KW@8987..8989 "if" - WHITESPACE@8989..8990 " " - EXPR_APPLY@8990..9004 - EXPR_INDEX@8990..9001 - EXPR_VAR@8990..8993 - NAME@8990..8993 - IDENT@8990..8993 "std" - DOT@8993..8994 "." - NAME@8994..9001 - IDENT@8994..9001 "isArray" - ARGS_DESC@9001..9004 - L_PAREN@9001..9002 "(" - ARG@9002..9003 - EXPR_VAR@9002..9003 - NAME@9002..9003 - IDENT@9002..9003 "a" - R_PAREN@9003..9004 ")" - WHITESPACE@9004..9005 " " - THEN_KW@9005..9009 "then" - WHITESPACE@9009..9016 "\n " - TRUE_EXPR@9016..9066 - EXPR_ARRAY_COMP@9016..9066 - L_BRACK@9016..9017 "[" - EXPR_APPLY@9017..9029 - EXPR_INDEX@9017..9026 - EXPR_VAR@9017..9020 - NAME@9017..9020 - IDENT@9017..9020 "std" - DOT@9020..9021 "." - NAME@9021..9026 - IDENT@9021..9026 "prune" - ARGS_DESC@9026..9029 - L_PAREN@9026..9027 "(" - ARG@9027..9028 - EXPR_VAR@9027..9028 - NAME@9027..9028 - IDENT@9027..9028 "x" - R_PAREN@9028..9029 ")" - WHITESPACE@9029..9030 " " - FOR_SPEC@9030..9040 - FOR_KW@9030..9033 "for" - WHITESPACE@9033..9034 " " - NAME@9034..9035 - IDENT@9034..9035 "x" - WHITESPACE@9035..9036 " " - IN_KW@9036..9038 "in" - WHITESPACE@9038..9039 " " - EXPR_VAR@9039..9040 - NAME@9039..9040 - IDENT@9039..9040 "a" - WHITESPACE@9040..9041 " " - IF_SPEC@9041..9065 - IF_KW@9041..9043 "if" - WHITESPACE@9043..9044 " " - EXPR_APPLY@9044..9065 - EXPR_VAR@9044..9053 - NAME@9044..9053 - IDENT@9044..9053 "isContent" - ARGS_DESC@9053..9065 - L_PAREN@9053..9054 "(" - ARG@9054..9064 - EXPR_APPLY@9054..9064 - EXPR_INDEX@9054..9061 - EXPR_LITERAL@9054..9055 - DOLLAR@9054..9055 "$" - DOT@9055..9056 "." - NAME@9056..9061 - IDENT@9056..9061 "prune" - ARGS_DESC@9061..9064 - L_PAREN@9061..9062 "(" - ARG@9062..9063 - EXPR_VAR@9062..9063 - NAME@9062..9063 - IDENT@9062..9063 "x" - R_PAREN@9063..9064 ")" - R_PAREN@9064..9065 ")" - R_BRACK@9065..9066 "]" - WHITESPACE@9066..9071 "\n " - ELSE_KW@9071..9075 "else" - WHITESPACE@9075..9076 " " - FALSE_EXPR@9076..9216 - EXPR_IF_THEN_ELSE@9076..9216 - IF_KW@9076..9078 "if" - WHITESPACE@9078..9079 " " - EXPR_APPLY@9079..9094 - EXPR_INDEX@9079..9091 - EXPR_VAR@9079..9082 - NAME@9079..9082 - IDENT@9079..9082 "std" - DOT@9082..9083 "." - NAME@9083..9091 - IDENT@9083..9091 "isObject" - ARGS_DESC@9091..9094 - L_PAREN@9091..9092 "(" - ARG@9092..9093 - EXPR_VAR@9092..9093 - NAME@9092..9093 - IDENT@9092..9093 "a" - R_PAREN@9093..9094 ")" - WHITESPACE@9094..9095 " " - THEN_KW@9095..9099 "then" - WHITESPACE@9099..9100 " " - TRUE_EXPR@9100..9203 - EXPR_OBJECT@9100..9203 - OBJ_BODY_COMP@9100..9203 - L_BRACE@9100..9101 "{" - WHITESPACE@9101..9108 "\n " - MEMBER_FIELD_NORMAL@9108..9126 - FIELD_NAME_DYNAMIC@9108..9111 - L_BRACK@9108..9109 "[" - EXPR_VAR@9109..9110 - NAME@9109..9110 - IDENT@9109..9110 "x" - R_BRACK@9110..9111 "]" - COLON@9111..9112 ":" - WHITESPACE@9112..9113 " " - EXPR_APPLY@9113..9126 - EXPR_INDEX@9113..9120 - EXPR_LITERAL@9113..9114 - DOLLAR@9113..9114 "$" - DOT@9114..9115 "." - NAME@9115..9120 - IDENT@9115..9120 "prune" - ARGS_DESC@9120..9126 - L_PAREN@9120..9121 "(" - ARG@9121..9125 - EXPR_INDEX_EXPR@9121..9125 - LHS_EXPR@9121..9122 - EXPR_VAR@9121..9122 - NAME@9121..9122 - IDENT@9121..9122 "a" - L_BRACK@9122..9123 "[" - EXPR_VAR@9123..9124 - NAME@9123..9124 - IDENT@9123..9124 "x" - R_BRACK@9124..9125 "]" - R_PAREN@9125..9126 ")" - WHITESPACE@9126..9133 "\n " - FOR_SPEC@9133..9161 - FOR_KW@9133..9136 "for" - WHITESPACE@9136..9137 " " - NAME@9137..9138 - IDENT@9137..9138 "x" - WHITESPACE@9138..9139 " " - IN_KW@9139..9141 "in" - WHITESPACE@9141..9142 " " - EXPR_APPLY@9142..9161 - EXPR_INDEX@9142..9158 - EXPR_VAR@9142..9145 - NAME@9142..9145 - IDENT@9142..9145 "std" - DOT@9145..9146 "." - NAME@9146..9158 - IDENT@9146..9158 "objectFields" - ARGS_DESC@9158..9161 - L_PAREN@9158..9159 "(" - ARG@9159..9160 - EXPR_VAR@9159..9160 - NAME@9159..9160 - IDENT@9159..9160 "a" - R_PAREN@9160..9161 ")" - WHITESPACE@9161..9168 "\n " - IF_SPEC@9168..9197 - IF_KW@9168..9170 "if" - WHITESPACE@9170..9171 " " - EXPR_APPLY@9171..9197 - EXPR_VAR@9171..9180 - NAME@9171..9180 - IDENT@9171..9180 "isContent" - ARGS_DESC@9180..9197 - L_PAREN@9180..9181 "(" - ARG@9181..9196 - EXPR_APPLY@9181..9196 - EXPR_INDEX@9181..9190 - EXPR_VAR@9181..9184 - NAME@9181..9184 - IDENT@9181..9184 "std" - DOT@9184..9185 "." - NAME@9185..9190 - IDENT@9185..9190 "prune" - ARGS_DESC@9190..9196 - L_PAREN@9190..9191 "(" - ARG@9191..9195 - EXPR_INDEX_EXPR@9191..9195 - LHS_EXPR@9191..9192 - EXPR_VAR@9191..9192 - NAME@9191..9192 - IDENT@9191..9192 "a" - L_BRACK@9192..9193 "[" - EXPR_VAR@9193..9194 - NAME@9193..9194 - IDENT@9193..9194 "x" - R_BRACK@9194..9195 "]" - R_PAREN@9195..9196 ")" - R_PAREN@9196..9197 ")" - WHITESPACE@9197..9202 "\n " - R_BRACE@9202..9203 "}" - WHITESPACE@9203..9204 " " - ELSE_KW@9204..9208 "else" - WHITESPACE@9208..9215 "\n " - FALSE_EXPR@9215..9216 - EXPR_VAR@9215..9216 - NAME@9215..9216 - IDENT@9215..9216 "a" - COMMA@9216..9217 "," - WHITESPACE@9217..9221 "\n\n " - MEMBER_FIELD_METHOD@9221..9436 - FIELD_NAME_FIXED@9221..9225 - NAME@9221..9225 - IDENT@9221..9225 "find" - PARAMS_DESC@9225..9237 - L_PAREN@9225..9226 "(" - PARAM@9226..9231 - DESTRUCT_FULL@9226..9231 - NAME@9226..9231 - IDENT@9226..9231 "value" - COMMA@9231..9232 "," - WHITESPACE@9232..9233 " " - PARAM@9233..9236 - DESTRUCT_FULL@9233..9236 - NAME@9233..9236 - IDENT@9233..9236 "arr" - R_PAREN@9236..9237 ")" - COLONCOLON@9237..9239 "::" - WHITESPACE@9239..9244 "\n " - EXPR_IF_THEN_ELSE@9244..9436 - IF_KW@9244..9246 "if" - WHITESPACE@9246..9247 " " - EXPR_UNARY@9247..9264 - NOT@9247..9248 "!" - EXPR_APPLY@9248..9264 - EXPR_INDEX@9248..9259 - EXPR_VAR@9248..9251 - NAME@9248..9251 - IDENT@9248..9251 "std" - DOT@9251..9252 "." - NAME@9252..9259 - IDENT@9252..9259 "isArray" - ARGS_DESC@9259..9264 - L_PAREN@9259..9260 "(" - ARG@9260..9263 - EXPR_VAR@9260..9263 - NAME@9260..9263 - IDENT@9260..9263 "arr" - R_PAREN@9263..9264 ")" - WHITESPACE@9264..9265 " " - THEN_KW@9265..9269 "then" - WHITESPACE@9269..9276 "\n " - TRUE_EXPR@9276..9346 - EXPR_ERROR@9276..9346 - ERROR_KW@9276..9281 "error" - WHITESPACE@9281..9282 " " - EXPR_BINARY@9282..9346 - LHS_EXPR@9282..9330 - EXPR_STRING@9282..9330 - STRING_SINGLE@9282..9330 "'find second paramete ..." - WHITESPACE@9330..9331 " " - PLUS@9331..9332 "+" - WHITESPACE@9332..9333 " " - EXPR_APPLY@9333..9346 - EXPR_INDEX@9333..9341 - EXPR_VAR@9333..9336 - NAME@9333..9336 - IDENT@9333..9336 "std" - DOT@9336..9337 "." - NAME@9337..9341 - IDENT@9337..9341 "type" - ARGS_DESC@9341..9346 - L_PAREN@9341..9342 "(" - ARG@9342..9345 - EXPR_VAR@9342..9345 - NAME@9342..9345 - IDENT@9342..9345 "arr" - R_PAREN@9345..9346 ")" - WHITESPACE@9346..9351 "\n " - ELSE_KW@9351..9355 "else" - WHITESPACE@9355..9362 "\n " - FALSE_EXPR@9362..9436 - EXPR_APPLY@9362..9436 - EXPR_INDEX@9362..9372 - EXPR_VAR@9362..9365 - NAME@9362..9365 - IDENT@9362..9365 "std" - DOT@9365..9366 "." - NAME@9366..9372 - IDENT@9366..9372 "filter" - ARGS_DESC@9372..9436 - L_PAREN@9372..9373 "(" - ARG@9373..9400 - EXPR_FUNCTION@9373..9400 - FUNCTION_KW@9373..9381 "function" - PARAMS_DESC@9381..9384 - L_PAREN@9381..9382 "(" - PARAM@9382..9383 - DESTRUCT_FULL@9382..9383 - NAME@9382..9383 - IDENT@9382..9383 "i" - R_PAREN@9383..9384 ")" - WHITESPACE@9384..9385 " " - EXPR_BINARY@9385..9400 - LHS_EXPR@9385..9391 - EXPR_INDEX_EXPR@9385..9391 - LHS_EXPR@9385..9388 - EXPR_VAR@9385..9388 - NAME@9385..9388 - IDENT@9385..9388 "arr" - L_BRACK@9388..9389 "[" - EXPR_VAR@9389..9390 - NAME@9389..9390 - IDENT@9389..9390 "i" - R_BRACK@9390..9391 "]" - WHITESPACE@9391..9392 " " - EQ@9392..9394 "==" - WHITESPACE@9394..9395 " " - EXPR_VAR@9395..9400 - NAME@9395..9400 - IDENT@9395..9400 "value" - COMMA@9400..9401 "," - WHITESPACE@9401..9402 " " - ARG@9402..9435 - EXPR_APPLY@9402..9435 - EXPR_INDEX@9402..9411 - EXPR_VAR@9402..9405 - NAME@9402..9405 - IDENT@9402..9405 "std" - DOT@9405..9406 "." - NAME@9406..9411 - IDENT@9406..9411 "range" - ARGS_DESC@9411..9435 - L_PAREN@9411..9412 "(" - ARG@9412..9413 - EXPR_NUMBER@9412..9413 - FLOAT@9412..9413 "0" - COMMA@9413..9414 "," - WHITESPACE@9414..9415 " " - ARG@9415..9434 - EXPR_BINARY@9415..9434 - LHS_EXPR@9415..9430 - EXPR_APPLY@9415..9430 - EXPR_INDEX@9415..9425 - EXPR_VAR@9415..9418 - NAME@9415..9418 - IDENT@9415..9418 "std" - DOT@9418..9419 "." - NAME@9419..9425 - IDENT@9419..9425 "length" - ARGS_DESC@9425..9430 - L_PAREN@9425..9426 "(" - ARG@9426..9429 - EXPR_VAR@9426..9429 - NAME@9426..9429 - IDENT@9426..9429 "arr" - R_PAREN@9429..9430 ")" - WHITESPACE@9430..9431 " " - MINUS@9431..9432 "-" - WHITESPACE@9432..9433 " " - EXPR_NUMBER@9433..9434 - FLOAT@9433..9434 "1" - R_PAREN@9434..9435 ")" - R_PAREN@9435..9436 ")" - COMMA@9436..9437 "," - WHITESPACE@9437..9441 "\n\n " - SINGLE_LINE_SLASH_COMMENT@9441..9451 "// Compat\n" - WHITESPACE@9451..9453 " " - MEMBER_FIELD_METHOD@9453..9563 - FIELD_NAME_FIXED@9453..9468 - NAME@9453..9468 - IDENT@9453..9468 "__compare_array" - PARAMS_DESC@9468..9480 - L_PAREN@9468..9469 "(" - PARAM@9469..9473 - DESTRUCT_FULL@9469..9473 - NAME@9469..9473 - IDENT@9469..9473 "arr1" - COMMA@9473..9474 "," - WHITESPACE@9474..9475 " " - PARAM@9475..9479 - DESTRUCT_FULL@9475..9479 - NAME@9475..9479 - IDENT@9475..9479 "arr2" - R_PAREN@9479..9480 ")" - COLONCOLON@9480..9482 "::" - WHITESPACE@9482..9487 "\n " - EXPR_ASSERT@9487..9563 - ASSERTION@9487..9532 - ASSERT_KW@9487..9493 "assert" - WHITESPACE@9493..9494 " " - LHS_EXPR@9494..9532 - EXPR_BINARY@9494..9532 - LHS_EXPR@9494..9511 - EXPR_APPLY@9494..9511 - EXPR_INDEX@9494..9505 - EXPR_VAR@9494..9497 - NAME@9494..9497 - IDENT@9494..9497 "std" - DOT@9497..9498 "." - NAME@9498..9505 - IDENT@9498..9505 "isArray" - ARGS_DESC@9505..9511 - L_PAREN@9505..9506 "(" - ARG@9506..9510 - EXPR_VAR@9506..9510 - NAME@9506..9510 - IDENT@9506..9510 "arr1" - R_PAREN@9510..9511 ")" - WHITESPACE@9511..9512 " " - AND@9512..9514 "&&" - WHITESPACE@9514..9515 " " - EXPR_APPLY@9515..9532 - EXPR_INDEX@9515..9526 - EXPR_VAR@9515..9518 - NAME@9515..9518 - IDENT@9515..9518 "std" - DOT@9518..9519 "." - NAME@9519..9526 - IDENT@9519..9526 "isArray" - ARGS_DESC@9526..9532 - L_PAREN@9526..9527 "(" - ARG@9527..9531 - EXPR_VAR@9527..9531 - NAME@9527..9531 - IDENT@9527..9531 "arr2" - R_PAREN@9531..9532 ")" - SEMI@9532..9533 ";" - WHITESPACE@9533..9538 "\n " - EXPR_APPLY@9538..9563 - EXPR_INDEX@9538..9551 - EXPR_VAR@9538..9541 - NAME@9538..9541 - IDENT@9538..9541 "std" - DOT@9541..9542 "." - NAME@9542..9551 - IDENT@9542..9551 "__compare" - ARGS_DESC@9551..9563 - L_PAREN@9551..9552 "(" - ARG@9552..9556 - EXPR_VAR@9552..9556 - NAME@9552..9556 - IDENT@9552..9556 "arr1" - COMMA@9556..9557 "," - WHITESPACE@9557..9558 " " - ARG@9558..9562 - EXPR_VAR@9558..9562 - NAME@9558..9562 - IDENT@9558..9562 "arr2" - R_PAREN@9562..9563 ")" - COMMA@9563..9564 "," - WHITESPACE@9564..9567 "\n " - MEMBER_FIELD_METHOD@9567..9631 - FIELD_NAME_FIXED@9567..9579 - NAME@9567..9579 - IDENT@9567..9579 "__array_less" - PARAMS_DESC@9579..9591 - L_PAREN@9579..9580 "(" - PARAM@9580..9584 - DESTRUCT_FULL@9580..9584 - NAME@9580..9584 - IDENT@9580..9584 "arr1" - COMMA@9584..9585 "," - WHITESPACE@9585..9586 " " - PARAM@9586..9590 - DESTRUCT_FULL@9586..9590 - NAME@9586..9590 - IDENT@9586..9590 "arr2" - R_PAREN@9590..9591 ")" - COLONCOLON@9591..9593 "::" - WHITESPACE@9593..9594 " " - EXPR_BINARY@9594..9631 - LHS_EXPR@9594..9625 - EXPR_APPLY@9594..9625 - EXPR_INDEX@9594..9613 - EXPR_VAR@9594..9597 - NAME@9594..9597 - IDENT@9594..9597 "std" - DOT@9597..9598 "." - NAME@9598..9613 - IDENT@9598..9613 "__compare_array" - ARGS_DESC@9613..9625 - L_PAREN@9613..9614 "(" - ARG@9614..9618 - EXPR_VAR@9614..9618 - NAME@9614..9618 - IDENT@9614..9618 "arr1" - COMMA@9618..9619 "," - WHITESPACE@9619..9620 " " - ARG@9620..9624 - EXPR_VAR@9620..9624 - NAME@9620..9624 - IDENT@9620..9624 "arr2" - R_PAREN@9624..9625 ")" - WHITESPACE@9625..9626 " " - EQ@9626..9628 "==" - WHITESPACE@9628..9629 " " - EXPR_UNARY@9629..9631 - MINUS@9629..9630 "-" - EXPR_NUMBER@9630..9631 - FLOAT@9630..9631 "1" - COMMA@9631..9632 "," - WHITESPACE@9632..9635 "\n " - MEMBER_FIELD_METHOD@9635..9701 - FIELD_NAME_FIXED@9635..9650 - NAME@9635..9650 - IDENT@9635..9650 "__array_greater" - PARAMS_DESC@9650..9662 - L_PAREN@9650..9651 "(" - PARAM@9651..9655 - DESTRUCT_FULL@9651..9655 - NAME@9651..9655 - IDENT@9651..9655 "arr1" - COMMA@9655..9656 "," - WHITESPACE@9656..9657 " " - PARAM@9657..9661 - DESTRUCT_FULL@9657..9661 - NAME@9657..9661 - IDENT@9657..9661 "arr2" - R_PAREN@9661..9662 ")" - COLONCOLON@9662..9664 "::" - WHITESPACE@9664..9665 " " - EXPR_BINARY@9665..9701 - LHS_EXPR@9665..9696 - EXPR_APPLY@9665..9696 - EXPR_INDEX@9665..9684 - EXPR_VAR@9665..9668 - NAME@9665..9668 - IDENT@9665..9668 "std" - DOT@9668..9669 "." - NAME@9669..9684 - IDENT@9669..9684 "__compare_array" - ARGS_DESC@9684..9696 - L_PAREN@9684..9685 "(" - ARG@9685..9689 - EXPR_VAR@9685..9689 - NAME@9685..9689 - IDENT@9685..9689 "arr1" - COMMA@9689..9690 "," - WHITESPACE@9690..9691 " " - ARG@9691..9695 - EXPR_VAR@9691..9695 - NAME@9691..9695 - IDENT@9691..9695 "arr2" - R_PAREN@9695..9696 ")" - WHITESPACE@9696..9697 " " - EQ@9697..9699 "==" - WHITESPACE@9699..9700 " " - EXPR_NUMBER@9700..9701 - FLOAT@9700..9701 "1" - COMMA@9701..9702 "," - WHITESPACE@9702..9705 "\n " - MEMBER_FIELD_METHOD@9705..9777 - FIELD_NAME_FIXED@9705..9726 - NAME@9705..9726 - IDENT@9705..9726 "__array_less_or_equal" - PARAMS_DESC@9726..9738 - L_PAREN@9726..9727 "(" - PARAM@9727..9731 - DESTRUCT_FULL@9727..9731 - NAME@9727..9731 - IDENT@9727..9731 "arr1" - COMMA@9731..9732 "," - WHITESPACE@9732..9733 " " - PARAM@9733..9737 - DESTRUCT_FULL@9733..9737 - NAME@9733..9737 - IDENT@9733..9737 "arr2" - R_PAREN@9737..9738 ")" - COLONCOLON@9738..9740 "::" - WHITESPACE@9740..9741 " " - EXPR_BINARY@9741..9777 - LHS_EXPR@9741..9772 - EXPR_APPLY@9741..9772 - EXPR_INDEX@9741..9760 - EXPR_VAR@9741..9744 - NAME@9741..9744 - IDENT@9741..9744 "std" - DOT@9744..9745 "." - NAME@9745..9760 - IDENT@9745..9760 "__compare_array" - ARGS_DESC@9760..9772 - L_PAREN@9760..9761 "(" - ARG@9761..9765 - EXPR_VAR@9761..9765 - NAME@9761..9765 - IDENT@9761..9765 "arr1" - COMMA@9765..9766 "," - WHITESPACE@9766..9767 " " - ARG@9767..9771 - EXPR_VAR@9767..9771 - NAME@9767..9771 - IDENT@9767..9771 "arr2" - R_PAREN@9771..9772 ")" - WHITESPACE@9772..9773 " " - LE@9773..9775 "<=" - WHITESPACE@9775..9776 " " - EXPR_NUMBER@9776..9777 - FLOAT@9776..9777 "0" - COMMA@9777..9778 "," - WHITESPACE@9778..9781 "\n " - MEMBER_FIELD_METHOD@9781..9856 - FIELD_NAME_FIXED@9781..9805 - NAME@9781..9805 - IDENT@9781..9805 "__array_greater_or_equal" - PARAMS_DESC@9805..9817 - L_PAREN@9805..9806 "(" - PARAM@9806..9810 - DESTRUCT_FULL@9806..9810 - NAME@9806..9810 - IDENT@9806..9810 "arr1" - COMMA@9810..9811 "," - WHITESPACE@9811..9812 " " - PARAM@9812..9816 - DESTRUCT_FULL@9812..9816 - NAME@9812..9816 - IDENT@9812..9816 "arr2" - R_PAREN@9816..9817 ")" - COLONCOLON@9817..9819 "::" - WHITESPACE@9819..9820 " " - EXPR_BINARY@9820..9856 - LHS_EXPR@9820..9851 - EXPR_APPLY@9820..9851 - EXPR_INDEX@9820..9839 - EXPR_VAR@9820..9823 - NAME@9820..9823 - IDENT@9820..9823 "std" - DOT@9823..9824 "." - NAME@9824..9839 - IDENT@9824..9839 "__compare_array" - ARGS_DESC@9839..9851 - L_PAREN@9839..9840 "(" - ARG@9840..9844 - EXPR_VAR@9840..9844 - NAME@9840..9844 - IDENT@9840..9844 "arr1" - COMMA@9844..9845 "," - WHITESPACE@9845..9846 " " - ARG@9846..9850 - EXPR_VAR@9846..9850 - NAME@9846..9850 - IDENT@9846..9850 "arr2" - R_PAREN@9850..9851 ")" - WHITESPACE@9851..9852 " " - GE@9852..9854 ">=" - WHITESPACE@9854..9855 " " - EXPR_NUMBER@9855..9856 - FLOAT@9855..9856 "0" - COMMA@9856..9857 "," - WHITESPACE@9857..9858 "\n" - R_BRACE@9858..9859 "}" - WHITESPACE@9859..9860 "\n" + EXPR@6704..6705 + EXPR_NUMBER@6704..6705 + FLOAT@6704..6705 "1" + COMMA@6705..6706 "," + WHITESPACE@6706..6707 " " + ARG@6707..6725 + EXPR@6707..6725 + EXPR_FUNCTION@6707..6725 + FUNCTION_KW@6707..6715 "function" + PARAMS_DESC@6715..6718 + L_PAREN@6715..6716 "(" + PARAM@6716..6717 + DESTRUCT_FULL@6716..6717 + NAME@6716..6717 + IDENT@6716..6717 "i" + R_PAREN@6717..6718 ")" + WHITESPACE@6718..6719 " " + EXPR@6719..6725 + EXPR_VAR@6719..6722 + NAME@6719..6722 + IDENT@6719..6722 "arr" + SUFFIX_INDEX_EXPR@6722..6725 + L_BRACK@6722..6723 "[" + EXPR@6723..6724 + EXPR_VAR@6723..6724 + NAME@6723..6724 + IDENT@6723..6724 "i" + R_BRACK@6724..6725 "]" + R_PAREN@6725..6726 ")" + WHITESPACE@6726..6727 " " + PLUS@6727..6728 "+" + WHITESPACE@6728..6729 " " + EXPR@6729..6732 + EXPR_ARRAY@6729..6732 + L_BRACK@6729..6730 "[" + EXPR@6730..6731 + EXPR_VAR@6730..6731 + NAME@6730..6731 + IDENT@6730..6731 "r" + R_BRACK@6731..6732 "]" + R_PAREN@6732..6733 ")" + COMMA@6733..6734 "," + WHITESPACE@6734..6738 "\n\n " + MEMBER_FIELD_METHOD@6738..7191 + FIELD_NAME_FIXED@6738..6743 + NAME@6738..6743 + IDENT@6738..6743 "prune" + PARAMS_DESC@6743..6746 + L_PAREN@6743..6744 "(" + PARAM@6744..6745 + DESTRUCT_FULL@6744..6745 + NAME@6744..6745 + IDENT@6744..6745 "a" + R_PAREN@6745..6746 ")" + COLONCOLON@6746..6748 "::" + WHITESPACE@6748..6753 "\n " + EXPR@6753..7191 + STMT_LOCAL@6753..6957 + LOCAL_KW@6753..6758 "local" + WHITESPACE@6758..6759 " " + BIND_FUNCTION@6759..6956 + NAME@6759..6768 + IDENT@6759..6768 "isContent" + PARAMS_DESC@6768..6771 + L_PAREN@6768..6769 "(" + PARAM@6769..6770 + DESTRUCT_FULL@6769..6770 + NAME@6769..6770 + IDENT@6769..6770 "b" + R_PAREN@6770..6771 ")" + WHITESPACE@6771..6772 " " + ASSIGN@6772..6773 "=" + WHITESPACE@6773..6780 "\n " + EXPR@6780..6956 + EXPR_IF_THEN_ELSE@6780..6956 + IF_KW@6780..6782 "if" + WHITESPACE@6782..6783 " " + EXPR@6783..6792 + EXPR_BINARY@6783..6792 + EXPR@6783..6784 + EXPR_VAR@6783..6784 + NAME@6783..6784 + IDENT@6783..6784 "b" + WHITESPACE@6784..6785 " " + EQ@6785..6787 "==" + WHITESPACE@6787..6788 " " + EXPR@6788..6792 + EXPR_LITERAL@6788..6792 + NULL_KW@6788..6792 "null" + WHITESPACE@6792..6793 " " + THEN_KW@6793..6797 "then" + WHITESPACE@6797..6806 "\n " + TRUE_EXPR@6806..6811 + EXPR@6806..6811 + EXPR_LITERAL@6806..6811 + FALSE_KW@6806..6811 "false" + WHITESPACE@6811..6818 "\n " + ELSE_KW@6818..6822 "else" + WHITESPACE@6822..6823 " " + FALSE_EXPR@6823..6956 + EXPR@6823..6956 + EXPR_IF_THEN_ELSE@6823..6956 + IF_KW@6823..6825 "if" + WHITESPACE@6825..6826 " " + EXPR@6826..6840 + EXPR_VAR@6826..6829 + NAME@6826..6829 + IDENT@6826..6829 "std" + SUFFIX_INDEX@6829..6837 + DOT@6829..6830 "." + NAME@6830..6837 + IDENT@6830..6837 "isArray" + SUFFIX_APPLY@6837..6840 + ARGS_DESC@6837..6840 + L_PAREN@6837..6838 "(" + ARG@6838..6839 + EXPR@6838..6839 + EXPR_VAR@6838..6839 + NAME@6838..6839 + IDENT@6838..6839 "b" + R_PAREN@6839..6840 ")" + WHITESPACE@6840..6841 " " + THEN_KW@6841..6845 "then" + WHITESPACE@6845..6854 "\n " + TRUE_EXPR@6854..6871 + EXPR@6854..6871 + EXPR_BINARY@6854..6871 + EXPR@6854..6857 + EXPR_VAR@6854..6857 + NAME@6854..6857 + IDENT@6854..6857 "std" + SUFFIX_INDEX@6857..6864 + DOT@6857..6858 "." + NAME@6858..6864 + IDENT@6858..6864 "length" + SUFFIX_APPLY@6864..6867 + ARGS_DESC@6864..6867 + L_PAREN@6864..6865 "(" + ARG@6865..6866 + EXPR@6865..6866 + EXPR_VAR@6865..6866 + NAME@6865..6866 + IDENT@6865..6866 "b" + R_PAREN@6866..6867 ")" + WHITESPACE@6867..6868 " " + GT@6868..6869 ">" + WHITESPACE@6869..6870 " " + EXPR@6870..6871 + EXPR_NUMBER@6870..6871 + FLOAT@6870..6871 "0" + WHITESPACE@6871..6878 "\n " + ELSE_KW@6878..6882 "else" + WHITESPACE@6882..6883 " " + FALSE_EXPR@6883..6956 + EXPR@6883..6956 + EXPR_IF_THEN_ELSE@6883..6956 + IF_KW@6883..6885 "if" + WHITESPACE@6885..6886 " " + EXPR@6886..6901 + EXPR_VAR@6886..6889 + NAME@6886..6889 + IDENT@6886..6889 "std" + SUFFIX_INDEX@6889..6898 + DOT@6889..6890 "." + NAME@6890..6898 + IDENT@6890..6898 "isObject" + SUFFIX_APPLY@6898..6901 + ARGS_DESC@6898..6901 + L_PAREN@6898..6899 "(" + ARG@6899..6900 + EXPR@6899..6900 + EXPR_VAR@6899..6900 + NAME@6899..6900 + IDENT@6899..6900 "b" + R_PAREN@6900..6901 ")" + WHITESPACE@6901..6902 " " + THEN_KW@6902..6906 "then" + WHITESPACE@6906..6915 "\n " + TRUE_EXPR@6915..6932 + EXPR@6915..6932 + EXPR_BINARY@6915..6932 + EXPR@6915..6918 + EXPR_VAR@6915..6918 + NAME@6915..6918 + IDENT@6915..6918 "std" + SUFFIX_INDEX@6918..6925 + DOT@6918..6919 "." + NAME@6919..6925 + IDENT@6919..6925 "length" + SUFFIX_APPLY@6925..6928 + ARGS_DESC@6925..6928 + L_PAREN@6925..6926 "(" + ARG@6926..6927 + EXPR@6926..6927 + EXPR_VAR@6926..6927 + NAME@6926..6927 + IDENT@6926..6927 "b" + R_PAREN@6927..6928 ")" + WHITESPACE@6928..6929 " " + GT@6929..6930 ">" + WHITESPACE@6930..6931 " " + EXPR@6931..6932 + EXPR_NUMBER@6931..6932 + FLOAT@6931..6932 "0" + WHITESPACE@6932..6939 "\n " + ELSE_KW@6939..6943 "else" + WHITESPACE@6943..6952 "\n " + FALSE_EXPR@6952..6956 + EXPR@6952..6956 + EXPR_LITERAL@6952..6956 + TRUE_KW@6952..6956 "true" + SEMI@6956..6957 ";" + WHITESPACE@6957..6962 "\n " + EXPR_IF_THEN_ELSE@6962..7191 + IF_KW@6962..6964 "if" + WHITESPACE@6964..6965 " " + EXPR@6965..6979 + EXPR_VAR@6965..6968 + NAME@6965..6968 + IDENT@6965..6968 "std" + SUFFIX_INDEX@6968..6976 + DOT@6968..6969 "." + NAME@6969..6976 + IDENT@6969..6976 "isArray" + SUFFIX_APPLY@6976..6979 + ARGS_DESC@6976..6979 + L_PAREN@6976..6977 "(" + ARG@6977..6978 + EXPR@6977..6978 + EXPR_VAR@6977..6978 + NAME@6977..6978 + IDENT@6977..6978 "a" + R_PAREN@6978..6979 ")" + WHITESPACE@6979..6980 " " + THEN_KW@6980..6984 "then" + WHITESPACE@6984..6991 "\n " + TRUE_EXPR@6991..7041 + EXPR@6991..7041 + EXPR_ARRAY_COMP@6991..7041 + L_BRACK@6991..6992 "[" + EXPR@6992..7004 + EXPR_VAR@6992..6995 + NAME@6992..6995 + IDENT@6992..6995 "std" + SUFFIX_INDEX@6995..7001 + DOT@6995..6996 "." + NAME@6996..7001 + IDENT@6996..7001 "prune" + SUFFIX_APPLY@7001..7004 + ARGS_DESC@7001..7004 + L_PAREN@7001..7002 "(" + ARG@7002..7003 + EXPR@7002..7003 + EXPR_VAR@7002..7003 + NAME@7002..7003 + IDENT@7002..7003 "x" + R_PAREN@7003..7004 ")" + WHITESPACE@7004..7005 " " + FOR_SPEC@7005..7015 + FOR_KW@7005..7008 "for" + WHITESPACE@7008..7009 " " + DESTRUCT_FULL@7009..7010 + NAME@7009..7010 + IDENT@7009..7010 "x" + WHITESPACE@7010..7011 " " + IN_KW@7011..7013 "in" + WHITESPACE@7013..7014 " " + EXPR@7014..7015 + EXPR_VAR@7014..7015 + NAME@7014..7015 + IDENT@7014..7015 "a" + WHITESPACE@7015..7016 " " + IF_SPEC@7016..7040 + IF_KW@7016..7018 "if" + WHITESPACE@7018..7019 " " + EXPR@7019..7040 + EXPR_VAR@7019..7028 + NAME@7019..7028 + IDENT@7019..7028 "isContent" + SUFFIX_APPLY@7028..7040 + ARGS_DESC@7028..7040 + L_PAREN@7028..7029 "(" + ARG@7029..7039 + EXPR@7029..7039 + EXPR_LITERAL@7029..7030 + DOLLAR@7029..7030 "$" + SUFFIX_INDEX@7030..7036 + DOT@7030..7031 "." + NAME@7031..7036 + IDENT@7031..7036 "prune" + SUFFIX_APPLY@7036..7039 + ARGS_DESC@7036..7039 + L_PAREN@7036..7037 "(" + ARG@7037..7038 + EXPR@7037..7038 + EXPR_VAR@7037..7038 + NAME@7037..7038 + IDENT@7037..7038 "x" + R_PAREN@7038..7039 ")" + R_PAREN@7039..7040 ")" + R_BRACK@7040..7041 "]" + WHITESPACE@7041..7046 "\n " + ELSE_KW@7046..7050 "else" + WHITESPACE@7050..7051 " " + FALSE_EXPR@7051..7191 + EXPR@7051..7191 + EXPR_IF_THEN_ELSE@7051..7191 + IF_KW@7051..7053 "if" + WHITESPACE@7053..7054 " " + EXPR@7054..7069 + EXPR_VAR@7054..7057 + NAME@7054..7057 + IDENT@7054..7057 "std" + SUFFIX_INDEX@7057..7066 + DOT@7057..7058 "." + NAME@7058..7066 + IDENT@7058..7066 "isObject" + SUFFIX_APPLY@7066..7069 + ARGS_DESC@7066..7069 + L_PAREN@7066..7067 "(" + ARG@7067..7068 + EXPR@7067..7068 + EXPR_VAR@7067..7068 + NAME@7067..7068 + IDENT@7067..7068 "a" + R_PAREN@7068..7069 ")" + WHITESPACE@7069..7070 " " + THEN_KW@7070..7074 "then" + WHITESPACE@7074..7075 " " + TRUE_EXPR@7075..7178 + EXPR@7075..7178 + EXPR_OBJECT@7075..7178 + OBJ_BODY_COMP@7075..7178 + L_BRACE@7075..7076 "{" + WHITESPACE@7076..7083 "\n " + MEMBER_FIELD_NORMAL@7083..7101 + FIELD_NAME_DYNAMIC@7083..7086 + L_BRACK@7083..7084 "[" + EXPR@7084..7085 + EXPR_VAR@7084..7085 + NAME@7084..7085 + IDENT@7084..7085 "x" + R_BRACK@7085..7086 "]" + COLON@7086..7087 ":" + WHITESPACE@7087..7088 " " + EXPR@7088..7101 + EXPR_LITERAL@7088..7089 + DOLLAR@7088..7089 "$" + SUFFIX_INDEX@7089..7095 + DOT@7089..7090 "." + NAME@7090..7095 + IDENT@7090..7095 "prune" + SUFFIX_APPLY@7095..7101 + ARGS_DESC@7095..7101 + L_PAREN@7095..7096 "(" + ARG@7096..7100 + EXPR@7096..7100 + EXPR_VAR@7096..7097 + NAME@7096..7097 + IDENT@7096..7097 "a" + SUFFIX_INDEX_EXPR@7097..7100 + L_BRACK@7097..7098 "[" + EXPR@7098..7099 + EXPR_VAR@7098..7099 + NAME@7098..7099 + IDENT@7098..7099 "x" + R_BRACK@7099..7100 "]" + R_PAREN@7100..7101 ")" + WHITESPACE@7101..7108 "\n " + FOR_SPEC@7108..7136 + FOR_KW@7108..7111 "for" + WHITESPACE@7111..7112 " " + DESTRUCT_FULL@7112..7113 + NAME@7112..7113 + IDENT@7112..7113 "x" + WHITESPACE@7113..7114 " " + IN_KW@7114..7116 "in" + WHITESPACE@7116..7117 " " + EXPR@7117..7136 + EXPR_VAR@7117..7120 + NAME@7117..7120 + IDENT@7117..7120 "std" + SUFFIX_INDEX@7120..7133 + DOT@7120..7121 "." + NAME@7121..7133 + IDENT@7121..7133 "objectFields" + SUFFIX_APPLY@7133..7136 + ARGS_DESC@7133..7136 + L_PAREN@7133..7134 "(" + ARG@7134..7135 + EXPR@7134..7135 + EXPR_VAR@7134..7135 + NAME@7134..7135 + IDENT@7134..7135 "a" + R_PAREN@7135..7136 ")" + WHITESPACE@7136..7143 "\n " + IF_SPEC@7143..7172 + IF_KW@7143..7145 "if" + WHITESPACE@7145..7146 " " + EXPR@7146..7172 + EXPR_VAR@7146..7155 + NAME@7146..7155 + IDENT@7146..7155 "isContent" + SUFFIX_APPLY@7155..7172 + ARGS_DESC@7155..7172 + L_PAREN@7155..7156 "(" + ARG@7156..7171 + EXPR@7156..7171 + EXPR_VAR@7156..7159 + NAME@7156..7159 + IDENT@7156..7159 "std" + SUFFIX_INDEX@7159..7165 + DOT@7159..7160 "." + NAME@7160..7165 + IDENT@7160..7165 "prune" + SUFFIX_APPLY@7165..7171 + ARGS_DESC@7165..7171 + L_PAREN@7165..7166 "(" + ARG@7166..7170 + EXPR@7166..7170 + EXPR_VAR@7166..7167 + NAME@7166..7167 + IDENT@7166..7167 "a" + SUFFIX_INDEX_EXPR@7167..7170 + L_BRACK@7167..7168 "[" + EXPR@7168..7169 + EXPR_VAR@7168..7169 + NAME@7168..7169 + IDENT@7168..7169 "x" + R_BRACK@7169..7170 "]" + R_PAREN@7170..7171 ")" + R_PAREN@7171..7172 ")" + WHITESPACE@7172..7177 "\n " + R_BRACE@7177..7178 "}" + WHITESPACE@7178..7179 " " + ELSE_KW@7179..7183 "else" + WHITESPACE@7183..7190 "\n " + FALSE_EXPR@7190..7191 + EXPR@7190..7191 + EXPR_VAR@7190..7191 + NAME@7190..7191 + IDENT@7190..7191 "a" + COMMA@7191..7192 "," + WHITESPACE@7192..7196 "\n\n " + MEMBER_FIELD_METHOD@7196..7411 + FIELD_NAME_FIXED@7196..7200 + NAME@7196..7200 + IDENT@7196..7200 "find" + PARAMS_DESC@7200..7212 + L_PAREN@7200..7201 "(" + PARAM@7201..7206 + DESTRUCT_FULL@7201..7206 + NAME@7201..7206 + IDENT@7201..7206 "value" + COMMA@7206..7207 "," + WHITESPACE@7207..7208 " " + PARAM@7208..7211 + DESTRUCT_FULL@7208..7211 + NAME@7208..7211 + IDENT@7208..7211 "arr" + R_PAREN@7211..7212 ")" + COLONCOLON@7212..7214 "::" + WHITESPACE@7214..7219 "\n " + EXPR@7219..7411 + EXPR_IF_THEN_ELSE@7219..7411 + IF_KW@7219..7221 "if" + WHITESPACE@7221..7222 " " + EXPR@7222..7239 + EXPR_UNARY@7222..7239 + NOT@7222..7223 "!" + EXPR_VAR@7223..7226 + NAME@7223..7226 + IDENT@7223..7226 "std" + SUFFIX_INDEX@7226..7234 + DOT@7226..7227 "." + NAME@7227..7234 + IDENT@7227..7234 "isArray" + SUFFIX_APPLY@7234..7239 + ARGS_DESC@7234..7239 + L_PAREN@7234..7235 "(" + ARG@7235..7238 + EXPR@7235..7238 + EXPR_VAR@7235..7238 + NAME@7235..7238 + IDENT@7235..7238 "arr" + R_PAREN@7238..7239 ")" + WHITESPACE@7239..7240 " " + THEN_KW@7240..7244 "then" + WHITESPACE@7244..7251 "\n " + TRUE_EXPR@7251..7321 + EXPR@7251..7321 + EXPR_ERROR@7251..7321 + ERROR_KW@7251..7256 "error" + WHITESPACE@7256..7257 " " + EXPR@7257..7321 + EXPR_BINARY@7257..7321 + EXPR@7257..7305 + EXPR_STRING@7257..7305 + STRING_SINGLE@7257..7305 "'find second paramete ..." + WHITESPACE@7305..7306 " " + PLUS@7306..7307 "+" + WHITESPACE@7307..7308 " " + EXPR@7308..7321 + EXPR_VAR@7308..7311 + NAME@7308..7311 + IDENT@7308..7311 "std" + SUFFIX_INDEX@7311..7316 + DOT@7311..7312 "." + NAME@7312..7316 + IDENT@7312..7316 "type" + SUFFIX_APPLY@7316..7321 + ARGS_DESC@7316..7321 + L_PAREN@7316..7317 "(" + ARG@7317..7320 + EXPR@7317..7320 + EXPR_VAR@7317..7320 + NAME@7317..7320 + IDENT@7317..7320 "arr" + R_PAREN@7320..7321 ")" + WHITESPACE@7321..7326 "\n " + ELSE_KW@7326..7330 "else" + WHITESPACE@7330..7337 "\n " + FALSE_EXPR@7337..7411 + EXPR@7337..7411 + EXPR_VAR@7337..7340 + NAME@7337..7340 + IDENT@7337..7340 "std" + SUFFIX_INDEX@7340..7347 + DOT@7340..7341 "." + NAME@7341..7347 + IDENT@7341..7347 "filter" + SUFFIX_APPLY@7347..7411 + ARGS_DESC@7347..7411 + L_PAREN@7347..7348 "(" + ARG@7348..7375 + EXPR@7348..7375 + EXPR_FUNCTION@7348..7375 + FUNCTION_KW@7348..7356 "function" + PARAMS_DESC@7356..7359 + L_PAREN@7356..7357 "(" + PARAM@7357..7358 + DESTRUCT_FULL@7357..7358 + NAME@7357..7358 + IDENT@7357..7358 "i" + R_PAREN@7358..7359 ")" + WHITESPACE@7359..7360 " " + EXPR@7360..7375 + EXPR_BINARY@7360..7375 + EXPR@7360..7363 + EXPR_VAR@7360..7363 + NAME@7360..7363 + IDENT@7360..7363 "arr" + SUFFIX_INDEX_EXPR@7363..7366 + L_BRACK@7363..7364 "[" + EXPR@7364..7365 + EXPR_VAR@7364..7365 + NAME@7364..7365 + IDENT@7364..7365 "i" + R_BRACK@7365..7366 "]" + WHITESPACE@7366..7367 " " + EQ@7367..7369 "==" + WHITESPACE@7369..7370 " " + EXPR@7370..7375 + EXPR_VAR@7370..7375 + NAME@7370..7375 + IDENT@7370..7375 "value" + COMMA@7375..7376 "," + WHITESPACE@7376..7377 " " + ARG@7377..7410 + EXPR@7377..7410 + EXPR_VAR@7377..7380 + NAME@7377..7380 + IDENT@7377..7380 "std" + SUFFIX_INDEX@7380..7386 + DOT@7380..7381 "." + NAME@7381..7386 + IDENT@7381..7386 "range" + SUFFIX_APPLY@7386..7410 + ARGS_DESC@7386..7410 + L_PAREN@7386..7387 "(" + ARG@7387..7388 + EXPR@7387..7388 + EXPR_NUMBER@7387..7388 + FLOAT@7387..7388 "0" + COMMA@7388..7389 "," + WHITESPACE@7389..7390 " " + ARG@7390..7409 + EXPR@7390..7409 + EXPR_BINARY@7390..7409 + EXPR@7390..7393 + EXPR_VAR@7390..7393 + NAME@7390..7393 + IDENT@7390..7393 "std" + SUFFIX_INDEX@7393..7400 + DOT@7393..7394 "." + NAME@7394..7400 + IDENT@7394..7400 "length" + SUFFIX_APPLY@7400..7405 + ARGS_DESC@7400..7405 + L_PAREN@7400..7401 "(" + ARG@7401..7404 + EXPR@7401..7404 + EXPR_VAR@7401..7404 + NAME@7401..7404 + IDENT@7401..7404 "arr" + R_PAREN@7404..7405 ")" + WHITESPACE@7405..7406 " " + MINUS@7406..7407 "-" + WHITESPACE@7407..7408 " " + EXPR@7408..7409 + EXPR_NUMBER@7408..7409 + FLOAT@7408..7409 "1" + R_PAREN@7409..7410 ")" + R_PAREN@7410..7411 ")" + COMMA@7411..7412 "," + WHITESPACE@7412..7416 "\n\n " + SINGLE_LINE_SLASH_COMMENT@7416..7426 "// Compat\n" + WHITESPACE@7426..7428 " " + MEMBER_FIELD_METHOD@7428..7538 + FIELD_NAME_FIXED@7428..7443 + NAME@7428..7443 + IDENT@7428..7443 "__compare_array" + PARAMS_DESC@7443..7455 + L_PAREN@7443..7444 "(" + PARAM@7444..7448 + DESTRUCT_FULL@7444..7448 + NAME@7444..7448 + IDENT@7444..7448 "arr1" + COMMA@7448..7449 "," + WHITESPACE@7449..7450 " " + PARAM@7450..7454 + DESTRUCT_FULL@7450..7454 + NAME@7450..7454 + IDENT@7450..7454 "arr2" + R_PAREN@7454..7455 ")" + COLONCOLON@7455..7457 "::" + WHITESPACE@7457..7462 "\n " + EXPR@7462..7538 + STMT_ASSERT@7462..7508 + ASSERTION@7462..7507 + ASSERT_KW@7462..7468 "assert" + WHITESPACE@7468..7469 " " + EXPR@7469..7507 + EXPR_BINARY@7469..7507 + EXPR@7469..7472 + EXPR_VAR@7469..7472 + NAME@7469..7472 + IDENT@7469..7472 "std" + SUFFIX_INDEX@7472..7480 + DOT@7472..7473 "." + NAME@7473..7480 + IDENT@7473..7480 "isArray" + SUFFIX_APPLY@7480..7486 + ARGS_DESC@7480..7486 + L_PAREN@7480..7481 "(" + ARG@7481..7485 + EXPR@7481..7485 + EXPR_VAR@7481..7485 + NAME@7481..7485 + IDENT@7481..7485 "arr1" + R_PAREN@7485..7486 ")" + WHITESPACE@7486..7487 " " + AND@7487..7489 "&&" + WHITESPACE@7489..7490 " " + EXPR@7490..7507 + EXPR_VAR@7490..7493 + NAME@7490..7493 + IDENT@7490..7493 "std" + SUFFIX_INDEX@7493..7501 + DOT@7493..7494 "." + NAME@7494..7501 + IDENT@7494..7501 "isArray" + SUFFIX_APPLY@7501..7507 + ARGS_DESC@7501..7507 + L_PAREN@7501..7502 "(" + ARG@7502..7506 + EXPR@7502..7506 + EXPR_VAR@7502..7506 + NAME@7502..7506 + IDENT@7502..7506 "arr2" + R_PAREN@7506..7507 ")" + SEMI@7507..7508 ";" + WHITESPACE@7508..7513 "\n " + EXPR_VAR@7513..7516 + NAME@7513..7516 + IDENT@7513..7516 "std" + SUFFIX_INDEX@7516..7526 + DOT@7516..7517 "." + NAME@7517..7526 + IDENT@7517..7526 "__compare" + SUFFIX_APPLY@7526..7538 + ARGS_DESC@7526..7538 + L_PAREN@7526..7527 "(" + ARG@7527..7531 + EXPR@7527..7531 + EXPR_VAR@7527..7531 + NAME@7527..7531 + IDENT@7527..7531 "arr1" + COMMA@7531..7532 "," + WHITESPACE@7532..7533 " " + ARG@7533..7537 + EXPR@7533..7537 + EXPR_VAR@7533..7537 + NAME@7533..7537 + IDENT@7533..7537 "arr2" + R_PAREN@7537..7538 ")" + COMMA@7538..7539 "," + WHITESPACE@7539..7542 "\n " + MEMBER_FIELD_METHOD@7542..7606 + FIELD_NAME_FIXED@7542..7554 + NAME@7542..7554 + IDENT@7542..7554 "__array_less" + PARAMS_DESC@7554..7566 + L_PAREN@7554..7555 "(" + PARAM@7555..7559 + DESTRUCT_FULL@7555..7559 + NAME@7555..7559 + IDENT@7555..7559 "arr1" + COMMA@7559..7560 "," + WHITESPACE@7560..7561 " " + PARAM@7561..7565 + DESTRUCT_FULL@7561..7565 + NAME@7561..7565 + IDENT@7561..7565 "arr2" + R_PAREN@7565..7566 ")" + COLONCOLON@7566..7568 "::" + WHITESPACE@7568..7569 " " + EXPR@7569..7606 + EXPR_BINARY@7569..7606 + EXPR@7569..7572 + EXPR_VAR@7569..7572 + NAME@7569..7572 + IDENT@7569..7572 "std" + SUFFIX_INDEX@7572..7588 + DOT@7572..7573 "." + NAME@7573..7588 + IDENT@7573..7588 "__compare_array" + SUFFIX_APPLY@7588..7600 + ARGS_DESC@7588..7600 + L_PAREN@7588..7589 "(" + ARG@7589..7593 + EXPR@7589..7593 + EXPR_VAR@7589..7593 + NAME@7589..7593 + IDENT@7589..7593 "arr1" + COMMA@7593..7594 "," + WHITESPACE@7594..7595 " " + ARG@7595..7599 + EXPR@7595..7599 + EXPR_VAR@7595..7599 + NAME@7595..7599 + IDENT@7595..7599 "arr2" + R_PAREN@7599..7600 ")" + WHITESPACE@7600..7601 " " + EQ@7601..7603 "==" + WHITESPACE@7603..7604 " " + EXPR@7604..7606 + EXPR_UNARY@7604..7606 + MINUS@7604..7605 "-" + EXPR_NUMBER@7605..7606 + FLOAT@7605..7606 "1" + COMMA@7606..7607 "," + WHITESPACE@7607..7610 "\n " + MEMBER_FIELD_METHOD@7610..7676 + FIELD_NAME_FIXED@7610..7625 + NAME@7610..7625 + IDENT@7610..7625 "__array_greater" + PARAMS_DESC@7625..7637 + L_PAREN@7625..7626 "(" + PARAM@7626..7630 + DESTRUCT_FULL@7626..7630 + NAME@7626..7630 + IDENT@7626..7630 "arr1" + COMMA@7630..7631 "," + WHITESPACE@7631..7632 " " + PARAM@7632..7636 + DESTRUCT_FULL@7632..7636 + NAME@7632..7636 + IDENT@7632..7636 "arr2" + R_PAREN@7636..7637 ")" + COLONCOLON@7637..7639 "::" + WHITESPACE@7639..7640 " " + EXPR@7640..7676 + EXPR_BINARY@7640..7676 + EXPR@7640..7643 + EXPR_VAR@7640..7643 + NAME@7640..7643 + IDENT@7640..7643 "std" + SUFFIX_INDEX@7643..7659 + DOT@7643..7644 "." + NAME@7644..7659 + IDENT@7644..7659 "__compare_array" + SUFFIX_APPLY@7659..7671 + ARGS_DESC@7659..7671 + L_PAREN@7659..7660 "(" + ARG@7660..7664 + EXPR@7660..7664 + EXPR_VAR@7660..7664 + NAME@7660..7664 + IDENT@7660..7664 "arr1" + COMMA@7664..7665 "," + WHITESPACE@7665..7666 " " + ARG@7666..7670 + EXPR@7666..7670 + EXPR_VAR@7666..7670 + NAME@7666..7670 + IDENT@7666..7670 "arr2" + R_PAREN@7670..7671 ")" + WHITESPACE@7671..7672 " " + EQ@7672..7674 "==" + WHITESPACE@7674..7675 " " + EXPR@7675..7676 + EXPR_NUMBER@7675..7676 + FLOAT@7675..7676 "1" + COMMA@7676..7677 "," + WHITESPACE@7677..7680 "\n " + MEMBER_FIELD_METHOD@7680..7752 + FIELD_NAME_FIXED@7680..7701 + NAME@7680..7701 + IDENT@7680..7701 "__array_less_or_equal" + PARAMS_DESC@7701..7713 + L_PAREN@7701..7702 "(" + PARAM@7702..7706 + DESTRUCT_FULL@7702..7706 + NAME@7702..7706 + IDENT@7702..7706 "arr1" + COMMA@7706..7707 "," + WHITESPACE@7707..7708 " " + PARAM@7708..7712 + DESTRUCT_FULL@7708..7712 + NAME@7708..7712 + IDENT@7708..7712 "arr2" + R_PAREN@7712..7713 ")" + COLONCOLON@7713..7715 "::" + WHITESPACE@7715..7716 " " + EXPR@7716..7752 + EXPR_BINARY@7716..7752 + EXPR@7716..7719 + EXPR_VAR@7716..7719 + NAME@7716..7719 + IDENT@7716..7719 "std" + SUFFIX_INDEX@7719..7735 + DOT@7719..7720 "." + NAME@7720..7735 + IDENT@7720..7735 "__compare_array" + SUFFIX_APPLY@7735..7747 + ARGS_DESC@7735..7747 + L_PAREN@7735..7736 "(" + ARG@7736..7740 + EXPR@7736..7740 + EXPR_VAR@7736..7740 + NAME@7736..7740 + IDENT@7736..7740 "arr1" + COMMA@7740..7741 "," + WHITESPACE@7741..7742 " " + ARG@7742..7746 + EXPR@7742..7746 + EXPR_VAR@7742..7746 + NAME@7742..7746 + IDENT@7742..7746 "arr2" + R_PAREN@7746..7747 ")" + WHITESPACE@7747..7748 " " + LE@7748..7750 "<=" + WHITESPACE@7750..7751 " " + EXPR@7751..7752 + EXPR_NUMBER@7751..7752 + FLOAT@7751..7752 "0" + COMMA@7752..7753 "," + WHITESPACE@7753..7756 "\n " + MEMBER_FIELD_METHOD@7756..7831 + FIELD_NAME_FIXED@7756..7780 + NAME@7756..7780 + IDENT@7756..7780 "__array_greater_or_equal" + PARAMS_DESC@7780..7792 + L_PAREN@7780..7781 "(" + PARAM@7781..7785 + DESTRUCT_FULL@7781..7785 + NAME@7781..7785 + IDENT@7781..7785 "arr1" + COMMA@7785..7786 "," + WHITESPACE@7786..7787 " " + PARAM@7787..7791 + DESTRUCT_FULL@7787..7791 + NAME@7787..7791 + IDENT@7787..7791 "arr2" + R_PAREN@7791..7792 ")" + COLONCOLON@7792..7794 "::" + WHITESPACE@7794..7795 " " + EXPR@7795..7831 + EXPR_BINARY@7795..7831 + EXPR@7795..7798 + EXPR_VAR@7795..7798 + NAME@7795..7798 + IDENT@7795..7798 "std" + SUFFIX_INDEX@7798..7814 + DOT@7798..7799 "." + NAME@7799..7814 + IDENT@7799..7814 "__compare_array" + SUFFIX_APPLY@7814..7826 + ARGS_DESC@7814..7826 + L_PAREN@7814..7815 "(" + ARG@7815..7819 + EXPR@7815..7819 + EXPR_VAR@7815..7819 + NAME@7815..7819 + IDENT@7815..7819 "arr1" + COMMA@7819..7820 "," + WHITESPACE@7820..7821 " " + ARG@7821..7825 + EXPR@7821..7825 + EXPR_VAR@7821..7825 + NAME@7821..7825 + IDENT@7821..7825 "arr2" + R_PAREN@7825..7826 ")" + WHITESPACE@7826..7827 " " + GE@7827..7829 ">=" + WHITESPACE@7829..7830 " " + EXPR@7830..7831 + EXPR_NUMBER@7830..7831 + FLOAT@7830..7831 "0" + COMMA@7831..7832 "," + WHITESPACE@7832..7833 "\n" + R_BRACE@7833..7834 "}" + WHITESPACE@7834..7835 "\n" --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__str_block_missing_indent.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__str_block_missing_indent.snap @@ -3,6 +3,6 @@ expression: "|||\n" --- SOURCE_FILE@0..4 - EXPR_STRING@0..4 - ERROR_STRING_BLOCK_MISSING_INDENT@0..4 "|||\n" - + EXPR@0..4 + EXPR_STRING@0..4 + ERROR_STRING_BLOCK_MISSING_INDENT@0..4 "|||\n" --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__str_block_missing_indent_text.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__str_block_missing_indent_text.snap @@ -3,6 +3,6 @@ expression: "|||\nhello\n" --- SOURCE_FILE@0..10 - EXPR_STRING@0..10 - ERROR_STRING_BLOCK_MISSING_INDENT@0..10 "|||\nhello\n" - + EXPR@0..10 + EXPR_STRING@0..10 + ERROR_STRING_BLOCK_MISSING_INDENT@0..10 "|||\nhello\n" --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__str_block_missing_newline.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__str_block_missing_newline.snap @@ -3,6 +3,6 @@ expression: "|||hello\n" --- SOURCE_FILE@0..9 - EXPR_STRING@0..9 - ERROR_STRING_BLOCK_MISSING_NEW_LINE@0..9 "|||hello\n" - + EXPR@0..9 + EXPR_STRING@0..9 + ERROR_STRING_BLOCK_MISSING_NEW_LINE@0..9 "|||hello\n" --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__str_block_missing_termination.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__str_block_missing_termination.snap @@ -3,6 +3,6 @@ expression: "|||\n\thello\n" --- SOURCE_FILE@0..11 - EXPR_STRING@0..11 - ERROR_STRING_BLOCK_UNEXPECTED_END@0..11 "|||\n\thello\n" - + EXPR@0..11 + EXPR_STRING@0..11 + ERROR_STRING_BLOCK_UNEXPECTED_END@0..11 "|||\n\thello\n" --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__unexpected_destruct.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__unexpected_destruct.snap @@ -3,22 +3,24 @@ expression: "local * = 1;\na\n" --- SOURCE_FILE@0..15 - STMT_LOCAL@0..12 - LOCAL_KW@0..5 "local" - WHITESPACE@5..6 " " - BIND_DESTRUCT@6..11 - ERROR_UNEXPECTED_TOKEN@6..7 - MUL@6..7 "*" - WHITESPACE@7..8 " " - ASSIGN@8..9 "=" - WHITESPACE@9..10 " " - EXPR_NUMBER@10..11 - FLOAT@10..11 "1" - SEMI@11..12 ";" - WHITESPACE@12..13 "\n" - EXPR_VAR@13..14 - NAME@13..14 - IDENT@13..14 "a" + EXPR@0..14 + STMT_LOCAL@0..12 + LOCAL_KW@0..5 "local" + WHITESPACE@5..6 " " + BIND_DESTRUCT@6..11 + ERROR_UNEXPECTED_TOKEN@6..7 + MUL@6..7 "*" + WHITESPACE@7..8 " " + ASSIGN@8..9 "=" + WHITESPACE@9..10 " " + EXPR@10..11 + EXPR_NUMBER@10..11 + FLOAT@10..11 "1" + SEMI@11..12 ";" + WHITESPACE@12..13 "\n" + EXPR_VAR@13..14 + NAME@13..14 + IDENT@13..14 "a" WHITESPACE@14..15 "\n" === LocatedSyntaxError { error: Unexpected { expected: Named("destruction specifier"), found: MUL }, range: 6..7 } --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__wrong_field_end.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__wrong_field_end.snap @@ -3,33 +3,36 @@ expression: "{\n\ta: 1;\n\tb: 2;\n}\n" --- SOURCE_FILE@0..18 - EXPR_OBJECT@0..17 - OBJ_BODY_MEMBER_LIST@0..17 - L_BRACE@0..1 "{" - WHITESPACE@1..3 "\n\t" - MEMBER_FIELD_NORMAL@3..7 - FIELD_NAME_FIXED@3..4 - NAME@3..4 - IDENT@3..4 "a" - COLON@4..5 ":" - WHITESPACE@5..6 " " - EXPR_NUMBER@6..7 - FLOAT@6..7 "1" - ERROR_UNEXPECTED_TOKEN@7..8 - SEMI@7..8 ";" - WHITESPACE@8..10 "\n\t" - MEMBER_FIELD_NORMAL@10..14 - FIELD_NAME_FIXED@10..11 - NAME@10..11 - IDENT@10..11 "b" - COLON@11..12 ":" - WHITESPACE@12..13 " " - EXPR_NUMBER@13..14 - FLOAT@13..14 "2" - ERROR_UNEXPECTED_TOKEN@14..15 - SEMI@14..15 ";" - WHITESPACE@15..16 "\n" - R_BRACE@16..17 "}" + EXPR@0..17 + EXPR_OBJECT@0..17 + OBJ_BODY_MEMBER_LIST@0..17 + L_BRACE@0..1 "{" + WHITESPACE@1..3 "\n\t" + MEMBER_FIELD_NORMAL@3..7 + FIELD_NAME_FIXED@3..4 + NAME@3..4 + IDENT@3..4 "a" + COLON@4..5 ":" + WHITESPACE@5..6 " " + EXPR@6..7 + EXPR_NUMBER@6..7 + FLOAT@6..7 "1" + ERROR_UNEXPECTED_TOKEN@7..8 + SEMI@7..8 ";" + WHITESPACE@8..10 "\n\t" + MEMBER_FIELD_NORMAL@10..14 + FIELD_NAME_FIXED@10..11 + NAME@10..11 + IDENT@10..11 "b" + COLON@11..12 ":" + WHITESPACE@12..13 " " + EXPR@13..14 + EXPR_NUMBER@13..14 + FLOAT@13..14 "2" + ERROR_UNEXPECTED_TOKEN@14..15 + SEMI@14..15 ";" + WHITESPACE@15..16 "\n" + R_BRACE@16..17 "}" WHITESPACE@17..18 "\n" === LocatedSyntaxError { error: Unexpected { expected: Named("comma"), found: SEMI }, range: 7..8 } --- a/crates/jrsonnet-rowan-parser/src/tests.rs +++ b/crates/jrsonnet-rowan-parser/src/tests.rs @@ -72,7 +72,7 @@ styles: ThemeStyles::none(), }); - write!(out, "===").unwrap(); + writeln!(out, "===").unwrap(); handler .render_report(&mut out, &diag) .expect("fmt error?.."); --- a/xtask/src/sourcegen/ast.rs +++ b/xtask/src/sourcegen/ast.rs @@ -149,7 +149,7 @@ let mut types = HashMap::new(); for field in fields.iter().filter(|f| f.token_name().is_none()) { if let Some(old) = types.insert(field.ty(), field.method_name(kinds)) { - panic!("{name}.{} has same type as {name}.{}, resolve conflict by wrapping one field: {}", old, field.method_name(kinds), field.ty()); + // panic!("{name}.{} has same type as {name}.{}, resolve conflict by wrapping one field: {}", old, field.method_name(kinds), field.ty()); } // TODO: check for assignable field types, i.e you can have // ``` --- a/xtask/src/sourcegen/kinds.rs +++ b/xtask/src/sourcegen/kinds.rs @@ -212,6 +212,7 @@ let mut kinds = KindsSrc::new(); define_kinds![kinds = "||" => "OR"; + "??" => "NULL_COAELSE"; "&&" => "AND"; "|" => "BIT_OR"; "^" => "BIT_XOR";