--- a/crates/jrsonnet-rowan-parser/jsonnet.ungram +++ b/crates/jrsonnet-rowan-parser/jsonnet.ungram @@ -65,11 +65,6 @@ ExprVar = name:Name -ExprLocal = - 'local' - (Bind (',' Bind)* ','?) - ';' - Expr ExprIfThenElse = 'if' @@ -92,7 +87,15 @@ 'error' Expr +StmtLocal = + 'local' + (Bind (',' Bind)* ','?) + ';' + Expr = + StmtLocal* + ExprBase +ExprBase = ExprBinary | ExprUnary | ExprSlice @@ -109,7 +112,6 @@ | ExprArrayComp | ExprImport | ExprVar -| ExprLocal | ExprIfThenElse | ExprFunction | ExprAssert --- a/crates/jrsonnet-rowan-parser/src/generated/nodes.rs +++ b/crates/jrsonnet-rowan-parser/src/generated/nodes.rs @@ -19,6 +19,19 @@ } #[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct Expr { + pub(crate) syntax: SyntaxNode, +} +impl Expr { + pub fn stmt_locals(&self) -> AstChildren { + support::children(&self.syntax) + } + pub fn expr_base(&self) -> Option { + support::child(&self.syntax) + } +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct ExprBinary { pub(crate) syntax: SyntaxNode, } @@ -303,25 +316,6 @@ } #[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct ExprLocal { - pub(crate) syntax: SyntaxNode, -} -impl ExprLocal { - 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![;]) - } - pub fn expr(&self) -> Option { - support::child(&self.syntax) - } -} - -#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct ExprIfThenElse { pub(crate) syntax: SyntaxNode, } @@ -453,6 +447,22 @@ } #[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, } @@ -810,7 +820,25 @@ } #[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub enum Expr { +pub enum ObjBody { + ObjBodyComp(ObjBodyComp), + ObjBodyMemberList(ObjBodyMemberList), +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +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), @@ -827,32 +855,13 @@ ExprArrayComp(ExprArrayComp), ExprImport(ExprImport), ExprVar(ExprVar), - ExprLocal(ExprLocal), ExprIfThenElse(ExprIfThenElse), ExprFunction(ExprFunction), ExprAssert(ExprAssert), ExprError(ExprError), -} - -#[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub enum ObjBody { - ObjBodyComp(ObjBodyComp), - ObjBodyMemberList(ObjBodyMemberList), -} - -#[derive(Debug, Clone, PartialEq, Eq, Hash)] -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 MemberComp { MemberBindStmt(MemberBindStmt), MemberFieldNormal(MemberFieldNormal), @@ -1054,6 +1063,21 @@ &self.syntax } } +impl AstNode for Expr { + fn can_cast(kind: SyntaxKind) -> bool { + kind == EXPR + } + 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_BINARY @@ -1342,22 +1366,7 @@ impl AstNode for ExprVar { fn can_cast(kind: SyntaxKind) -> bool { kind == EXPR_VAR - } - 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 ExprLocal { - fn can_cast(kind: SyntaxKind) -> bool { - kind == EXPR_LOCAL - } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { Some(Self { syntax }) @@ -1489,6 +1498,21 @@ &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 @@ -1847,175 +1871,7 @@ } fn syntax(&self) -> &SyntaxNode { &self.syntax - } -} -impl From for Expr { - fn from(node: ExprBinary) -> Expr { - Expr::ExprBinary(node) - } -} -impl From for Expr { - fn from(node: ExprUnary) -> Expr { - Expr::ExprUnary(node) - } -} -impl From for Expr { - fn from(node: ExprSlice) -> Expr { - Expr::ExprSlice(node) - } -} -impl From for Expr { - fn from(node: ExprIndex) -> Expr { - Expr::ExprIndex(node) - } -} -impl From for Expr { - fn from(node: ExprIndexExpr) -> Expr { - Expr::ExprIndexExpr(node) - } -} -impl From for Expr { - fn from(node: ExprApply) -> Expr { - Expr::ExprApply(node) - } -} -impl From for Expr { - fn from(node: ExprObjExtend) -> Expr { - Expr::ExprObjExtend(node) - } -} -impl From for Expr { - fn from(node: ExprParened) -> Expr { - Expr::ExprParened(node) - } -} -impl From for Expr { - fn from(node: ExprString) -> Expr { - Expr::ExprString(node) - } -} -impl From for Expr { - fn from(node: ExprNumber) -> Expr { - Expr::ExprNumber(node) - } -} -impl From for Expr { - fn from(node: ExprLiteral) -> Expr { - Expr::ExprLiteral(node) - } -} -impl From for Expr { - fn from(node: ExprArray) -> Expr { - Expr::ExprArray(node) - } -} -impl From for Expr { - fn from(node: ExprObject) -> Expr { - Expr::ExprObject(node) - } -} -impl From for Expr { - fn from(node: ExprArrayComp) -> Expr { - Expr::ExprArrayComp(node) - } -} -impl From for Expr { - fn from(node: ExprImport) -> Expr { - Expr::ExprImport(node) - } -} -impl From for Expr { - fn from(node: ExprVar) -> Expr { - Expr::ExprVar(node) - } -} -impl From for Expr { - fn from(node: ExprLocal) -> Expr { - Expr::ExprLocal(node) - } -} -impl From for Expr { - fn from(node: ExprIfThenElse) -> Expr { - Expr::ExprIfThenElse(node) - } -} -impl From for Expr { - fn from(node: ExprFunction) -> Expr { - Expr::ExprFunction(node) - } -} -impl From for Expr { - fn from(node: ExprAssert) -> Expr { - Expr::ExprAssert(node) - } -} -impl From for Expr { - fn from(node: ExprError) -> Expr { - Expr::ExprError(node) - } -} -impl AstNode for Expr { - 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_LOCAL - | EXPR_IF_THEN_ELSE | EXPR_FUNCTION | EXPR_ASSERT | EXPR_ERROR => true, - _ => false, - } } - fn cast(syntax: SyntaxNode) -> Option { - let res = match syntax.kind() { - EXPR_BINARY => Expr::ExprBinary(ExprBinary { syntax }), - EXPR_UNARY => Expr::ExprUnary(ExprUnary { syntax }), - EXPR_SLICE => Expr::ExprSlice(ExprSlice { syntax }), - EXPR_INDEX => Expr::ExprIndex(ExprIndex { syntax }), - EXPR_INDEX_EXPR => Expr::ExprIndexExpr(ExprIndexExpr { syntax }), - EXPR_APPLY => Expr::ExprApply(ExprApply { syntax }), - EXPR_OBJ_EXTEND => Expr::ExprObjExtend(ExprObjExtend { syntax }), - EXPR_PARENED => Expr::ExprParened(ExprParened { syntax }), - EXPR_STRING => Expr::ExprString(ExprString { syntax }), - EXPR_NUMBER => Expr::ExprNumber(ExprNumber { syntax }), - EXPR_LITERAL => Expr::ExprLiteral(ExprLiteral { syntax }), - EXPR_ARRAY => Expr::ExprArray(ExprArray { syntax }), - EXPR_OBJECT => Expr::ExprObject(ExprObject { syntax }), - EXPR_ARRAY_COMP => Expr::ExprArrayComp(ExprArrayComp { syntax }), - EXPR_IMPORT => Expr::ExprImport(ExprImport { syntax }), - EXPR_VAR => Expr::ExprVar(ExprVar { syntax }), - EXPR_LOCAL => Expr::ExprLocal(ExprLocal { syntax }), - EXPR_IF_THEN_ELSE => Expr::ExprIfThenElse(ExprIfThenElse { syntax }), - EXPR_FUNCTION => Expr::ExprFunction(ExprFunction { syntax }), - EXPR_ASSERT => Expr::ExprAssert(ExprAssert { syntax }), - EXPR_ERROR => Expr::ExprError(ExprError { syntax }), - _ => return None, - }; - Some(res) - } - fn syntax(&self) -> &SyntaxNode { - match self { - Expr::ExprBinary(it) => &it.syntax, - Expr::ExprUnary(it) => &it.syntax, - Expr::ExprSlice(it) => &it.syntax, - Expr::ExprIndex(it) => &it.syntax, - Expr::ExprIndexExpr(it) => &it.syntax, - Expr::ExprApply(it) => &it.syntax, - Expr::ExprObjExtend(it) => &it.syntax, - Expr::ExprParened(it) => &it.syntax, - Expr::ExprString(it) => &it.syntax, - Expr::ExprNumber(it) => &it.syntax, - Expr::ExprLiteral(it) => &it.syntax, - Expr::ExprArray(it) => &it.syntax, - Expr::ExprObject(it) => &it.syntax, - Expr::ExprArrayComp(it) => &it.syntax, - Expr::ExprImport(it) => &it.syntax, - Expr::ExprVar(it) => &it.syntax, - Expr::ExprLocal(it) => &it.syntax, - Expr::ExprIfThenElse(it) => &it.syntax, - Expr::ExprFunction(it) => &it.syntax, - Expr::ExprAssert(it) => &it.syntax, - Expr::ExprError(it) => &it.syntax, - } - } } impl From for ObjBody { fn from(node: ObjBodyComp) -> ObjBody { @@ -2113,6 +1969,167 @@ } } } +impl From for ExprBase { + fn from(node: ExprBinary) -> ExprBase { + ExprBase::ExprBinary(node) + } +} +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) + } +} +impl From for ExprBase { + fn from(node: ExprParened) -> ExprBase { + ExprBase::ExprParened(node) + } +} +impl From for ExprBase { + fn from(node: ExprString) -> ExprBase { + ExprBase::ExprString(node) + } +} +impl From for ExprBase { + fn from(node: ExprNumber) -> ExprBase { + ExprBase::ExprNumber(node) + } +} +impl From for ExprBase { + fn from(node: ExprLiteral) -> ExprBase { + ExprBase::ExprLiteral(node) + } +} +impl From for ExprBase { + fn from(node: ExprArray) -> ExprBase { + ExprBase::ExprArray(node) + } +} +impl From for ExprBase { + fn from(node: ExprObject) -> ExprBase { + ExprBase::ExprObject(node) + } +} +impl From for ExprBase { + fn from(node: ExprArrayComp) -> ExprBase { + ExprBase::ExprArrayComp(node) + } +} +impl From for ExprBase { + fn from(node: ExprImport) -> ExprBase { + ExprBase::ExprImport(node) + } +} +impl From for ExprBase { + fn from(node: ExprVar) -> ExprBase { + ExprBase::ExprVar(node) + } +} +impl From for ExprBase { + fn from(node: ExprIfThenElse) -> ExprBase { + ExprBase::ExprIfThenElse(node) + } +} +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 { + fn from(node: ExprError) -> ExprBase { + ExprBase::ExprError(node) + } +} +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, + _ => false, + } + } + fn cast(syntax: SyntaxNode) -> Option { + 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 }), + EXPR_NUMBER => ExprBase::ExprNumber(ExprNumber { syntax }), + EXPR_LITERAL => ExprBase::ExprLiteral(ExprLiteral { syntax }), + EXPR_ARRAY => ExprBase::ExprArray(ExprArray { syntax }), + EXPR_OBJECT => ExprBase::ExprObject(ExprObject { syntax }), + EXPR_ARRAY_COMP => ExprBase::ExprArrayComp(ExprArrayComp { syntax }), + EXPR_IMPORT => ExprBase::ExprImport(ExprImport { syntax }), + 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, + }; + Some(res) + } + fn syntax(&self) -> &SyntaxNode { + 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, + ExprBase::ExprNumber(it) => &it.syntax, + ExprBase::ExprLiteral(it) => &it.syntax, + ExprBase::ExprArray(it) => &it.syntax, + ExprBase::ExprObject(it) => &it.syntax, + ExprBase::ExprArrayComp(it) => &it.syntax, + ExprBase::ExprImport(it) => &it.syntax, + 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, + } + } +} impl From for MemberComp { fn from(node: MemberBindStmt) -> MemberComp { MemberComp::MemberBindStmt(node) @@ -2725,22 +2742,22 @@ std::fmt::Display::fmt(self.syntax(), f) } } -impl std::fmt::Display for Expr { +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 ObjBody { +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 CompSpec { +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 Bind { +impl std::fmt::Display for ExprBase { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { std::fmt::Display::fmt(self.syntax(), f) } @@ -2775,6 +2792,11 @@ std::fmt::Display::fmt(self.syntax(), f) } } +impl std::fmt::Display for Expr { + 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) @@ -2875,11 +2897,6 @@ std::fmt::Display::fmt(self.syntax(), f) } } -impl std::fmt::Display for ExprLocal { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - std::fmt::Display::fmt(self.syntax(), f) - } -} impl std::fmt::Display for ExprIfThenElse { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { std::fmt::Display::fmt(self.syntax(), f) @@ -2920,6 +2937,11 @@ 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) + } +} impl std::fmt::Display for SliceDescEnd { 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 @@ -143,8 +143,6 @@ IMPORTBIN_KW, #[token("import")] IMPORT_KW, - #[token("local")] - LOCAL_KW, #[token("if")] IF_KW, #[token("then")] @@ -155,6 +153,8 @@ FUNCTION_KW, #[token("error")] ERROR_KW, + #[token("local")] + LOCAL_KW, #[token("in")] IN_KW, META_OBJECT_APPLY, @@ -180,6 +180,7 @@ #[error] LEXING_ERROR, SOURCE_FILE, + EXPR, EXPR_BINARY, LHS_EXPR, EXPR_UNARY, @@ -200,7 +201,6 @@ EXPR_ARRAY_COMP, EXPR_IMPORT, EXPR_VAR, - EXPR_LOCAL, EXPR_IF_THEN_ELSE, TRUE_EXPR, FALSE_EXPR, @@ -209,6 +209,7 @@ EXPR_ASSERT, ASSERTION, EXPR_ERROR, + STMT_LOCAL, SLICE_DESC_END, SLICE_DESC_STEP, ARG, @@ -233,10 +234,10 @@ DESTRUCT_OBJECT_FIELD, DESTRUCT_REST, DESTRUCT_ARRAY_ELEMENT, - EXPR, OBJ_BODY, COMP_SPEC, BIND, + EXPR_BASE, MEMBER_COMP, MEMBER, FIELD_NAME, @@ -262,17 +263,17 @@ | 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 | LOCAL_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, + | 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, _ => false, } } pub fn is_enum(self) -> bool { match self { - EXPR | OBJ_BODY | COMP_SPEC | BIND | MEMBER_COMP | MEMBER | FIELD_NAME | DESTRUCT - | DESTRUCT_ARRAY_PART | BINARY_OPERATOR | UNARY_OPERATOR | LITERAL | TEXT | NUMBER - | IMPORT_KIND | VISIBILITY | TRIVIA | CUSTOM_ERROR => true, + 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, _ => false, } } @@ -285,5 +286,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 } ; [local] => { $ crate :: SyntaxKind :: LOCAL_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 } } +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 } } pub use T; --- a/crates/jrsonnet-rowan-parser/src/parser.rs +++ b/crates/jrsonnet-rowan-parser/src/parser.rs @@ -293,6 +293,26 @@ } fn expr(p: &mut Parser) -> CompletedMarker { + while p.at(T![local]) { + let m = p.start(); + + p.bump(); + loop { + if p.at(T![;]) { + p.bump(); + break; + } + bind(p); + + if p.at(T![,]) { + p.bump(); + continue; + } + p.expect(T![;]); + break; + } + m.complete(p, STMT_LOCAL); + } match expr_binding_power(p, 0) { Ok(m) => m, Err(m) => m, @@ -658,6 +678,7 @@ m.complete(p, SLICE_DESC); true } + fn lhs(p: &mut Parser) -> Result { let mut lhs = lhs_basic(p)?; @@ -853,25 +874,6 @@ array(p) } else if p.at(T!['{']) { object(p) - } else if p.at(T![local]) { - let m = p.start(); - p.bump(); - loop { - if p.at(T![;]) { - p.bump(); - break; - } - bind(p); - - if p.at(T![,]) { - p.bump(); - continue; - } - p.expect(T![;]); - break; - } - expr(p); - m.complete(p, EXPR_LOCAL) } else if p.at(T![function]) { let m = p.start(); p.bump(); --- 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,7 +3,7 @@ expression: "local intr = $intrinsic(test);\n\nlocal a = 1, b = 2, c = a + b;\n\n[c]\n" --- SOURCE_FILE@0..68 - EXPR_LOCAL@0..29 + STMT_LOCAL@0..23 LOCAL_KW@0..5 "local" WHITESPACE@5..6 " " BIND_DESTRUCT@6..14 @@ -17,12 +17,12 @@ 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_PARENED@23..29 + L_PAREN@23..24 "(" + 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" --- 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,7 +3,7 @@ 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 - EXPR_LOCAL@0..292 + STMT_LOCAL@0..22 LOCAL_KW@0..5 "local" WHITESPACE@5..6 " " BIND_DESTRUCT@6..21 @@ -30,226 +30,225 @@ NAME@18..21 IDENT@18..21 "arr" SEMI@21..22 ";" - WHITESPACE@22..23 "\n" - EXPR_LOCAL@23..292 - 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" - EXPR_LOCAL@50..292 - 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" - EXPR_LOCAL@77..292 - 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" - EXPR_LOCAL@104..292 - 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" - EXPR_LOCAL@134..292 - 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" - EXPR_LOCAL@164..292 - 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" - EXPR_LOCAL@195..292 - 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" - EXPR_LOCAL@218..292 - 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" - EXPR_LOCAL@251..292 - 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" + 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" WHITESPACE@292..293 "\n" - --- 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,7 +3,7 @@ expression: "local\n\ta(x) = x,\n\ta = function(x) x,\n; c\n" --- SOURCE_FILE@0..41 - EXPR_LOCAL@0..40 + STMT_LOCAL@0..38 LOCAL_KW@0..5 "local" WHITESPACE@5..7 "\n\t" BIND_FUNCTION@7..15 @@ -45,8 +45,8 @@ 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@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,7 +3,7 @@ expression: "local a =\nlocal b = 3;\n1\n" --- SOURCE_FILE@0..25 - EXPR_LOCAL@0..25 + STMT_LOCAL@0..25 LOCAL_KW@0..5 "local" WHITESPACE@5..6 " " BIND_DESTRUCT@6..24 @@ -13,7 +13,7 @@ WHITESPACE@7..8 " " ASSIGN@8..9 "=" WHITESPACE@9..10 "\n" - EXPR_LOCAL@10..24 + STMT_LOCAL@10..22 LOCAL_KW@10..15 "local" WHITESPACE@15..16 " " BIND_DESTRUCT@16..21 @@ -26,12 +26,12 @@ EXPR_NUMBER@20..21 FLOAT@20..21 "3" SEMI@21..22 ";" - WHITESPACE@22..23 "\n" - EXPR_NUMBER@23..24 - FLOAT@23..24 "1" + 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: Named("expression") }, range: 25..25 } --- 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,7 +3,7 @@ expression: "local a =\n" --- SOURCE_FILE@0..10 - EXPR_LOCAL@0..10 + STMT_LOCAL@0..10 LOCAL_KW@0..5 "local" WHITESPACE@5..6 " " BIND_DESTRUCT@6..10 @@ -15,7 +15,7 @@ WHITESPACE@9..10 "\n" 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__stdlib.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__stdlib.snap @@ -1,10 +1,10 @@ --- 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 uniq(arr, keyF=id)::\n local f(a, b) =\n if std.length(a) == 0 then\n [b]\n else if keyF(a[std.length(a) - 1]) == keyF(b) then\n a\n else\n a + [b];\n std.foldl(f, arr, []),\n\n set(arr, keyF=id)::\n std.uniq(std.sort(arr, keyF), keyF),\n\n setMember(x, arr, keyF=id)::\n // TODO(dcunnin): Binary chop for O(log n) complexity\n std.length(std.setInter([x], arr, keyF)) > 0,\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 setInter(a, b, keyF=id)::\n local aux(a, b, i, j, acc) =\n if i >= std.length(a) || j >= std.length(b) then\n acc\n else\n if keyF(a[i]) == keyF(b[j]) then\n aux(a, b, i + 1, j + 1, acc + [a[i]]) tailstrict\n else if keyF(a[i]) < keyF(b[j]) then\n aux(a, b, i + 1, j, acc) tailstrict\n else\n aux(a, b, i, j + 1, acc) tailstrict;\n aux(a, b, 0, 0, []) tailstrict,\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" +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" --- -SOURCE_FILE@0..10282 - EXPR_OBJECT@0..10281 - OBJ_BODY_MEMBER_LIST@0..10281 +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 @@ -216,7 +216,7 @@ R_PAREN@424..425 ")" COLONCOLON@425..427 "::" WHITESPACE@427..432 "\n " - EXPR_LOCAL@432..578 + STMT_LOCAL@432..460 LOCAL_KW@432..437 "local" WHITESPACE@437..438 " " BIND_DESTRUCT@438..459 @@ -242,108 +242,108 @@ 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" + 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 @@ -546,160 +546,160 @@ WHITESPACE@839..844 "\n " ELSE_KW@844..848 "else" WHITESPACE@848..855 "\n " - FALSE_EXPR@855..1024 - EXPR_LOCAL@855..1024 - 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" - R_PAREN@919..920 ")" - R_PAREN@920..921 ")" - R_PAREN@921..922 ")" - SEMI@922..923 ";" - WHITESPACE@923..930 "\n " - 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 ")" + 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" + 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 @@ -1819,7 +1819,7 @@ R_PAREN@2824..2825 ")" COLONCOLON@2825..2827 "::" WHITESPACE@2827..2832 "\n " - EXPR_LOCAL@2832..3495 + STMT_LOCAL@2832..3136 LOCAL_KW@2832..2837 "local" WHITESPACE@2837..2838 " " BIND_FUNCTION@2838..3135 @@ -1855,7 +1855,7 @@ EXPR_ARRAY_COMP@2876..3134 L_BRACK@2876..2877 "[" WHITESPACE@2877..2886 "\n " - EXPR_LOCAL@2886..3085 + STMT_LOCAL@2886..2918 LOCAL_KW@2886..2891 "local" WHITESPACE@2891..2892 " " BIND_DESTRUCT@2892..2917 @@ -1876,87 +1876,87 @@ 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@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" @@ -1985,241 +1985,241 @@ R_BRACK@3133..3134 "]" R_PAREN@3134..3135 ")" SEMI@3135..3136 ";" - WHITESPACE@3136..3142 "\n\n " - EXPR_LOCAL@3142..3495 - 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 ")" + 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 @@ -2300,7 +2300,7 @@ R_PAREN@3639..3640 ")" COLONCOLON@3640..3642 "::" WHITESPACE@3642..3647 "\n " - EXPR_LOCAL@3647..3835 + STMT_LOCAL@3647..3678 LOCAL_KW@3647..3652 "local" WHITESPACE@3652..3653 " " BIND_DESTRUCT@3653..3677 @@ -2326,113 +2326,113 @@ IDENT@3672..3676 "str_" R_PAREN@3676..3677 ")" SEMI@3677..3678 ";" - WHITESPACE@3678..3683 "\n " - EXPR_LOCAL@3683..3835 - 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 "==" - 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 ")" + 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 "==" + 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 @@ -2448,7 +2448,7 @@ R_PAREN@3864..3865 ")" COLONCOLON@3865..3867 "::" WHITESPACE@3867..3872 "\n " - EXPR_LOCAL@3872..4054 + STMT_LOCAL@3872..3903 LOCAL_KW@3872..3877 "local" WHITESPACE@3877..3878 " " BIND_DESTRUCT@3878..3902 @@ -2474,121 +2474,121 @@ IDENT@3897..3901 "str_" R_PAREN@3901..3902 ")" SEMI@3902..3903 ";" - WHITESPACE@3903..3908 "\n " - EXPR_LOCAL@3908..4054 - 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" - 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 ")" + 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" + 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 @@ -2667,7 +2667,7 @@ R_PAREN@4199..4200 ")" COLONCOLON@4200..4202 "::" WHITESPACE@4202..4207 "\n " - EXPR_LOCAL@4207..4318 + STMT_LOCAL@4207..4238 LOCAL_KW@4207..4212 "local" WHITESPACE@4212..4213 " " BIND_DESTRUCT@4213..4237 @@ -2693,78 +2693,78 @@ 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 ")" + 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 @@ -3069,127 +3069,127 @@ WHITESPACE@4899..4900 " " THEN_KW@4900..4904 "then" WHITESPACE@4904..4911 "\n " - TRUE_EXPR@4911..5086 - EXPR_LOCAL@4911..5086 - 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 " - 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 "]" + 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 " " @@ -3480,7 +3480,7 @@ R_PAREN@5541..5542 ")" COLONCOLON@5542..5544 "::" WHITESPACE@5544..5549 "\n " - EXPR_LOCAL@5549..5673 + STMT_LOCAL@5549..5641 LOCAL_KW@5549..5554 "local" WHITESPACE@5554..5555 " " BIND_DESTRUCT@5555..5640 @@ -3555,37 +3555,37 @@ 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 ")" + 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 @@ -3653,3590 +3653,3098 @@ WHITESPACE@5811..5816 "\n " ELSE_KW@5816..5820 "else" WHITESPACE@5820..5827 "\n " - FALSE_EXPR@5827..6345 - EXPR_LOCAL@5827..6345 - 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 " - FALSE_EXPR@5909..6326 - EXPR_LOCAL@5909..6326 - 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 " - EXPR_LOCAL@5937..6326 - 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 " - EXPR_LOCAL@6006..6326 - 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 " - EXPR_LOCAL@6062..6326 - 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 " - EXPR_LOCAL@6125..6326 - 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 " - 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 " - 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 ")" + 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..6556 - FIELD_NAME_FIXED@6350..6354 - NAME@6350..6354 - IDENT@6350..6354 "uniq" - PARAMS_DESC@6354..6368 - L_PAREN@6354..6355 "(" - PARAM@6355..6358 - DESTRUCT_FULL@6355..6358 - NAME@6355..6358 - IDENT@6355..6358 "arr" - COMMA@6358..6359 "," - WHITESPACE@6359..6360 " " - PARAM@6360..6367 - DESTRUCT_FULL@6360..6364 - NAME@6360..6364 - IDENT@6360..6364 "keyF" - ASSIGN@6364..6365 "=" - EXPR_VAR@6365..6367 - NAME@6365..6367 - IDENT@6365..6367 "id" - R_PAREN@6367..6368 ")" - COLONCOLON@6368..6370 "::" - WHITESPACE@6370..6375 "\n " - EXPR_LOCAL@6375..6556 - LOCAL_KW@6375..6380 "local" - WHITESPACE@6380..6381 " " - BIND_FUNCTION@6381..6529 - NAME@6381..6382 - IDENT@6381..6382 "f" - PARAMS_DESC@6382..6388 - L_PAREN@6382..6383 "(" - PARAM@6383..6384 - DESTRUCT_FULL@6383..6384 - NAME@6383..6384 - IDENT@6383..6384 "a" - COMMA@6384..6385 "," - WHITESPACE@6385..6386 " " - PARAM@6386..6387 - DESTRUCT_FULL@6386..6387 - NAME@6386..6387 - IDENT@6386..6387 "b" - R_PAREN@6387..6388 ")" - WHITESPACE@6388..6389 " " - ASSIGN@6389..6390 "=" - WHITESPACE@6390..6397 "\n " - EXPR_IF_THEN_ELSE@6397..6529 - IF_KW@6397..6399 "if" - WHITESPACE@6399..6400 " " - EXPR_BINARY@6400..6418 - LHS_EXPR@6400..6413 - EXPR_APPLY@6400..6413 - EXPR_INDEX@6400..6410 - EXPR_VAR@6400..6403 - NAME@6400..6403 - IDENT@6400..6403 "std" - DOT@6403..6404 "." - NAME@6404..6410 - IDENT@6404..6410 "length" - ARGS_DESC@6410..6413 - L_PAREN@6410..6411 "(" - ARG@6411..6412 - EXPR_VAR@6411..6412 - NAME@6411..6412 - IDENT@6411..6412 "a" - R_PAREN@6412..6413 ")" - WHITESPACE@6413..6414 " " - EQ@6414..6416 "==" - WHITESPACE@6416..6417 " " - EXPR_NUMBER@6417..6418 - FLOAT@6417..6418 "0" - WHITESPACE@6418..6419 " " - THEN_KW@6419..6423 "then" - WHITESPACE@6423..6432 "\n " - TRUE_EXPR@6432..6435 - EXPR_ARRAY@6432..6435 - L_BRACK@6432..6433 "[" - EXPR_VAR@6433..6434 - NAME@6433..6434 - IDENT@6433..6434 "b" - R_BRACK@6434..6435 "]" - WHITESPACE@6435..6442 "\n " - ELSE_KW@6442..6446 "else" - WHITESPACE@6446..6447 " " - FALSE_EXPR@6447..6529 - EXPR_IF_THEN_ELSE@6447..6529 - IF_KW@6447..6449 "if" - WHITESPACE@6449..6450 " " - EXPR_BINARY@6450..6487 - LHS_EXPR@6450..6476 - EXPR_APPLY@6450..6476 - EXPR_VAR@6450..6454 - NAME@6450..6454 - IDENT@6450..6454 "keyF" - ARGS_DESC@6454..6476 - L_PAREN@6454..6455 "(" - ARG@6455..6475 - EXPR_INDEX_EXPR@6455..6475 - LHS_EXPR@6455..6456 - EXPR_VAR@6455..6456 - NAME@6455..6456 - IDENT@6455..6456 "a" - L_BRACK@6456..6457 "[" - EXPR_BINARY@6457..6474 - LHS_EXPR@6457..6470 - EXPR_APPLY@6457..6470 - EXPR_INDEX@6457..6467 - EXPR_VAR@6457..6460 - NAME@6457..6460 - IDENT@6457..6460 "std" - DOT@6460..6461 "." - NAME@6461..6467 - IDENT@6461..6467 "length" - ARGS_DESC@6467..6470 - L_PAREN@6467..6468 "(" - ARG@6468..6469 - EXPR_VAR@6468..6469 - NAME@6468..6469 - IDENT@6468..6469 "a" - R_PAREN@6469..6470 ")" - WHITESPACE@6470..6471 " " - MINUS@6471..6472 "-" - WHITESPACE@6472..6473 " " - EXPR_NUMBER@6473..6474 - FLOAT@6473..6474 "1" - R_BRACK@6474..6475 "]" - R_PAREN@6475..6476 ")" - WHITESPACE@6476..6477 " " - EQ@6477..6479 "==" - WHITESPACE@6479..6480 " " - EXPR_APPLY@6480..6487 - EXPR_VAR@6480..6484 - NAME@6480..6484 - IDENT@6480..6484 "keyF" - ARGS_DESC@6484..6487 - L_PAREN@6484..6485 "(" - ARG@6485..6486 - EXPR_VAR@6485..6486 - NAME@6485..6486 - IDENT@6485..6486 "b" - R_PAREN@6486..6487 ")" - WHITESPACE@6487..6488 " " - THEN_KW@6488..6492 "then" - WHITESPACE@6492..6501 "\n " - TRUE_EXPR@6501..6502 - EXPR_VAR@6501..6502 - NAME@6501..6502 - IDENT@6501..6502 "a" - WHITESPACE@6502..6509 "\n " - ELSE_KW@6509..6513 "else" - WHITESPACE@6513..6522 "\n " - FALSE_EXPR@6522..6529 - EXPR_BINARY@6522..6529 - LHS_EXPR@6522..6523 - EXPR_VAR@6522..6523 - NAME@6522..6523 - IDENT@6522..6523 "a" - WHITESPACE@6523..6524 " " - PLUS@6524..6525 "+" - WHITESPACE@6525..6526 " " - EXPR_ARRAY@6526..6529 - L_BRACK@6526..6527 "[" - EXPR_VAR@6527..6528 - NAME@6527..6528 - IDENT@6527..6528 "b" - R_BRACK@6528..6529 "]" - SEMI@6529..6530 ";" - WHITESPACE@6530..6535 "\n " - EXPR_APPLY@6535..6556 - EXPR_INDEX@6535..6544 - EXPR_VAR@6535..6538 - NAME@6535..6538 - IDENT@6535..6538 "std" - DOT@6538..6539 "." - NAME@6539..6544 - IDENT@6539..6544 "foldl" - ARGS_DESC@6544..6556 - L_PAREN@6544..6545 "(" - ARG@6545..6546 - EXPR_VAR@6545..6546 - NAME@6545..6546 - IDENT@6545..6546 "f" - COMMA@6546..6547 "," - WHITESPACE@6547..6548 " " - ARG@6548..6551 - EXPR_VAR@6548..6551 - NAME@6548..6551 - IDENT@6548..6551 "arr" - COMMA@6551..6552 "," - WHITESPACE@6552..6553 " " - ARG@6553..6555 - EXPR_ARRAY@6553..6555 - L_BRACK@6553..6554 "[" - R_BRACK@6554..6555 "]" - R_PAREN@6555..6556 ")" - COMMA@6556..6557 "," - WHITESPACE@6557..6561 "\n\n " - MEMBER_FIELD_METHOD@6561..6620 - FIELD_NAME_FIXED@6561..6564 - NAME@6561..6564 - IDENT@6561..6564 "set" - PARAMS_DESC@6564..6578 - L_PAREN@6564..6565 "(" - PARAM@6565..6568 - DESTRUCT_FULL@6565..6568 - NAME@6565..6568 - IDENT@6565..6568 "arr" - COMMA@6568..6569 "," - WHITESPACE@6569..6570 " " - PARAM@6570..6577 - DESTRUCT_FULL@6570..6574 - NAME@6570..6574 - IDENT@6570..6574 "keyF" - ASSIGN@6574..6575 "=" - EXPR_VAR@6575..6577 - NAME@6575..6577 - IDENT@6575..6577 "id" - R_PAREN@6577..6578 ")" - COLONCOLON@6578..6580 "::" - WHITESPACE@6580..6585 "\n " - EXPR_APPLY@6585..6620 - EXPR_INDEX@6585..6593 - EXPR_VAR@6585..6588 - NAME@6585..6588 - IDENT@6585..6588 "std" - DOT@6588..6589 "." - NAME@6589..6593 - IDENT@6589..6593 "uniq" - ARGS_DESC@6593..6620 - L_PAREN@6593..6594 "(" - ARG@6594..6613 - EXPR_APPLY@6594..6613 - EXPR_INDEX@6594..6602 - EXPR_VAR@6594..6597 - NAME@6594..6597 - IDENT@6594..6597 "std" - DOT@6597..6598 "." - NAME@6598..6602 - IDENT@6598..6602 "sort" - ARGS_DESC@6602..6613 - L_PAREN@6602..6603 "(" - ARG@6603..6606 - EXPR_VAR@6603..6606 - NAME@6603..6606 - IDENT@6603..6606 "arr" - COMMA@6606..6607 "," - WHITESPACE@6607..6608 " " - ARG@6608..6612 - EXPR_VAR@6608..6612 - NAME@6608..6612 - IDENT@6608..6612 "keyF" - R_PAREN@6612..6613 ")" - COMMA@6613..6614 "," - WHITESPACE@6614..6615 " " - ARG@6615..6619 - EXPR_VAR@6615..6619 - NAME@6615..6619 - IDENT@6615..6619 "keyF" - R_PAREN@6619..6620 ")" - COMMA@6620..6621 "," - WHITESPACE@6621..6625 "\n\n " - MEMBER_FIELD_METHOD@6625..6760 - FIELD_NAME_FIXED@6625..6634 - NAME@6625..6634 - IDENT@6625..6634 "setMember" - PARAMS_DESC@6634..6651 - L_PAREN@6634..6635 "(" - PARAM@6635..6636 - DESTRUCT_FULL@6635..6636 - NAME@6635..6636 - IDENT@6635..6636 "x" - COMMA@6636..6637 "," - WHITESPACE@6637..6638 " " - PARAM@6638..6641 - DESTRUCT_FULL@6638..6641 - NAME@6638..6641 - IDENT@6638..6641 "arr" - COMMA@6641..6642 "," - WHITESPACE@6642..6643 " " - PARAM@6643..6650 - DESTRUCT_FULL@6643..6647 - NAME@6643..6647 - IDENT@6643..6647 "keyF" - ASSIGN@6647..6648 "=" - EXPR_VAR@6648..6650 - NAME@6648..6650 - IDENT@6648..6650 "id" - R_PAREN@6650..6651 ")" - COLONCOLON@6651..6653 "::" - WHITESPACE@6653..6658 "\n " - SINGLE_LINE_SLASH_COMMENT@6658..6712 "// TODO(dcunnin): Bin ..." - WHITESPACE@6712..6716 " " - EXPR_BINARY@6716..6760 - LHS_EXPR@6716..6756 - EXPR_APPLY@6716..6756 - EXPR_INDEX@6716..6726 - EXPR_VAR@6716..6719 - NAME@6716..6719 - IDENT@6716..6719 "std" - DOT@6719..6720 "." - NAME@6720..6726 - IDENT@6720..6726 "length" - ARGS_DESC@6726..6756 - L_PAREN@6726..6727 "(" - ARG@6727..6755 - EXPR_APPLY@6727..6755 - EXPR_INDEX@6727..6739 - EXPR_VAR@6727..6730 - NAME@6727..6730 - IDENT@6727..6730 "std" - DOT@6730..6731 "." - NAME@6731..6739 - IDENT@6731..6739 "setInter" - ARGS_DESC@6739..6755 - L_PAREN@6739..6740 "(" - ARG@6740..6743 - EXPR_ARRAY@6740..6743 - L_BRACK@6740..6741 "[" - EXPR_VAR@6741..6742 - NAME@6741..6742 - IDENT@6741..6742 "x" - R_BRACK@6742..6743 "]" - COMMA@6743..6744 "," - WHITESPACE@6744..6745 " " - ARG@6745..6748 - EXPR_VAR@6745..6748 - NAME@6745..6748 - IDENT@6745..6748 "arr" - COMMA@6748..6749 "," - WHITESPACE@6749..6750 " " - ARG@6750..6754 - EXPR_VAR@6750..6754 - NAME@6750..6754 - IDENT@6750..6754 "keyF" - R_PAREN@6754..6755 ")" - R_PAREN@6755..6756 ")" - WHITESPACE@6756..6757 " " - GT@6757..6758 ">" - WHITESPACE@6758..6759 " " - EXPR_NUMBER@6759..6760 - FLOAT@6759..6760 "0" - COMMA@6760..6761 "," - WHITESPACE@6761..6765 "\n\n " - MEMBER_FIELD_METHOD@6765..7314 - FIELD_NAME_FIXED@6765..6773 - NAME@6765..6773 - IDENT@6765..6773 "setUnion" - PARAMS_DESC@6773..6788 - L_PAREN@6773..6774 "(" - PARAM@6774..6775 - DESTRUCT_FULL@6774..6775 - NAME@6774..6775 - IDENT@6774..6775 "a" - COMMA@6775..6776 "," - WHITESPACE@6776..6777 " " - PARAM@6777..6778 - DESTRUCT_FULL@6777..6778 - NAME@6777..6778 - IDENT@6777..6778 "b" - COMMA@6778..6779 "," - WHITESPACE@6779..6780 " " - PARAM@6780..6787 - DESTRUCT_FULL@6780..6784 - NAME@6780..6784 - IDENT@6780..6784 "keyF" - ASSIGN@6784..6785 "=" - EXPR_VAR@6785..6787 - NAME@6785..6787 - IDENT@6785..6787 "id" - R_PAREN@6787..6788 ")" - COLONCOLON@6788..6790 "::" - WHITESPACE@6790..6795 "\n " - SINGLE_LINE_SLASH_COMMENT@6795..6837 "// NOTE: order matter ..." - WHITESPACE@6837..6841 " " - EXPR_LOCAL@6841..7314 - LOCAL_KW@6841..6846 "local" - WHITESPACE@6846..6847 " " - BIND_FUNCTION@6847..7289 - NAME@6847..6850 - IDENT@6847..6850 "aux" - PARAMS_DESC@6850..6867 - L_PAREN@6850..6851 "(" - PARAM@6851..6852 - DESTRUCT_FULL@6851..6852 - NAME@6851..6852 - IDENT@6851..6852 "a" - COMMA@6852..6853 "," - WHITESPACE@6853..6854 " " - PARAM@6854..6855 - DESTRUCT_FULL@6854..6855 - NAME@6854..6855 - IDENT@6854..6855 "b" - COMMA@6855..6856 "," - WHITESPACE@6856..6857 " " - PARAM@6857..6858 - DESTRUCT_FULL@6857..6858 - NAME@6857..6858 - IDENT@6857..6858 "i" - COMMA@6858..6859 "," - WHITESPACE@6859..6860 " " - PARAM@6860..6861 - DESTRUCT_FULL@6860..6861 - NAME@6860..6861 - IDENT@6860..6861 "j" - COMMA@6861..6862 "," - WHITESPACE@6862..6863 " " - PARAM@6863..6866 - DESTRUCT_FULL@6863..6866 - NAME@6863..6866 - IDENT@6863..6866 "acc" - R_PAREN@6866..6867 ")" - WHITESPACE@6867..6868 " " - ASSIGN@6868..6869 "=" - WHITESPACE@6869..6876 "\n " - EXPR_IF_THEN_ELSE@6876..7289 - IF_KW@6876..6878 "if" - WHITESPACE@6878..6879 " " - EXPR_BINARY@6879..6897 - LHS_EXPR@6879..6880 - EXPR_VAR@6879..6880 - NAME@6879..6880 - IDENT@6879..6880 "i" - WHITESPACE@6880..6881 " " - GE@6881..6883 ">=" - WHITESPACE@6883..6884 " " - EXPR_APPLY@6884..6897 - EXPR_INDEX@6884..6894 - EXPR_VAR@6884..6887 - NAME@6884..6887 - IDENT@6884..6887 "std" - DOT@6887..6888 "." - NAME@6888..6894 - IDENT@6888..6894 "length" - ARGS_DESC@6894..6897 - L_PAREN@6894..6895 "(" - ARG@6895..6896 - EXPR_VAR@6895..6896 - NAME@6895..6896 - IDENT@6895..6896 "a" - R_PAREN@6896..6897 ")" - WHITESPACE@6897..6898 " " - THEN_KW@6898..6902 "then" - WHITESPACE@6902..6911 "\n " - TRUE_EXPR@6911..6922 - EXPR_BINARY@6911..6922 - LHS_EXPR@6911..6914 - EXPR_VAR@6911..6914 - NAME@6911..6914 - IDENT@6911..6914 "acc" - WHITESPACE@6914..6915 " " - PLUS@6915..6916 "+" - WHITESPACE@6916..6917 " " - EXPR_SLICE@6917..6922 - EXPR_VAR@6917..6918 - NAME@6917..6918 - IDENT@6917..6918 "b" - SLICE_DESC@6918..6922 - L_BRACK@6918..6919 "[" - EXPR_VAR@6919..6920 - NAME@6919..6920 - IDENT@6919..6920 "j" - COLON@6920..6921 ":" - R_BRACK@6921..6922 "]" - WHITESPACE@6922..6929 "\n " - ELSE_KW@6929..6933 "else" - WHITESPACE@6933..6934 " " - FALSE_EXPR@6934..7289 - EXPR_IF_THEN_ELSE@6934..7289 - IF_KW@6934..6936 "if" - WHITESPACE@6936..6937 " " - EXPR_BINARY@6937..6955 - LHS_EXPR@6937..6938 - EXPR_VAR@6937..6938 - NAME@6937..6938 - IDENT@6937..6938 "j" - WHITESPACE@6938..6939 " " - GE@6939..6941 ">=" - WHITESPACE@6941..6942 " " - EXPR_APPLY@6942..6955 - EXPR_INDEX@6942..6952 - EXPR_VAR@6942..6945 - NAME@6942..6945 - IDENT@6942..6945 "std" - DOT@6945..6946 "." - NAME@6946..6952 - IDENT@6946..6952 "length" - ARGS_DESC@6952..6955 - L_PAREN@6952..6953 "(" - ARG@6953..6954 - EXPR_VAR@6953..6954 - NAME@6953..6954 - IDENT@6953..6954 "b" - R_PAREN@6954..6955 ")" - WHITESPACE@6955..6956 " " - THEN_KW@6956..6960 "then" - WHITESPACE@6960..6969 "\n " - TRUE_EXPR@6969..6980 - EXPR_BINARY@6969..6980 - LHS_EXPR@6969..6972 - EXPR_VAR@6969..6972 - NAME@6969..6972 - IDENT@6969..6972 "acc" - WHITESPACE@6972..6973 " " - PLUS@6973..6974 "+" - WHITESPACE@6974..6975 " " - EXPR_SLICE@6975..6980 - EXPR_VAR@6975..6976 - NAME@6975..6976 - IDENT@6975..6976 "a" - SLICE_DESC@6976..6980 - L_BRACK@6976..6977 "[" - EXPR_VAR@6977..6978 - NAME@6977..6978 - IDENT@6977..6978 "i" - COLON@6978..6979 ":" - R_BRACK@6979..6980 "]" - WHITESPACE@6980..6987 "\n " - ELSE_KW@6987..6991 "else" - WHITESPACE@6991..7000 "\n " - FALSE_EXPR@7000..7289 - EXPR_LOCAL@7000..7289 - LOCAL_KW@7000..7005 "local" - WHITESPACE@7005..7006 " " - BIND_DESTRUCT@7006..7021 - DESTRUCT_FULL@7006..7008 - NAME@7006..7008 - IDENT@7006..7008 "ak" - WHITESPACE@7008..7009 " " - ASSIGN@7009..7010 "=" - WHITESPACE@7010..7011 " " - EXPR_APPLY@7011..7021 - EXPR_VAR@7011..7015 - NAME@7011..7015 - IDENT@7011..7015 "keyF" - ARGS_DESC@7015..7021 - L_PAREN@7015..7016 "(" - ARG@7016..7020 - EXPR_INDEX_EXPR@7016..7020 - LHS_EXPR@7016..7017 - EXPR_VAR@7016..7017 - NAME@7016..7017 - IDENT@7016..7017 "a" - L_BRACK@7017..7018 "[" - EXPR_VAR@7018..7019 - NAME@7018..7019 - IDENT@7018..7019 "i" - R_BRACK@7019..7020 "]" - R_PAREN@7020..7021 ")" - SEMI@7021..7022 ";" - WHITESPACE@7022..7031 "\n " - EXPR_LOCAL@7031..7289 - LOCAL_KW@7031..7036 "local" - WHITESPACE@7036..7037 " " - BIND_DESTRUCT@7037..7052 - DESTRUCT_FULL@7037..7039 - NAME@7037..7039 - IDENT@7037..7039 "bk" - WHITESPACE@7039..7040 " " - ASSIGN@7040..7041 "=" - WHITESPACE@7041..7042 " " - EXPR_APPLY@7042..7052 - EXPR_VAR@7042..7046 - NAME@7042..7046 - IDENT@7042..7046 "keyF" - ARGS_DESC@7046..7052 - L_PAREN@7046..7047 "(" - ARG@7047..7051 - EXPR_INDEX_EXPR@7047..7051 - LHS_EXPR@7047..7048 - EXPR_VAR@7047..7048 - NAME@7047..7048 - IDENT@7047..7048 "b" - L_BRACK@7048..7049 "[" - EXPR_VAR@7049..7050 - NAME@7049..7050 - IDENT@7049..7050 "j" - R_BRACK@7050..7051 "]" - R_PAREN@7051..7052 ")" - SEMI@7052..7053 ";" - WHITESPACE@7053..7062 "\n " - EXPR_IF_THEN_ELSE@7062..7289 - IF_KW@7062..7064 "if" - WHITESPACE@7064..7065 " " - EXPR_BINARY@7065..7073 - LHS_EXPR@7065..7067 - EXPR_VAR@7065..7067 - NAME@7065..7067 - IDENT@7065..7067 "ak" - WHITESPACE@7067..7068 " " - EQ@7068..7070 "==" - WHITESPACE@7070..7071 " " - EXPR_VAR@7071..7073 - NAME@7071..7073 - IDENT@7071..7073 "bk" - WHITESPACE@7073..7074 " " - THEN_KW@7074..7078 "then" - WHITESPACE@7078..7089 "\n " - TRUE_EXPR@7089..7137 - EXPR_APPLY@7089..7137 - EXPR_VAR@7089..7092 - NAME@7089..7092 - IDENT@7089..7092 "aux" - ARGS_DESC@7092..7137 - L_PAREN@7092..7093 "(" - ARG@7093..7094 - EXPR_VAR@7093..7094 - NAME@7093..7094 - IDENT@7093..7094 "a" - COMMA@7094..7095 "," - WHITESPACE@7095..7096 " " - ARG@7096..7097 - EXPR_VAR@7096..7097 - NAME@7096..7097 - IDENT@7096..7097 "b" - COMMA@7097..7098 "," - WHITESPACE@7098..7099 " " - ARG@7099..7104 - EXPR_BINARY@7099..7104 - LHS_EXPR@7099..7100 - EXPR_VAR@7099..7100 - NAME@7099..7100 - IDENT@7099..7100 "i" - WHITESPACE@7100..7101 " " - PLUS@7101..7102 "+" - WHITESPACE@7102..7103 " " - EXPR_NUMBER@7103..7104 - FLOAT@7103..7104 "1" - COMMA@7104..7105 "," - WHITESPACE@7105..7106 " " - ARG@7106..7111 - EXPR_BINARY@7106..7111 - LHS_EXPR@7106..7107 - EXPR_VAR@7106..7107 - NAME@7106..7107 - IDENT@7106..7107 "j" - WHITESPACE@7107..7108 " " - PLUS@7108..7109 "+" - WHITESPACE@7109..7110 " " - EXPR_NUMBER@7110..7111 - FLOAT@7110..7111 "1" - COMMA@7111..7112 "," - WHITESPACE@7112..7113 " " - ARG@7113..7125 - EXPR_BINARY@7113..7125 - LHS_EXPR@7113..7116 - EXPR_VAR@7113..7116 - NAME@7113..7116 - IDENT@7113..7116 "acc" - WHITESPACE@7116..7117 " " - PLUS@7117..7118 "+" - WHITESPACE@7118..7119 " " - EXPR_ARRAY@7119..7125 - L_BRACK@7119..7120 "[" - EXPR_INDEX_EXPR@7120..7124 - LHS_EXPR@7120..7121 - EXPR_VAR@7120..7121 - NAME@7120..7121 - IDENT@7120..7121 "a" - L_BRACK@7121..7122 "[" - EXPR_VAR@7122..7123 - NAME@7122..7123 - IDENT@7122..7123 "i" - R_BRACK@7123..7124 "]" - R_BRACK@7124..7125 "]" - R_PAREN@7125..7126 ")" - WHITESPACE@7126..7127 " " - TAILSTRICT_KW@7127..7137 "tailstrict" - WHITESPACE@7137..7146 "\n " - ELSE_KW@7146..7150 "else" - WHITESPACE@7150..7151 " " - FALSE_EXPR@7151..7289 - EXPR_IF_THEN_ELSE@7151..7289 - IF_KW@7151..7153 "if" - WHITESPACE@7153..7154 " " - EXPR_BINARY@7154..7161 - LHS_EXPR@7154..7156 - EXPR_VAR@7154..7156 - NAME@7154..7156 - IDENT@7154..7156 "ak" - WHITESPACE@7156..7157 " " - LT@7157..7158 "<" - WHITESPACE@7158..7159 " " - EXPR_VAR@7159..7161 - NAME@7159..7161 - IDENT@7159..7161 "bk" - WHITESPACE@7161..7162 " " - THEN_KW@7162..7166 "then" - WHITESPACE@7166..7177 "\n " - TRUE_EXPR@7177..7221 - EXPR_APPLY@7177..7221 - EXPR_VAR@7177..7180 - NAME@7177..7180 - IDENT@7177..7180 "aux" - ARGS_DESC@7180..7221 - L_PAREN@7180..7181 "(" - ARG@7181..7182 - EXPR_VAR@7181..7182 - NAME@7181..7182 - IDENT@7181..7182 "a" - COMMA@7182..7183 "," - WHITESPACE@7183..7184 " " - ARG@7184..7185 - EXPR_VAR@7184..7185 - NAME@7184..7185 - IDENT@7184..7185 "b" - COMMA@7185..7186 "," - WHITESPACE@7186..7187 " " - ARG@7187..7192 - EXPR_BINARY@7187..7192 - LHS_EXPR@7187..7188 - EXPR_VAR@7187..7188 - NAME@7187..7188 - IDENT@7187..7188 "i" - WHITESPACE@7188..7189 " " - PLUS@7189..7190 "+" - WHITESPACE@7190..7191 " " - EXPR_NUMBER@7191..7192 - FLOAT@7191..7192 "1" - COMMA@7192..7193 "," - WHITESPACE@7193..7194 " " - ARG@7194..7195 - EXPR_VAR@7194..7195 - NAME@7194..7195 - IDENT@7194..7195 "j" - COMMA@7195..7196 "," - WHITESPACE@7196..7197 " " - ARG@7197..7209 - EXPR_BINARY@7197..7209 - LHS_EXPR@7197..7200 - EXPR_VAR@7197..7200 - NAME@7197..7200 - IDENT@7197..7200 "acc" - WHITESPACE@7200..7201 " " - PLUS@7201..7202 "+" - WHITESPACE@7202..7203 " " - EXPR_ARRAY@7203..7209 - L_BRACK@7203..7204 "[" - EXPR_INDEX_EXPR@7204..7208 - LHS_EXPR@7204..7205 - EXPR_VAR@7204..7205 - NAME@7204..7205 - IDENT@7204..7205 "a" - L_BRACK@7205..7206 "[" - EXPR_VAR@7206..7207 - NAME@7206..7207 - IDENT@7206..7207 "i" - R_BRACK@7207..7208 "]" - R_BRACK@7208..7209 "]" - R_PAREN@7209..7210 ")" - WHITESPACE@7210..7211 " " - TAILSTRICT_KW@7211..7221 "tailstrict" - WHITESPACE@7221..7230 "\n " - ELSE_KW@7230..7234 "else" - WHITESPACE@7234..7245 "\n " - FALSE_EXPR@7245..7289 - EXPR_APPLY@7245..7289 - EXPR_VAR@7245..7248 - NAME@7245..7248 - IDENT@7245..7248 "aux" - ARGS_DESC@7248..7289 - L_PAREN@7248..7249 "(" - ARG@7249..7250 - EXPR_VAR@7249..7250 - NAME@7249..7250 - IDENT@7249..7250 "a" - COMMA@7250..7251 "," - WHITESPACE@7251..7252 " " - ARG@7252..7253 - EXPR_VAR@7252..7253 - NAME@7252..7253 - IDENT@7252..7253 "b" - COMMA@7253..7254 "," - WHITESPACE@7254..7255 " " - ARG@7255..7256 - EXPR_VAR@7255..7256 - NAME@7255..7256 - IDENT@7255..7256 "i" - COMMA@7256..7257 "," - WHITESPACE@7257..7258 " " - ARG@7258..7263 - EXPR_BINARY@7258..7263 - LHS_EXPR@7258..7259 - EXPR_VAR@7258..7259 - NAME@7258..7259 - IDENT@7258..7259 "j" - WHITESPACE@7259..7260 " " - PLUS@7260..7261 "+" - WHITESPACE@7261..7262 " " - EXPR_NUMBER@7262..7263 - FLOAT@7262..7263 "1" - COMMA@7263..7264 "," - WHITESPACE@7264..7265 " " - ARG@7265..7277 - EXPR_BINARY@7265..7277 - LHS_EXPR@7265..7268 - EXPR_VAR@7265..7268 - NAME@7265..7268 - IDENT@7265..7268 "acc" - WHITESPACE@7268..7269 " " - PLUS@7269..7270 "+" - WHITESPACE@7270..7271 " " - EXPR_ARRAY@7271..7277 - L_BRACK@7271..7272 "[" - EXPR_INDEX_EXPR@7272..7276 - LHS_EXPR@7272..7273 - EXPR_VAR@7272..7273 - NAME@7272..7273 - IDENT@7272..7273 "b" - L_BRACK@7273..7274 "[" - EXPR_VAR@7274..7275 - NAME@7274..7275 - IDENT@7274..7275 "j" - R_BRACK@7275..7276 "]" - R_BRACK@7276..7277 "]" - R_PAREN@7277..7278 ")" - WHITESPACE@7278..7279 " " - TAILSTRICT_KW@7279..7289 "tailstrict" - SEMI@7289..7290 ";" - WHITESPACE@7290..7295 "\n " - EXPR_APPLY@7295..7314 - EXPR_VAR@7295..7298 - NAME@7295..7298 - IDENT@7295..7298 "aux" - ARGS_DESC@7298..7314 - L_PAREN@7298..7299 "(" - ARG@7299..7300 - EXPR_VAR@7299..7300 - NAME@7299..7300 - IDENT@7299..7300 "a" - COMMA@7300..7301 "," - WHITESPACE@7301..7302 " " - ARG@7302..7303 - EXPR_VAR@7302..7303 - NAME@7302..7303 - IDENT@7302..7303 "b" - COMMA@7303..7304 "," - WHITESPACE@7304..7305 " " - ARG@7305..7306 - EXPR_NUMBER@7305..7306 - FLOAT@7305..7306 "0" - COMMA@7306..7307 "," - WHITESPACE@7307..7308 " " - ARG@7308..7309 - EXPR_NUMBER@7308..7309 - FLOAT@7308..7309 "0" - COMMA@7309..7310 "," - WHITESPACE@7310..7311 " " - ARG@7311..7313 - EXPR_ARRAY@7311..7313 - L_BRACK@7311..7312 "[" - R_BRACK@7312..7313 "]" - R_PAREN@7313..7314 ")" - COMMA@7314..7315 "," - WHITESPACE@7315..7319 "\n\n " - MEMBER_FIELD_METHOD@7319..7741 - FIELD_NAME_FIXED@7319..7327 - NAME@7319..7327 - IDENT@7319..7327 "setInter" - PARAMS_DESC@7327..7342 - L_PAREN@7327..7328 "(" - PARAM@7328..7329 - DESTRUCT_FULL@7328..7329 - NAME@7328..7329 - IDENT@7328..7329 "a" - COMMA@7329..7330 "," - WHITESPACE@7330..7331 " " - PARAM@7331..7332 - DESTRUCT_FULL@7331..7332 - NAME@7331..7332 - IDENT@7331..7332 "b" - COMMA@7332..7333 "," - WHITESPACE@7333..7334 " " - PARAM@7334..7341 - DESTRUCT_FULL@7334..7338 - NAME@7334..7338 - IDENT@7334..7338 "keyF" - ASSIGN@7338..7339 "=" - EXPR_VAR@7339..7341 - NAME@7339..7341 - IDENT@7339..7341 "id" - R_PAREN@7341..7342 ")" - COLONCOLON@7342..7344 "::" - WHITESPACE@7344..7349 "\n " - EXPR_LOCAL@7349..7741 - LOCAL_KW@7349..7354 "local" - WHITESPACE@7354..7355 " " - BIND_FUNCTION@7355..7705 - NAME@7355..7358 - IDENT@7355..7358 "aux" - PARAMS_DESC@7358..7375 - L_PAREN@7358..7359 "(" - PARAM@7359..7360 - DESTRUCT_FULL@7359..7360 - NAME@7359..7360 - IDENT@7359..7360 "a" - COMMA@7360..7361 "," - WHITESPACE@7361..7362 " " - PARAM@7362..7363 - DESTRUCT_FULL@7362..7363 - NAME@7362..7363 - IDENT@7362..7363 "b" - COMMA@7363..7364 "," - WHITESPACE@7364..7365 " " - PARAM@7365..7366 - DESTRUCT_FULL@7365..7366 - NAME@7365..7366 - IDENT@7365..7366 "i" - COMMA@7366..7367 "," - WHITESPACE@7367..7368 " " - PARAM@7368..7369 - DESTRUCT_FULL@7368..7369 - NAME@7368..7369 - IDENT@7368..7369 "j" - COMMA@7369..7370 "," - WHITESPACE@7370..7371 " " - PARAM@7371..7374 - DESTRUCT_FULL@7371..7374 - NAME@7371..7374 - IDENT@7371..7374 "acc" - R_PAREN@7374..7375 ")" - WHITESPACE@7375..7376 " " - ASSIGN@7376..7377 "=" - WHITESPACE@7377..7384 "\n " - EXPR_IF_THEN_ELSE@7384..7705 - IF_KW@7384..7386 "if" - WHITESPACE@7386..7387 " " - EXPR_BINARY@7387..7427 - LHS_EXPR@7387..7405 - EXPR_BINARY@7387..7405 - LHS_EXPR@7387..7388 - EXPR_VAR@7387..7388 - NAME@7387..7388 - IDENT@7387..7388 "i" - WHITESPACE@7388..7389 " " - GE@7389..7391 ">=" - WHITESPACE@7391..7392 " " - EXPR_APPLY@7392..7405 - EXPR_INDEX@7392..7402 - EXPR_VAR@7392..7395 - NAME@7392..7395 - IDENT@7392..7395 "std" - DOT@7395..7396 "." - NAME@7396..7402 - IDENT@7396..7402 "length" - ARGS_DESC@7402..7405 - L_PAREN@7402..7403 "(" - ARG@7403..7404 - EXPR_VAR@7403..7404 - NAME@7403..7404 - IDENT@7403..7404 "a" - R_PAREN@7404..7405 ")" - WHITESPACE@7405..7406 " " - OR@7406..7408 "||" - WHITESPACE@7408..7409 " " - EXPR_BINARY@7409..7427 - LHS_EXPR@7409..7410 - EXPR_VAR@7409..7410 - NAME@7409..7410 - IDENT@7409..7410 "j" - WHITESPACE@7410..7411 " " - GE@7411..7413 ">=" - WHITESPACE@7413..7414 " " - EXPR_APPLY@7414..7427 - EXPR_INDEX@7414..7424 - EXPR_VAR@7414..7417 - NAME@7414..7417 - IDENT@7414..7417 "std" - DOT@7417..7418 "." - NAME@7418..7424 - IDENT@7418..7424 "length" - ARGS_DESC@7424..7427 - L_PAREN@7424..7425 "(" - ARG@7425..7426 - EXPR_VAR@7425..7426 - NAME@7425..7426 - IDENT@7425..7426 "b" - R_PAREN@7426..7427 ")" - WHITESPACE@7427..7428 " " - THEN_KW@7428..7432 "then" - WHITESPACE@7432..7441 "\n " - TRUE_EXPR@7441..7444 - EXPR_VAR@7441..7444 - NAME@7441..7444 - IDENT@7441..7444 "acc" - WHITESPACE@7444..7451 "\n " - ELSE_KW@7451..7455 "else" - WHITESPACE@7455..7464 "\n " - FALSE_EXPR@7464..7705 - EXPR_IF_THEN_ELSE@7464..7705 - IF_KW@7464..7466 "if" - WHITESPACE@7466..7467 " " - EXPR_BINARY@7467..7491 - LHS_EXPR@7467..7477 - EXPR_APPLY@7467..7477 - EXPR_VAR@7467..7471 - NAME@7467..7471 - IDENT@7467..7471 "keyF" - ARGS_DESC@7471..7477 - L_PAREN@7471..7472 "(" - ARG@7472..7476 - EXPR_INDEX_EXPR@7472..7476 - LHS_EXPR@7472..7473 - EXPR_VAR@7472..7473 - NAME@7472..7473 - IDENT@7472..7473 "a" - L_BRACK@7473..7474 "[" - EXPR_VAR@7474..7475 - NAME@7474..7475 - IDENT@7474..7475 "i" - R_BRACK@7475..7476 "]" - R_PAREN@7476..7477 ")" - WHITESPACE@7477..7478 " " - EQ@7478..7480 "==" - WHITESPACE@7480..7481 " " - EXPR_APPLY@7481..7491 - EXPR_VAR@7481..7485 - NAME@7481..7485 - IDENT@7481..7485 "keyF" - ARGS_DESC@7485..7491 - L_PAREN@7485..7486 "(" - ARG@7486..7490 - EXPR_INDEX_EXPR@7486..7490 - LHS_EXPR@7486..7487 - EXPR_VAR@7486..7487 - NAME@7486..7487 - IDENT@7486..7487 "b" - L_BRACK@7487..7488 "[" - EXPR_VAR@7488..7489 - NAME@7488..7489 - IDENT@7488..7489 "j" - R_BRACK@7489..7490 "]" - R_PAREN@7490..7491 ")" - WHITESPACE@7491..7492 " " - THEN_KW@7492..7496 "then" - WHITESPACE@7496..7507 "\n " - TRUE_EXPR@7507..7555 - EXPR_APPLY@7507..7555 - EXPR_VAR@7507..7510 - NAME@7507..7510 - IDENT@7507..7510 "aux" - ARGS_DESC@7510..7555 - L_PAREN@7510..7511 "(" - ARG@7511..7512 - EXPR_VAR@7511..7512 - NAME@7511..7512 - IDENT@7511..7512 "a" - COMMA@7512..7513 "," - WHITESPACE@7513..7514 " " - ARG@7514..7515 - EXPR_VAR@7514..7515 - NAME@7514..7515 - IDENT@7514..7515 "b" - COMMA@7515..7516 "," - WHITESPACE@7516..7517 " " - ARG@7517..7522 - EXPR_BINARY@7517..7522 - LHS_EXPR@7517..7518 - EXPR_VAR@7517..7518 - NAME@7517..7518 - IDENT@7517..7518 "i" - WHITESPACE@7518..7519 " " - PLUS@7519..7520 "+" - WHITESPACE@7520..7521 " " - EXPR_NUMBER@7521..7522 - FLOAT@7521..7522 "1" - COMMA@7522..7523 "," - WHITESPACE@7523..7524 " " - ARG@7524..7529 - EXPR_BINARY@7524..7529 - LHS_EXPR@7524..7525 - EXPR_VAR@7524..7525 - NAME@7524..7525 - IDENT@7524..7525 "j" - WHITESPACE@7525..7526 " " - PLUS@7526..7527 "+" - WHITESPACE@7527..7528 " " - EXPR_NUMBER@7528..7529 - FLOAT@7528..7529 "1" - COMMA@7529..7530 "," - WHITESPACE@7530..7531 " " - ARG@7531..7543 - EXPR_BINARY@7531..7543 - LHS_EXPR@7531..7534 - EXPR_VAR@7531..7534 - NAME@7531..7534 - IDENT@7531..7534 "acc" - WHITESPACE@7534..7535 " " - PLUS@7535..7536 "+" - WHITESPACE@7536..7537 " " - EXPR_ARRAY@7537..7543 - L_BRACK@7537..7538 "[" - EXPR_INDEX_EXPR@7538..7542 - LHS_EXPR@7538..7539 - EXPR_VAR@7538..7539 - NAME@7538..7539 - IDENT@7538..7539 "a" - L_BRACK@7539..7540 "[" - EXPR_VAR@7540..7541 - NAME@7540..7541 - IDENT@7540..7541 "i" - R_BRACK@7541..7542 "]" - R_BRACK@7542..7543 "]" - R_PAREN@7543..7544 ")" - WHITESPACE@7544..7545 " " - TAILSTRICT_KW@7545..7555 "tailstrict" - WHITESPACE@7555..7564 "\n " - ELSE_KW@7564..7568 "else" - WHITESPACE@7568..7569 " " - FALSE_EXPR@7569..7705 - EXPR_IF_THEN_ELSE@7569..7705 - IF_KW@7569..7571 "if" - WHITESPACE@7571..7572 " " - EXPR_BINARY@7572..7595 - LHS_EXPR@7572..7582 - EXPR_APPLY@7572..7582 - EXPR_VAR@7572..7576 - NAME@7572..7576 - IDENT@7572..7576 "keyF" - ARGS_DESC@7576..7582 - L_PAREN@7576..7577 "(" - ARG@7577..7581 - EXPR_INDEX_EXPR@7577..7581 - LHS_EXPR@7577..7578 - EXPR_VAR@7577..7578 - NAME@7577..7578 - IDENT@7577..7578 "a" - L_BRACK@7578..7579 "[" - EXPR_VAR@7579..7580 - NAME@7579..7580 - IDENT@7579..7580 "i" - R_BRACK@7580..7581 "]" - R_PAREN@7581..7582 ")" - WHITESPACE@7582..7583 " " - LT@7583..7584 "<" - WHITESPACE@7584..7585 " " - EXPR_APPLY@7585..7595 - EXPR_VAR@7585..7589 - NAME@7585..7589 - IDENT@7585..7589 "keyF" - ARGS_DESC@7589..7595 - L_PAREN@7589..7590 "(" - ARG@7590..7594 - EXPR_INDEX_EXPR@7590..7594 - LHS_EXPR@7590..7591 - EXPR_VAR@7590..7591 - NAME@7590..7591 - IDENT@7590..7591 "b" - L_BRACK@7591..7592 "[" - EXPR_VAR@7592..7593 - NAME@7592..7593 - IDENT@7592..7593 "j" - R_BRACK@7593..7594 "]" - R_PAREN@7594..7595 ")" - WHITESPACE@7595..7596 " " - THEN_KW@7596..7600 "then" - WHITESPACE@7600..7611 "\n " - TRUE_EXPR@7611..7646 - EXPR_APPLY@7611..7646 - EXPR_VAR@7611..7614 - NAME@7611..7614 - IDENT@7611..7614 "aux" - ARGS_DESC@7614..7646 - L_PAREN@7614..7615 "(" - ARG@7615..7616 - EXPR_VAR@7615..7616 - NAME@7615..7616 - IDENT@7615..7616 "a" - COMMA@7616..7617 "," - WHITESPACE@7617..7618 " " - ARG@7618..7619 - EXPR_VAR@7618..7619 - NAME@7618..7619 - IDENT@7618..7619 "b" - COMMA@7619..7620 "," - WHITESPACE@7620..7621 " " - ARG@7621..7626 - EXPR_BINARY@7621..7626 - LHS_EXPR@7621..7622 - EXPR_VAR@7621..7622 - NAME@7621..7622 - IDENT@7621..7622 "i" - WHITESPACE@7622..7623 " " - PLUS@7623..7624 "+" - WHITESPACE@7624..7625 " " - EXPR_NUMBER@7625..7626 - FLOAT@7625..7626 "1" - COMMA@7626..7627 "," - WHITESPACE@7627..7628 " " - ARG@7628..7629 - EXPR_VAR@7628..7629 - NAME@7628..7629 - IDENT@7628..7629 "j" - COMMA@7629..7630 "," - WHITESPACE@7630..7631 " " - ARG@7631..7634 - EXPR_VAR@7631..7634 - NAME@7631..7634 - IDENT@7631..7634 "acc" - R_PAREN@7634..7635 ")" - WHITESPACE@7635..7636 " " - TAILSTRICT_KW@7636..7646 "tailstrict" - WHITESPACE@7646..7655 "\n " - ELSE_KW@7655..7659 "else" - WHITESPACE@7659..7670 "\n " - FALSE_EXPR@7670..7705 - EXPR_APPLY@7670..7705 - EXPR_VAR@7670..7673 - NAME@7670..7673 - IDENT@7670..7673 "aux" - ARGS_DESC@7673..7705 - L_PAREN@7673..7674 "(" - ARG@7674..7675 - EXPR_VAR@7674..7675 - NAME@7674..7675 - IDENT@7674..7675 "a" - COMMA@7675..7676 "," - WHITESPACE@7676..7677 " " - ARG@7677..7678 - EXPR_VAR@7677..7678 - NAME@7677..7678 - IDENT@7677..7678 "b" - COMMA@7678..7679 "," - WHITESPACE@7679..7680 " " - ARG@7680..7681 - EXPR_VAR@7680..7681 - NAME@7680..7681 - IDENT@7680..7681 "i" - COMMA@7681..7682 "," - WHITESPACE@7682..7683 " " - ARG@7683..7688 - EXPR_BINARY@7683..7688 - LHS_EXPR@7683..7684 - EXPR_VAR@7683..7684 - NAME@7683..7684 - IDENT@7683..7684 "j" - WHITESPACE@7684..7685 " " - PLUS@7685..7686 "+" - WHITESPACE@7686..7687 " " - EXPR_NUMBER@7687..7688 - FLOAT@7687..7688 "1" - COMMA@7688..7689 "," - WHITESPACE@7689..7690 " " - ARG@7690..7693 - EXPR_VAR@7690..7693 - NAME@7690..7693 - IDENT@7690..7693 "acc" - R_PAREN@7693..7694 ")" - WHITESPACE@7694..7695 " " - TAILSTRICT_KW@7695..7705 "tailstrict" - SEMI@7705..7706 ";" - WHITESPACE@7706..7711 "\n " - EXPR_APPLY@7711..7741 - EXPR_VAR@7711..7714 - NAME@7711..7714 - IDENT@7711..7714 "aux" - ARGS_DESC@7714..7741 - L_PAREN@7714..7715 "(" - ARG@7715..7716 - EXPR_VAR@7715..7716 - NAME@7715..7716 - IDENT@7715..7716 "a" - COMMA@7716..7717 "," - WHITESPACE@7717..7718 " " - ARG@7718..7719 - EXPR_VAR@7718..7719 - NAME@7718..7719 - IDENT@7718..7719 "b" - COMMA@7719..7720 "," - WHITESPACE@7720..7721 " " - ARG@7721..7722 - EXPR_NUMBER@7721..7722 - FLOAT@7721..7722 "0" - COMMA@7722..7723 "," - WHITESPACE@7723..7724 " " - ARG@7724..7725 - EXPR_NUMBER@7724..7725 - FLOAT@7724..7725 "0" - COMMA@7725..7726 "," - WHITESPACE@7726..7727 " " - ARG@7727..7729 - EXPR_ARRAY@7727..7729 - L_BRACK@7727..7728 "[" - R_BRACK@7728..7729 "]" - R_PAREN@7729..7730 ")" - WHITESPACE@7730..7731 " " - TAILSTRICT_KW@7731..7741 "tailstrict" - COMMA@7741..7742 "," - WHITESPACE@7742..7746 "\n\n " - MEMBER_FIELD_METHOD@7746..8203 - FIELD_NAME_FIXED@7746..7753 - NAME@7746..7753 - IDENT@7746..7753 "setDiff" - PARAMS_DESC@7753..7768 - L_PAREN@7753..7754 "(" - PARAM@7754..7755 - DESTRUCT_FULL@7754..7755 - NAME@7754..7755 - IDENT@7754..7755 "a" - COMMA@7755..7756 "," - WHITESPACE@7756..7757 " " - PARAM@7757..7758 - DESTRUCT_FULL@7757..7758 - NAME@7757..7758 - IDENT@7757..7758 "b" - COMMA@7758..7759 "," - WHITESPACE@7759..7760 " " - PARAM@7760..7767 - DESTRUCT_FULL@7760..7764 - NAME@7760..7764 - IDENT@7760..7764 "keyF" - ASSIGN@7764..7765 "=" - EXPR_VAR@7765..7767 - NAME@7765..7767 - IDENT@7765..7767 "id" - R_PAREN@7767..7768 ")" - COLONCOLON@7768..7770 "::" - WHITESPACE@7770..7775 "\n " - EXPR_LOCAL@7775..8203 - LOCAL_KW@7775..7780 "local" - WHITESPACE@7780..7781 " " - BIND_FUNCTION@7781..8167 - NAME@7781..7784 - IDENT@7781..7784 "aux" - PARAMS_DESC@7784..7801 - L_PAREN@7784..7785 "(" - PARAM@7785..7786 - DESTRUCT_FULL@7785..7786 - NAME@7785..7786 - IDENT@7785..7786 "a" - COMMA@7786..7787 "," - WHITESPACE@7787..7788 " " - PARAM@7788..7789 - DESTRUCT_FULL@7788..7789 - NAME@7788..7789 - IDENT@7788..7789 "b" - COMMA@7789..7790 "," - WHITESPACE@7790..7791 " " - PARAM@7791..7792 - DESTRUCT_FULL@7791..7792 - NAME@7791..7792 - IDENT@7791..7792 "i" - COMMA@7792..7793 "," - WHITESPACE@7793..7794 " " - PARAM@7794..7795 - DESTRUCT_FULL@7794..7795 - NAME@7794..7795 - IDENT@7794..7795 "j" - COMMA@7795..7796 "," - WHITESPACE@7796..7797 " " - PARAM@7797..7800 - DESTRUCT_FULL@7797..7800 - NAME@7797..7800 - IDENT@7797..7800 "acc" - R_PAREN@7800..7801 ")" - WHITESPACE@7801..7802 " " - ASSIGN@7802..7803 "=" - WHITESPACE@7803..7810 "\n " - EXPR_IF_THEN_ELSE@7810..8167 - IF_KW@7810..7812 "if" - WHITESPACE@7812..7813 " " - EXPR_BINARY@7813..7831 - LHS_EXPR@7813..7814 - EXPR_VAR@7813..7814 - NAME@7813..7814 - IDENT@7813..7814 "i" - WHITESPACE@7814..7815 " " - GE@7815..7817 ">=" - WHITESPACE@7817..7818 " " - EXPR_APPLY@7818..7831 - EXPR_INDEX@7818..7828 - EXPR_VAR@7818..7821 - NAME@7818..7821 - IDENT@7818..7821 "std" - DOT@7821..7822 "." - NAME@7822..7828 - IDENT@7822..7828 "length" - ARGS_DESC@7828..7831 - L_PAREN@7828..7829 "(" - ARG@7829..7830 - EXPR_VAR@7829..7830 - NAME@7829..7830 - IDENT@7829..7830 "a" - R_PAREN@7830..7831 ")" - WHITESPACE@7831..7832 " " - THEN_KW@7832..7836 "then" - WHITESPACE@7836..7845 "\n " - TRUE_EXPR@7845..7848 - EXPR_VAR@7845..7848 - NAME@7845..7848 - IDENT@7845..7848 "acc" - WHITESPACE@7848..7855 "\n " - ELSE_KW@7855..7859 "else" - WHITESPACE@7859..7860 " " - FALSE_EXPR@7860..8167 - EXPR_IF_THEN_ELSE@7860..8167 - IF_KW@7860..7862 "if" - WHITESPACE@7862..7863 " " - EXPR_BINARY@7863..7881 - LHS_EXPR@7863..7864 - EXPR_VAR@7863..7864 - NAME@7863..7864 - IDENT@7863..7864 "j" - WHITESPACE@7864..7865 " " - GE@7865..7867 ">=" - WHITESPACE@7867..7868 " " - EXPR_APPLY@7868..7881 - EXPR_INDEX@7868..7878 - EXPR_VAR@7868..7871 - NAME@7868..7871 - IDENT@7868..7871 "std" - DOT@7871..7872 "." - NAME@7872..7878 - IDENT@7872..7878 "length" - ARGS_DESC@7878..7881 - L_PAREN@7878..7879 "(" - ARG@7879..7880 - EXPR_VAR@7879..7880 - NAME@7879..7880 - IDENT@7879..7880 "b" - R_PAREN@7880..7881 ")" - WHITESPACE@7881..7882 " " - THEN_KW@7882..7886 "then" - WHITESPACE@7886..7895 "\n " - TRUE_EXPR@7895..7906 - EXPR_BINARY@7895..7906 - LHS_EXPR@7895..7898 - EXPR_VAR@7895..7898 - NAME@7895..7898 - IDENT@7895..7898 "acc" - WHITESPACE@7898..7899 " " - PLUS@7899..7900 "+" - WHITESPACE@7900..7901 " " - EXPR_SLICE@7901..7906 - EXPR_VAR@7901..7902 - NAME@7901..7902 - IDENT@7901..7902 "a" - SLICE_DESC@7902..7906 - L_BRACK@7902..7903 "[" - EXPR_VAR@7903..7904 - NAME@7903..7904 - IDENT@7903..7904 "i" - COLON@7904..7905 ":" - R_BRACK@7905..7906 "]" - WHITESPACE@7906..7913 "\n " - ELSE_KW@7913..7917 "else" - WHITESPACE@7917..7926 "\n " - FALSE_EXPR@7926..8167 - EXPR_IF_THEN_ELSE@7926..8167 - IF_KW@7926..7928 "if" - WHITESPACE@7928..7929 " " - EXPR_BINARY@7929..7953 - LHS_EXPR@7929..7939 - EXPR_APPLY@7929..7939 - EXPR_VAR@7929..7933 - NAME@7929..7933 - IDENT@7929..7933 "keyF" - ARGS_DESC@7933..7939 - L_PAREN@7933..7934 "(" - ARG@7934..7938 - EXPR_INDEX_EXPR@7934..7938 - LHS_EXPR@7934..7935 - EXPR_VAR@7934..7935 - NAME@7934..7935 - IDENT@7934..7935 "a" - L_BRACK@7935..7936 "[" - EXPR_VAR@7936..7937 - NAME@7936..7937 - IDENT@7936..7937 "i" - R_BRACK@7937..7938 "]" - R_PAREN@7938..7939 ")" - WHITESPACE@7939..7940 " " - EQ@7940..7942 "==" - WHITESPACE@7942..7943 " " - EXPR_APPLY@7943..7953 - EXPR_VAR@7943..7947 - NAME@7943..7947 - IDENT@7943..7947 "keyF" - ARGS_DESC@7947..7953 - L_PAREN@7947..7948 "(" - ARG@7948..7952 - EXPR_INDEX_EXPR@7948..7952 - LHS_EXPR@7948..7949 - EXPR_VAR@7948..7949 - NAME@7948..7949 - IDENT@7948..7949 "b" - L_BRACK@7949..7950 "[" - EXPR_VAR@7950..7951 - NAME@7950..7951 - IDENT@7950..7951 "j" - R_BRACK@7951..7952 "]" - R_PAREN@7952..7953 ")" - WHITESPACE@7953..7954 " " - THEN_KW@7954..7958 "then" - WHITESPACE@7958..7969 "\n " - TRUE_EXPR@7969..8008 - EXPR_APPLY@7969..8008 - EXPR_VAR@7969..7972 - NAME@7969..7972 - IDENT@7969..7972 "aux" - ARGS_DESC@7972..8008 - L_PAREN@7972..7973 "(" - ARG@7973..7974 - EXPR_VAR@7973..7974 - NAME@7973..7974 - IDENT@7973..7974 "a" - COMMA@7974..7975 "," - WHITESPACE@7975..7976 " " - ARG@7976..7977 - EXPR_VAR@7976..7977 - NAME@7976..7977 - IDENT@7976..7977 "b" - COMMA@7977..7978 "," - WHITESPACE@7978..7979 " " - ARG@7979..7984 - EXPR_BINARY@7979..7984 - LHS_EXPR@7979..7980 - EXPR_VAR@7979..7980 - NAME@7979..7980 - IDENT@7979..7980 "i" - WHITESPACE@7980..7981 " " - PLUS@7981..7982 "+" - WHITESPACE@7982..7983 " " - EXPR_NUMBER@7983..7984 - FLOAT@7983..7984 "1" - COMMA@7984..7985 "," - WHITESPACE@7985..7986 " " - ARG@7986..7991 - EXPR_BINARY@7986..7991 - LHS_EXPR@7986..7987 - EXPR_VAR@7986..7987 - NAME@7986..7987 - IDENT@7986..7987 "j" - WHITESPACE@7987..7988 " " - PLUS@7988..7989 "+" - WHITESPACE@7989..7990 " " - EXPR_NUMBER@7990..7991 - FLOAT@7990..7991 "1" - COMMA@7991..7992 "," - WHITESPACE@7992..7993 " " - ARG@7993..7996 - EXPR_VAR@7993..7996 - NAME@7993..7996 - IDENT@7993..7996 "acc" - R_PAREN@7996..7997 ")" - WHITESPACE@7997..7998 " " - TAILSTRICT_KW@7998..8008 "tailstrict" - WHITESPACE@8008..8017 "\n " - ELSE_KW@8017..8021 "else" - WHITESPACE@8021..8022 " " - FALSE_EXPR@8022..8167 - EXPR_IF_THEN_ELSE@8022..8167 - IF_KW@8022..8024 "if" - WHITESPACE@8024..8025 " " - EXPR_BINARY@8025..8048 - LHS_EXPR@8025..8035 - EXPR_APPLY@8025..8035 - EXPR_VAR@8025..8029 - NAME@8025..8029 - IDENT@8025..8029 "keyF" - ARGS_DESC@8029..8035 - L_PAREN@8029..8030 "(" - ARG@8030..8034 - EXPR_INDEX_EXPR@8030..8034 - LHS_EXPR@8030..8031 - EXPR_VAR@8030..8031 - NAME@8030..8031 - IDENT@8030..8031 "a" - L_BRACK@8031..8032 "[" - EXPR_VAR@8032..8033 - NAME@8032..8033 - IDENT@8032..8033 "i" - R_BRACK@8033..8034 "]" - R_PAREN@8034..8035 ")" - WHITESPACE@8035..8036 " " - LT@8036..8037 "<" - WHITESPACE@8037..8038 " " - EXPR_APPLY@8038..8048 - EXPR_VAR@8038..8042 - NAME@8038..8042 - IDENT@8038..8042 "keyF" - ARGS_DESC@8042..8048 - L_PAREN@8042..8043 "(" - ARG@8043..8047 - EXPR_INDEX_EXPR@8043..8047 - LHS_EXPR@8043..8044 - EXPR_VAR@8043..8044 - NAME@8043..8044 - IDENT@8043..8044 "b" - L_BRACK@8044..8045 "[" - EXPR_VAR@8045..8046 - NAME@8045..8046 - IDENT@8045..8046 "j" - R_BRACK@8046..8047 "]" - R_PAREN@8047..8048 ")" - WHITESPACE@8048..8049 " " - THEN_KW@8049..8053 "then" - WHITESPACE@8053..8064 "\n " - TRUE_EXPR@8064..8108 - EXPR_APPLY@8064..8108 - EXPR_VAR@8064..8067 - NAME@8064..8067 - IDENT@8064..8067 "aux" - ARGS_DESC@8067..8108 - L_PAREN@8067..8068 "(" - ARG@8068..8069 - EXPR_VAR@8068..8069 - NAME@8068..8069 - IDENT@8068..8069 "a" - COMMA@8069..8070 "," - WHITESPACE@8070..8071 " " - ARG@8071..8072 - EXPR_VAR@8071..8072 - NAME@8071..8072 - IDENT@8071..8072 "b" - COMMA@8072..8073 "," - WHITESPACE@8073..8074 " " - ARG@8074..8079 - EXPR_BINARY@8074..8079 - LHS_EXPR@8074..8075 - EXPR_VAR@8074..8075 - NAME@8074..8075 - IDENT@8074..8075 "i" - WHITESPACE@8075..8076 " " - PLUS@8076..8077 "+" - WHITESPACE@8077..8078 " " - EXPR_NUMBER@8078..8079 - FLOAT@8078..8079 "1" - COMMA@8079..8080 "," - WHITESPACE@8080..8081 " " - ARG@8081..8082 - EXPR_VAR@8081..8082 - NAME@8081..8082 - IDENT@8081..8082 "j" - COMMA@8082..8083 "," - WHITESPACE@8083..8084 " " - ARG@8084..8096 - EXPR_BINARY@8084..8096 - LHS_EXPR@8084..8087 - EXPR_VAR@8084..8087 - NAME@8084..8087 - IDENT@8084..8087 "acc" - WHITESPACE@8087..8088 " " - PLUS@8088..8089 "+" - WHITESPACE@8089..8090 " " - EXPR_ARRAY@8090..8096 - L_BRACK@8090..8091 "[" - EXPR_INDEX_EXPR@8091..8095 - LHS_EXPR@8091..8092 - EXPR_VAR@8091..8092 - NAME@8091..8092 - IDENT@8091..8092 "a" - L_BRACK@8092..8093 "[" - EXPR_VAR@8093..8094 - NAME@8093..8094 - IDENT@8093..8094 "i" - R_BRACK@8094..8095 "]" - R_BRACK@8095..8096 "]" - R_PAREN@8096..8097 ")" - WHITESPACE@8097..8098 " " - TAILSTRICT_KW@8098..8108 "tailstrict" - WHITESPACE@8108..8117 "\n " - ELSE_KW@8117..8121 "else" - WHITESPACE@8121..8132 "\n " - FALSE_EXPR@8132..8167 - EXPR_APPLY@8132..8167 - EXPR_VAR@8132..8135 - NAME@8132..8135 - IDENT@8132..8135 "aux" - ARGS_DESC@8135..8167 - L_PAREN@8135..8136 "(" - ARG@8136..8137 - EXPR_VAR@8136..8137 - NAME@8136..8137 - IDENT@8136..8137 "a" - COMMA@8137..8138 "," - WHITESPACE@8138..8139 " " - ARG@8139..8140 - EXPR_VAR@8139..8140 - NAME@8139..8140 - IDENT@8139..8140 "b" - COMMA@8140..8141 "," - WHITESPACE@8141..8142 " " - ARG@8142..8143 - EXPR_VAR@8142..8143 - NAME@8142..8143 - IDENT@8142..8143 "i" - COMMA@8143..8144 "," - WHITESPACE@8144..8145 " " - ARG@8145..8150 - EXPR_BINARY@8145..8150 - LHS_EXPR@8145..8146 - EXPR_VAR@8145..8146 - NAME@8145..8146 - IDENT@8145..8146 "j" - WHITESPACE@8146..8147 " " - PLUS@8147..8148 "+" - WHITESPACE@8148..8149 " " - EXPR_NUMBER@8149..8150 - FLOAT@8149..8150 "1" - COMMA@8150..8151 "," - WHITESPACE@8151..8152 " " - ARG@8152..8155 - EXPR_VAR@8152..8155 - NAME@8152..8155 - IDENT@8152..8155 "acc" - R_PAREN@8155..8156 ")" - WHITESPACE@8156..8157 " " - TAILSTRICT_KW@8157..8167 "tailstrict" - SEMI@8167..8168 ";" - WHITESPACE@8168..8173 "\n " - EXPR_APPLY@8173..8203 - EXPR_VAR@8173..8176 - NAME@8173..8176 - IDENT@8173..8176 "aux" - ARGS_DESC@8176..8203 - L_PAREN@8176..8177 "(" - ARG@8177..8178 - EXPR_VAR@8177..8178 - NAME@8177..8178 - IDENT@8177..8178 "a" - COMMA@8178..8179 "," - WHITESPACE@8179..8180 " " - ARG@8180..8181 - EXPR_VAR@8180..8181 - NAME@8180..8181 - IDENT@8180..8181 "b" - COMMA@8181..8182 "," - WHITESPACE@8182..8183 " " - ARG@8183..8184 - EXPR_NUMBER@8183..8184 - FLOAT@8183..8184 "0" - COMMA@8184..8185 "," - WHITESPACE@8185..8186 " " - ARG@8186..8187 - EXPR_NUMBER@8186..8187 - FLOAT@8186..8187 "0" - COMMA@8187..8188 "," - WHITESPACE@8188..8189 " " - ARG@8189..8191 - EXPR_ARRAY@8189..8191 - L_BRACK@8189..8190 "[" - R_BRACK@8190..8191 "]" - R_PAREN@8191..8192 ")" - WHITESPACE@8192..8193 " " - TAILSTRICT_KW@8193..8203 "tailstrict" - COMMA@8203..8204 "," - WHITESPACE@8204..8208 "\n\n " - MEMBER_FIELD_METHOD@8208..8996 - FIELD_NAME_FIXED@8208..8218 - NAME@8208..8218 - IDENT@8208..8218 "mergePatch" - PARAMS_DESC@8218..8233 - L_PAREN@8218..8219 "(" - PARAM@8219..8225 - DESTRUCT_FULL@8219..8225 - NAME@8219..8225 - IDENT@8219..8225 "target" - COMMA@8225..8226 "," - WHITESPACE@8226..8227 " " - PARAM@8227..8232 - DESTRUCT_FULL@8227..8232 - NAME@8227..8232 - IDENT@8227..8232 "patch" - R_PAREN@8232..8233 ")" - COLONCOLON@8233..8235 "::" - WHITESPACE@8235..8240 "\n " - EXPR_IF_THEN_ELSE@8240..8996 - IF_KW@8240..8242 "if" + 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" + WHITESPACE@6701..6702 " " + PLUS@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 " " - EXPR_APPLY@8243..8262 - EXPR_INDEX@8243..8255 - EXPR_VAR@8243..8246 - NAME@8243..8246 - IDENT@8243..8246 "std" - DOT@8246..8247 "." - NAME@8247..8255 - IDENT@8247..8255 "isObject" - ARGS_DESC@8255..8262 - L_PAREN@8255..8256 "(" - ARG@8256..8261 - EXPR_VAR@8256..8261 - NAME@8256..8261 - IDENT@8256..8261 "patch" - R_PAREN@8261..8262 ")" - WHITESPACE@8262..8263 " " - THEN_KW@8263..8267 "then" - WHITESPACE@8267..8274 "\n " - TRUE_EXPR@8274..8975 - EXPR_LOCAL@8274..8975 - LOCAL_KW@8274..8279 "local" - WHITESPACE@8279..8280 " " - BIND_DESTRUCT@8280..8347 - DESTRUCT_FULL@8280..8293 - NAME@8280..8293 - IDENT@8280..8293 "target_object" - WHITESPACE@8293..8294 " " - ASSIGN@8294..8295 "=" - WHITESPACE@8295..8304 "\n " - EXPR_IF_THEN_ELSE@8304..8347 - IF_KW@8304..8306 "if" - WHITESPACE@8306..8307 " " - EXPR_APPLY@8307..8327 - EXPR_INDEX@8307..8319 - EXPR_VAR@8307..8310 - NAME@8307..8310 - IDENT@8307..8310 "std" - DOT@8310..8311 "." - NAME@8311..8319 - IDENT@8311..8319 "isObject" - ARGS_DESC@8319..8327 - L_PAREN@8319..8320 "(" - ARG@8320..8326 - EXPR_VAR@8320..8326 - NAME@8320..8326 - IDENT@8320..8326 "target" - R_PAREN@8326..8327 ")" - WHITESPACE@8327..8328 " " - THEN_KW@8328..8332 "then" - WHITESPACE@8332..8333 " " - TRUE_EXPR@8333..8339 - EXPR_VAR@8333..8339 - NAME@8333..8339 - IDENT@8333..8339 "target" - WHITESPACE@8339..8340 " " - ELSE_KW@8340..8344 "else" - WHITESPACE@8344..8345 " " - FALSE_EXPR@8345..8347 - EXPR_OBJECT@8345..8347 - OBJ_BODY_MEMBER_LIST@8345..8347 - L_BRACE@8345..8346 "{" - R_BRACE@8346..8347 "}" - SEMI@8347..8348 ";" - WHITESPACE@8348..8356 "\n\n " - EXPR_LOCAL@8356..8975 - LOCAL_KW@8356..8361 "local" - WHITESPACE@8361..8362 " " - BIND_DESTRUCT@8362..8461 - DESTRUCT_FULL@8362..8375 - NAME@8362..8375 - IDENT@8362..8375 "target_fields" - WHITESPACE@8375..8376 " " - ASSIGN@8376..8377 "=" - WHITESPACE@8377..8386 "\n " - EXPR_IF_THEN_ELSE@8386..8461 - IF_KW@8386..8388 "if" - WHITESPACE@8388..8389 " " - EXPR_APPLY@8389..8416 - EXPR_INDEX@8389..8401 - EXPR_VAR@8389..8392 - NAME@8389..8392 - IDENT@8389..8392 "std" - DOT@8392..8393 "." - NAME@8393..8401 - IDENT@8393..8401 "isObject" - ARGS_DESC@8401..8416 - L_PAREN@8401..8402 "(" - ARG@8402..8415 - EXPR_VAR@8402..8415 - NAME@8402..8415 - IDENT@8402..8415 "target_object" - R_PAREN@8415..8416 ")" - WHITESPACE@8416..8417 " " - THEN_KW@8417..8421 "then" - WHITESPACE@8421..8422 " " - TRUE_EXPR@8422..8453 - EXPR_APPLY@8422..8453 - EXPR_INDEX@8422..8438 - EXPR_VAR@8422..8425 - NAME@8422..8425 - IDENT@8422..8425 "std" - DOT@8425..8426 "." - NAME@8426..8438 - IDENT@8426..8438 "objectFields" - ARGS_DESC@8438..8453 - L_PAREN@8438..8439 "(" - ARG@8439..8452 - EXPR_VAR@8439..8452 - NAME@8439..8452 - IDENT@8439..8452 "target_object" - R_PAREN@8452..8453 ")" - WHITESPACE@8453..8454 " " - ELSE_KW@8454..8458 "else" - WHITESPACE@8458..8459 " " - FALSE_EXPR@8459..8461 - EXPR_ARRAY@8459..8461 - L_BRACK@8459..8460 "[" - R_BRACK@8460..8461 "]" - SEMI@8461..8462 ";" - WHITESPACE@8462..8470 "\n\n " - EXPR_LOCAL@8470..8975 - LOCAL_KW@8470..8475 "local" - WHITESPACE@8475..8476 " " - BIND_DESTRUCT@8476..8546 - DESTRUCT_FULL@8476..8487 - NAME@8476..8487 - IDENT@8476..8487 "null_fields" - WHITESPACE@8487..8488 " " - ASSIGN@8488..8489 "=" - WHITESPACE@8489..8490 " " - EXPR_ARRAY_COMP@8490..8546 - L_BRACK@8490..8491 "[" - EXPR_VAR@8491..8492 - NAME@8491..8492 - IDENT@8491..8492 "k" - WHITESPACE@8492..8493 " " - FOR_SPEC@8493..8525 - FOR_KW@8493..8496 "for" - WHITESPACE@8496..8497 " " - NAME@8497..8498 - IDENT@8497..8498 "k" - WHITESPACE@8498..8499 " " - IN_KW@8499..8501 "in" - WHITESPACE@8501..8502 " " - EXPR_APPLY@8502..8525 - EXPR_INDEX@8502..8518 - EXPR_VAR@8502..8505 - NAME@8502..8505 - IDENT@8502..8505 "std" - DOT@8505..8506 "." - NAME@8506..8518 - IDENT@8506..8518 "objectFields" - ARGS_DESC@8518..8525 - L_PAREN@8518..8519 "(" - ARG@8519..8524 - EXPR_VAR@8519..8524 - NAME@8519..8524 - IDENT@8519..8524 "patch" - R_PAREN@8524..8525 ")" - WHITESPACE@8525..8526 " " - IF_SPEC@8526..8545 - IF_KW@8526..8528 "if" - WHITESPACE@8528..8529 " " - EXPR_BINARY@8529..8545 - LHS_EXPR@8529..8537 - EXPR_INDEX_EXPR@8529..8537 - LHS_EXPR@8529..8534 - EXPR_VAR@8529..8534 - NAME@8529..8534 - IDENT@8529..8534 "patch" - L_BRACK@8534..8535 "[" - EXPR_VAR@8535..8536 - NAME@8535..8536 - IDENT@8535..8536 "k" - R_BRACK@8536..8537 "]" - WHITESPACE@8537..8538 " " - EQ@8538..8540 "==" - WHITESPACE@8540..8541 " " - EXPR_LITERAL@8541..8545 - NULL_KW@8541..8545 "null" - R_BRACK@8545..8546 "]" - SEMI@8546..8547 ";" - WHITESPACE@8547..8554 "\n " - EXPR_LOCAL@8554..8975 - LOCAL_KW@8554..8559 "local" - WHITESPACE@8559..8560 " " - BIND_DESTRUCT@8560..8626 - DESTRUCT_FULL@8560..8571 - NAME@8560..8571 - IDENT@8560..8571 "both_fields" - WHITESPACE@8571..8572 " " - ASSIGN@8572..8573 "=" - WHITESPACE@8573..8574 " " - EXPR_APPLY@8574..8626 - EXPR_INDEX@8574..8586 - EXPR_VAR@8574..8577 - NAME@8574..8577 - IDENT@8574..8577 "std" - DOT@8577..8578 "." - NAME@8578..8586 - IDENT@8578..8586 "setUnion" - ARGS_DESC@8586..8626 - L_PAREN@8586..8587 "(" - ARG@8587..8600 - EXPR_VAR@8587..8600 - NAME@8587..8600 - IDENT@8587..8600 "target_fields" - COMMA@8600..8601 "," - WHITESPACE@8601..8602 " " - ARG@8602..8625 - EXPR_APPLY@8602..8625 - EXPR_INDEX@8602..8618 - EXPR_VAR@8602..8605 - NAME@8602..8605 - IDENT@8602..8605 "std" - DOT@8605..8606 "." - NAME@8606..8618 - IDENT@8606..8618 "objectFields" - ARGS_DESC@8618..8625 - L_PAREN@8618..8619 "(" - ARG@8619..8624 - EXPR_VAR@8619..8624 - NAME@8619..8624 - IDENT@8619..8624 "patch" - R_PAREN@8624..8625 ")" - R_PAREN@8625..8626 ")" - SEMI@8626..8627 ";" - WHITESPACE@8627..8635 "\n\n " - EXPR_OBJECT@8635..8975 - OBJ_BODY_COMP@8635..8975 - L_BRACE@8635..8636 "{" - WHITESPACE@8636..8645 "\n " - MEMBER_FIELD_NORMAL@8645..8912 - FIELD_NAME_DYNAMIC@8645..8648 - L_BRACK@8645..8646 "[" - EXPR_VAR@8646..8647 - NAME@8646..8647 - IDENT@8646..8647 "k" - R_BRACK@8647..8648 "]" - COLON@8648..8649 ":" - WHITESPACE@8649..8660 "\n " - EXPR_IF_THEN_ELSE@8660..8912 - IF_KW@8660..8662 "if" - WHITESPACE@8662..8663 " " - EXPR_UNARY@8663..8687 - NOT@8663..8664 "!" - EXPR_APPLY@8664..8687 - EXPR_INDEX@8664..8677 - EXPR_VAR@8664..8667 - NAME@8664..8667 - IDENT@8664..8667 "std" - DOT@8667..8668 "." - NAME@8668..8677 - IDENT@8668..8677 "objectHas" - ARGS_DESC@8677..8687 - L_PAREN@8677..8678 "(" - ARG@8678..8683 - EXPR_VAR@8678..8683 - NAME@8678..8683 - IDENT@8678..8683 "patch" - COMMA@8683..8684 "," - WHITESPACE@8684..8685 " " - ARG@8685..8686 - EXPR_VAR@8685..8686 - NAME@8685..8686 - IDENT@8685..8686 "k" - R_PAREN@8686..8687 ")" - WHITESPACE@8687..8688 " " - THEN_KW@8688..8692 "then" - WHITESPACE@8692..8705 "\n " - TRUE_EXPR@8705..8721 - EXPR_INDEX_EXPR@8705..8721 - LHS_EXPR@8705..8718 - EXPR_VAR@8705..8718 - NAME@8705..8718 - IDENT@8705..8718 "target_object" - L_BRACK@8718..8719 "[" - EXPR_VAR@8719..8720 - NAME@8719..8720 - IDENT@8719..8720 "k" - R_BRACK@8720..8721 "]" - WHITESPACE@8721..8732 "\n " - ELSE_KW@8732..8736 "else" - WHITESPACE@8736..8737 " " - FALSE_EXPR@8737..8912 - EXPR_IF_THEN_ELSE@8737..8912 - IF_KW@8737..8739 "if" - WHITESPACE@8739..8740 " " - EXPR_UNARY@8740..8772 - NOT@8740..8741 "!" - EXPR_APPLY@8741..8772 - EXPR_INDEX@8741..8754 - EXPR_VAR@8741..8744 - NAME@8741..8744 - IDENT@8741..8744 "std" - DOT@8744..8745 "." - NAME@8745..8754 - IDENT@8745..8754 "objectHas" - ARGS_DESC@8754..8772 - L_PAREN@8754..8755 "(" - ARG@8755..8768 - EXPR_VAR@8755..8768 - NAME@8755..8768 - IDENT@8755..8768 "target_object" - COMMA@8768..8769 "," - WHITESPACE@8769..8770 " " - ARG@8770..8771 - EXPR_VAR@8770..8771 - NAME@8770..8771 - IDENT@8770..8771 "k" - R_PAREN@8771..8772 ")" - WHITESPACE@8772..8773 " " - THEN_KW@8773..8777 "then" - WHITESPACE@8777..8790 "\n " - TRUE_EXPR@8790..8831 - EXPR_APPLY@8790..8831 - EXPR_INDEX@8790..8804 - EXPR_VAR@8790..8793 - NAME@8790..8793 - IDENT@8790..8793 "std" - DOT@8793..8794 "." - NAME@8794..8804 - IDENT@8794..8804 "mergePatch" - ARGS_DESC@8804..8831 - L_PAREN@8804..8805 "(" - ARG@8805..8809 - EXPR_LITERAL@8805..8809 - NULL_KW@8805..8809 "null" - COMMA@8809..8810 "," - WHITESPACE@8810..8811 " " - ARG@8811..8819 - EXPR_INDEX_EXPR@8811..8819 - LHS_EXPR@8811..8816 - EXPR_VAR@8811..8816 - NAME@8811..8816 - IDENT@8811..8816 "patch" - L_BRACK@8816..8817 "[" - EXPR_VAR@8817..8818 - NAME@8817..8818 - IDENT@8817..8818 "k" - R_BRACK@8818..8819 "]" - R_PAREN@8819..8820 ")" - WHITESPACE@8820..8821 " " - TAILSTRICT_KW@8821..8831 "tailstrict" - WHITESPACE@8831..8842 "\n " - ELSE_KW@8842..8846 "else" - WHITESPACE@8846..8859 "\n " - FALSE_EXPR@8859..8912 - EXPR_APPLY@8859..8912 - EXPR_INDEX@8859..8873 - EXPR_VAR@8859..8862 - NAME@8859..8862 - IDENT@8859..8862 "std" - DOT@8862..8863 "." - NAME@8863..8873 - IDENT@8863..8873 "mergePatch" - ARGS_DESC@8873..8912 - L_PAREN@8873..8874 "(" - ARG@8874..8890 - EXPR_INDEX_EXPR@8874..8890 - LHS_EXPR@8874..8887 - EXPR_VAR@8874..8887 - NAME@8874..8887 - IDENT@8874..8887 "target_object" - L_BRACK@8887..8888 "[" - EXPR_VAR@8888..8889 - NAME@8888..8889 - IDENT@8888..8889 "k" - R_BRACK@8889..8890 "]" - COMMA@8890..8891 "," - WHITESPACE@8891..8892 " " - ARG@8892..8900 - EXPR_INDEX_EXPR@8892..8900 - LHS_EXPR@8892..8897 - EXPR_VAR@8892..8897 - NAME@8892..8897 - IDENT@8892..8897 "patch" - L_BRACK@8897..8898 "[" - EXPR_VAR@8898..8899 - NAME@8898..8899 - IDENT@8898..8899 "k" - R_BRACK@8899..8900 "]" - R_PAREN@8900..8901 ")" - WHITESPACE@8901..8902 " " - TAILSTRICT_KW@8902..8912 "tailstrict" - WHITESPACE@8912..8921 "\n " - FOR_SPEC@8921..8967 - FOR_KW@8921..8924 "for" - WHITESPACE@8924..8925 " " - NAME@8925..8926 - IDENT@8925..8926 "k" - WHITESPACE@8926..8927 " " - IN_KW@8927..8929 "in" - WHITESPACE@8929..8930 " " - EXPR_APPLY@8930..8967 - EXPR_INDEX@8930..8941 - EXPR_VAR@8930..8933 - NAME@8930..8933 - IDENT@8930..8933 "std" - DOT@8933..8934 "." - NAME@8934..8941 - IDENT@8934..8941 "setDiff" - ARGS_DESC@8941..8967 - L_PAREN@8941..8942 "(" - ARG@8942..8953 - EXPR_VAR@8942..8953 - NAME@8942..8953 - IDENT@8942..8953 "both_fields" - COMMA@8953..8954 "," - WHITESPACE@8954..8955 " " - ARG@8955..8966 - EXPR_VAR@8955..8966 - NAME@8955..8966 - IDENT@8955..8966 "null_fields" - R_PAREN@8966..8967 ")" - WHITESPACE@8967..8974 "\n " - R_BRACE@8974..8975 "}" - WHITESPACE@8975..8980 "\n " - ELSE_KW@8980..8984 "else" - WHITESPACE@8984..8991 "\n " - FALSE_EXPR@8991..8996 - EXPR_VAR@8991..8996 - NAME@8991..8996 - IDENT@8991..8996 "patch" - COMMA@8996..8997 "," - WHITESPACE@8997..9001 "\n\n " - MEMBER_FIELD_METHOD@9001..9107 - FIELD_NAME_FIXED@9001..9004 - NAME@9001..9004 - IDENT@9001..9004 "get" - PARAMS_DESC@9004..9041 - L_PAREN@9004..9005 "(" - PARAM@9005..9006 - DESTRUCT_FULL@9005..9006 - NAME@9005..9006 - IDENT@9005..9006 "o" - COMMA@9006..9007 "," - WHITESPACE@9007..9008 " " - PARAM@9008..9009 - DESTRUCT_FULL@9008..9009 - NAME@9008..9009 - IDENT@9008..9009 "f" - COMMA@9009..9010 "," - WHITESPACE@9010..9011 " " - PARAM@9011..9023 - DESTRUCT_FULL@9011..9018 - NAME@9011..9018 - IDENT@9011..9018 "default" - ASSIGN@9018..9019 "=" - EXPR_LITERAL@9019..9023 - NULL_KW@9019..9023 "null" - COMMA@9023..9024 "," - WHITESPACE@9024..9025 " " - PARAM@9025..9040 - DESTRUCT_FULL@9025..9035 - NAME@9025..9035 - IDENT@9025..9035 "inc_hidden" - ASSIGN@9035..9036 "=" - EXPR_LITERAL@9036..9040 - TRUE_KW@9036..9040 "true" - R_PAREN@9040..9041 ")" - COLONCOLON@9041..9043 "::" - WHITESPACE@9043..9048 "\n " - EXPR_IF_THEN_ELSE@9048..9107 - IF_KW@9048..9050 "if" - WHITESPACE@9050..9051 " " - EXPR_APPLY@9051..9084 - EXPR_INDEX@9051..9066 - EXPR_VAR@9051..9054 - NAME@9051..9054 - IDENT@9051..9054 "std" - DOT@9054..9055 "." - NAME@9055..9066 - IDENT@9055..9066 "objectHasEx" - ARGS_DESC@9066..9084 - L_PAREN@9066..9067 "(" - ARG@9067..9068 - EXPR_VAR@9067..9068 - NAME@9067..9068 - IDENT@9067..9068 "o" - COMMA@9068..9069 "," - WHITESPACE@9069..9070 " " - ARG@9070..9071 - EXPR_VAR@9070..9071 - NAME@9070..9071 - IDENT@9070..9071 "f" - COMMA@9071..9072 "," - WHITESPACE@9072..9073 " " - ARG@9073..9083 - EXPR_VAR@9073..9083 - NAME@9073..9083 - IDENT@9073..9083 "inc_hidden" - R_PAREN@9083..9084 ")" - WHITESPACE@9084..9085 " " - THEN_KW@9085..9089 "then" - WHITESPACE@9089..9090 " " - TRUE_EXPR@9090..9094 - EXPR_INDEX_EXPR@9090..9094 - LHS_EXPR@9090..9091 - EXPR_VAR@9090..9091 - NAME@9090..9091 - IDENT@9090..9091 "o" - L_BRACK@9091..9092 "[" - EXPR_VAR@9092..9093 - NAME@9092..9093 - IDENT@9092..9093 "f" - R_BRACK@9093..9094 "]" - WHITESPACE@9094..9095 " " - ELSE_KW@9095..9099 "else" - WHITESPACE@9099..9100 " " - FALSE_EXPR@9100..9107 - EXPR_VAR@9100..9107 - NAME@9100..9107 - IDENT@9100..9107 "default" - COMMA@9107..9108 "," - WHITESPACE@9108..9112 "\n\n " - MEMBER_FIELD_METHOD@9112..9162 - FIELD_NAME_FIXED@9112..9124 - NAME@9112..9124 - IDENT@9112..9124 "objectFields" - PARAMS_DESC@9124..9127 - L_PAREN@9124..9125 "(" - PARAM@9125..9126 - DESTRUCT_FULL@9125..9126 - NAME@9125..9126 - IDENT@9125..9126 "o" - R_PAREN@9126..9127 ")" - COLONCOLON@9127..9129 "::" - WHITESPACE@9129..9134 "\n " - EXPR_APPLY@9134..9162 - EXPR_INDEX@9134..9152 - EXPR_VAR@9134..9137 - NAME@9134..9137 - IDENT@9134..9137 "std" - DOT@9137..9138 "." - NAME@9138..9152 - IDENT@9138..9152 "objectFieldsEx" - ARGS_DESC@9152..9162 - L_PAREN@9152..9153 "(" - ARG@9153..9154 - EXPR_VAR@9153..9154 - NAME@9153..9154 - IDENT@9153..9154 "o" - COMMA@9154..9155 "," - WHITESPACE@9155..9156 " " - ARG@9156..9161 - EXPR_LITERAL@9156..9161 - FALSE_KW@9156..9161 "false" - R_PAREN@9161..9162 ")" - COMMA@9162..9163 "," - WHITESPACE@9163..9167 "\n\n " - MEMBER_FIELD_METHOD@9167..9219 - FIELD_NAME_FIXED@9167..9182 - NAME@9167..9182 - IDENT@9167..9182 "objectFieldsAll" - PARAMS_DESC@9182..9185 - L_PAREN@9182..9183 "(" - PARAM@9183..9184 - DESTRUCT_FULL@9183..9184 - NAME@9183..9184 - IDENT@9183..9184 "o" - R_PAREN@9184..9185 ")" - COLONCOLON@9185..9187 "::" - WHITESPACE@9187..9192 "\n " - EXPR_APPLY@9192..9219 - EXPR_INDEX@9192..9210 - EXPR_VAR@9192..9195 - NAME@9192..9195 - IDENT@9192..9195 "std" - DOT@9195..9196 "." - NAME@9196..9210 - IDENT@9196..9210 "objectFieldsEx" - ARGS_DESC@9210..9219 - L_PAREN@9210..9211 "(" - ARG@9211..9212 - EXPR_VAR@9211..9212 - NAME@9211..9212 - IDENT@9211..9212 "o" - COMMA@9212..9213 "," - WHITESPACE@9213..9214 " " - ARG@9214..9218 - EXPR_LITERAL@9214..9218 - TRUE_KW@9214..9218 "true" - R_PAREN@9218..9219 ")" - COMMA@9219..9220 "," - WHITESPACE@9220..9224 "\n\n " - MEMBER_FIELD_METHOD@9224..9274 - FIELD_NAME_FIXED@9224..9233 - NAME@9224..9233 - IDENT@9224..9233 "objectHas" - PARAMS_DESC@9233..9239 - L_PAREN@9233..9234 "(" - PARAM@9234..9235 - DESTRUCT_FULL@9234..9235 - NAME@9234..9235 - IDENT@9234..9235 "o" - COMMA@9235..9236 "," - WHITESPACE@9236..9237 " " - PARAM@9237..9238 - DESTRUCT_FULL@9237..9238 - NAME@9237..9238 - IDENT@9237..9238 "f" - R_PAREN@9238..9239 ")" - COLONCOLON@9239..9241 "::" - WHITESPACE@9241..9246 "\n " - EXPR_APPLY@9246..9274 - EXPR_INDEX@9246..9261 - EXPR_VAR@9246..9249 - NAME@9246..9249 - IDENT@9246..9249 "std" - DOT@9249..9250 "." - NAME@9250..9261 - IDENT@9250..9261 "objectHasEx" - ARGS_DESC@9261..9274 - L_PAREN@9261..9262 "(" - ARG@9262..9263 - EXPR_VAR@9262..9263 - NAME@9262..9263 - IDENT@9262..9263 "o" - COMMA@9263..9264 "," - WHITESPACE@9264..9265 " " - ARG@9265..9266 - EXPR_VAR@9265..9266 - NAME@9265..9266 - IDENT@9265..9266 "f" - COMMA@9266..9267 "," - WHITESPACE@9267..9268 " " - ARG@9268..9273 - EXPR_LITERAL@9268..9273 - FALSE_KW@9268..9273 "false" - R_PAREN@9273..9274 ")" - COMMA@9274..9275 "," - WHITESPACE@9275..9279 "\n\n " - MEMBER_FIELD_METHOD@9279..9331 - FIELD_NAME_FIXED@9279..9291 - NAME@9279..9291 - IDENT@9279..9291 "objectHasAll" - PARAMS_DESC@9291..9297 - L_PAREN@9291..9292 "(" - PARAM@9292..9293 - DESTRUCT_FULL@9292..9293 - NAME@9292..9293 - IDENT@9292..9293 "o" - COMMA@9293..9294 "," - WHITESPACE@9294..9295 " " - PARAM@9295..9296 - DESTRUCT_FULL@9295..9296 - NAME@9295..9296 - IDENT@9295..9296 "f" - R_PAREN@9296..9297 ")" - COLONCOLON@9297..9299 "::" - WHITESPACE@9299..9304 "\n " - EXPR_APPLY@9304..9331 - EXPR_INDEX@9304..9319 - EXPR_VAR@9304..9307 - NAME@9304..9307 - IDENT@9304..9307 "std" - DOT@9307..9308 "." - NAME@9308..9319 - IDENT@9308..9319 "objectHasEx" - ARGS_DESC@9319..9331 - L_PAREN@9319..9320 "(" - ARG@9320..9321 - EXPR_VAR@9320..9321 - NAME@9320..9321 - IDENT@9320..9321 "o" - COMMA@9321..9322 "," - WHITESPACE@9322..9323 " " - ARG@9323..9324 - EXPR_VAR@9323..9324 - NAME@9323..9324 - IDENT@9323..9324 "f" - COMMA@9324..9325 "," - WHITESPACE@9325..9326 " " - ARG@9326..9330 - EXPR_LITERAL@9326..9330 - TRUE_KW@9326..9330 "true" - R_PAREN@9330..9331 ")" - COMMA@9331..9332 "," - WHITESPACE@9332..9336 "\n\n " - MEMBER_FIELD_METHOD@9336..9393 - FIELD_NAME_FIXED@9336..9348 - NAME@9336..9348 - IDENT@9336..9348 "objectValues" - PARAMS_DESC@9348..9351 - L_PAREN@9348..9349 "(" - PARAM@9349..9350 - DESTRUCT_FULL@9349..9350 - NAME@9349..9350 - IDENT@9349..9350 "o" - R_PAREN@9350..9351 ")" - COLONCOLON@9351..9353 "::" - WHITESPACE@9353..9358 "\n " - EXPR_ARRAY_COMP@9358..9393 - L_BRACK@9358..9359 "[" - EXPR_INDEX_EXPR@9359..9363 - LHS_EXPR@9359..9360 - EXPR_VAR@9359..9360 - NAME@9359..9360 - IDENT@9359..9360 "o" - L_BRACK@9360..9361 "[" - EXPR_VAR@9361..9362 - NAME@9361..9362 - IDENT@9361..9362 "k" - R_BRACK@9362..9363 "]" - WHITESPACE@9363..9364 " " - FOR_SPEC@9364..9392 - FOR_KW@9364..9367 "for" - WHITESPACE@9367..9368 " " - NAME@9368..9369 - IDENT@9368..9369 "k" - WHITESPACE@9369..9370 " " - IN_KW@9370..9372 "in" - WHITESPACE@9372..9373 " " - EXPR_APPLY@9373..9392 - EXPR_INDEX@9373..9389 - EXPR_VAR@9373..9376 - NAME@9373..9376 - IDENT@9373..9376 "std" - DOT@9376..9377 "." - NAME@9377..9389 - IDENT@9377..9389 "objectFields" - ARGS_DESC@9389..9392 - L_PAREN@9389..9390 "(" - ARG@9390..9391 - EXPR_VAR@9390..9391 - NAME@9390..9391 - IDENT@9390..9391 "o" - R_PAREN@9391..9392 ")" - R_BRACK@9392..9393 "]" - COMMA@9393..9394 "," - WHITESPACE@9394..9398 "\n\n " - MEMBER_FIELD_METHOD@9398..9461 - FIELD_NAME_FIXED@9398..9413 - NAME@9398..9413 - IDENT@9398..9413 "objectValuesAll" - PARAMS_DESC@9413..9416 - L_PAREN@9413..9414 "(" - PARAM@9414..9415 - DESTRUCT_FULL@9414..9415 - NAME@9414..9415 - IDENT@9414..9415 "o" - R_PAREN@9415..9416 ")" - COLONCOLON@9416..9418 "::" - WHITESPACE@9418..9423 "\n " - EXPR_ARRAY_COMP@9423..9461 - L_BRACK@9423..9424 "[" - EXPR_INDEX_EXPR@9424..9428 - LHS_EXPR@9424..9425 - EXPR_VAR@9424..9425 - NAME@9424..9425 - IDENT@9424..9425 "o" - L_BRACK@9425..9426 "[" - EXPR_VAR@9426..9427 - NAME@9426..9427 - IDENT@9426..9427 "k" - R_BRACK@9427..9428 "]" - WHITESPACE@9428..9429 " " - FOR_SPEC@9429..9460 - FOR_KW@9429..9432 "for" - WHITESPACE@9432..9433 " " - NAME@9433..9434 - IDENT@9433..9434 "k" - WHITESPACE@9434..9435 " " - IN_KW@9435..9437 "in" - WHITESPACE@9437..9438 " " - EXPR_APPLY@9438..9460 - EXPR_INDEX@9438..9457 - EXPR_VAR@9438..9441 - NAME@9438..9441 - IDENT@9438..9441 "std" - DOT@9441..9442 "." - NAME@9442..9457 - IDENT@9442..9457 "objectFieldsAll" - ARGS_DESC@9457..9460 - L_PAREN@9457..9458 "(" - ARG@9458..9459 - EXPR_VAR@9458..9459 - NAME@9458..9459 - IDENT@9458..9459 "o" - R_PAREN@9459..9460 ")" - R_BRACK@9460..9461 "]" - COMMA@9461..9462 "," - WHITESPACE@9462..9466 "\n\n " - MEMBER_FIELD_METHOD@9466..9600 - FIELD_NAME_FIXED@9466..9477 - NAME@9466..9477 - IDENT@9466..9477 "resolvePath" - PARAMS_DESC@9477..9483 - L_PAREN@9477..9478 "(" - PARAM@9478..9479 - DESTRUCT_FULL@9478..9479 - NAME@9478..9479 - IDENT@9478..9479 "f" - COMMA@9479..9480 "," - WHITESPACE@9480..9481 " " - PARAM@9481..9482 - DESTRUCT_FULL@9481..9482 - NAME@9481..9482 - IDENT@9481..9482 "r" - R_PAREN@9482..9483 ")" - COLONCOLON@9483..9485 "::" - WHITESPACE@9485..9490 "\n " - EXPR_LOCAL@9490..9600 - LOCAL_KW@9490..9495 "local" - WHITESPACE@9495..9496 " " - BIND_DESTRUCT@9496..9519 - DESTRUCT_FULL@9496..9499 - NAME@9496..9499 - IDENT@9496..9499 "arr" - WHITESPACE@9499..9500 " " - ASSIGN@9500..9501 "=" - WHITESPACE@9501..9502 " " - EXPR_APPLY@9502..9519 - EXPR_INDEX@9502..9511 - EXPR_VAR@9502..9505 - NAME@9502..9505 - IDENT@9502..9505 "std" - DOT@9505..9506 "." - NAME@9506..9511 - IDENT@9506..9511 "split" - ARGS_DESC@9511..9519 - L_PAREN@9511..9512 "(" - ARG@9512..9513 - EXPR_VAR@9512..9513 - NAME@9512..9513 - IDENT@9512..9513 "f" - COMMA@9513..9514 "," + 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 " " - ARG@9515..9518 - EXPR_STRING@9515..9518 - STRING_SINGLE@9515..9518 "'/'" - R_PAREN@9518..9519 ")" - SEMI@9519..9520 ";" - WHITESPACE@9520..9525 "\n " - EXPR_APPLY@9525..9600 - EXPR_INDEX@9525..9533 - EXPR_VAR@9525..9528 - NAME@9525..9528 - IDENT@9525..9528 "std" - DOT@9528..9529 "." - NAME@9529..9533 - IDENT@9529..9533 "join" - ARGS_DESC@9533..9600 - L_PAREN@9533..9534 "(" - ARG@9534..9537 - EXPR_STRING@9534..9537 - STRING_SINGLE@9534..9537 "'/'" - COMMA@9537..9538 "," - WHITESPACE@9538..9539 " " - ARG@9539..9599 - EXPR_BINARY@9539..9599 - LHS_EXPR@9539..9593 - EXPR_APPLY@9539..9593 - EXPR_INDEX@9539..9552 - EXPR_VAR@9539..9542 - NAME@9539..9542 - IDENT@9539..9542 "std" - DOT@9542..9543 "." - NAME@9543..9552 - IDENT@9543..9552 "makeArray" - ARGS_DESC@9552..9593 - L_PAREN@9552..9553 "(" - ARG@9553..9572 - EXPR_BINARY@9553..9572 - LHS_EXPR@9553..9568 - EXPR_APPLY@9553..9568 - EXPR_INDEX@9553..9563 - EXPR_VAR@9553..9556 - NAME@9553..9556 - IDENT@9553..9556 "std" - DOT@9556..9557 "." - NAME@9557..9563 - IDENT@9557..9563 "length" - ARGS_DESC@9563..9568 - L_PAREN@9563..9564 "(" - ARG@9564..9567 - EXPR_VAR@9564..9567 - NAME@9564..9567 - IDENT@9564..9567 "arr" - R_PAREN@9567..9568 ")" - WHITESPACE@9568..9569 " " - MINUS@9569..9570 "-" - WHITESPACE@9570..9571 " " - EXPR_NUMBER@9571..9572 - FLOAT@9571..9572 "1" - COMMA@9572..9573 "," - WHITESPACE@9573..9574 " " - ARG@9574..9592 - EXPR_FUNCTION@9574..9592 - FUNCTION_KW@9574..9582 "function" - PARAMS_DESC@9582..9585 - L_PAREN@9582..9583 "(" - PARAM@9583..9584 - DESTRUCT_FULL@9583..9584 - NAME@9583..9584 - IDENT@9583..9584 "i" - R_PAREN@9584..9585 ")" - WHITESPACE@9585..9586 " " - EXPR_INDEX_EXPR@9586..9592 - LHS_EXPR@9586..9589 - EXPR_VAR@9586..9589 - NAME@9586..9589 - IDENT@9586..9589 "arr" - L_BRACK@9589..9590 "[" - EXPR_VAR@9590..9591 - NAME@9590..9591 - IDENT@9590..9591 "i" - R_BRACK@9591..9592 "]" - R_PAREN@9592..9593 ")" - WHITESPACE@9593..9594 " " - PLUS@9594..9595 "+" - WHITESPACE@9595..9596 " " - EXPR_ARRAY@9596..9599 - L_BRACK@9596..9597 "[" - EXPR_VAR@9597..9598 - NAME@9597..9598 - IDENT@9597..9598 "r" - R_BRACK@9598..9599 "]" - R_PAREN@9599..9600 ")" - COMMA@9600..9601 "," - WHITESPACE@9601..9605 "\n\n " - MEMBER_FIELD_METHOD@9605..10058 - FIELD_NAME_FIXED@9605..9610 - NAME@9605..9610 - IDENT@9605..9610 "prune" - PARAMS_DESC@9610..9613 - L_PAREN@9610..9611 "(" - PARAM@9611..9612 - DESTRUCT_FULL@9611..9612 - NAME@9611..9612 - IDENT@9611..9612 "a" - R_PAREN@9612..9613 ")" - COLONCOLON@9613..9615 "::" - WHITESPACE@9615..9620 "\n " - EXPR_LOCAL@9620..10058 - LOCAL_KW@9620..9625 "local" + 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 " " - BIND_FUNCTION@9626..9823 - NAME@9626..9635 - IDENT@9626..9635 "isContent" - PARAMS_DESC@9635..9638 - L_PAREN@9635..9636 "(" - PARAM@9636..9637 - DESTRUCT_FULL@9636..9637 - NAME@9636..9637 - IDENT@9636..9637 "b" - R_PAREN@9637..9638 ")" - WHITESPACE@9638..9639 " " - ASSIGN@9639..9640 "=" - WHITESPACE@9640..9647 "\n " - EXPR_IF_THEN_ELSE@9647..9823 - IF_KW@9647..9649 "if" - WHITESPACE@9649..9650 " " - EXPR_BINARY@9650..9659 - LHS_EXPR@9650..9651 - EXPR_VAR@9650..9651 - NAME@9650..9651 - IDENT@9650..9651 "b" - WHITESPACE@9651..9652 " " - EQ@9652..9654 "==" - WHITESPACE@9654..9655 " " - EXPR_LITERAL@9655..9659 - NULL_KW@9655..9659 "null" - WHITESPACE@9659..9660 " " - THEN_KW@9660..9664 "then" - WHITESPACE@9664..9673 "\n " - TRUE_EXPR@9673..9678 - EXPR_LITERAL@9673..9678 - FALSE_KW@9673..9678 "false" - WHITESPACE@9678..9685 "\n " - ELSE_KW@9685..9689 "else" - WHITESPACE@9689..9690 " " - FALSE_EXPR@9690..9823 - EXPR_IF_THEN_ELSE@9690..9823 - IF_KW@9690..9692 "if" - WHITESPACE@9692..9693 " " - EXPR_APPLY@9693..9707 - EXPR_INDEX@9693..9704 - EXPR_VAR@9693..9696 - NAME@9693..9696 - IDENT@9693..9696 "std" - DOT@9696..9697 "." - NAME@9697..9704 - IDENT@9697..9704 "isArray" - ARGS_DESC@9704..9707 - L_PAREN@9704..9705 "(" - ARG@9705..9706 - EXPR_VAR@9705..9706 - NAME@9705..9706 - IDENT@9705..9706 "b" - R_PAREN@9706..9707 ")" - WHITESPACE@9707..9708 " " - THEN_KW@9708..9712 "then" - WHITESPACE@9712..9721 "\n " - TRUE_EXPR@9721..9738 - EXPR_BINARY@9721..9738 - LHS_EXPR@9721..9734 - EXPR_APPLY@9721..9734 - EXPR_INDEX@9721..9731 - EXPR_VAR@9721..9724 - NAME@9721..9724 - IDENT@9721..9724 "std" - DOT@9724..9725 "." - NAME@9725..9731 - IDENT@9725..9731 "length" - ARGS_DESC@9731..9734 - L_PAREN@9731..9732 "(" - ARG@9732..9733 - EXPR_VAR@9732..9733 - NAME@9732..9733 - IDENT@9732..9733 "b" - R_PAREN@9733..9734 ")" - WHITESPACE@9734..9735 " " - GT@9735..9736 ">" - WHITESPACE@9736..9737 " " - EXPR_NUMBER@9737..9738 - FLOAT@9737..9738 "0" - WHITESPACE@9738..9745 "\n " - ELSE_KW@9745..9749 "else" - WHITESPACE@9749..9750 " " - FALSE_EXPR@9750..9823 - EXPR_IF_THEN_ELSE@9750..9823 - IF_KW@9750..9752 "if" - WHITESPACE@9752..9753 " " - EXPR_APPLY@9753..9768 - EXPR_INDEX@9753..9765 - EXPR_VAR@9753..9756 - NAME@9753..9756 - IDENT@9753..9756 "std" - DOT@9756..9757 "." - NAME@9757..9765 - IDENT@9757..9765 "isObject" - ARGS_DESC@9765..9768 - L_PAREN@9765..9766 "(" - ARG@9766..9767 - EXPR_VAR@9766..9767 - NAME@9766..9767 - IDENT@9766..9767 "b" - R_PAREN@9767..9768 ")" - WHITESPACE@9768..9769 " " - THEN_KW@9769..9773 "then" - WHITESPACE@9773..9782 "\n " - TRUE_EXPR@9782..9799 - EXPR_BINARY@9782..9799 - LHS_EXPR@9782..9795 - EXPR_APPLY@9782..9795 - EXPR_INDEX@9782..9792 - EXPR_VAR@9782..9785 - NAME@9782..9785 - IDENT@9782..9785 "std" - DOT@9785..9786 "." - NAME@9786..9792 - IDENT@9786..9792 "length" - ARGS_DESC@9792..9795 - L_PAREN@9792..9793 "(" - ARG@9793..9794 - EXPR_VAR@9793..9794 - NAME@9793..9794 - IDENT@9793..9794 "b" - R_PAREN@9794..9795 ")" - WHITESPACE@9795..9796 " " - GT@9796..9797 ">" - WHITESPACE@9797..9798 " " - EXPR_NUMBER@9798..9799 - FLOAT@9798..9799 "0" - WHITESPACE@9799..9806 "\n " - ELSE_KW@9806..9810 "else" - WHITESPACE@9810..9819 "\n " - FALSE_EXPR@9819..9823 - EXPR_LITERAL@9819..9823 - TRUE_KW@9819..9823 "true" - SEMI@9823..9824 ";" - WHITESPACE@9824..9829 "\n " - EXPR_IF_THEN_ELSE@9829..10058 - IF_KW@9829..9831 "if" - WHITESPACE@9831..9832 " " - EXPR_APPLY@9832..9846 - EXPR_INDEX@9832..9843 - EXPR_VAR@9832..9835 - NAME@9832..9835 - IDENT@9832..9835 "std" - DOT@9835..9836 "." - NAME@9836..9843 - IDENT@9836..9843 "isArray" - ARGS_DESC@9843..9846 - L_PAREN@9843..9844 "(" - ARG@9844..9845 - EXPR_VAR@9844..9845 - NAME@9844..9845 - IDENT@9844..9845 "a" - R_PAREN@9845..9846 ")" - WHITESPACE@9846..9847 " " - THEN_KW@9847..9851 "then" - WHITESPACE@9851..9858 "\n " - TRUE_EXPR@9858..9908 - EXPR_ARRAY_COMP@9858..9908 - L_BRACK@9858..9859 "[" - EXPR_APPLY@9859..9871 - EXPR_INDEX@9859..9868 - EXPR_VAR@9859..9862 - NAME@9859..9862 - IDENT@9859..9862 "std" - DOT@9862..9863 "." - NAME@9863..9868 - IDENT@9863..9868 "prune" - ARGS_DESC@9868..9871 - L_PAREN@9868..9869 "(" - ARG@9869..9870 - EXPR_VAR@9869..9870 - NAME@9869..9870 - IDENT@9869..9870 "x" - R_PAREN@9870..9871 ")" - WHITESPACE@9871..9872 " " - FOR_SPEC@9872..9882 - FOR_KW@9872..9875 "for" - WHITESPACE@9875..9876 " " - NAME@9876..9877 - IDENT@9876..9877 "x" - WHITESPACE@9877..9878 " " - IN_KW@9878..9880 "in" - WHITESPACE@9880..9881 " " - EXPR_VAR@9881..9882 - NAME@9881..9882 - IDENT@9881..9882 "a" - WHITESPACE@9882..9883 " " - IF_SPEC@9883..9907 - IF_KW@9883..9885 "if" - WHITESPACE@9885..9886 " " - EXPR_APPLY@9886..9907 - EXPR_VAR@9886..9895 - NAME@9886..9895 - IDENT@9886..9895 "isContent" - ARGS_DESC@9895..9907 - L_PAREN@9895..9896 "(" - ARG@9896..9906 - EXPR_APPLY@9896..9906 - EXPR_INDEX@9896..9903 - EXPR_LITERAL@9896..9897 - DOLLAR@9896..9897 "$" - DOT@9897..9898 "." - NAME@9898..9903 - IDENT@9898..9903 "prune" - ARGS_DESC@9903..9906 - L_PAREN@9903..9904 "(" - ARG@9904..9905 - EXPR_VAR@9904..9905 - NAME@9904..9905 - IDENT@9904..9905 "x" - R_PAREN@9905..9906 ")" - R_PAREN@9906..9907 ")" - R_BRACK@9907..9908 "]" - WHITESPACE@9908..9913 "\n " - ELSE_KW@9913..9917 "else" - WHITESPACE@9917..9918 " " - FALSE_EXPR@9918..10058 - EXPR_IF_THEN_ELSE@9918..10058 - IF_KW@9918..9920 "if" - WHITESPACE@9920..9921 " " - EXPR_APPLY@9921..9936 - EXPR_INDEX@9921..9933 - EXPR_VAR@9921..9924 - NAME@9921..9924 - IDENT@9921..9924 "std" - DOT@9924..9925 "." - NAME@9925..9933 - IDENT@9925..9933 "isObject" - ARGS_DESC@9933..9936 - L_PAREN@9933..9934 "(" - ARG@9934..9935 - EXPR_VAR@9934..9935 - NAME@9934..9935 - IDENT@9934..9935 "a" - R_PAREN@9935..9936 ")" - WHITESPACE@9936..9937 " " - THEN_KW@9937..9941 "then" - WHITESPACE@9941..9942 " " - TRUE_EXPR@9942..10045 - EXPR_OBJECT@9942..10045 - OBJ_BODY_COMP@9942..10045 - L_BRACE@9942..9943 "{" - WHITESPACE@9943..9950 "\n " - MEMBER_FIELD_NORMAL@9950..9968 - FIELD_NAME_DYNAMIC@9950..9953 - L_BRACK@9950..9951 "[" - EXPR_VAR@9951..9952 - NAME@9951..9952 - IDENT@9951..9952 "x" - R_BRACK@9952..9953 "]" - COLON@9953..9954 ":" - WHITESPACE@9954..9955 " " - EXPR_APPLY@9955..9968 - EXPR_INDEX@9955..9962 - EXPR_LITERAL@9955..9956 - DOLLAR@9955..9956 "$" - DOT@9956..9957 "." - NAME@9957..9962 - IDENT@9957..9962 "prune" - ARGS_DESC@9962..9968 - L_PAREN@9962..9963 "(" - ARG@9963..9967 - EXPR_INDEX_EXPR@9963..9967 - LHS_EXPR@9963..9964 - EXPR_VAR@9963..9964 - NAME@9963..9964 - IDENT@9963..9964 "a" - L_BRACK@9964..9965 "[" - EXPR_VAR@9965..9966 - NAME@9965..9966 - IDENT@9965..9966 "x" - R_BRACK@9966..9967 "]" - R_PAREN@9967..9968 ")" - WHITESPACE@9968..9975 "\n " - FOR_SPEC@9975..10003 - FOR_KW@9975..9978 "for" - WHITESPACE@9978..9979 " " - NAME@9979..9980 - IDENT@9979..9980 "x" - WHITESPACE@9980..9981 " " - IN_KW@9981..9983 "in" - WHITESPACE@9983..9984 " " - EXPR_APPLY@9984..10003 - EXPR_INDEX@9984..10000 - EXPR_VAR@9984..9987 - NAME@9984..9987 - IDENT@9984..9987 "std" - DOT@9987..9988 "." - NAME@9988..10000 - IDENT@9988..10000 "objectFields" - ARGS_DESC@10000..10003 - L_PAREN@10000..10001 "(" - ARG@10001..10002 - EXPR_VAR@10001..10002 - NAME@10001..10002 - IDENT@10001..10002 "a" - R_PAREN@10002..10003 ")" - WHITESPACE@10003..10010 "\n " - IF_SPEC@10010..10039 - IF_KW@10010..10012 "if" - WHITESPACE@10012..10013 " " - EXPR_APPLY@10013..10039 - EXPR_VAR@10013..10022 - NAME@10013..10022 - IDENT@10013..10022 "isContent" - ARGS_DESC@10022..10039 - L_PAREN@10022..10023 "(" - ARG@10023..10038 - EXPR_APPLY@10023..10038 - EXPR_INDEX@10023..10032 - EXPR_VAR@10023..10026 - NAME@10023..10026 - IDENT@10023..10026 "std" - DOT@10026..10027 "." - NAME@10027..10032 - IDENT@10027..10032 "prune" - ARGS_DESC@10032..10038 - L_PAREN@10032..10033 "(" - ARG@10033..10037 - EXPR_INDEX_EXPR@10033..10037 - LHS_EXPR@10033..10034 - EXPR_VAR@10033..10034 - NAME@10033..10034 - IDENT@10033..10034 "a" - L_BRACK@10034..10035 "[" - EXPR_VAR@10035..10036 - NAME@10035..10036 - IDENT@10035..10036 "x" - R_BRACK@10036..10037 "]" - R_PAREN@10037..10038 ")" - R_PAREN@10038..10039 ")" - WHITESPACE@10039..10044 "\n " - R_BRACE@10044..10045 "}" - WHITESPACE@10045..10046 " " - ELSE_KW@10046..10050 "else" - WHITESPACE@10050..10057 "\n " - FALSE_EXPR@10057..10058 - EXPR_VAR@10057..10058 - NAME@10057..10058 - IDENT@10057..10058 "a" - COMMA@10058..10059 "," - WHITESPACE@10059..10063 "\n\n " - MEMBER_FIELD_METHOD@10063..10278 - FIELD_NAME_FIXED@10063..10067 - NAME@10063..10067 - IDENT@10063..10067 "find" - PARAMS_DESC@10067..10079 - L_PAREN@10067..10068 "(" - PARAM@10068..10073 - DESTRUCT_FULL@10068..10073 - NAME@10068..10073 - IDENT@10068..10073 "value" - COMMA@10073..10074 "," - WHITESPACE@10074..10075 " " - PARAM@10075..10078 - DESTRUCT_FULL@10075..10078 - NAME@10075..10078 - IDENT@10075..10078 "arr" - R_PAREN@10078..10079 ")" - COLONCOLON@10079..10081 "::" - WHITESPACE@10081..10086 "\n " - EXPR_IF_THEN_ELSE@10086..10278 - IF_KW@10086..10088 "if" - WHITESPACE@10088..10089 " " - EXPR_UNARY@10089..10106 - NOT@10089..10090 "!" - EXPR_APPLY@10090..10106 - EXPR_INDEX@10090..10101 - EXPR_VAR@10090..10093 - NAME@10090..10093 - IDENT@10090..10093 "std" - DOT@10093..10094 "." - NAME@10094..10101 - IDENT@10094..10101 "isArray" - ARGS_DESC@10101..10106 - L_PAREN@10101..10102 "(" - ARG@10102..10105 - EXPR_VAR@10102..10105 - NAME@10102..10105 - IDENT@10102..10105 "arr" - R_PAREN@10105..10106 ")" - WHITESPACE@10106..10107 " " - THEN_KW@10107..10111 "then" - WHITESPACE@10111..10118 "\n " - TRUE_EXPR@10118..10188 - EXPR_ERROR@10118..10188 - ERROR_KW@10118..10123 "error" - WHITESPACE@10123..10124 " " - EXPR_BINARY@10124..10188 - LHS_EXPR@10124..10172 - EXPR_STRING@10124..10172 - STRING_SINGLE@10124..10172 "'find second paramete ..." - WHITESPACE@10172..10173 " " - PLUS@10173..10174 "+" - WHITESPACE@10174..10175 " " - EXPR_APPLY@10175..10188 - EXPR_INDEX@10175..10183 - EXPR_VAR@10175..10178 - NAME@10175..10178 - IDENT@10175..10178 "std" - DOT@10178..10179 "." - NAME@10179..10183 - IDENT@10179..10183 "type" - ARGS_DESC@10183..10188 - L_PAREN@10183..10184 "(" - ARG@10184..10187 - EXPR_VAR@10184..10187 - NAME@10184..10187 - IDENT@10184..10187 "arr" - R_PAREN@10187..10188 ")" - WHITESPACE@10188..10193 "\n " - ELSE_KW@10193..10197 "else" - WHITESPACE@10197..10204 "\n " - FALSE_EXPR@10204..10278 - EXPR_APPLY@10204..10278 - EXPR_INDEX@10204..10214 - EXPR_VAR@10204..10207 - NAME@10204..10207 - IDENT@10204..10207 "std" - DOT@10207..10208 "." - NAME@10208..10214 - IDENT@10208..10214 "filter" - ARGS_DESC@10214..10278 - L_PAREN@10214..10215 "(" - ARG@10215..10242 - EXPR_FUNCTION@10215..10242 - FUNCTION_KW@10215..10223 "function" - PARAMS_DESC@10223..10226 - L_PAREN@10223..10224 "(" - PARAM@10224..10225 - DESTRUCT_FULL@10224..10225 - NAME@10224..10225 - IDENT@10224..10225 "i" - R_PAREN@10225..10226 ")" - WHITESPACE@10226..10227 " " - EXPR_BINARY@10227..10242 - LHS_EXPR@10227..10233 - EXPR_INDEX_EXPR@10227..10233 - LHS_EXPR@10227..10230 - EXPR_VAR@10227..10230 - NAME@10227..10230 - IDENT@10227..10230 "arr" - L_BRACK@10230..10231 "[" - EXPR_VAR@10231..10232 - NAME@10231..10232 - IDENT@10231..10232 "i" - R_BRACK@10232..10233 "]" - WHITESPACE@10233..10234 " " - EQ@10234..10236 "==" - WHITESPACE@10236..10237 " " - EXPR_VAR@10237..10242 - NAME@10237..10242 - IDENT@10237..10242 "value" - COMMA@10242..10243 "," - WHITESPACE@10243..10244 " " - ARG@10244..10277 - EXPR_APPLY@10244..10277 - EXPR_INDEX@10244..10253 - EXPR_VAR@10244..10247 - NAME@10244..10247 - IDENT@10244..10247 "std" - DOT@10247..10248 "." - NAME@10248..10253 - IDENT@10248..10253 "range" - ARGS_DESC@10253..10277 - L_PAREN@10253..10254 "(" - ARG@10254..10255 - EXPR_NUMBER@10254..10255 - FLOAT@10254..10255 "0" - COMMA@10255..10256 "," - WHITESPACE@10256..10257 " " - ARG@10257..10276 - EXPR_BINARY@10257..10276 - LHS_EXPR@10257..10272 - EXPR_APPLY@10257..10272 - EXPR_INDEX@10257..10267 - EXPR_VAR@10257..10260 - NAME@10257..10260 - IDENT@10257..10260 "std" - DOT@10260..10261 "." - NAME@10261..10267 - IDENT@10261..10267 "length" - ARGS_DESC@10267..10272 - L_PAREN@10267..10268 "(" - ARG@10268..10271 - EXPR_VAR@10268..10271 - NAME@10268..10271 - IDENT@10268..10271 "arr" - R_PAREN@10271..10272 ")" - WHITESPACE@10272..10273 " " - MINUS@10273..10274 "-" - WHITESPACE@10274..10275 " " - EXPR_NUMBER@10275..10276 - FLOAT@10275..10276 "1" - R_PAREN@10276..10277 ")" - R_PAREN@10277..10278 ")" - COMMA@10278..10279 "," - WHITESPACE@10279..10280 "\n" - R_BRACE@10280..10281 "}" - WHITESPACE@10281..10282 "\n" + 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" --- 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,7 +3,7 @@ expression: "local * = 1;\na\n" --- SOURCE_FILE@0..15 - EXPR_LOCAL@0..14 + STMT_LOCAL@0..12 LOCAL_KW@0..5 "local" WHITESPACE@5..6 " " BIND_DESTRUCT@6..11 @@ -15,10 +15,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" + 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/tests.rs +++ b/crates/jrsonnet-rowan-parser/src/tests.rs @@ -244,3 +244,10 @@ let result = process(src); insta::assert_snapshot!("stdlib", result, src); } +#[test] +fn eval_simple() { + let src = "local a = 1, b = 2; a + local c = 1; c"; + let (node, errors) = parse(src); + + dbg!(node); +} --- a/flake.nix +++ b/flake.nix @@ -132,6 +132,7 @@ cargo-asm cargo-outdated cargo-watch + cargo-insta lld hyperfine graphviz