git.delta.rocks / jrsonnet / refs/commits / 3248f25fe079

difftreelog

refactor support new jrsonnet features in rowan parser

Yaroslav Bolyukin2023-09-11parent: #a7bbbb4.patch.diff
in: master

43 files changed

modifiedcrates/jrsonnet-rowan-parser/jsonnet.ungramdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/jsonnet.ungram
+++ b/crates/jrsonnet-rowan-parser/jsonnet.ungram
@@ -5,32 +5,47 @@
 
 SourceFile = Expr
 
-ExprBinary =
-    lhs:LhsExpr
-    BinaryOperator
-    rhs:Expr
-ExprUnary =
-    UnaryOperator
-    rhs:Expr
-ExprSlice =
-    Expr
-    SliceDesc
-ExprIndex =
-    Expr
+SuffixIndex =
+    '?'?
     '.'
     index:Name
-ExprIndexExpr =
-    base:LhsExpr
+SuffixIndexExpr =
+    ('?' '.')?
     '['
     index:Expr
     ']'
-ExprApply =
-    Expr
+SuffixSlice =
+    SliceDesc
+SuffixApply =
     ArgsDesc
     'tailstrict'?
+Suffix =
+    SuffixIndex
+|   SuffixIndexExpr
+|   SuffixSlice
+|   SuffixApply
+
+StmtLocal =
+    'local'
+    (Bind (',' Bind)* ','?)
+    ';'
+StmtAssert =
+    Assertion
+    ';'
+Stmt =
+    StmtLocal
+|   StmtAssert
+
+ExprBinary =
+    lhs:Expr
+    BinaryOperator
+    rhs:Expr
+ExprUnary =
+    UnaryOperator
+    rhs:Expr
 ExprObjExtend =
-    LhsExpr
     Expr
+    Expr
 ExprParened =
     '('
     Expr
@@ -79,29 +94,18 @@
     ParamsDesc
     ')'
     Expr
-ExprAssert =
-    Assertion
-    ';'
-    Expr
 ExprError =
     'error'
     Expr
 
-StmtLocal =
-    'local'
-    (Bind (',' Bind)* ','?)
-    ';'
-
 Expr =
-    StmtLocal*
+    Stmt*
     ExprBase
+    Suffix*
+
 ExprBase =
     ExprBinary
 |   ExprUnary
-|   ExprSlice
-|   ExprIndex
-|   ExprIndexExpr
-|   ExprApply
 |   ExprObjExtend
 |   ExprParened
 |   ExprString
@@ -114,11 +118,10 @@
 |   ExprVar
 |   ExprIfThenElse
 |   ExprFunction
-|   ExprAssert
 |   ExprError
 
 BinaryOperator =
-    '||' | '&&'
+    '||' | '??' | '&&'
 |   '|' | '^' | '&'
 |   '==' | '!=' | '<' | '>' | '<=' | '>=' | 'in'
 |   '<<' | '>>'
@@ -242,7 +245,7 @@
 
 ForSpec =
     'for'
-    bind:Name
+    bind:Destruct
     'in'
     Expr
 IfSpec =
@@ -278,7 +281,7 @@
 
 Assertion =
     'assert'
-    condition:LhsExpr
+    condition:Expr
     (
         ':'
         message:Expr
@@ -336,7 +339,6 @@
 // Aliases used to resolve node type conflicts
 TrueExpr=Expr
 FalseExpr=Expr
-LhsExpr=Expr
 
 // Trivia - tokens which will be implicitly skipped for parser
 Trivia =
modifiedcrates/jrsonnet-rowan-parser/src/generated/nodes.rsdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/generated/nodes.rs
+++ b/crates/jrsonnet-rowan-parser/src/generated/nodes.rs
@@ -23,61 +23,70 @@
 	pub(crate) syntax: SyntaxNode,
 }
 impl Expr {
-	pub fn stmt_locals(&self) -> AstChildren<StmtLocal> {
+	pub fn stmts(&self) -> AstChildren<Stmt> {
 		support::children(&self.syntax)
 	}
 	pub fn expr_base(&self) -> Option<ExprBase> {
 		support::child(&self.syntax)
 	}
+	pub fn suffixs(&self) -> AstChildren<Suffix> {
+		support::children(&self.syntax)
+	}
 }
 
 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
-pub struct ExprBinary {
+pub struct SuffixIndex {
 	pub(crate) syntax: SyntaxNode,
 }
-impl ExprBinary {
-	pub fn lhs(&self) -> Option<LhsExpr> {
-		support::child(&self.syntax)
+impl SuffixIndex {
+	pub fn question_mark_token(&self) -> Option<SyntaxToken> {
+		support::token(&self.syntax, T![?])
 	}
-	pub fn binary_operator(&self) -> Option<BinaryOperator> {
-		support::token_child(&self.syntax)
+	pub fn dot_token(&self) -> Option<SyntaxToken> {
+		support::token(&self.syntax, T![.])
 	}
-	pub fn rhs(&self) -> Option<Expr> {
+	pub fn index(&self) -> Option<Name> {
 		support::child(&self.syntax)
 	}
 }
 
 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
-pub struct LhsExpr {
+pub struct Name {
 	pub(crate) syntax: SyntaxNode,
 }
-impl LhsExpr {
-	pub fn expr(&self) -> Option<Expr> {
-		support::child(&self.syntax)
+impl Name {
+	pub fn ident_lit(&self) -> Option<SyntaxToken> {
+		support::token(&self.syntax, IDENT)
 	}
 }
 
 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
-pub struct ExprUnary {
+pub struct SuffixIndexExpr {
 	pub(crate) syntax: SyntaxNode,
 }
-impl ExprUnary {
-	pub fn unary_operator(&self) -> Option<UnaryOperator> {
-		support::token_child(&self.syntax)
+impl SuffixIndexExpr {
+	pub fn question_mark_token(&self) -> Option<SyntaxToken> {
+		support::token(&self.syntax, T![?])
 	}
-	pub fn rhs(&self) -> Option<Expr> {
+	pub fn dot_token(&self) -> Option<SyntaxToken> {
+		support::token(&self.syntax, T![.])
+	}
+	pub fn l_brack_token(&self) -> Option<SyntaxToken> {
+		support::token(&self.syntax, T!['['])
+	}
+	pub fn index(&self) -> Option<Expr> {
 		support::child(&self.syntax)
 	}
+	pub fn r_brack_token(&self) -> Option<SyntaxToken> {
+		support::token(&self.syntax, T![']'])
+	}
 }
 
 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
-pub struct ExprSlice {
+pub struct SuffixSlice {
 	pub(crate) syntax: SyntaxNode,
 }
-impl ExprSlice {
-	pub fn expr(&self) -> Option<Expr> {
-		support::child(&self.syntax)
-	}
+impl SuffixSlice {
 	pub fn slice_desc(&self) -> Option<SliceDesc> {
 		support::child(&self.syntax)
 	}
@@ -109,79 +118,108 @@
 }
 
 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
-pub struct ExprIndex {
+pub struct SuffixApply {
 	pub(crate) syntax: SyntaxNode,
 }
-impl ExprIndex {
-	pub fn expr(&self) -> Option<Expr> {
+impl SuffixApply {
+	pub fn args_desc(&self) -> Option<ArgsDesc> {
 		support::child(&self.syntax)
 	}
-	pub fn dot_token(&self) -> Option<SyntaxToken> {
-		support::token(&self.syntax, T![.])
+	pub fn tailstrict_kw_token(&self) -> Option<SyntaxToken> {
+		support::token(&self.syntax, T![tailstrict])
+	}
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Hash)]
+pub struct ArgsDesc {
+	pub(crate) syntax: SyntaxNode,
+}
+impl ArgsDesc {
+	pub fn l_paren_token(&self) -> Option<SyntaxToken> {
+		support::token(&self.syntax, T!['('])
+	}
+	pub fn args(&self) -> AstChildren<Arg> {
+		support::children(&self.syntax)
 	}
-	pub fn index(&self) -> Option<Name> {
-		support::child(&self.syntax)
+	pub fn r_paren_token(&self) -> Option<SyntaxToken> {
+		support::token(&self.syntax, T![')'])
 	}
 }
 
 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
-pub struct Name {
+pub struct StmtLocal {
 	pub(crate) syntax: SyntaxNode,
 }
-impl Name {
-	pub fn ident_lit(&self) -> Option<SyntaxToken> {
-		support::token(&self.syntax, IDENT)
+impl StmtLocal {
+	pub fn local_kw_token(&self) -> Option<SyntaxToken> {
+		support::token(&self.syntax, T![local])
+	}
+	pub fn binds(&self) -> AstChildren<Bind> {
+		support::children(&self.syntax)
+	}
+	pub fn semi_token(&self) -> Option<SyntaxToken> {
+		support::token(&self.syntax, T![;])
 	}
 }
 
 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
-pub struct ExprIndexExpr {
+pub struct StmtAssert {
 	pub(crate) syntax: SyntaxNode,
 }
-impl ExprIndexExpr {
-	pub fn base(&self) -> Option<LhsExpr> {
+impl StmtAssert {
+	pub fn assertion(&self) -> Option<Assertion> {
 		support::child(&self.syntax)
 	}
-	pub fn l_brack_token(&self) -> Option<SyntaxToken> {
-		support::token(&self.syntax, T!['['])
+	pub fn semi_token(&self) -> Option<SyntaxToken> {
+		support::token(&self.syntax, T![;])
 	}
-	pub fn index(&self) -> Option<Expr> {
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Hash)]
+pub struct Assertion {
+	pub(crate) syntax: SyntaxNode,
+}
+impl Assertion {
+	pub fn assert_kw_token(&self) -> Option<SyntaxToken> {
+		support::token(&self.syntax, T![assert])
+	}
+	pub fn condition(&self) -> Option<Expr> {
 		support::child(&self.syntax)
 	}
-	pub fn r_brack_token(&self) -> Option<SyntaxToken> {
-		support::token(&self.syntax, T![']'])
+	pub fn colon_token(&self) -> Option<SyntaxToken> {
+		support::token(&self.syntax, T![:])
+	}
+	pub fn message(&self) -> Option<Expr> {
+		support::child(&self.syntax)
 	}
 }
 
 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
-pub struct ExprApply {
+pub struct ExprBinary {
 	pub(crate) syntax: SyntaxNode,
 }
-impl ExprApply {
-	pub fn expr(&self) -> Option<Expr> {
+impl ExprBinary {
+	pub fn lhs(&self) -> Option<Expr> {
 		support::child(&self.syntax)
 	}
-	pub fn args_desc(&self) -> Option<ArgsDesc> {
-		support::child(&self.syntax)
+	pub fn binary_operator(&self) -> Option<BinaryOperator> {
+		support::token_child(&self.syntax)
 	}
-	pub fn tailstrict_kw_token(&self) -> Option<SyntaxToken> {
-		support::token(&self.syntax, T![tailstrict])
+	pub fn rhs(&self) -> Option<Expr> {
+		support::child(&self.syntax)
 	}
 }
 
 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
-pub struct ArgsDesc {
+pub struct ExprUnary {
 	pub(crate) syntax: SyntaxNode,
 }
-impl ArgsDesc {
-	pub fn l_paren_token(&self) -> Option<SyntaxToken> {
-		support::token(&self.syntax, T!['('])
-	}
-	pub fn args(&self) -> AstChildren<Arg> {
-		support::children(&self.syntax)
+impl ExprUnary {
+	pub fn unary_operator(&self) -> Option<UnaryOperator> {
+		support::token_child(&self.syntax)
 	}
-	pub fn r_paren_token(&self) -> Option<SyntaxToken> {
-		support::token(&self.syntax, T![')'])
+	pub fn rhs(&self) -> Option<Expr> {
+		support::child(&self.syntax)
 	}
 }
 
@@ -190,9 +228,6 @@
 	pub(crate) syntax: SyntaxNode,
 }
 impl ExprObjExtend {
-	pub fn lhs_expr(&self) -> Option<LhsExpr> {
-		support::child(&self.syntax)
-	}
 	pub fn expr(&self) -> Option<Expr> {
 		support::child(&self.syntax)
 	}
@@ -395,45 +430,10 @@
 	}
 	pub fn r_paren_token(&self) -> Option<SyntaxToken> {
 		support::token(&self.syntax, T![')'])
-	}
-}
-
-#[derive(Debug, Clone, PartialEq, Eq, Hash)]
-pub struct ExprAssert {
-	pub(crate) syntax: SyntaxNode,
-}
-impl ExprAssert {
-	pub fn assertion(&self) -> Option<Assertion> {
-		support::child(&self.syntax)
-	}
-	pub fn semi_token(&self) -> Option<SyntaxToken> {
-		support::token(&self.syntax, T![;])
-	}
-	pub fn expr(&self) -> Option<Expr> {
-		support::child(&self.syntax)
 	}
 }
 
 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
-pub struct Assertion {
-	pub(crate) syntax: SyntaxNode,
-}
-impl Assertion {
-	pub fn assert_kw_token(&self) -> Option<SyntaxToken> {
-		support::token(&self.syntax, T![assert])
-	}
-	pub fn condition(&self) -> Option<LhsExpr> {
-		support::child(&self.syntax)
-	}
-	pub fn colon_token(&self) -> Option<SyntaxToken> {
-		support::token(&self.syntax, T![:])
-	}
-	pub fn message(&self) -> Option<Expr> {
-		support::child(&self.syntax)
-	}
-}
-
-#[derive(Debug, Clone, PartialEq, Eq, Hash)]
 pub struct ExprError {
 	pub(crate) syntax: SyntaxNode,
 }
@@ -447,22 +447,6 @@
 }
 
 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
-pub struct StmtLocal {
-	pub(crate) syntax: SyntaxNode,
-}
-impl StmtLocal {
-	pub fn local_kw_token(&self) -> Option<SyntaxToken> {
-		support::token(&self.syntax, T![local])
-	}
-	pub fn binds(&self) -> AstChildren<Bind> {
-		support::children(&self.syntax)
-	}
-	pub fn semi_token(&self) -> Option<SyntaxToken> {
-		support::token(&self.syntax, T![;])
-	}
-}
-
-#[derive(Debug, Clone, PartialEq, Eq, Hash)]
 pub struct SliceDescEnd {
 	pub(crate) syntax: SyntaxNode,
 }
@@ -641,7 +625,7 @@
 	pub fn for_kw_token(&self) -> Option<SyntaxToken> {
 		support::token(&self.syntax, T![for])
 	}
-	pub fn bind(&self) -> Option<Name> {
+	pub fn bind(&self) -> Option<Destruct> {
 		support::child(&self.syntax)
 	}
 	pub fn in_kw_token(&self) -> Option<SyntaxToken> {
@@ -820,6 +804,26 @@
 }
 
 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
+pub enum Suffix {
+	SuffixIndex(SuffixIndex),
+	SuffixIndexExpr(SuffixIndexExpr),
+	SuffixSlice(SuffixSlice),
+	SuffixApply(SuffixApply),
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Hash)]
+pub enum Bind {
+	BindDestruct(BindDestruct),
+	BindFunction(BindFunction),
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Hash)]
+pub enum Stmt {
+	StmtLocal(StmtLocal),
+	StmtAssert(StmtAssert),
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Hash)]
 pub enum ObjBody {
 	ObjBodyComp(ObjBodyComp),
 	ObjBodyMemberList(ObjBodyMemberList),
@@ -829,22 +833,12 @@
 pub enum CompSpec {
 	ForSpec(ForSpec),
 	IfSpec(IfSpec),
-}
-
-#[derive(Debug, Clone, PartialEq, Eq, Hash)]
-pub enum Bind {
-	BindDestruct(BindDestruct),
-	BindFunction(BindFunction),
 }
 
 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
 pub enum ExprBase {
 	ExprBinary(ExprBinary),
 	ExprUnary(ExprUnary),
-	ExprSlice(ExprSlice),
-	ExprIndex(ExprIndex),
-	ExprIndexExpr(ExprIndexExpr),
-	ExprApply(ExprApply),
 	ExprObjExtend(ExprObjExtend),
 	ExprParened(ExprParened),
 	ExprString(ExprString),
@@ -857,7 +851,6 @@
 	ExprVar(ExprVar),
 	ExprIfThenElse(ExprIfThenElse),
 	ExprFunction(ExprFunction),
-	ExprAssert(ExprAssert),
 	ExprError(ExprError),
 }
 
@@ -905,6 +898,7 @@
 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
 pub enum BinaryOperatorKind {
 	Or,
+	NullCoaelse,
 	And,
 	BitOr,
 	BitXor,
@@ -1078,9 +1072,9 @@
 		&self.syntax
 	}
 }
-impl AstNode for ExprBinary {
+impl AstNode for SuffixIndex {
 	fn can_cast(kind: SyntaxKind) -> bool {
-		kind == EXPR_BINARY
+		kind == SUFFIX_INDEX
 	}
 	fn cast(syntax: SyntaxNode) -> Option<Self> {
 		if Self::can_cast(syntax.kind()) {
@@ -1093,9 +1087,9 @@
 		&self.syntax
 	}
 }
-impl AstNode for LhsExpr {
+impl AstNode for Name {
 	fn can_cast(kind: SyntaxKind) -> bool {
-		kind == LHS_EXPR
+		kind == NAME
 	}
 	fn cast(syntax: SyntaxNode) -> Option<Self> {
 		if Self::can_cast(syntax.kind()) {
@@ -1108,9 +1102,9 @@
 		&self.syntax
 	}
 }
-impl AstNode for ExprUnary {
+impl AstNode for SuffixIndexExpr {
 	fn can_cast(kind: SyntaxKind) -> bool {
-		kind == EXPR_UNARY
+		kind == SUFFIX_INDEX_EXPR
 	}
 	fn cast(syntax: SyntaxNode) -> Option<Self> {
 		if Self::can_cast(syntax.kind()) {
@@ -1123,9 +1117,9 @@
 		&self.syntax
 	}
 }
-impl AstNode for ExprSlice {
+impl AstNode for SuffixSlice {
 	fn can_cast(kind: SyntaxKind) -> bool {
-		kind == EXPR_SLICE
+		kind == SUFFIX_SLICE
 	}
 	fn cast(syntax: SyntaxNode) -> Option<Self> {
 		if Self::can_cast(syntax.kind()) {
@@ -1153,9 +1147,9 @@
 		&self.syntax
 	}
 }
-impl AstNode for ExprIndex {
+impl AstNode for SuffixApply {
 	fn can_cast(kind: SyntaxKind) -> bool {
-		kind == EXPR_INDEX
+		kind == SUFFIX_APPLY
 	}
 	fn cast(syntax: SyntaxNode) -> Option<Self> {
 		if Self::can_cast(syntax.kind()) {
@@ -1168,9 +1162,9 @@
 		&self.syntax
 	}
 }
-impl AstNode for Name {
+impl AstNode for ArgsDesc {
 	fn can_cast(kind: SyntaxKind) -> bool {
-		kind == NAME
+		kind == ARGS_DESC
 	}
 	fn cast(syntax: SyntaxNode) -> Option<Self> {
 		if Self::can_cast(syntax.kind()) {
@@ -1183,9 +1177,9 @@
 		&self.syntax
 	}
 }
-impl AstNode for ExprIndexExpr {
+impl AstNode for StmtLocal {
 	fn can_cast(kind: SyntaxKind) -> bool {
-		kind == EXPR_INDEX_EXPR
+		kind == STMT_LOCAL
 	}
 	fn cast(syntax: SyntaxNode) -> Option<Self> {
 		if Self::can_cast(syntax.kind()) {
@@ -1198,9 +1192,39 @@
 		&self.syntax
 	}
 }
-impl AstNode for ExprApply {
+impl AstNode for StmtAssert {
+	fn can_cast(kind: SyntaxKind) -> bool {
+		kind == STMT_ASSERT
+	}
+	fn cast(syntax: SyntaxNode) -> Option<Self> {
+		if Self::can_cast(syntax.kind()) {
+			Some(Self { syntax })
+		} else {
+			None
+		}
+	}
+	fn syntax(&self) -> &SyntaxNode {
+		&self.syntax
+	}
+}
+impl AstNode for Assertion {
+	fn can_cast(kind: SyntaxKind) -> bool {
+		kind == ASSERTION
+	}
+	fn cast(syntax: SyntaxNode) -> Option<Self> {
+		if Self::can_cast(syntax.kind()) {
+			Some(Self { syntax })
+		} else {
+			None
+		}
+	}
+	fn syntax(&self) -> &SyntaxNode {
+		&self.syntax
+	}
+}
+impl AstNode for ExprBinary {
 	fn can_cast(kind: SyntaxKind) -> bool {
-		kind == EXPR_APPLY
+		kind == EXPR_BINARY
 	}
 	fn cast(syntax: SyntaxNode) -> Option<Self> {
 		if Self::can_cast(syntax.kind()) {
@@ -1213,9 +1237,9 @@
 		&self.syntax
 	}
 }
-impl AstNode for ArgsDesc {
+impl AstNode for ExprUnary {
 	fn can_cast(kind: SyntaxKind) -> bool {
-		kind == ARGS_DESC
+		kind == EXPR_UNARY
 	}
 	fn cast(syntax: SyntaxNode) -> Option<Self> {
 		if Self::can_cast(syntax.kind()) {
@@ -1441,21 +1465,6 @@
 impl AstNode for ParamsDesc {
 	fn can_cast(kind: SyntaxKind) -> bool {
 		kind == PARAMS_DESC
-	}
-	fn cast(syntax: SyntaxNode) -> Option<Self> {
-		if Self::can_cast(syntax.kind()) {
-			Some(Self { syntax })
-		} else {
-			None
-		}
-	}
-	fn syntax(&self) -> &SyntaxNode {
-		&self.syntax
-	}
-}
-impl AstNode for ExprAssert {
-	fn can_cast(kind: SyntaxKind) -> bool {
-		kind == EXPR_ASSERT
 	}
 	fn cast(syntax: SyntaxNode) -> Option<Self> {
 		if Self::can_cast(syntax.kind()) {
@@ -1468,21 +1477,6 @@
 		&self.syntax
 	}
 }
-impl AstNode for Assertion {
-	fn can_cast(kind: SyntaxKind) -> bool {
-		kind == ASSERTION
-	}
-	fn cast(syntax: SyntaxNode) -> Option<Self> {
-		if Self::can_cast(syntax.kind()) {
-			Some(Self { syntax })
-		} else {
-			None
-		}
-	}
-	fn syntax(&self) -> &SyntaxNode {
-		&self.syntax
-	}
-}
 impl AstNode for ExprError {
 	fn can_cast(kind: SyntaxKind) -> bool {
 		kind == EXPR_ERROR
@@ -1498,21 +1492,6 @@
 		&self.syntax
 	}
 }
-impl AstNode for StmtLocal {
-	fn can_cast(kind: SyntaxKind) -> bool {
-		kind == STMT_LOCAL
-	}
-	fn cast(syntax: SyntaxNode) -> Option<Self> {
-		if Self::can_cast(syntax.kind()) {
-			Some(Self { syntax })
-		} else {
-			None
-		}
-	}
-	fn syntax(&self) -> &SyntaxNode {
-		&self.syntax
-	}
-}
 impl AstNode for SliceDescEnd {
 	fn can_cast(kind: SyntaxKind) -> bool {
 		kind == SLICE_DESC_END
@@ -1873,6 +1852,116 @@
 		&self.syntax
 	}
 }
+impl From<SuffixIndex> for Suffix {
+	fn from(node: SuffixIndex) -> Suffix {
+		Suffix::SuffixIndex(node)
+	}
+}
+impl From<SuffixIndexExpr> for Suffix {
+	fn from(node: SuffixIndexExpr) -> Suffix {
+		Suffix::SuffixIndexExpr(node)
+	}
+}
+impl From<SuffixSlice> for Suffix {
+	fn from(node: SuffixSlice) -> Suffix {
+		Suffix::SuffixSlice(node)
+	}
+}
+impl From<SuffixApply> for Suffix {
+	fn from(node: SuffixApply) -> Suffix {
+		Suffix::SuffixApply(node)
+	}
+}
+impl AstNode for Suffix {
+	fn can_cast(kind: SyntaxKind) -> bool {
+		match kind {
+			SUFFIX_INDEX | SUFFIX_INDEX_EXPR | SUFFIX_SLICE | SUFFIX_APPLY => true,
+			_ => false,
+		}
+	}
+	fn cast(syntax: SyntaxNode) -> Option<Self> {
+		let res = match syntax.kind() {
+			SUFFIX_INDEX => Suffix::SuffixIndex(SuffixIndex { syntax }),
+			SUFFIX_INDEX_EXPR => Suffix::SuffixIndexExpr(SuffixIndexExpr { syntax }),
+			SUFFIX_SLICE => Suffix::SuffixSlice(SuffixSlice { syntax }),
+			SUFFIX_APPLY => Suffix::SuffixApply(SuffixApply { syntax }),
+			_ => return None,
+		};
+		Some(res)
+	}
+	fn syntax(&self) -> &SyntaxNode {
+		match self {
+			Suffix::SuffixIndex(it) => &it.syntax,
+			Suffix::SuffixIndexExpr(it) => &it.syntax,
+			Suffix::SuffixSlice(it) => &it.syntax,
+			Suffix::SuffixApply(it) => &it.syntax,
+		}
+	}
+}
+impl From<BindDestruct> for Bind {
+	fn from(node: BindDestruct) -> Bind {
+		Bind::BindDestruct(node)
+	}
+}
+impl From<BindFunction> for Bind {
+	fn from(node: BindFunction) -> Bind {
+		Bind::BindFunction(node)
+	}
+}
+impl AstNode for Bind {
+	fn can_cast(kind: SyntaxKind) -> bool {
+		match kind {
+			BIND_DESTRUCT | BIND_FUNCTION => true,
+			_ => false,
+		}
+	}
+	fn cast(syntax: SyntaxNode) -> Option<Self> {
+		let res = match syntax.kind() {
+			BIND_DESTRUCT => Bind::BindDestruct(BindDestruct { syntax }),
+			BIND_FUNCTION => Bind::BindFunction(BindFunction { syntax }),
+			_ => return None,
+		};
+		Some(res)
+	}
+	fn syntax(&self) -> &SyntaxNode {
+		match self {
+			Bind::BindDestruct(it) => &it.syntax,
+			Bind::BindFunction(it) => &it.syntax,
+		}
+	}
+}
+impl From<StmtLocal> for Stmt {
+	fn from(node: StmtLocal) -> Stmt {
+		Stmt::StmtLocal(node)
+	}
+}
+impl From<StmtAssert> for Stmt {
+	fn from(node: StmtAssert) -> Stmt {
+		Stmt::StmtAssert(node)
+	}
+}
+impl AstNode for Stmt {
+	fn can_cast(kind: SyntaxKind) -> bool {
+		match kind {
+			STMT_LOCAL | STMT_ASSERT => true,
+			_ => false,
+		}
+	}
+	fn cast(syntax: SyntaxNode) -> Option<Self> {
+		let res = match syntax.kind() {
+			STMT_LOCAL => Stmt::StmtLocal(StmtLocal { syntax }),
+			STMT_ASSERT => Stmt::StmtAssert(StmtAssert { syntax }),
+			_ => return None,
+		};
+		Some(res)
+	}
+	fn syntax(&self) -> &SyntaxNode {
+		match self {
+			Stmt::StmtLocal(it) => &it.syntax,
+			Stmt::StmtAssert(it) => &it.syntax,
+		}
+	}
+}
 impl From<ObjBodyComp> for ObjBody {
 	fn from(node: ObjBodyComp) -> ObjBody {
 		ObjBody::ObjBodyComp(node)
@@ -1935,40 +2024,8 @@
 			CompSpec::ForSpec(it) => &it.syntax,
 			CompSpec::IfSpec(it) => &it.syntax,
 		}
-	}
-}
-impl From<BindDestruct> for Bind {
-	fn from(node: BindDestruct) -> Bind {
-		Bind::BindDestruct(node)
-	}
-}
-impl From<BindFunction> for Bind {
-	fn from(node: BindFunction) -> Bind {
-		Bind::BindFunction(node)
 	}
 }
-impl AstNode for Bind {
-	fn can_cast(kind: SyntaxKind) -> bool {
-		match kind {
-			BIND_DESTRUCT | BIND_FUNCTION => true,
-			_ => false,
-		}
-	}
-	fn cast(syntax: SyntaxNode) -> Option<Self> {
-		let res = match syntax.kind() {
-			BIND_DESTRUCT => Bind::BindDestruct(BindDestruct { syntax }),
-			BIND_FUNCTION => Bind::BindFunction(BindFunction { syntax }),
-			_ => return None,
-		};
-		Some(res)
-	}
-	fn syntax(&self) -> &SyntaxNode {
-		match self {
-			Bind::BindDestruct(it) => &it.syntax,
-			Bind::BindFunction(it) => &it.syntax,
-		}
-	}
-}
 impl From<ExprBinary> for ExprBase {
 	fn from(node: ExprBinary) -> ExprBase {
 		ExprBase::ExprBinary(node)
@@ -1977,28 +2034,8 @@
 impl From<ExprUnary> for ExprBase {
 	fn from(node: ExprUnary) -> ExprBase {
 		ExprBase::ExprUnary(node)
-	}
-}
-impl From<ExprSlice> for ExprBase {
-	fn from(node: ExprSlice) -> ExprBase {
-		ExprBase::ExprSlice(node)
 	}
 }
-impl From<ExprIndex> for ExprBase {
-	fn from(node: ExprIndex) -> ExprBase {
-		ExprBase::ExprIndex(node)
-	}
-}
-impl From<ExprIndexExpr> for ExprBase {
-	fn from(node: ExprIndexExpr) -> ExprBase {
-		ExprBase::ExprIndexExpr(node)
-	}
-}
-impl From<ExprApply> for ExprBase {
-	fn from(node: ExprApply) -> ExprBase {
-		ExprBase::ExprApply(node)
-	}
-}
 impl From<ExprObjExtend> for ExprBase {
 	fn from(node: ExprObjExtend) -> ExprBase {
 		ExprBase::ExprObjExtend(node)
@@ -2057,11 +2094,6 @@
 impl From<ExprFunction> for ExprBase {
 	fn from(node: ExprFunction) -> ExprBase {
 		ExprBase::ExprFunction(node)
-	}
-}
-impl From<ExprAssert> for ExprBase {
-	fn from(node: ExprAssert) -> ExprBase {
-		ExprBase::ExprAssert(node)
 	}
 }
 impl From<ExprError> for ExprBase {
@@ -2072,10 +2104,9 @@
 impl AstNode for ExprBase {
 	fn can_cast(kind: SyntaxKind) -> bool {
 		match kind {
-			EXPR_BINARY | EXPR_UNARY | EXPR_SLICE | EXPR_INDEX | EXPR_INDEX_EXPR | EXPR_APPLY
-			| EXPR_OBJ_EXTEND | EXPR_PARENED | EXPR_STRING | EXPR_NUMBER | EXPR_LITERAL
-			| EXPR_ARRAY | EXPR_OBJECT | EXPR_ARRAY_COMP | EXPR_IMPORT | EXPR_VAR
-			| EXPR_IF_THEN_ELSE | EXPR_FUNCTION | EXPR_ASSERT | EXPR_ERROR => true,
+			EXPR_BINARY | EXPR_UNARY | EXPR_OBJ_EXTEND | EXPR_PARENED | EXPR_STRING
+			| EXPR_NUMBER | EXPR_LITERAL | EXPR_ARRAY | EXPR_OBJECT | EXPR_ARRAY_COMP
+			| EXPR_IMPORT | EXPR_VAR | EXPR_IF_THEN_ELSE | EXPR_FUNCTION | EXPR_ERROR => true,
 			_ => false,
 		}
 	}
@@ -2083,10 +2114,6 @@
 		let res = match syntax.kind() {
 			EXPR_BINARY => ExprBase::ExprBinary(ExprBinary { syntax }),
 			EXPR_UNARY => ExprBase::ExprUnary(ExprUnary { syntax }),
-			EXPR_SLICE => ExprBase::ExprSlice(ExprSlice { syntax }),
-			EXPR_INDEX => ExprBase::ExprIndex(ExprIndex { syntax }),
-			EXPR_INDEX_EXPR => ExprBase::ExprIndexExpr(ExprIndexExpr { syntax }),
-			EXPR_APPLY => ExprBase::ExprApply(ExprApply { syntax }),
 			EXPR_OBJ_EXTEND => ExprBase::ExprObjExtend(ExprObjExtend { syntax }),
 			EXPR_PARENED => ExprBase::ExprParened(ExprParened { syntax }),
 			EXPR_STRING => ExprBase::ExprString(ExprString { syntax }),
@@ -2099,7 +2126,6 @@
 			EXPR_VAR => ExprBase::ExprVar(ExprVar { syntax }),
 			EXPR_IF_THEN_ELSE => ExprBase::ExprIfThenElse(ExprIfThenElse { syntax }),
 			EXPR_FUNCTION => ExprBase::ExprFunction(ExprFunction { syntax }),
-			EXPR_ASSERT => ExprBase::ExprAssert(ExprAssert { syntax }),
 			EXPR_ERROR => ExprBase::ExprError(ExprError { syntax }),
 			_ => return None,
 		};
@@ -2109,10 +2135,6 @@
 		match self {
 			ExprBase::ExprBinary(it) => &it.syntax,
 			ExprBase::ExprUnary(it) => &it.syntax,
-			ExprBase::ExprSlice(it) => &it.syntax,
-			ExprBase::ExprIndex(it) => &it.syntax,
-			ExprBase::ExprIndexExpr(it) => &it.syntax,
-			ExprBase::ExprApply(it) => &it.syntax,
 			ExprBase::ExprObjExtend(it) => &it.syntax,
 			ExprBase::ExprParened(it) => &it.syntax,
 			ExprBase::ExprString(it) => &it.syntax,
@@ -2125,7 +2147,6 @@
 			ExprBase::ExprVar(it) => &it.syntax,
 			ExprBase::ExprIfThenElse(it) => &it.syntax,
 			ExprBase::ExprFunction(it) => &it.syntax,
-			ExprBase::ExprAssert(it) => &it.syntax,
 			ExprBase::ExprError(it) => &it.syntax,
 		}
 	}
@@ -2344,14 +2365,16 @@
 impl BinaryOperatorKind {
 	fn can_cast(kind: SyntaxKind) -> bool {
 		match kind {
-			OR | AND | BIT_OR | BIT_XOR | BIT_AND | EQ | NE | LT | GT | LE | GE | IN_KW | LHS
-			| RHS | PLUS | MINUS | MUL | DIV | MODULO | META_OBJECT_APPLY | ERROR_NO_OPERATOR => true,
+			OR | NULL_COAELSE | AND | BIT_OR | BIT_XOR | BIT_AND | EQ | NE | LT | GT | LE | GE
+			| IN_KW | LHS | RHS | PLUS | MINUS | MUL | DIV | MODULO | META_OBJECT_APPLY
+			| ERROR_NO_OPERATOR => true,
 			_ => false,
 		}
 	}
 	pub fn cast(kind: SyntaxKind) -> Option<Self> {
 		let res = match kind {
 			OR => Self::Or,
+			NULL_COAELSE => Self::NullCoaelse,
 			AND => Self::And,
 			BIT_OR => Self::BitOr,
 			BIT_XOR => Self::BitXor,
@@ -2742,21 +2765,31 @@
 		std::fmt::Display::fmt(self.syntax(), f)
 	}
 }
-impl std::fmt::Display for ObjBody {
+impl std::fmt::Display for Suffix {
+	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+		std::fmt::Display::fmt(self.syntax(), f)
+	}
+}
+impl std::fmt::Display for Bind {
 	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 		std::fmt::Display::fmt(self.syntax(), f)
 	}
 }
-impl std::fmt::Display for CompSpec {
+impl std::fmt::Display for Stmt {
 	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 		std::fmt::Display::fmt(self.syntax(), f)
 	}
 }
-impl std::fmt::Display for Bind {
+impl std::fmt::Display for ObjBody {
 	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 		std::fmt::Display::fmt(self.syntax(), f)
 	}
 }
+impl std::fmt::Display for CompSpec {
+	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+		std::fmt::Display::fmt(self.syntax(), f)
+	}
+}
 impl std::fmt::Display for ExprBase {
 	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 		std::fmt::Display::fmt(self.syntax(), f)
@@ -2797,22 +2830,22 @@
 		std::fmt::Display::fmt(self.syntax(), f)
 	}
 }
-impl std::fmt::Display for ExprBinary {
+impl std::fmt::Display for SuffixIndex {
 	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 		std::fmt::Display::fmt(self.syntax(), f)
 	}
 }
-impl std::fmt::Display for LhsExpr {
+impl std::fmt::Display for Name {
 	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 		std::fmt::Display::fmt(self.syntax(), f)
 	}
 }
-impl std::fmt::Display for ExprUnary {
+impl std::fmt::Display for SuffixIndexExpr {
 	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 		std::fmt::Display::fmt(self.syntax(), f)
 	}
 }
-impl std::fmt::Display for ExprSlice {
+impl std::fmt::Display for SuffixSlice {
 	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 		std::fmt::Display::fmt(self.syntax(), f)
 	}
@@ -2822,31 +2855,41 @@
 		std::fmt::Display::fmt(self.syntax(), f)
 	}
 }
-impl std::fmt::Display for ExprIndex {
+impl std::fmt::Display for SuffixApply {
 	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 		std::fmt::Display::fmt(self.syntax(), f)
 	}
 }
-impl std::fmt::Display for Name {
+impl std::fmt::Display for ArgsDesc {
 	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 		std::fmt::Display::fmt(self.syntax(), f)
 	}
 }
-impl std::fmt::Display for ExprIndexExpr {
+impl std::fmt::Display for StmtLocal {
 	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 		std::fmt::Display::fmt(self.syntax(), f)
 	}
 }
-impl std::fmt::Display for ExprApply {
+impl std::fmt::Display for StmtAssert {
 	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 		std::fmt::Display::fmt(self.syntax(), f)
 	}
 }
-impl std::fmt::Display for ArgsDesc {
+impl std::fmt::Display for Assertion {
 	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 		std::fmt::Display::fmt(self.syntax(), f)
 	}
 }
+impl std::fmt::Display for ExprBinary {
+	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+		std::fmt::Display::fmt(self.syntax(), f)
+	}
+}
+impl std::fmt::Display for ExprUnary {
+	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+		std::fmt::Display::fmt(self.syntax(), f)
+	}
+}
 impl std::fmt::Display for ExprObjExtend {
 	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 		std::fmt::Display::fmt(self.syntax(), f)
@@ -2918,26 +2961,11 @@
 	}
 }
 impl std::fmt::Display for ParamsDesc {
-	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-		std::fmt::Display::fmt(self.syntax(), f)
-	}
-}
-impl std::fmt::Display for ExprAssert {
-	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-		std::fmt::Display::fmt(self.syntax(), f)
-	}
-}
-impl std::fmt::Display for Assertion {
 	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 		std::fmt::Display::fmt(self.syntax(), f)
 	}
 }
 impl std::fmt::Display for ExprError {
-	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-		std::fmt::Display::fmt(self.syntax(), f)
-	}
-}
-impl std::fmt::Display for StmtLocal {
 	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 		std::fmt::Display::fmt(self.syntax(), f)
 	}
modifiedcrates/jrsonnet-rowan-parser/src/generated/syntax_kinds.rsdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/generated/syntax_kinds.rs
+++ b/crates/jrsonnet-rowan-parser/src/generated/syntax_kinds.rs
@@ -19,6 +19,8 @@
 	EOF,
 	#[token("||")]
 	OR,
+	#[token("??")]
+	NULL_COAELSE,
 	#[token("&&")]
 	AND,
 	#[token("|")]
@@ -137,6 +139,8 @@
 	ERROR_COMMENT_UNTERMINATED,
 	#[token("tailstrict")]
 	TAILSTRICT_KW,
+	#[token("local")]
+	LOCAL_KW,
 	#[token("importstr")]
 	IMPORTSTR_KW,
 	#[token("importbin")]
@@ -153,8 +157,6 @@
 	FUNCTION_KW,
 	#[token("error")]
 	ERROR_KW,
-	#[token("local")]
-	LOCAL_KW,
 	#[token("in")]
 	IN_KW,
 	META_OBJECT_APPLY,
@@ -181,16 +183,18 @@
 	LEXING_ERROR,
 	SOURCE_FILE,
 	EXPR,
-	EXPR_BINARY,
-	LHS_EXPR,
-	EXPR_UNARY,
-	EXPR_SLICE,
-	SLICE_DESC,
-	EXPR_INDEX,
+	SUFFIX_INDEX,
 	NAME,
-	EXPR_INDEX_EXPR,
-	EXPR_APPLY,
+	SUFFIX_INDEX_EXPR,
+	SUFFIX_SLICE,
+	SLICE_DESC,
+	SUFFIX_APPLY,
 	ARGS_DESC,
+	STMT_LOCAL,
+	STMT_ASSERT,
+	ASSERTION,
+	EXPR_BINARY,
+	EXPR_UNARY,
 	EXPR_OBJ_EXTEND,
 	EXPR_PARENED,
 	EXPR_LITERAL,
@@ -206,10 +210,7 @@
 	FALSE_EXPR,
 	EXPR_FUNCTION,
 	PARAMS_DESC,
-	EXPR_ASSERT,
-	ASSERTION,
 	EXPR_ERROR,
-	STMT_LOCAL,
 	SLICE_DESC_END,
 	SLICE_DESC_STEP,
 	ARG,
@@ -234,9 +235,11 @@
 	DESTRUCT_OBJECT_FIELD,
 	DESTRUCT_REST,
 	DESTRUCT_ARRAY_ELEMENT,
+	SUFFIX,
+	BIND,
+	STMT,
 	OBJ_BODY,
 	COMP_SPEC,
-	BIND,
 	EXPR_BASE,
 	MEMBER_COMP,
 	MEMBER,
@@ -259,21 +262,21 @@
 impl SyntaxKind {
 	pub fn is_keyword(self) -> bool {
 		match self {
-			OR | AND | BIT_OR | BIT_XOR | BIT_AND | EQ | NE | LT | GT | LE | GE | LHS | RHS
-			| PLUS | MINUS | MUL | DIV | MODULO | NOT | BIT_NOT | L_BRACK | R_BRACK | L_PAREN
-			| R_PAREN | L_BRACE | R_BRACE | COLON | COLONCOLON | COLONCOLONCOLON | SEMI | DOT
-			| DOTDOTDOT | COMMA | DOLLAR | ASSIGN | QUESTION_MARK | TAILSTRICT_KW
-			| IMPORTSTR_KW | IMPORTBIN_KW | IMPORT_KW | IF_KW | THEN_KW | ELSE_KW | FUNCTION_KW
-			| ERROR_KW | LOCAL_KW | IN_KW | NULL_KW | TRUE_KW | FALSE_KW | SELF_KW | SUPER_KW
-			| FOR_KW | ASSERT_KW => true,
+			OR | NULL_COAELSE | AND | BIT_OR | BIT_XOR | BIT_AND | EQ | NE | LT | GT | LE | GE
+			| LHS | RHS | PLUS | MINUS | MUL | DIV | MODULO | NOT | BIT_NOT | L_BRACK | R_BRACK
+			| L_PAREN | R_PAREN | L_BRACE | R_BRACE | COLON | COLONCOLON | COLONCOLONCOLON
+			| SEMI | DOT | DOTDOTDOT | COMMA | DOLLAR | ASSIGN | QUESTION_MARK | TAILSTRICT_KW
+			| LOCAL_KW | IMPORTSTR_KW | IMPORTBIN_KW | IMPORT_KW | IF_KW | THEN_KW | ELSE_KW
+			| FUNCTION_KW | ERROR_KW | IN_KW | NULL_KW | TRUE_KW | FALSE_KW | SELF_KW
+			| SUPER_KW | FOR_KW | ASSERT_KW => true,
 			_ => false,
 		}
 	}
 	pub fn is_enum(self) -> bool {
 		match self {
-			OBJ_BODY | COMP_SPEC | BIND | EXPR_BASE | MEMBER_COMP | MEMBER | FIELD_NAME
-			| DESTRUCT | DESTRUCT_ARRAY_PART | BINARY_OPERATOR | UNARY_OPERATOR | LITERAL
-			| TEXT | NUMBER | IMPORT_KIND | VISIBILITY | TRIVIA | CUSTOM_ERROR => true,
+			SUFFIX | BIND | STMT | OBJ_BODY | COMP_SPEC | EXPR_BASE | MEMBER_COMP | MEMBER
+			| FIELD_NAME | DESTRUCT | DESTRUCT_ARRAY_PART | BINARY_OPERATOR | UNARY_OPERATOR
+			| LITERAL | TEXT | NUMBER | IMPORT_KIND | VISIBILITY | TRIVIA | CUSTOM_ERROR => true,
 			_ => false,
 		}
 	}
@@ -286,5 +289,5 @@
 	}
 }
 #[macro_export]
-macro_rules ! T { [||] => { $ crate :: SyntaxKind :: OR } ; [&&] => { $ crate :: SyntaxKind :: AND } ; [|] => { $ crate :: SyntaxKind :: BIT_OR } ; [^] => { $ crate :: SyntaxKind :: BIT_XOR } ; [&] => { $ crate :: SyntaxKind :: BIT_AND } ; [==] => { $ crate :: SyntaxKind :: EQ } ; [!=] => { $ crate :: SyntaxKind :: NE } ; [<] => { $ crate :: SyntaxKind :: LT } ; [>] => { $ crate :: SyntaxKind :: GT } ; [<=] => { $ crate :: SyntaxKind :: LE } ; [>=] => { $ crate :: SyntaxKind :: GE } ; [<<] => { $ crate :: SyntaxKind :: LHS } ; [>>] => { $ crate :: SyntaxKind :: RHS } ; [+] => { $ crate :: SyntaxKind :: PLUS } ; [-] => { $ crate :: SyntaxKind :: MINUS } ; [*] => { $ crate :: SyntaxKind :: MUL } ; [/] => { $ crate :: SyntaxKind :: DIV } ; [%] => { $ crate :: SyntaxKind :: MODULO } ; [!] => { $ crate :: SyntaxKind :: NOT } ; [~] => { $ crate :: SyntaxKind :: BIT_NOT } ; ['['] => { $ crate :: SyntaxKind :: L_BRACK } ; [']'] => { $ crate :: SyntaxKind :: R_BRACK } ; ['('] => { $ crate :: SyntaxKind :: L_PAREN } ; [')'] => { $ crate :: SyntaxKind :: R_PAREN } ; ['{'] => { $ crate :: SyntaxKind :: L_BRACE } ; ['}'] => { $ crate :: SyntaxKind :: R_BRACE } ; [:] => { $ crate :: SyntaxKind :: COLON } ; [::] => { $ crate :: SyntaxKind :: COLONCOLON } ; [:::] => { $ crate :: SyntaxKind :: COLONCOLONCOLON } ; [;] => { $ crate :: SyntaxKind :: SEMI } ; [.] => { $ crate :: SyntaxKind :: DOT } ; [...] => { $ crate :: SyntaxKind :: DOTDOTDOT } ; [,] => { $ crate :: SyntaxKind :: COMMA } ; ['$'] => { $ crate :: SyntaxKind :: DOLLAR } ; [=] => { $ crate :: SyntaxKind :: ASSIGN } ; [?] => { $ crate :: SyntaxKind :: QUESTION_MARK } ; [tailstrict] => { $ crate :: SyntaxKind :: TAILSTRICT_KW } ; [importstr] => { $ crate :: SyntaxKind :: IMPORTSTR_KW } ; [importbin] => { $ crate :: SyntaxKind :: IMPORTBIN_KW } ; [import] => { $ crate :: SyntaxKind :: IMPORT_KW } ; [if] => { $ crate :: SyntaxKind :: IF_KW } ; [then] => { $ crate :: SyntaxKind :: THEN_KW } ; [else] => { $ crate :: SyntaxKind :: ELSE_KW } ; [function] => { $ crate :: SyntaxKind :: FUNCTION_KW } ; [error] => { $ crate :: SyntaxKind :: ERROR_KW } ; [local] => { $ crate :: SyntaxKind :: LOCAL_KW } ; [in] => { $ crate :: SyntaxKind :: IN_KW } ; [null] => { $ crate :: SyntaxKind :: NULL_KW } ; [true] => { $ crate :: SyntaxKind :: TRUE_KW } ; [false] => { $ crate :: SyntaxKind :: FALSE_KW } ; [self] => { $ crate :: SyntaxKind :: SELF_KW } ; [super] => { $ crate :: SyntaxKind :: SUPER_KW } ; [for] => { $ crate :: SyntaxKind :: FOR_KW } ; [assert] => { $ crate :: SyntaxKind :: ASSERT_KW } }
+macro_rules ! T { [||] => { $ crate :: SyntaxKind :: OR } ; [??] => { $ crate :: SyntaxKind :: NULL_COAELSE } ; [&&] => { $ crate :: SyntaxKind :: AND } ; [|] => { $ crate :: SyntaxKind :: BIT_OR } ; [^] => { $ crate :: SyntaxKind :: BIT_XOR } ; [&] => { $ crate :: SyntaxKind :: BIT_AND } ; [==] => { $ crate :: SyntaxKind :: EQ } ; [!=] => { $ crate :: SyntaxKind :: NE } ; [<] => { $ crate :: SyntaxKind :: LT } ; [>] => { $ crate :: SyntaxKind :: GT } ; [<=] => { $ crate :: SyntaxKind :: LE } ; [>=] => { $ crate :: SyntaxKind :: GE } ; [<<] => { $ crate :: SyntaxKind :: LHS } ; [>>] => { $ crate :: SyntaxKind :: RHS } ; [+] => { $ crate :: SyntaxKind :: PLUS } ; [-] => { $ crate :: SyntaxKind :: MINUS } ; [*] => { $ crate :: SyntaxKind :: MUL } ; [/] => { $ crate :: SyntaxKind :: DIV } ; [%] => { $ crate :: SyntaxKind :: MODULO } ; [!] => { $ crate :: SyntaxKind :: NOT } ; [~] => { $ crate :: SyntaxKind :: BIT_NOT } ; ['['] => { $ crate :: SyntaxKind :: L_BRACK } ; [']'] => { $ crate :: SyntaxKind :: R_BRACK } ; ['('] => { $ crate :: SyntaxKind :: L_PAREN } ; [')'] => { $ crate :: SyntaxKind :: R_PAREN } ; ['{'] => { $ crate :: SyntaxKind :: L_BRACE } ; ['}'] => { $ crate :: SyntaxKind :: R_BRACE } ; [:] => { $ crate :: SyntaxKind :: COLON } ; [::] => { $ crate :: SyntaxKind :: COLONCOLON } ; [:::] => { $ crate :: SyntaxKind :: COLONCOLONCOLON } ; [;] => { $ crate :: SyntaxKind :: SEMI } ; [.] => { $ crate :: SyntaxKind :: DOT } ; [...] => { $ crate :: SyntaxKind :: DOTDOTDOT } ; [,] => { $ crate :: SyntaxKind :: COMMA } ; ['$'] => { $ crate :: SyntaxKind :: DOLLAR } ; [=] => { $ crate :: SyntaxKind :: ASSIGN } ; [?] => { $ crate :: SyntaxKind :: QUESTION_MARK } ; [tailstrict] => { $ crate :: SyntaxKind :: TAILSTRICT_KW } ; [local] => { $ crate :: SyntaxKind :: LOCAL_KW } ; [importstr] => { $ crate :: SyntaxKind :: IMPORTSTR_KW } ; [importbin] => { $ crate :: SyntaxKind :: IMPORTBIN_KW } ; [import] => { $ crate :: SyntaxKind :: IMPORT_KW } ; [if] => { $ crate :: SyntaxKind :: IF_KW } ; [then] => { $ crate :: SyntaxKind :: THEN_KW } ; [else] => { $ crate :: SyntaxKind :: ELSE_KW } ; [function] => { $ crate :: SyntaxKind :: FUNCTION_KW } ; [error] => { $ crate :: SyntaxKind :: ERROR_KW } ; [in] => { $ crate :: SyntaxKind :: IN_KW } ; [null] => { $ crate :: SyntaxKind :: NULL_KW } ; [true] => { $ crate :: SyntaxKind :: TRUE_KW } ; [false] => { $ crate :: SyntaxKind :: FALSE_KW } ; [self] => { $ crate :: SyntaxKind :: SELF_KW } ; [super] => { $ crate :: SyntaxKind :: SUPER_KW } ; [for] => { $ crate :: SyntaxKind :: FOR_KW } ; [assert] => { $ crate :: SyntaxKind :: ASSERT_KW } }
 pub use T;
modifiedcrates/jrsonnet-rowan-parser/src/lib.rsdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/lib.rs
+++ b/crates/jrsonnet-rowan-parser/src/lib.rs
@@ -23,6 +23,11 @@
 pub use language::*;
 pub use token_set::SyntaxKindSet;
 
+use self::{
+	ast::support,
+	generated::nodes::{Expr, ExprBinary, ExprObjExtend},
+};
+
 pub fn parse(input: &str) -> (SourceFile, Vec<LocatedSyntaxError>) {
 	let lexemes = lex(input);
 	let kinds = lexemes
@@ -42,3 +47,25 @@
 		parse.errors,
 	)
 }
+impl ExprBinary {
+	pub fn lhs_work(&self) -> Option<Expr> {
+		support::child(self.syntax())
+	}
+	pub fn rhs_work(&self) -> Option<Expr> {
+		let mut children = support::children(self.syntax());
+		// skip lhs
+		children.next()?;
+		children.next()
+	}
+}
+impl ExprObjExtend {
+	pub fn lhs_work(&self) -> Option<Expr> {
+		support::child(self.syntax())
+	}
+	pub fn rhs_work(&self) -> Option<Expr> {
+		let mut children = support::children(self.syntax());
+		// skip lhs
+		children.next()?;
+		children.next()
+	}
+}
modifiedcrates/jrsonnet-rowan-parser/src/parser.rsdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/parser.rs
+++ b/crates/jrsonnet-rowan-parser/src/parser.rs
@@ -293,30 +293,38 @@
 }
 
 fn expr(p: &mut Parser) -> CompletedMarker {
-	while p.at(T![local]) {
+	let m = p.start();
+	while p.at(T![local]) || p.at(T![assert]) {
 		let m = p.start();
 
-		p.bump();
-		loop {
-			if p.at(T![;]) {
-				p.bump();
+		if p.at(T![local]) {
+			p.bump();
+			loop {
+				if p.at(T![;]) {
+					p.bump();
+					break;
+				}
+				bind(p);
+
+				if p.at(T![,]) {
+					p.bump();
+					continue;
+				}
+				p.expect(T![;]);
 				break;
 			}
-			bind(p);
-
-			if p.at(T![,]) {
-				p.bump();
-				continue;
-			}
+			m.complete(p, STMT_LOCAL);
+		} else {
+			assertion(p);
 			p.expect(T![;]);
-			break;
+			m.complete(p, STMT_ASSERT);
 		}
-		m.complete(p, STMT_LOCAL);
 	}
 	match expr_binding_power(p, 0) {
 		Ok(m) => m,
 		Err(m) => m,
-	}
+	};
+	m.complete(p, EXPR)
 }
 fn expr_binding_power(
 	p: &mut Parser,
@@ -337,8 +345,10 @@
 			p.bump();
 		}
 
-		let m = lhs.wrap(p, LHS_EXPR).precede(p);
-		let parsed_rhs = expr_binding_power(p, right_binding_power).is_ok();
+		let m = lhs.wrap(p, EXPR).precede(p);
+		let parsed_rhs = expr_binding_power(p, right_binding_power)
+			.map(|v| v.precede(p).complete(p, EXPR))
+			.is_ok();
 		lhs = m.complete(
 			p,
 			if op == BinaryOperatorKind::MetaObjectApply {
@@ -361,7 +371,7 @@
 	if p.at(T![for]) {
 		let m = p.start();
 		p.bump();
-		name(p);
+		destruct(p);
 		p.expect(T![in]);
 		expr(p);
 		m.complete(p, FOR_SPEC)
@@ -420,7 +430,7 @@
 fn assertion(p: &mut Parser) {
 	let m = p.start();
 	p.bump_assert(T![assert]);
-	expr(p).wrap(p, LHS_EXPR);
+	expr(p);
 	if p.at(T![:]) {
 		p.bump();
 		expr(p);
@@ -504,7 +514,7 @@
 		for errored in compspecs {
 			errored.wrap_error(
 				p,
-				"compspec may only be used if there is only one array element",
+				"compspec may only be used if there is only one object element",
 			);
 		}
 		m.complete(p, OBJ_BODY_MEMBER_LIST);
@@ -612,8 +622,8 @@
 			p.expect(T![']']);
 			break;
 		}
-		elems += 1;
 		expr(p);
+		elems += 1;
 		while p.at_ts(COMPSPEC) {
 			compspecs.push(compspec(p));
 		}
@@ -679,32 +689,47 @@
 	true
 }
 
-fn lhs(p: &mut Parser) -> Result<CompletedMarker, CompletedMarker> {
-	let mut lhs = lhs_basic(p)?;
-
+fn suffix(p: &mut Parser) {
 	loop {
-		if p.at(T![.]) {
-			let m = lhs.precede(p);
+		let start = p.start();
+		let _marker: CompletedMarker = if p.at(T![?]) {
 			p.bump();
+			p.expect(T![.]);
+			if p.at(IDENT) {
+				name(p);
+				start.complete(p, SUFFIX_INDEX)
+			} else if p.at(T!['[']) {
+				p.bump();
+				expr(p);
+				p.expect(T![']']);
+				start.complete(p, SUFFIX_INDEX_EXPR)
+			} else {
+				start.complete_missing(p, ExpectedSyntax::Named("index"))
+			}
+		} else if p.at(T![.]) {
+			p.bump();
 			name(p);
-			lhs = m.complete(p, EXPR_INDEX);
+			start.complete(p, SUFFIX_INDEX)
 		} else if p.at(T!['[']) {
 			if slice_desc_or_index(p) {
-				lhs = lhs.precede(p).complete(p, EXPR_SLICE);
+				start.complete(p, SUFFIX_SLICE)
 			} else {
-				lhs = lhs
-					.wrap(p, LHS_EXPR)
-					.precede(p)
-					.complete(p, EXPR_INDEX_EXPR);
+				start.complete(p, SUFFIX_INDEX_EXPR)
 			}
 		} else if p.at(T!['(']) {
-			let m = lhs.precede(p);
 			args_desc(p);
-			lhs = m.complete(p, EXPR_APPLY);
+			start.complete(p, SUFFIX_APPLY)
 		} else {
+			start.forget(p);
 			break;
-		}
+		};
 	}
+}
+
+fn lhs(p: &mut Parser) -> Result<CompletedMarker, CompletedMarker> {
+	let lhs = lhs_basic(p)?;
+
+	suffix(p);
 
 	Ok(lhs)
 }
@@ -885,12 +910,6 @@
 		p.bump();
 		expr(p);
 		m.complete(p, EXPR_ERROR)
-	} else if p.at(T![assert]) {
-		let m = p.start();
-		assertion(p);
-		p.expect(T![;]);
-		expr(p);
-		m.complete(p, EXPR_ASSERT)
 	} else if p.at(T![import]) || p.at(T![importstr]) || p.at(T![importbin]) {
 		let m = p.start();
 		p.bump();
modifiedcrates/jrsonnet-rowan-parser/src/precedence.rsdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/precedence.rs
+++ b/crates/jrsonnet-rowan-parser/src/precedence.rs
@@ -13,6 +13,7 @@
 			Self::BitXor => (8, 9),
 			Self::BitOr => (6, 7),
 			Self::And => (4, 5),
+			Self::NullCoaelse => (2, 3),
 			Self::Or => (2, 3),
 			Self::ErrorNoOperator => (0, 1),
 		}
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec.snap
@@ -3,32 +3,39 @@
 expression: "[a for a in [1, 2, 3]]\n"
 ---
 SOURCE_FILE@0..23
-  EXPR_ARRAY_COMP@0..22
-    L_BRACK@0..1 "["
-    EXPR_VAR@1..2
-      NAME@1..2
-        IDENT@1..2 "a"
-    WHITESPACE@2..3 " "
-    FOR_SPEC@3..21
-      FOR_KW@3..6 "for"
-      WHITESPACE@6..7 " "
-      NAME@7..8
-        IDENT@7..8 "a"
-      WHITESPACE@8..9 " "
-      IN_KW@9..11 "in"
-      WHITESPACE@11..12 " "
-      EXPR_ARRAY@12..21
-        L_BRACK@12..13 "["
-        EXPR_NUMBER@13..14
-          FLOAT@13..14 "1"
-        COMMA@14..15 ","
-        WHITESPACE@15..16 " "
-        EXPR_NUMBER@16..17
-          FLOAT@16..17 "2"
-        COMMA@17..18 ","
-        WHITESPACE@18..19 " "
-        EXPR_NUMBER@19..20
-          FLOAT@19..20 "3"
-        R_BRACK@20..21 "]"
-    R_BRACK@21..22 "]"
+  EXPR@0..22
+    EXPR_ARRAY_COMP@0..22
+      L_BRACK@0..1 "["
+      EXPR@1..2
+        EXPR_VAR@1..2
+          NAME@1..2
+            IDENT@1..2 "a"
+      WHITESPACE@2..3 " "
+      FOR_SPEC@3..21
+        FOR_KW@3..6 "for"
+        WHITESPACE@6..7 " "
+        DESTRUCT_FULL@7..8
+          NAME@7..8
+            IDENT@7..8 "a"
+        WHITESPACE@8..9 " "
+        IN_KW@9..11 "in"
+        WHITESPACE@11..12 " "
+        EXPR@12..21
+          EXPR_ARRAY@12..21
+            L_BRACK@12..13 "["
+            EXPR@13..14
+              EXPR_NUMBER@13..14
+                FLOAT@13..14 "1"
+            COMMA@14..15 ","
+            WHITESPACE@15..16 " "
+            EXPR@16..17
+              EXPR_NUMBER@16..17
+                FLOAT@16..17 "2"
+            COMMA@17..18 ","
+            WHITESPACE@18..19 " "
+            EXPR@19..20
+              EXPR_NUMBER@19..20
+                FLOAT@19..20 "3"
+            R_BRACK@20..21 "]"
+      R_BRACK@21..22 "]"
   WHITESPACE@22..23 "\n"
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_comma.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_comma.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_comma.snap
@@ -3,33 +3,40 @@
 expression: "[a, for a in [1, 2, 3]]\n"
 ---
 SOURCE_FILE@0..24
-  EXPR_ARRAY_COMP@0..23
-    L_BRACK@0..1 "["
-    EXPR_VAR@1..2
-      NAME@1..2
-        IDENT@1..2 "a"
-    COMMA@2..3 ","
-    WHITESPACE@3..4 " "
-    FOR_SPEC@4..22
-      FOR_KW@4..7 "for"
-      WHITESPACE@7..8 " "
-      NAME@8..9
-        IDENT@8..9 "a"
-      WHITESPACE@9..10 " "
-      IN_KW@10..12 "in"
-      WHITESPACE@12..13 " "
-      EXPR_ARRAY@13..22
-        L_BRACK@13..14 "["
-        EXPR_NUMBER@14..15
-          FLOAT@14..15 "1"
-        COMMA@15..16 ","
-        WHITESPACE@16..17 " "
-        EXPR_NUMBER@17..18
-          FLOAT@17..18 "2"
-        COMMA@18..19 ","
-        WHITESPACE@19..20 " "
-        EXPR_NUMBER@20..21
-          FLOAT@20..21 "3"
-        R_BRACK@21..22 "]"
-    R_BRACK@22..23 "]"
+  EXPR@0..23
+    EXPR_ARRAY_COMP@0..23
+      L_BRACK@0..1 "["
+      EXPR@1..2
+        EXPR_VAR@1..2
+          NAME@1..2
+            IDENT@1..2 "a"
+      COMMA@2..3 ","
+      WHITESPACE@3..4 " "
+      FOR_SPEC@4..22
+        FOR_KW@4..7 "for"
+        WHITESPACE@7..8 " "
+        DESTRUCT_FULL@8..9
+          NAME@8..9
+            IDENT@8..9 "a"
+        WHITESPACE@9..10 " "
+        IN_KW@10..12 "in"
+        WHITESPACE@12..13 " "
+        EXPR@13..22
+          EXPR_ARRAY@13..22
+            L_BRACK@13..14 "["
+            EXPR@14..15
+              EXPR_NUMBER@14..15
+                FLOAT@14..15 "1"
+            COMMA@15..16 ","
+            WHITESPACE@16..17 " "
+            EXPR@17..18
+              EXPR_NUMBER@17..18
+                FLOAT@17..18 "2"
+            COMMA@18..19 ","
+            WHITESPACE@19..20 " "
+            EXPR@20..21
+              EXPR_NUMBER@20..21
+                FLOAT@20..21 "3"
+            R_BRACK@21..22 "]"
+      R_BRACK@22..23 "]"
   WHITESPACE@23..24 "\n"
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_incompatible_with_multiple_elems.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_incompatible_with_multiple_elems.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_incompatible_with_multiple_elems.snap
@@ -3,40 +3,48 @@
 expression: "[a for a in [1, 2, 3], b]\n"
 ---
 SOURCE_FILE@0..26
-  EXPR_ARRAY@0..25
-    L_BRACK@0..1 "["
-    EXPR_VAR@1..2
-      NAME@1..2
-        IDENT@1..2 "a"
-    WHITESPACE@2..3 " "
-    ERROR_CUSTOM@3..21
-      FOR_SPEC@3..21
-        FOR_KW@3..6 "for"
-        WHITESPACE@6..7 " "
-        NAME@7..8
-          IDENT@7..8 "a"
-        WHITESPACE@8..9 " "
-        IN_KW@9..11 "in"
-        WHITESPACE@11..12 " "
-        EXPR_ARRAY@12..21
-          L_BRACK@12..13 "["
-          EXPR_NUMBER@13..14
-            FLOAT@13..14 "1"
-          COMMA@14..15 ","
-          WHITESPACE@15..16 " "
-          EXPR_NUMBER@16..17
-            FLOAT@16..17 "2"
-          COMMA@17..18 ","
-          WHITESPACE@18..19 " "
-          EXPR_NUMBER@19..20
-            FLOAT@19..20 "3"
-          R_BRACK@20..21 "]"
-    COMMA@21..22 ","
-    WHITESPACE@22..23 " "
-    EXPR_VAR@23..24
-      NAME@23..24
-        IDENT@23..24 "b"
-    R_BRACK@24..25 "]"
+  EXPR@0..25
+    EXPR_ARRAY@0..25
+      L_BRACK@0..1 "["
+      EXPR@1..2
+        EXPR_VAR@1..2
+          NAME@1..2
+            IDENT@1..2 "a"
+      WHITESPACE@2..3 " "
+      ERROR_CUSTOM@3..21
+        FOR_SPEC@3..21
+          FOR_KW@3..6 "for"
+          WHITESPACE@6..7 " "
+          DESTRUCT_FULL@7..8
+            NAME@7..8
+              IDENT@7..8 "a"
+          WHITESPACE@8..9 " "
+          IN_KW@9..11 "in"
+          WHITESPACE@11..12 " "
+          EXPR@12..21
+            EXPR_ARRAY@12..21
+              L_BRACK@12..13 "["
+              EXPR@13..14
+                EXPR_NUMBER@13..14
+                  FLOAT@13..14 "1"
+              COMMA@14..15 ","
+              WHITESPACE@15..16 " "
+              EXPR@16..17
+                EXPR_NUMBER@16..17
+                  FLOAT@16..17 "2"
+              COMMA@17..18 ","
+              WHITESPACE@18..19 " "
+              EXPR@19..20
+                EXPR_NUMBER@19..20
+                  FLOAT@19..20 "3"
+              R_BRACK@20..21 "]"
+      COMMA@21..22 ","
+      WHITESPACE@22..23 " "
+      EXPR@23..24
+        EXPR_VAR@23..24
+          NAME@23..24
+            IDENT@23..24 "b"
+      R_BRACK@24..25 "]"
   WHITESPACE@25..26 "\n"
 ===
 LocatedSyntaxError { error: Custom { error: "compspec may only be used if there is only one array element" }, range: 3..21 }
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_incompatible_with_multiple_elems_w.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_incompatible_with_multiple_elems_w.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_incompatible_with_multiple_elems_w.snap
@@ -3,46 +3,55 @@
 expression: "[a, b, for a in [1, 2, 3], c]\n"
 ---
 SOURCE_FILE@0..30
-  EXPR_ARRAY@0..29
-    L_BRACK@0..1 "["
-    EXPR_VAR@1..2
-      NAME@1..2
-        IDENT@1..2 "a"
-    COMMA@2..3 ","
-    WHITESPACE@3..4 " "
-    EXPR_VAR@4..5
-      NAME@4..5
-        IDENT@4..5 "b"
-    COMMA@5..6 ","
-    WHITESPACE@6..7 " "
-    ERROR_CUSTOM@7..25
-      FOR_SPEC@7..25
-        FOR_KW@7..10 "for"
-        WHITESPACE@10..11 " "
-        NAME@11..12
-          IDENT@11..12 "a"
-        WHITESPACE@12..13 " "
-        IN_KW@13..15 "in"
-        WHITESPACE@15..16 " "
-        EXPR_ARRAY@16..25
-          L_BRACK@16..17 "["
-          EXPR_NUMBER@17..18
-            FLOAT@17..18 "1"
-          COMMA@18..19 ","
-          WHITESPACE@19..20 " "
-          EXPR_NUMBER@20..21
-            FLOAT@20..21 "2"
-          COMMA@21..22 ","
-          WHITESPACE@22..23 " "
-          EXPR_NUMBER@23..24
-            FLOAT@23..24 "3"
-          R_BRACK@24..25 "]"
-    COMMA@25..26 ","
-    WHITESPACE@26..27 " "
-    EXPR_VAR@27..28
-      NAME@27..28
-        IDENT@27..28 "c"
-    R_BRACK@28..29 "]"
+  EXPR@0..29
+    EXPR_ARRAY@0..29
+      L_BRACK@0..1 "["
+      EXPR@1..2
+        EXPR_VAR@1..2
+          NAME@1..2
+            IDENT@1..2 "a"
+      COMMA@2..3 ","
+      WHITESPACE@3..4 " "
+      EXPR@4..5
+        EXPR_VAR@4..5
+          NAME@4..5
+            IDENT@4..5 "b"
+      COMMA@5..6 ","
+      WHITESPACE@6..7 " "
+      ERROR_CUSTOM@7..25
+        FOR_SPEC@7..25
+          FOR_KW@7..10 "for"
+          WHITESPACE@10..11 " "
+          DESTRUCT_FULL@11..12
+            NAME@11..12
+              IDENT@11..12 "a"
+          WHITESPACE@12..13 " "
+          IN_KW@13..15 "in"
+          WHITESPACE@15..16 " "
+          EXPR@16..25
+            EXPR_ARRAY@16..25
+              L_BRACK@16..17 "["
+              EXPR@17..18
+                EXPR_NUMBER@17..18
+                  FLOAT@17..18 "1"
+              COMMA@18..19 ","
+              WHITESPACE@19..20 " "
+              EXPR@20..21
+                EXPR_NUMBER@20..21
+                  FLOAT@20..21 "2"
+              COMMA@21..22 ","
+              WHITESPACE@22..23 " "
+              EXPR@23..24
+                EXPR_NUMBER@23..24
+                  FLOAT@23..24 "3"
+              R_BRACK@24..25 "]"
+      COMMA@25..26 ","
+      WHITESPACE@26..27 " "
+      EXPR@27..28
+        EXPR_VAR@27..28
+          NAME@27..28
+            IDENT@27..28 "c"
+      R_BRACK@28..29 "]"
   WHITESPACE@29..30 "\n"
 ===
 LocatedSyntaxError { error: Custom { error: "compspec may only be used if there is only one array element" }, range: 7..25 }
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_no_elems.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_no_elems.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_no_elems.snap
@@ -3,31 +3,38 @@
 expression: "[for a in [1, 2, 3]]\n"
 ---
 SOURCE_FILE@0..21
-  EXPR_ARRAY_COMP@0..20
-    L_BRACK@0..1 "["
-    ERROR_MISSING_TOKEN@1..1
-    FOR_SPEC@1..19
-      FOR_KW@1..4 "for"
-      WHITESPACE@4..5 " "
-      NAME@5..6
-        IDENT@5..6 "a"
-      WHITESPACE@6..7 " "
-      IN_KW@7..9 "in"
-      WHITESPACE@9..10 " "
-      EXPR_ARRAY@10..19
-        L_BRACK@10..11 "["
-        EXPR_NUMBER@11..12
-          FLOAT@11..12 "1"
-        COMMA@12..13 ","
-        WHITESPACE@13..14 " "
-        EXPR_NUMBER@14..15
-          FLOAT@14..15 "2"
-        COMMA@15..16 ","
-        WHITESPACE@16..17 " "
-        EXPR_NUMBER@17..18
-          FLOAT@17..18 "3"
-        R_BRACK@18..19 "]"
-    R_BRACK@19..20 "]"
+  EXPR@0..20
+    EXPR_ARRAY_COMP@0..20
+      L_BRACK@0..1 "["
+      EXPR@1..1
+        ERROR_MISSING_TOKEN@1..1
+      FOR_SPEC@1..19
+        FOR_KW@1..4 "for"
+        WHITESPACE@4..5 " "
+        DESTRUCT_FULL@5..6
+          NAME@5..6
+            IDENT@5..6 "a"
+        WHITESPACE@6..7 " "
+        IN_KW@7..9 "in"
+        WHITESPACE@9..10 " "
+        EXPR@10..19
+          EXPR_ARRAY@10..19
+            L_BRACK@10..11 "["
+            EXPR@11..12
+              EXPR_NUMBER@11..12
+                FLOAT@11..12 "1"
+            COMMA@12..13 ","
+            WHITESPACE@13..14 " "
+            EXPR@14..15
+              EXPR_NUMBER@14..15
+                FLOAT@14..15 "2"
+            COMMA@15..16 ","
+            WHITESPACE@16..17 " "
+            EXPR@17..18
+              EXPR_NUMBER@17..18
+                FLOAT@17..18 "3"
+            R_BRACK@18..19 "]"
+      R_BRACK@19..20 "]"
   WHITESPACE@20..21 "\n"
 ===
 LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 1..1 }
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__continue_after_total_failure.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__continue_after_total_failure.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__continue_after_total_failure.snap
@@ -3,26 +3,29 @@
 expression: "local intr = $intrinsic(test);\n\nlocal a = 1, b = 2, c = a + b;\n\n[c]\n"
 ---
 SOURCE_FILE@0..68
-  STMT_LOCAL@0..23
-    LOCAL_KW@0..5 "local"
-    WHITESPACE@5..6 " "
-    BIND_DESTRUCT@6..14
-      DESTRUCT_FULL@6..10
-        NAME@6..10
-          IDENT@6..10 "intr"
-      WHITESPACE@10..11 " "
-      ASSIGN@11..12 "="
-      WHITESPACE@12..13 " "
-      EXPR_LITERAL@13..14
-        DOLLAR@13..14 "$"
-    ERROR_UNEXPECTED_TOKEN@14..23
-      IDENT@14..23 "intrinsic"
-  EXPR_PARENED@23..29
-    L_PAREN@23..24 "("
-    EXPR_VAR@24..28
-      NAME@24..28
-        IDENT@24..28 "test"
-    R_PAREN@28..29 ")"
+  EXPR@0..29
+    STMT_LOCAL@0..23
+      LOCAL_KW@0..5 "local"
+      WHITESPACE@5..6 " "
+      BIND_DESTRUCT@6..14
+        DESTRUCT_FULL@6..10
+          NAME@6..10
+            IDENT@6..10 "intr"
+        WHITESPACE@10..11 " "
+        ASSIGN@11..12 "="
+        WHITESPACE@12..13 " "
+        EXPR@13..14
+          EXPR_LITERAL@13..14
+            DOLLAR@13..14 "$"
+      ERROR_UNEXPECTED_TOKEN@14..23
+        IDENT@14..23 "intrinsic"
+    EXPR_PARENED@23..29
+      L_PAREN@23..24 "("
+      EXPR@24..28
+        EXPR_VAR@24..28
+          NAME@24..28
+            IDENT@24..28 "test"
+      R_PAREN@28..29 ")"
   ERROR_CUSTOM@29..67
     SEMI@29..30 ";"
     WHITESPACE@30..32 "\n\n"
@@ -58,14 +61,14 @@
     R_BRACK@66..67 "]"
   WHITESPACE@67..68 "\n"
 ===
-LocatedSyntaxError { error: Unexpected { expected: Unnamed(SyntaxKindSet([L_BRACK, L_PAREN, L_BRACE, SEMI, DOT, COMMA])), found: IDENT }, range: 14..23 }
+LocatedSyntaxError { error: Unexpected { expected: Unnamed(SyntaxKindSet([L_BRACK, L_PAREN, L_BRACE, SEMI, DOT, COMMA, QUESTION_MARK])), found: IDENT }, range: 14..23 }
 LocatedSyntaxError { error: Custom { error: "unexpected tokens after end" }, range: 29..67 }
 ===
   x syntax error
    ,-[1:1]
  1 | ,-> local intr = $intrinsic(test);
    : ||              ^^^^|^^^^
-   : ||                  `-- expected L_BRACK, L_PAREN, L_BRACE, SEMI, DOT or COMMA, found IDENT
+   : ||                  `-- expected L_BRACK, L_PAREN, L_BRACE, SEMI, DOT, COMMA or QUESTION_MARK, found IDENT
  2 | |
  3 | |   local a = 1, b = 2, c = a + b;
  4 | |
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__destruct.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__destruct.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__destruct.snap
@@ -3,252 +3,263 @@
 expression: "local [a, b, c] = arr;\nlocal [a, ...] = arr_rest;\nlocal [..., a] = rest_arr;\nlocal [...] = rest_in_arr;\nlocal [a, ...n] = arr_rest_n;\nlocal [...n, a] = rest_arr_n;\nlocal [...n] = rest_in_arr_n;\n\nlocal {a, b, c} = obj;\nlocal {a, b, c, ...} = obj_rest;\nlocal {a, b, c, ...n} = obj_rest_n;\n\nnull\n"
 ---
 SOURCE_FILE@0..293
-  STMT_LOCAL@0..22
-    LOCAL_KW@0..5 "local"
-    WHITESPACE@5..6 " "
-    BIND_DESTRUCT@6..21
-      DESTRUCT_ARRAY@6..15
-        L_BRACK@6..7 "["
-        DESTRUCT_FULL@7..8
-          NAME@7..8
-            IDENT@7..8 "a"
-        COMMA@8..9 ","
-        WHITESPACE@9..10 " "
-        DESTRUCT_FULL@10..11
-          NAME@10..11
-            IDENT@10..11 "b"
-        COMMA@11..12 ","
-        WHITESPACE@12..13 " "
-        DESTRUCT_FULL@13..14
-          NAME@13..14
-            IDENT@13..14 "c"
-        R_BRACK@14..15 "]"
-      WHITESPACE@15..16 " "
-      ASSIGN@16..17 "="
-      WHITESPACE@17..18 " "
-      EXPR_VAR@18..21
-        NAME@18..21
-          IDENT@18..21 "arr"
-    SEMI@21..22 ";"
-  WHITESPACE@22..23 "\n"
-  STMT_LOCAL@23..49
-    LOCAL_KW@23..28 "local"
-    WHITESPACE@28..29 " "
-    BIND_DESTRUCT@29..48
-      DESTRUCT_ARRAY@29..37
-        L_BRACK@29..30 "["
-        DESTRUCT_FULL@30..31
-          NAME@30..31
-            IDENT@30..31 "a"
-        COMMA@31..32 ","
-        WHITESPACE@32..33 " "
-        DESTRUCT_REST@33..36
-          DOTDOTDOT@33..36 "..."
-        R_BRACK@36..37 "]"
-      WHITESPACE@37..38 " "
-      ASSIGN@38..39 "="
-      WHITESPACE@39..40 " "
-      EXPR_VAR@40..48
-        NAME@40..48
-          IDENT@40..48 "arr_rest"
-    SEMI@48..49 ";"
-  WHITESPACE@49..50 "\n"
-  STMT_LOCAL@50..76
-    LOCAL_KW@50..55 "local"
-    WHITESPACE@55..56 " "
-    BIND_DESTRUCT@56..75
-      DESTRUCT_ARRAY@56..64
-        L_BRACK@56..57 "["
-        DESTRUCT_REST@57..60
-          DOTDOTDOT@57..60 "..."
-        COMMA@60..61 ","
-        WHITESPACE@61..62 " "
-        DESTRUCT_FULL@62..63
-          NAME@62..63
-            IDENT@62..63 "a"
-        R_BRACK@63..64 "]"
-      WHITESPACE@64..65 " "
-      ASSIGN@65..66 "="
-      WHITESPACE@66..67 " "
-      EXPR_VAR@67..75
-        NAME@67..75
-          IDENT@67..75 "rest_arr"
-    SEMI@75..76 ";"
-  WHITESPACE@76..77 "\n"
-  STMT_LOCAL@77..103
-    LOCAL_KW@77..82 "local"
-    WHITESPACE@82..83 " "
-    BIND_DESTRUCT@83..102
-      DESTRUCT_ARRAY@83..88
-        L_BRACK@83..84 "["
-        DESTRUCT_REST@84..87
-          DOTDOTDOT@84..87 "..."
-        R_BRACK@87..88 "]"
-      WHITESPACE@88..89 " "
-      ASSIGN@89..90 "="
-      WHITESPACE@90..91 " "
-      EXPR_VAR@91..102
-        NAME@91..102
-          IDENT@91..102 "rest_in_arr"
-    SEMI@102..103 ";"
-  WHITESPACE@103..104 "\n"
-  STMT_LOCAL@104..133
-    LOCAL_KW@104..109 "local"
-    WHITESPACE@109..110 " "
-    BIND_DESTRUCT@110..132
-      DESTRUCT_ARRAY@110..119
-        L_BRACK@110..111 "["
-        DESTRUCT_FULL@111..112
-          NAME@111..112
-            IDENT@111..112 "a"
-        COMMA@112..113 ","
-        WHITESPACE@113..114 " "
-        DESTRUCT_REST@114..118
-          DOTDOTDOT@114..117 "..."
-          IDENT@117..118 "n"
-        R_BRACK@118..119 "]"
-      WHITESPACE@119..120 " "
-      ASSIGN@120..121 "="
-      WHITESPACE@121..122 " "
-      EXPR_VAR@122..132
-        NAME@122..132
-          IDENT@122..132 "arr_rest_n"
-    SEMI@132..133 ";"
-  WHITESPACE@133..134 "\n"
-  STMT_LOCAL@134..163
-    LOCAL_KW@134..139 "local"
-    WHITESPACE@139..140 " "
-    BIND_DESTRUCT@140..162
-      DESTRUCT_ARRAY@140..149
-        L_BRACK@140..141 "["
-        DESTRUCT_REST@141..145
-          DOTDOTDOT@141..144 "..."
-          IDENT@144..145 "n"
-        COMMA@145..146 ","
-        WHITESPACE@146..147 " "
-        DESTRUCT_FULL@147..148
-          NAME@147..148
-            IDENT@147..148 "a"
-        R_BRACK@148..149 "]"
-      WHITESPACE@149..150 " "
-      ASSIGN@150..151 "="
-      WHITESPACE@151..152 " "
-      EXPR_VAR@152..162
-        NAME@152..162
-          IDENT@152..162 "rest_arr_n"
-    SEMI@162..163 ";"
-  WHITESPACE@163..164 "\n"
-  STMT_LOCAL@164..193
-    LOCAL_KW@164..169 "local"
-    WHITESPACE@169..170 " "
-    BIND_DESTRUCT@170..192
-      DESTRUCT_ARRAY@170..176
-        L_BRACK@170..171 "["
-        DESTRUCT_REST@171..175
-          DOTDOTDOT@171..174 "..."
-          IDENT@174..175 "n"
-        R_BRACK@175..176 "]"
-      WHITESPACE@176..177 " "
-      ASSIGN@177..178 "="
-      WHITESPACE@178..179 " "
-      EXPR_VAR@179..192
-        NAME@179..192
-          IDENT@179..192 "rest_in_arr_n"
-    SEMI@192..193 ";"
-  WHITESPACE@193..195 "\n\n"
-  STMT_LOCAL@195..217
-    LOCAL_KW@195..200 "local"
-    WHITESPACE@200..201 " "
-    BIND_DESTRUCT@201..216
-      DESTRUCT_OBJECT@201..210
-        L_BRACE@201..202 "{"
-        DESTRUCT_OBJECT_FIELD@202..203
-          NAME@202..203
-            IDENT@202..203 "a"
-        COMMA@203..204 ","
-        WHITESPACE@204..205 " "
-        DESTRUCT_OBJECT_FIELD@205..206
-          NAME@205..206
-            IDENT@205..206 "b"
-        COMMA@206..207 ","
-        WHITESPACE@207..208 " "
-        DESTRUCT_OBJECT_FIELD@208..209
-          NAME@208..209
-            IDENT@208..209 "c"
-        R_BRACE@209..210 "}"
-      WHITESPACE@210..211 " "
-      ASSIGN@211..212 "="
-      WHITESPACE@212..213 " "
-      EXPR_VAR@213..216
-        NAME@213..216
-          IDENT@213..216 "obj"
-    SEMI@216..217 ";"
-  WHITESPACE@217..218 "\n"
-  STMT_LOCAL@218..250
-    LOCAL_KW@218..223 "local"
-    WHITESPACE@223..224 " "
-    BIND_DESTRUCT@224..249
-      DESTRUCT_OBJECT@224..238
-        L_BRACE@224..225 "{"
-        DESTRUCT_OBJECT_FIELD@225..226
-          NAME@225..226
-            IDENT@225..226 "a"
-        COMMA@226..227 ","
-        WHITESPACE@227..228 " "
-        DESTRUCT_OBJECT_FIELD@228..229
-          NAME@228..229
-            IDENT@228..229 "b"
-        COMMA@229..230 ","
-        WHITESPACE@230..231 " "
-        DESTRUCT_OBJECT_FIELD@231..232
-          NAME@231..232
-            IDENT@231..232 "c"
-        COMMA@232..233 ","
-        WHITESPACE@233..234 " "
-        DESTRUCT_REST@234..237
-          DOTDOTDOT@234..237 "..."
-        R_BRACE@237..238 "}"
-      WHITESPACE@238..239 " "
-      ASSIGN@239..240 "="
-      WHITESPACE@240..241 " "
-      EXPR_VAR@241..249
-        NAME@241..249
-          IDENT@241..249 "obj_rest"
-    SEMI@249..250 ";"
-  WHITESPACE@250..251 "\n"
-  STMT_LOCAL@251..286
-    LOCAL_KW@251..256 "local"
-    WHITESPACE@256..257 " "
-    BIND_DESTRUCT@257..285
-      DESTRUCT_OBJECT@257..272
-        L_BRACE@257..258 "{"
-        DESTRUCT_OBJECT_FIELD@258..259
-          NAME@258..259
-            IDENT@258..259 "a"
-        COMMA@259..260 ","
-        WHITESPACE@260..261 " "
-        DESTRUCT_OBJECT_FIELD@261..262
-          NAME@261..262
-            IDENT@261..262 "b"
-        COMMA@262..263 ","
-        WHITESPACE@263..264 " "
-        DESTRUCT_OBJECT_FIELD@264..265
-          NAME@264..265
-            IDENT@264..265 "c"
-        COMMA@265..266 ","
-        WHITESPACE@266..267 " "
-        DESTRUCT_REST@267..271
-          DOTDOTDOT@267..270 "..."
-          IDENT@270..271 "n"
-        R_BRACE@271..272 "}"
-      WHITESPACE@272..273 " "
-      ASSIGN@273..274 "="
-      WHITESPACE@274..275 " "
-      EXPR_VAR@275..285
-        NAME@275..285
-          IDENT@275..285 "obj_rest_n"
-    SEMI@285..286 ";"
-  WHITESPACE@286..288 "\n\n"
-  EXPR_LITERAL@288..292
-    NULL_KW@288..292 "null"
+  EXPR@0..292
+    STMT_LOCAL@0..22
+      LOCAL_KW@0..5 "local"
+      WHITESPACE@5..6 " "
+      BIND_DESTRUCT@6..21
+        DESTRUCT_ARRAY@6..15
+          L_BRACK@6..7 "["
+          DESTRUCT_FULL@7..8
+            NAME@7..8
+              IDENT@7..8 "a"
+          COMMA@8..9 ","
+          WHITESPACE@9..10 " "
+          DESTRUCT_FULL@10..11
+            NAME@10..11
+              IDENT@10..11 "b"
+          COMMA@11..12 ","
+          WHITESPACE@12..13 " "
+          DESTRUCT_FULL@13..14
+            NAME@13..14
+              IDENT@13..14 "c"
+          R_BRACK@14..15 "]"
+        WHITESPACE@15..16 " "
+        ASSIGN@16..17 "="
+        WHITESPACE@17..18 " "
+        EXPR@18..21
+          EXPR_VAR@18..21
+            NAME@18..21
+              IDENT@18..21 "arr"
+      SEMI@21..22 ";"
+    WHITESPACE@22..23 "\n"
+    STMT_LOCAL@23..49
+      LOCAL_KW@23..28 "local"
+      WHITESPACE@28..29 " "
+      BIND_DESTRUCT@29..48
+        DESTRUCT_ARRAY@29..37
+          L_BRACK@29..30 "["
+          DESTRUCT_FULL@30..31
+            NAME@30..31
+              IDENT@30..31 "a"
+          COMMA@31..32 ","
+          WHITESPACE@32..33 " "
+          DESTRUCT_REST@33..36
+            DOTDOTDOT@33..36 "..."
+          R_BRACK@36..37 "]"
+        WHITESPACE@37..38 " "
+        ASSIGN@38..39 "="
+        WHITESPACE@39..40 " "
+        EXPR@40..48
+          EXPR_VAR@40..48
+            NAME@40..48
+              IDENT@40..48 "arr_rest"
+      SEMI@48..49 ";"
+    WHITESPACE@49..50 "\n"
+    STMT_LOCAL@50..76
+      LOCAL_KW@50..55 "local"
+      WHITESPACE@55..56 " "
+      BIND_DESTRUCT@56..75
+        DESTRUCT_ARRAY@56..64
+          L_BRACK@56..57 "["
+          DESTRUCT_REST@57..60
+            DOTDOTDOT@57..60 "..."
+          COMMA@60..61 ","
+          WHITESPACE@61..62 " "
+          DESTRUCT_FULL@62..63
+            NAME@62..63
+              IDENT@62..63 "a"
+          R_BRACK@63..64 "]"
+        WHITESPACE@64..65 " "
+        ASSIGN@65..66 "="
+        WHITESPACE@66..67 " "
+        EXPR@67..75
+          EXPR_VAR@67..75
+            NAME@67..75
+              IDENT@67..75 "rest_arr"
+      SEMI@75..76 ";"
+    WHITESPACE@76..77 "\n"
+    STMT_LOCAL@77..103
+      LOCAL_KW@77..82 "local"
+      WHITESPACE@82..83 " "
+      BIND_DESTRUCT@83..102
+        DESTRUCT_ARRAY@83..88
+          L_BRACK@83..84 "["
+          DESTRUCT_REST@84..87
+            DOTDOTDOT@84..87 "..."
+          R_BRACK@87..88 "]"
+        WHITESPACE@88..89 " "
+        ASSIGN@89..90 "="
+        WHITESPACE@90..91 " "
+        EXPR@91..102
+          EXPR_VAR@91..102
+            NAME@91..102
+              IDENT@91..102 "rest_in_arr"
+      SEMI@102..103 ";"
+    WHITESPACE@103..104 "\n"
+    STMT_LOCAL@104..133
+      LOCAL_KW@104..109 "local"
+      WHITESPACE@109..110 " "
+      BIND_DESTRUCT@110..132
+        DESTRUCT_ARRAY@110..119
+          L_BRACK@110..111 "["
+          DESTRUCT_FULL@111..112
+            NAME@111..112
+              IDENT@111..112 "a"
+          COMMA@112..113 ","
+          WHITESPACE@113..114 " "
+          DESTRUCT_REST@114..118
+            DOTDOTDOT@114..117 "..."
+            IDENT@117..118 "n"
+          R_BRACK@118..119 "]"
+        WHITESPACE@119..120 " "
+        ASSIGN@120..121 "="
+        WHITESPACE@121..122 " "
+        EXPR@122..132
+          EXPR_VAR@122..132
+            NAME@122..132
+              IDENT@122..132 "arr_rest_n"
+      SEMI@132..133 ";"
+    WHITESPACE@133..134 "\n"
+    STMT_LOCAL@134..163
+      LOCAL_KW@134..139 "local"
+      WHITESPACE@139..140 " "
+      BIND_DESTRUCT@140..162
+        DESTRUCT_ARRAY@140..149
+          L_BRACK@140..141 "["
+          DESTRUCT_REST@141..145
+            DOTDOTDOT@141..144 "..."
+            IDENT@144..145 "n"
+          COMMA@145..146 ","
+          WHITESPACE@146..147 " "
+          DESTRUCT_FULL@147..148
+            NAME@147..148
+              IDENT@147..148 "a"
+          R_BRACK@148..149 "]"
+        WHITESPACE@149..150 " "
+        ASSIGN@150..151 "="
+        WHITESPACE@151..152 " "
+        EXPR@152..162
+          EXPR_VAR@152..162
+            NAME@152..162
+              IDENT@152..162 "rest_arr_n"
+      SEMI@162..163 ";"
+    WHITESPACE@163..164 "\n"
+    STMT_LOCAL@164..193
+      LOCAL_KW@164..169 "local"
+      WHITESPACE@169..170 " "
+      BIND_DESTRUCT@170..192
+        DESTRUCT_ARRAY@170..176
+          L_BRACK@170..171 "["
+          DESTRUCT_REST@171..175
+            DOTDOTDOT@171..174 "..."
+            IDENT@174..175 "n"
+          R_BRACK@175..176 "]"
+        WHITESPACE@176..177 " "
+        ASSIGN@177..178 "="
+        WHITESPACE@178..179 " "
+        EXPR@179..192
+          EXPR_VAR@179..192
+            NAME@179..192
+              IDENT@179..192 "rest_in_arr_n"
+      SEMI@192..193 ";"
+    WHITESPACE@193..195 "\n\n"
+    STMT_LOCAL@195..217
+      LOCAL_KW@195..200 "local"
+      WHITESPACE@200..201 " "
+      BIND_DESTRUCT@201..216
+        DESTRUCT_OBJECT@201..210
+          L_BRACE@201..202 "{"
+          DESTRUCT_OBJECT_FIELD@202..203
+            NAME@202..203
+              IDENT@202..203 "a"
+          COMMA@203..204 ","
+          WHITESPACE@204..205 " "
+          DESTRUCT_OBJECT_FIELD@205..206
+            NAME@205..206
+              IDENT@205..206 "b"
+          COMMA@206..207 ","
+          WHITESPACE@207..208 " "
+          DESTRUCT_OBJECT_FIELD@208..209
+            NAME@208..209
+              IDENT@208..209 "c"
+          R_BRACE@209..210 "}"
+        WHITESPACE@210..211 " "
+        ASSIGN@211..212 "="
+        WHITESPACE@212..213 " "
+        EXPR@213..216
+          EXPR_VAR@213..216
+            NAME@213..216
+              IDENT@213..216 "obj"
+      SEMI@216..217 ";"
+    WHITESPACE@217..218 "\n"
+    STMT_LOCAL@218..250
+      LOCAL_KW@218..223 "local"
+      WHITESPACE@223..224 " "
+      BIND_DESTRUCT@224..249
+        DESTRUCT_OBJECT@224..238
+          L_BRACE@224..225 "{"
+          DESTRUCT_OBJECT_FIELD@225..226
+            NAME@225..226
+              IDENT@225..226 "a"
+          COMMA@226..227 ","
+          WHITESPACE@227..228 " "
+          DESTRUCT_OBJECT_FIELD@228..229
+            NAME@228..229
+              IDENT@228..229 "b"
+          COMMA@229..230 ","
+          WHITESPACE@230..231 " "
+          DESTRUCT_OBJECT_FIELD@231..232
+            NAME@231..232
+              IDENT@231..232 "c"
+          COMMA@232..233 ","
+          WHITESPACE@233..234 " "
+          DESTRUCT_REST@234..237
+            DOTDOTDOT@234..237 "..."
+          R_BRACE@237..238 "}"
+        WHITESPACE@238..239 " "
+        ASSIGN@239..240 "="
+        WHITESPACE@240..241 " "
+        EXPR@241..249
+          EXPR_VAR@241..249
+            NAME@241..249
+              IDENT@241..249 "obj_rest"
+      SEMI@249..250 ";"
+    WHITESPACE@250..251 "\n"
+    STMT_LOCAL@251..286
+      LOCAL_KW@251..256 "local"
+      WHITESPACE@256..257 " "
+      BIND_DESTRUCT@257..285
+        DESTRUCT_OBJECT@257..272
+          L_BRACE@257..258 "{"
+          DESTRUCT_OBJECT_FIELD@258..259
+            NAME@258..259
+              IDENT@258..259 "a"
+          COMMA@259..260 ","
+          WHITESPACE@260..261 " "
+          DESTRUCT_OBJECT_FIELD@261..262
+            NAME@261..262
+              IDENT@261..262 "b"
+          COMMA@262..263 ","
+          WHITESPACE@263..264 " "
+          DESTRUCT_OBJECT_FIELD@264..265
+            NAME@264..265
+              IDENT@264..265 "c"
+          COMMA@265..266 ","
+          WHITESPACE@266..267 " "
+          DESTRUCT_REST@267..271
+            DOTDOTDOT@267..270 "..."
+            IDENT@270..271 "n"
+          R_BRACE@271..272 "}"
+        WHITESPACE@272..273 " "
+        ASSIGN@273..274 "="
+        WHITESPACE@274..275 " "
+        EXPR@275..285
+          EXPR_VAR@275..285
+            NAME@275..285
+              IDENT@275..285 "obj_rest_n"
+      SEMI@285..286 ";"
+    WHITESPACE@286..288 "\n\n"
+    EXPR_LITERAL@288..292
+      NULL_KW@288..292 "null"
   WHITESPACE@292..293 "\n"
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__empty.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__empty.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__empty.snap
@@ -4,7 +4,8 @@
 ---
 SOURCE_FILE@0..1
   WHITESPACE@0..1 " "
-  ERROR_MISSING_TOKEN@1..1
+  EXPR@1..1
+    ERROR_MISSING_TOKEN@1..1
 ===
 LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 1..1 }
 ===
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function.snap
@@ -3,37 +3,40 @@
 expression: "function(a, b = 1) a + b\n"
 ---
 SOURCE_FILE@0..25
-  EXPR_FUNCTION@0..24
-    FUNCTION_KW@0..8 "function"
-    PARAMS_DESC@8..18
-      L_PAREN@8..9 "("
-      PARAM@9..10
-        DESTRUCT_FULL@9..10
-          NAME@9..10
-            IDENT@9..10 "a"
-      COMMA@10..11 ","
-      WHITESPACE@11..12 " "
-      PARAM@12..17
-        DESTRUCT_FULL@12..13
-          NAME@12..13
-            IDENT@12..13 "b"
-        WHITESPACE@13..14 " "
-        ASSIGN@14..15 "="
-        WHITESPACE@15..16 " "
-        EXPR_NUMBER@16..17
-          FLOAT@16..17 "1"
-      R_PAREN@17..18 ")"
-    WHITESPACE@18..19 " "
-    EXPR_BINARY@19..24
-      LHS_EXPR@19..20
-        EXPR_VAR@19..20
-          NAME@19..20
-            IDENT@19..20 "a"
-      WHITESPACE@20..21 " "
-      PLUS@21..22 "+"
-      WHITESPACE@22..23 " "
-      EXPR_VAR@23..24
-        NAME@23..24
-          IDENT@23..24 "b"
+  EXPR@0..24
+    EXPR_FUNCTION@0..24
+      FUNCTION_KW@0..8 "function"
+      PARAMS_DESC@8..18
+        L_PAREN@8..9 "("
+        PARAM@9..10
+          DESTRUCT_FULL@9..10
+            NAME@9..10
+              IDENT@9..10 "a"
+        COMMA@10..11 ","
+        WHITESPACE@11..12 " "
+        PARAM@12..17
+          DESTRUCT_FULL@12..13
+            NAME@12..13
+              IDENT@12..13 "b"
+          WHITESPACE@13..14 " "
+          ASSIGN@14..15 "="
+          WHITESPACE@15..16 " "
+          EXPR@16..17
+            EXPR_NUMBER@16..17
+              FLOAT@16..17 "1"
+        R_PAREN@17..18 ")"
+      WHITESPACE@18..19 " "
+      EXPR@19..24
+        EXPR_BINARY@19..24
+          EXPR@19..20
+            EXPR_VAR@19..20
+              NAME@19..20
+                IDENT@19..20 "a"
+          WHITESPACE@20..21 " "
+          PLUS@21..22 "+"
+          WHITESPACE@22..23 " "
+          EXPR@23..24
+            EXPR_VAR@23..24
+              NAME@23..24
+                IDENT@23..24 "b"
   WHITESPACE@24..25 "\n"
-
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_body.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_body.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_body.snap
@@ -3,23 +3,25 @@
 expression: "function(a, b)\n"
 ---
 SOURCE_FILE@0..15
-  EXPR_FUNCTION@0..15
-    FUNCTION_KW@0..8 "function"
-    PARAMS_DESC@8..14
-      L_PAREN@8..9 "("
-      PARAM@9..10
-        DESTRUCT_FULL@9..10
-          NAME@9..10
-            IDENT@9..10 "a"
-      COMMA@10..11 ","
-      WHITESPACE@11..12 " "
-      PARAM@12..13
-        DESTRUCT_FULL@12..13
-          NAME@12..13
-            IDENT@12..13 "b"
-      R_PAREN@13..14 ")"
-    WHITESPACE@14..15 "\n"
-    ERROR_MISSING_TOKEN@15..15
+  EXPR@0..15
+    EXPR_FUNCTION@0..15
+      FUNCTION_KW@0..8 "function"
+      PARAMS_DESC@8..14
+        L_PAREN@8..9 "("
+        PARAM@9..10
+          DESTRUCT_FULL@9..10
+            NAME@9..10
+              IDENT@9..10 "a"
+        COMMA@10..11 ","
+        WHITESPACE@11..12 " "
+        PARAM@12..13
+          DESTRUCT_FULL@12..13
+            NAME@12..13
+              IDENT@12..13 "b"
+        R_PAREN@13..14 ")"
+      WHITESPACE@14..15 "\n"
+      EXPR@15..15
+        ERROR_MISSING_TOKEN@15..15
 ===
 LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 15..15 }
 ===
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_no_value.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_no_value.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_no_value.snap
@@ -3,37 +3,41 @@
 expression: "function(a, b = ) a + b\n"
 ---
 SOURCE_FILE@0..24
-  EXPR_FUNCTION@0..23
-    FUNCTION_KW@0..8 "function"
-    PARAMS_DESC@8..17
-      L_PAREN@8..9 "("
-      PARAM@9..10
-        DESTRUCT_FULL@9..10
-          NAME@9..10
-            IDENT@9..10 "a"
-      COMMA@10..11 ","
-      WHITESPACE@11..12 " "
-      PARAM@12..16
-        DESTRUCT_FULL@12..13
-          NAME@12..13
-            IDENT@12..13 "b"
-        WHITESPACE@13..14 " "
-        ASSIGN@14..15 "="
-        WHITESPACE@15..16 " "
-        ERROR_MISSING_TOKEN@16..16
-      R_PAREN@16..17 ")"
-    WHITESPACE@17..18 " "
-    EXPR_BINARY@18..23
-      LHS_EXPR@18..19
-        EXPR_VAR@18..19
-          NAME@18..19
-            IDENT@18..19 "a"
-      WHITESPACE@19..20 " "
-      PLUS@20..21 "+"
-      WHITESPACE@21..22 " "
-      EXPR_VAR@22..23
-        NAME@22..23
-          IDENT@22..23 "b"
+  EXPR@0..23
+    EXPR_FUNCTION@0..23
+      FUNCTION_KW@0..8 "function"
+      PARAMS_DESC@8..17
+        L_PAREN@8..9 "("
+        PARAM@9..10
+          DESTRUCT_FULL@9..10
+            NAME@9..10
+              IDENT@9..10 "a"
+        COMMA@10..11 ","
+        WHITESPACE@11..12 " "
+        PARAM@12..16
+          DESTRUCT_FULL@12..13
+            NAME@12..13
+              IDENT@12..13 "b"
+          WHITESPACE@13..14 " "
+          ASSIGN@14..15 "="
+          WHITESPACE@15..16 " "
+          EXPR@16..16
+            ERROR_MISSING_TOKEN@16..16
+        R_PAREN@16..17 ")"
+      WHITESPACE@17..18 " "
+      EXPR@18..23
+        EXPR_BINARY@18..23
+          EXPR@18..19
+            EXPR_VAR@18..19
+              NAME@18..19
+                IDENT@18..19 "a"
+          WHITESPACE@19..20 " "
+          PLUS@20..21 "+"
+          WHITESPACE@21..22 " "
+          EXPR@22..23
+            EXPR_VAR@22..23
+              NAME@22..23
+                IDENT@22..23 "b"
   WHITESPACE@23..24 "\n"
 ===
 LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 16..16 }
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_rparen.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_rparen.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_rparen.snap
@@ -3,23 +3,25 @@
 expression: "function(a, b\n"
 ---
 SOURCE_FILE@0..14
-  EXPR_FUNCTION@0..14
-    FUNCTION_KW@0..8 "function"
-    PARAMS_DESC@8..14
-      L_PAREN@8..9 "("
-      PARAM@9..10
-        DESTRUCT_FULL@9..10
-          NAME@9..10
-            IDENT@9..10 "a"
-      COMMA@10..11 ","
-      WHITESPACE@11..12 " "
-      PARAM@12..13
-        DESTRUCT_FULL@12..13
-          NAME@12..13
-            IDENT@12..13 "b"
-      WHITESPACE@13..14 "\n"
-      ERROR_MISSING_TOKEN@14..14
-    ERROR_MISSING_TOKEN@14..14
+  EXPR@0..14
+    EXPR_FUNCTION@0..14
+      FUNCTION_KW@0..8 "function"
+      PARAMS_DESC@8..14
+        L_PAREN@8..9 "("
+        PARAM@9..10
+          DESTRUCT_FULL@9..10
+            NAME@9..10
+              IDENT@9..10 "a"
+        COMMA@10..11 ","
+        WHITESPACE@11..12 " "
+        PARAM@12..13
+          DESTRUCT_FULL@12..13
+            NAME@12..13
+              IDENT@12..13 "b"
+        WHITESPACE@13..14 "\n"
+        ERROR_MISSING_TOKEN@14..14
+      EXPR@14..14
+        ERROR_MISSING_TOKEN@14..14
 ===
 LocatedSyntaxError { error: Missing { expected: Unnamed(SyntaxKindSet([R_PAREN, COMMA, ASSIGN])) }, range: 14..14 }
 LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 14..14 }
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_method.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_method.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_method.snap
@@ -3,50 +3,53 @@
 expression: "local\n\ta(x) = x,\n\ta = function(x) x,\n; c\n"
 ---
 SOURCE_FILE@0..41
-  STMT_LOCAL@0..38
-    LOCAL_KW@0..5 "local"
-    WHITESPACE@5..7 "\n\t"
-    BIND_FUNCTION@7..15
-      NAME@7..8
-        IDENT@7..8 "a"
-      PARAMS_DESC@8..11
-        L_PAREN@8..9 "("
-        PARAM@9..10
-          DESTRUCT_FULL@9..10
-            NAME@9..10
-              IDENT@9..10 "x"
-        R_PAREN@10..11 ")"
-      WHITESPACE@11..12 " "
-      ASSIGN@12..13 "="
-      WHITESPACE@13..14 " "
-      EXPR_VAR@14..15
-        NAME@14..15
-          IDENT@14..15 "x"
-    COMMA@15..16 ","
-    WHITESPACE@16..18 "\n\t"
-    BIND_FUNCTION@18..35
-      NAME@18..19
-        IDENT@18..19 "a"
-      WHITESPACE@19..20 " "
-      ASSIGN@20..21 "="
-      WHITESPACE@21..22 " "
-      FUNCTION_KW@22..30 "function"
-      PARAMS_DESC@30..33
-        L_PAREN@30..31 "("
-        PARAM@31..32
-          DESTRUCT_FULL@31..32
-            NAME@31..32
-              IDENT@31..32 "x"
-        R_PAREN@32..33 ")"
-      WHITESPACE@33..34 " "
-      EXPR_VAR@34..35
-        NAME@34..35
-          IDENT@34..35 "x"
-    COMMA@35..36 ","
-    WHITESPACE@36..37 "\n"
-    SEMI@37..38 ";"
-  WHITESPACE@38..39 " "
-  EXPR_VAR@39..40
-    NAME@39..40
-      IDENT@39..40 "c"
+  EXPR@0..40
+    STMT_LOCAL@0..38
+      LOCAL_KW@0..5 "local"
+      WHITESPACE@5..7 "\n\t"
+      BIND_FUNCTION@7..15
+        NAME@7..8
+          IDENT@7..8 "a"
+        PARAMS_DESC@8..11
+          L_PAREN@8..9 "("
+          PARAM@9..10
+            DESTRUCT_FULL@9..10
+              NAME@9..10
+                IDENT@9..10 "x"
+          R_PAREN@10..11 ")"
+        WHITESPACE@11..12 " "
+        ASSIGN@12..13 "="
+        WHITESPACE@13..14 " "
+        EXPR@14..15
+          EXPR_VAR@14..15
+            NAME@14..15
+              IDENT@14..15 "x"
+      COMMA@15..16 ","
+      WHITESPACE@16..18 "\n\t"
+      BIND_FUNCTION@18..35
+        NAME@18..19
+          IDENT@18..19 "a"
+        WHITESPACE@19..20 " "
+        ASSIGN@20..21 "="
+        WHITESPACE@21..22 " "
+        FUNCTION_KW@22..30 "function"
+        PARAMS_DESC@30..33
+          L_PAREN@30..31 "("
+          PARAM@31..32
+            DESTRUCT_FULL@31..32
+              NAME@31..32
+                IDENT@31..32 "x"
+          R_PAREN@32..33 ")"
+        WHITESPACE@33..34 " "
+        EXPR@34..35
+          EXPR_VAR@34..35
+            NAME@34..35
+              IDENT@34..35 "x"
+      COMMA@35..36 ","
+      WHITESPACE@36..37 "\n"
+      SEMI@37..38 ";"
+    WHITESPACE@38..39 " "
+    EXPR_VAR@39..40
+      NAME@39..40
+        IDENT@39..40 "c"
   WHITESPACE@40..41 "\n"
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_no_value_recovery.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_no_value_recovery.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_no_value_recovery.snap
@@ -3,37 +3,40 @@
 expression: "local a =\nlocal b = 3;\n1\n"
 ---
 SOURCE_FILE@0..25
-  STMT_LOCAL@0..25
-    LOCAL_KW@0..5 "local"
-    WHITESPACE@5..6 " "
-    BIND_DESTRUCT@6..24
-      DESTRUCT_FULL@6..7
-        NAME@6..7
-          IDENT@6..7 "a"
-      WHITESPACE@7..8 " "
-      ASSIGN@8..9 "="
-      WHITESPACE@9..10 "\n"
-      STMT_LOCAL@10..22
-        LOCAL_KW@10..15 "local"
-        WHITESPACE@15..16 " "
-        BIND_DESTRUCT@16..21
-          DESTRUCT_FULL@16..17
-            NAME@16..17
-              IDENT@16..17 "b"
-          WHITESPACE@17..18 " "
-          ASSIGN@18..19 "="
-          WHITESPACE@19..20 " "
-          EXPR_NUMBER@20..21
-            FLOAT@20..21 "3"
-        SEMI@21..22 ";"
-      WHITESPACE@22..23 "\n"
-      EXPR_NUMBER@23..24
-        FLOAT@23..24 "1"
-    WHITESPACE@24..25 "\n"
+  EXPR@0..25
+    STMT_LOCAL@0..25
+      LOCAL_KW@0..5 "local"
+      WHITESPACE@5..6 " "
+      BIND_DESTRUCT@6..24
+        DESTRUCT_FULL@6..7
+          NAME@6..7
+            IDENT@6..7 "a"
+        WHITESPACE@7..8 " "
+        ASSIGN@8..9 "="
+        WHITESPACE@9..10 "\n"
+        EXPR@10..24
+          STMT_LOCAL@10..22
+            LOCAL_KW@10..15 "local"
+            WHITESPACE@15..16 " "
+            BIND_DESTRUCT@16..21
+              DESTRUCT_FULL@16..17
+                NAME@16..17
+                  IDENT@16..17 "b"
+              WHITESPACE@17..18 " "
+              ASSIGN@18..19 "="
+              WHITESPACE@19..20 " "
+              EXPR@20..21
+                EXPR_NUMBER@20..21
+                  FLOAT@20..21 "3"
+            SEMI@21..22 ";"
+          WHITESPACE@22..23 "\n"
+          EXPR_NUMBER@23..24
+            FLOAT@23..24 "1"
+      WHITESPACE@24..25 "\n"
+      ERROR_MISSING_TOKEN@25..25
     ERROR_MISSING_TOKEN@25..25
-  ERROR_MISSING_TOKEN@25..25
 ===
-LocatedSyntaxError { error: Missing { expected: Unnamed(SyntaxKindSet([L_BRACK, L_PAREN, L_BRACE, SEMI, DOT, COMMA])) }, range: 25..25 }
+LocatedSyntaxError { error: Missing { expected: Unnamed(SyntaxKindSet([L_BRACK, L_PAREN, L_BRACE, SEMI, DOT, COMMA, QUESTION_MARK])) }, range: 25..25 }
 LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 25..25 }
 ===
   x syntax error
@@ -42,5 +45,5 @@
  3 | 1
    :   ^^
    :   |`-- missing expression
-   :   `-- missing L_BRACK, L_PAREN, L_BRACE, SEMI, DOT or COMMA
+   :   `-- missing L_BRACK, L_PAREN, L_BRACE, SEMI, DOT, COMMA or QUESTION_MARK
    `----
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_novalue.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_novalue.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_novalue.snap
@@ -3,19 +3,21 @@
 expression: "local a =\n"
 ---
 SOURCE_FILE@0..10
-  STMT_LOCAL@0..10
-    LOCAL_KW@0..5 "local"
-    WHITESPACE@5..6 " "
-    BIND_DESTRUCT@6..10
-      DESTRUCT_FULL@6..7
-        NAME@6..7
-          IDENT@6..7 "a"
-      WHITESPACE@7..8 " "
-      ASSIGN@8..9 "="
-      WHITESPACE@9..10 "\n"
+  EXPR@0..10
+    STMT_LOCAL@0..10
+      LOCAL_KW@0..5 "local"
+      WHITESPACE@5..6 " "
+      BIND_DESTRUCT@6..10
+        DESTRUCT_FULL@6..7
+          NAME@6..7
+            IDENT@6..7 "a"
+        WHITESPACE@7..8 " "
+        ASSIGN@8..9 "="
+        WHITESPACE@9..10 "\n"
+        EXPR@10..10
+          ERROR_MISSING_TOKEN@10..10
       ERROR_MISSING_TOKEN@10..10
     ERROR_MISSING_TOKEN@10..10
-  ERROR_MISSING_TOKEN@10..10
 ===
 LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 10..10 }
 LocatedSyntaxError { error: Missing { expected: Unnamed(SyntaxKindSet([SEMI, COMMA])) }, range: 10..10 }
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__named_before_positional.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__named_before_positional.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__named_before_positional.snap
@@ -3,57 +3,65 @@
 expression: "a(1, 2, b=4, 3, 5, k = 12, 6)\n"
 ---
 SOURCE_FILE@0..30
-  EXPR_APPLY@0..29
+  EXPR@0..29
     EXPR_VAR@0..1
       NAME@0..1
         IDENT@0..1 "a"
-    ARGS_DESC@1..29
-      L_PAREN@1..2 "("
-      ARG@2..3
-        EXPR_NUMBER@2..3
-          FLOAT@2..3 "1"
-      COMMA@3..4 ","
-      WHITESPACE@4..5 " "
-      ARG@5..6
-        EXPR_NUMBER@5..6
-          FLOAT@5..6 "2"
-      COMMA@6..7 ","
-      WHITESPACE@7..8 " "
-      ARG@8..11
-        NAME@8..9
-          IDENT@8..9 "b"
-        ASSIGN@9..10 "="
-        EXPR_NUMBER@10..11
-          FLOAT@10..11 "4"
-      COMMA@11..12 ","
-      WHITESPACE@12..13 " "
-      ERROR_CUSTOM@13..14
-        ARG@13..14
-          EXPR_NUMBER@13..14
-            FLOAT@13..14 "3"
-      COMMA@14..15 ","
-      WHITESPACE@15..16 " "
-      ERROR_CUSTOM@16..17
-        ARG@16..17
-          EXPR_NUMBER@16..17
-            FLOAT@16..17 "5"
-      COMMA@17..18 ","
-      WHITESPACE@18..19 " "
-      ARG@19..25
-        NAME@19..20
-          IDENT@19..20 "k"
-        WHITESPACE@20..21 " "
-        ASSIGN@21..22 "="
-        WHITESPACE@22..23 " "
-        EXPR_NUMBER@23..25
-          FLOAT@23..25 "12"
-      COMMA@25..26 ","
-      WHITESPACE@26..27 " "
-      ERROR_CUSTOM@27..28
-        ARG@27..28
-          EXPR_NUMBER@27..28
-            FLOAT@27..28 "6"
-      R_PAREN@28..29 ")"
+    SUFFIX_APPLY@1..29
+      ARGS_DESC@1..29
+        L_PAREN@1..2 "("
+        ARG@2..3
+          EXPR@2..3
+            EXPR_NUMBER@2..3
+              FLOAT@2..3 "1"
+        COMMA@3..4 ","
+        WHITESPACE@4..5 " "
+        ARG@5..6
+          EXPR@5..6
+            EXPR_NUMBER@5..6
+              FLOAT@5..6 "2"
+        COMMA@6..7 ","
+        WHITESPACE@7..8 " "
+        ARG@8..11
+          NAME@8..9
+            IDENT@8..9 "b"
+          ASSIGN@9..10 "="
+          EXPR@10..11
+            EXPR_NUMBER@10..11
+              FLOAT@10..11 "4"
+        COMMA@11..12 ","
+        WHITESPACE@12..13 " "
+        ERROR_CUSTOM@13..14
+          ARG@13..14
+            EXPR@13..14
+              EXPR_NUMBER@13..14
+                FLOAT@13..14 "3"
+        COMMA@14..15 ","
+        WHITESPACE@15..16 " "
+        ERROR_CUSTOM@16..17
+          ARG@16..17
+            EXPR@16..17
+              EXPR_NUMBER@16..17
+                FLOAT@16..17 "5"
+        COMMA@17..18 ","
+        WHITESPACE@18..19 " "
+        ARG@19..25
+          NAME@19..20
+            IDENT@19..20 "k"
+          WHITESPACE@20..21 " "
+          ASSIGN@21..22 "="
+          WHITESPACE@22..23 " "
+          EXPR@23..25
+            EXPR_NUMBER@23..25
+              FLOAT@23..25 "12"
+        COMMA@25..26 ","
+        WHITESPACE@26..27 " "
+        ERROR_CUSTOM@27..28
+          ARG@27..28
+            EXPR@27..28
+              EXPR_NUMBER@27..28
+                FLOAT@27..28 "6"
+        R_PAREN@28..29 ")"
   WHITESPACE@29..30 "\n"
 ===
 LocatedSyntaxError { error: Custom { error: "can't use positional arguments after named" }, range: 13..14 }
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_lhs.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_lhs.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_lhs.snap
@@ -3,7 +3,8 @@
 expression: "+ 2\n"
 ---
 SOURCE_FILE@0..4
-  ERROR_MISSING_TOKEN@0..0
+  EXPR@0..0
+    ERROR_MISSING_TOKEN@0..0
   ERROR_CUSTOM@0..3
     PLUS@0..1 "+"
     WHITESPACE@1..2 " "
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_operator.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_operator.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_operator.snap
@@ -3,8 +3,9 @@
 expression: "2 2\n"
 ---
 SOURCE_FILE@0..4
-  EXPR_NUMBER@0..1
-    FLOAT@0..1 "2"
+  EXPR@0..1
+    EXPR_NUMBER@0..1
+      FLOAT@0..1 "2"
   WHITESPACE@1..2 " "
   ERROR_CUSTOM@2..3
     FLOAT@2..3 "2"
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_rhs.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_rhs.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_rhs.snap
@@ -3,15 +3,16 @@
 expression: "a +\n"
 ---
 SOURCE_FILE@0..4
-  EXPR_BINARY@0..4
-    LHS_EXPR@0..1
-      EXPR_VAR@0..1
-        NAME@0..1
-          IDENT@0..1 "a"
-    WHITESPACE@1..2 " "
-    PLUS@2..3 "+"
-    WHITESPACE@3..4 "\n"
-    ERROR_MISSING_TOKEN@4..4
+  EXPR@0..4
+    EXPR_BINARY@0..4
+      EXPR@0..1
+        EXPR_VAR@0..1
+          NAME@0..1
+            IDENT@0..1 "a"
+      WHITESPACE@1..2 " "
+      PLUS@2..3 "+"
+      WHITESPACE@3..4 "\n"
+      ERROR_MISSING_TOKEN@4..4
 ===
 LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 4..4 }
 ===
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec.snap
@@ -3,37 +3,44 @@
 expression: "{a:1 for a in [1, 2, 3]}\n"
 ---
 SOURCE_FILE@0..25
-  EXPR_OBJECT@0..24
-    OBJ_BODY_COMP@0..24
-      L_BRACE@0..1 "{"
-      MEMBER_FIELD_NORMAL@1..4
-        FIELD_NAME_FIXED@1..2
-          NAME@1..2
-            IDENT@1..2 "a"
-        COLON@2..3 ":"
-        EXPR_NUMBER@3..4
-          FLOAT@3..4 "1"
-      WHITESPACE@4..5 " "
-      FOR_SPEC@5..23
-        FOR_KW@5..8 "for"
-        WHITESPACE@8..9 " "
-        NAME@9..10
-          IDENT@9..10 "a"
-        WHITESPACE@10..11 " "
-        IN_KW@11..13 "in"
-        WHITESPACE@13..14 " "
-        EXPR_ARRAY@14..23
-          L_BRACK@14..15 "["
-          EXPR_NUMBER@15..16
-            FLOAT@15..16 "1"
-          COMMA@16..17 ","
-          WHITESPACE@17..18 " "
-          EXPR_NUMBER@18..19
-            FLOAT@18..19 "2"
-          COMMA@19..20 ","
-          WHITESPACE@20..21 " "
-          EXPR_NUMBER@21..22
-            FLOAT@21..22 "3"
-          R_BRACK@22..23 "]"
-      R_BRACE@23..24 "}"
+  EXPR@0..24
+    EXPR_OBJECT@0..24
+      OBJ_BODY_COMP@0..24
+        L_BRACE@0..1 "{"
+        MEMBER_FIELD_NORMAL@1..4
+          FIELD_NAME_FIXED@1..2
+            NAME@1..2
+              IDENT@1..2 "a"
+          COLON@2..3 ":"
+          EXPR@3..4
+            EXPR_NUMBER@3..4
+              FLOAT@3..4 "1"
+        WHITESPACE@4..5 " "
+        FOR_SPEC@5..23
+          FOR_KW@5..8 "for"
+          WHITESPACE@8..9 " "
+          DESTRUCT_FULL@9..10
+            NAME@9..10
+              IDENT@9..10 "a"
+          WHITESPACE@10..11 " "
+          IN_KW@11..13 "in"
+          WHITESPACE@13..14 " "
+          EXPR@14..23
+            EXPR_ARRAY@14..23
+              L_BRACK@14..15 "["
+              EXPR@15..16
+                EXPR_NUMBER@15..16
+                  FLOAT@15..16 "1"
+              COMMA@16..17 ","
+              WHITESPACE@17..18 " "
+              EXPR@18..19
+                EXPR_NUMBER@18..19
+                  FLOAT@18..19 "2"
+              COMMA@19..20 ","
+              WHITESPACE@20..21 " "
+              EXPR@21..22
+                EXPR_NUMBER@21..22
+                  FLOAT@21..22 "3"
+              R_BRACK@22..23 "]"
+        R_BRACE@23..24 "}"
   WHITESPACE@24..25 "\n"
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_comma.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_comma.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_comma.snap
@@ -3,38 +3,45 @@
 expression: "{a:1, for a in [1, 2, 3]}\n"
 ---
 SOURCE_FILE@0..26
-  EXPR_OBJECT@0..25
-    OBJ_BODY_COMP@0..25
-      L_BRACE@0..1 "{"
-      MEMBER_FIELD_NORMAL@1..4
-        FIELD_NAME_FIXED@1..2
-          NAME@1..2
-            IDENT@1..2 "a"
-        COLON@2..3 ":"
-        EXPR_NUMBER@3..4
-          FLOAT@3..4 "1"
-      COMMA@4..5 ","
-      WHITESPACE@5..6 " "
-      FOR_SPEC@6..24
-        FOR_KW@6..9 "for"
-        WHITESPACE@9..10 " "
-        NAME@10..11
-          IDENT@10..11 "a"
-        WHITESPACE@11..12 " "
-        IN_KW@12..14 "in"
-        WHITESPACE@14..15 " "
-        EXPR_ARRAY@15..24
-          L_BRACK@15..16 "["
-          EXPR_NUMBER@16..17
-            FLOAT@16..17 "1"
-          COMMA@17..18 ","
-          WHITESPACE@18..19 " "
-          EXPR_NUMBER@19..20
-            FLOAT@19..20 "2"
-          COMMA@20..21 ","
-          WHITESPACE@21..22 " "
-          EXPR_NUMBER@22..23
-            FLOAT@22..23 "3"
-          R_BRACK@23..24 "]"
-      R_BRACE@24..25 "}"
+  EXPR@0..25
+    EXPR_OBJECT@0..25
+      OBJ_BODY_COMP@0..25
+        L_BRACE@0..1 "{"
+        MEMBER_FIELD_NORMAL@1..4
+          FIELD_NAME_FIXED@1..2
+            NAME@1..2
+              IDENT@1..2 "a"
+          COLON@2..3 ":"
+          EXPR@3..4
+            EXPR_NUMBER@3..4
+              FLOAT@3..4 "1"
+        COMMA@4..5 ","
+        WHITESPACE@5..6 " "
+        FOR_SPEC@6..24
+          FOR_KW@6..9 "for"
+          WHITESPACE@9..10 " "
+          DESTRUCT_FULL@10..11
+            NAME@10..11
+              IDENT@10..11 "a"
+          WHITESPACE@11..12 " "
+          IN_KW@12..14 "in"
+          WHITESPACE@14..15 " "
+          EXPR@15..24
+            EXPR_ARRAY@15..24
+              L_BRACK@15..16 "["
+              EXPR@16..17
+                EXPR_NUMBER@16..17
+                  FLOAT@16..17 "1"
+              COMMA@17..18 ","
+              WHITESPACE@18..19 " "
+              EXPR@19..20
+                EXPR_NUMBER@19..20
+                  FLOAT@19..20 "2"
+              COMMA@20..21 ","
+              WHITESPACE@21..22 " "
+              EXPR@22..23
+                EXPR_NUMBER@22..23
+                  FLOAT@22..23 "3"
+              R_BRACK@23..24 "]"
+        R_BRACE@24..25 "}"
   WHITESPACE@25..26 "\n"
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_asserts.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_asserts.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_asserts.snap
@@ -3,48 +3,55 @@
 expression: "{assert 1, a: 1 for a in [1,2,3]}\n"
 ---
 SOURCE_FILE@0..34
-  EXPR_OBJECT@0..33
-    OBJ_BODY_COMP@0..33
-      L_BRACE@0..1 "{"
-      ERROR_CUSTOM@1..9
-        MEMBER_ASSERT_STMT@1..9
-          ASSERTION@1..9
-            ASSERT_KW@1..7 "assert"
-            WHITESPACE@7..8 " "
-            LHS_EXPR@8..9
-              EXPR_NUMBER@8..9
-                FLOAT@8..9 "1"
-      COMMA@9..10 ","
-      WHITESPACE@10..11 " "
-      MEMBER_FIELD_NORMAL@11..15
-        FIELD_NAME_FIXED@11..12
-          NAME@11..12
-            IDENT@11..12 "a"
-        COLON@12..13 ":"
-        WHITESPACE@13..14 " "
-        EXPR_NUMBER@14..15
-          FLOAT@14..15 "1"
-      WHITESPACE@15..16 " "
-      FOR_SPEC@16..32
-        FOR_KW@16..19 "for"
-        WHITESPACE@19..20 " "
-        NAME@20..21
-          IDENT@20..21 "a"
-        WHITESPACE@21..22 " "
-        IN_KW@22..24 "in"
-        WHITESPACE@24..25 " "
-        EXPR_ARRAY@25..32
-          L_BRACK@25..26 "["
-          EXPR_NUMBER@26..27
-            FLOAT@26..27 "1"
-          COMMA@27..28 ","
-          EXPR_NUMBER@28..29
-            FLOAT@28..29 "2"
-          COMMA@29..30 ","
-          EXPR_NUMBER@30..31
-            FLOAT@30..31 "3"
-          R_BRACK@31..32 "]"
-      R_BRACE@32..33 "}"
+  EXPR@0..33
+    EXPR_OBJECT@0..33
+      OBJ_BODY_COMP@0..33
+        L_BRACE@0..1 "{"
+        ERROR_CUSTOM@1..9
+          MEMBER_ASSERT_STMT@1..9
+            ASSERTION@1..9
+              ASSERT_KW@1..7 "assert"
+              WHITESPACE@7..8 " "
+              EXPR@8..9
+                EXPR_NUMBER@8..9
+                  FLOAT@8..9 "1"
+        COMMA@9..10 ","
+        WHITESPACE@10..11 " "
+        MEMBER_FIELD_NORMAL@11..15
+          FIELD_NAME_FIXED@11..12
+            NAME@11..12
+              IDENT@11..12 "a"
+          COLON@12..13 ":"
+          WHITESPACE@13..14 " "
+          EXPR@14..15
+            EXPR_NUMBER@14..15
+              FLOAT@14..15 "1"
+        WHITESPACE@15..16 " "
+        FOR_SPEC@16..32
+          FOR_KW@16..19 "for"
+          WHITESPACE@19..20 " "
+          DESTRUCT_FULL@20..21
+            NAME@20..21
+              IDENT@20..21 "a"
+          WHITESPACE@21..22 " "
+          IN_KW@22..24 "in"
+          WHITESPACE@24..25 " "
+          EXPR@25..32
+            EXPR_ARRAY@25..32
+              L_BRACK@25..26 "["
+              EXPR@26..27
+                EXPR_NUMBER@26..27
+                  FLOAT@26..27 "1"
+              COMMA@27..28 ","
+              EXPR@28..29
+                EXPR_NUMBER@28..29
+                  FLOAT@28..29 "2"
+              COMMA@29..30 ","
+              EXPR@30..31
+                EXPR_NUMBER@30..31
+                  FLOAT@30..31 "3"
+              R_BRACK@31..32 "]"
+        R_BRACE@32..33 "}"
   WHITESPACE@33..34 "\n"
 ===
 LocatedSyntaxError { error: Custom { error: "asserts can't be used in object comprehensions" }, range: 1..9 }
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_multiple_elems.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_multiple_elems.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_multiple_elems.snap
@@ -3,56 +3,64 @@
 expression: "{a:1 for a in [1, 2, 3], b:1}\n"
 ---
 SOURCE_FILE@0..30
-  EXPR_OBJECT@0..29
-    OBJ_BODY_MEMBER_LIST@0..29
-      L_BRACE@0..1 "{"
-      MEMBER_FIELD_NORMAL@1..4
-        FIELD_NAME_FIXED@1..2
-          NAME@1..2
-            IDENT@1..2 "a"
-        COLON@2..3 ":"
-        EXPR_NUMBER@3..4
-          FLOAT@3..4 "1"
-      WHITESPACE@4..5 " "
-      ERROR_CUSTOM@5..23
-        FOR_SPEC@5..23
-          FOR_KW@5..8 "for"
-          WHITESPACE@8..9 " "
-          NAME@9..10
-            IDENT@9..10 "a"
-          WHITESPACE@10..11 " "
-          IN_KW@11..13 "in"
-          WHITESPACE@13..14 " "
-          EXPR_ARRAY@14..23
-            L_BRACK@14..15 "["
-            EXPR_NUMBER@15..16
-              FLOAT@15..16 "1"
-            COMMA@16..17 ","
-            WHITESPACE@17..18 " "
-            EXPR_NUMBER@18..19
-              FLOAT@18..19 "2"
-            COMMA@19..20 ","
-            WHITESPACE@20..21 " "
-            EXPR_NUMBER@21..22
-              FLOAT@21..22 "3"
-            R_BRACK@22..23 "]"
-      COMMA@23..24 ","
-      WHITESPACE@24..25 " "
-      MEMBER_FIELD_NORMAL@25..28
-        FIELD_NAME_FIXED@25..26
-          NAME@25..26
-            IDENT@25..26 "b"
-        COLON@26..27 ":"
-        EXPR_NUMBER@27..28
-          FLOAT@27..28 "1"
-      R_BRACE@28..29 "}"
+  EXPR@0..29
+    EXPR_OBJECT@0..29
+      OBJ_BODY_MEMBER_LIST@0..29
+        L_BRACE@0..1 "{"
+        MEMBER_FIELD_NORMAL@1..4
+          FIELD_NAME_FIXED@1..2
+            NAME@1..2
+              IDENT@1..2 "a"
+          COLON@2..3 ":"
+          EXPR@3..4
+            EXPR_NUMBER@3..4
+              FLOAT@3..4 "1"
+        WHITESPACE@4..5 " "
+        ERROR_CUSTOM@5..23
+          FOR_SPEC@5..23
+            FOR_KW@5..8 "for"
+            WHITESPACE@8..9 " "
+            DESTRUCT_FULL@9..10
+              NAME@9..10
+                IDENT@9..10 "a"
+            WHITESPACE@10..11 " "
+            IN_KW@11..13 "in"
+            WHITESPACE@13..14 " "
+            EXPR@14..23
+              EXPR_ARRAY@14..23
+                L_BRACK@14..15 "["
+                EXPR@15..16
+                  EXPR_NUMBER@15..16
+                    FLOAT@15..16 "1"
+                COMMA@16..17 ","
+                WHITESPACE@17..18 " "
+                EXPR@18..19
+                  EXPR_NUMBER@18..19
+                    FLOAT@18..19 "2"
+                COMMA@19..20 ","
+                WHITESPACE@20..21 " "
+                EXPR@21..22
+                  EXPR_NUMBER@21..22
+                    FLOAT@21..22 "3"
+                R_BRACK@22..23 "]"
+        COMMA@23..24 ","
+        WHITESPACE@24..25 " "
+        MEMBER_FIELD_NORMAL@25..28
+          FIELD_NAME_FIXED@25..26
+            NAME@25..26
+              IDENT@25..26 "b"
+          COLON@26..27 ":"
+          EXPR@27..28
+            EXPR_NUMBER@27..28
+              FLOAT@27..28 "1"
+        R_BRACE@28..29 "}"
   WHITESPACE@29..30 "\n"
 ===
-LocatedSyntaxError { error: Custom { error: "compspec may only be used if there is only one array element" }, range: 5..23 }
+LocatedSyntaxError { error: Custom { error: "compspec may only be used if there is only one object element" }, range: 5..23 }
 ===
   x syntax error
    ,----
  1 | {a:1 for a in [1, 2, 3], b:1}
    :      ^^^^^^^^^|^^^^^^^^
-   :               `-- compspec may only be used if there is only one array element
+   :               `-- compspec may only be used if there is only one object element
    `----
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_multiple_elems_w.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_multiple_elems_w.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_multiple_elems_w.snap
@@ -3,66 +3,75 @@
 expression: "{a:1, b:1, for a in [1, 2, 3], c:1}\n"
 ---
 SOURCE_FILE@0..36
-  EXPR_OBJECT@0..35
-    OBJ_BODY_MEMBER_LIST@0..35
-      L_BRACE@0..1 "{"
-      MEMBER_FIELD_NORMAL@1..4
-        FIELD_NAME_FIXED@1..2
-          NAME@1..2
-            IDENT@1..2 "a"
-        COLON@2..3 ":"
-        EXPR_NUMBER@3..4
-          FLOAT@3..4 "1"
-      COMMA@4..5 ","
-      WHITESPACE@5..6 " "
-      MEMBER_FIELD_NORMAL@6..9
-        FIELD_NAME_FIXED@6..7
-          NAME@6..7
-            IDENT@6..7 "b"
-        COLON@7..8 ":"
-        EXPR_NUMBER@8..9
-          FLOAT@8..9 "1"
-      COMMA@9..10 ","
-      WHITESPACE@10..11 " "
-      ERROR_CUSTOM@11..29
-        FOR_SPEC@11..29
-          FOR_KW@11..14 "for"
-          WHITESPACE@14..15 " "
-          NAME@15..16
-            IDENT@15..16 "a"
-          WHITESPACE@16..17 " "
-          IN_KW@17..19 "in"
-          WHITESPACE@19..20 " "
-          EXPR_ARRAY@20..29
-            L_BRACK@20..21 "["
-            EXPR_NUMBER@21..22
-              FLOAT@21..22 "1"
-            COMMA@22..23 ","
-            WHITESPACE@23..24 " "
-            EXPR_NUMBER@24..25
-              FLOAT@24..25 "2"
-            COMMA@25..26 ","
-            WHITESPACE@26..27 " "
-            EXPR_NUMBER@27..28
-              FLOAT@27..28 "3"
-            R_BRACK@28..29 "]"
-      COMMA@29..30 ","
-      WHITESPACE@30..31 " "
-      MEMBER_FIELD_NORMAL@31..34
-        FIELD_NAME_FIXED@31..32
-          NAME@31..32
-            IDENT@31..32 "c"
-        COLON@32..33 ":"
-        EXPR_NUMBER@33..34
-          FLOAT@33..34 "1"
-      R_BRACE@34..35 "}"
+  EXPR@0..35
+    EXPR_OBJECT@0..35
+      OBJ_BODY_MEMBER_LIST@0..35
+        L_BRACE@0..1 "{"
+        MEMBER_FIELD_NORMAL@1..4
+          FIELD_NAME_FIXED@1..2
+            NAME@1..2
+              IDENT@1..2 "a"
+          COLON@2..3 ":"
+          EXPR@3..4
+            EXPR_NUMBER@3..4
+              FLOAT@3..4 "1"
+        COMMA@4..5 ","
+        WHITESPACE@5..6 " "
+        MEMBER_FIELD_NORMAL@6..9
+          FIELD_NAME_FIXED@6..7
+            NAME@6..7
+              IDENT@6..7 "b"
+          COLON@7..8 ":"
+          EXPR@8..9
+            EXPR_NUMBER@8..9
+              FLOAT@8..9 "1"
+        COMMA@9..10 ","
+        WHITESPACE@10..11 " "
+        ERROR_CUSTOM@11..29
+          FOR_SPEC@11..29
+            FOR_KW@11..14 "for"
+            WHITESPACE@14..15 " "
+            DESTRUCT_FULL@15..16
+              NAME@15..16
+                IDENT@15..16 "a"
+            WHITESPACE@16..17 " "
+            IN_KW@17..19 "in"
+            WHITESPACE@19..20 " "
+            EXPR@20..29
+              EXPR_ARRAY@20..29
+                L_BRACK@20..21 "["
+                EXPR@21..22
+                  EXPR_NUMBER@21..22
+                    FLOAT@21..22 "1"
+                COMMA@22..23 ","
+                WHITESPACE@23..24 " "
+                EXPR@24..25
+                  EXPR_NUMBER@24..25
+                    FLOAT@24..25 "2"
+                COMMA@25..26 ","
+                WHITESPACE@26..27 " "
+                EXPR@27..28
+                  EXPR_NUMBER@27..28
+                    FLOAT@27..28 "3"
+                R_BRACK@28..29 "]"
+        COMMA@29..30 ","
+        WHITESPACE@30..31 " "
+        MEMBER_FIELD_NORMAL@31..34
+          FIELD_NAME_FIXED@31..32
+            NAME@31..32
+              IDENT@31..32 "c"
+          COLON@32..33 ":"
+          EXPR@33..34
+            EXPR_NUMBER@33..34
+              FLOAT@33..34 "1"
+        R_BRACE@34..35 "}"
   WHITESPACE@35..36 "\n"
 ===
-LocatedSyntaxError { error: Custom { error: "compspec may only be used if there is only one array element" }, range: 11..29 }
+LocatedSyntaxError { error: Custom { error: "compspec may only be used if there is only one object element" }, range: 11..29 }
 ===
   x syntax error
    ,----
  1 | {a:1, b:1, for a in [1, 2, 3], c:1}
    :            ^^^^^^^^^|^^^^^^^^
-   :                     `-- compspec may only be used if there is only one array element
+   :                     `-- compspec may only be used if there is only one object element
    `----
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_no_elems.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_no_elems.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_no_elems.snap
@@ -3,32 +3,38 @@
 expression: "{for a in [1, 2, 3]}\n"
 ---
 SOURCE_FILE@0..21
-  EXPR_OBJECT@0..20
-    OBJ_BODY_COMP@0..20
-      L_BRACE@0..1 "{"
-      ERROR_MISSING_TOKEN@1..1
-      FOR_SPEC@1..19
-        FOR_KW@1..4 "for"
-        WHITESPACE@4..5 " "
-        NAME@5..6
-          IDENT@5..6 "a"
-        WHITESPACE@6..7 " "
-        IN_KW@7..9 "in"
-        WHITESPACE@9..10 " "
-        EXPR_ARRAY@10..19
-          L_BRACK@10..11 "["
-          EXPR_NUMBER@11..12
-            FLOAT@11..12 "1"
-          COMMA@12..13 ","
-          WHITESPACE@13..14 " "
-          EXPR_NUMBER@14..15
-            FLOAT@14..15 "2"
-          COMMA@15..16 ","
-          WHITESPACE@16..17 " "
-          EXPR_NUMBER@17..18
-            FLOAT@17..18 "3"
-          R_BRACK@18..19 "]"
-      R_BRACE@19..20 "}"
+  EXPR@0..20
+    EXPR_OBJECT@0..20
+      OBJ_BODY_COMP@0..20
+        L_BRACE@0..1 "{"
+        ERROR_MISSING_TOKEN@1..1
+        FOR_SPEC@1..19
+          FOR_KW@1..4 "for"
+          WHITESPACE@4..5 " "
+          DESTRUCT_FULL@5..6
+            NAME@5..6
+              IDENT@5..6 "a"
+          WHITESPACE@6..7 " "
+          IN_KW@7..9 "in"
+          WHITESPACE@9..10 " "
+          EXPR@10..19
+            EXPR_ARRAY@10..19
+              L_BRACK@10..11 "["
+              EXPR@11..12
+                EXPR_NUMBER@11..12
+                  FLOAT@11..12 "1"
+              COMMA@12..13 ","
+              WHITESPACE@13..14 " "
+              EXPR@14..15
+                EXPR_NUMBER@14..15
+                  FLOAT@14..15 "2"
+              COMMA@15..16 ","
+              WHITESPACE@16..17 " "
+              EXPR@17..18
+                EXPR_NUMBER@17..18
+                  FLOAT@17..18 "3"
+              R_BRACK@18..19 "]"
+        R_BRACE@19..20 "}"
   WHITESPACE@20..21 "\n"
 ===
 LocatedSyntaxError { error: Missing { expected: Named("field definition") }, range: 1..1 }
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_method.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_method.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_method.snap
@@ -3,47 +3,50 @@
 expression: "{\n\ta(x): x,\n\ta: function(x) x,\n}\n"
 ---
 SOURCE_FILE@0..33
-  EXPR_OBJECT@0..32
-    OBJ_BODY_MEMBER_LIST@0..32
-      L_BRACE@0..1 "{"
-      WHITESPACE@1..3 "\n\t"
-      MEMBER_FIELD_METHOD@3..10
-        FIELD_NAME_FIXED@3..4
-          NAME@3..4
-            IDENT@3..4 "a"
-        PARAMS_DESC@4..7
-          L_PAREN@4..5 "("
-          PARAM@5..6
-            DESTRUCT_FULL@5..6
-              NAME@5..6
-                IDENT@5..6 "x"
-          R_PAREN@6..7 ")"
-        COLON@7..8 ":"
-        WHITESPACE@8..9 " "
-        EXPR_VAR@9..10
-          NAME@9..10
-            IDENT@9..10 "x"
-      COMMA@10..11 ","
-      WHITESPACE@11..13 "\n\t"
-      MEMBER_FIELD_METHOD@13..29
-        FIELD_NAME_FIXED@13..14
-          NAME@13..14
-            IDENT@13..14 "a"
-        COLON@14..15 ":"
-        WHITESPACE@15..16 " "
-        FUNCTION_KW@16..24 "function"
-        PARAMS_DESC@24..27
-          L_PAREN@24..25 "("
-          PARAM@25..26
-            DESTRUCT_FULL@25..26
-              NAME@25..26
-                IDENT@25..26 "x"
-          R_PAREN@26..27 ")"
-        WHITESPACE@27..28 " "
-        EXPR_VAR@28..29
-          NAME@28..29
-            IDENT@28..29 "x"
-      COMMA@29..30 ","
-      WHITESPACE@30..31 "\n"
-      R_BRACE@31..32 "}"
+  EXPR@0..32
+    EXPR_OBJECT@0..32
+      OBJ_BODY_MEMBER_LIST@0..32
+        L_BRACE@0..1 "{"
+        WHITESPACE@1..3 "\n\t"
+        MEMBER_FIELD_METHOD@3..10
+          FIELD_NAME_FIXED@3..4
+            NAME@3..4
+              IDENT@3..4 "a"
+          PARAMS_DESC@4..7
+            L_PAREN@4..5 "("
+            PARAM@5..6
+              DESTRUCT_FULL@5..6
+                NAME@5..6
+                  IDENT@5..6 "x"
+            R_PAREN@6..7 ")"
+          COLON@7..8 ":"
+          WHITESPACE@8..9 " "
+          EXPR@9..10
+            EXPR_VAR@9..10
+              NAME@9..10
+                IDENT@9..10 "x"
+        COMMA@10..11 ","
+        WHITESPACE@11..13 "\n\t"
+        MEMBER_FIELD_METHOD@13..29
+          FIELD_NAME_FIXED@13..14
+            NAME@13..14
+              IDENT@13..14 "a"
+          COLON@14..15 ":"
+          WHITESPACE@15..16 " "
+          FUNCTION_KW@16..24 "function"
+          PARAMS_DESC@24..27
+            L_PAREN@24..25 "("
+            PARAM@25..26
+              DESTRUCT_FULL@25..26
+                NAME@25..26
+                  IDENT@25..26 "x"
+            R_PAREN@26..27 ")"
+          WHITESPACE@27..28 " "
+          EXPR@28..29
+            EXPR_VAR@28..29
+              NAME@28..29
+                IDENT@28..29 "x"
+        COMMA@29..30 ","
+        WHITESPACE@30..31 "\n"
+        R_BRACE@31..32 "}"
   WHITESPACE@32..33 "\n"
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__plain_call.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__plain_call.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__plain_call.snap
@@ -3,51 +3,56 @@
 expression: "std.substr(a, 0, std.length(b)) == b\n"
 ---
 SOURCE_FILE@0..37
-  EXPR_BINARY@0..36
-    LHS_EXPR@0..31
-      EXPR_APPLY@0..31
-        EXPR_INDEX@0..10
-          EXPR_VAR@0..3
-            NAME@0..3
-              IDENT@0..3 "std"
-          DOT@3..4 "."
-          NAME@4..10
-            IDENT@4..10 "substr"
+  EXPR@0..36
+    EXPR_BINARY@0..36
+      EXPR@0..3
+        EXPR_VAR@0..3
+          NAME@0..3
+            IDENT@0..3 "std"
+      SUFFIX_INDEX@3..10
+        DOT@3..4 "."
+        NAME@4..10
+          IDENT@4..10 "substr"
+      SUFFIX_APPLY@10..31
         ARGS_DESC@10..31
           L_PAREN@10..11 "("
           ARG@11..12
-            EXPR_VAR@11..12
-              NAME@11..12
-                IDENT@11..12 "a"
+            EXPR@11..12
+              EXPR_VAR@11..12
+                NAME@11..12
+                  IDENT@11..12 "a"
           COMMA@12..13 ","
           WHITESPACE@13..14 " "
           ARG@14..15
-            EXPR_NUMBER@14..15
-              FLOAT@14..15 "0"
+            EXPR@14..15
+              EXPR_NUMBER@14..15
+                FLOAT@14..15 "0"
           COMMA@15..16 ","
           WHITESPACE@16..17 " "
           ARG@17..30
-            EXPR_APPLY@17..30
-              EXPR_INDEX@17..27
-                EXPR_VAR@17..20
-                  NAME@17..20
-                    IDENT@17..20 "std"
+            EXPR@17..30
+              EXPR_VAR@17..20
+                NAME@17..20
+                  IDENT@17..20 "std"
+              SUFFIX_INDEX@20..27
                 DOT@20..21 "."
                 NAME@21..27
                   IDENT@21..27 "length"
-              ARGS_DESC@27..30
-                L_PAREN@27..28 "("
-                ARG@28..29
-                  EXPR_VAR@28..29
-                    NAME@28..29
-                      IDENT@28..29 "b"
-                R_PAREN@29..30 ")"
+              SUFFIX_APPLY@27..30
+                ARGS_DESC@27..30
+                  L_PAREN@27..28 "("
+                  ARG@28..29
+                    EXPR@28..29
+                      EXPR_VAR@28..29
+                        NAME@28..29
+                          IDENT@28..29 "b"
+                  R_PAREN@29..30 ")"
           R_PAREN@30..31 ")"
-    WHITESPACE@31..32 " "
-    EQ@32..34 "=="
-    WHITESPACE@34..35 " "
-    EXPR_VAR@35..36
-      NAME@35..36
-        IDENT@35..36 "b"
+      WHITESPACE@31..32 " "
+      EQ@32..34 "=="
+      WHITESPACE@34..35 " "
+      EXPR@35..36
+        EXPR_VAR@35..36
+          NAME@35..36
+            IDENT@35..36 "b"
   WHITESPACE@36..37 "\n"
-
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__stdlib.snapdiffbeforeafterboth
1---1---
2source: crates/jrsonnet-rowan-parser/src/tests.rs2source: crates/jrsonnet-rowan-parser/src/tests.rs
3expression: "{\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 '<': '&lt;',\n '>': '&gt;',\n '&': '&amp;',\n '\"': '&quot;',\n \"'\": '&apos;',\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], '</', tag, '>']);\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"3expression: "{\n local std = self,\n local id = std.id,\n\n thisFile:: error 'std.thisFile is deprecated, to enable its support in jrsonnet - recompile it with \"legacy-this-file\" support.\\nThis will slow down stdlib caching a bit, though',\n\n lstripChars(str, chars)::\n if std.length(str) > 0 && std.member(chars, str[0]) then\n std.lstripChars(str[1:], chars)\n else\n str,\n\n rstripChars(str, chars)::\n local len = std.length(str);\n if len > 0 && std.member(chars, str[len - 1]) then\n std.rstripChars(str[:len - 1], chars)\n else\n str,\n\n stripChars(str, chars)::\n std.lstripChars(std.rstripChars(str, chars), chars),\n\n splitLimitR(str, c, maxsplits)::\n if maxsplits == -1 then\n std.splitLimit(str, c, -1)\n else\n local revStr(str) = std.join('', std.reverse(std.stringChars(str)));\n std.map(function(e) revStr(e), std.reverse(std.splitLimit(revStr(str), revStr(c), maxsplits))),\n\n split(str, c):: std.splitLimit(str, c, -1),\n\n mapWithIndex(func, arr)::\n if !std.isFunction(func) then\n error ('std.mapWithIndex first param must be function, got ' + std.type(func))\n else if !std.isArray(arr) && !std.isString(arr) then\n error ('std.mapWithIndex second param must be array, got ' + std.type(arr))\n else\n std.makeArray(std.length(arr), function(i) func(i, arr[i])),\n\n mapWithKey(func, obj)::\n if !std.isFunction(func) then\n error ('std.mapWithKey first param must be function, got ' + std.type(func))\n else if !std.isObject(obj) then\n error ('std.mapWithKey second param must be object, got ' + std.type(obj))\n else\n { [k]: func(k, obj[k]) for k in std.objectFields(obj) },\n\n lines(arr)::\n std.join('\\n', arr + ['']),\n\n deepJoin(arr)::\n if std.isString(arr) then\n arr\n else if std.isArray(arr) then\n std.join('', [std.deepJoin(x) for x in arr])\n else\n error 'Expected string or array, got %s' % std.type(arr),\n\n assertEqual(a, b)::\n if a == b then\n true\n else\n error 'Assertion failed. ' + a + ' != ' + b,\n\n clamp(x, minVal, maxVal)::\n if x < minVal then minVal\n else if x > maxVal then maxVal\n else x,\n\n manifestIni(ini)::\n local body_lines(body) =\n std.join([], [\n local value_or_values = body[k];\n if std.isArray(value_or_values) then\n ['%s = %s' % [k, value] for value in value_or_values]\n else\n ['%s = %s' % [k, value_or_values]]\n\n for k in std.objectFields(body)\n ]);\n\n local section_lines(sname, sbody) = ['[%s]' % [sname]] + body_lines(sbody),\n main_body = if std.objectHas(ini, 'main') then body_lines(ini.main) else [],\n all_sections = [\n section_lines(k, ini.sections[k])\n for k in std.objectFields(ini.sections)\n ];\n std.join('\\n', main_body + std.flattenArrays(all_sections) + ['']),\n\n manifestToml(value):: std.manifestTomlEx(value, ' '),\n\n escapeStringPython(str)::\n std.escapeStringJson(str),\n\n escapeStringBash(str_)::\n local str = std.toString(str_);\n local trans(ch) =\n if ch == \"'\" then\n \"'\\\"'\\\"'\"\n else\n ch;\n \"'%s'\" % std.join('', [trans(ch) for ch in std.stringChars(str)]),\n\n escapeStringDollars(str_)::\n local str = std.toString(str_);\n local trans(ch) =\n if ch == '$' then\n '$$'\n else\n ch;\n std.foldl(function(a, b) a + trans(b), std.stringChars(str), ''),\n\n local xml_escapes = {\n '<': '&lt;',\n '>': '&gt;',\n '&': '&amp;',\n '\"': '&quot;',\n \"'\": '&apos;',\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], '</', tag, '>']);\n\n aux(value),\n\n mergePatch(target, patch)::\n if std.isObject(patch) then\n local target_object =\n if std.isObject(target) then target else {};\n\n local target_fields =\n if std.isObject(target_object) then std.objectFields(target_object) else [];\n\n local null_fields = [k for k in std.objectFields(patch) if patch[k] == null];\n local both_fields = std.setUnion(target_fields, std.objectFields(patch));\n\n {\n [k]:\n if !std.objectHas(patch, k) then\n target_object[k]\n else if !std.objectHas(target_object, k) then\n std.mergePatch(null, patch[k]) tailstrict\n else\n std.mergePatch(target_object[k], patch[k]) tailstrict\n for k in std.setDiff(both_fields, null_fields)\n }\n else\n patch,\n\n get(o, f, default=null, inc_hidden=true)::\n if std.objectHasEx(o, f, inc_hidden) then o[f] else default,\n\n resolvePath(f, r)::\n local arr = std.split(f, '/');\n std.join('/', std.makeArray(std.length(arr) - 1, function(i) arr[i]) + [r]),\n\n prune(a)::\n local isContent(b) =\n if b == null then\n false\n else if std.isArray(b) then\n std.length(b) > 0\n else if std.isObject(b) then\n std.length(b) > 0\n else\n true;\n if std.isArray(a) then\n [std.prune(x) for x in a if isContent($.prune(x))]\n else if std.isObject(a) then {\n [x]: $.prune(a[x])\n for x in std.objectFields(a)\n if isContent(std.prune(a[x]))\n } else\n a,\n\n find(value, arr)::\n if !std.isArray(arr) then\n error 'find second parameter should be an array, got ' + std.type(arr)\n else\n std.filter(function(i) arr[i] == value, std.range(0, std.length(arr) - 1)),\n\n // Compat\n __compare_array(arr1, arr2)::\n assert std.isArray(arr1) && std.isArray(arr2);\n std.__compare(arr1, arr2),\n __array_less(arr1, arr2):: std.__compare_array(arr1, arr2) == -1,\n __array_greater(arr1, arr2):: std.__compare_array(arr1, arr2) == 1,\n __array_less_or_equal(arr1, arr2):: std.__compare_array(arr1, arr2) <= 0,\n __array_greater_or_equal(arr1, arr2):: std.__compare_array(arr1, arr2) >= 0,\n}\n"
4---4---
5SOURCE_FILE@0..98605SOURCE_FILE@0..7835
6 EXPR_OBJECT@0..98596 EXPR@0..7834
7 OBJ_BODY_MEMBER_LIST@0..98597 EXPR_OBJECT@0..7834
8 L_BRACE@0..1 "{"8 OBJ_BODY_MEMBER_LIST@0..7834
9 WHITESPACE@1..4 "\n "9 L_BRACE@0..1 "{"
10 MEMBER_BIND_STMT@4..2010 WHITESPACE@1..4 "\n "
11 OBJ_LOCAL@4..2011 MEMBER_BIND_STMT@4..20
12 LOCAL_KW@4..9 "local"12 OBJ_LOCAL@4..20
13 WHITESPACE@9..10 " "13 LOCAL_KW@4..9 "local"
14 BIND_DESTRUCT@10..2014 WHITESPACE@9..10 " "
15 DESTRUCT_FULL@10..1315 BIND_DESTRUCT@10..20
16 NAME@10..1316 DESTRUCT_FULL@10..13
17 IDENT@10..13 "std"17 NAME@10..13
18 WHITESPACE@13..14 " "18 IDENT@10..13 "std"
19 ASSIGN@14..15 "="19 WHITESPACE@13..14 " "
20 WHITESPACE@15..16 " "20 ASSIGN@14..15 "="
21 EXPR_LITERAL@16..2021 WHITESPACE@15..16 " "
22 SELF_KW@16..20 "self"22 EXPR@16..20
23 COMMA@20..21 ","23 EXPR_LITERAL@16..20
24 WHITESPACE@21..24 "\n "24 SELF_KW@16..20 "self"
25 MEMBER_BIND_STMT@24..4125 COMMA@20..21 ","
26 OBJ_LOCAL@24..4126 WHITESPACE@21..24 "\n "
27 LOCAL_KW@24..29 "local"27 MEMBER_BIND_STMT@24..41
28 WHITESPACE@29..30 " "28 OBJ_LOCAL@24..41
29 BIND_DESTRUCT@30..4129 LOCAL_KW@24..29 "local"
30 DESTRUCT_FULL@30..3230 WHITESPACE@29..30 " "
31 NAME@30..3231 BIND_DESTRUCT@30..41
32 IDENT@30..32 "id"32 DESTRUCT_FULL@30..32
33 WHITESPACE@32..33 " "33 NAME@30..32
34 ASSIGN@33..34 "="34 IDENT@30..32 "id"
35 WHITESPACE@34..35 " "35 WHITESPACE@32..33 " "
36 EXPR_INDEX@35..4136 ASSIGN@33..34 "="
37 EXPR_VAR@35..3837 WHITESPACE@34..35 " "
38 NAME@35..3838 EXPR@35..41
39 IDENT@35..38 "std"39 EXPR_VAR@35..38
40 DOT@38..39 "."40 NAME@35..38
41 NAME@39..4141 IDENT@35..38 "std"
42 IDENT@39..41 "id"42 SUFFIX_INDEX@38..41
43 COMMA@41..42 ","43 DOT@38..39 "."
44 WHITESPACE@42..46 "\n\n "44 NAME@39..41
45 MEMBER_FIELD_NORMAL@46..22445 IDENT@39..41 "id"
46 FIELD_NAME_FIXED@46..5446 COMMA@41..42 ","
47 NAME@46..5447 WHITESPACE@42..46 "\n\n "
48 IDENT@46..54 "thisFile"48 MEMBER_FIELD_NORMAL@46..224
49 COLONCOLON@54..56 "::"49 FIELD_NAME_FIXED@46..54
50 WHITESPACE@56..57 " "50 NAME@46..54
51 EXPR_ERROR@57..22451 IDENT@46..54 "thisFile"
52 ERROR_KW@57..62 "error"52 COLONCOLON@54..56 "::"
53 WHITESPACE@62..63 " "53 WHITESPACE@56..57 " "
54 EXPR_STRING@63..22454 EXPR@57..224
55 STRING_SINGLE@63..224 "'std.thisFile is depr ..."55 EXPR_ERROR@57..224
56 COMMA@224..225 ","56 ERROR_KW@57..62 "error"
57 WHITESPACE@225..229 "\n\n "57 WHITESPACE@62..63 " "
58 MEMBER_FIELD_METHOD@229..24958 EXPR@63..224
59 FIELD_NAME_FIXED@229..23759 EXPR_STRING@63..224
60 NAME@229..23760 STRING_SINGLE@63..224 "'std.thisFile is depr ..."
61 IDENT@229..237 "toString"61 COMMA@224..225 ","
62 PARAMS_DESC@237..24062 WHITESPACE@225..229 "\n\n "
63 L_PAREN@237..238 "("63 MEMBER_FIELD_METHOD@229..372
64 PARAM@238..23964 FIELD_NAME_FIXED@229..240
65 DESTRUCT_FULL@238..23965 NAME@229..240
66 NAME@238..23966 IDENT@229..240 "lstripChars"
67 IDENT@238..239 "a"67 PARAMS_DESC@240..252
68 R_PAREN@239..240 ")"68 L_PAREN@240..241 "("
69 COLONCOLON@240..242 "::"69 PARAM@241..244
70 WHITESPACE@242..243 " "70 DESTRUCT_FULL@241..244
71 EXPR_BINARY@243..24971 NAME@241..244
72 LHS_EXPR@243..24572 IDENT@241..244 "str"
73 EXPR_STRING@243..24573 COMMA@244..245 ","
74 STRING_SINGLE@243..245 "''"74 WHITESPACE@245..246 " "
75 WHITESPACE@245..246 " "75 PARAM@246..251
76 PLUS@246..247 "+"76 DESTRUCT_FULL@246..251
77 WHITESPACE@247..248 " "77 NAME@246..251
78 EXPR_VAR@248..24978 IDENT@246..251 "chars"
79 NAME@248..24979 R_PAREN@251..252 ")"
80 IDENT@248..249 "a"80 COLONCOLON@252..254 "::"
81 COMMA@249..250 ","81 WHITESPACE@254..259 "\n "
82 WHITESPACE@250..254 "\n\n "82 EXPR@259..372
83 MEMBER_FIELD_METHOD@254..39783 EXPR_IF_THEN_ELSE@259..372
84 FIELD_NAME_FIXED@254..26584 IF_KW@259..261 "if"
85 NAME@254..26585 WHITESPACE@261..262 " "
86 IDENT@254..265 "lstripChars"86 EXPR@262..310
87 PARAMS_DESC@265..27787 EXPR_BINARY@262..310
88 L_PAREN@265..266 "("88 EXPR@262..281
89 PARAM@266..26989 EXPR_BINARY@262..281
90 DESTRUCT_FULL@266..26990 EXPR@262..265
91 NAME@266..26991 EXPR_VAR@262..265
92 IDENT@266..269 "str"92 NAME@262..265
93 COMMA@269..270 ","93 IDENT@262..265 "std"
94 WHITESPACE@270..271 " "94 SUFFIX_INDEX@265..272
95 PARAM@271..27695 DOT@265..266 "."
96 DESTRUCT_FULL@271..27696 NAME@266..272
97 NAME@271..27697 IDENT@266..272 "length"
98 IDENT@271..276 "chars"98 SUFFIX_APPLY@272..277
99 R_PAREN@276..277 ")"99 ARGS_DESC@272..277
100 COLONCOLON@277..279 "::"100 L_PAREN@272..273 "("
101 WHITESPACE@279..284 "\n "101 ARG@273..276
102 EXPR_IF_THEN_ELSE@284..397102 EXPR@273..276
103 IF_KW@284..286 "if"103 EXPR_VAR@273..276
104 WHITESPACE@286..287 " "104 NAME@273..276
105 EXPR_BINARY@287..335105 IDENT@273..276 "str"
106 LHS_EXPR@287..306106 R_PAREN@276..277 ")"
107 EXPR_BINARY@287..306107 WHITESPACE@277..278 " "
108 LHS_EXPR@287..302108 GT@278..279 ">"
109 EXPR_APPLY@287..302109 WHITESPACE@279..280 " "
110 EXPR_INDEX@287..297110 EXPR@280..281
111 EXPR_VAR@287..290111 EXPR_NUMBER@280..281
112 NAME@287..290112 FLOAT@280..281 "0"
113 IDENT@287..290 "std"113 WHITESPACE@281..282 " "
114 DOT@290..291 "."114 AND@282..284 "&&"
115 NAME@291..297115 WHITESPACE@284..285 " "
116 IDENT@291..297 "length"116 EXPR@285..310
117 ARGS_DESC@297..302117 EXPR_VAR@285..288
118 L_PAREN@297..298 "("118 NAME@285..288
119 ARG@298..301119 IDENT@285..288 "std"
120 EXPR_VAR@298..301120 SUFFIX_INDEX@288..295
121 NAME@298..301121 DOT@288..289 "."
122 IDENT@298..301 "str"122 NAME@289..295
123 R_PAREN@301..302 ")"123 IDENT@289..295 "member"
124 WHITESPACE@302..303 " "124 SUFFIX_APPLY@295..310
125 GT@303..304 ">"125 ARGS_DESC@295..310
126 WHITESPACE@304..305 " "126 L_PAREN@295..296 "("
127 EXPR_NUMBER@305..306127 ARG@296..301
128 FLOAT@305..306 "0"128 EXPR@296..301
129 WHITESPACE@306..307 " "129 EXPR_VAR@296..301
130 AND@307..309 "&&"130 NAME@296..301
131 WHITESPACE@309..310 " "131 IDENT@296..301 "chars"
132 EXPR_APPLY@310..335132 COMMA@301..302 ","
133 EXPR_INDEX@310..320133 WHITESPACE@302..303 " "
134 EXPR_VAR@310..313134 ARG@303..309
135 NAME@310..313135 EXPR@303..309
136 IDENT@310..313 "std"136 EXPR_VAR@303..306
137 DOT@313..314 "."137 NAME@303..306
138 NAME@314..320138 IDENT@303..306 "str"
139 IDENT@314..320 "member"139 SUFFIX_INDEX_EXPR@306..309
140 ARGS_DESC@320..335140 L_BRACK@306..307 "["
141 L_PAREN@320..321 "("141 EXPR@307..308
142 ARG@321..326142 EXPR_NUMBER@307..308
143 EXPR_VAR@321..326143 FLOAT@307..308 "0"
144 NAME@321..326144 R_BRACK@308..309 "]"
145 IDENT@321..326 "chars"145 R_PAREN@309..310 ")"
146 COMMA@326..327 ","146 WHITESPACE@310..311 " "
147 WHITESPACE@327..328 " "147 THEN_KW@311..315 "then"
148 ARG@328..334148 WHITESPACE@315..322 "\n "
149 EXPR_INDEX_EXPR@328..334149 TRUE_EXPR@322..353
150 LHS_EXPR@328..331150 EXPR@322..353
151 EXPR_VAR@328..331151 EXPR_VAR@322..325
152 NAME@328..331152 NAME@322..325
153 IDENT@328..331 "str"153 IDENT@322..325 "std"
154 L_BRACK@331..332 "["154 SUFFIX_INDEX@325..337
155 EXPR_NUMBER@332..333155 DOT@325..326 "."
156 FLOAT@332..333 "0"156 NAME@326..337
157 R_BRACK@333..334 "]"157 IDENT@326..337 "lstripChars"
158 R_PAREN@334..335 ")"158 SUFFIX_APPLY@337..353
159 WHITESPACE@335..336 " "159 ARGS_DESC@337..353
160 THEN_KW@336..340 "then"160 L_PAREN@337..338 "("
161 WHITESPACE@340..347 "\n "161 ARG@338..345
162 TRUE_EXPR@347..378162 EXPR@338..345
163 EXPR_APPLY@347..378163 EXPR_VAR@338..341
164 EXPR_INDEX@347..362164 NAME@338..341
165 EXPR_VAR@347..350165 IDENT@338..341 "str"
166 NAME@347..350166 SUFFIX_SLICE@341..345
167 IDENT@347..350 "std"167 SLICE_DESC@341..345
168 DOT@350..351 "."168 L_BRACK@341..342 "["
169 NAME@351..362169 EXPR@342..343
170 IDENT@351..362 "lstripChars"170 EXPR_NUMBER@342..343
171 ARGS_DESC@362..378171 FLOAT@342..343 "1"
172 L_PAREN@362..363 "("172 COLON@343..344 ":"
173 ARG@363..370173 R_BRACK@344..345 "]"
174 EXPR_SLICE@363..370174 COMMA@345..346 ","
175 EXPR_VAR@363..366175 WHITESPACE@346..347 " "
176 NAME@363..366176 ARG@347..352
177 IDENT@363..366 "str"177 EXPR@347..352
178 SLICE_DESC@366..370178 EXPR_VAR@347..352
179 L_BRACK@366..367 "["179 NAME@347..352
180 EXPR_NUMBER@367..368180 IDENT@347..352 "chars"
181 FLOAT@367..368 "1"181 R_PAREN@352..353 ")"
182 COLON@368..369 ":"182 WHITESPACE@353..358 "\n "
183 R_BRACK@369..370 "]"183 ELSE_KW@358..362 "else"
184 COMMA@370..371 ","184 WHITESPACE@362..369 "\n "
185 WHITESPACE@371..372 " "185 FALSE_EXPR@369..372
186 ARG@372..377186 EXPR@369..372
187 EXPR_VAR@372..377187 EXPR_VAR@369..372
188 NAME@372..377188 NAME@369..372
189 IDENT@372..377 "chars"189 IDENT@369..372 "str"
190 R_PAREN@377..378 ")"190 COMMA@372..373 ","
191 WHITESPACE@378..383 "\n "191 WHITESPACE@373..377 "\n\n "
192 ELSE_KW@383..387 "else"192 MEMBER_FIELD_METHOD@377..553
193 WHITESPACE@387..394 "\n "193 FIELD_NAME_FIXED@377..388
194 FALSE_EXPR@394..397194 NAME@377..388
195 EXPR_VAR@394..397195 IDENT@377..388 "rstripChars"
196 NAME@394..397196 PARAMS_DESC@388..400
197 IDENT@394..397 "str"197 L_PAREN@388..389 "("
198 COMMA@397..398 ","198 PARAM@389..392
199 WHITESPACE@398..402 "\n\n "199 DESTRUCT_FULL@389..392
200 MEMBER_FIELD_METHOD@402..578200 NAME@389..392
201 FIELD_NAME_FIXED@402..413201 IDENT@389..392 "str"
202 NAME@402..413202 COMMA@392..393 ","
203 IDENT@402..413 "rstripChars"203 WHITESPACE@393..394 " "
204 PARAMS_DESC@413..425204 PARAM@394..399
205 L_PAREN@413..414 "("205 DESTRUCT_FULL@394..399
206 PARAM@414..417206 NAME@394..399
207 DESTRUCT_FULL@414..417207 IDENT@394..399 "chars"
208 NAME@414..417208 R_PAREN@399..400 ")"
209 IDENT@414..417 "str"209 COLONCOLON@400..402 "::"
210 COMMA@417..418 ","210 WHITESPACE@402..407 "\n "
211 WHITESPACE@418..419 " "211 EXPR@407..553
212 PARAM@419..424212 STMT_LOCAL@407..435
213 DESTRUCT_FULL@419..424213 LOCAL_KW@407..412 "local"
214 NAME@419..424214 WHITESPACE@412..413 " "
215 IDENT@419..424 "chars"215 BIND_DESTRUCT@413..434
216 R_PAREN@424..425 ")"216 DESTRUCT_FULL@413..416
217 COLONCOLON@425..427 "::"217 NAME@413..416
218 WHITESPACE@427..432 "\n "218 IDENT@413..416 "len"
219 STMT_LOCAL@432..460219 WHITESPACE@416..417 " "
220 LOCAL_KW@432..437 "local"220 ASSIGN@417..418 "="
221 WHITESPACE@437..438 " "221 WHITESPACE@418..419 " "
222 BIND_DESTRUCT@438..459222 EXPR@419..434
223 DESTRUCT_FULL@438..441223 EXPR_VAR@419..422
224 NAME@438..441224 NAME@419..422
225 IDENT@438..441 "len"225 IDENT@419..422 "std"
226 WHITESPACE@441..442 " "226 SUFFIX_INDEX@422..429
227 ASSIGN@442..443 "="227 DOT@422..423 "."
228 WHITESPACE@443..444 " "228 NAME@423..429
229 EXPR_APPLY@444..459229 IDENT@423..429 "length"
230 EXPR_INDEX@444..454230 SUFFIX_APPLY@429..434
231 EXPR_VAR@444..447231 ARGS_DESC@429..434
232 NAME@444..447232 L_PAREN@429..430 "("
233 IDENT@444..447 "std"233 ARG@430..433
234 DOT@447..448 "."234 EXPR@430..433
235 NAME@448..454235 EXPR_VAR@430..433
236 IDENT@448..454 "length"236 NAME@430..433
237 ARGS_DESC@454..459237 IDENT@430..433 "str"
238 L_PAREN@454..455 "("238 R_PAREN@433..434 ")"
239 ARG@455..458239 SEMI@434..435 ";"
240 EXPR_VAR@455..458240 WHITESPACE@435..440 "\n "
241 NAME@455..458241 EXPR_IF_THEN_ELSE@440..553
242 IDENT@455..458 "str"242 IF_KW@440..442 "if"
243 R_PAREN@458..459 ")"243 WHITESPACE@442..443 " "
244 SEMI@459..460 ";"244 EXPR@443..485
245 WHITESPACE@460..465 "\n "245 EXPR_BINARY@443..485
246 EXPR_IF_THEN_ELSE@465..578246 EXPR@443..450
247 IF_KW@465..467 "if"247 EXPR_BINARY@443..450
248 WHITESPACE@467..468 " "248 EXPR@443..446
249 EXPR_BINARY@468..510249 EXPR_VAR@443..446
250 LHS_EXPR@468..475250 NAME@443..446
251 EXPR_BINARY@468..475251 IDENT@443..446 "len"
252 LHS_EXPR@468..471252 WHITESPACE@446..447 " "
253 EXPR_VAR@468..471253 GT@447..448 ">"
254 NAME@468..471254 WHITESPACE@448..449 " "
255 IDENT@468..471 "len"255 EXPR@449..450
256 WHITESPACE@471..472 " "256 EXPR_NUMBER@449..450
257 GT@472..473 ">"257 FLOAT@449..450 "0"
258 WHITESPACE@473..474 " "258 WHITESPACE@450..451 " "
259 EXPR_NUMBER@474..475259 AND@451..453 "&&"
260 FLOAT@474..475 "0"260 WHITESPACE@453..454 " "
261 WHITESPACE@475..476 " "261 EXPR@454..485
262 AND@476..478 "&&"262 EXPR_VAR@454..457
263 WHITESPACE@478..479 " "263 NAME@454..457
264 EXPR_APPLY@479..510264 IDENT@454..457 "std"
265 EXPR_INDEX@479..489265 SUFFIX_INDEX@457..464
266 EXPR_VAR@479..482266 DOT@457..458 "."
267 NAME@479..482267 NAME@458..464
268 IDENT@479..482 "std"268 IDENT@458..464 "member"
269 DOT@482..483 "."269 SUFFIX_APPLY@464..485
270 NAME@483..489270 ARGS_DESC@464..485
271 IDENT@483..489 "member"271 L_PAREN@464..465 "("
272 ARGS_DESC@489..510272 ARG@465..470
273 L_PAREN@489..490 "("273 EXPR@465..470
274 ARG@490..495274 EXPR_VAR@465..470
275 EXPR_VAR@490..495275 NAME@465..470
276 NAME@490..495276 IDENT@465..470 "chars"
277 IDENT@490..495 "chars"277 COMMA@470..471 ","
278 COMMA@495..496 ","278 WHITESPACE@471..472 " "
279 WHITESPACE@496..497 " "279 ARG@472..484
280 ARG@497..509280 EXPR@472..484
281 EXPR_INDEX_EXPR@497..509281 EXPR_VAR@472..475
282 LHS_EXPR@497..500282 NAME@472..475
283 EXPR_VAR@497..500283 IDENT@472..475 "str"
284 NAME@497..500284 SUFFIX_INDEX_EXPR@475..484
285 IDENT@497..500 "str"285 L_BRACK@475..476 "["
286 L_BRACK@500..501 "["286 EXPR@476..483
287 EXPR_BINARY@501..508287 EXPR_BINARY@476..483
288 LHS_EXPR@501..504288 EXPR@476..479
289 EXPR_VAR@501..504289 EXPR_VAR@476..479
290 NAME@501..504290 NAME@476..479
291 IDENT@501..504 "len"291 IDENT@476..479 "len"
292 WHITESPACE@504..505 " "292 WHITESPACE@479..480 " "
293 MINUS@505..506 "-"293 MINUS@480..481 "-"
294 WHITESPACE@506..507 " "294 WHITESPACE@481..482 " "
295 EXPR_NUMBER@507..508295 EXPR@482..483
296 FLOAT@507..508 "1"296 EXPR_NUMBER@482..483
297 R_BRACK@508..509 "]"297 FLOAT@482..483 "1"
298 R_PAREN@509..510 ")"298 R_BRACK@483..484 "]"
299 WHITESPACE@510..511 " "299 R_PAREN@484..485 ")"
300 THEN_KW@511..515 "then"300 WHITESPACE@485..486 " "
301 WHITESPACE@515..522 "\n "301 THEN_KW@486..490 "then"
302 TRUE_EXPR@522..559302 WHITESPACE@490..497 "\n "
303 EXPR_APPLY@522..559303 TRUE_EXPR@497..534
304 EXPR_INDEX@522..537304 EXPR@497..534
305 EXPR_VAR@522..525305 EXPR_VAR@497..500
306 NAME@522..525306 NAME@497..500
307 IDENT@522..525 "std"307 IDENT@497..500 "std"
308 DOT@525..526 "."308 SUFFIX_INDEX@500..512
309 NAME@526..537309 DOT@500..501 "."
310 IDENT@526..537 "rstripChars"310 NAME@501..512
311 ARGS_DESC@537..559311 IDENT@501..512 "rstripChars"
312 L_PAREN@537..538 "("312 SUFFIX_APPLY@512..534
313 ARG@538..551313 ARGS_DESC@512..534
314 EXPR_SLICE@538..551314 L_PAREN@512..513 "("
315 EXPR_VAR@538..541315 ARG@513..526
316 NAME@538..541316 EXPR@513..526
317 IDENT@538..541 "str"317 EXPR_VAR@513..516
318 SLICE_DESC@541..551318 NAME@513..516
319 L_BRACK@541..542 "["319 IDENT@513..516 "str"
320 COLON@542..543 ":"320 SUFFIX_SLICE@516..526
321 SLICE_DESC_END@543..550321 SLICE_DESC@516..526
322 EXPR_BINARY@543..550322 L_BRACK@516..517 "["
323 LHS_EXPR@543..546323 COLON@517..518 ":"
324 EXPR_VAR@543..546324 SLICE_DESC_END@518..525
325 NAME@543..546325 EXPR@518..525
326 IDENT@543..546 "len"326 EXPR_BINARY@518..525
327 WHITESPACE@546..547 " "327 EXPR@518..521
328 MINUS@547..548 "-"328 EXPR_VAR@518..521
329 WHITESPACE@548..549 " "329 NAME@518..521
330 EXPR_NUMBER@549..550330 IDENT@518..521 "len"
331 FLOAT@549..550 "1"331 WHITESPACE@521..522 " "
332 R_BRACK@550..551 "]"332 MINUS@522..523 "-"
333 COMMA@551..552 ","333 WHITESPACE@523..524 " "
334 WHITESPACE@552..553 " "334 EXPR@524..525
335 ARG@553..558335 EXPR_NUMBER@524..525
336 EXPR_VAR@553..558336 FLOAT@524..525 "1"
337 NAME@553..558337 R_BRACK@525..526 "]"
338 IDENT@553..558 "chars"338 COMMA@526..527 ","
339 R_PAREN@558..559 ")"339 WHITESPACE@527..528 " "
340 WHITESPACE@559..564 "\n "340 ARG@528..533
341 ELSE_KW@564..568 "else"341 EXPR@528..533
342 WHITESPACE@568..575 "\n "342 EXPR_VAR@528..533
343 FALSE_EXPR@575..578343 NAME@528..533
344 EXPR_VAR@575..578344 IDENT@528..533 "chars"
345 NAME@575..578345 R_PAREN@533..534 ")"
346 IDENT@575..578 "str"346 WHITESPACE@534..539 "\n "
347 COMMA@578..579 ","347 ELSE_KW@539..543 "else"
348 WHITESPACE@579..583 "\n\n "348 WHITESPACE@543..550 "\n "
349 MEMBER_FIELD_METHOD@583..663349 FALSE_EXPR@550..553
350 FIELD_NAME_FIXED@583..593350 EXPR@550..553
351 NAME@583..593351 EXPR_VAR@550..553
352 IDENT@583..593 "stripChars"352 NAME@550..553
353 PARAMS_DESC@593..605353 IDENT@550..553 "str"
354 L_PAREN@593..594 "("354 COMMA@553..554 ","
355 PARAM@594..597355 WHITESPACE@554..558 "\n\n "
356 DESTRUCT_FULL@594..597356 MEMBER_FIELD_METHOD@558..638
357 NAME@594..597357 FIELD_NAME_FIXED@558..568
358 IDENT@594..597 "str"358 NAME@558..568
359 COMMA@597..598 ","359 IDENT@558..568 "stripChars"
360 WHITESPACE@598..599 " "360 PARAMS_DESC@568..580
361 PARAM@599..604361 L_PAREN@568..569 "("
362 DESTRUCT_FULL@599..604362 PARAM@569..572
363 NAME@599..604363 DESTRUCT_FULL@569..572
364 IDENT@599..604 "chars"364 NAME@569..572
365 R_PAREN@604..605 ")"365 IDENT@569..572 "str"
366 COLONCOLON@605..607 "::"366 COMMA@572..573 ","
367 WHITESPACE@607..612 "\n "367 WHITESPACE@573..574 " "
368 EXPR_APPLY@612..663368 PARAM@574..579
369 EXPR_INDEX@612..627369 DESTRUCT_FULL@574..579
370 EXPR_VAR@612..615370 NAME@574..579
371 NAME@612..615371 IDENT@574..579 "chars"
372 IDENT@612..615 "std"372 R_PAREN@579..580 ")"
373 DOT@615..616 "."373 COLONCOLON@580..582 "::"
374 NAME@616..627374 WHITESPACE@582..587 "\n "
375 IDENT@616..627 "lstripChars"375 EXPR@587..638
376 ARGS_DESC@627..663376 EXPR_VAR@587..590
377 L_PAREN@627..628 "("377 NAME@587..590
378 ARG@628..655378 IDENT@587..590 "std"
379 EXPR_APPLY@628..655379 SUFFIX_INDEX@590..602
380 EXPR_INDEX@628..643380 DOT@590..591 "."
381 EXPR_VAR@628..631381 NAME@591..602
382 NAME@628..631382 IDENT@591..602 "lstripChars"
383 IDENT@628..631 "std"383 SUFFIX_APPLY@602..638
384 DOT@631..632 "."384 ARGS_DESC@602..638
385 NAME@632..643385 L_PAREN@602..603 "("
386 IDENT@632..643 "rstripChars"386 ARG@603..630
387 ARGS_DESC@643..655387 EXPR@603..630
388 L_PAREN@643..644 "("388 EXPR_VAR@603..606
389 ARG@644..647389 NAME@603..606
390 EXPR_VAR@644..647390 IDENT@603..606 "std"
391 NAME@644..647391 SUFFIX_INDEX@606..618
392 IDENT@644..647 "str"392 DOT@606..607 "."
393 COMMA@647..648 ","393 NAME@607..618
394 WHITESPACE@648..649 " "394 IDENT@607..618 "rstripChars"
395 ARG@649..654395 SUFFIX_APPLY@618..630
396 EXPR_VAR@649..654396 ARGS_DESC@618..630
397 NAME@649..654397 L_PAREN@618..619 "("
398 IDENT@649..654 "chars"398 ARG@619..622
399 R_PAREN@654..655 ")"399 EXPR@619..622
400 COMMA@655..656 ","400 EXPR_VAR@619..622
401 WHITESPACE@656..657 " "401 NAME@619..622
402 ARG@657..662402 IDENT@619..622 "str"
403 EXPR_VAR@657..662403 COMMA@622..623 ","
404 NAME@657..662404 WHITESPACE@623..624 " "
405 IDENT@657..662 "chars"405 ARG@624..629
406 R_PAREN@662..663 ")"406 EXPR@624..629
407 COMMA@663..664 ","407 EXPR_VAR@624..629
408 WHITESPACE@664..668 "\n\n "408 NAME@624..629
409 MEMBER_FIELD_METHOD@668..741409 IDENT@624..629 "chars"
410 FIELD_NAME_FIXED@668..679410 R_PAREN@629..630 ")"
411 NAME@668..679411 COMMA@630..631 ","
412 IDENT@668..679 "stringChars"412 WHITESPACE@631..632 " "
413 PARAMS_DESC@679..684413 ARG@632..637
414 L_PAREN@679..680 "("414 EXPR@632..637
415 PARAM@680..683415 EXPR_VAR@632..637
416 DESTRUCT_FULL@680..683416 NAME@632..637
417 NAME@680..683417 IDENT@632..637 "chars"
418 IDENT@680..683 "str"418 R_PAREN@637..638 ")"
419 R_PAREN@683..684 ")"419 COMMA@638..639 ","
420 COLONCOLON@684..686 "::"420 WHITESPACE@639..643 "\n\n "
421 WHITESPACE@686..691 "\n "421 MEMBER_FIELD_METHOD@643..921
422 EXPR_APPLY@691..741422 FIELD_NAME_FIXED@643..654
423 EXPR_INDEX@691..704423 NAME@643..654
424 EXPR_VAR@691..694424 IDENT@643..654 "splitLimitR"
425 NAME@691..694425 PARAMS_DESC@654..673
426 IDENT@691..694 "std"426 L_PAREN@654..655 "("
427 DOT@694..695 "."427 PARAM@655..658
428 NAME@695..704428 DESTRUCT_FULL@655..658
429 IDENT@695..704 "makeArray"429 NAME@655..658
430 ARGS_DESC@704..741430 IDENT@655..658 "str"
431 L_PAREN@704..705 "("431 COMMA@658..659 ","
432 ARG@705..720432 WHITESPACE@659..660 " "
433 EXPR_APPLY@705..720433 PARAM@660..661
434 EXPR_INDEX@705..715434 DESTRUCT_FULL@660..661
435 EXPR_VAR@705..708435 NAME@660..661
436 NAME@705..708436 IDENT@660..661 "c"
437 IDENT@705..708 "std"437 COMMA@661..662 ","
438 DOT@708..709 "."438 WHITESPACE@662..663 " "
439 NAME@709..715439 PARAM@663..672
440 IDENT@709..715 "length"440 DESTRUCT_FULL@663..672
441 ARGS_DESC@715..720441 NAME@663..672
442 L_PAREN@715..716 "("442 IDENT@663..672 "maxsplits"
443 ARG@716..719443 R_PAREN@672..673 ")"
444 EXPR_VAR@716..719444 COLONCOLON@673..675 "::"
445 NAME@716..719445 WHITESPACE@675..680 "\n "
446 IDENT@716..719 "str"446 EXPR@680..921
447 R_PAREN@719..720 ")"447 EXPR_IF_THEN_ELSE@680..921
448 COMMA@720..721 ","448 IF_KW@680..682 "if"
449 WHITESPACE@721..722 " "449 WHITESPACE@682..683 " "
450 ARG@722..740450 EXPR@683..698
451 EXPR_FUNCTION@722..740451 EXPR_BINARY@683..698
452 FUNCTION_KW@722..730 "function"452 EXPR@683..692
453 PARAMS_DESC@730..733453 EXPR_VAR@683..692
454 L_PAREN@730..731 "("454 NAME@683..692
455 PARAM@731..732455 IDENT@683..692 "maxsplits"
456 DESTRUCT_FULL@731..732456 WHITESPACE@692..693 " "
457 NAME@731..732457 EQ@693..695 "=="
458 IDENT@731..732 "i"458 WHITESPACE@695..696 " "
459 R_PAREN@732..733 ")"459 EXPR@696..698
460 WHITESPACE@733..734 " "460 EXPR_UNARY@696..698
461 EXPR_INDEX_EXPR@734..740461 MINUS@696..697 "-"
462 LHS_EXPR@734..737462 EXPR_NUMBER@697..698
463 EXPR_VAR@734..737463 FLOAT@697..698 "1"
464 NAME@734..737464 WHITESPACE@698..699 " "
465 IDENT@734..737 "str"465 THEN_KW@699..703 "then"
466 L_BRACK@737..738 "["466 WHITESPACE@703..710 "\n "
467 EXPR_VAR@738..739467 TRUE_EXPR@710..736
468 NAME@738..739468 EXPR@710..736
469 IDENT@738..739 "i"469 EXPR_VAR@710..713
470 R_BRACK@739..740 "]"470 NAME@710..713
471 R_PAREN@740..741 ")"471 IDENT@710..713 "std"
472 COMMA@741..742 ","472 SUFFIX_INDEX@713..724
473 WHITESPACE@742..746 "\n\n "473 DOT@713..714 "."
474 MEMBER_FIELD_METHOD@746..1024474 NAME@714..724
475 FIELD_NAME_FIXED@746..757475 IDENT@714..724 "splitLimit"
476 NAME@746..757476 SUFFIX_APPLY@724..736
477 IDENT@746..757 "splitLimitR"477 ARGS_DESC@724..736
478 PARAMS_DESC@757..776478 L_PAREN@724..725 "("
479 L_PAREN@757..758 "("479 ARG@725..728
480 PARAM@758..761480 EXPR@725..728
481 DESTRUCT_FULL@758..761481 EXPR_VAR@725..728
482 NAME@758..761482 NAME@725..728
483 IDENT@758..761 "str"483 IDENT@725..728 "str"
484 COMMA@761..762 ","484 COMMA@728..729 ","
485 WHITESPACE@762..763 " "485 WHITESPACE@729..730 " "
486 PARAM@763..764486 ARG@730..731
487 DESTRUCT_FULL@763..764487 EXPR@730..731
488 NAME@763..764488 EXPR_VAR@730..731
489 IDENT@763..764 "c"489 NAME@730..731
490 COMMA@764..765 ","490 IDENT@730..731 "c"
491 WHITESPACE@765..766 " "491 COMMA@731..732 ","
492 PARAM@766..775492 WHITESPACE@732..733 " "
493 DESTRUCT_FULL@766..775493 ARG@733..735
494 NAME@766..775494 EXPR@733..735
495 IDENT@766..775 "maxsplits"495 EXPR_UNARY@733..735
496 R_PAREN@775..776 ")"496 MINUS@733..734 "-"
497 COLONCOLON@776..778 "::"497 EXPR_NUMBER@734..735
498 WHITESPACE@778..783 "\n "498 FLOAT@734..735 "1"
499 EXPR_IF_THEN_ELSE@783..1024499 R_PAREN@735..736 ")"
500 IF_KW@783..785 "if"500 WHITESPACE@736..741 "\n "
501 WHITESPACE@785..786 " "501 ELSE_KW@741..745 "else"
502 EXPR_BINARY@786..801502 WHITESPACE@745..752 "\n "
503 LHS_EXPR@786..795503 FALSE_EXPR@752..921
504 EXPR_VAR@786..795504 EXPR@752..921
505 NAME@786..795505 STMT_LOCAL@752..820
506 IDENT@786..795 "maxsplits"506 LOCAL_KW@752..757 "local"
507 WHITESPACE@795..796 " "507 WHITESPACE@757..758 " "
508 EQ@796..798 "=="508 BIND_FUNCTION@758..819
509 WHITESPACE@798..799 " "509 NAME@758..764
510 EXPR_UNARY@799..801510 IDENT@758..764 "revStr"
511 MINUS@799..800 "-"511 PARAMS_DESC@764..769
512 EXPR_NUMBER@800..801512 L_PAREN@764..765 "("
513 FLOAT@800..801 "1"513 PARAM@765..768
514 WHITESPACE@801..802 " "514 DESTRUCT_FULL@765..768
515 THEN_KW@802..806 "then"515 NAME@765..768
516 WHITESPACE@806..813 "\n "516 IDENT@765..768 "str"
517 TRUE_EXPR@813..839517 R_PAREN@768..769 ")"
518 EXPR_APPLY@813..839518 WHITESPACE@769..770 " "
519 EXPR_INDEX@813..827519 ASSIGN@770..771 "="
520 EXPR_VAR@813..816520 WHITESPACE@771..772 " "
521 NAME@813..816521 EXPR@772..819
522 IDENT@813..816 "std"522 EXPR_VAR@772..775
523 DOT@816..817 "."523 NAME@772..775
524 NAME@817..827524 IDENT@772..775 "std"
525 IDENT@817..827 "splitLimit"525 SUFFIX_INDEX@775..780
526 ARGS_DESC@827..839526 DOT@775..776 "."
527 L_PAREN@827..828 "("527 NAME@776..780
528 ARG@828..831528 IDENT@776..780 "join"
529 EXPR_VAR@828..831529 SUFFIX_APPLY@780..819
530 NAME@828..831530 ARGS_DESC@780..819
531 IDENT@828..831 "str"531 L_PAREN@780..781 "("
532 COMMA@831..832 ","532 ARG@781..783
533 WHITESPACE@832..833 " "533 EXPR@781..783
534 ARG@833..834534 EXPR_STRING@781..783
535 EXPR_VAR@833..834535 STRING_SINGLE@781..783 "''"
536 NAME@833..834536 COMMA@783..784 ","
537 IDENT@833..834 "c"537 WHITESPACE@784..785 " "
538 COMMA@834..835 ","538 ARG@785..818
539 WHITESPACE@835..836 " "539 EXPR@785..818
540 ARG@836..838540 EXPR_VAR@785..788
541 EXPR_UNARY@836..838541 NAME@785..788
542 MINUS@836..837 "-"542 IDENT@785..788 "std"
543 EXPR_NUMBER@837..838543 SUFFIX_INDEX@788..796
544 FLOAT@837..838 "1"544 DOT@788..789 "."
545 R_PAREN@838..839 ")"545 NAME@789..796
546 WHITESPACE@839..844 "\n "546 IDENT@789..796 "reverse"
547 ELSE_KW@844..848 "else"547 SUFFIX_APPLY@796..818
548 WHITESPACE@848..855 "\n "548 ARGS_DESC@796..818
549 STMT_LOCAL@855..923549 L_PAREN@796..797 "("
550 LOCAL_KW@855..860 "local"550 ARG@797..817
551 WHITESPACE@860..861 " "551 EXPR@797..817
552 BIND_FUNCTION@861..922552 EXPR_VAR@797..800
553 NAME@861..867553 NAME@797..800
554 IDENT@861..867 "revStr"554 IDENT@797..800 "std"
555 PARAMS_DESC@867..872555 SUFFIX_INDEX@800..812
556 L_PAREN@867..868 "("556 DOT@800..801 "."
557 PARAM@868..871557 NAME@801..812
558 DESTRUCT_FULL@868..871558 IDENT@801..812 "stringChars"
559 NAME@868..871559 SUFFIX_APPLY@812..817
560 IDENT@868..871 "str"560 ARGS_DESC@812..817
561 R_PAREN@871..872 ")"561 L_PAREN@812..813 "("
562 WHITESPACE@872..873 " "562 ARG@813..816
563 ASSIGN@873..874 "="563 EXPR@813..816
564 WHITESPACE@874..875 " "564 EXPR_VAR@813..816
565 EXPR_APPLY@875..922565 NAME@813..816
566 EXPR_INDEX@875..883566 IDENT@813..816 "str"
567 EXPR_VAR@875..878567 R_PAREN@816..817 ")"
568 NAME@875..878568 R_PAREN@817..818 ")"
569 IDENT@875..878 "std"569 R_PAREN@818..819 ")"
570 DOT@878..879 "."570 SEMI@819..820 ";"
571 NAME@879..883571 WHITESPACE@820..827 "\n "
572 IDENT@879..883 "join"572 EXPR_VAR@827..830
573 ARGS_DESC@883..922573 NAME@827..830
574 L_PAREN@883..884 "("574 IDENT@827..830 "std"
575 ARG@884..886575 SUFFIX_INDEX@830..834
576 EXPR_STRING@884..886576 DOT@830..831 "."
577 STRING_SINGLE@884..886 "''"577 NAME@831..834
578 COMMA@886..887 ","578 IDENT@831..834 "map"
579 WHITESPACE@887..888 " "579 SUFFIX_APPLY@834..921
580 ARG@888..921580 ARGS_DESC@834..921
581 EXPR_APPLY@888..921581 L_PAREN@834..835 "("
582 EXPR_INDEX@888..899582 ARG@835..856
583 EXPR_VAR@888..891583 EXPR@835..856
584 NAME@888..891584 EXPR_FUNCTION@835..856
585 IDENT@888..891 "std"585 FUNCTION_KW@835..843 "function"
586 DOT@891..892 "."586 PARAMS_DESC@843..846
587 NAME@892..899587 L_PAREN@843..844 "("
588 IDENT@892..899 "reverse"588 PARAM@844..845
589 ARGS_DESC@899..921589 DESTRUCT_FULL@844..845
590 L_PAREN@899..900 "("590 NAME@844..845
591 ARG@900..920591 IDENT@844..845 "e"
592 EXPR_APPLY@900..920592 R_PAREN@845..846 ")"
593 EXPR_INDEX@900..915593 WHITESPACE@846..847 " "
594 EXPR_VAR@900..903594 EXPR@847..856
595 NAME@900..903595 EXPR_VAR@847..853
596 IDENT@900..903 "std"596 NAME@847..853
597 DOT@903..904 "."597 IDENT@847..853 "revStr"
598 NAME@904..915598 SUFFIX_APPLY@853..856
599 IDENT@904..915 "stringChars"599 ARGS_DESC@853..856
600 ARGS_DESC@915..920600 L_PAREN@853..854 "("
601 L_PAREN@915..916 "("601 ARG@854..855
602 ARG@916..919602 EXPR@854..855
603 EXPR_VAR@916..919603 EXPR_VAR@854..855
604 NAME@916..919604 NAME@854..855
605 IDENT@916..919 "str"605 IDENT@854..855 "e"
606 R_PAREN@855..856 ")"
607 COMMA@856..857 ","
608 WHITESPACE@857..858 " "
609 ARG@858..920
610 EXPR@858..920
611 EXPR_VAR@858..861
612 NAME@858..861
613 IDENT@858..861 "std"
614 SUFFIX_INDEX@861..869
615 DOT@861..862 "."
616 NAME@862..869
617 IDENT@862..869 "reverse"
618 SUFFIX_APPLY@869..920
619 ARGS_DESC@869..920
620 L_PAREN@869..870 "("
621 ARG@870..919
622 EXPR@870..919
623 EXPR_VAR@870..873
624 NAME@870..873
625 IDENT@870..873 "std"
626 SUFFIX_INDEX@873..884
627 DOT@873..874 "."
628 NAME@874..884
629 IDENT@874..884 "splitLimit"
630 SUFFIX_APPLY@884..919
631 ARGS_DESC@884..919
632 L_PAREN@884..885 "("
633 ARG@885..896
634 EXPR@885..896
635 EXPR_VAR@885..891
636 NAME@885..891
637 IDENT@885..891 "revStr"
638 SUFFIX_APPLY@891..896
639 ARGS_DESC@891..896
640 L_PAREN@891..892 "("
641 ARG@892..895
642 EXPR@892..895
643 EXPR_VAR@892..895
644 NAME@892..895
645 IDENT@892..895 "str"
646 R_PAREN@895..896 ")"
647 COMMA@896..897 ","
648 WHITESPACE@897..898 " "
649 ARG@898..907
650 EXPR@898..907
651 EXPR_VAR@898..904
652 NAME@898..904
653 IDENT@898..904 "revStr"
654 SUFFIX_APPLY@904..907
655 ARGS_DESC@904..907
656 L_PAREN@904..905 "("
657 ARG@905..906
658 EXPR@905..906
659 EXPR_VAR@905..906
660 NAME@905..906
661 IDENT@905..906 "c"
662 R_PAREN@906..907 ")"
663 COMMA@907..908 ","
664 WHITESPACE@908..909 " "
665 ARG@909..918
666 EXPR@909..918
667 EXPR_VAR@909..918
668 NAME@909..918
669 IDENT@909..918 "maxsplits"
670 R_PAREN@918..919 ")"
606 R_PAREN@919..920 ")"671 R_PAREN@919..920 ")"
607 R_PAREN@920..921 ")"672 R_PAREN@920..921 ")"
608 R_PAREN@921..922 ")"673 COMMA@921..922 ","
609 SEMI@922..923 ";"674 WHITESPACE@922..926 "\n\n "
610 WHITESPACE@923..930 "\n "675 MEMBER_FIELD_METHOD@926..968
611 FALSE_EXPR@930..1024676 FIELD_NAME_FIXED@926..931
612 EXPR_APPLY@930..1024677 NAME@926..931
613 EXPR_INDEX@930..937678 IDENT@926..931 "split"
614 EXPR_VAR@930..933679 PARAMS_DESC@931..939
615 NAME@930..933680 L_PAREN@931..932 "("
616 IDENT@930..933 "std"681 PARAM@932..935
617 DOT@933..934 "."682 DESTRUCT_FULL@932..935
618 NAME@934..937683 NAME@932..935
619 IDENT@934..937 "map"684 IDENT@932..935 "str"
620 ARGS_DESC@937..1024685 COMMA@935..936 ","
621 L_PAREN@937..938 "("686 WHITESPACE@936..937 " "
622 ARG@938..959687 PARAM@937..938
623 EXPR_FUNCTION@938..959688 DESTRUCT_FULL@937..938
624 FUNCTION_KW@938..946 "function"689 NAME@937..938
625 PARAMS_DESC@946..949690 IDENT@937..938 "c"
626 L_PAREN@946..947 "("691 R_PAREN@938..939 ")"
627 PARAM@947..948692 COLONCOLON@939..941 "::"
628 DESTRUCT_FULL@947..948693 WHITESPACE@941..942 " "
629 NAME@947..948694 EXPR@942..968
630 IDENT@947..948 "e"695 EXPR_VAR@942..945
631 R_PAREN@948..949 ")"696 NAME@942..945
632 WHITESPACE@949..950 " "697 IDENT@942..945 "std"
633 EXPR_APPLY@950..959698 SUFFIX_INDEX@945..956
634 EXPR_VAR@950..956699 DOT@945..946 "."
635 NAME@950..956700 NAME@946..956
636 IDENT@950..956 "revStr"701 IDENT@946..956 "splitLimit"
637 ARGS_DESC@956..959702 SUFFIX_APPLY@956..968
638 L_PAREN@956..957 "("703 ARGS_DESC@956..968
639 ARG@957..958704 L_PAREN@956..957 "("
640 EXPR_VAR@957..958705 ARG@957..960
641 NAME@957..958706 EXPR@957..960
642 IDENT@957..958 "e"707 EXPR_VAR@957..960
643 R_PAREN@958..959 ")"708 NAME@957..960
644 COMMA@959..960 ","709 IDENT@957..960 "str"
645 WHITESPACE@960..961 " "710 COMMA@960..961 ","
646 ARG@961..1023711 WHITESPACE@961..962 " "
647 EXPR_APPLY@961..1023712 ARG@962..963
648 EXPR_INDEX@961..972713 EXPR@962..963
649 EXPR_VAR@961..964714 EXPR_VAR@962..963
650 NAME@961..964715 NAME@962..963
651 IDENT@961..964 "std"716 IDENT@962..963 "c"
652 DOT@964..965 "."717 COMMA@963..964 ","
653 NAME@965..972718 WHITESPACE@964..965 " "
654 IDENT@965..972 "reverse"719 ARG@965..967
655 ARGS_DESC@972..1023720 EXPR@965..967
656 L_PAREN@972..973 "("721 EXPR_UNARY@965..967
657 ARG@973..1022722 MINUS@965..966 "-"
658 EXPR_APPLY@973..1022723 EXPR_NUMBER@966..967
659 EXPR_INDEX@973..987724 FLOAT@966..967 "1"
660 EXPR_VAR@973..976725 R_PAREN@967..968 ")"
661 NAME@973..976726 COMMA@968..969 ","
662 IDENT@973..976 "std"727 WHITESPACE@969..973 "\n\n "
663 DOT@976..977 "."728 MEMBER_FIELD_METHOD@973..1331
664 NAME@977..987729 FIELD_NAME_FIXED@973..985
665 IDENT@977..987 "splitLimit"730 NAME@973..985
666 ARGS_DESC@987..1022731 IDENT@973..985 "mapWithIndex"
667 L_PAREN@987..988 "("732 PARAMS_DESC@985..996
668 ARG@988..999733 L_PAREN@985..986 "("
669 EXPR_APPLY@988..999734 PARAM@986..990
670 EXPR_VAR@988..994735 DESTRUCT_FULL@986..990
671 NAME@988..994736 NAME@986..990
672 IDENT@988..994 "revStr"737 IDENT@986..990 "func"
673 ARGS_DESC@994..999738 COMMA@990..991 ","
674 L_PAREN@994..995 "("739 WHITESPACE@991..992 " "
675 ARG@995..998740 PARAM@992..995
676 EXPR_VAR@995..998741 DESTRUCT_FULL@992..995
677 NAME@995..998742 NAME@992..995
678 IDENT@995..998 "str"743 IDENT@992..995 "arr"
679 R_PAREN@998..999 ")"744 R_PAREN@995..996 ")"
680 COMMA@999..1000 ","745 COLONCOLON@996..998 "::"
681 WHITESPACE@1000..1001 " "746 WHITESPACE@998..1003 "\n "
682 ARG@1001..1010747 EXPR@1003..1331
683 EXPR_APPLY@1001..1010748 EXPR_IF_THEN_ELSE@1003..1331
684 EXPR_VAR@1001..1007749 IF_KW@1003..1005 "if"
685 NAME@1001..1007750 WHITESPACE@1005..1006 " "
686 IDENT@1001..1007 "revStr"751 EXPR@1006..1027
687 ARGS_DESC@1007..1010752 EXPR_UNARY@1006..1027
688 L_PAREN@1007..1008 "("753 NOT@1006..1007 "!"
689 ARG@1008..1009754 EXPR_VAR@1007..1010
690 EXPR_VAR@1008..1009755 NAME@1007..1010
691 NAME@1008..1009756 IDENT@1007..1010 "std"
692 IDENT@1008..1009 "c"757 SUFFIX_INDEX@1010..1021
693 R_PAREN@1009..1010 ")"758 DOT@1010..1011 "."
694 COMMA@1010..1011 ","759 NAME@1011..1021
695 WHITESPACE@1011..1012 " "760 IDENT@1011..1021 "isFunction"
696 ARG@1012..1021761 SUFFIX_APPLY@1021..1027
697 EXPR_VAR@1012..1021762 ARGS_DESC@1021..1027
698 NAME@1012..1021763 L_PAREN@1021..1022 "("
699 IDENT@1012..1021 "maxsplits"764 ARG@1022..1026
700 R_PAREN@1021..1022 ")"765 EXPR@1022..1026
701 R_PAREN@1022..1023 ")"766 EXPR_VAR@1022..1026
702 R_PAREN@1023..1024 ")"767 NAME@1022..1026
703 COMMA@1024..1025 ","768 IDENT@1022..1026 "func"
704 WHITESPACE@1025..1029 "\n\n "769 R_PAREN@1026..1027 ")"
705 MEMBER_FIELD_METHOD@1029..1071770 WHITESPACE@1027..1028 " "
706 FIELD_NAME_FIXED@1029..1034771 THEN_KW@1028..1032 "then"
707 NAME@1029..1034772 WHITESPACE@1032..1039 "\n "
708 IDENT@1029..1034 "split"773 TRUE_EXPR@1039..1117
709 PARAMS_DESC@1034..1042774 EXPR@1039..1117
710 L_PAREN@1034..1035 "("775 EXPR_ERROR@1039..1117
711 PARAM@1035..1038776 ERROR_KW@1039..1044 "error"
712 DESTRUCT_FULL@1035..1038777 WHITESPACE@1044..1045 " "
713 NAME@1035..1038778 EXPR@1045..1117
714 IDENT@1035..1038 "str"779 EXPR_PARENED@1045..1117
715 COMMA@1038..1039 ","780 L_PAREN@1045..1046 "("
716 WHITESPACE@1039..1040 " "781 EXPR@1046..1116
717 PARAM@1040..1041782 EXPR_BINARY@1046..1116
718 DESTRUCT_FULL@1040..1041783 EXPR@1046..1099
719 NAME@1040..1041784 EXPR_STRING@1046..1099
720 IDENT@1040..1041 "c"785 STRING_SINGLE@1046..1099 "'std.mapWithIndex fir ..."
721 R_PAREN@1041..1042 ")"786 WHITESPACE@1099..1100 " "
722 COLONCOLON@1042..1044 "::"787 PLUS@1100..1101 "+"
723 WHITESPACE@1044..1045 " "788 WHITESPACE@1101..1102 " "
724 EXPR_APPLY@1045..1071789 EXPR@1102..1116
725 EXPR_INDEX@1045..1059790 EXPR_VAR@1102..1105
726 EXPR_VAR@1045..1048791 NAME@1102..1105
727 NAME@1045..1048792 IDENT@1102..1105 "std"
728 IDENT@1045..1048 "std"793 SUFFIX_INDEX@1105..1110
729 DOT@1048..1049 "."794 DOT@1105..1106 "."
730 NAME@1049..1059795 NAME@1106..1110
731 IDENT@1049..1059 "splitLimit"796 IDENT@1106..1110 "type"
732 ARGS_DESC@1059..1071797 SUFFIX_APPLY@1110..1116
733 L_PAREN@1059..1060 "("798 ARGS_DESC@1110..1116
734 ARG@1060..1063799 L_PAREN@1110..1111 "("
735 EXPR_VAR@1060..1063800 ARG@1111..1115
736 NAME@1060..1063801 EXPR@1111..1115
737 IDENT@1060..1063 "str"802 EXPR_VAR@1111..1115
738 COMMA@1063..1064 ","803 NAME@1111..1115
739 WHITESPACE@1064..1065 " "804 IDENT@1111..1115 "func"
740 ARG@1065..1066805 R_PAREN@1115..1116 ")"
741 EXPR_VAR@1065..1066806 R_PAREN@1116..1117 ")"
742 NAME@1065..1066807 WHITESPACE@1117..1122 "\n "
743 IDENT@1065..1066 "c"808 ELSE_KW@1122..1126 "else"
744 COMMA@1066..1067 ","809 WHITESPACE@1126..1127 " "
745 WHITESPACE@1067..1068 " "810 FALSE_EXPR@1127..1331
746 ARG@1068..1070811 EXPR@1127..1331
747 EXPR_UNARY@1068..1070812 EXPR_IF_THEN_ELSE@1127..1331
748 MINUS@1068..1069 "-"813 IF_KW@1127..1129 "if"
749 EXPR_NUMBER@1069..1070814 WHITESPACE@1129..1130 " "
750 FLOAT@1069..1070 "1"815 EXPR@1130..1169
751 R_PAREN@1070..1071 ")"816 EXPR_BINARY@1130..1169
752 COMMA@1071..1072 ","817 EXPR@1130..1147
753 WHITESPACE@1072..1076 "\n\n "818 EXPR_UNARY@1130..1147
754 MEMBER_FIELD_METHOD@1076..1434819 NOT@1130..1131 "!"
755 FIELD_NAME_FIXED@1076..1088820 EXPR_VAR@1131..1134
756 NAME@1076..1088821 NAME@1131..1134
757 IDENT@1076..1088 "mapWithIndex"822 IDENT@1131..1134 "std"
758 PARAMS_DESC@1088..1099823 SUFFIX_INDEX@1134..1142
759 L_PAREN@1088..1089 "("824 DOT@1134..1135 "."
760 PARAM@1089..1093825 NAME@1135..1142
761 DESTRUCT_FULL@1089..1093826 IDENT@1135..1142 "isArray"
762 NAME@1089..1093827 SUFFIX_APPLY@1142..1147
763 IDENT@1089..1093 "func"828 ARGS_DESC@1142..1147
764 COMMA@1093..1094 ","829 L_PAREN@1142..1143 "("
765 WHITESPACE@1094..1095 " "830 ARG@1143..1146
766 PARAM@1095..1098831 EXPR@1143..1146
767 DESTRUCT_FULL@1095..1098832 EXPR_VAR@1143..1146
768 NAME@1095..1098833 NAME@1143..1146
769 IDENT@1095..1098 "arr"834 IDENT@1143..1146 "arr"
770 R_PAREN@1098..1099 ")"835 R_PAREN@1146..1147 ")"
771 COLONCOLON@1099..1101 "::"836 WHITESPACE@1147..1148 " "
772 WHITESPACE@1101..1106 "\n "837 AND@1148..1150 "&&"
773 EXPR_IF_THEN_ELSE@1106..1434838 WHITESPACE@1150..1151 " "
774 IF_KW@1106..1108 "if"839 EXPR@1151..1169
775 WHITESPACE@1108..1109 " "840 EXPR_UNARY@1151..1169
776 EXPR_UNARY@1109..1130841 NOT@1151..1152 "!"
777 NOT@1109..1110 "!"842 EXPR_VAR@1152..1155
778 EXPR_APPLY@1110..1130843 NAME@1152..1155
779 EXPR_INDEX@1110..1124844 IDENT@1152..1155 "std"
780 EXPR_VAR@1110..1113845 SUFFIX_INDEX@1155..1164
781 NAME@1110..1113846 DOT@1155..1156 "."
782 IDENT@1110..1113 "std"847 NAME@1156..1164
783 DOT@1113..1114 "."848 IDENT@1156..1164 "isString"
784 NAME@1114..1124849 SUFFIX_APPLY@1164..1169
785 IDENT@1114..1124 "isFunction"850 ARGS_DESC@1164..1169
786 ARGS_DESC@1124..1130851 L_PAREN@1164..1165 "("
787 L_PAREN@1124..1125 "("852 ARG@1165..1168
788 ARG@1125..1129853 EXPR@1165..1168
789 EXPR_VAR@1125..1129854 EXPR_VAR@1165..1168
790 NAME@1125..1129855 NAME@1165..1168
791 IDENT@1125..1129 "func"856 IDENT@1165..1168 "arr"
792 R_PAREN@1129..1130 ")"857 R_PAREN@1168..1169 ")"
793 WHITESPACE@1130..1131 " "858 WHITESPACE@1169..1170 " "
794 THEN_KW@1131..1135 "then"859 THEN_KW@1170..1174 "then"
795 WHITESPACE@1135..1142 "\n "860 WHITESPACE@1174..1181 "\n "
796 TRUE_EXPR@1142..1220861 TRUE_EXPR@1181..1256
797 EXPR_ERROR@1142..1220862 EXPR@1181..1256
798 ERROR_KW@1142..1147 "error"863 EXPR_ERROR@1181..1256
799 WHITESPACE@1147..1148 " "864 ERROR_KW@1181..1186 "error"
800 EXPR_PARENED@1148..1220865 WHITESPACE@1186..1187 " "
801 L_PAREN@1148..1149 "("866 EXPR@1187..1256
802 EXPR_BINARY@1149..1219867 EXPR_PARENED@1187..1256
803 LHS_EXPR@1149..1202868 L_PAREN@1187..1188 "("
804 EXPR_STRING@1149..1202869 EXPR@1188..1255
805 STRING_SINGLE@1149..1202 "'std.mapWithIndex fir ..."870 EXPR_BINARY@1188..1255
806 WHITESPACE@1202..1203 " "871 EXPR@1188..1239
807 PLUS@1203..1204 "+"872 EXPR_STRING@1188..1239
808 WHITESPACE@1204..1205 " "873 STRING_SINGLE@1188..1239 "'std.mapWithIndex sec ..."
809 EXPR_APPLY@1205..1219874 WHITESPACE@1239..1240 " "
810 EXPR_INDEX@1205..1213875 PLUS@1240..1241 "+"
811 EXPR_VAR@1205..1208876 WHITESPACE@1241..1242 " "
812 NAME@1205..1208877 EXPR@1242..1255
813 IDENT@1205..1208 "std"878 EXPR_VAR@1242..1245
814 DOT@1208..1209 "."879 NAME@1242..1245
815 NAME@1209..1213880 IDENT@1242..1245 "std"
816 IDENT@1209..1213 "type"881 SUFFIX_INDEX@1245..1250
817 ARGS_DESC@1213..1219882 DOT@1245..1246 "."
818 L_PAREN@1213..1214 "("883 NAME@1246..1250
819 ARG@1214..1218884 IDENT@1246..1250 "type"
820 EXPR_VAR@1214..1218885 SUFFIX_APPLY@1250..1255
821 NAME@1214..1218886 ARGS_DESC@1250..1255
822 IDENT@1214..1218 "func"887 L_PAREN@1250..1251 "("
823 R_PAREN@1218..1219 ")"888 ARG@1251..1254
824 R_PAREN@1219..1220 ")"889 EXPR@1251..1254
825 WHITESPACE@1220..1225 "\n "890 EXPR_VAR@1251..1254
826 ELSE_KW@1225..1229 "else"891 NAME@1251..1254
827 WHITESPACE@1229..1230 " "892 IDENT@1251..1254 "arr"
828 FALSE_EXPR@1230..1434893 R_PAREN@1254..1255 ")"
829 EXPR_IF_THEN_ELSE@1230..1434894 R_PAREN@1255..1256 ")"
830 IF_KW@1230..1232 "if"895 WHITESPACE@1256..1261 "\n "
831 WHITESPACE@1232..1233 " "896 ELSE_KW@1261..1265 "else"
832 EXPR_BINARY@1233..1272897 WHITESPACE@1265..1272 "\n "
833 LHS_EXPR@1233..1250898 FALSE_EXPR@1272..1331
834 EXPR_UNARY@1233..1250899 EXPR@1272..1331
835 NOT@1233..1234 "!"900 EXPR_VAR@1272..1275
836 EXPR_APPLY@1234..1250901 NAME@1272..1275
837 EXPR_INDEX@1234..1245902 IDENT@1272..1275 "std"
838 EXPR_VAR@1234..1237903 SUFFIX_INDEX@1275..1285
839 NAME@1234..1237904 DOT@1275..1276 "."
840 IDENT@1234..1237 "std"905 NAME@1276..1285
841 DOT@1237..1238 "."906 IDENT@1276..1285 "makeArray"
842 NAME@1238..1245907 SUFFIX_APPLY@1285..1331
843 IDENT@1238..1245 "isArray"908 ARGS_DESC@1285..1331
844 ARGS_DESC@1245..1250909 L_PAREN@1285..1286 "("
845 L_PAREN@1245..1246 "("910 ARG@1286..1301
846 ARG@1246..1249911 EXPR@1286..1301
847 EXPR_VAR@1246..1249912 EXPR_VAR@1286..1289
848 NAME@1246..1249913 NAME@1286..1289
849 IDENT@1246..1249 "arr"914 IDENT@1286..1289 "std"
850 R_PAREN@1249..1250 ")"915 SUFFIX_INDEX@1289..1296
851 WHITESPACE@1250..1251 " "916 DOT@1289..1290 "."
852 AND@1251..1253 "&&"917 NAME@1290..1296
853 WHITESPACE@1253..1254 " "918 IDENT@1290..1296 "length"
854 EXPR_UNARY@1254..1272919 SUFFIX_APPLY@1296..1301
855 NOT@1254..1255 "!"920 ARGS_DESC@1296..1301
856 EXPR_APPLY@1255..1272921 L_PAREN@1296..1297 "("
857 EXPR_INDEX@1255..1267922 ARG@1297..1300
858 EXPR_VAR@1255..1258923 EXPR@1297..1300
859 NAME@1255..1258924 EXPR_VAR@1297..1300
860 IDENT@1255..1258 "std"925 NAME@1297..1300
861 DOT@1258..1259 "."926 IDENT@1297..1300 "arr"
862 NAME@1259..1267927 R_PAREN@1300..1301 ")"
863 IDENT@1259..1267 "isString"928 COMMA@1301..1302 ","
864 ARGS_DESC@1267..1272929 WHITESPACE@1302..1303 " "
865 L_PAREN@1267..1268 "("930 ARG@1303..1330
866 ARG@1268..1271931 EXPR@1303..1330
867 EXPR_VAR@1268..1271932 EXPR_FUNCTION@1303..1330
868 NAME@1268..1271933 FUNCTION_KW@1303..1311 "function"
869 IDENT@1268..1271 "arr"934 PARAMS_DESC@1311..1314
870 R_PAREN@1271..1272 ")"935 L_PAREN@1311..1312 "("
871 WHITESPACE@1272..1273 " "936 PARAM@1312..1313
872 THEN_KW@1273..1277 "then"937 DESTRUCT_FULL@1312..1313
873 WHITESPACE@1277..1284 "\n "938 NAME@1312..1313
874 TRUE_EXPR@1284..1359939 IDENT@1312..1313 "i"
875 EXPR_ERROR@1284..1359940 R_PAREN@1313..1314 ")"
876 ERROR_KW@1284..1289 "error"941 WHITESPACE@1314..1315 " "
877 WHITESPACE@1289..1290 " "942 EXPR@1315..1330
878 EXPR_PARENED@1290..1359943 EXPR_VAR@1315..1319
879 L_PAREN@1290..1291 "("944 NAME@1315..1319
880 EXPR_BINARY@1291..1358945 IDENT@1315..1319 "func"
881 LHS_EXPR@1291..1342946 SUFFIX_APPLY@1319..1330
882 EXPR_STRING@1291..1342947 ARGS_DESC@1319..1330
883 STRING_SINGLE@1291..1342 "'std.mapWithIndex sec ..."948 L_PAREN@1319..1320 "("
884 WHITESPACE@1342..1343 " "949 ARG@1320..1321
885 PLUS@1343..1344 "+"950 EXPR@1320..1321
886 WHITESPACE@1344..1345 " "951 EXPR_VAR@1320..1321
887 EXPR_APPLY@1345..1358952 NAME@1320..1321
888 EXPR_INDEX@1345..1353953 IDENT@1320..1321 "i"
889 EXPR_VAR@1345..1348954 COMMA@1321..1322 ","
890 NAME@1345..1348955 WHITESPACE@1322..1323 " "
891 IDENT@1345..1348 "std"956 ARG@1323..1329
892 DOT@1348..1349 "."957 EXPR@1323..1329
893 NAME@1349..1353958 EXPR_VAR@1323..1326
894 IDENT@1349..1353 "type"959 NAME@1323..1326
895 ARGS_DESC@1353..1358960 IDENT@1323..1326 "arr"
896 L_PAREN@1353..1354 "("961 SUFFIX_INDEX_EXPR@1326..1329
897 ARG@1354..1357962 L_BRACK@1326..1327 "["
898 EXPR_VAR@1354..1357963 EXPR@1327..1328
899 NAME@1354..1357964 EXPR_VAR@1327..1328
900 IDENT@1354..1357 "arr"965 NAME@1327..1328
901 R_PAREN@1357..1358 ")"966 IDENT@1327..1328 "i"
902 R_PAREN@1358..1359 ")"967 R_BRACK@1328..1329 "]"
903 WHITESPACE@1359..1364 "\n "968 R_PAREN@1329..1330 ")"
904 ELSE_KW@1364..1368 "else"969 R_PAREN@1330..1331 ")"
905 WHITESPACE@1368..1375 "\n "970 COMMA@1331..1332 ","
906 FALSE_EXPR@1375..1434971 WHITESPACE@1332..1336 "\n\n "
907 EXPR_APPLY@1375..1434972 MEMBER_FIELD_METHOD@1336..1664
908 EXPR_INDEX@1375..1388973 FIELD_NAME_FIXED@1336..1346
909 EXPR_VAR@1375..1378974 NAME@1336..1346
910 NAME@1375..1378975 IDENT@1336..1346 "mapWithKey"
911 IDENT@1375..1378 "std"976 PARAMS_DESC@1346..1357
912 DOT@1378..1379 "."977 L_PAREN@1346..1347 "("
913 NAME@1379..1388978 PARAM@1347..1351
914 IDENT@1379..1388 "makeArray"979 DESTRUCT_FULL@1347..1351
915 ARGS_DESC@1388..1434980 NAME@1347..1351
916 L_PAREN@1388..1389 "("981 IDENT@1347..1351 "func"
917 ARG@1389..1404982 COMMA@1351..1352 ","
918 EXPR_APPLY@1389..1404983 WHITESPACE@1352..1353 " "
919 EXPR_INDEX@1389..1399984 PARAM@1353..1356
920 EXPR_VAR@1389..1392985 DESTRUCT_FULL@1353..1356
921 NAME@1389..1392986 NAME@1353..1356
922 IDENT@1389..1392 "std"987 IDENT@1353..1356 "obj"
923 DOT@1392..1393 "."988 R_PAREN@1356..1357 ")"
924 NAME@1393..1399989 COLONCOLON@1357..1359 "::"
925 IDENT@1393..1399 "length"990 WHITESPACE@1359..1364 "\n "
926 ARGS_DESC@1399..1404991 EXPR@1364..1664
927 L_PAREN@1399..1400 "("992 EXPR_IF_THEN_ELSE@1364..1664
928 ARG@1400..1403993 IF_KW@1364..1366 "if"
929 EXPR_VAR@1400..1403994 WHITESPACE@1366..1367 " "
930 NAME@1400..1403995 EXPR@1367..1388
931 IDENT@1400..1403 "arr"996 EXPR_UNARY@1367..1388
932 R_PAREN@1403..1404 ")"997 NOT@1367..1368 "!"
933 COMMA@1404..1405 ","998 EXPR_VAR@1368..1371
999 NAME@1368..1371
1000 IDENT@1368..1371 "std"
1001 SUFFIX_INDEX@1371..1382
1002 DOT@1371..1372 "."
1003 NAME@1372..1382
1004 IDENT@1372..1382 "isFunction"
1005 SUFFIX_APPLY@1382..1388
1006 ARGS_DESC@1382..1388
1007 L_PAREN@1382..1383 "("
1008 ARG@1383..1387
1009 EXPR@1383..1387
1010 EXPR_VAR@1383..1387
1011 NAME@1383..1387
1012 IDENT@1383..1387 "func"
1013 R_PAREN@1387..1388 ")"
1014 WHITESPACE@1388..1389 " "
1015 THEN_KW@1389..1393 "then"
1016 WHITESPACE@1393..1400 "\n "
1017 TRUE_EXPR@1400..1476
1018 EXPR@1400..1476
1019 EXPR_ERROR@1400..1476
1020 ERROR_KW@1400..1405 "error"
934 WHITESPACE@1405..1406 " "1021 WHITESPACE@1405..1406 " "
935 ARG@1406..14331022 EXPR@1406..1476
936 EXPR_FUNCTION@1406..14331023 EXPR_PARENED@1406..1476
937 FUNCTION_KW@1406..1414 "function"1024 L_PAREN@1406..1407 "("
938 PARAMS_DESC@1414..14171025 EXPR@1407..1475
939 L_PAREN@1414..1415 "("1026 EXPR_BINARY@1407..1475
940 PARAM@1415..14161027 EXPR@1407..1458
941 DESTRUCT_FULL@1415..14161028 EXPR_STRING@1407..1458
942 NAME@1415..14161029 STRING_SINGLE@1407..1458 "'std.mapWithKey first ..."
943 IDENT@1415..1416 "i"1030 WHITESPACE@1458..1459 " "
944 R_PAREN@1416..1417 ")"1031 PLUS@1459..1460 "+"
945 WHITESPACE@1417..1418 " "1032 WHITESPACE@1460..1461 " "
946 EXPR_APPLY@1418..14331033 EXPR@1461..1475
947 EXPR_VAR@1418..14221034 EXPR_VAR@1461..1464
948 NAME@1418..14221035 NAME@1461..1464
949 IDENT@1418..1422 "func"1036 IDENT@1461..1464 "std"
950 ARGS_DESC@1422..14331037 SUFFIX_INDEX@1464..1469
951 L_PAREN@1422..1423 "("1038 DOT@1464..1465 "."
952 ARG@1423..14241039 NAME@1465..1469
953 EXPR_VAR@1423..14241040 IDENT@1465..1469 "type"
954 NAME@1423..14241041 SUFFIX_APPLY@1469..1475
955 IDENT@1423..1424 "i"1042 ARGS_DESC@1469..1475
956 COMMA@1424..1425 ","1043 L_PAREN@1469..1470 "("
957 WHITESPACE@1425..1426 " "1044 ARG@1470..1474
958 ARG@1426..14321045 EXPR@1470..1474
959 EXPR_INDEX_EXPR@1426..14321046 EXPR_VAR@1470..1474
960 LHS_EXPR@1426..14291047 NAME@1470..1474
961 EXPR_VAR@1426..14291048 IDENT@1470..1474 "func"
962 NAME@1426..14291049 R_PAREN@1474..1475 ")"
963 IDENT@1426..1429 "arr"1050 R_PAREN@1475..1476 ")"
964 L_BRACK@1429..1430 "["1051 WHITESPACE@1476..1481 "\n "
965 EXPR_VAR@1430..14311052 ELSE_KW@1481..1485 "else"
966 NAME@1430..14311053 WHITESPACE@1485..1486 " "
967 IDENT@1430..1431 "i"1054 FALSE_EXPR@1486..1664
968 R_BRACK@1431..1432 "]"1055 EXPR@1486..1664
969 R_PAREN@1432..1433 ")"1056 EXPR_IF_THEN_ELSE@1486..1664
970 R_PAREN@1433..1434 ")"1057 IF_KW@1486..1488 "if"
971 COMMA@1434..1435 ","1058 WHITESPACE@1488..1489 " "
972 WHITESPACE@1435..1439 "\n\n "1059 EXPR@1489..1507
973 MEMBER_FIELD_METHOD@1439..17671060 EXPR_UNARY@1489..1507
974 FIELD_NAME_FIXED@1439..14491061 NOT@1489..1490 "!"
975 NAME@1439..14491062 EXPR_VAR@1490..1493
976 IDENT@1439..1449 "mapWithKey"1063 NAME@1490..1493
977 PARAMS_DESC@1449..14601064 IDENT@1490..1493 "std"
978 L_PAREN@1449..1450 "("1065 SUFFIX_INDEX@1493..1502
979 PARAM@1450..14541066 DOT@1493..1494 "."
980 DESTRUCT_FULL@1450..14541067 NAME@1494..1502
981 NAME@1450..14541068 IDENT@1494..1502 "isObject"
982 IDENT@1450..1454 "func"1069 SUFFIX_APPLY@1502..1507
983 COMMA@1454..1455 ","1070 ARGS_DESC@1502..1507
984 WHITESPACE@1455..1456 " "1071 L_PAREN@1502..1503 "("
985 PARAM@1456..14591072 ARG@1503..1506
986 DESTRUCT_FULL@1456..14591073 EXPR@1503..1506
987 NAME@1456..14591074 EXPR_VAR@1503..1506
988 IDENT@1456..1459 "obj"1075 NAME@1503..1506
989 R_PAREN@1459..1460 ")"1076 IDENT@1503..1506 "obj"
990 COLONCOLON@1460..1462 "::"1077 R_PAREN@1506..1507 ")"
991 WHITESPACE@1462..1467 "\n "1078 WHITESPACE@1507..1508 " "
992 EXPR_IF_THEN_ELSE@1467..17671079 THEN_KW@1508..1512 "then"
993 IF_KW@1467..1469 "if"1080 WHITESPACE@1512..1519 "\n "
994 WHITESPACE@1469..1470 " "1081 TRUE_EXPR@1519..1593
995 EXPR_UNARY@1470..14911082 EXPR@1519..1593
996 NOT@1470..1471 "!"1083 EXPR_ERROR@1519..1593
997 EXPR_APPLY@1471..14911084 ERROR_KW@1519..1524 "error"
998 EXPR_INDEX@1471..14851085 WHITESPACE@1524..1525 " "
999 EXPR_VAR@1471..14741086 EXPR@1525..1593
1000 NAME@1471..14741087 EXPR_PARENED@1525..1593
1001 IDENT@1471..1474 "std"1088 L_PAREN@1525..1526 "("
1002 DOT@1474..1475 "."1089 EXPR@1526..1592
1003 NAME@1475..14851090 EXPR_BINARY@1526..1592
1004 IDENT@1475..1485 "isFunction"1091 EXPR@1526..1576
1005 ARGS_DESC@1485..14911092 EXPR_STRING@1526..1576
1006 L_PAREN@1485..1486 "("1093 STRING_SINGLE@1526..1576 "'std.mapWithKey secon ..."
1007 ARG@1486..14901094 WHITESPACE@1576..1577 " "
1008 EXPR_VAR@1486..14901095 PLUS@1577..1578 "+"
1009 NAME@1486..14901096 WHITESPACE@1578..1579 " "
1010 IDENT@1486..1490 "func"1097 EXPR@1579..1592
1011 R_PAREN@1490..1491 ")"1098 EXPR_VAR@1579..1582
1012 WHITESPACE@1491..1492 " "1099 NAME@1579..1582
1013 THEN_KW@1492..1496 "then"1100 IDENT@1579..1582 "std"
1014 WHITESPACE@1496..1503 "\n "1101 SUFFIX_INDEX@1582..1587
1015 TRUE_EXPR@1503..15791102 DOT@1582..1583 "."
1016 EXPR_ERROR@1503..15791103 NAME@1583..1587
1017 ERROR_KW@1503..1508 "error"1104 IDENT@1583..1587 "type"
1018 WHITESPACE@1508..1509 " "1105 SUFFIX_APPLY@1587..1592
1019 EXPR_PARENED@1509..15791106 ARGS_DESC@1587..1592
1020 L_PAREN@1509..1510 "("1107 L_PAREN@1587..1588 "("
1021 EXPR_BINARY@1510..15781108 ARG@1588..1591
1022 LHS_EXPR@1510..15611109 EXPR@1588..1591
1023 EXPR_STRING@1510..15611110 EXPR_VAR@1588..1591
1024 STRING_SINGLE@1510..1561 "'std.mapWithKey first ..."1111 NAME@1588..1591
1025 WHITESPACE@1561..1562 " "1112 IDENT@1588..1591 "obj"
1026 PLUS@1562..1563 "+"1113 R_PAREN@1591..1592 ")"
1027 WHITESPACE@1563..1564 " "1114 R_PAREN@1592..1593 ")"
1028 EXPR_APPLY@1564..15781115 WHITESPACE@1593..1598 "\n "
1029 EXPR_INDEX@1564..15721116 ELSE_KW@1598..1602 "else"
1030 EXPR_VAR@1564..15671117 WHITESPACE@1602..1609 "\n "
1031 NAME@1564..15671118 FALSE_EXPR@1609..1664
1032 IDENT@1564..1567 "std"1119 EXPR@1609..1664
1033 DOT@1567..1568 "."1120 EXPR_OBJECT@1609..1664
1034 NAME@1568..15721121 OBJ_BODY_COMP@1609..1664
1035 IDENT@1568..1572 "type"1122 L_BRACE@1609..1610 "{"
1036 ARGS_DESC@1572..15781123 WHITESPACE@1610..1611 " "
1037 L_PAREN@1572..1573 "("1124 MEMBER_FIELD_NORMAL@1611..1631
1038 ARG@1573..15771125 FIELD_NAME_DYNAMIC@1611..1614
1039 EXPR_VAR@1573..15771126 L_BRACK@1611..1612 "["
1040 NAME@1573..15771127 EXPR@1612..1613
1041 IDENT@1573..1577 "func"1128 EXPR_VAR@1612..1613
1042 R_PAREN@1577..1578 ")"1129 NAME@1612..1613
1043 R_PAREN@1578..1579 ")"1130 IDENT@1612..1613 "k"
1044 WHITESPACE@1579..1584 "\n "1131 R_BRACK@1613..1614 "]"
1045 ELSE_KW@1584..1588 "else"1132 COLON@1614..1615 ":"
1046 WHITESPACE@1588..1589 " "1133 WHITESPACE@1615..1616 " "
1047 FALSE_EXPR@1589..17671134 EXPR@1616..1631
1048 EXPR_IF_THEN_ELSE@1589..17671135 EXPR_VAR@1616..1620
1049 IF_KW@1589..1591 "if"1136 NAME@1616..1620
1050 WHITESPACE@1591..1592 " "1137 IDENT@1616..1620 "func"
1051 EXPR_UNARY@1592..16101138 SUFFIX_APPLY@1620..1631
1052 NOT@1592..1593 "!"1139 ARGS_DESC@1620..1631
1053 EXPR_APPLY@1593..16101140 L_PAREN@1620..1621 "("
1054 EXPR_INDEX@1593..16051141 ARG@1621..1622
1055 EXPR_VAR@1593..15961142 EXPR@1621..1622
1056 NAME@1593..15961143 EXPR_VAR@1621..1622
1057 IDENT@1593..1596 "std"1144 NAME@1621..1622
1058 DOT@1596..1597 "."1145 IDENT@1621..1622 "k"
1059 NAME@1597..16051146 COMMA@1622..1623 ","
1060 IDENT@1597..1605 "isObject"1147 WHITESPACE@1623..1624 " "
1061 ARGS_DESC@1605..16101148 ARG@1624..1630
1062 L_PAREN@1605..1606 "("1149 EXPR@1624..1630
1063 ARG@1606..16091150 EXPR_VAR@1624..1627
1064 EXPR_VAR@1606..16091151 NAME@1624..1627
1065 NAME@1606..16091152 IDENT@1624..1627 "obj"
1066 IDENT@1606..1609 "obj"1153 SUFFIX_INDEX_EXPR@1627..1630
1067 R_PAREN@1609..1610 ")"1154 L_BRACK@1627..1628 "["
1068 WHITESPACE@1610..1611 " "1155 EXPR@1628..1629
1069 THEN_KW@1611..1615 "then"1156 EXPR_VAR@1628..1629
1070 WHITESPACE@1615..1622 "\n "1157 NAME@1628..1629
1071 TRUE_EXPR@1622..16961158 IDENT@1628..1629 "k"
1072 EXPR_ERROR@1622..16961159 R_BRACK@1629..1630 "]"
1073 ERROR_KW@1622..1627 "error"1160 R_PAREN@1630..1631 ")"
1074 WHITESPACE@1627..1628 " "1161 WHITESPACE@1631..1632 " "
1075 EXPR_PARENED@1628..16961162 FOR_SPEC@1632..1662
1076 L_PAREN@1628..1629 "("1163 FOR_KW@1632..1635 "for"
1077 EXPR_BINARY@1629..16951164 WHITESPACE@1635..1636 " "
1078 LHS_EXPR@1629..16791165 DESTRUCT_FULL@1636..1637
1079 EXPR_STRING@1629..16791166 NAME@1636..1637
1080 STRING_SINGLE@1629..1679 "'std.mapWithKey secon ..."1167 IDENT@1636..1637 "k"
1081 WHITESPACE@1679..1680 " "1168 WHITESPACE@1637..1638 " "
1082 PLUS@1680..1681 "+"1169 IN_KW@1638..1640 "in"
1083 WHITESPACE@1681..1682 " "1170 WHITESPACE@1640..1641 " "
1084 EXPR_APPLY@1682..16951171 EXPR@1641..1662
1085 EXPR_INDEX@1682..16901172 EXPR_VAR@1641..1644
1086 EXPR_VAR@1682..16851173 NAME@1641..1644
1087 NAME@1682..16851174 IDENT@1641..1644 "std"
1088 IDENT@1682..1685 "std"1175 SUFFIX_INDEX@1644..1657
1089 DOT@1685..1686 "."1176 DOT@1644..1645 "."
1090 NAME@1686..16901177 NAME@1645..1657
1091 IDENT@1686..1690 "type"1178 IDENT@1645..1657 "objectFields"
1092 ARGS_DESC@1690..16951179 SUFFIX_APPLY@1657..1662
1093 L_PAREN@1690..1691 "("1180 ARGS_DESC@1657..1662
1094 ARG@1691..16941181 L_PAREN@1657..1658 "("
1095 EXPR_VAR@1691..16941182 ARG@1658..1661
1096 NAME@1691..16941183 EXPR@1658..1661
1097 IDENT@1691..1694 "obj"1184 EXPR_VAR@1658..1661
1098 R_PAREN@1694..1695 ")"1185 NAME@1658..1661
1099 R_PAREN@1695..1696 ")"1186 IDENT@1658..1661 "obj"
1100 WHITESPACE@1696..1701 "\n "1187 R_PAREN@1661..1662 ")"
1101 ELSE_KW@1701..1705 "else"1188 WHITESPACE@1662..1663 " "
1102 WHITESPACE@1705..1712 "\n "1189 R_BRACE@1663..1664 "}"
1103 FALSE_EXPR@1712..17671190 COMMA@1664..1665 ","
1104 EXPR_OBJECT@1712..17671191 WHITESPACE@1665..1669 "\n\n "
1105 OBJ_BODY_COMP@1712..17671192 MEMBER_FIELD_METHOD@1669..1712
1106 L_BRACE@1712..1713 "{"1193 FIELD_NAME_FIXED@1669..1674
1107 WHITESPACE@1713..1714 " "1194 NAME@1669..1674
1108 MEMBER_FIELD_NORMAL@1714..17341195 IDENT@1669..1674 "lines"
1109 FIELD_NAME_DYNAMIC@1714..17171196 PARAMS_DESC@1674..1679
1110 L_BRACK@1714..1715 "["1197 L_PAREN@1674..1675 "("
1111 EXPR_VAR@1715..17161198 PARAM@1675..1678
1112 NAME@1715..17161199 DESTRUCT_FULL@1675..1678
1113 IDENT@1715..1716 "k"1200 NAME@1675..1678
1114 R_BRACK@1716..1717 "]"1201 IDENT@1675..1678 "arr"
1115 COLON@1717..1718 ":"1202 R_PAREN@1678..1679 ")"
1116 WHITESPACE@1718..1719 " "1203 COLONCOLON@1679..1681 "::"
1117 EXPR_APPLY@1719..17341204 WHITESPACE@1681..1686 "\n "
1118 EXPR_VAR@1719..17231205 EXPR@1686..1712
1119 NAME@1719..17231206 EXPR_VAR@1686..1689
1120 IDENT@1719..1723 "func"1207 NAME@1686..1689
1121 ARGS_DESC@1723..17341208 IDENT@1686..1689 "std"
1122 L_PAREN@1723..1724 "("1209 SUFFIX_INDEX@1689..1694
1123 ARG@1724..17251210 DOT@1689..1690 "."
1124 EXPR_VAR@1724..17251211 NAME@1690..1694
1125 NAME@1724..17251212 IDENT@1690..1694 "join"
1126 IDENT@1724..1725 "k"1213 SUFFIX_APPLY@1694..1712
1127 COMMA@1725..1726 ","1214 ARGS_DESC@1694..1712
1128 WHITESPACE@1726..1727 " "1215 L_PAREN@1694..1695 "("
1129 ARG@1727..17331216 ARG@1695..1699
1130 EXPR_INDEX_EXPR@1727..17331217 EXPR@1695..1699
1131 LHS_EXPR@1727..17301218 EXPR_STRING@1695..1699
1132 EXPR_VAR@1727..17301219 STRING_SINGLE@1695..1699 "'\\n'"
1133 NAME@1727..17301220 COMMA@1699..1700 ","
1134 IDENT@1727..1730 "obj"1221 WHITESPACE@1700..1701 " "
1135 L_BRACK@1730..1731 "["1222 ARG@1701..1711
1136 EXPR_VAR@1731..17321223 EXPR@1701..1711
1137 NAME@1731..17321224 EXPR_BINARY@1701..1711
1138 IDENT@1731..1732 "k"1225 EXPR@1701..1704
1139 R_BRACK@1732..1733 "]"1226 EXPR_VAR@1701..1704
1140 R_PAREN@1733..1734 ")"1227 NAME@1701..1704
1141 WHITESPACE@1734..1735 " "1228 IDENT@1701..1704 "arr"
1142 FOR_SPEC@1735..17651229 WHITESPACE@1704..1705 " "
1143 FOR_KW@1735..1738 "for"1230 PLUS@1705..1706 "+"
1144 WHITESPACE@1738..1739 " "1231 WHITESPACE@1706..1707 " "
1145 NAME@1739..17401232 EXPR@1707..1711
1146 IDENT@1739..1740 "k"1233 EXPR_ARRAY@1707..1711
1147 WHITESPACE@1740..1741 " "1234 L_BRACK@1707..1708 "["
1148 IN_KW@1741..1743 "in"1235 EXPR@1708..1710
1149 WHITESPACE@1743..1744 " "1236 EXPR_STRING@1708..1710
1150 EXPR_APPLY@1744..17651237 STRING_SINGLE@1708..1710 "''"
1151 EXPR_INDEX@1744..17601238 R_BRACK@1710..1711 "]"
1152 EXPR_VAR@1744..17471239 R_PAREN@1711..1712 ")"
1153 NAME@1744..17471240 COMMA@1712..1713 ","
1154 IDENT@1744..1747 "std"1241 WHITESPACE@1713..1717 "\n\n "
1155 DOT@1747..1748 "."1242 MEMBER_FIELD_METHOD@1717..1929
1156 NAME@1748..17601243 FIELD_NAME_FIXED@1717..1725
1157 IDENT@1748..1760 "objectFields"1244 NAME@1717..1725
1158 ARGS_DESC@1760..17651245 IDENT@1717..1725 "deepJoin"
1159 L_PAREN@1760..1761 "("1246 PARAMS_DESC@1725..1730
1160 ARG@1761..17641247 L_PAREN@1725..1726 "("
1161 EXPR_VAR@1761..17641248 PARAM@1726..1729
1162 NAME@1761..17641249 DESTRUCT_FULL@1726..1729
1163 IDENT@1761..1764 "obj"1250 NAME@1726..1729
1164 R_PAREN@1764..1765 ")"1251 IDENT@1726..1729 "arr"
1165 WHITESPACE@1765..1766 " "1252 R_PAREN@1729..1730 ")"
1166 R_BRACE@1766..1767 "}"1253 COLONCOLON@1730..1732 "::"
1167 COMMA@1767..1768 ","1254 WHITESPACE@1732..1737 "\n "
1168 WHITESPACE@1768..1772 "\n\n "1255 EXPR@1737..1929
1169 MEMBER_FIELD_METHOD@1772..18151256 EXPR_IF_THEN_ELSE@1737..1929
1170 FIELD_NAME_FIXED@1772..17771257 IF_KW@1737..1739 "if"
1171 NAME@1772..17771258 WHITESPACE@1739..1740 " "
1172 IDENT@1772..1777 "lines"1259 EXPR@1740..1757
1173 PARAMS_DESC@1777..17821260 EXPR_VAR@1740..1743
1174 L_PAREN@1777..1778 "("1261 NAME@1740..1743
1175 PARAM@1778..17811262 IDENT@1740..1743 "std"
1176 DESTRUCT_FULL@1778..17811263 SUFFIX_INDEX@1743..1752
1177 NAME@1778..17811264 DOT@1743..1744 "."
1178 IDENT@1778..1781 "arr"1265 NAME@1744..1752
1179 R_PAREN@1781..1782 ")"1266 IDENT@1744..1752 "isString"
1180 COLONCOLON@1782..1784 "::"1267 SUFFIX_APPLY@1752..1757
1181 WHITESPACE@1784..1789 "\n "1268 ARGS_DESC@1752..1757
1182 EXPR_APPLY@1789..18151269 L_PAREN@1752..1753 "("
1183 EXPR_INDEX@1789..17971270 ARG@1753..1756
1184 EXPR_VAR@1789..17921271 EXPR@1753..1756
1185 NAME@1789..17921272 EXPR_VAR@1753..1756
1186 IDENT@1789..1792 "std"1273 NAME@1753..1756
1187 DOT@1792..1793 "."1274 IDENT@1753..1756 "arr"
1188 NAME@1793..17971275 R_PAREN@1756..1757 ")"
1189 IDENT@1793..1797 "join"1276 WHITESPACE@1757..1758 " "
1190 ARGS_DESC@1797..18151277 THEN_KW@1758..1762 "then"
1191 L_PAREN@1797..1798 "("1278 WHITESPACE@1762..1769 "\n "
1192 ARG@1798..18021279 TRUE_EXPR@1769..1772
1193 EXPR_STRING@1798..18021280 EXPR@1769..1772
1194 STRING_SINGLE@1798..1802 "'\\n'"1281 EXPR_VAR@1769..1772
1195 COMMA@1802..1803 ","1282 NAME@1769..1772
1196 WHITESPACE@1803..1804 " "1283 IDENT@1769..1772 "arr"
1197 ARG@1804..18141284 WHITESPACE@1772..1777 "\n "
1198 EXPR_BINARY@1804..18141285 ELSE_KW@1777..1781 "else"
1199 LHS_EXPR@1804..18071286 WHITESPACE@1781..1782 " "
1200 EXPR_VAR@1804..18071287 FALSE_EXPR@1782..1929
1201 NAME@1804..18071288 EXPR@1782..1929
1202 IDENT@1804..1807 "arr"1289 EXPR_IF_THEN_ELSE@1782..1929
1203 WHITESPACE@1807..1808 " "1290 IF_KW@1782..1784 "if"
1204 PLUS@1808..1809 "+"1291 WHITESPACE@1784..1785 " "
1205 WHITESPACE@1809..1810 " "1292 EXPR@1785..1801
1206 EXPR_ARRAY@1810..18141293 EXPR_VAR@1785..1788
1207 L_BRACK@1810..1811 "["1294 NAME@1785..1788
1208 EXPR_STRING@1811..18131295 IDENT@1785..1788 "std"
1209 STRING_SINGLE@1811..1813 "''"1296 SUFFIX_INDEX@1788..1796
1210 R_BRACK@1813..1814 "]"1297 DOT@1788..1789 "."
1211 R_PAREN@1814..1815 ")"1298 NAME@1789..1796
1212 COMMA@1815..1816 ","1299 IDENT@1789..1796 "isArray"
1213 WHITESPACE@1816..1820 "\n\n "1300 SUFFIX_APPLY@1796..1801
1214 MEMBER_FIELD_METHOD@1820..20321301 ARGS_DESC@1796..1801
1215 FIELD_NAME_FIXED@1820..18281302 L_PAREN@1796..1797 "("
1216 NAME@1820..18281303 ARG@1797..1800
1217 IDENT@1820..1828 "deepJoin"1304 EXPR@1797..1800
1218 PARAMS_DESC@1828..18331305 EXPR_VAR@1797..1800
1219 L_PAREN@1828..1829 "("1306 NAME@1797..1800
1220 PARAM@1829..18321307 IDENT@1797..1800 "arr"
1221 DESTRUCT_FULL@1829..18321308 R_PAREN@1800..1801 ")"
1222 NAME@1829..18321309 WHITESPACE@1801..1802 " "
1223 IDENT@1829..1832 "arr"1310 THEN_KW@1802..1806 "then"
1224 R_PAREN@1832..1833 ")"1311 WHITESPACE@1806..1813 "\n "
1225 COLONCOLON@1833..1835 "::"1312 TRUE_EXPR@1813..1857
1226 WHITESPACE@1835..1840 "\n "1313 EXPR@1813..1857
1227 EXPR_IF_THEN_ELSE@1840..20321314 EXPR_VAR@1813..1816
1228 IF_KW@1840..1842 "if"1315 NAME@1813..1816
1229 WHITESPACE@1842..1843 " "1316 IDENT@1813..1816 "std"
1230 EXPR_APPLY@1843..18601317 SUFFIX_INDEX@1816..1821
1231 EXPR_INDEX@1843..18551318 DOT@1816..1817 "."
1232 EXPR_VAR@1843..18461319 NAME@1817..1821
1233 NAME@1843..18461320 IDENT@1817..1821 "join"
1234 IDENT@1843..1846 "std"1321 SUFFIX_APPLY@1821..1857
1235 DOT@1846..1847 "."1322 ARGS_DESC@1821..1857
1236 NAME@1847..18551323 L_PAREN@1821..1822 "("
1237 IDENT@1847..1855 "isString"1324 ARG@1822..1824
1238 ARGS_DESC@1855..18601325 EXPR@1822..1824
1239 L_PAREN@1855..1856 "("1326 EXPR_STRING@1822..1824
1240 ARG@1856..18591327 STRING_SINGLE@1822..1824 "''"
1241 EXPR_VAR@1856..18591328 COMMA@1824..1825 ","
1242 NAME@1856..18591329 WHITESPACE@1825..1826 " "
1243 IDENT@1856..1859 "arr"1330 ARG@1826..1856
1244 R_PAREN@1859..1860 ")"1331 EXPR@1826..1856
1245 WHITESPACE@1860..1861 " "1332 EXPR_ARRAY_COMP@1826..1856
1246 THEN_KW@1861..1865 "then"1333 L_BRACK@1826..1827 "["
1247 WHITESPACE@1865..1872 "\n "1334 EXPR@1827..1842
1248 TRUE_EXPR@1872..18751335 EXPR_VAR@1827..1830
1249 EXPR_VAR@1872..18751336 NAME@1827..1830
1250 NAME@1872..18751337 IDENT@1827..1830 "std"
1251 IDENT@1872..1875 "arr"1338 SUFFIX_INDEX@1830..1839
1252 WHITESPACE@1875..1880 "\n "1339 DOT@1830..1831 "."
1253 ELSE_KW@1880..1884 "else"1340 NAME@1831..1839
1254 WHITESPACE@1884..1885 " "1341 IDENT@1831..1839 "deepJoin"
1255 FALSE_EXPR@1885..20321342 SUFFIX_APPLY@1839..1842
1256 EXPR_IF_THEN_ELSE@1885..20321343 ARGS_DESC@1839..1842
1257 IF_KW@1885..1887 "if"1344 L_PAREN@1839..1840 "("
1258 WHITESPACE@1887..1888 " "1345 ARG@1840..1841
1259 EXPR_APPLY@1888..19041346 EXPR@1840..1841
1260 EXPR_INDEX@1888..18991347 EXPR_VAR@1840..1841
1261 EXPR_VAR@1888..18911348 NAME@1840..1841
1262 NAME@1888..18911349 IDENT@1840..1841 "x"
1263 IDENT@1888..1891 "std"1350 R_PAREN@1841..1842 ")"
1264 DOT@1891..1892 "."1351 WHITESPACE@1842..1843 " "
1265 NAME@1892..18991352 FOR_SPEC@1843..1855
1266 IDENT@1892..1899 "isArray"1353 FOR_KW@1843..1846 "for"
1267 ARGS_DESC@1899..19041354 WHITESPACE@1846..1847 " "
1268 L_PAREN@1899..1900 "("1355 DESTRUCT_FULL@1847..1848
1269 ARG@1900..19031356 NAME@1847..1848
1270 EXPR_VAR@1900..19031357 IDENT@1847..1848 "x"
1271 NAME@1900..19031358 WHITESPACE@1848..1849 " "
1272 IDENT@1900..1903 "arr"1359 IN_KW@1849..1851 "in"
1273 R_PAREN@1903..1904 ")"1360 WHITESPACE@1851..1852 " "
1274 WHITESPACE@1904..1905 " "1361 EXPR@1852..1855
1275 THEN_KW@1905..1909 "then"1362 EXPR_VAR@1852..1855
1276 WHITESPACE@1909..1916 "\n "1363 NAME@1852..1855
1277 TRUE_EXPR@1916..19601364 IDENT@1852..1855 "arr"
1278 EXPR_APPLY@1916..19601365 R_BRACK@1855..1856 "]"
1279 EXPR_INDEX@1916..19241366 R_PAREN@1856..1857 ")"
1280 EXPR_VAR@1916..19191367 WHITESPACE@1857..1862 "\n "
1281 NAME@1916..19191368 ELSE_KW@1862..1866 "else"
1282 IDENT@1916..1919 "std"1369 WHITESPACE@1866..1873 "\n "
1283 DOT@1919..1920 "."1370 FALSE_EXPR@1873..1929
1284 NAME@1920..19241371 EXPR@1873..1929
1285 IDENT@1920..1924 "join"1372 EXPR_ERROR@1873..1929
1286 ARGS_DESC@1924..19601373 ERROR_KW@1873..1878 "error"
1287 L_PAREN@1924..1925 "("1374 WHITESPACE@1878..1879 " "
1288 ARG@1925..19271375 EXPR@1879..1929
1289 EXPR_STRING@1925..19271376 EXPR_BINARY@1879..1929
1290 STRING_SINGLE@1925..1927 "''"1377 EXPR@1879..1913
1291 COMMA@1927..1928 ","1378 EXPR_STRING@1879..1913
1292 WHITESPACE@1928..1929 " "1379 STRING_SINGLE@1879..1913 "'Expected string or a ..."
1293 ARG@1929..19591380 WHITESPACE@1913..1914 " "
1294 EXPR_ARRAY_COMP@1929..19591381 MODULO@1914..1915 "%"
1295 L_BRACK@1929..1930 "["1382 WHITESPACE@1915..1916 " "
1296 EXPR_APPLY@1930..19451383 EXPR@1916..1929
1297 EXPR_INDEX@1930..19421384 EXPR_VAR@1916..1919
1298 EXPR_VAR@1930..19331385 NAME@1916..1919
1299 NAME@1930..19331386 IDENT@1916..1919 "std"
1300 IDENT@1930..1933 "std"1387 SUFFIX_INDEX@1919..1924
1301 DOT@1933..1934 "."1388 DOT@1919..1920 "."
1302 NAME@1934..19421389 NAME@1920..1924
1303 IDENT@1934..1942 "deepJoin"1390 IDENT@1920..1924 "type"
1304 ARGS_DESC@1942..19451391 SUFFIX_APPLY@1924..1929
1305 L_PAREN@1942..1943 "("1392 ARGS_DESC@1924..1929
1306 ARG@1943..19441393 L_PAREN@1924..1925 "("
1307 EXPR_VAR@1943..19441394 ARG@1925..1928
1308 NAME@1943..19441395 EXPR@1925..1928
1309 IDENT@1943..1944 "x"1396 EXPR_VAR@1925..1928
1310 R_PAREN@1944..1945 ")"1397 NAME@1925..1928
1311 WHITESPACE@1945..1946 " "1398 IDENT@1925..1928 "arr"
1312 FOR_SPEC@1946..19581399 R_PAREN@1928..1929 ")"
1313 FOR_KW@1946..1949 "for"1400 COMMA@1929..1930 ","
1314 WHITESPACE@1949..1950 " "1401 WHITESPACE@1930..1934 "\n\n "
1315 NAME@1950..19511402 MEMBER_FIELD_METHOD@1934..2042
1316 IDENT@1950..1951 "x"1403 FIELD_NAME_FIXED@1934..1945
1317 WHITESPACE@1951..1952 " "1404 NAME@1934..1945
1318 IN_KW@1952..1954 "in"1405 IDENT@1934..1945 "assertEqual"
1319 WHITESPACE@1954..1955 " "1406 PARAMS_DESC@1945..1951
1320 EXPR_VAR@1955..19581407 L_PAREN@1945..1946 "("
1321 NAME@1955..19581408 PARAM@1946..1947
1322 IDENT@1955..1958 "arr"1409 DESTRUCT_FULL@1946..1947
1323 R_BRACK@1958..1959 "]"1410 NAME@1946..1947
1324 R_PAREN@1959..1960 ")"1411 IDENT@1946..1947 "a"
1325 WHITESPACE@1960..1965 "\n "1412 COMMA@1947..1948 ","
1326 ELSE_KW@1965..1969 "else"1413 WHITESPACE@1948..1949 " "
1327 WHITESPACE@1969..1976 "\n "1414 PARAM@1949..1950
1328 FALSE_EXPR@1976..20321415 DESTRUCT_FULL@1949..1950
1329 EXPR_ERROR@1976..20321416 NAME@1949..1950
1330 ERROR_KW@1976..1981 "error"1417 IDENT@1949..1950 "b"
1331 WHITESPACE@1981..1982 " "1418 R_PAREN@1950..1951 ")"
1332 EXPR_BINARY@1982..20321419 COLONCOLON@1951..1953 "::"
1333 LHS_EXPR@1982..20161420 WHITESPACE@1953..1958 "\n "
1334 EXPR_STRING@1982..20161421 EXPR@1958..2042
1335 STRING_SINGLE@1982..2016 "'Expected string or a ..."1422 EXPR_IF_THEN_ELSE@1958..2042
1336 WHITESPACE@2016..2017 " "1423 IF_KW@1958..1960 "if"
1337 MODULO@2017..2018 "%"1424 WHITESPACE@1960..1961 " "
1338 WHITESPACE@2018..2019 " "1425 EXPR@1961..1967
1339 EXPR_APPLY@2019..20321426 EXPR_BINARY@1961..1967
1340 EXPR_INDEX@2019..20271427 EXPR@1961..1962
1341 EXPR_VAR@2019..20221428 EXPR_VAR@1961..1962
1342 NAME@2019..20221429 NAME@1961..1962
1343 IDENT@2019..2022 "std"1430 IDENT@1961..1962 "a"
1344 DOT@2022..2023 "."1431 WHITESPACE@1962..1963 " "
1345 NAME@2023..20271432 EQ@1963..1965 "=="
1346 IDENT@2023..2027 "type"1433 WHITESPACE@1965..1966 " "
1347 ARGS_DESC@2027..20321434 EXPR@1966..1967
1348 L_PAREN@2027..2028 "("1435 EXPR_VAR@1966..1967
1349 ARG@2028..20311436 NAME@1966..1967
1350 EXPR_VAR@2028..20311437 IDENT@1966..1967 "b"
1351 NAME@2028..20311438 WHITESPACE@1967..1968 " "
1352 IDENT@2028..2031 "arr"1439 THEN_KW@1968..1972 "then"
1353 R_PAREN@2031..2032 ")"1440 WHITESPACE@1972..1979 "\n "
1354 COMMA@2032..2033 ","1441 TRUE_EXPR@1979..1983
1355 WHITESPACE@2033..2037 "\n\n "1442 EXPR@1979..1983
1356 MEMBER_FIELD_METHOD@2037..25121443 EXPR_LITERAL@1979..1983
1357 FIELD_NAME_FIXED@2037..20461444 TRUE_KW@1979..1983 "true"
1358 NAME@2037..20461445 WHITESPACE@1983..1988 "\n "
1359 IDENT@2037..2046 "filterMap"1446 ELSE_KW@1988..1992 "else"
1360 PARAMS_DESC@2046..20741447 WHITESPACE@1992..1999 "\n "
1361 L_PAREN@2046..2047 "("1448 FALSE_EXPR@1999..2042
1362 PARAM@2047..20581449 EXPR@1999..2042
1363 DESTRUCT_FULL@2047..20581450 EXPR_ERROR@1999..2042
1364 NAME@2047..20581451 ERROR_KW@1999..2004 "error"
1365 IDENT@2047..2058 "filter_func"1452 WHITESPACE@2004..2005 " "
1366 COMMA@2058..2059 ","1453 EXPR@2005..2042
1367 WHITESPACE@2059..2060 " "1454 EXPR_BINARY@2005..2042
1368 PARAM@2060..20681455 EXPR@2005..2038
1369 DESTRUCT_FULL@2060..20681456 EXPR_BINARY@2005..2038
1370 NAME@2060..20681457 EXPR@2005..2029
1371 IDENT@2060..2068 "map_func"1458 EXPR_BINARY@2005..2029
1372 COMMA@2068..2069 ","1459 EXPR@2005..2025
1373 WHITESPACE@2069..2070 " "1460 EXPR_STRING@2005..2025
1374 PARAM@2070..20731461 STRING_SINGLE@2005..2025 "'Assertion failed. '"
1375 DESTRUCT_FULL@2070..20731462 WHITESPACE@2025..2026 " "
1376 NAME@2070..20731463 PLUS@2026..2027 "+"
1377 IDENT@2070..2073 "arr"1464 WHITESPACE@2027..2028 " "
1378 R_PAREN@2073..2074 ")"1465 EXPR@2028..2029
1379 COLONCOLON@2074..2076 "::"1466 EXPR_VAR@2028..2029
1380 WHITESPACE@2076..2081 "\n "1467 NAME@2028..2029
1381 EXPR_IF_THEN_ELSE@2081..25121468 IDENT@2028..2029 "a"
1382 IF_KW@2081..2083 "if"1469 WHITESPACE@2029..2030 " "
1383 WHITESPACE@2083..2084 " "1470 PLUS@2030..2031 "+"
1384 EXPR_UNARY@2084..21121471 WHITESPACE@2031..2032 " "
1385 NOT@2084..2085 "!"1472 EXPR@2032..2038
1386 EXPR_APPLY@2085..21121473 EXPR_STRING@2032..2038
1387 EXPR_INDEX@2085..20991474 STRING_SINGLE@2032..2038 "' != '"
1388 EXPR_VAR@2085..20881475 WHITESPACE@2038..2039 " "
1389 NAME@2085..20881476 PLUS@2039..2040 "+"
1390 IDENT@2085..2088 "std"1477 WHITESPACE@2040..2041 " "
1391 DOT@2088..2089 "."1478 EXPR@2041..2042
1392 NAME@2089..20991479 EXPR_VAR@2041..2042
1393 IDENT@2089..2099 "isFunction"1480 NAME@2041..2042
1394 ARGS_DESC@2099..21121481 IDENT@2041..2042 "b"
1395 L_PAREN@2099..2100 "("1482 COMMA@2042..2043 ","
1396 ARG@2100..21111483 WHITESPACE@2043..2047 "\n\n "
1397 EXPR_VAR@2100..21111484 MEMBER_FIELD_METHOD@2047..2149
1398 NAME@2100..21111485 FIELD_NAME_FIXED@2047..2052
1399 IDENT@2100..2111 "filter_func"1486 NAME@2047..2052
1400 R_PAREN@2111..2112 ")"1487 IDENT@2047..2052 "clamp"
1401 WHITESPACE@2112..2113 " "1488 PARAMS_DESC@2052..2071
1402 THEN_KW@2113..2117 "then"1489 L_PAREN@2052..2053 "("
1403 WHITESPACE@2117..2124 "\n "1490 PARAM@2053..2054
1404 TRUE_EXPR@2124..22061491 DESTRUCT_FULL@2053..2054
1405 EXPR_ERROR@2124..22061492 NAME@2053..2054
1406 ERROR_KW@2124..2129 "error"1493 IDENT@2053..2054 "x"
1407 WHITESPACE@2129..2130 " "1494 COMMA@2054..2055 ","
1408 EXPR_PARENED@2130..22061495 WHITESPACE@2055..2056 " "
1409 L_PAREN@2130..2131 "("1496 PARAM@2056..2062
1410 EXPR_BINARY@2131..22051497 DESTRUCT_FULL@2056..2062
1411 LHS_EXPR@2131..21811498 NAME@2056..2062
1412 EXPR_STRING@2131..21811499 IDENT@2056..2062 "minVal"
1413 STRING_SINGLE@2131..2181 "'std.filterMap first ..."1500 COMMA@2062..2063 ","
1414 WHITESPACE@2181..2182 " "1501 WHITESPACE@2063..2064 " "
1415 PLUS@2182..2183 "+"1502 PARAM@2064..2070
1416 WHITESPACE@2183..2184 " "1503 DESTRUCT_FULL@2064..2070
1417 EXPR_APPLY@2184..22051504 NAME@2064..2070
1418 EXPR_INDEX@2184..21921505 IDENT@2064..2070 "maxVal"
1419 EXPR_VAR@2184..21871506 R_PAREN@2070..2071 ")"
1420 NAME@2184..21871507 COLONCOLON@2071..2073 "::"
1421 IDENT@2184..2187 "std"1508 WHITESPACE@2073..2078 "\n "
1422 DOT@2187..2188 "."1509 EXPR@2078..2149
1423 NAME@2188..21921510 EXPR_IF_THEN_ELSE@2078..2149
1424 IDENT@2188..2192 "type"1511 IF_KW@2078..2080 "if"
1425 ARGS_DESC@2192..22051512 WHITESPACE@2080..2081 " "
1426 L_PAREN@2192..2193 "("1513 EXPR@2081..2091
1427 ARG@2193..22041514 EXPR_BINARY@2081..2091
1428 EXPR_VAR@2193..22041515 EXPR@2081..2082
1429 NAME@2193..22041516 EXPR_VAR@2081..2082
1430 IDENT@2193..2204 "filter_func"1517 NAME@2081..2082
1431 R_PAREN@2204..2205 ")"1518 IDENT@2081..2082 "x"
1432 R_PAREN@2205..2206 ")"1519 WHITESPACE@2082..2083 " "
1433 WHITESPACE@2206..2211 "\n "1520 LT@2083..2084 "<"
1434 ELSE_KW@2211..2215 "else"1521 WHITESPACE@2084..2085 " "
1435 WHITESPACE@2215..2216 " "1522 EXPR@2085..2091
1436 FALSE_EXPR@2216..25121523 EXPR_VAR@2085..2091
1437 EXPR_IF_THEN_ELSE@2216..25121524 NAME@2085..2091
1438 IF_KW@2216..2218 "if"1525 IDENT@2085..2091 "minVal"
1439 WHITESPACE@2218..2219 " "1526 WHITESPACE@2091..2092 " "
1440 EXPR_UNARY@2219..22441527 THEN_KW@2092..2096 "then"
1441 NOT@2219..2220 "!"1528 WHITESPACE@2096..2097 " "
1442 EXPR_APPLY@2220..22441529 TRUE_EXPR@2097..2103
1443 EXPR_INDEX@2220..22341530 EXPR@2097..2103
1444 EXPR_VAR@2220..22231531 EXPR_VAR@2097..2103
1445 NAME@2220..22231532 NAME@2097..2103
1446 IDENT@2220..2223 "std"1533 IDENT@2097..2103 "minVal"
1447 DOT@2223..2224 "."1534 WHITESPACE@2103..2108 "\n "
1448 NAME@2224..22341535 ELSE_KW@2108..2112 "else"
1449 IDENT@2224..2234 "isFunction"1536 WHITESPACE@2112..2113 " "
1450 ARGS_DESC@2234..22441537 FALSE_EXPR@2113..2149
1451 L_PAREN@2234..2235 "("1538 EXPR@2113..2149
1452 ARG@2235..22431539 EXPR_IF_THEN_ELSE@2113..2149
1453 EXPR_VAR@2235..22431540 IF_KW@2113..2115 "if"
1454 NAME@2235..22431541 WHITESPACE@2115..2116 " "
1455 IDENT@2235..2243 "map_func"1542 EXPR@2116..2126
1456 R_PAREN@2243..2244 ")"1543 EXPR_BINARY@2116..2126
1457 WHITESPACE@2244..2245 " "1544 EXPR@2116..2117
1458 THEN_KW@2245..2249 "then"1545 EXPR_VAR@2116..2117
1459 WHITESPACE@2249..2256 "\n "1546 NAME@2116..2117
1460 TRUE_EXPR@2256..23361547 IDENT@2116..2117 "x"
1461 EXPR_ERROR@2256..23361548 WHITESPACE@2117..2118 " "
1462 ERROR_KW@2256..2261 "error"1549 GT@2118..2119 ">"
1463 WHITESPACE@2261..2262 " "1550 WHITESPACE@2119..2120 " "
1464 EXPR_PARENED@2262..23361551 EXPR@2120..2126
1465 L_PAREN@2262..2263 "("1552 EXPR_VAR@2120..2126
1466 EXPR_BINARY@2263..23351553 NAME@2120..2126
1467 LHS_EXPR@2263..23141554 IDENT@2120..2126 "maxVal"
1468 EXPR_STRING@2263..23141555 WHITESPACE@2126..2127 " "
1469 STRING_SINGLE@2263..2314 "'std.filterMap second ..."1556 THEN_KW@2127..2131 "then"
1470 WHITESPACE@2314..2315 " "1557 WHITESPACE@2131..2132 " "
1471 PLUS@2315..2316 "+"1558 TRUE_EXPR@2132..2138
1472 WHITESPACE@2316..2317 " "1559 EXPR@2132..2138
1473 EXPR_APPLY@2317..23351560 EXPR_VAR@2132..2138
1474 EXPR_INDEX@2317..23251561 NAME@2132..2138
1475 EXPR_VAR@2317..23201562 IDENT@2132..2138 "maxVal"
1476 NAME@2317..23201563 WHITESPACE@2138..2143 "\n "
1477 IDENT@2317..2320 "std"1564 ELSE_KW@2143..2147 "else"
1478 DOT@2320..2321 "."1565 WHITESPACE@2147..2148 " "
1479 NAME@2321..23251566 FALSE_EXPR@2148..2149
1480 IDENT@2321..2325 "type"1567 EXPR@2148..2149
1481 ARGS_DESC@2325..23351568 EXPR_VAR@2148..2149
1482 L_PAREN@2325..2326 "("1569 NAME@2148..2149
1483 ARG@2326..23341570 IDENT@2148..2149 "x"
1484 EXPR_VAR@2326..23341571 COMMA@2149..2150 ","
1485 NAME@2326..23341572 WHITESPACE@2150..2154 "\n\n "
1486 IDENT@2326..2334 "map_func"1573 MEMBER_FIELD_METHOD@2154..2840
1487 R_PAREN@2334..2335 ")"1574 FIELD_NAME_FIXED@2154..2165
1488 R_PAREN@2335..2336 ")"1575 NAME@2154..2165
1489 WHITESPACE@2336..2341 "\n "1576 IDENT@2154..2165 "manifestIni"
1490 ELSE_KW@2341..2345 "else"1577 PARAMS_DESC@2165..2170
1491 WHITESPACE@2345..2346 " "1578 L_PAREN@2165..2166 "("
1492 FALSE_EXPR@2346..25121579 PARAM@2166..2169
1493 EXPR_IF_THEN_ELSE@2346..25121580 DESTRUCT_FULL@2166..2169
1494 IF_KW@2346..2348 "if"1581 NAME@2166..2169
1495 WHITESPACE@2348..2349 " "1582 IDENT@2166..2169 "ini"
1496 EXPR_UNARY@2349..23661583 R_PAREN@2169..2170 ")"
1497 NOT@2349..2350 "!"1584 COLONCOLON@2170..2172 "::"
1498 EXPR_APPLY@2350..23661585 WHITESPACE@2172..2177 "\n "
1499 EXPR_INDEX@2350..23611586 EXPR@2177..2840
1500 EXPR_VAR@2350..23531587 STMT_LOCAL@2177..2481
1501 NAME@2350..23531588 LOCAL_KW@2177..2182 "local"
1502 IDENT@2350..2353 "std"1589 WHITESPACE@2182..2183 " "
1503 DOT@2353..2354 "."1590 BIND_FUNCTION@2183..2480
1504 NAME@2354..23611591 NAME@2183..2193
1505 IDENT@2354..2361 "isArray"1592 IDENT@2183..2193 "body_lines"
1506 ARGS_DESC@2361..23661593 PARAMS_DESC@2193..2199
1507 L_PAREN@2361..2362 "("1594 L_PAREN@2193..2194 "("
1508 ARG@2362..23651595 PARAM@2194..2198
1509 EXPR_VAR@2362..23651596 DESTRUCT_FULL@2194..2198
1510 NAME@2362..23651597 NAME@2194..2198
1511 IDENT@2362..2365 "arr"1598 IDENT@2194..2198 "body"
1512 R_PAREN@2365..2366 ")"1599 R_PAREN@2198..2199 ")"
1513 WHITESPACE@2366..2367 " "1600 WHITESPACE@2199..2200 " "
1514 THEN_KW@2367..2371 "then"1601 ASSIGN@2200..2201 "="
1515 WHITESPACE@2371..2378 "\n "1602 WHITESPACE@2201..2208 "\n "
1516 TRUE_EXPR@2378..24491603 EXPR@2208..2480
1517 EXPR_ERROR@2378..24491604 EXPR_VAR@2208..2211
1518 ERROR_KW@2378..2383 "error"1605 NAME@2208..2211
1519 WHITESPACE@2383..2384 " "1606 IDENT@2208..2211 "std"
1520 EXPR_PARENED@2384..24491607 SUFFIX_INDEX@2211..2216
1521 L_PAREN@2384..2385 "("1608 DOT@2211..2212 "."
1522 EXPR_BINARY@2385..24481609 NAME@2212..2216
1523 LHS_EXPR@2385..24321610 IDENT@2212..2216 "join"
1524 EXPR_STRING@2385..24321611 SUFFIX_APPLY@2216..2480
1525 STRING_SINGLE@2385..2432 "'std.filterMap third ..."1612 ARGS_DESC@2216..2480
1526 WHITESPACE@2432..2433 " "1613 L_PAREN@2216..2217 "("
1527 PLUS@2433..2434 "+"1614 ARG@2217..2219
1528 WHITESPACE@2434..2435 " "1615 EXPR@2217..2219
1529 EXPR_APPLY@2435..24481616 EXPR_ARRAY@2217..2219
1530 EXPR_INDEX@2435..24431617 L_BRACK@2217..2218 "["
1531 EXPR_VAR@2435..24381618 R_BRACK@2218..2219 "]"
1532 NAME@2435..24381619 COMMA@2219..2220 ","
1533 IDENT@2435..2438 "std"1620 WHITESPACE@2220..2221 " "
1534 DOT@2438..2439 "."1621 ARG@2221..2479
1535 NAME@2439..24431622 EXPR@2221..2479
1536 IDENT@2439..2443 "type"1623 EXPR_ARRAY_COMP@2221..2479
1537 ARGS_DESC@2443..24481624 L_BRACK@2221..2222 "["
1538 L_PAREN@2443..2444 "("1625 WHITESPACE@2222..2231 "\n "
1539 ARG@2444..24471626 EXPR@2231..2430
1540 EXPR_VAR@2444..24471627 STMT_LOCAL@2231..2263
1541 NAME@2444..24471628 LOCAL_KW@2231..2236 "local"
1542 IDENT@2444..2447 "arr"1629 WHITESPACE@2236..2237 " "
1543 R_PAREN@2447..2448 ")"1630 BIND_DESTRUCT@2237..2262
1544 R_PAREN@2448..2449 ")"1631 DESTRUCT_FULL@2237..2252
1545 WHITESPACE@2449..2454 "\n "1632 NAME@2237..2252
1546 ELSE_KW@2454..2458 "else"1633 IDENT@2237..2252 "value_or_values"
1547 WHITESPACE@2458..2465 "\n "1634 WHITESPACE@2252..2253 " "
1548 FALSE_EXPR@2465..25121635 ASSIGN@2253..2254 "="
1549 EXPR_APPLY@2465..25121636 WHITESPACE@2254..2255 " "
1550 EXPR_INDEX@2465..24721637 EXPR@2255..2262
1551 EXPR_VAR@2465..24681638 EXPR_VAR@2255..2259
1552 NAME@2465..24681639 NAME@2255..2259
1553 IDENT@2465..2468 "std"1640 IDENT@2255..2259 "body"
1554 DOT@2468..2469 "."1641 SUFFIX_INDEX_EXPR@2259..2262
1555 NAME@2469..24721642 L_BRACK@2259..2260 "["
1556 IDENT@2469..2472 "map"1643 EXPR@2260..2261
1557 ARGS_DESC@2472..25121644 EXPR_VAR@2260..2261
1558 L_PAREN@2472..2473 "("1645 NAME@2260..2261
1559 ARG@2473..24811646 IDENT@2260..2261 "k"
1560 EXPR_VAR@2473..24811647 R_BRACK@2261..2262 "]"
1561 NAME@2473..24811648 SEMI@2262..2263 ";"
1562 IDENT@2473..2481 "map_func"1649 WHITESPACE@2263..2272 "\n "
1563 COMMA@2481..2482 ","1650 EXPR_IF_THEN_ELSE@2272..2430
1564 WHITESPACE@2482..2483 " "1651 IF_KW@2272..2274 "if"
1565 ARG@2483..25111652 WHITESPACE@2274..2275 " "
1566 EXPR_APPLY@2483..25111653 EXPR@2275..2303
1567 EXPR_INDEX@2483..24931654 EXPR_VAR@2275..2278
1568 EXPR_VAR@2483..24861655 NAME@2275..2278
1569 NAME@2483..24861656 IDENT@2275..2278 "std"
1570 IDENT@2483..2486 "std"1657 SUFFIX_INDEX@2278..2286
1571 DOT@2486..2487 "."1658 DOT@2278..2279 "."
1572 NAME@2487..24931659 NAME@2279..2286
1573 IDENT@2487..2493 "filter"1660 IDENT@2279..2286 "isArray"
1574 ARGS_DESC@2493..25111661 SUFFIX_APPLY@2286..2303
1575 L_PAREN@2493..2494 "("1662 ARGS_DESC@2286..2303
1576 ARG@2494..25051663 L_PAREN@2286..2287 "("
1577 EXPR_VAR@2494..25051664 ARG@2287..2302
1578 NAME@2494..25051665 EXPR@2287..2302
1579 IDENT@2494..2505 "filter_func"1666 EXPR_VAR@2287..2302
1580 COMMA@2505..2506 ","1667 NAME@2287..2302
1581 WHITESPACE@2506..2507 " "1668 IDENT@2287..2302 "value_or_values"
1582 ARG@2507..25101669 R_PAREN@2302..2303 ")"
1583 EXPR_VAR@2507..25101670 WHITESPACE@2303..2304 " "
1584 NAME@2507..25101671 THEN_KW@2304..2308 "then"
1585 IDENT@2507..2510 "arr"1672 WHITESPACE@2308..2319 "\n "
1586 R_PAREN@2510..2511 ")"1673 TRUE_EXPR@2319..2372
1587 R_PAREN@2511..2512 ")"1674 EXPR@2319..2372
1588 COMMA@2512..2513 ","1675 EXPR_ARRAY_COMP@2319..2372
1589 WHITESPACE@2513..2517 "\n\n "1676 L_BRACK@2319..2320 "["
1590 MEMBER_FIELD_METHOD@2517..26251677 EXPR@2320..2342
1591 FIELD_NAME_FIXED@2517..25281678 EXPR_BINARY@2320..2342
1592 NAME@2517..25281679 EXPR@2320..2329
1593 IDENT@2517..2528 "assertEqual"1680 EXPR_STRING@2320..2329
1594 PARAMS_DESC@2528..25341681 STRING_SINGLE@2320..2329 "'%s = %s'"
1595 L_PAREN@2528..2529 "("1682 WHITESPACE@2329..2330 " "
1596 PARAM@2529..25301683 MODULO@2330..2331 "%"
1597 DESTRUCT_FULL@2529..25301684 WHITESPACE@2331..2332 " "
1598 NAME@2529..25301685 EXPR@2332..2342
1599 IDENT@2529..2530 "a"1686 EXPR_ARRAY@2332..2342
1600 COMMA@2530..2531 ","1687 L_BRACK@2332..2333 "["
1601 WHITESPACE@2531..2532 " "1688 EXPR@2333..2334
1602 PARAM@2532..25331689 EXPR_VAR@2333..2334
1603 DESTRUCT_FULL@2532..25331690 NAME@2333..2334
1604 NAME@2532..25331691 IDENT@2333..2334 "k"
1605 IDENT@2532..2533 "b"1692 COMMA@2334..2335 ","
1606 R_PAREN@2533..2534 ")"1693 WHITESPACE@2335..2336 " "
1607 COLONCOLON@2534..2536 "::"1694 EXPR@2336..2341
1608 WHITESPACE@2536..2541 "\n "1695 EXPR_VAR@2336..2341
1609 EXPR_IF_THEN_ELSE@2541..26251696 NAME@2336..2341
1610 IF_KW@2541..2543 "if"1697 IDENT@2336..2341 "value"
1611 WHITESPACE@2543..2544 " "1698 R_BRACK@2341..2342 "]"
1612 EXPR_BINARY@2544..25501699 WHITESPACE@2342..2343 " "
1613 LHS_EXPR@2544..25451700 FOR_SPEC@2343..2371
1614 EXPR_VAR@2544..25451701 FOR_KW@2343..2346 "for"
1615 NAME@2544..25451702 WHITESPACE@2346..2347 " "
1616 IDENT@2544..2545 "a"1703 DESTRUCT_FULL@2347..2352
1617 WHITESPACE@2545..2546 " "1704 NAME@2347..2352
1618 EQ@2546..2548 "=="1705 IDENT@2347..2352 "value"
1619 WHITESPACE@2548..2549 " "1706 WHITESPACE@2352..2353 " "
1620 EXPR_VAR@2549..25501707 IN_KW@2353..2355 "in"
1621 NAME@2549..25501708 WHITESPACE@2355..2356 " "
1622 IDENT@2549..2550 "b"1709 EXPR@2356..2371
1623 WHITESPACE@2550..2551 " "1710 EXPR_VAR@2356..2371
1624 THEN_KW@2551..2555 "then"1711 NAME@2356..2371
1625 WHITESPACE@2555..2562 "\n "1712 IDENT@2356..2371 "value_or_values"
1626 TRUE_EXPR@2562..25661713 R_BRACK@2371..2372 "]"
1627 EXPR_LITERAL@2562..25661714 WHITESPACE@2372..2381 "\n "
1628 TRUE_KW@2562..2566 "true"1715 ELSE_KW@2381..2385 "else"
1629 WHITESPACE@2566..2571 "\n "1716 WHITESPACE@2385..2396 "\n "
1630 ELSE_KW@2571..2575 "else"1717 FALSE_EXPR@2396..2430
1631 WHITESPACE@2575..2582 "\n "1718 EXPR@2396..2430
1632 FALSE_EXPR@2582..26251719 EXPR_ARRAY@2396..2430
1633 EXPR_ERROR@2582..26251720 L_BRACK@2396..2397 "["
1634 ERROR_KW@2582..2587 "error"1721 EXPR@2397..2429
1635 WHITESPACE@2587..2588 " "1722 EXPR_BINARY@2397..2429
1636 EXPR_BINARY@2588..26251723 EXPR@2397..2406
1637 LHS_EXPR@2588..26211724 EXPR_STRING@2397..2406
1638 EXPR_BINARY@2588..26211725 STRING_SINGLE@2397..2406 "'%s = %s'"
1639 LHS_EXPR@2588..26121726 WHITESPACE@2406..2407 " "
1640 EXPR_BINARY@2588..26121727 MODULO@2407..2408 "%"
1641 LHS_EXPR@2588..26081728 WHITESPACE@2408..2409 " "
1642 EXPR_STRING@2588..26081729 EXPR@2409..2429
1643 STRING_SINGLE@2588..2608 "'Assertion failed. '"1730 EXPR_ARRAY@2409..2429
1644 WHITESPACE@2608..2609 " "1731 L_BRACK@2409..2410 "["
1645 PLUS@2609..2610 "+"1732 EXPR@2410..2411
1646 WHITESPACE@2610..2611 " "1733 EXPR_VAR@2410..2411
1647 EXPR_VAR@2611..26121734 NAME@2410..2411
1648 NAME@2611..26121735 IDENT@2410..2411 "k"
1649 IDENT@2611..2612 "a"1736 COMMA@2411..2412 ","
1650 WHITESPACE@2612..2613 " "1737 WHITESPACE@2412..2413 " "
1651 PLUS@2613..2614 "+"1738 EXPR@2413..2428
1739 EXPR_VAR@2413..2428
1740 NAME@2413..2428
1741 IDENT@2413..2428 "value_or_values"
1742 R_BRACK@2428..2429 "]"
1743 R_BRACK@2429..2430 "]"
1744 WHITESPACE@2430..2440 "\n\n "
1745 FOR_SPEC@2440..2471
1746 FOR_KW@2440..2443 "for"
1747 WHITESPACE@2443..2444 " "
1748 DESTRUCT_FULL@2444..2445
1749 NAME@2444..2445
1750 IDENT@2444..2445 "k"
1751 WHITESPACE@2445..2446 " "
1752 IN_KW@2446..2448 "in"
1753 WHITESPACE@2448..2449 " "
1754 EXPR@2449..2471
1755 EXPR_VAR@2449..2452
1756 NAME@2449..2452
1757 IDENT@2449..2452 "std"
1758 SUFFIX_INDEX@2452..2465
1759 DOT@2452..2453 "."
1760 NAME@2453..2465
1761 IDENT@2453..2465 "objectFields"
1762 SUFFIX_APPLY@2465..2471
1763 ARGS_DESC@2465..2471
1764 L_PAREN@2465..2466 "("
1765 ARG@2466..2470
1766 EXPR@2466..2470
1767 EXPR_VAR@2466..2470
1768 NAME@2466..2470
1769 IDENT@2466..2470 "body"
1770 R_PAREN@2470..2471 ")"
1771 WHITESPACE@2471..2478 "\n "
1772 R_BRACK@2478..2479 "]"
1773 R_PAREN@2479..2480 ")"
1774 SEMI@2480..2481 ";"
1775 WHITESPACE@2481..2487 "\n\n "
1776 STMT_LOCAL@2487..2769
1777 LOCAL_KW@2487..2492 "local"
1778 WHITESPACE@2492..2493 " "
1779 BIND_FUNCTION@2493..2561
1780 NAME@2493..2506
1781 IDENT@2493..2506 "section_lines"
1782 PARAMS_DESC@2506..2520
1783 L_PAREN@2506..2507 "("
1784 PARAM@2507..2512
1785 DESTRUCT_FULL@2507..2512
1786 NAME@2507..2512
1787 IDENT@2507..2512 "sname"
1788 COMMA@2512..2513 ","
1789 WHITESPACE@2513..2514 " "
1790 PARAM@2514..2519
1791 DESTRUCT_FULL@2514..2519
1792 NAME@2514..2519
1793 IDENT@2514..2519 "sbody"
1794 R_PAREN@2519..2520 ")"
1795 WHITESPACE@2520..2521 " "
1796 ASSIGN@2521..2522 "="
1797 WHITESPACE@2522..2523 " "
1798 EXPR@2523..2561
1799 EXPR_BINARY@2523..2561
1800 EXPR@2523..2541
1801 EXPR_ARRAY@2523..2541
1802 L_BRACK@2523..2524 "["
1803 EXPR@2524..2540
1804 EXPR_BINARY@2524..2540
1805 EXPR@2524..2530
1806 EXPR_STRING@2524..2530
1807 STRING_SINGLE@2524..2530 "'[%s]'"
1808 WHITESPACE@2530..2531 " "
1809 MODULO@2531..2532 "%"
1810 WHITESPACE@2532..2533 " "
1811 EXPR@2533..2540
1812 EXPR_ARRAY@2533..2540
1813 L_BRACK@2533..2534 "["
1814 EXPR@2534..2539
1815 EXPR_VAR@2534..2539
1816 NAME@2534..2539
1817 IDENT@2534..2539 "sname"
1818 R_BRACK@2539..2540 "]"
1819 R_BRACK@2540..2541 "]"
1820 WHITESPACE@2541..2542 " "
1821 PLUS@2542..2543 "+"
1822 WHITESPACE@2543..2544 " "
1823 EXPR@2544..2561
1824 EXPR_VAR@2544..2554
1825 NAME@2544..2554
1826 IDENT@2544..2554 "body_lines"
1827 SUFFIX_APPLY@2554..2561
1828 ARGS_DESC@2554..2561
1829 L_PAREN@2554..2555 "("
1830 ARG@2555..2560
1831 EXPR@2555..2560
1832 EXPR_VAR@2555..2560
1833 NAME@2555..2560
1834 IDENT@2555..2560 "sbody"
1835 R_PAREN@2560..2561 ")"
1836 COMMA@2561..2562 ","
1837 WHITESPACE@2562..2573 "\n "
1838 BIND_DESTRUCT@2573..2648
1839 DESTRUCT_FULL@2573..2582
1840 NAME@2573..2582
1841 IDENT@2573..2582 "main_body"
1842 WHITESPACE@2582..2583 " "
1843 ASSIGN@2583..2584 "="
1844 WHITESPACE@2584..2585 " "
1845 EXPR@2585..2648
1846 EXPR_IF_THEN_ELSE@2585..2648
1847 IF_KW@2585..2587 "if"
1848 WHITESPACE@2587..2588 " "
1849 EXPR@2588..2614
1850 EXPR_VAR@2588..2591
1851 NAME@2588..2591
1852 IDENT@2588..2591 "std"
1853 SUFFIX_INDEX@2591..2601
1854 DOT@2591..2592 "."
1855 NAME@2592..2601
1856 IDENT@2592..2601 "objectHas"
1857 SUFFIX_APPLY@2601..2614
1858 ARGS_DESC@2601..2614
1859 L_PAREN@2601..2602 "("
1860 ARG@2602..2605
1861 EXPR@2602..2605
1862 EXPR_VAR@2602..2605
1863 NAME@2602..2605
1864 IDENT@2602..2605 "ini"
1865 COMMA@2605..2606 ","
1866 WHITESPACE@2606..2607 " "
1867 ARG@2607..2613
1868 EXPR@2607..2613
1869 EXPR_STRING@2607..2613
1870 STRING_SINGLE@2607..2613 "'main'"
1871 R_PAREN@2613..2614 ")"
1652 WHITESPACE@2614..2615 " "1872 WHITESPACE@2614..2615 " "
1653 EXPR_STRING@2615..26211873 THEN_KW@2615..2619 "then"
1654 STRING_SINGLE@2615..2621 "' != '"1874 WHITESPACE@2619..2620 " "
1655 WHITESPACE@2621..2622 " "1875 TRUE_EXPR@2620..2640
1656 PLUS@2622..2623 "+"1876 EXPR@2620..2640
1657 WHITESPACE@2623..2624 " "1877 EXPR_VAR@2620..2630
1658 EXPR_VAR@2624..26251878 NAME@2620..2630
1659 NAME@2624..26251879 IDENT@2620..2630 "body_lines"
1660 IDENT@2624..2625 "b"1880 SUFFIX_APPLY@2630..2640
1661 COMMA@2625..2626 ","1881 ARGS_DESC@2630..2640
1662 WHITESPACE@2626..2630 "\n\n "1882 L_PAREN@2630..2631 "("
1663 MEMBER_FIELD_METHOD@2630..27321883 ARG@2631..2639
1664 FIELD_NAME_FIXED@2630..26351884 EXPR@2631..2639
1665 NAME@2630..26351885 EXPR_VAR@2631..2634
1666 IDENT@2630..2635 "clamp"1886 NAME@2631..2634
1667 PARAMS_DESC@2635..26541887 IDENT@2631..2634 "ini"
1668 L_PAREN@2635..2636 "("1888 SUFFIX_INDEX@2634..2639
1669 PARAM@2636..26371889 DOT@2634..2635 "."
1670 DESTRUCT_FULL@2636..26371890 NAME@2635..2639
1671 NAME@2636..26371891 IDENT@2635..2639 "main"
1672 IDENT@2636..2637 "x"1892 R_PAREN@2639..2640 ")"
1673 COMMA@2637..2638 ","1893 WHITESPACE@2640..2641 " "
1674 WHITESPACE@2638..2639 " "1894 ELSE_KW@2641..2645 "else"
1675 PARAM@2639..26451895 WHITESPACE@2645..2646 " "
1676 DESTRUCT_FULL@2639..26451896 FALSE_EXPR@2646..2648
1677 NAME@2639..26451897 EXPR@2646..2648
1678 IDENT@2639..2645 "minVal"1898 EXPR_ARRAY@2646..2648
1679 COMMA@2645..2646 ","1899 L_BRACK@2646..2647 "["
1680 WHITESPACE@2646..2647 " "1900 R_BRACK@2647..2648 "]"
1681 PARAM@2647..26531901 COMMA@2648..2649 ","
1682 DESTRUCT_FULL@2647..26531902 WHITESPACE@2649..2660 "\n "
1683 NAME@2647..26531903 BIND_DESTRUCT@2660..2768
1684 IDENT@2647..2653 "maxVal"1904 DESTRUCT_FULL@2660..2672
1685 R_PAREN@2653..2654 ")"1905 NAME@2660..2672
1686 COLONCOLON@2654..2656 "::"1906 IDENT@2660..2672 "all_sections"
1687 WHITESPACE@2656..2661 "\n "1907 WHITESPACE@2672..2673 " "
1688 EXPR_IF_THEN_ELSE@2661..27321908 ASSIGN@2673..2674 "="
1689 IF_KW@2661..2663 "if"1909 WHITESPACE@2674..2675 " "
1690 WHITESPACE@2663..2664 " "1910 EXPR@2675..2768
1691 EXPR_BINARY@2664..26741911 EXPR_ARRAY_COMP@2675..2768
1692 LHS_EXPR@2664..26651912 L_BRACK@2675..2676 "["
1693 EXPR_VAR@2664..26651913 WHITESPACE@2676..2683 "\n "
1694 NAME@2664..26651914 EXPR@2683..2716
1695 IDENT@2664..2665 "x"1915 EXPR_VAR@2683..2696
1696 WHITESPACE@2665..2666 " "1916 NAME@2683..2696
1697 LT@2666..2667 "<"1917 IDENT@2683..2696 "section_lines"
1698 WHITESPACE@2667..2668 " "1918 SUFFIX_APPLY@2696..2716
1699 EXPR_VAR@2668..26741919 ARGS_DESC@2696..2716
1700 NAME@2668..26741920 L_PAREN@2696..2697 "("
1701 IDENT@2668..2674 "minVal"1921 ARG@2697..2698
1702 WHITESPACE@2674..2675 " "1922 EXPR@2697..2698
1703 THEN_KW@2675..2679 "then"1923 EXPR_VAR@2697..2698
1704 WHITESPACE@2679..2680 " "1924 NAME@2697..2698
1705 TRUE_EXPR@2680..26861925 IDENT@2697..2698 "k"
1706 EXPR_VAR@2680..26861926 COMMA@2698..2699 ","
1707 NAME@2680..26861927 WHITESPACE@2699..2700 " "
1708 IDENT@2680..2686 "minVal"1928 ARG@2700..2715
1709 WHITESPACE@2686..2691 "\n "1929 EXPR@2700..2715
1710 ELSE_KW@2691..2695 "else"1930 EXPR_VAR@2700..2703
1711 WHITESPACE@2695..2696 " "1931 NAME@2700..2703
1712 FALSE_EXPR@2696..27321932 IDENT@2700..2703 "ini"
1713 EXPR_IF_THEN_ELSE@2696..27321933 SUFFIX_INDEX@2703..2712
1714 IF_KW@2696..2698 "if"1934 DOT@2703..2704 "."
1715 WHITESPACE@2698..2699 " "1935 NAME@2704..2712
1716 EXPR_BINARY@2699..27091936 IDENT@2704..2712 "sections"
1717 LHS_EXPR@2699..27001937 SUFFIX_INDEX_EXPR@2712..2715
1718 EXPR_VAR@2699..27001938 L_BRACK@2712..2713 "["
1719 NAME@2699..27001939 EXPR@2713..2714
1720 IDENT@2699..2700 "x"1940 EXPR_VAR@2713..2714
1721 WHITESPACE@2700..2701 " "1941 NAME@2713..2714
1722 GT@2701..2702 ">"1942 IDENT@2713..2714 "k"
1723 WHITESPACE@2702..2703 " "1943 R_BRACK@2714..2715 "]"
1724 EXPR_VAR@2703..27091944 R_PAREN@2715..2716 ")"
1725 NAME@2703..27091945 WHITESPACE@2716..2723 "\n "
1726 IDENT@2703..2709 "maxVal"1946 FOR_SPEC@2723..2762
1727 WHITESPACE@2709..2710 " "1947 FOR_KW@2723..2726 "for"
1728 THEN_KW@2710..2714 "then"1948 WHITESPACE@2726..2727 " "
1729 WHITESPACE@2714..2715 " "1949 DESTRUCT_FULL@2727..2728
1730 TRUE_EXPR@2715..27211950 NAME@2727..2728
1731 EXPR_VAR@2715..27211951 IDENT@2727..2728 "k"
1732 NAME@2715..27211952 WHITESPACE@2728..2729 " "
1733 IDENT@2715..2721 "maxVal"1953 IN_KW@2729..2731 "in"
1734 WHITESPACE@2721..2726 "\n "1954 WHITESPACE@2731..2732 " "
1735 ELSE_KW@2726..2730 "else"1955 EXPR@2732..2762
1736 WHITESPACE@2730..2731 " "1956 EXPR_VAR@2732..2735
1737 FALSE_EXPR@2731..27321957 NAME@2732..2735
1738 EXPR_VAR@2731..27321958 IDENT@2732..2735 "std"
1739 NAME@2731..27321959 SUFFIX_INDEX@2735..2748
1740 IDENT@2731..2732 "x"1960 DOT@2735..2736 "."
1741 COMMA@2732..2733 ","1961 NAME@2736..2748
1742 WHITESPACE@2733..2737 "\n\n "1962 IDENT@2736..2748 "objectFields"
1743 MEMBER_FIELD_METHOD@2737..28041963 SUFFIX_APPLY@2748..2762
1744 FIELD_NAME_FIXED@2737..27501964 ARGS_DESC@2748..2762
1745 NAME@2737..27501965 L_PAREN@2748..2749 "("
1746 IDENT@2737..2750 "flattenArrays"1966 ARG@2749..2761
1747 PARAMS_DESC@2750..27561967 EXPR@2749..2761
1748 L_PAREN@2750..2751 "("1968 EXPR_VAR@2749..2752
1749 PARAM@2751..27551969 NAME@2749..2752
1750 DESTRUCT_FULL@2751..27551970 IDENT@2749..2752 "ini"
1751 NAME@2751..27551971 SUFFIX_INDEX@2752..2761
1752 IDENT@2751..2755 "arrs"1972 DOT@2752..2753 "."
1753 R_PAREN@2755..2756 ")"1973 NAME@2753..2761
1754 COLONCOLON@2756..2758 "::"1974 IDENT@2753..2761 "sections"
1755 WHITESPACE@2758..2763 "\n "1975 R_PAREN@2761..2762 ")"
1756 EXPR_APPLY@2763..28041976 WHITESPACE@2762..2767 "\n "
1757 EXPR_INDEX@2763..27721977 R_BRACK@2767..2768 "]"
1758 EXPR_VAR@2763..27661978 SEMI@2768..2769 ";"
1759 NAME@2763..27661979 WHITESPACE@2769..2774 "\n "
1760 IDENT@2763..2766 "std"1980 EXPR_VAR@2774..2777
1761 DOT@2766..2767 "."1981 NAME@2774..2777
1762 NAME@2767..27721982 IDENT@2774..2777 "std"
1763 IDENT@2767..2772 "foldl"1983 SUFFIX_INDEX@2777..2782
1764 ARGS_DESC@2772..28041984 DOT@2777..2778 "."
1765 L_PAREN@2772..2773 "("1985 NAME@2778..2782
1766 ARG@2773..27931986 IDENT@2778..2782 "join"
1767 EXPR_FUNCTION@2773..27931987 SUFFIX_APPLY@2782..2840
1768 FUNCTION_KW@2773..2781 "function"1988 ARGS_DESC@2782..2840
1769 PARAMS_DESC@2781..27871989 L_PAREN@2782..2783 "("
1770 L_PAREN@2781..2782 "("1990 ARG@2783..2787
1771 PARAM@2782..27831991 EXPR@2783..2787
1772 DESTRUCT_FULL@2782..27831992 EXPR_STRING@2783..2787
1773 NAME@2782..27831993 STRING_SINGLE@2783..2787 "'\\n'"
1774 IDENT@2782..2783 "a"1994 COMMA@2787..2788 ","
1775 COMMA@2783..2784 ","1995 WHITESPACE@2788..2789 " "
1776 WHITESPACE@2784..2785 " "1996 ARG@2789..2839
1777 PARAM@2785..27861997 EXPR@2789..2839
1778 DESTRUCT_FULL@2785..27861998 EXPR_BINARY@2789..2839
1779 NAME@2785..27861999 EXPR@2789..2832
1780 IDENT@2785..2786 "b"2000 EXPR_BINARY@2789..2832
1781 R_PAREN@2786..2787 ")"2001 EXPR@2789..2798
1782 WHITESPACE@2787..2788 " "2002 EXPR_VAR@2789..2798
1783 EXPR_BINARY@2788..27932003 NAME@2789..2798
1784 LHS_EXPR@2788..27892004 IDENT@2789..2798 "main_body"
1785 EXPR_VAR@2788..27892005 WHITESPACE@2798..2799 " "
1786 NAME@2788..27892006 PLUS@2799..2800 "+"
1787 IDENT@2788..2789 "a"2007 WHITESPACE@2800..2801 " "
1788 WHITESPACE@2789..2790 " "2008 EXPR@2801..2832
1789 PLUS@2790..2791 "+"2009 EXPR_VAR@2801..2804
1790 WHITESPACE@2791..2792 " "2010 NAME@2801..2804
1791 EXPR_VAR@2792..27932011 IDENT@2801..2804 "std"
1792 NAME@2792..27932012 SUFFIX_INDEX@2804..2818
1793 IDENT@2792..2793 "b"2013 DOT@2804..2805 "."
1794 COMMA@2793..2794 ","2014 NAME@2805..2818
1795 WHITESPACE@2794..2795 " "2015 IDENT@2805..2818 "flattenArrays"
1796 ARG@2795..27992016 SUFFIX_APPLY@2818..2832
1797 EXPR_VAR@2795..27992017 ARGS_DESC@2818..2832
1798 NAME@2795..27992018 L_PAREN@2818..2819 "("
1799 IDENT@2795..2799 "arrs"2019 ARG@2819..2831
1800 COMMA@2799..2800 ","2020 EXPR@2819..2831
1801 WHITESPACE@2800..2801 " "2021 EXPR_VAR@2819..2831
1802 ARG@2801..28032022 NAME@2819..2831
1803 EXPR_ARRAY@2801..28032023 IDENT@2819..2831 "all_sections"
1804 L_BRACK@2801..2802 "["2024 R_PAREN@2831..2832 ")"
1805 R_BRACK@2802..2803 "]"2025 WHITESPACE@2832..2833 " "
1806 R_PAREN@2803..2804 ")"2026 PLUS@2833..2834 "+"
1807 COMMA@2804..2805 ","2027 WHITESPACE@2834..2835 " "
1808 WHITESPACE@2805..2809 "\n\n "2028 EXPR@2835..2839
1809 MEMBER_FIELD_METHOD@2809..34952029 EXPR_ARRAY@2835..2839
1810 FIELD_NAME_FIXED@2809..28202030 L_BRACK@2835..2836 "["
1811 NAME@2809..28202031 EXPR@2836..2838
1812 IDENT@2809..2820 "manifestIni"2032 EXPR_STRING@2836..2838
1813 PARAMS_DESC@2820..28252033 STRING_SINGLE@2836..2838 "''"
1814 L_PAREN@2820..2821 "("2034 R_BRACK@2838..2839 "]"
1815 PARAM@2821..28242035 R_PAREN@2839..2840 ")"
1816 DESTRUCT_FULL@2821..28242036 COMMA@2840..2841 ","
1817 NAME@2821..28242037 WHITESPACE@2841..2845 "\n\n "
1818 IDENT@2821..2824 "ini"2038 MEMBER_FIELD_METHOD@2845..2898
1819 R_PAREN@2824..2825 ")"2039 FIELD_NAME_FIXED@2845..2857
1820 COLONCOLON@2825..2827 "::"2040 NAME@2845..2857
1821 WHITESPACE@2827..2832 "\n "2041 IDENT@2845..2857 "manifestToml"
1822 STMT_LOCAL@2832..31362042 PARAMS_DESC@2857..2864
1823 LOCAL_KW@2832..2837 "local"2043 L_PAREN@2857..2858 "("
1824 WHITESPACE@2837..2838 " "2044 PARAM@2858..2863
1825 BIND_FUNCTION@2838..31352045 DESTRUCT_FULL@2858..2863
1826 NAME@2838..28482046 NAME@2858..2863
1827 IDENT@2838..2848 "body_lines"2047 IDENT@2858..2863 "value"
1828 PARAMS_DESC@2848..28542048 R_PAREN@2863..2864 ")"
1829 L_PAREN@2848..2849 "("2049 COLONCOLON@2864..2866 "::"
1830 PARAM@2849..28532050 WHITESPACE@2866..2867 " "
1831 DESTRUCT_FULL@2849..28532051 EXPR@2867..2898
1832 NAME@2849..28532052 EXPR_VAR@2867..2870
1833 IDENT@2849..2853 "body"2053 NAME@2867..2870
1834 R_PAREN@2853..2854 ")"2054 IDENT@2867..2870 "std"
1835 WHITESPACE@2854..2855 " "2055 SUFFIX_INDEX@2870..2885
1836 ASSIGN@2855..2856 "="2056 DOT@2870..2871 "."
1837 WHITESPACE@2856..2863 "\n "2057 NAME@2871..2885
1838 EXPR_APPLY@2863..31352058 IDENT@2871..2885 "manifestTomlEx"
1839 EXPR_INDEX@2863..28712059 SUFFIX_APPLY@2885..2898
1840 EXPR_VAR@2863..28662060 ARGS_DESC@2885..2898
1841 NAME@2863..28662061 L_PAREN@2885..2886 "("
1842 IDENT@2863..2866 "std"2062 ARG@2886..2891
1843 DOT@2866..2867 "."2063 EXPR@2886..2891
1844 NAME@2867..28712064 EXPR_VAR@2886..2891
1845 IDENT@2867..2871 "join"2065 NAME@2886..2891
1846 ARGS_DESC@2871..31352066 IDENT@2886..2891 "value"
1847 L_PAREN@2871..2872 "("2067 COMMA@2891..2892 ","
1848 ARG@2872..28742068 WHITESPACE@2892..2893 " "
1849 EXPR_ARRAY@2872..28742069 ARG@2893..2897
1850 L_BRACK@2872..2873 "["2070 EXPR@2893..2897
1851 R_BRACK@2873..2874 "]"2071 EXPR_STRING@2893..2897
1852 COMMA@2874..2875 ","2072 STRING_SINGLE@2893..2897 "' '"
1853 WHITESPACE@2875..2876 " "2073 R_PAREN@2897..2898 ")"
1854 ARG@2876..31342074 COMMA@2898..2899 ","
1855 EXPR_ARRAY_COMP@2876..31342075 WHITESPACE@2899..2903 "\n\n "
1856 L_BRACK@2876..2877 "["2076 MEMBER_FIELD_METHOD@2903..2958
1857 WHITESPACE@2877..2886 "\n "2077 FIELD_NAME_FIXED@2903..2921
1858 STMT_LOCAL@2886..29182078 NAME@2903..2921
1859 LOCAL_KW@2886..2891 "local"2079 IDENT@2903..2921 "escapeStringPython"
1860 WHITESPACE@2891..2892 " "2080 PARAMS_DESC@2921..2926
1861 BIND_DESTRUCT@2892..29172081 L_PAREN@2921..2922 "("
1862 DESTRUCT_FULL@2892..29072082 PARAM@2922..2925
1863 NAME@2892..29072083 DESTRUCT_FULL@2922..2925
1864 IDENT@2892..2907 "value_or_values"2084 NAME@2922..2925
1865 WHITESPACE@2907..2908 " "2085 IDENT@2922..2925 "str"
1866 ASSIGN@2908..2909 "="2086 R_PAREN@2925..2926 ")"
1867 WHITESPACE@2909..2910 " "2087 COLONCOLON@2926..2928 "::"
1868 EXPR_INDEX_EXPR@2910..29172088 WHITESPACE@2928..2933 "\n "
1869 LHS_EXPR@2910..29142089 EXPR@2933..2958
1870 EXPR_VAR@2910..29142090 EXPR_VAR@2933..2936
1871 NAME@2910..29142091 NAME@2933..2936
1872 IDENT@2910..2914 "body"2092 IDENT@2933..2936 "std"
1873 L_BRACK@2914..2915 "["2093 SUFFIX_INDEX@2936..2953
1874 EXPR_VAR@2915..29162094 DOT@2936..2937 "."
1875 NAME@2915..29162095 NAME@2937..2953
1876 IDENT@2915..2916 "k"2096 IDENT@2937..2953 "escapeStringJson"
1877 R_BRACK@2916..2917 "]"2097 SUFFIX_APPLY@2953..2958
1878 SEMI@2917..2918 ";"2098 ARGS_DESC@2953..2958
1879 WHITESPACE@2918..2927 "\n "2099 L_PAREN@2953..2954 "("
1880 EXPR_IF_THEN_ELSE@2927..30852100 ARG@2954..2957
1881 IF_KW@2927..2929 "if"2101 EXPR@2954..2957
1882 WHITESPACE@2929..2930 " "2102 EXPR_VAR@2954..2957
1883 EXPR_APPLY@2930..29582103 NAME@2954..2957
1884 EXPR_INDEX@2930..29412104 IDENT@2954..2957 "str"
1885 EXPR_VAR@2930..29332105 R_PAREN@2957..2958 ")"
1886 NAME@2930..29332106 COMMA@2958..2959 ","
1887 IDENT@2930..2933 "std"2107 WHITESPACE@2959..2963 "\n\n "
1888 DOT@2933..2934 "."2108 MEMBER_FIELD_METHOD@2963..3180
1889 NAME@2934..29412109 FIELD_NAME_FIXED@2963..2979
1890 IDENT@2934..2941 "isArray"2110 NAME@2963..2979
1891 ARGS_DESC@2941..29582111 IDENT@2963..2979 "escapeStringBash"
1892 L_PAREN@2941..2942 "("2112 PARAMS_DESC@2979..2985
1893 ARG@2942..29572113 L_PAREN@2979..2980 "("
1894 EXPR_VAR@2942..29572114 PARAM@2980..2984
1895 NAME@2942..29572115 DESTRUCT_FULL@2980..2984
1896 IDENT@2942..2957 "value_or_values"2116 NAME@2980..2984
1897 R_PAREN@2957..2958 ")"2117 IDENT@2980..2984 "str_"
1898 WHITESPACE@2958..2959 " "2118 R_PAREN@2984..2985 ")"
1899 THEN_KW@2959..2963 "then"2119 COLONCOLON@2985..2987 "::"
1900 WHITESPACE@2963..2974 "\n "2120 WHITESPACE@2987..2992 "\n "
1901 TRUE_EXPR@2974..30272121 EXPR@2992..3180
1902 EXPR_ARRAY_COMP@2974..30272122 STMT_LOCAL@2992..3023
1903 L_BRACK@2974..2975 "["2123 LOCAL_KW@2992..2997 "local"
1904 EXPR_BINARY@2975..29972124 WHITESPACE@2997..2998 " "
1905 LHS_EXPR@2975..29842125 BIND_DESTRUCT@2998..3022
1906 EXPR_STRING@2975..29842126 DESTRUCT_FULL@2998..3001
1907 STRING_SINGLE@2975..2984 "'%s = %s'"2127 NAME@2998..3001
1908 WHITESPACE@2984..2985 " "2128 IDENT@2998..3001 "str"
1909 MODULO@2985..2986 "%"2129 WHITESPACE@3001..3002 " "
1910 WHITESPACE@2986..2987 " "2130 ASSIGN@3002..3003 "="
1911 EXPR_ARRAY@2987..29972131 WHITESPACE@3003..3004 " "
1912 L_BRACK@2987..2988 "["2132 EXPR@3004..3022
1913 EXPR_VAR@2988..29892133 EXPR_VAR@3004..3007
1914 NAME@2988..29892134 NAME@3004..3007
1915 IDENT@2988..2989 "k"2135 IDENT@3004..3007 "std"
1916 COMMA@2989..2990 ","2136 SUFFIX_INDEX@3007..3016
1917 WHITESPACE@2990..2991 " "2137 DOT@3007..3008 "."
1918 EXPR_VAR@2991..29962138 NAME@3008..3016
1919 NAME@2991..29962139 IDENT@3008..3016 "toString"
1920 IDENT@2991..2996 "value"2140 SUFFIX_APPLY@3016..3022
1921 R_BRACK@2996..2997 "]"2141 ARGS_DESC@3016..3022
1922 WHITESPACE@2997..2998 " "2142 L_PAREN@3016..3017 "("
1923 FOR_SPEC@2998..30262143 ARG@3017..3021
1924 FOR_KW@2998..3001 "for"2144 EXPR@3017..3021
1925 WHITESPACE@3001..3002 " "2145 EXPR_VAR@3017..3021
1926 NAME@3002..30072146 NAME@3017..3021
1927 IDENT@3002..3007 "value"2147 IDENT@3017..3021 "str_"
1928 WHITESPACE@3007..3008 " "2148 R_PAREN@3021..3022 ")"
1929 IN_KW@3008..3010 "in"2149 SEMI@3022..3023 ";"
1930 WHITESPACE@3010..3011 " "2150 WHITESPACE@3023..3028 "\n "
1931 EXPR_VAR@3011..30262151 STMT_LOCAL@3028..3110
1932 NAME@3011..30262152 LOCAL_KW@3028..3033 "local"
1933 IDENT@3011..3026 "value_or_values"2153 WHITESPACE@3033..3034 " "
1934 R_BRACK@3026..3027 "]"2154 BIND_FUNCTION@3034..3109
1935 WHITESPACE@3027..3036 "\n "2155 NAME@3034..3039
1936 ELSE_KW@3036..3040 "else"2156 IDENT@3034..3039 "trans"
1937 WHITESPACE@3040..3051 "\n "2157 PARAMS_DESC@3039..3043
1938 FALSE_EXPR@3051..30852158 L_PAREN@3039..3040 "("
1939 EXPR_ARRAY@3051..30852159 PARAM@3040..3042
1940 L_BRACK@3051..3052 "["2160 DESTRUCT_FULL@3040..3042
1941 EXPR_BINARY@3052..30842161 NAME@3040..3042
1942 LHS_EXPR@3052..30612162 IDENT@3040..3042 "ch"
1943 EXPR_STRING@3052..30612163 R_PAREN@3042..3043 ")"
1944 STRING_SINGLE@3052..3061 "'%s = %s'"2164 WHITESPACE@3043..3044 " "
1945 WHITESPACE@3061..3062 " "2165 ASSIGN@3044..3045 "="
1946 MODULO@3062..3063 "%"2166 WHITESPACE@3045..3052 "\n "
1947 WHITESPACE@3063..3064 " "2167 EXPR@3052..3109
1948 EXPR_ARRAY@3064..30842168 EXPR_IF_THEN_ELSE@3052..3109
1949 L_BRACK@3064..3065 "["2169 IF_KW@3052..3054 "if"
1950 EXPR_VAR@3065..30662170 WHITESPACE@3054..3055 " "
1951 NAME@3065..30662171 EXPR@3055..3064
1952 IDENT@3065..3066 "k"2172 EXPR_BINARY@3055..3064
1953 COMMA@3066..3067 ","2173 EXPR@3055..3057
1954 WHITESPACE@3067..3068 " "2174 EXPR_VAR@3055..3057
1955 EXPR_VAR@3068..30832175 NAME@3055..3057
1956 NAME@3068..30832176 IDENT@3055..3057 "ch"
1957 IDENT@3068..3083 "value_or_values"2177 WHITESPACE@3057..3058 " "
1958 R_BRACK@3083..3084 "]"2178 EQ@3058..3060 "=="
1959 R_BRACK@3084..3085 "]"2179 WHITESPACE@3060..3061 " "
1960 WHITESPACE@3085..3095 "\n\n "2180 EXPR@3061..3064
1961 FOR_SPEC@3095..31262181 EXPR_STRING@3061..3064
1962 FOR_KW@3095..3098 "for"2182 STRING_DOUBLE@3061..3064 "\"'\""
1963 WHITESPACE@3098..3099 " "2183 WHITESPACE@3064..3065 " "
1964 NAME@3099..31002184 THEN_KW@3065..3069 "then"
1965 IDENT@3099..3100 "k"2185 WHITESPACE@3069..3078 "\n "
1966 WHITESPACE@3100..3101 " "2186 TRUE_EXPR@3078..3087
1967 IN_KW@3101..3103 "in"2187 EXPR@3078..3087
1968 WHITESPACE@3103..3104 " "2188 EXPR_STRING@3078..3087
1969 EXPR_APPLY@3104..31262189 STRING_DOUBLE@3078..3087 "\"'\\\"'\\\"'\""
1970 EXPR_INDEX@3104..31202190 WHITESPACE@3087..3094 "\n "
1971 EXPR_VAR@3104..31072191 ELSE_KW@3094..3098 "else"
1972 NAME@3104..31072192 WHITESPACE@3098..3107 "\n "
1973 IDENT@3104..3107 "std"2193 FALSE_EXPR@3107..3109
1974 DOT@3107..3108 "."2194 EXPR@3107..3109
1975 NAME@3108..31202195 EXPR_VAR@3107..3109
1976 IDENT@3108..3120 "objectFields"2196 NAME@3107..3109
1977 ARGS_DESC@3120..31262197 IDENT@3107..3109 "ch"
1978 L_PAREN@3120..3121 "("2198 SEMI@3109..3110 ";"
1979 ARG@3121..31252199 WHITESPACE@3110..3115 "\n "
1980 EXPR_VAR@3121..31252200 EXPR_BINARY@3115..3180
1981 NAME@3121..31252201 EXPR@3115..3121
1982 IDENT@3121..3125 "body"2202 EXPR_STRING@3115..3121
1983 R_PAREN@3125..3126 ")"2203 STRING_DOUBLE@3115..3121 "\"'%s'\""
1984 WHITESPACE@3126..3133 "\n "2204 WHITESPACE@3121..3122 " "
1985 R_BRACK@3133..3134 "]"2205 MODULO@3122..3123 "%"
1986 R_PAREN@3134..3135 ")"2206 WHITESPACE@3123..3124 " "
1987 SEMI@3135..3136 ";"2207 EXPR@3124..3180
1988 WHITESPACE@3136..3142 "\n\n "2208 EXPR_VAR@3124..3127
1989 STMT_LOCAL@3142..34242209 NAME@3124..3127
1990 LOCAL_KW@3142..3147 "local"2210 IDENT@3124..3127 "std"
1991 WHITESPACE@3147..3148 " "2211 SUFFIX_INDEX@3127..3132
1992 BIND_FUNCTION@3148..32162212 DOT@3127..3128 "."
1993 NAME@3148..31612213 NAME@3128..3132
1994 IDENT@3148..3161 "section_lines"2214 IDENT@3128..3132 "join"
1995 PARAMS_DESC@3161..31752215 SUFFIX_APPLY@3132..3180
1996 L_PAREN@3161..3162 "("2216 ARGS_DESC@3132..3180
1997 PARAM@3162..31672217 L_PAREN@3132..3133 "("
1998 DESTRUCT_FULL@3162..31672218 ARG@3133..3135
1999 NAME@3162..31672219 EXPR@3133..3135
2000 IDENT@3162..3167 "sname"2220 EXPR_STRING@3133..3135
2001 COMMA@3167..3168 ","2221 STRING_SINGLE@3133..3135 "''"
2002 WHITESPACE@3168..3169 " "2222 COMMA@3135..3136 ","
2003 PARAM@3169..31742223 WHITESPACE@3136..3137 " "
2004 DESTRUCT_FULL@3169..31742224 ARG@3137..3179
2005 NAME@3169..31742225 EXPR@3137..3179
2006 IDENT@3169..3174 "sbody"2226 EXPR_ARRAY_COMP@3137..3179
2007 R_PAREN@3174..3175 ")"2227 L_BRACK@3137..3138 "["
2008 WHITESPACE@3175..3176 " "2228 EXPR@3138..3147
2009 ASSIGN@3176..3177 "="2229 EXPR_VAR@3138..3143
2010 WHITESPACE@3177..3178 " "2230 NAME@3138..3143
2011 EXPR_BINARY@3178..32162231 IDENT@3138..3143 "trans"
2012 LHS_EXPR@3178..31962232 SUFFIX_APPLY@3143..3147
2013 EXPR_ARRAY@3178..31962233 ARGS_DESC@3143..3147
2014 L_BRACK@3178..3179 "["2234 L_PAREN@3143..3144 "("
2015 EXPR_BINARY@3179..31952235 ARG@3144..3146
2016 LHS_EXPR@3179..31852236 EXPR@3144..3146
2017 EXPR_STRING@3179..31852237 EXPR_VAR@3144..3146
2018 STRING_SINGLE@3179..3185 "'[%s]'"2238 NAME@3144..3146
2019 WHITESPACE@3185..3186 " "2239 IDENT@3144..3146 "ch"
2020 MODULO@3186..3187 "%"2240 R_PAREN@3146..3147 ")"
2021 WHITESPACE@3187..3188 " "2241 WHITESPACE@3147..3148 " "
2022 EXPR_ARRAY@3188..31952242 FOR_SPEC@3148..3178
2023 L_BRACK@3188..3189 "["2243 FOR_KW@3148..3151 "for"
2024 EXPR_VAR@3189..31942244 WHITESPACE@3151..3152 " "
2025 NAME@3189..31942245 DESTRUCT_FULL@3152..3154
2026 IDENT@3189..3194 "sname"2246 NAME@3152..3154
2027 R_BRACK@3194..3195 "]"2247 IDENT@3152..3154 "ch"
2028 R_BRACK@3195..3196 "]"2248 WHITESPACE@3154..3155 " "
2029 WHITESPACE@3196..3197 " "2249 IN_KW@3155..3157 "in"
2030 PLUS@3197..3198 "+"2250 WHITESPACE@3157..3158 " "
2031 WHITESPACE@3198..3199 " "2251 EXPR@3158..3178
2032 EXPR_APPLY@3199..32162252 EXPR_VAR@3158..3161
2033 EXPR_VAR@3199..32092253 NAME@3158..3161
2034 NAME@3199..32092254 IDENT@3158..3161 "std"
2035 IDENT@3199..3209 "body_lines"2255 SUFFIX_INDEX@3161..3173
2036 ARGS_DESC@3209..32162256 DOT@3161..3162 "."
2037 L_PAREN@3209..3210 "("2257 NAME@3162..3173
2038 ARG@3210..32152258 IDENT@3162..3173 "stringChars"
2039 EXPR_VAR@3210..32152259 SUFFIX_APPLY@3173..3178
2040 NAME@3210..32152260 ARGS_DESC@3173..3178
2041 IDENT@3210..3215 "sbody"2261 L_PAREN@3173..3174 "("
2042 R_PAREN@3215..3216 ")"2262 ARG@3174..3177
2043 COMMA@3216..3217 ","2263 EXPR@3174..3177
2044 WHITESPACE@3217..3228 "\n "2264 EXPR_VAR@3174..3177
2045 BIND_DESTRUCT@3228..33032265 NAME@3174..3177
2046 DESTRUCT_FULL@3228..32372266 IDENT@3174..3177 "str"
2047 NAME@3228..32372267 R_PAREN@3177..3178 ")"
2048 IDENT@3228..3237 "main_body"2268 R_BRACK@3178..3179 "]"
2049 WHITESPACE@3237..3238 " "2269 R_PAREN@3179..3180 ")"
2050 ASSIGN@3238..3239 "="2270 COMMA@3180..3181 ","
2051 WHITESPACE@3239..3240 " "2271 WHITESPACE@3181..3185 "\n\n "
2052 EXPR_IF_THEN_ELSE@3240..33032272 MEMBER_FIELD_METHOD@3185..3399
2053 IF_KW@3240..3242 "if"2273 FIELD_NAME_FIXED@3185..3204
2054 WHITESPACE@3242..3243 " "2274 NAME@3185..3204
2055 EXPR_APPLY@3243..32692275 IDENT@3185..3204 "escapeStringDollars"
2056 EXPR_INDEX@3243..32562276 PARAMS_DESC@3204..3210
2057 EXPR_VAR@3243..32462277 L_PAREN@3204..3205 "("
2058 NAME@3243..32462278 PARAM@3205..3209
2059 IDENT@3243..3246 "std"2279 DESTRUCT_FULL@3205..3209
2060 DOT@3246..3247 "."2280 NAME@3205..3209
2061 NAME@3247..32562281 IDENT@3205..3209 "str_"
2062 IDENT@3247..3256 "objectHas"2282 R_PAREN@3209..3210 ")"
2063 ARGS_DESC@3256..32692283 COLONCOLON@3210..3212 "::"
2064 L_PAREN@3256..3257 "("2284 WHITESPACE@3212..3217 "\n "
2065 ARG@3257..32602285 EXPR@3217..3399
2066 EXPR_VAR@3257..32602286 STMT_LOCAL@3217..3248
2067 NAME@3257..32602287 LOCAL_KW@3217..3222 "local"
2068 IDENT@3257..3260 "ini"2288 WHITESPACE@3222..3223 " "
2069 COMMA@3260..3261 ","2289 BIND_DESTRUCT@3223..3247
2070 WHITESPACE@3261..3262 " "2290 DESTRUCT_FULL@3223..3226
2071 ARG@3262..32682291 NAME@3223..3226
2072 EXPR_STRING@3262..32682292 IDENT@3223..3226 "str"
2073 STRING_SINGLE@3262..3268 "'main'"2293 WHITESPACE@3226..3227 " "
2074 R_PAREN@3268..3269 ")"2294 ASSIGN@3227..3228 "="
2075 WHITESPACE@3269..3270 " "2295 WHITESPACE@3228..3229 " "
2076 THEN_KW@3270..3274 "then"2296 EXPR@3229..3247
2077 WHITESPACE@3274..3275 " "2297 EXPR_VAR@3229..3232
2078 TRUE_EXPR@3275..32952298 NAME@3229..3232
2079 EXPR_APPLY@3275..32952299 IDENT@3229..3232 "std"
2080 EXPR_VAR@3275..32852300 SUFFIX_INDEX@3232..3241
2081 NAME@3275..32852301 DOT@3232..3233 "."
2082 IDENT@3275..3285 "body_lines"2302 NAME@3233..3241
2083 ARGS_DESC@3285..32952303 IDENT@3233..3241 "toString"
2084 L_PAREN@3285..3286 "("2304 SUFFIX_APPLY@3241..3247
2085 ARG@3286..32942305 ARGS_DESC@3241..3247
2086 EXPR_INDEX@3286..32942306 L_PAREN@3241..3242 "("
2087 EXPR_VAR@3286..32892307 ARG@3242..3246
2088 NAME@3286..32892308 EXPR@3242..3246
2089 IDENT@3286..3289 "ini"2309 EXPR_VAR@3242..3246
2090 DOT@3289..3290 "."2310 NAME@3242..3246
2091 NAME@3290..32942311 IDENT@3242..3246 "str_"
2092 IDENT@3290..3294 "main"2312 R_PAREN@3246..3247 ")"
2093 R_PAREN@3294..3295 ")"2313 SEMI@3247..3248 ";"
2094 WHITESPACE@3295..3296 " "2314 WHITESPACE@3248..3253 "\n "
2095 ELSE_KW@3296..3300 "else"2315 STMT_LOCAL@3253..3330
2096 WHITESPACE@3300..3301 " "2316 LOCAL_KW@3253..3258 "local"
2097 FALSE_EXPR@3301..33032317 WHITESPACE@3258..3259 " "
2098 EXPR_ARRAY@3301..33032318 BIND_FUNCTION@3259..3329
2099 L_BRACK@3301..3302 "["2319 NAME@3259..3264
2100 R_BRACK@3302..3303 "]"2320 IDENT@3259..3264 "trans"
2101 COMMA@3303..3304 ","2321 PARAMS_DESC@3264..3268
2102 WHITESPACE@3304..3315 "\n "2322 L_PAREN@3264..3265 "("
2103 BIND_DESTRUCT@3315..34232323 PARAM@3265..3267
2104 DESTRUCT_FULL@3315..33272324 DESTRUCT_FULL@3265..3267
2105 NAME@3315..33272325 NAME@3265..3267
2106 IDENT@3315..3327 "all_sections"2326 IDENT@3265..3267 "ch"
2107 WHITESPACE@3327..3328 " "2327 R_PAREN@3267..3268 ")"
2108 ASSIGN@3328..3329 "="2328 WHITESPACE@3268..3269 " "
2109 WHITESPACE@3329..3330 " "2329 ASSIGN@3269..3270 "="
2110 EXPR_ARRAY_COMP@3330..34232330 WHITESPACE@3270..3277 "\n "
2111 L_BRACK@3330..3331 "["2331 EXPR@3277..3329
2112 WHITESPACE@3331..3338 "\n "2332 EXPR_IF_THEN_ELSE@3277..3329
2113 EXPR_APPLY@3338..33712333 IF_KW@3277..3279 "if"
2114 EXPR_VAR@3338..33512334 WHITESPACE@3279..3280 " "
2115 NAME@3338..33512335 EXPR@3280..3289
2116 IDENT@3338..3351 "section_lines"2336 EXPR_BINARY@3280..3289
2117 ARGS_DESC@3351..33712337 EXPR@3280..3282
2118 L_PAREN@3351..3352 "("2338 EXPR_VAR@3280..3282
2119 ARG@3352..33532339 NAME@3280..3282
2120 EXPR_VAR@3352..33532340 IDENT@3280..3282 "ch"
2121 NAME@3352..33532341 WHITESPACE@3282..3283 " "
2122 IDENT@3352..3353 "k"2342 EQ@3283..3285 "=="
2123 COMMA@3353..3354 ","2343 WHITESPACE@3285..3286 " "
2124 WHITESPACE@3354..3355 " "2344 EXPR@3286..3289
2125 ARG@3355..33702345 EXPR_STRING@3286..3289
2126 EXPR_INDEX_EXPR@3355..33702346 STRING_SINGLE@3286..3289 "'$'"
2127 LHS_EXPR@3355..33672347 WHITESPACE@3289..3290 " "
2128 EXPR_INDEX@3355..33672348 THEN_KW@3290..3294 "then"
2129 EXPR_VAR@3355..33582349 WHITESPACE@3294..3303 "\n "
2130 NAME@3355..33582350 TRUE_EXPR@3303..3307
2131 IDENT@3355..3358 "ini"2351 EXPR@3303..3307
2132 DOT@3358..3359 "."2352 EXPR_STRING@3303..3307
2133 NAME@3359..33672353 STRING_SINGLE@3303..3307 "'$$'"
2134 IDENT@3359..3367 "sections"2354 WHITESPACE@3307..3314 "\n "
2135 L_BRACK@3367..3368 "["2355 ELSE_KW@3314..3318 "else"
2136 EXPR_VAR@3368..33692356 WHITESPACE@3318..3327 "\n "
2137 NAME@3368..33692357 FALSE_EXPR@3327..3329
2138 IDENT@3368..3369 "k"2358 EXPR@3327..3329
2139 R_BRACK@3369..3370 "]"2359 EXPR_VAR@3327..3329
2140 R_PAREN@3370..3371 ")"2360 NAME@3327..3329
2141 WHITESPACE@3371..3378 "\n "2361 IDENT@3327..3329 "ch"
2142 FOR_SPEC@3378..34172362 SEMI@3329..3330 ";"
2143 FOR_KW@3378..3381 "for"2363 WHITESPACE@3330..3335 "\n "
2144 WHITESPACE@3381..3382 " "2364 EXPR_VAR@3335..3338
2145 NAME@3382..33832365 NAME@3335..3338
2146 IDENT@3382..3383 "k"2366 IDENT@3335..3338 "std"
2147 WHITESPACE@3383..3384 " "2367 SUFFIX_INDEX@3338..3344
2148 IN_KW@3384..3386 "in"2368 DOT@3338..3339 "."
2149 WHITESPACE@3386..3387 " "2369 NAME@3339..3344
2150 EXPR_APPLY@3387..34172370 IDENT@3339..3344 "foldl"
2151 EXPR_INDEX@3387..34032371 SUFFIX_APPLY@3344..3399
2152 EXPR_VAR@3387..33902372 ARGS_DESC@3344..3399
2153 NAME@3387..33902373 L_PAREN@3344..3345 "("
2154 IDENT@3387..3390 "std"2374 ARG@3345..3372
2155 DOT@3390..3391 "."2375 EXPR@3345..3372
2156 NAME@3391..34032376 EXPR_FUNCTION@3345..3372
2157 IDENT@3391..3403 "objectFields"2377 FUNCTION_KW@3345..3353 "function"
2158 ARGS_DESC@3403..34172378 PARAMS_DESC@3353..3359
2159 L_PAREN@3403..3404 "("2379 L_PAREN@3353..3354 "("
2160 ARG@3404..34162380 PARAM@3354..3355
2161 EXPR_INDEX@3404..34162381 DESTRUCT_FULL@3354..3355
2162 EXPR_VAR@3404..34072382 NAME@3354..3355
2163 NAME@3404..34072383 IDENT@3354..3355 "a"
2164 IDENT@3404..3407 "ini"2384 COMMA@3355..3356 ","
2165 DOT@3407..3408 "."2385 WHITESPACE@3356..3357 " "
2166 NAME@3408..34162386 PARAM@3357..3358
2167 IDENT@3408..3416 "sections"2387 DESTRUCT_FULL@3357..3358
2168 R_PAREN@3416..3417 ")"2388 NAME@3357..3358
2169 WHITESPACE@3417..3422 "\n "2389 IDENT@3357..3358 "b"
2170 R_BRACK@3422..3423 "]"2390 R_PAREN@3358..3359 ")"
2171 SEMI@3423..3424 ";"2391 WHITESPACE@3359..3360 " "
2172 WHITESPACE@3424..3429 "\n "2392 EXPR@3360..3372
2173 EXPR_APPLY@3429..34952393 EXPR_BINARY@3360..3372
2174 EXPR_INDEX@3429..34372394 EXPR@3360..3361
2175 EXPR_VAR@3429..34322395 EXPR_VAR@3360..3361
2176 NAME@3429..34322396 NAME@3360..3361
2177 IDENT@3429..3432 "std"2397 IDENT@3360..3361 "a"
2178 DOT@3432..3433 "."2398 WHITESPACE@3361..3362 " "
2179 NAME@3433..34372399 PLUS@3362..3363 "+"
2180 IDENT@3433..3437 "join"2400 WHITESPACE@3363..3364 " "
2181 ARGS_DESC@3437..34952401 EXPR@3364..3372
2182 L_PAREN@3437..3438 "("2402 EXPR_VAR@3364..3369
2183 ARG@3438..34422403 NAME@3364..3369
2184 EXPR_STRING@3438..34422404 IDENT@3364..3369 "trans"
2185 STRING_SINGLE@3438..3442 "'\\n'"2405 SUFFIX_APPLY@3369..3372
2186 COMMA@3442..3443 ","2406 ARGS_DESC@3369..3372
2187 WHITESPACE@3443..3444 " "2407 L_PAREN@3369..3370 "("
2188 ARG@3444..34942408 ARG@3370..3371
2189 EXPR_BINARY@3444..34942409 EXPR@3370..3371
2190 LHS_EXPR@3444..34872410 EXPR_VAR@3370..3371
2191 EXPR_BINARY@3444..34872411 NAME@3370..3371
2192 LHS_EXPR@3444..34532412 IDENT@3370..3371 "b"
2193 EXPR_VAR@3444..34532413 R_PAREN@3371..3372 ")"
2194 NAME@3444..34532414 COMMA@3372..3373 ","
2195 IDENT@3444..3453 "main_body"2415 WHITESPACE@3373..3374 " "
2196 WHITESPACE@3453..3454 " "2416 ARG@3374..3394
2197 PLUS@3454..3455 "+"2417 EXPR@3374..3394
2198 WHITESPACE@3455..3456 " "2418 EXPR_VAR@3374..3377
2199 EXPR_APPLY@3456..34872419 NAME@3374..3377
2200 EXPR_INDEX@3456..34732420 IDENT@3374..3377 "std"
2201 EXPR_VAR@3456..34592421 SUFFIX_INDEX@3377..3389
2202 NAME@3456..34592422 DOT@3377..3378 "."
2203 IDENT@3456..3459 "std"2423 NAME@3378..3389
2204 DOT@3459..3460 "."2424 IDENT@3378..3389 "stringChars"
2205 NAME@3460..34732425 SUFFIX_APPLY@3389..3394
2206 IDENT@3460..3473 "flattenArrays"2426 ARGS_DESC@3389..3394
2207 ARGS_DESC@3473..34872427 L_PAREN@3389..3390 "("
2208 L_PAREN@3473..3474 "("2428 ARG@3390..3393
2209 ARG@3474..34862429 EXPR@3390..3393
2210 EXPR_VAR@3474..34862430 EXPR_VAR@3390..3393
2211 NAME@3474..34862431 NAME@3390..3393
2212 IDENT@3474..3486 "all_sections"2432 IDENT@3390..3393 "str"
2213 R_PAREN@3486..3487 ")"2433 R_PAREN@3393..3394 ")"
2214 WHITESPACE@3487..3488 " "2434 COMMA@3394..3395 ","
2215 PLUS@3488..3489 "+"2435 WHITESPACE@3395..3396 " "
2216 WHITESPACE@3489..3490 " "2436 ARG@3396..3398
2217 EXPR_ARRAY@3490..34942437 EXPR@3396..3398
2218 L_BRACK@3490..3491 "["2438 EXPR_STRING@3396..3398
2219 EXPR_STRING@3491..34932439 STRING_SINGLE@3396..3398 "''"
2220 STRING_SINGLE@3491..3493 "''"2440 R_PAREN@3398..3399 ")"
2221 R_BRACK@3493..3494 "]"2441 COMMA@3399..3400 ","
2222 R_PAREN@3494..3495 ")"2442 WHITESPACE@3400..3404 "\n\n "
2223 COMMA@3495..3496 ","2443 MEMBER_BIND_STMT@3404..3519
2224 WHITESPACE@3496..3500 "\n\n "2444 OBJ_LOCAL@3404..3519
2225 MEMBER_FIELD_METHOD@3500..35532445 LOCAL_KW@3404..3409 "local"
2226 FIELD_NAME_FIXED@3500..35122446 WHITESPACE@3409..3410 " "
2227 NAME@3500..35122447 BIND_DESTRUCT@3410..3519
2228 IDENT@3500..3512 "manifestToml"2448 DESTRUCT_FULL@3410..3421
2229 PARAMS_DESC@3512..35192449 NAME@3410..3421
2230 L_PAREN@3512..3513 "("2450 IDENT@3410..3421 "xml_escapes"
2231 PARAM@3513..35182451 WHITESPACE@3421..3422 " "
2232 DESTRUCT_FULL@3513..35182452 ASSIGN@3422..3423 "="
2233 NAME@3513..35182453 WHITESPACE@3423..3424 " "
2234 IDENT@3513..3518 "value"2454 EXPR@3424..3519
2235 R_PAREN@3518..3519 ")"2455 EXPR_OBJECT@3424..3519
2236 COLONCOLON@3519..3521 "::"2456 OBJ_BODY_MEMBER_LIST@3424..3519
2237 WHITESPACE@3521..3522 " "2457 L_BRACE@3424..3425 "{"
2238 EXPR_APPLY@3522..35532458 WHITESPACE@3425..3430 "\n "
2239 EXPR_INDEX@3522..35402459 MEMBER_FIELD_NORMAL@3430..3441
2240 EXPR_VAR@3522..35252460 FIELD_NAME_FIXED@3430..3433
2241 NAME@3522..35252461 STRING_SINGLE@3430..3433 "'<'"
2242 IDENT@3522..3525 "std"2462 COLON@3433..3434 ":"
2243 DOT@3525..3526 "."2463 WHITESPACE@3434..3435 " "
2244 NAME@3526..35402464 EXPR@3435..3441
2245 IDENT@3526..3540 "manifestTomlEx"2465 EXPR_STRING@3435..3441
2246 ARGS_DESC@3540..35532466 STRING_SINGLE@3435..3441 "'&lt;'"
2247 L_PAREN@3540..3541 "("2467 COMMA@3441..3442 ","
2248 ARG@3541..35462468 WHITESPACE@3442..3447 "\n "
2249 EXPR_VAR@3541..35462469 MEMBER_FIELD_NORMAL@3447..3458
2250 NAME@3541..35462470 FIELD_NAME_FIXED@3447..3450
2251 IDENT@3541..3546 "value"2471 STRING_SINGLE@3447..3450 "'>'"
2252 COMMA@3546..3547 ","2472 COLON@3450..3451 ":"
2253 WHITESPACE@3547..3548 " "2473 WHITESPACE@3451..3452 " "
2254 ARG@3548..35522474 EXPR@3452..3458
2255 EXPR_STRING@3548..35522475 EXPR_STRING@3452..3458
2256 STRING_SINGLE@3548..3552 "' '"2476 STRING_SINGLE@3452..3458 "'&gt;'"
2257 R_PAREN@3552..3553 ")"2477 COMMA@3458..3459 ","
2258 COMMA@3553..3554 ","2478 WHITESPACE@3459..3464 "\n "
2259 WHITESPACE@3554..3558 "\n\n "2479 MEMBER_FIELD_NORMAL@3464..3476
2260 MEMBER_FIELD_METHOD@3558..36132480 FIELD_NAME_FIXED@3464..3467
2261 FIELD_NAME_FIXED@3558..35762481 STRING_SINGLE@3464..3467 "'&'"
2262 NAME@3558..35762482 COLON@3467..3468 ":"
2263 IDENT@3558..3576 "escapeStringPython"2483 WHITESPACE@3468..3469 " "
2264 PARAMS_DESC@3576..35812484 EXPR@3469..3476
2265 L_PAREN@3576..3577 "("2485 EXPR_STRING@3469..3476
2266 PARAM@3577..35802486 STRING_SINGLE@3469..3476 "'&amp;'"
2267 DESTRUCT_FULL@3577..35802487 COMMA@3476..3477 ","
2268 NAME@3577..35802488 WHITESPACE@3477..3482 "\n "
2269 IDENT@3577..3580 "str"2489 MEMBER_FIELD_NORMAL@3482..3495
2270 R_PAREN@3580..3581 ")"2490 FIELD_NAME_FIXED@3482..3485
2271 COLONCOLON@3581..3583 "::"2491 STRING_SINGLE@3482..3485 "'\"'"
2272 WHITESPACE@3583..3588 "\n "2492 COLON@3485..3486 ":"
2273 EXPR_APPLY@3588..36132493 WHITESPACE@3486..3487 " "
2274 EXPR_INDEX@3588..36082494 EXPR@3487..3495
2495 EXPR_STRING@3487..3495
2496 STRING_SINGLE@3487..3495 "'&quot;'"
2497 COMMA@3495..3496 ","
2498 WHITESPACE@3496..3501 "\n "
2499 MEMBER_FIELD_NORMAL@3501..3514
2500 FIELD_NAME_FIXED@3501..3504
2501 STRING_DOUBLE@3501..3504 "\"'\""
2502 COLON@3504..3505 ":"
2503 WHITESPACE@3505..3506 " "
2504 EXPR@3506..3514
2505 EXPR_STRING@3506..3514
2506 STRING_SINGLE@3506..3514 "'&apos;'"
2507 COMMA@3514..3515 ","
2508 WHITESPACE@3515..3518 "\n "
2509 R_BRACE@3518..3519 "}"
2510 COMMA@3519..3520 ","
2511 WHITESPACE@3520..3524 "\n\n "
2512 MEMBER_FIELD_METHOD@3524..3663
2513 FIELD_NAME_FIXED@3524..3539
2514 NAME@3524..3539
2515 IDENT@3524..3539 "escapeStringXML"
2516 PARAMS_DESC@3539..3545
2517 L_PAREN@3539..3540 "("
2518 PARAM@3540..3544
2519 DESTRUCT_FULL@3540..3544
2520 NAME@3540..3544
2521 IDENT@3540..3544 "str_"
2522 R_PAREN@3544..3545 ")"
2523 COLONCOLON@3545..3547 "::"
2524 WHITESPACE@3547..3552 "\n "
2525 EXPR@3552..3663
2526 STMT_LOCAL@3552..3583
2527 LOCAL_KW@3552..3557 "local"
2528 WHITESPACE@3557..3558 " "
2529 BIND_DESTRUCT@3558..3582
2530 DESTRUCT_FULL@3558..3561
2531 NAME@3558..3561
2532 IDENT@3558..3561 "str"
2533 WHITESPACE@3561..3562 " "
2534 ASSIGN@3562..3563 "="
2535 WHITESPACE@3563..3564 " "
2536 EXPR@3564..3582
2537 EXPR_VAR@3564..3567
2538 NAME@3564..3567
2539 IDENT@3564..3567 "std"
2540 SUFFIX_INDEX@3567..3576
2541 DOT@3567..3568 "."
2542 NAME@3568..3576
2543 IDENT@3568..3576 "toString"
2544 SUFFIX_APPLY@3576..3582
2545 ARGS_DESC@3576..3582
2546 L_PAREN@3576..3577 "("
2547 ARG@3577..3581
2548 EXPR@3577..3581
2549 EXPR_VAR@3577..3581
2550 NAME@3577..3581
2551 IDENT@3577..3581 "str_"
2552 R_PAREN@3581..3582 ")"
2553 SEMI@3582..3583 ";"
2554 WHITESPACE@3583..3588 "\n "
2275 EXPR_VAR@3588..35912555 EXPR_VAR@3588..3591
2276 NAME@3588..35912556 NAME@3588..3591
2277 IDENT@3588..3591 "std"2557 IDENT@3588..3591 "std"
2278 DOT@3591..3592 "."2558 SUFFIX_INDEX@3591..3596
2279 NAME@3592..36082559 DOT@3591..3592 "."
2280 IDENT@3592..3608 "escapeStringJson"2560 NAME@3592..3596
2281 ARGS_DESC@3608..36132561 IDENT@3592..3596 "join"
2282 L_PAREN@3608..3609 "("2562 SUFFIX_APPLY@3596..3663
2283 ARG@3609..36122563 ARGS_DESC@3596..3663
2284 EXPR_VAR@3609..36122564 L_PAREN@3596..3597 "("
2285 NAME@3609..36122565 ARG@3597..3599
2286 IDENT@3609..3612 "str"2566 EXPR@3597..3599
2287 R_PAREN@3612..3613 ")"2567 EXPR_STRING@3597..3599
2288 COMMA@3613..3614 ","2568 STRING_SINGLE@3597..3599 "''"
2289 WHITESPACE@3614..3618 "\n\n "2569 COMMA@3599..3600 ","
2290 MEMBER_FIELD_METHOD@3618..38352570 WHITESPACE@3600..3601 " "
2291 FIELD_NAME_FIXED@3618..36342571 ARG@3601..3662
2292 NAME@3618..36342572 EXPR@3601..3662
2293 IDENT@3618..3634 "escapeStringBash"2573 EXPR_ARRAY_COMP@3601..3662
2294 PARAMS_DESC@3634..36402574 L_BRACK@3601..3602 "["
2295 L_PAREN@3634..3635 "("2575 EXPR@3602..3630
2296 PARAM@3635..36392576 EXPR_VAR@3602..3605
2297 DESTRUCT_FULL@3635..36392577 NAME@3602..3605
2298 NAME@3635..36392578 IDENT@3602..3605 "std"
2299 IDENT@3635..3639 "str_"2579 SUFFIX_INDEX@3605..3609
2300 R_PAREN@3639..3640 ")"2580 DOT@3605..3606 "."
2301 COLONCOLON@3640..3642 "::"2581 NAME@3606..3609
2302 WHITESPACE@3642..3647 "\n "2582 IDENT@3606..3609 "get"
2303 STMT_LOCAL@3647..36782583 SUFFIX_APPLY@3609..3630
2304 LOCAL_KW@3647..3652 "local"2584 ARGS_DESC@3609..3630
2305 WHITESPACE@3652..3653 " "2585 L_PAREN@3609..3610 "("
2306 BIND_DESTRUCT@3653..36772586 ARG@3610..3621
2307 DESTRUCT_FULL@3653..36562587 EXPR@3610..3621
2308 NAME@3653..36562588 EXPR_VAR@3610..3621
2309 IDENT@3653..3656 "str"2589 NAME@3610..3621
2310 WHITESPACE@3656..3657 " "2590 IDENT@3610..3621 "xml_escapes"
2311 ASSIGN@3657..3658 "="2591 COMMA@3621..3622 ","
2312 WHITESPACE@3658..3659 " "2592 WHITESPACE@3622..3623 " "
2313 EXPR_APPLY@3659..36772593 ARG@3623..3625
2314 EXPR_INDEX@3659..36712594 EXPR@3623..3625
2315 EXPR_VAR@3659..36622595 EXPR_VAR@3623..3625
2316 NAME@3659..36622596 NAME@3623..3625
2317 IDENT@3659..3662 "std"2597 IDENT@3623..3625 "ch"
2318 DOT@3662..3663 "."2598 COMMA@3625..3626 ","
2319 NAME@3663..36712599 WHITESPACE@3626..3627 " "
2320 IDENT@3663..3671 "toString"2600 ARG@3627..3629
2321 ARGS_DESC@3671..36772601 EXPR@3627..3629
2322 L_PAREN@3671..3672 "("2602 EXPR_VAR@3627..3629
2323 ARG@3672..36762603 NAME@3627..3629
2324 EXPR_VAR@3672..36762604 IDENT@3627..3629 "ch"
2325 NAME@3672..36762605 R_PAREN@3629..3630 ")"
2326 IDENT@3672..3676 "str_"2606 WHITESPACE@3630..3631 " "
2327 R_PAREN@3676..3677 ")"2607 FOR_SPEC@3631..3661
2328 SEMI@3677..3678 ";"2608 FOR_KW@3631..3634 "for"
2329 WHITESPACE@3678..3683 "\n "2609 WHITESPACE@3634..3635 " "
2330 STMT_LOCAL@3683..37652610 DESTRUCT_FULL@3635..3637
2331 LOCAL_KW@3683..3688 "local"2611 NAME@3635..3637
2332 WHITESPACE@3688..3689 " "2612 IDENT@3635..3637 "ch"
2333 BIND_FUNCTION@3689..37642613 WHITESPACE@3637..3638 " "
2334 NAME@3689..36942614 IN_KW@3638..3640 "in"
2335 IDENT@3689..3694 "trans"2615 WHITESPACE@3640..3641 " "
2336 PARAMS_DESC@3694..36982616 EXPR@3641..3661
2337 L_PAREN@3694..3695 "("2617 EXPR_VAR@3641..3644
2338 PARAM@3695..36972618 NAME@3641..3644
2339 DESTRUCT_FULL@3695..36972619 IDENT@3641..3644 "std"
2340 NAME@3695..36972620 SUFFIX_INDEX@3644..3656
2341 IDENT@3695..3697 "ch"2621 DOT@3644..3645 "."
2342 R_PAREN@3697..3698 ")"2622 NAME@3645..3656
2343 WHITESPACE@3698..3699 " "2623 IDENT@3645..3656 "stringChars"
2344 ASSIGN@3699..3700 "="2624 SUFFIX_APPLY@3656..3661
2345 WHITESPACE@3700..3707 "\n "2625 ARGS_DESC@3656..3661
2346 EXPR_IF_THEN_ELSE@3707..37642626 L_PAREN@3656..3657 "("
2347 IF_KW@3707..3709 "if"2627 ARG@3657..3660
2348 WHITESPACE@3709..3710 " "2628 EXPR@3657..3660
2349 EXPR_BINARY@3710..37192629 EXPR_VAR@3657..3660
2350 LHS_EXPR@3710..37122630 NAME@3657..3660
2351 EXPR_VAR@3710..37122631 IDENT@3657..3660 "str"
2352 NAME@3710..37122632 R_PAREN@3660..3661 ")"
2353 IDENT@3710..3712 "ch"2633 R_BRACK@3661..3662 "]"
2354 WHITESPACE@3712..3713 " "2634 R_PAREN@3662..3663 ")"
2355 EQ@3713..3715 "=="2635 COMMA@3663..3664 ","
2636 WHITESPACE@3664..3668 "\n\n "
2637 MEMBER_FIELD_METHOD@3668..3734
2638 FIELD_NAME_FIXED@3668..3680
2639 NAME@3668..3680
2640 IDENT@3668..3680 "manifestJson"
2641 PARAMS_DESC@3680..3687
2642 L_PAREN@3680..3681 "("
2643 PARAM@3681..3686
2644 DESTRUCT_FULL@3681..3686
2645 NAME@3681..3686
2646 IDENT@3681..3686 "value"
2647 R_PAREN@3686..3687 ")"
2648 COLONCOLON@3687..3689 "::"
2649 WHITESPACE@3689..3690 " "
2650 EXPR@3690..3734
2651 EXPR_VAR@3690..3693
2652 NAME@3690..3693
2653 IDENT@3690..3693 "std"
2654 SUFFIX_INDEX@3693..3708
2655 DOT@3693..3694 "."
2656 NAME@3694..3708
2657 IDENT@3694..3708 "manifestJsonEx"
2658 SUFFIX_APPLY@3708..3734
2659 ARGS_DESC@3708..3734
2660 L_PAREN@3708..3709 "("
2661 ARG@3709..3714
2662 EXPR@3709..3714
2663 EXPR_VAR@3709..3714
2664 NAME@3709..3714
2665 IDENT@3709..3714 "value"
2666 COMMA@3714..3715 ","
2356 WHITESPACE@3715..3716 " "2667 WHITESPACE@3715..3716 " "
2357 EXPR_STRING@3716..37192668 ARG@3716..3722
2358 STRING_DOUBLE@3716..3719 "\"'\""2669 EXPR@3716..3722
2359 WHITESPACE@3719..3720 " "2670 EXPR_STRING@3716..3722
2360 THEN_KW@3720..3724 "then"2671 STRING_SINGLE@3716..3722 "' '"
2361 WHITESPACE@3724..3733 "\n "2672 R_PAREN@3722..3723 ")"
2362 TRUE_EXPR@3733..37422673 WHITESPACE@3723..3724 " "
2363 EXPR_STRING@3733..37422674 TAILSTRICT_KW@3724..3734 "tailstrict"
2364 STRING_DOUBLE@3733..3742 "\"'\\\"'\\\"'\""2675 COMMA@3734..3735 ","
2365 WHITESPACE@3742..3749 "\n "2676 WHITESPACE@3735..3739 "\n\n "
2366 ELSE_KW@3749..3753 "else"2677 MEMBER_FIELD_METHOD@3739..3807
2367 WHITESPACE@3753..3762 "\n "2678 FIELD_NAME_FIXED@3739..3759
2368 FALSE_EXPR@3762..37642679 NAME@3739..3759
2369 EXPR_VAR@3762..37642680 IDENT@3739..3759 "manifestJsonMinified"
2370 NAME@3762..37642681 PARAMS_DESC@3759..3766
2371 IDENT@3762..3764 "ch"2682 L_PAREN@3759..3760 "("
2372 SEMI@3764..3765 ";"2683 PARAM@3760..3765
2373 WHITESPACE@3765..3770 "\n "2684 DESTRUCT_FULL@3760..3765
2374 EXPR_BINARY@3770..38352685 NAME@3760..3765
2375 LHS_EXPR@3770..37762686 IDENT@3760..3765 "value"
2376 EXPR_STRING@3770..37762687 R_PAREN@3765..3766 ")"
2377 STRING_DOUBLE@3770..3776 "\"'%s'\""2688 COLONCOLON@3766..3768 "::"
2378 WHITESPACE@3776..3777 " "2689 WHITESPACE@3768..3769 " "
2379 MODULO@3777..3778 "%"2690 EXPR@3769..3807
2380 WHITESPACE@3778..3779 " "2691 EXPR_VAR@3769..3772
2381 EXPR_APPLY@3779..38352692 NAME@3769..3772
2382 EXPR_INDEX@3779..37872693 IDENT@3769..3772 "std"
2383 EXPR_VAR@3779..37822694 SUFFIX_INDEX@3772..3787
2384 NAME@3779..37822695 DOT@3772..3773 "."
2385 IDENT@3779..3782 "std"2696 NAME@3773..3787
2386 DOT@3782..3783 "."2697 IDENT@3773..3787 "manifestJsonEx"
2387 NAME@3783..37872698 SUFFIX_APPLY@3787..3807
2388 IDENT@3783..3787 "join"2699 ARGS_DESC@3787..3807
2389 ARGS_DESC@3787..38352700 L_PAREN@3787..3788 "("
2390 L_PAREN@3787..3788 "("2701 ARG@3788..3793
2391 ARG@3788..37902702 EXPR@3788..3793
2392 EXPR_STRING@3788..37902703 EXPR_VAR@3788..3793
2393 STRING_SINGLE@3788..3790 "''"2704 NAME@3788..3793
2394 COMMA@3790..3791 ","2705 IDENT@3788..3793 "value"
2395 WHITESPACE@3791..3792 " "2706 COMMA@3793..3794 ","
2396 ARG@3792..38342707 WHITESPACE@3794..3795 " "
2397 EXPR_ARRAY_COMP@3792..38342708 ARG@3795..3797
2398 L_BRACK@3792..3793 "["2709 EXPR@3795..3797
2399 EXPR_APPLY@3793..38022710 EXPR_STRING@3795..3797
2400 EXPR_VAR@3793..37982711 STRING_SINGLE@3795..3797 "''"
2401 NAME@3793..37982712 COMMA@3797..3798 ","
2402 IDENT@3793..3798 "trans"2713 WHITESPACE@3798..3799 " "
2403 ARGS_DESC@3798..38022714 ARG@3799..3801
2404 L_PAREN@3798..3799 "("2715 EXPR@3799..3801
2405 ARG@3799..38012716 EXPR_STRING@3799..3801
2406 EXPR_VAR@3799..38012717 STRING_SINGLE@3799..3801 "''"
2407 NAME@3799..38012718 COMMA@3801..3802 ","
2408 IDENT@3799..3801 "ch"2719 WHITESPACE@3802..3803 " "
2409 R_PAREN@3801..3802 ")"2720 ARG@3803..3806
2410 WHITESPACE@3802..3803 " "2721 EXPR@3803..3806
2411 FOR_SPEC@3803..38332722 EXPR_STRING@3803..3806
2412 FOR_KW@3803..3806 "for"2723 STRING_SINGLE@3803..3806 "':'"
2413 WHITESPACE@3806..3807 " "2724 R_PAREN@3806..3807 ")"
2414 NAME@3807..38092725 COMMA@3807..3808 ","
2415 IDENT@3807..3809 "ch"2726 WHITESPACE@3808..3812 "\n\n "
2416 WHITESPACE@3809..3810 " "2727 MEMBER_FIELD_METHOD@3812..4197
2417 IN_KW@3810..3812 "in"2728 FIELD_NAME_FIXED@3812..3830
2418 WHITESPACE@3812..3813 " "2729 NAME@3812..3830
2419 EXPR_APPLY@3813..38332730 IDENT@3812..3830 "manifestYamlStream"
2420 EXPR_INDEX@3813..38282731 PARAMS_DESC@3830..3905
2421 EXPR_VAR@3813..38162732 L_PAREN@3830..3831 "("
2422 NAME@3813..38162733 PARAM@3831..3836
2423 IDENT@3813..3816 "std"2734 DESTRUCT_FULL@3831..3836
2424 DOT@3816..3817 "."2735 NAME@3831..3836
2425 NAME@3817..38282736 IDENT@3831..3836 "value"
2426 IDENT@3817..3828 "stringChars"2737 COMMA@3836..3837 ","
2427 ARGS_DESC@3828..38332738 WHITESPACE@3837..3838 " "
2428 L_PAREN@3828..3829 "("2739 PARAM@3838..3866
2429 ARG@3829..38322740 DESTRUCT_FULL@3838..3860
2430 EXPR_VAR@3829..38322741 NAME@3838..3860
2431 NAME@3829..38322742 IDENT@3838..3860 "indent_array_in_object"
2432 IDENT@3829..3832 "str"2743 ASSIGN@3860..3861 "="
2433 R_PAREN@3832..3833 ")"2744 EXPR@3861..3866
2434 R_BRACK@3833..3834 "]"2745 EXPR_LITERAL@3861..3866
2435 R_PAREN@3834..3835 ")"2746 FALSE_KW@3861..3866 "false"
2436 COMMA@3835..3836 ","2747 COMMA@3866..3867 ","
2437 WHITESPACE@3836..3840 "\n\n "2748 WHITESPACE@3867..3868 " "
2438 MEMBER_FIELD_METHOD@3840..40542749 PARAM@3868..3887
2439 FIELD_NAME_FIXED@3840..38592750 DESTRUCT_FULL@3868..3882
2440 NAME@3840..38592751 NAME@3868..3882
2441 IDENT@3840..3859 "escapeStringDollars"2752 IDENT@3868..3882 "c_document_end"
2442 PARAMS_DESC@3859..38652753 ASSIGN@3882..3883 "="
2443 L_PAREN@3859..3860 "("2754 EXPR@3883..3887
2444 PARAM@3860..38642755 EXPR_LITERAL@3883..3887
2445 DESTRUCT_FULL@3860..38642756 TRUE_KW@3883..3887 "true"
2446 NAME@3860..38642757 COMMA@3887..3888 ","
2447 IDENT@3860..3864 "str_"2758 WHITESPACE@3888..3889 " "
2448 R_PAREN@3864..3865 ")"2759 PARAM@3889..3904
2449 COLONCOLON@3865..3867 "::"2760 DESTRUCT_FULL@3889..3899
2450 WHITESPACE@3867..3872 "\n "2761 NAME@3889..3899
2451 STMT_LOCAL@3872..39032762 IDENT@3889..3899 "quote_keys"
2452 LOCAL_KW@3872..3877 "local"2763 ASSIGN@3899..3900 "="
2453 WHITESPACE@3877..3878 " "2764 EXPR@3900..3904
2454 BIND_DESTRUCT@3878..39022765 EXPR_LITERAL@3900..3904
2455 DESTRUCT_FULL@3878..38812766 TRUE_KW@3900..3904 "true"
2456 NAME@3878..38812767 R_PAREN@3904..3905 ")"
2457 IDENT@3878..3881 "str"2768 COLONCOLON@3905..3907 "::"
2458 WHITESPACE@3881..3882 " "2769 WHITESPACE@3907..3912 "\n "
2459 ASSIGN@3882..3883 "="2770 EXPR@3912..4197
2460 WHITESPACE@3883..3884 " "2771 EXPR_IF_THEN_ELSE@3912..4197
2461 EXPR_APPLY@3884..39022772 IF_KW@3912..3914 "if"
2462 EXPR_INDEX@3884..38962773 WHITESPACE@3914..3915 " "
2463 EXPR_VAR@3884..38872774 EXPR@3915..3934
2464 NAME@3884..38872775 EXPR_UNARY@3915..3934
2465 IDENT@3884..3887 "std"2776 NOT@3915..3916 "!"
2466 DOT@3887..3888 "."2777 EXPR_VAR@3916..3919
2467 NAME@3888..38962778 NAME@3916..3919
2468 IDENT@3888..3896 "toString"2779 IDENT@3916..3919 "std"
2469 ARGS_DESC@3896..39022780 SUFFIX_INDEX@3919..3927
2470 L_PAREN@3896..3897 "("2781 DOT@3919..3920 "."
2471 ARG@3897..39012782 NAME@3920..3927
2472 EXPR_VAR@3897..39012783 IDENT@3920..3927 "isArray"
2473 NAME@3897..39012784 SUFFIX_APPLY@3927..3934
2474 IDENT@3897..3901 "str_"2785 ARGS_DESC@3927..3934
2475 R_PAREN@3901..3902 ")"2786 L_PAREN@3927..3928 "("
2476 SEMI@3902..3903 ";"2787 ARG@3928..3933
2477 WHITESPACE@3903..3908 "\n "2788 EXPR@3928..3933
2478 STMT_LOCAL@3908..39852789 EXPR_VAR@3928..3933
2479 LOCAL_KW@3908..3913 "local"2790 NAME@3928..3933
2480 WHITESPACE@3913..3914 " "2791 IDENT@3928..3933 "value"
2481 BIND_FUNCTION@3914..39842792 R_PAREN@3933..3934 ")"
2482 NAME@3914..3919
2483 IDENT@3914..3919 "trans"
2484 PARAMS_DESC@3919..3923
2485 L_PAREN@3919..3920 "("
2486 PARAM@3920..3922
2487 DESTRUCT_FULL@3920..3922
2488 NAME@3920..3922
2489 IDENT@3920..3922 "ch"
2490 R_PAREN@3922..3923 ")"
2491 WHITESPACE@3923..3924 " "
2492 ASSIGN@3924..3925 "="
2493 WHITESPACE@3925..3932 "\n "
2494 EXPR_IF_THEN_ELSE@3932..3984
2495 IF_KW@3932..3934 "if"
2496 WHITESPACE@3934..3935 " "2793 WHITESPACE@3934..3935 " "
2497 EXPR_BINARY@3935..39442794 THEN_KW@3935..3939 "then"
2498 LHS_EXPR@3935..39372795 WHITESPACE@3939..3946 "\n "
2499 EXPR_VAR@3935..39372796 TRUE_EXPR@3946..4014
2500 NAME@3935..39372797 EXPR@3946..4014
2501 IDENT@3935..3937 "ch"2798 EXPR_ERROR@3946..4014
2502 WHITESPACE@3937..3938 " "2799 ERROR_KW@3946..3951 "error"
2503 EQ@3938..3940 "=="2800 WHITESPACE@3951..3952 " "
2504 WHITESPACE@3940..3941 " "2801 EXPR@3952..4014
2505 EXPR_STRING@3941..39442802 EXPR_BINARY@3952..4014
2506 STRING_SINGLE@3941..3944 "'$'"2803 EXPR@3952..3996
2507 WHITESPACE@3944..3945 " "2804 EXPR_STRING@3952..3996
2508 THEN_KW@3945..3949 "then"2805 STRING_SINGLE@3952..3996 "'manifestYamlStream o ..."
2509 WHITESPACE@3949..3958 "\n "2806 WHITESPACE@3996..3997 " "
2510 TRUE_EXPR@3958..39622807 PLUS@3997..3998 "+"
2511 EXPR_STRING@3958..39622808 WHITESPACE@3998..3999 " "
2512 STRING_SINGLE@3958..3962 "'$$'"2809 EXPR@3999..4014
2513 WHITESPACE@3962..3969 "\n "2810 EXPR_VAR@3999..4002
2514 ELSE_KW@3969..3973 "else"2811 NAME@3999..4002
2515 WHITESPACE@3973..3982 "\n "2812 IDENT@3999..4002 "std"
2516 FALSE_EXPR@3982..39842813 SUFFIX_INDEX@4002..4007
2517 EXPR_VAR@3982..39842814 DOT@4002..4003 "."
2518 NAME@3982..39842815 NAME@4003..4007
2519 IDENT@3982..3984 "ch"2816 IDENT@4003..4007 "type"
2520 SEMI@3984..3985 ";"2817 SUFFIX_APPLY@4007..4014
2521 WHITESPACE@3985..3990 "\n "2818 ARGS_DESC@4007..4014
2522 EXPR_APPLY@3990..40542819 L_PAREN@4007..4008 "("
2523 EXPR_INDEX@3990..39992820 ARG@4008..4013
2524 EXPR_VAR@3990..39932821 EXPR@4008..4013
2525 NAME@3990..39932822 EXPR_VAR@4008..4013
2526 IDENT@3990..3993 "std"2823 NAME@4008..4013
2527 DOT@3993..3994 "."2824 IDENT@4008..4013 "value"
2528 NAME@3994..39992825 R_PAREN@4013..4014 ")"
2529 IDENT@3994..3999 "foldl"2826 WHITESPACE@4014..4019 "\n "
2530 ARGS_DESC@3999..40542827 ELSE_KW@4019..4023 "else"
2531 L_PAREN@3999..4000 "("2828 WHITESPACE@4023..4030 "\n "
2532 ARG@4000..40272829 FALSE_EXPR@4030..4197
2533 EXPR_FUNCTION@4000..40272830 EXPR@4030..4197
2534 FUNCTION_KW@4000..4008 "function"2831 EXPR_BINARY@4030..4197
2535 PARAMS_DESC@4008..40142832 EXPR@4030..4152
2536 L_PAREN@4008..4009 "("2833 EXPR_BINARY@4030..4152
2537 PARAM@4009..40102834 EXPR@4030..4037
2538 DESTRUCT_FULL@4009..40102835 EXPR_STRING@4030..4037
2539 NAME@4009..40102836 STRING_SINGLE@4030..4037 "'---\\n'"
2540 IDENT@4009..4010 "a"2837 WHITESPACE@4037..4038 " "
2541 COMMA@4010..4011 ","2838 PLUS@4038..4039 "+"
2542 WHITESPACE@4011..4012 " "2839 WHITESPACE@4039..4040 " "
2543 PARAM@4012..40132840 EXPR@4040..4152
2544 DESTRUCT_FULL@4012..40132841 EXPR_VAR@4040..4043
2545 NAME@4012..40132842 NAME@4040..4043
2546 IDENT@4012..4013 "b"2843 IDENT@4040..4043 "std"
2547 R_PAREN@4013..4014 ")"2844 SUFFIX_INDEX@4043..4048
2548 WHITESPACE@4014..4015 " "2845 DOT@4043..4044 "."
2549 EXPR_BINARY@4015..40272846 NAME@4044..4048
2550 LHS_EXPR@4015..40162847 IDENT@4044..4048 "join"
2551 EXPR_VAR@4015..40162848 SUFFIX_APPLY@4048..4152
2552 NAME@4015..40162849 ARGS_DESC@4048..4152
2553 IDENT@4015..4016 "a"2850 L_PAREN@4048..4049 "("
2554 WHITESPACE@4016..4017 " "2851 WHITESPACE@4049..4058 "\n "
2555 PLUS@4017..4018 "+"2852 ARG@4058..4067
2556 WHITESPACE@4018..4019 " "2853 EXPR@4058..4067
2557 EXPR_APPLY@4019..40272854 EXPR_STRING@4058..4067
2558 EXPR_VAR@4019..40242855 STRING_SINGLE@4058..4067 "'\\n---\\n'"
2559 NAME@4019..40242856 COMMA@4067..4068 ","
2560 IDENT@4019..4024 "trans"2857 WHITESPACE@4068..4069 " "
2561 ARGS_DESC@4024..40272858 ARG@4069..4144
2562 L_PAREN@4024..4025 "("2859 EXPR@4069..4144
2563 ARG@4025..40262860 EXPR_ARRAY_COMP@4069..4144
2564 EXPR_VAR@4025..40262861 L_BRACK@4069..4070 "["
2565 NAME@4025..40262862 EXPR@4070..4128
2566 IDENT@4025..4026 "b"2863 EXPR_VAR@4070..4073
2567 R_PAREN@4026..4027 ")"2864 NAME@4070..4073
2568 COMMA@4027..4028 ","2865 IDENT@4070..4073 "std"
2569 WHITESPACE@4028..4029 " "2866 SUFFIX_INDEX@4073..4089
2570 ARG@4029..40492867 DOT@4073..4074 "."
2571 EXPR_APPLY@4029..40492868 NAME@4074..4089
2572 EXPR_INDEX@4029..40442869 IDENT@4074..4089 "manifestYamlDoc"
2573 EXPR_VAR@4029..40322870 SUFFIX_APPLY@4089..4128
2574 NAME@4029..40322871 ARGS_DESC@4089..4128
2575 IDENT@4029..4032 "std"2872 L_PAREN@4089..4090 "("
2576 DOT@4032..4033 "."2873 ARG@4090..4091
2577 NAME@4033..40442874 EXPR@4090..4091
2578 IDENT@4033..4044 "stringChars"2875 EXPR_VAR@4090..4091
2579 ARGS_DESC@4044..40492876 NAME@4090..4091
2580 L_PAREN@4044..4045 "("2877 IDENT@4090..4091 "e"
2581 ARG@4045..40482878 COMMA@4091..4092 ","
2582 EXPR_VAR@4045..40482879 WHITESPACE@4092..4093 " "
2583 NAME@4045..40482880 ARG@4093..4115
2584 IDENT@4045..4048 "str"2881 EXPR@4093..4115
2585 R_PAREN@4048..4049 ")"2882 EXPR_VAR@4093..4115
2586 COMMA@4049..4050 ","2883 NAME@4093..4115
2587 WHITESPACE@4050..4051 " "2884 IDENT@4093..4115 "indent_array_in_object"
2588 ARG@4051..40532885 COMMA@4115..4116 ","
2589 EXPR_STRING@4051..40532886 WHITESPACE@4116..4117 " "
2590 STRING_SINGLE@4051..4053 "''"2887 ARG@4117..4127
2591 R_PAREN@4053..4054 ")"2888 EXPR@4117..4127
2592 COMMA@4054..4055 ","2889 EXPR_VAR@4117..4127
2593 WHITESPACE@4055..4059 "\n\n "2890 NAME@4117..4127
2594 MEMBER_BIND_STMT@4059..41742891 IDENT@4117..4127 "quote_keys"
2595 OBJ_LOCAL@4059..41742892 R_PAREN@4127..4128 ")"
2596 LOCAL_KW@4059..4064 "local"2893 WHITESPACE@4128..4129 " "
2597 WHITESPACE@4064..4065 " "2894 FOR_SPEC@4129..4143
2598 BIND_DESTRUCT@4065..41742895 FOR_KW@4129..4132 "for"
2599 DESTRUCT_FULL@4065..40762896 WHITESPACE@4132..4133 " "
2600 NAME@4065..40762897 DESTRUCT_FULL@4133..4134
2601 IDENT@4065..4076 "xml_escapes"2898 NAME@4133..4134
2602 WHITESPACE@4076..4077 " "2899 IDENT@4133..4134 "e"
2603 ASSIGN@4077..4078 "="2900 WHITESPACE@4134..4135 " "
2604 WHITESPACE@4078..4079 " "2901 IN_KW@4135..4137 "in"
2605 EXPR_OBJECT@4079..41742902 WHITESPACE@4137..4138 " "
2606 OBJ_BODY_MEMBER_LIST@4079..41742903 EXPR@4138..4143
2607 L_BRACE@4079..4080 "{"2904 EXPR_VAR@4138..4143
2608 WHITESPACE@4080..4085 "\n "2905 NAME@4138..4143
2609 MEMBER_FIELD_NORMAL@4085..40962906 IDENT@4138..4143 "value"
2610 FIELD_NAME_FIXED@4085..40882907 R_BRACK@4143..4144 "]"
2611 STRING_SINGLE@4085..4088 "'<'"2908 WHITESPACE@4144..4151 "\n "
2612 COLON@4088..4089 ":"2909 R_PAREN@4151..4152 ")"
2613 WHITESPACE@4089..4090 " "2910 WHITESPACE@4152..4153 " "
2614 EXPR_STRING@4090..40962911 PLUS@4153..4154 "+"
2615 STRING_SINGLE@4090..4096 "'&lt;'"2912 WHITESPACE@4154..4155 " "
2616 COMMA@4096..4097 ","2913 EXPR@4155..4197
2617 WHITESPACE@4097..4102 "\n "2914 EXPR_IF_THEN_ELSE@4155..4197
2618 MEMBER_FIELD_NORMAL@4102..41132915 IF_KW@4155..4157 "if"
2619 FIELD_NAME_FIXED@4102..41052916 WHITESPACE@4157..4158 " "
2620 STRING_SINGLE@4102..4105 "'>'"2917 EXPR@4158..4172
2621 COLON@4105..4106 ":"2918 EXPR_VAR@4158..4172
2622 WHITESPACE@4106..4107 " "2919 NAME@4158..4172
2623 EXPR_STRING@4107..41132920 IDENT@4158..4172 "c_document_end"
2624 STRING_SINGLE@4107..4113 "'&gt;'"2921 WHITESPACE@4172..4173 " "
2625 COMMA@4113..4114 ","2922 THEN_KW@4173..4177 "then"
2626 WHITESPACE@4114..4119 "\n "2923 WHITESPACE@4177..4178 " "
2627 MEMBER_FIELD_NORMAL@4119..41312924 TRUE_EXPR@4178..4187
2628 FIELD_NAME_FIXED@4119..41222925 EXPR@4178..4187
2629 STRING_SINGLE@4119..4122 "'&'"2926 EXPR_STRING@4178..4187
2630 COLON@4122..4123 ":"2927 STRING_SINGLE@4178..4187 "'\\n...\\n'"
2631 WHITESPACE@4123..4124 " "2928 WHITESPACE@4187..4188 " "
2632 EXPR_STRING@4124..41312929 ELSE_KW@4188..4192 "else"
2633 STRING_SINGLE@4124..4131 "'&amp;'"2930 WHITESPACE@4192..4193 " "
2634 COMMA@4131..4132 ","2931 FALSE_EXPR@4193..4197
2635 WHITESPACE@4132..4137 "\n "2932 EXPR@4193..4197
2636 MEMBER_FIELD_NORMAL@4137..41502933 EXPR_STRING@4193..4197
2637 FIELD_NAME_FIXED@4137..41402934 STRING_SINGLE@4193..4197 "'\\n'"
2638 STRING_SINGLE@4137..4140 "'\"'"2935 COMMA@4197..4198 ","
2639 COLON@4140..4141 ":"2936 WHITESPACE@4198..4202 "\n\n "
2640 WHITESPACE@4141..4142 " "2937 MEMBER_FIELD_METHOD@4202..4858
2641 EXPR_STRING@4142..41502938 FIELD_NAME_FIXED@4202..4216
2642 STRING_SINGLE@4142..4150 "'&quot;'"2939 NAME@4202..4216
2643 COMMA@4150..4151 ","2940 IDENT@4202..4216 "manifestPython"
2644 WHITESPACE@4151..4156 "\n "2941 PARAMS_DESC@4216..4219
2645 MEMBER_FIELD_NORMAL@4156..41692942 L_PAREN@4216..4217 "("
2646 FIELD_NAME_FIXED@4156..41592943 PARAM@4217..4218
2647 STRING_DOUBLE@4156..4159 "\"'\""2944 DESTRUCT_FULL@4217..4218
2648 COLON@4159..4160 ":"2945 NAME@4217..4218
2649 WHITESPACE@4160..4161 " "2946 IDENT@4217..4218 "v"
2650 EXPR_STRING@4161..41692947 R_PAREN@4218..4219 ")"
2651 STRING_SINGLE@4161..4169 "'&apos;'"2948 COLONCOLON@4219..4221 "::"
2652 COMMA@4169..4170 ","2949 WHITESPACE@4221..4226 "\n "
2653 WHITESPACE@4170..4173 "\n "2950 EXPR@4226..4858
2654 R_BRACE@4173..4174 "}"2951 EXPR_IF_THEN_ELSE@4226..4858
2655 COMMA@4174..4175 ","2952 IF_KW@4226..4228 "if"
2656 WHITESPACE@4175..4179 "\n\n "2953 WHITESPACE@4228..4229 " "
2657 MEMBER_FIELD_METHOD@4179..43182954 EXPR@4229..4244
2658 FIELD_NAME_FIXED@4179..41942955 EXPR_VAR@4229..4232
2659 NAME@4179..41942956 NAME@4229..4232
2660 IDENT@4179..4194 "escapeStringXML"2957 IDENT@4229..4232 "std"
2661 PARAMS_DESC@4194..42002958 SUFFIX_INDEX@4232..4241
2662 L_PAREN@4194..4195 "("2959 DOT@4232..4233 "."
2663 PARAM@4195..41992960 NAME@4233..4241
2664 DESTRUCT_FULL@4195..41992961 IDENT@4233..4241 "isObject"
2665 NAME@4195..41992962 SUFFIX_APPLY@4241..4244
2666 IDENT@4195..4199 "str_"2963 ARGS_DESC@4241..4244
2667 R_PAREN@4199..4200 ")"2964 L_PAREN@4241..4242 "("
2668 COLONCOLON@4200..4202 "::"2965 ARG@4242..4243
2669 WHITESPACE@4202..4207 "\n "2966 EXPR@4242..4243
2670 STMT_LOCAL@4207..42382967 EXPR_VAR@4242..4243
2671 LOCAL_KW@4207..4212 "local"2968 NAME@4242..4243
2672 WHITESPACE@4212..4213 " "2969 IDENT@4242..4243 "v"
2673 BIND_DESTRUCT@4213..42372970 R_PAREN@4243..4244 ")"
2674 DESTRUCT_FULL@4213..42162971 WHITESPACE@4244..4245 " "
2675 NAME@4213..42162972 THEN_KW@4245..4249 "then"
2676 IDENT@4213..4216 "str"2973 WHITESPACE@4249..4256 "\n "
2677 WHITESPACE@4216..4217 " "2974 TRUE_EXPR@4256..4431
2678 ASSIGN@4217..4218 "="2975 EXPR@4256..4431
2679 WHITESPACE@4218..4219 " "2976 STMT_LOCAL@4256..4391
2680 EXPR_APPLY@4219..42372977 LOCAL_KW@4256..4261 "local"
2681 EXPR_INDEX@4219..42312978 WHITESPACE@4261..4262 " "
2682 EXPR_VAR@4219..42222979 BIND_DESTRUCT@4262..4390
2683 NAME@4219..42222980 DESTRUCT_FULL@4262..4268
2684 IDENT@4219..4222 "std"2981 NAME@4262..4268
2685 DOT@4222..4223 "."2982 IDENT@4262..4268 "fields"
2686 NAME@4223..42312983 WHITESPACE@4268..4269 " "
2687 IDENT@4223..4231 "toString"2984 ASSIGN@4269..4270 "="
2688 ARGS_DESC@4231..42372985 WHITESPACE@4270..4271 " "
2689 L_PAREN@4231..4232 "("2986 EXPR@4271..4390
2690 ARG@4232..42362987 EXPR_ARRAY_COMP@4271..4390
2691 EXPR_VAR@4232..42362988 L_BRACK@4271..4272 "["
2692 NAME@4232..42362989 WHITESPACE@4272..4281 "\n "
2693 IDENT@4232..4236 "str_"2990 EXPR@4281..4345
2694 R_PAREN@4236..4237 ")"2991 EXPR_BINARY@4281..4345
2695 SEMI@4237..4238 ";"2992 EXPR@4281..4289
2696 WHITESPACE@4238..4243 "\n "2993 EXPR_STRING@4281..4289
2697 EXPR_APPLY@4243..43182994 STRING_SINGLE@4281..4289 "'%s: %s'"
2698 EXPR_INDEX@4243..42512995 WHITESPACE@4289..4290 " "
2699 EXPR_VAR@4243..42462996 MODULO@4290..4291 "%"
2700 NAME@4243..42462997 WHITESPACE@4291..4292 " "
2701 IDENT@4243..4246 "std"2998 EXPR@4292..4345
2702 DOT@4246..4247 "."2999 EXPR_ARRAY@4292..4345
2703 NAME@4247..42513000 L_BRACK@4292..4293 "["
2704 IDENT@4247..4251 "join"3001 EXPR@4293..4318
2705 ARGS_DESC@4251..43183002 EXPR_VAR@4293..4296
2706 L_PAREN@4251..4252 "("3003 NAME@4293..4296
2707 ARG@4252..42543004 IDENT@4293..4296 "std"
2708 EXPR_STRING@4252..42543005 SUFFIX_INDEX@4296..4315
2709 STRING_SINGLE@4252..4254 "''"3006 DOT@4296..4297 "."
2710 COMMA@4254..4255 ","3007 NAME@4297..4315
2711 WHITESPACE@4255..4256 " "3008 IDENT@4297..4315 "escapeStringPython"
2712 ARG@4256..43173009 SUFFIX_APPLY@4315..4318
2713 EXPR_ARRAY_COMP@4256..43173010 ARGS_DESC@4315..4318
2714 L_BRACK@4256..4257 "["3011 L_PAREN@4315..4316 "("
2715 EXPR_APPLY@4257..42853012 ARG@4316..4317
2716 EXPR_INDEX@4257..42643013 EXPR@4316..4317
2717 EXPR_VAR@4257..42603014 EXPR_VAR@4316..4317
2718 NAME@4257..42603015 NAME@4316..4317
2719 IDENT@4257..4260 "std"3016 IDENT@4316..4317 "k"
2720 DOT@4260..4261 "."3017 R_PAREN@4317..4318 ")"
2721 NAME@4261..42643018 COMMA@4318..4319 ","
2722 IDENT@4261..4264 "get"3019 WHITESPACE@4319..4320 " "
2723 ARGS_DESC@4264..42853020 EXPR@4320..4344
2724 L_PAREN@4264..4265 "("3021 EXPR_VAR@4320..4323
2725 ARG@4265..42763022 NAME@4320..4323
2726 EXPR_VAR@4265..42763023 IDENT@4320..4323 "std"
2727 NAME@4265..42763024 SUFFIX_INDEX@4323..4338
2728 IDENT@4265..4276 "xml_escapes"3025 DOT@4323..4324 "."
2729 COMMA@4276..4277 ","3026 NAME@4324..4338
2730 WHITESPACE@4277..4278 " "3027 IDENT@4324..4338 "manifestPython"
2731 ARG@4278..42803028 SUFFIX_APPLY@4338..4344
2732 EXPR_VAR@4278..42803029 ARGS_DESC@4338..4344
2733 NAME@4278..42803030 L_PAREN@4338..4339 "("
2734 IDENT@4278..4280 "ch"3031 ARG@4339..4343
2735 COMMA@4280..4281 ","3032 EXPR@4339..4343
2736 WHITESPACE@4281..4282 " "3033 EXPR_VAR@4339..4340
2737 ARG@4282..42843034 NAME@4339..4340
2738 EXPR_VAR@4282..42843035 IDENT@4339..4340 "v"
2739 NAME@4282..42843036 SUFFIX_INDEX_EXPR@4340..4343
2740 IDENT@4282..4284 "ch"3037 L_BRACK@4340..4341 "["
2741 R_PAREN@4284..4285 ")"3038 EXPR@4341..4342
2742 WHITESPACE@4285..4286 " "3039 EXPR_VAR@4341..4342
2743 FOR_SPEC@4286..43163040 NAME@4341..4342
2744 FOR_KW@4286..4289 "for"3041 IDENT@4341..4342 "k"
2745 WHITESPACE@4289..4290 " "3042 R_BRACK@4342..4343 "]"
2746 NAME@4290..42923043 R_PAREN@4343..4344 ")"
2747 IDENT@4290..4292 "ch"3044 R_BRACK@4344..4345 "]"
2748 WHITESPACE@4292..4293 " "3045 WHITESPACE@4345..4354 "\n "
2749 IN_KW@4293..4295 "in"3046 FOR_SPEC@4354..4382
2750 WHITESPACE@4295..4296 " "3047 FOR_KW@4354..4357 "for"
2751 EXPR_APPLY@4296..43163048 WHITESPACE@4357..4358 " "
2752 EXPR_INDEX@4296..43113049 DESTRUCT_FULL@4358..4359
2753 EXPR_VAR@4296..42993050 NAME@4358..4359
2754 NAME@4296..42993051 IDENT@4358..4359 "k"
2755 IDENT@4296..4299 "std"3052 WHITESPACE@4359..4360 " "
2756 DOT@4299..4300 "."3053 IN_KW@4360..4362 "in"
2757 NAME@4300..43113054 WHITESPACE@4362..4363 " "
2758 IDENT@4300..4311 "stringChars"3055 EXPR@4363..4382
2759 ARGS_DESC@4311..43163056 EXPR_VAR@4363..4366
2760 L_PAREN@4311..4312 "("3057 NAME@4363..4366
2761 ARG@4312..43153058 IDENT@4363..4366 "std"
2762 EXPR_VAR@4312..43153059 SUFFIX_INDEX@4366..4379
2763 NAME@4312..43153060 DOT@4366..4367 "."
2764 IDENT@4312..4315 "str"3061 NAME@4367..4379
2765 R_PAREN@4315..4316 ")"3062 IDENT@4367..4379 "objectFields"
2766 R_BRACK@4316..4317 "]"3063 SUFFIX_APPLY@4379..4382
2767 R_PAREN@4317..4318 ")"3064 ARGS_DESC@4379..4382
2768 COMMA@4318..4319 ","3065 L_PAREN@4379..4380 "("
2769 WHITESPACE@4319..4323 "\n\n "3066 ARG@4380..4381
2770 MEMBER_FIELD_METHOD@4323..43893067 EXPR@4380..4381
2771 FIELD_NAME_FIXED@4323..43353068 EXPR_VAR@4380..4381
2772 NAME@4323..43353069 NAME@4380..4381
2773 IDENT@4323..4335 "manifestJson"3070 IDENT@4380..4381 "v"
2774 PARAMS_DESC@4335..43423071 R_PAREN@4381..4382 ")"
2775 L_PAREN@4335..4336 "("3072 WHITESPACE@4382..4389 "\n "
2776 PARAM@4336..43413073 R_BRACK@4389..4390 "]"
2777 DESTRUCT_FULL@4336..43413074 SEMI@4390..4391 ";"
2778 NAME@4336..43413075 WHITESPACE@4391..4398 "\n "
2779 IDENT@4336..4341 "value"3076 EXPR_BINARY@4398..4431
2780 R_PAREN@4341..4342 ")"3077 EXPR@4398..4404
2781 COLONCOLON@4342..4344 "::"3078 EXPR_STRING@4398..4404
2782 WHITESPACE@4344..4345 " "3079 STRING_SINGLE@4398..4404 "'{%s}'"
2783 EXPR_APPLY@4345..43893080 WHITESPACE@4404..4405 " "
2784 EXPR_INDEX@4345..43633081 MODULO@4405..4406 "%"
2785 EXPR_VAR@4345..43483082 WHITESPACE@4406..4407 " "
2786 NAME@4345..43483083 EXPR@4407..4431
2787 IDENT@4345..4348 "std"3084 EXPR_ARRAY@4407..4431
2788 DOT@4348..4349 "."3085 L_BRACK@4407..4408 "["
2789 NAME@4349..43633086 EXPR@4408..4430
2790 IDENT@4349..4363 "manifestJsonEx"3087 EXPR_VAR@4408..4411
2791 ARGS_DESC@4363..43893088 NAME@4408..4411
2792 L_PAREN@4363..4364 "("3089 IDENT@4408..4411 "std"
2793 ARG@4364..43693090 SUFFIX_INDEX@4411..4416
2794 EXPR_VAR@4364..43693091 DOT@4411..4412 "."
2795 NAME@4364..43693092 NAME@4412..4416
2796 IDENT@4364..4369 "value"3093 IDENT@4412..4416 "join"
2797 COMMA@4369..4370 ","3094 SUFFIX_APPLY@4416..4430
2798 WHITESPACE@4370..4371 " "3095 ARGS_DESC@4416..4430
2799 ARG@4371..43773096 L_PAREN@4416..4417 "("
2800 EXPR_STRING@4371..43773097 ARG@4417..4421
2801 STRING_SINGLE@4371..4377 "' '"3098 EXPR@4417..4421
2802 R_PAREN@4377..4378 ")"3099 EXPR_STRING@4417..4421
2803 WHITESPACE@4378..4379 " "3100 STRING_SINGLE@4417..4421 "', '"
2804 TAILSTRICT_KW@4379..4389 "tailstrict"3101 COMMA@4421..4422 ","
2805 COMMA@4389..4390 ","3102 WHITESPACE@4422..4423 " "
2806 WHITESPACE@4390..4394 "\n\n "3103 ARG@4423..4429
2807 MEMBER_FIELD_METHOD@4394..44623104 EXPR@4423..4429
2808 FIELD_NAME_FIXED@4394..44143105 EXPR_VAR@4423..4429
2809 NAME@4394..44143106 NAME@4423..4429
2810 IDENT@4394..4414 "manifestJsonMinified"3107 IDENT@4423..4429 "fields"
2811 PARAMS_DESC@4414..44213108 R_PAREN@4429..4430 ")"
2812 L_PAREN@4414..4415 "("3109 R_BRACK@4430..4431 "]"
2813 PARAM@4415..44203110 WHITESPACE@4431..4436 "\n "
2814 DESTRUCT_FULL@4415..44203111 ELSE_KW@4436..4440 "else"
2815 NAME@4415..44203112 WHITESPACE@4440..4441 " "
2816 IDENT@4415..4420 "value"3113 FALSE_EXPR@4441..4858
2817 R_PAREN@4420..4421 ")"3114 EXPR@4441..4858
2818 COLONCOLON@4421..4423 "::"3115 EXPR_IF_THEN_ELSE@4441..4858
2819 WHITESPACE@4423..4424 " "3116 IF_KW@4441..4443 "if"
2820 EXPR_APPLY@4424..44623117 WHITESPACE@4443..4444 " "
2821 EXPR_INDEX@4424..44423118 EXPR@4444..4458
2822 EXPR_VAR@4424..44273119 EXPR_VAR@4444..4447
2823 NAME@4424..44273120 NAME@4444..4447
2824 IDENT@4424..4427 "std"3121 IDENT@4444..4447 "std"
2825 DOT@4427..4428 "."3122 SUFFIX_INDEX@4447..4455
2826 NAME@4428..44423123 DOT@4447..4448 "."
2827 IDENT@4428..4442 "manifestJsonEx"3124 NAME@4448..4455
2828 ARGS_DESC@4442..44623125 IDENT@4448..4455 "isArray"
2829 L_PAREN@4442..4443 "("3126 SUFFIX_APPLY@4455..4458
2830 ARG@4443..44483127 ARGS_DESC@4455..4458
2831 EXPR_VAR@4443..44483128 L_PAREN@4455..4456 "("
2832 NAME@4443..44483129 ARG@4456..4457
2833 IDENT@4443..4448 "value"3130 EXPR@4456..4457
2834 COMMA@4448..4449 ","3131 EXPR_VAR@4456..4457
2835 WHITESPACE@4449..4450 " "3132 NAME@4456..4457
2836 ARG@4450..44523133 IDENT@4456..4457 "v"
2837 EXPR_STRING@4450..44523134 R_PAREN@4457..4458 ")"
2838 STRING_SINGLE@4450..4452 "''"3135 WHITESPACE@4458..4459 " "
2839 COMMA@4452..4453 ","3136 THEN_KW@4459..4463 "then"
2840 WHITESPACE@4453..4454 " "3137 WHITESPACE@4463..4470 "\n "
2841 ARG@4454..44563138 TRUE_EXPR@4470..4533
2842 EXPR_STRING@4454..44563139 EXPR@4470..4533
2843 STRING_SINGLE@4454..4456 "''"3140 EXPR_BINARY@4470..4533
2844 COMMA@4456..4457 ","3141 EXPR@4470..4476
2845 WHITESPACE@4457..4458 " "3142 EXPR_STRING@4470..4476
2846 ARG@4458..44613143 STRING_SINGLE@4470..4476 "'[%s]'"
2847 EXPR_STRING@4458..44613144 WHITESPACE@4476..4477 " "
2848 STRING_SINGLE@4458..4461 "':'"3145 MODULO@4477..4478 "%"
2849 R_PAREN@4461..4462 ")"3146 WHITESPACE@4478..4479 " "
2850 COMMA@4462..4463 ","3147 EXPR@4479..4533
2851 WHITESPACE@4463..4467 "\n\n "3148 EXPR_ARRAY@4479..4533
2852 MEMBER_FIELD_METHOD@4467..48523149 L_BRACK@4479..4480 "["
2853 FIELD_NAME_FIXED@4467..44853150 EXPR@4480..4532
2854 NAME@4467..44853151 EXPR_VAR@4480..4483
2855 IDENT@4467..4485 "manifestYamlStream"3152 NAME@4480..4483
2856 PARAMS_DESC@4485..45603153 IDENT@4480..4483 "std"
2857 L_PAREN@4485..4486 "("3154 SUFFIX_INDEX@4483..4488
2858 PARAM@4486..44913155 DOT@4483..4484 "."
2859 DESTRUCT_FULL@4486..44913156 NAME@4484..4488
2860 NAME@4486..44913157 IDENT@4484..4488 "join"
2861 IDENT@4486..4491 "value"3158 SUFFIX_APPLY@4488..4532
2862 COMMA@4491..4492 ","3159 ARGS_DESC@4488..4532
2863 WHITESPACE@4492..4493 " "3160 L_PAREN@4488..4489 "("
2864 PARAM@4493..45213161 ARG@4489..4493
2865 DESTRUCT_FULL@4493..45153162 EXPR@4489..4493
2866 NAME@4493..45153163 EXPR_STRING@4489..4493
2867 IDENT@4493..4515 "indent_array_in_object"3164 STRING_SINGLE@4489..4493 "', '"
2868 ASSIGN@4515..4516 "="3165 COMMA@4493..4494 ","
2869 EXPR_LITERAL@4516..45213166 WHITESPACE@4494..4495 " "
2870 FALSE_KW@4516..4521 "false"3167 ARG@4495..4531
2871 COMMA@4521..4522 ","3168 EXPR@4495..4531
2872 WHITESPACE@4522..4523 " "3169 EXPR_ARRAY_COMP@4495..4531
2873 PARAM@4523..45423170 L_BRACK@4495..4496 "["
2874 DESTRUCT_FULL@4523..45373171 EXPR@4496..4518
2875 NAME@4523..45373172 EXPR_VAR@4496..4499
2876 IDENT@4523..4537 "c_document_end"3173 NAME@4496..4499
2877 ASSIGN@4537..4538 "="3174 IDENT@4496..4499 "std"
2878 EXPR_LITERAL@4538..45423175 SUFFIX_INDEX@4499..4514
2879 TRUE_KW@4538..4542 "true"3176 DOT@4499..4500 "."
2880 COMMA@4542..4543 ","3177 NAME@4500..4514
2881 WHITESPACE@4543..4544 " "3178 IDENT@4500..4514 "manifestPython"
2882 PARAM@4544..45593179 SUFFIX_APPLY@4514..4518
2883 DESTRUCT_FULL@4544..45543180 ARGS_DESC@4514..4518
2884 NAME@4544..45543181 L_PAREN@4514..4515 "("
2885 IDENT@4544..4554 "quote_keys"3182 ARG@4515..4517
2886 ASSIGN@4554..4555 "="3183 EXPR@4515..4517
2887 EXPR_LITERAL@4555..45593184 EXPR_VAR@4515..4517
2888 TRUE_KW@4555..4559 "true"3185 NAME@4515..4517
2889 R_PAREN@4559..4560 ")"3186 IDENT@4515..4517 "v2"
2890 COLONCOLON@4560..4562 "::"3187 R_PAREN@4517..4518 ")"
2891 WHITESPACE@4562..4567 "\n "3188 WHITESPACE@4518..4519 " "
2892 EXPR_IF_THEN_ELSE@4567..48523189 FOR_SPEC@4519..4530
2893 IF_KW@4567..4569 "if"3190 FOR_KW@4519..4522 "for"
2894 WHITESPACE@4569..4570 " "3191 WHITESPACE@4522..4523 " "
2895 EXPR_UNARY@4570..45893192 DESTRUCT_FULL@4523..4525
2896 NOT@4570..4571 "!"3193 NAME@4523..4525
2897 EXPR_APPLY@4571..45893194 IDENT@4523..4525 "v2"
2898 EXPR_INDEX@4571..45823195 WHITESPACE@4525..4526 " "
2899 EXPR_VAR@4571..45743196 IN_KW@4526..4528 "in"
2900 NAME@4571..45743197 WHITESPACE@4528..4529 " "
2901 IDENT@4571..4574 "std"3198 EXPR@4529..4530
2902 DOT@4574..4575 "."3199 EXPR_VAR@4529..4530
2903 NAME@4575..45823200 NAME@4529..4530
2904 IDENT@4575..4582 "isArray"3201 IDENT@4529..4530 "v"
2905 ARGS_DESC@4582..45893202 R_BRACK@4530..4531 "]"
2906 L_PAREN@4582..4583 "("3203 R_PAREN@4531..4532 ")"
2907 ARG@4583..45883204 R_BRACK@4532..4533 "]"
2908 EXPR_VAR@4583..45883205 WHITESPACE@4533..4538 "\n "
2909 NAME@4583..45883206 ELSE_KW@4538..4542 "else"
2910 IDENT@4583..4588 "value"3207 WHITESPACE@4542..4543 " "
2911 R_PAREN@4588..4589 ")"3208 FALSE_EXPR@4543..4858
2912 WHITESPACE@4589..4590 " "3209 EXPR@4543..4858
2913 THEN_KW@4590..4594 "then"3210 EXPR_IF_THEN_ELSE@4543..4858
2914 WHITESPACE@4594..4601 "\n "3211 IF_KW@4543..4545 "if"
2915 TRUE_EXPR@4601..46693212 WHITESPACE@4545..4546 " "
2916 EXPR_ERROR@4601..46693213 EXPR@4546..4561
2917 ERROR_KW@4601..4606 "error"3214 EXPR_VAR@4546..4549
2918 WHITESPACE@4606..4607 " "3215 NAME@4546..4549
2919 EXPR_BINARY@4607..46693216 IDENT@4546..4549 "std"
2920 LHS_EXPR@4607..46513217 SUFFIX_INDEX@4549..4558
2921 EXPR_STRING@4607..46513218 DOT@4549..4550 "."
2922 STRING_SINGLE@4607..4651 "'manifestYamlStream o ..."3219 NAME@4550..4558
2923 WHITESPACE@4651..4652 " "3220 IDENT@4550..4558 "isString"
2924 PLUS@4652..4653 "+"3221 SUFFIX_APPLY@4558..4561
2925 WHITESPACE@4653..4654 " "3222 ARGS_DESC@4558..4561
2926 EXPR_APPLY@4654..46693223 L_PAREN@4558..4559 "("
2927 EXPR_INDEX@4654..46623224 ARG@4559..4560
2928 EXPR_VAR@4654..46573225 EXPR@4559..4560
2929 NAME@4654..46573226 EXPR_VAR@4559..4560
2930 IDENT@4654..4657 "std"3227 NAME@4559..4560
2931 DOT@4657..4658 "."3228 IDENT@4559..4560 "v"
2932 NAME@4658..46623229 R_PAREN@4560..4561 ")"
2933 IDENT@4658..4662 "type"3230 WHITESPACE@4561..4562 " "
2934 ARGS_DESC@4662..46693231 THEN_KW@4562..4566 "then"
2935 L_PAREN@4662..4663 "("3232 WHITESPACE@4566..4573 "\n "
2936 ARG@4663..46683233 TRUE_EXPR@4573..4607
2937 EXPR_VAR@4663..46683234 EXPR@4573..4607
2938 NAME@4663..46683235 EXPR_BINARY@4573..4607
2939 IDENT@4663..4668 "value"3236 EXPR@4573..4577
2940 R_PAREN@4668..4669 ")"3237 EXPR_STRING@4573..4577
2941 WHITESPACE@4669..4674 "\n "3238 STRING_SINGLE@4573..4577 "'%s'"
2942 ELSE_KW@4674..4678 "else"3239 WHITESPACE@4577..4578 " "
2943 WHITESPACE@4678..4685 "\n "3240 MODULO@4578..4579 "%"
2944 FALSE_EXPR@4685..48523241 WHITESPACE@4579..4580 " "
2945 EXPR_BINARY@4685..48523242 EXPR@4580..4607
2946 LHS_EXPR@4685..48073243 EXPR_ARRAY@4580..4607
2947 EXPR_BINARY@4685..48073244 L_BRACK@4580..4581 "["
2948 LHS_EXPR@4685..46923245 EXPR@4581..4606
2949 EXPR_STRING@4685..46923246 EXPR_VAR@4581..4584
2950 STRING_SINGLE@4685..4692 "'---\\n'"3247 NAME@4581..4584
2951 WHITESPACE@4692..4693 " "3248 IDENT@4581..4584 "std"
2952 PLUS@4693..4694 "+"3249 SUFFIX_INDEX@4584..4603
2953 WHITESPACE@4694..4695 " "3250 DOT@4584..4585 "."
2954 EXPR_APPLY@4695..48073251 NAME@4585..4603
2955 EXPR_INDEX@4695..47033252 IDENT@4585..4603 "escapeStringPython"
2956 EXPR_VAR@4695..46983253 SUFFIX_APPLY@4603..4606
2957 NAME@4695..46983254 ARGS_DESC@4603..4606
2958 IDENT@4695..4698 "std"3255 L_PAREN@4603..4604 "("
2959 DOT@4698..4699 "."3256 ARG@4604..4605
2960 NAME@4699..47033257 EXPR@4604..4605
2961 IDENT@4699..4703 "join"3258 EXPR_VAR@4604..4605
2962 ARGS_DESC@4703..48073259 NAME@4604..4605
2963 L_PAREN@4703..4704 "("3260 IDENT@4604..4605 "v"
2964 WHITESPACE@4704..4713 "\n "3261 R_PAREN@4605..4606 ")"
2965 ARG@4713..47223262 R_BRACK@4606..4607 "]"
2966 EXPR_STRING@4713..47223263 WHITESPACE@4607..4612 "\n "
2967 STRING_SINGLE@4713..4722 "'\\n---\\n'"3264 ELSE_KW@4612..4616 "else"
2968 COMMA@4722..4723 ","3265 WHITESPACE@4616..4617 " "
2969 WHITESPACE@4723..4724 " "3266 FALSE_EXPR@4617..4858
2970 ARG@4724..47993267 EXPR@4617..4858
2971 EXPR_ARRAY_COMP@4724..47993268 EXPR_IF_THEN_ELSE@4617..4858
2972 L_BRACK@4724..4725 "["3269 IF_KW@4617..4619 "if"
2973 EXPR_APPLY@4725..47833270 WHITESPACE@4619..4620 " "
2974 EXPR_INDEX@4725..47443271 EXPR@4620..4637
2975 EXPR_VAR@4725..47283272 EXPR_VAR@4620..4623
2976 NAME@4725..47283273 NAME@4620..4623
2977 IDENT@4725..4728 "std"3274 IDENT@4620..4623 "std"
2978 DOT@4728..4729 "."3275 SUFFIX_INDEX@4623..4634
2979 NAME@4729..47443276 DOT@4623..4624 "."
2980 IDENT@4729..4744 "manifestYamlDoc"3277 NAME@4624..4634
2981 ARGS_DESC@4744..47833278 IDENT@4624..4634 "isFunction"
2982 L_PAREN@4744..4745 "("3279 SUFFIX_APPLY@4634..4637
2983 ARG@4745..47463280 ARGS_DESC@4634..4637
2984 EXPR_VAR@4745..47463281 L_PAREN@4634..4635 "("
2985 NAME@4745..47463282 ARG@4635..4636
2986 IDENT@4745..4746 "e"3283 EXPR@4635..4636
2987 COMMA@4746..4747 ","3284 EXPR_VAR@4635..4636
2988 WHITESPACE@4747..4748 " "3285 NAME@4635..4636
2989 ARG@4748..47703286 IDENT@4635..4636 "v"
2990 EXPR_VAR@4748..47703287 R_PAREN@4636..4637 ")"
2991 NAME@4748..47703288 WHITESPACE@4637..4638 " "
2992 IDENT@4748..4770 "indent_array_in_object"3289 THEN_KW@4638..4642 "then"
2993 COMMA@4770..4771 ","3290 WHITESPACE@4642..4649 "\n "
2994 WHITESPACE@4771..4772 " "3291 TRUE_EXPR@4649..4681
2995 ARG@4772..47823292 EXPR@4649..4681
2996 EXPR_VAR@4772..47823293 EXPR_ERROR@4649..4681
2997 NAME@4772..47823294 ERROR_KW@4649..4654 "error"
2998 IDENT@4772..4782 "quote_keys"3295 WHITESPACE@4654..4655 " "
2999 R_PAREN@4782..4783 ")"3296 EXPR@4655..4681
3000 WHITESPACE@4783..4784 " "3297 EXPR_STRING@4655..4681
3001 FOR_SPEC@4784..47983298 STRING_SINGLE@4655..4681 "'cannot manifest func ..."
3002 FOR_KW@4784..4787 "for"3299 WHITESPACE@4681..4686 "\n "
3003 WHITESPACE@4787..4788 " "3300 ELSE_KW@4686..4690 "else"
3004 NAME@4788..47893301 WHITESPACE@4690..4691 " "
3005 IDENT@4788..4789 "e"3302 FALSE_EXPR@4691..4858
3006 WHITESPACE@4789..4790 " "3303 EXPR@4691..4858
3007 IN_KW@4790..4792 "in"3304 EXPR_IF_THEN_ELSE@4691..4858
3008 WHITESPACE@4792..4793 " "3305 IF_KW@4691..4693 "if"
3009 EXPR_VAR@4793..47983306 WHITESPACE@4693..4694 " "
3010 NAME@4793..47983307 EXPR@4694..4709
3011 IDENT@4793..4798 "value"3308 EXPR_VAR@4694..4697
3012 R_BRACK@4798..4799 "]"3309 NAME@4694..4697
3013 WHITESPACE@4799..4806 "\n "3310 IDENT@4694..4697 "std"
3014 R_PAREN@4806..4807 ")"3311 SUFFIX_INDEX@4697..4706
3015 WHITESPACE@4807..4808 " "3312 DOT@4697..4698 "."
3016 PLUS@4808..4809 "+"3313 NAME@4698..4706
3017 WHITESPACE@4809..4810 " "3314 IDENT@4698..4706 "isNumber"
3018 EXPR_IF_THEN_ELSE@4810..48523315 SUFFIX_APPLY@4706..4709
3019 IF_KW@4810..4812 "if"3316 ARGS_DESC@4706..4709
3020 WHITESPACE@4812..4813 " "3317 L_PAREN@4706..4707 "("
3021 EXPR_VAR@4813..48273318 ARG@4707..4708
3022 NAME@4813..48273319 EXPR@4707..4708
3023 IDENT@4813..4827 "c_document_end"3320 EXPR_VAR@4707..4708
3024 WHITESPACE@4827..4828 " "3321 NAME@4707..4708
3025 THEN_KW@4828..4832 "then"3322 IDENT@4707..4708 "v"
3026 WHITESPACE@4832..4833 " "3323 R_PAREN@4708..4709 ")"
3027 TRUE_EXPR@4833..48423324 WHITESPACE@4709..4710 " "
3028 EXPR_STRING@4833..48423325 THEN_KW@4710..4714 "then"
3029 STRING_SINGLE@4833..4842 "'\\n...\\n'"3326 WHITESPACE@4714..4721 "\n "
3030 WHITESPACE@4842..4843 " "3327 TRUE_EXPR@4721..4736
3031 ELSE_KW@4843..4847 "else"3328 EXPR@4721..4736
3032 WHITESPACE@4847..4848 " "3329 EXPR_VAR@4721..4724
3033 FALSE_EXPR@4848..48523330 NAME@4721..4724
3034 EXPR_STRING@4848..48523331 IDENT@4721..4724 "std"
3035 STRING_SINGLE@4848..4852 "'\\n'"3332 SUFFIX_INDEX@4724..4733
3036 COMMA@4852..4853 ","3333 DOT@4724..4725 "."
3037 WHITESPACE@4853..4857 "\n\n "3334 NAME@4725..4733
3038 MEMBER_FIELD_METHOD@4857..55133335 IDENT@4725..4733 "toString"
3039 FIELD_NAME_FIXED@4857..48713336 SUFFIX_APPLY@4733..4736
3040 NAME@4857..48713337 ARGS_DESC@4733..4736
3041 IDENT@4857..4871 "manifestPython"3338 L_PAREN@4733..4734 "("
3042 PARAMS_DESC@4871..48743339 ARG@4734..4735
3043 L_PAREN@4871..4872 "("3340 EXPR@4734..4735
3044 PARAM@4872..48733341 EXPR_VAR@4734..4735
3045 DESTRUCT_FULL@4872..48733342 NAME@4734..4735
3046 NAME@4872..48733343 IDENT@4734..4735 "v"
3047 IDENT@4872..4873 "v"3344 R_PAREN@4735..4736 ")"
3048 R_PAREN@4873..4874 ")"3345 WHITESPACE@4736..4741 "\n "
3049 COLONCOLON@4874..4876 "::"3346 ELSE_KW@4741..4745 "else"
3050 WHITESPACE@4876..4881 "\n "3347 WHITESPACE@4745..4746 " "
3051 EXPR_IF_THEN_ELSE@4881..55133348 FALSE_EXPR@4746..4858
3052 IF_KW@4881..4883 "if"3349 EXPR@4746..4858
3053 WHITESPACE@4883..4884 " "3350 EXPR_IF_THEN_ELSE@4746..4858
3054 EXPR_APPLY@4884..48993351 IF_KW@4746..4748 "if"
3055 EXPR_INDEX@4884..48963352 WHITESPACE@4748..4749 " "
3056 EXPR_VAR@4884..48873353 EXPR@4749..4758
3057 NAME@4884..48873354 EXPR_BINARY@4749..4758
3058 IDENT@4884..4887 "std"3355 EXPR@4749..4750
3059 DOT@4887..4888 "."3356 EXPR_VAR@4749..4750
3060 NAME@4888..48963357 NAME@4749..4750
3061 IDENT@4888..4896 "isObject"3358 IDENT@4749..4750 "v"
3062 ARGS_DESC@4896..48993359 WHITESPACE@4750..4751 " "
3063 L_PAREN@4896..4897 "("3360 EQ@4751..4753 "=="
3064 ARG@4897..48983361 WHITESPACE@4753..4754 " "
3065 EXPR_VAR@4897..48983362 EXPR@4754..4758
3066 NAME@4897..48983363 EXPR_LITERAL@4754..4758
3067 IDENT@4897..4898 "v"3364 TRUE_KW@4754..4758 "true"
3068 R_PAREN@4898..4899 ")"3365 WHITESPACE@4758..4759 " "
3069 WHITESPACE@4899..4900 " "3366 THEN_KW@4759..4763 "then"
3070 THEN_KW@4900..4904 "then"3367 WHITESPACE@4763..4770 "\n "
3071 WHITESPACE@4904..4911 "\n "3368 TRUE_EXPR@4770..4776
3072 STMT_LOCAL@4911..50463369 EXPR@4770..4776
3073 LOCAL_KW@4911..4916 "local"3370 EXPR_STRING@4770..4776
3074 WHITESPACE@4916..4917 " "3371 STRING_SINGLE@4770..4776 "'True'"
3075 BIND_DESTRUCT@4917..50453372 WHITESPACE@4776..4781 "\n "
3076 DESTRUCT_FULL@4917..49233373 ELSE_KW@4781..4785 "else"
3077 NAME@4917..49233374 WHITESPACE@4785..4786 " "
3078 IDENT@4917..4923 "fields"3375 FALSE_EXPR@4786..4858
3079 WHITESPACE@4923..4924 " "3376 EXPR@4786..4858
3080 ASSIGN@4924..4925 "="3377 EXPR_IF_THEN_ELSE@4786..4858
3081 WHITESPACE@4925..4926 " "3378 IF_KW@4786..4788 "if"
3082 EXPR_ARRAY_COMP@4926..50453379 WHITESPACE@4788..4789 " "
3083 L_BRACK@4926..4927 "["3380 EXPR@4789..4799
3084 WHITESPACE@4927..4936 "\n "3381 EXPR_BINARY@4789..4799
3085 EXPR_BINARY@4936..50003382 EXPR@4789..4790
3086 LHS_EXPR@4936..49443383 EXPR_VAR@4789..4790
3087 EXPR_STRING@4936..49443384 NAME@4789..4790
3088 STRING_SINGLE@4936..4944 "'%s: %s'"3385 IDENT@4789..4790 "v"
3089 WHITESPACE@4944..4945 " "3386 WHITESPACE@4790..4791 " "
3090 MODULO@4945..4946 "%"3387 EQ@4791..4793 "=="
3091 WHITESPACE@4946..4947 " "3388 WHITESPACE@4793..4794 " "
3092 EXPR_ARRAY@4947..50003389 EXPR@4794..4799
3093 L_BRACK@4947..4948 "["3390 EXPR_LITERAL@4794..4799
3094 EXPR_APPLY@4948..49733391 FALSE_KW@4794..4799 "false"
3095 EXPR_INDEX@4948..49703392 WHITESPACE@4799..4800 " "
3096 EXPR_VAR@4948..49513393 THEN_KW@4800..4804 "then"
3097 NAME@4948..49513394 WHITESPACE@4804..4811 "\n "
3098 IDENT@4948..4951 "std"3395 TRUE_EXPR@4811..4818
3099 DOT@4951..4952 "."3396 EXPR@4811..4818
3100 NAME@4952..49703397 EXPR_STRING@4811..4818
3101 IDENT@4952..4970 "escapeStringPython"3398 STRING_SINGLE@4811..4818 "'False'"
3102 ARGS_DESC@4970..49733399 WHITESPACE@4818..4823 "\n "
3103 L_PAREN@4970..4971 "("3400 ELSE_KW@4823..4827 "else"
3104 ARG@4971..49723401 WHITESPACE@4827..4828 " "
3105 EXPR_VAR@4971..49723402 FALSE_EXPR@4828..4858
3106 NAME@4971..49723403 EXPR@4828..4858
3107 IDENT@4971..4972 "k"3404 EXPR_IF_THEN_ELSE@4828..4858
3108 R_PAREN@4972..4973 ")"3405 IF_KW@4828..4830 "if"
3109 COMMA@4973..4974 ","3406 WHITESPACE@4830..4831 " "
3110 WHITESPACE@4974..4975 " "3407 EXPR@4831..4840
3111 EXPR_APPLY@4975..49993408 EXPR_BINARY@4831..4840
3112 EXPR_INDEX@4975..49933409 EXPR@4831..4832
3113 EXPR_VAR@4975..49783410 EXPR_VAR@4831..4832
3114 NAME@4975..49783411 NAME@4831..4832
3115 IDENT@4975..4978 "std"3412 IDENT@4831..4832 "v"
3116 DOT@4978..4979 "."3413 WHITESPACE@4832..4833 " "
3117 NAME@4979..49933414 EQ@4833..4835 "=="
3118 IDENT@4979..4993 "manifestPython"3415 WHITESPACE@4835..4836 " "
3119 ARGS_DESC@4993..49993416 EXPR@4836..4840
3120 L_PAREN@4993..4994 "("3417 EXPR_LITERAL@4836..4840
3121 ARG@4994..49983418 NULL_KW@4836..4840 "null"
3122 EXPR_INDEX_EXPR@4994..49983419 WHITESPACE@4840..4841 " "
3123 LHS_EXPR@4994..49953420 THEN_KW@4841..4845 "then"
3124 EXPR_VAR@4994..49953421 WHITESPACE@4845..4852 "\n "
3125 NAME@4994..49953422 TRUE_EXPR@4852..4858
3126 IDENT@4994..4995 "v"3423 EXPR@4852..4858
3127 L_BRACK@4995..4996 "["3424 EXPR_STRING@4852..4858
3128 EXPR_VAR@4996..49973425 STRING_SINGLE@4852..4858 "'None'"
3129 NAME@4996..49973426 COMMA@4858..4859 ","
3130 IDENT@4996..4997 "k"3427 WHITESPACE@4859..4863 "\n\n "
3131 R_BRACK@4997..4998 "]"3428 MEMBER_FIELD_METHOD@4863..5018
3132 R_PAREN@4998..4999 ")"3429 FIELD_NAME_FIXED@4863..4881
3133 R_BRACK@4999..5000 "]"3430 NAME@4863..4881
3134 WHITESPACE@5000..5009 "\n "3431 IDENT@4863..4881 "manifestPythonVars"
3135 FOR_SPEC@5009..50373432 PARAMS_DESC@4881..4887
3136 FOR_KW@5009..5012 "for"3433 L_PAREN@4881..4882 "("
3137 WHITESPACE@5012..5013 " "3434 PARAM@4882..4886
3138 NAME@5013..50143435 DESTRUCT_FULL@4882..4886
3139 IDENT@5013..5014 "k"3436 NAME@4882..4886
3140 WHITESPACE@5014..5015 " "3437 IDENT@4882..4886 "conf"
3141 IN_KW@5015..5017 "in"3438 R_PAREN@4886..4887 ")"
3142 WHITESPACE@5017..5018 " "3439 COLONCOLON@4887..4889 "::"
3143 EXPR_APPLY@5018..50373440 WHITESPACE@4889..4894 "\n "
3144 EXPR_INDEX@5018..50343441 EXPR@4894..5018
3145 EXPR_VAR@5018..50213442 STMT_LOCAL@4894..4986
3146 NAME@5018..50213443 LOCAL_KW@4894..4899 "local"
3147 IDENT@5018..5021 "std"3444 WHITESPACE@4899..4900 " "
3148 DOT@5021..5022 "."3445 BIND_DESTRUCT@4900..4985
3149 NAME@5022..50343446 DESTRUCT_FULL@4900..4904
3150 IDENT@5022..5034 "objectFields"3447 NAME@4900..4904
3151 ARGS_DESC@5034..50373448 IDENT@4900..4904 "vars"
3152 L_PAREN@5034..5035 "("3449 WHITESPACE@4904..4905 " "
3153 ARG@5035..50363450 ASSIGN@4905..4906 "="
3154 EXPR_VAR@5035..50363451 WHITESPACE@4906..4907 " "
3155 NAME@5035..50363452 EXPR@4907..4985
3156 IDENT@5035..5036 "v"3453 EXPR_ARRAY_COMP@4907..4985
3157 R_PAREN@5036..5037 ")"3454 L_BRACK@4907..4908 "["
3158 WHITESPACE@5037..5044 "\n "3455 EXPR@4908..4952
3159 R_BRACK@5044..5045 "]"3456 EXPR_BINARY@4908..4952
3160 SEMI@5045..5046 ";"3457 EXPR@4908..4917
3161 WHITESPACE@5046..5053 "\n "3458 EXPR_STRING@4908..4917
3162 TRUE_EXPR@5053..50863459 STRING_SINGLE@4908..4917 "'%s = %s'"
3163 EXPR_BINARY@5053..50863460 WHITESPACE@4917..4918 " "
3164 LHS_EXPR@5053..50593461 MODULO@4918..4919 "%"
3165 EXPR_STRING@5053..50593462 WHITESPACE@4919..4920 " "
3166 STRING_SINGLE@5053..5059 "'{%s}'"3463 EXPR@4920..4952
3167 WHITESPACE@5059..5060 " "3464 EXPR_ARRAY@4920..4952
3168 MODULO@5060..5061 "%"3465 L_BRACK@4920..4921 "["
3169 WHITESPACE@5061..5062 " "3466 EXPR@4921..4922
3170 EXPR_ARRAY@5062..50863467 EXPR_VAR@4921..4922
3171 L_BRACK@5062..5063 "["3468 NAME@4921..4922
3172 EXPR_APPLY@5063..50853469 IDENT@4921..4922 "k"
3173 EXPR_INDEX@5063..50713470 COMMA@4922..4923 ","
3174 EXPR_VAR@5063..50663471 WHITESPACE@4923..4924 " "
3175 NAME@5063..50663472 EXPR@4924..4951
3176 IDENT@5063..5066 "std"3473 EXPR_VAR@4924..4927
3177 DOT@5066..5067 "."3474 NAME@4924..4927
3178 NAME@5067..50713475 IDENT@4924..4927 "std"
3179 IDENT@5067..5071 "join"3476 SUFFIX_INDEX@4927..4942
3180 ARGS_DESC@5071..50853477 DOT@4927..4928 "."
3181 L_PAREN@5071..5072 "("3478 NAME@4928..4942
3182 ARG@5072..50763479 IDENT@4928..4942 "manifestPython"
3183 EXPR_STRING@5072..50763480 SUFFIX_APPLY@4942..4951
3184 STRING_SINGLE@5072..5076 "', '"3481 ARGS_DESC@4942..4951
3185 COMMA@5076..5077 ","3482 L_PAREN@4942..4943 "("
3186 WHITESPACE@5077..5078 " "3483 ARG@4943..4950
3187 ARG@5078..50843484 EXPR@4943..4950
3188 EXPR_VAR@5078..50843485 EXPR_VAR@4943..4947
3189 NAME@5078..50843486 NAME@4943..4947
3190 IDENT@5078..5084 "fields"3487 IDENT@4943..4947 "conf"
3191 R_PAREN@5084..5085 ")"3488 SUFFIX_INDEX_EXPR@4947..4950
3192 R_BRACK@5085..5086 "]"3489 L_BRACK@4947..4948 "["
3193 WHITESPACE@5086..5091 "\n "3490 EXPR@4948..4949
3194 ELSE_KW@5091..5095 "else"3491 EXPR_VAR@4948..4949
3195 WHITESPACE@5095..5096 " "3492 NAME@4948..4949
3196 FALSE_EXPR@5096..55133493 IDENT@4948..4949 "k"
3197 EXPR_IF_THEN_ELSE@5096..55133494 R_BRACK@4949..4950 "]"
3198 IF_KW@5096..5098 "if"3495 R_PAREN@4950..4951 ")"
3199 WHITESPACE@5098..5099 " "3496 R_BRACK@4951..4952 "]"
3200 EXPR_APPLY@5099..51133497 WHITESPACE@4952..4953 " "
3201 EXPR_INDEX@5099..51103498 FOR_SPEC@4953..4984
3202 EXPR_VAR@5099..51023499 FOR_KW@4953..4956 "for"
3203 NAME@5099..51023500 WHITESPACE@4956..4957 " "
3204 IDENT@5099..5102 "std"3501 DESTRUCT_FULL@4957..4958
3205 DOT@5102..5103 "."3502 NAME@4957..4958
3206 NAME@5103..51103503 IDENT@4957..4958 "k"
3207 IDENT@5103..5110 "isArray"3504 WHITESPACE@4958..4959 " "
3208 ARGS_DESC@5110..51133505 IN_KW@4959..4961 "in"
3209 L_PAREN@5110..5111 "("3506 WHITESPACE@4961..4962 " "
3210 ARG@5111..51123507 EXPR@4962..4984
3211 EXPR_VAR@5111..51123508 EXPR_VAR@4962..4965
3212 NAME@5111..51123509 NAME@4962..4965
3213 IDENT@5111..5112 "v"3510 IDENT@4962..4965 "std"
3214 R_PAREN@5112..5113 ")"3511 SUFFIX_INDEX@4965..4978
3215 WHITESPACE@5113..5114 " "3512 DOT@4965..4966 "."
3216 THEN_KW@5114..5118 "then"3513 NAME@4966..4978
3217 WHITESPACE@5118..5125 "\n "3514 IDENT@4966..4978 "objectFields"
3218 TRUE_EXPR@5125..51883515 SUFFIX_APPLY@4978..4984
3219 EXPR_BINARY@5125..51883516 ARGS_DESC@4978..4984
3220 LHS_EXPR@5125..51313517 L_PAREN@4978..4979 "("
3221 EXPR_STRING@5125..51313518 ARG@4979..4983
3222 STRING_SINGLE@5125..5131 "'[%s]'"3519 EXPR@4979..4983
3223 WHITESPACE@5131..5132 " "3520 EXPR_VAR@4979..4983
3224 MODULO@5132..5133 "%"3521 NAME@4979..4983
3225 WHITESPACE@5133..5134 " "3522 IDENT@4979..4983 "conf"
3226 EXPR_ARRAY@5134..51883523 R_PAREN@4983..4984 ")"
3227 L_BRACK@5134..5135 "["3524 R_BRACK@4984..4985 "]"
3228 EXPR_APPLY@5135..51873525 SEMI@4985..4986 ";"
3229 EXPR_INDEX@5135..51433526 WHITESPACE@4986..4991 "\n "
3230 EXPR_VAR@5135..51383527 EXPR_VAR@4991..4994
3231 NAME@5135..51383528 NAME@4991..4994
3232 IDENT@5135..5138 "std"3529 IDENT@4991..4994 "std"
3233 DOT@5138..5139 "."3530 SUFFIX_INDEX@4994..4999
3234 NAME@5139..51433531 DOT@4994..4995 "."
3235 IDENT@5139..5143 "join"3532 NAME@4995..4999
3236 ARGS_DESC@5143..51873533 IDENT@4995..4999 "join"
3237 L_PAREN@5143..5144 "("3534 SUFFIX_APPLY@4999..5018
3238 ARG@5144..51483535 ARGS_DESC@4999..5018
3239 EXPR_STRING@5144..51483536 L_PAREN@4999..5000 "("
3240 STRING_SINGLE@5144..5148 "', '"3537 ARG@5000..5004
3241 COMMA@5148..5149 ","3538 EXPR@5000..5004
3242 WHITESPACE@5149..5150 " "3539 EXPR_STRING@5000..5004
3243 ARG@5150..51863540 STRING_SINGLE@5000..5004 "'\\n'"
3244 EXPR_ARRAY_COMP@5150..51863541 COMMA@5004..5005 ","
3245 L_BRACK@5150..5151 "["3542 WHITESPACE@5005..5006 " "
3246 EXPR_APPLY@5151..51733543 ARG@5006..5017
3247 EXPR_INDEX@5151..51693544 EXPR@5006..5017
3248 EXPR_VAR@5151..51543545 EXPR_BINARY@5006..5017
3249 NAME@5151..51543546 EXPR@5006..5010
3250 IDENT@5151..5154 "std"3547 EXPR_VAR@5006..5010
3251 DOT@5154..5155 "."3548 NAME@5006..5010
3252 NAME@5155..51693549 IDENT@5006..5010 "vars"
3253 IDENT@5155..5169 "manifestPython"3550 WHITESPACE@5010..5011 " "
3254 ARGS_DESC@5169..51733551 PLUS@5011..5012 "+"
3255 L_PAREN@5169..5170 "("3552 WHITESPACE@5012..5013 " "
3256 ARG@5170..51723553 EXPR@5013..5017
3257 EXPR_VAR@5170..51723554 EXPR_ARRAY@5013..5017
3258 NAME@5170..51723555 L_BRACK@5013..5014 "["
3259 IDENT@5170..5172 "v2"3556 EXPR@5014..5016
3260 R_PAREN@5172..5173 ")"3557 EXPR_STRING@5014..5016
3261 WHITESPACE@5173..5174 " "3558 STRING_SINGLE@5014..5016 "''"
3262 FOR_SPEC@5174..51853559 R_BRACK@5016..5017 "]"
3263 FOR_KW@5174..5177 "for"3560 R_PAREN@5017..5018 ")"
3264 WHITESPACE@5177..5178 " "3561 COMMA@5018..5019 ","
3265 NAME@5178..51803562 WHITESPACE@5019..5023 "\n\n "
3266 IDENT@5178..5180 "v2"3563 MEMBER_FIELD_METHOD@5023..5690
3267 WHITESPACE@5180..5181 " "3564 FIELD_NAME_FIXED@5023..5040
3268 IN_KW@5181..5183 "in"3565 NAME@5023..5040
3269 WHITESPACE@5183..5184 " "3566 IDENT@5023..5040 "manifestXmlJsonml"
3270 EXPR_VAR@5184..51853567 PARAMS_DESC@5040..5047
3271 NAME@5184..51853568 L_PAREN@5040..5041 "("
3272 IDENT@5184..5185 "v"3569 PARAM@5041..5046
3273 R_BRACK@5185..5186 "]"3570 DESTRUCT_FULL@5041..5046
3274 R_PAREN@5186..5187 ")"3571 NAME@5041..5046
3275 R_BRACK@5187..5188 "]"3572 IDENT@5041..5046 "value"
3276 WHITESPACE@5188..5193 "\n "3573 R_PAREN@5046..5047 ")"
3277 ELSE_KW@5193..5197 "else"3574 COLONCOLON@5047..5049 "::"
3278 WHITESPACE@5197..5198 " "3575 WHITESPACE@5049..5054 "\n "
3279 FALSE_EXPR@5198..55133576 EXPR@5054..5690
3280 EXPR_IF_THEN_ELSE@5198..55133577 EXPR_IF_THEN_ELSE@5054..5690
3281 IF_KW@5198..5200 "if"3578 IF_KW@5054..5056 "if"
3282 WHITESPACE@5200..5201 " "3579 WHITESPACE@5056..5057 " "
3283 EXPR_APPLY@5201..52163580 EXPR@5057..5076
3284 EXPR_INDEX@5201..52133581 EXPR_UNARY@5057..5076
3285 EXPR_VAR@5201..52043582 NOT@5057..5058 "!"
3286 NAME@5201..52043583 EXPR_VAR@5058..5061
3287 IDENT@5201..5204 "std"3584 NAME@5058..5061
3288 DOT@5204..5205 "."3585 IDENT@5058..5061 "std"
3289 NAME@5205..52133586 SUFFIX_INDEX@5061..5069
3290 IDENT@5205..5213 "isString"3587 DOT@5061..5062 "."
3291 ARGS_DESC@5213..52163588 NAME@5062..5069
3292 L_PAREN@5213..5214 "("3589 IDENT@5062..5069 "isArray"
3293 ARG@5214..52153590 SUFFIX_APPLY@5069..5076
3294 EXPR_VAR@5214..52153591 ARGS_DESC@5069..5076
3295 NAME@5214..52153592 L_PAREN@5069..5070 "("
3296 IDENT@5214..5215 "v"3593 ARG@5070..5075
3297 R_PAREN@5215..5216 ")"3594 EXPR@5070..5075
3298 WHITESPACE@5216..5217 " "3595 EXPR_VAR@5070..5075
3299 THEN_KW@5217..5221 "then"3596 NAME@5070..5075
3300 WHITESPACE@5221..5228 "\n "3597 IDENT@5070..5075 "value"
3301 TRUE_EXPR@5228..52623598 R_PAREN@5075..5076 ")"
3302 EXPR_BINARY@5228..52623599 WHITESPACE@5076..5077 " "
3303 LHS_EXPR@5228..52323600 THEN_KW@5077..5081 "then"
3304 EXPR_STRING@5228..52323601 WHITESPACE@5081..5088 "\n "
3305 STRING_SINGLE@5228..5232 "'%s'"3602 TRUE_EXPR@5088..5156
3306 WHITESPACE@5232..5233 " "3603 EXPR@5088..5156
3307 MODULO@5233..5234 "%"3604 EXPR_ERROR@5088..5156
3308 WHITESPACE@5234..5235 " "3605 ERROR_KW@5088..5093 "error"
3309 EXPR_ARRAY@5235..52623606 WHITESPACE@5093..5094 " "
3310 L_BRACK@5235..5236 "["3607 EXPR@5094..5156
3311 EXPR_APPLY@5236..52613608 EXPR_BINARY@5094..5156
3312 EXPR_INDEX@5236..52583609 EXPR@5094..5138
3313 EXPR_VAR@5236..52393610 EXPR_STRING@5094..5138
3314 NAME@5236..52393611 STRING_SINGLE@5094..5138 "'Expected a JSONML va ..."
3315 IDENT@5236..5239 "std"3612 WHITESPACE@5138..5139 " "
3316 DOT@5239..5240 "."3613 MODULO@5139..5140 "%"
3317 NAME@5240..52583614 WHITESPACE@5140..5141 " "
3318 IDENT@5240..5258 "escapeStringPython"3615 EXPR@5141..5156
3319 ARGS_DESC@5258..52613616 EXPR_VAR@5141..5144
3320 L_PAREN@5258..5259 "("3617 NAME@5141..5144
3321 ARG@5259..52603618 IDENT@5141..5144 "std"
3322 EXPR_VAR@5259..52603619 SUFFIX_INDEX@5144..5149
3323 NAME@5259..52603620 DOT@5144..5145 "."
3324 IDENT@5259..5260 "v"3621 NAME@5145..5149
3325 R_PAREN@5260..5261 ")"3622 IDENT@5145..5149 "type"
3326 R_BRACK@5261..5262 "]"3623 SUFFIX_APPLY@5149..5156
3327 WHITESPACE@5262..5267 "\n "3624 ARGS_DESC@5149..5156
3328 ELSE_KW@5267..5271 "else"3625 L_PAREN@5149..5150 "("
3329 WHITESPACE@5271..5272 " "3626 ARG@5150..5155
3330 FALSE_EXPR@5272..55133627 EXPR@5150..5155
3331 EXPR_IF_THEN_ELSE@5272..55133628 EXPR_VAR@5150..5155
3332 IF_KW@5272..5274 "if"3629 NAME@5150..5155
3333 WHITESPACE@5274..5275 " "3630 IDENT@5150..5155 "value"
3334 EXPR_APPLY@5275..52923631 R_PAREN@5155..5156 ")"
3335 EXPR_INDEX@5275..52893632 WHITESPACE@5156..5161 "\n "
3336 EXPR_VAR@5275..52783633 ELSE_KW@5161..5165 "else"
3337 NAME@5275..52783634 WHITESPACE@5165..5172 "\n "
3338 IDENT@5275..5278 "std"3635 FALSE_EXPR@5172..5690
3339 DOT@5278..5279 "."3636 EXPR@5172..5690
3340 NAME@5279..52893637 STMT_LOCAL@5172..5672
3341 IDENT@5279..5289 "isFunction"3638 LOCAL_KW@5172..5177 "local"
3342 ARGS_DESC@5289..52923639 WHITESPACE@5177..5178 " "
3343 L_PAREN@5289..5290 "("3640 BIND_FUNCTION@5178..5671
3344 ARG@5290..52913641 NAME@5178..5181
3345 EXPR_VAR@5290..52913642 IDENT@5178..5181 "aux"
3346 NAME@5290..52913643 PARAMS_DESC@5181..5184
3347 IDENT@5290..5291 "v"3644 L_PAREN@5181..5182 "("
3348 R_PAREN@5291..5292 ")"3645 PARAM@5182..5183
3349 WHITESPACE@5292..5293 " "3646 DESTRUCT_FULL@5182..5183
3350 THEN_KW@5293..5297 "then"3647 NAME@5182..5183
3351 WHITESPACE@5297..5304 "\n "3648 IDENT@5182..5183 "v"
3352 TRUE_EXPR@5304..53363649 R_PAREN@5183..5184 ")"
3353 EXPR_ERROR@5304..53363650 WHITESPACE@5184..5185 " "
3354 ERROR_KW@5304..5309 "error"3651 ASSIGN@5185..5186 "="
3355 WHITESPACE@5309..5310 " "3652 WHITESPACE@5186..5195 "\n "
3356 EXPR_STRING@5310..53363653 EXPR@5195..5671
3357 STRING_SINGLE@5310..5336 "'cannot manifest func ..."3654 EXPR_IF_THEN_ELSE@5195..5671
3358 WHITESPACE@5336..5341 "\n "3655 IF_KW@5195..5197 "if"
3359 ELSE_KW@5341..5345 "else"3656 WHITESPACE@5197..5198 " "
3360 WHITESPACE@5345..5346 " "3657 EXPR@5198..5213
3361 FALSE_EXPR@5346..55133658 EXPR_VAR@5198..5201
3362 EXPR_IF_THEN_ELSE@5346..55133659 NAME@5198..5201
3363 IF_KW@5346..5348 "if"3660 IDENT@5198..5201 "std"
3364 WHITESPACE@5348..5349 " "3661 SUFFIX_INDEX@5201..5210
3365 EXPR_APPLY@5349..53643662 DOT@5201..5202 "."
3366 EXPR_INDEX@5349..53613663 NAME@5202..5210
3367 EXPR_VAR@5349..53523664 IDENT@5202..5210 "isString"
3368 NAME@5349..53523665 SUFFIX_APPLY@5210..5213
3369 IDENT@5349..5352 "std"3666 ARGS_DESC@5210..5213
3370 DOT@5352..5353 "."3667 L_PAREN@5210..5211 "("
3371 NAME@5353..53613668 ARG@5211..5212
3372 IDENT@5353..5361 "isNumber"3669 EXPR@5211..5212
3373 ARGS_DESC@5361..53643670 EXPR_VAR@5211..5212
3374 L_PAREN@5361..5362 "("3671 NAME@5211..5212
3375 ARG@5362..53633672 IDENT@5211..5212 "v"
3376 EXPR_VAR@5362..53633673 R_PAREN@5212..5213 ")"
3377 NAME@5362..53633674 WHITESPACE@5213..5214 " "
3378 IDENT@5362..5363 "v"3675 THEN_KW@5214..5218 "then"
3379 R_PAREN@5363..5364 ")"3676 WHITESPACE@5218..5229 "\n "
3380 WHITESPACE@5364..5365 " "3677 TRUE_EXPR@5229..5230
3381 THEN_KW@5365..5369 "then"3678 EXPR@5229..5230
3382 WHITESPACE@5369..5376 "\n "3679 EXPR_VAR@5229..5230
3383 TRUE_EXPR@5376..53913680 NAME@5229..5230
3384 EXPR_APPLY@5376..53913681 IDENT@5229..5230 "v"
3385 EXPR_INDEX@5376..53883682 WHITESPACE@5230..5239 "\n "
3386 EXPR_VAR@5376..53793683 ELSE_KW@5239..5243 "else"
3387 NAME@5376..53793684 WHITESPACE@5243..5254 "\n "
3388 IDENT@5376..5379 "std"3685 FALSE_EXPR@5254..5671
3389 DOT@5379..5380 "."3686 EXPR@5254..5671
3390 NAME@5380..53883687 STMT_LOCAL@5254..5271
3391 IDENT@5380..5388 "toString"3688 LOCAL_KW@5254..5259 "local"
3392 ARGS_DESC@5388..53913689 WHITESPACE@5259..5260 " "
3393 L_PAREN@5388..5389 "("3690 BIND_DESTRUCT@5260..5270
3394 ARG@5389..53903691 DESTRUCT_FULL@5260..5263
3395 EXPR_VAR@5389..53903692 NAME@5260..5263
3396 NAME@5389..53903693 IDENT@5260..5263 "tag"
3397 IDENT@5389..5390 "v"3694 WHITESPACE@5263..5264 " "
3398 R_PAREN@5390..5391 ")"3695 ASSIGN@5264..5265 "="
3399 WHITESPACE@5391..5396 "\n "3696 WHITESPACE@5265..5266 " "
3400 ELSE_KW@5396..5400 "else"3697 EXPR@5266..5270
3401 WHITESPACE@5400..5401 " "3698 EXPR_VAR@5266..5267
3402 FALSE_EXPR@5401..55133699 NAME@5266..5267
3403 EXPR_IF_THEN_ELSE@5401..55133700 IDENT@5266..5267 "v"
3404 IF_KW@5401..5403 "if"3701 SUFFIX_INDEX_EXPR@5267..5270
3405 WHITESPACE@5403..5404 " "3702 L_BRACK@5267..5268 "["
3406 EXPR_BINARY@5404..54133703 EXPR@5268..5269
3407 LHS_EXPR@5404..54053704 EXPR_NUMBER@5268..5269
3408 EXPR_VAR@5404..54053705 FLOAT@5268..5269 "0"
3409 NAME@5404..54053706 R_BRACK@5269..5270 "]"
3410 IDENT@5404..5405 "v"3707 SEMI@5270..5271 ";"
3411 WHITESPACE@5405..5406 " "3708 WHITESPACE@5271..5282 "\n "
3412 EQ@5406..5408 "=="3709 STMT_LOCAL@5282..5340
3413 WHITESPACE@5408..5409 " "3710 LOCAL_KW@5282..5287 "local"
3414 EXPR_LITERAL@5409..54133711 WHITESPACE@5287..5288 " "
3415 TRUE_KW@5409..5413 "true"3712 BIND_DESTRUCT@5288..5339
3416 WHITESPACE@5413..5414 " "3713 DESTRUCT_FULL@5288..5297
3417 THEN_KW@5414..5418 "then"3714 NAME@5288..5297
3418 WHITESPACE@5418..5425 "\n "3715 IDENT@5288..5297 "has_attrs"
3419 TRUE_EXPR@5425..54313716 WHITESPACE@5297..5298 " "
3420 EXPR_STRING@5425..54313717 ASSIGN@5298..5299 "="
3421 STRING_SINGLE@5425..5431 "'True'"3718 WHITESPACE@5299..5300 " "
3422 WHITESPACE@5431..5436 "\n "3719 EXPR@5300..5339
3423 ELSE_KW@5436..5440 "else"3720 EXPR_BINARY@5300..5339
3424 WHITESPACE@5440..5441 " "3721 EXPR@5300..5317
3425 FALSE_EXPR@5441..55133722 EXPR_BINARY@5300..5317
3426 EXPR_IF_THEN_ELSE@5441..55133723 EXPR@5300..5303
3427 IF_KW@5441..5443 "if"3724 EXPR_VAR@5300..5303
3428 WHITESPACE@5443..5444 " "3725 NAME@5300..5303
3429 EXPR_BINARY@5444..54543726 IDENT@5300..5303 "std"
3430 LHS_EXPR@5444..54453727 SUFFIX_INDEX@5303..5310
3431 EXPR_VAR@5444..54453728 DOT@5303..5304 "."
3432 NAME@5444..54453729 NAME@5304..5310
3433 IDENT@5444..5445 "v"3730 IDENT@5304..5310 "length"
3434 WHITESPACE@5445..5446 " "3731 SUFFIX_APPLY@5310..5313
3435 EQ@5446..5448 "=="3732 ARGS_DESC@5310..5313
3436 WHITESPACE@5448..5449 " "3733 L_PAREN@5310..5311 "("
3437 EXPR_LITERAL@5449..54543734 ARG@5311..5312
3438 FALSE_KW@5449..5454 "false"3735 EXPR@5311..5312
3439 WHITESPACE@5454..5455 " "3736 EXPR_VAR@5311..5312
3440 THEN_KW@5455..5459 "then"3737 NAME@5311..5312
3441 WHITESPACE@5459..5466 "\n "3738 IDENT@5311..5312 "v"
3442 TRUE_EXPR@5466..54733739 R_PAREN@5312..5313 ")"
3443 EXPR_STRING@5466..54733740 WHITESPACE@5313..5314 " "
3444 STRING_SINGLE@5466..5473 "'False'"3741 GT@5314..5315 ">"
3445 WHITESPACE@5473..5478 "\n "3742 WHITESPACE@5315..5316 " "
3446 ELSE_KW@5478..5482 "else"3743 EXPR@5316..5317
3447 WHITESPACE@5482..5483 " "3744 EXPR_NUMBER@5316..5317
3448 FALSE_EXPR@5483..55133745 FLOAT@5316..5317 "1"
3449 EXPR_IF_THEN_ELSE@5483..55133746 WHITESPACE@5317..5318 " "
3450 IF_KW@5483..5485 "if"3747 AND@5318..5320 "&&"
3451 WHITESPACE@5485..5486 " "3748 WHITESPACE@5320..5321 " "
3452 EXPR_BINARY@5486..54953749 EXPR@5321..5339
3453 LHS_EXPR@5486..54873750 EXPR_VAR@5321..5324
3454 EXPR_VAR@5486..54873751 NAME@5321..5324
3455 NAME@5486..54873752 IDENT@5321..5324 "std"
3456 IDENT@5486..5487 "v"3753 SUFFIX_INDEX@5324..5333
3457 WHITESPACE@5487..5488 " "3754 DOT@5324..5325 "."
3458 EQ@5488..5490 "=="3755 NAME@5325..5333
3459 WHITESPACE@5490..5491 " "3756 IDENT@5325..5333 "isObject"
3460 EXPR_LITERAL@5491..54953757 SUFFIX_APPLY@5333..5339
3461 NULL_KW@5491..5495 "null"3758 ARGS_DESC@5333..5339
3462 WHITESPACE@5495..5496 " "3759 L_PAREN@5333..5334 "("
3463 THEN_KW@5496..5500 "then"3760 ARG@5334..5338
3464 WHITESPACE@5500..5507 "\n "3761 EXPR@5334..5338
3465 TRUE_EXPR@5507..55133762 EXPR_VAR@5334..5335
3466 EXPR_STRING@5507..55133763 NAME@5334..5335
3467 STRING_SINGLE@5507..5513 "'None'"3764 IDENT@5334..5335 "v"
3468 COMMA@5513..5514 ","3765 SUFFIX_INDEX_EXPR@5335..5338
3469 WHITESPACE@5514..5518 "\n\n "3766 L_BRACK@5335..5336 "["
3470 MEMBER_FIELD_METHOD@5518..56733767 EXPR@5336..5337
3471 FIELD_NAME_FIXED@5518..55363768 EXPR_NUMBER@5336..5337
3472 NAME@5518..55363769 FLOAT@5336..5337 "1"
3473 IDENT@5518..5536 "manifestPythonVars"3770 R_BRACK@5337..5338 "]"
3474 PARAMS_DESC@5536..55423771 R_PAREN@5338..5339 ")"
3475 L_PAREN@5536..5537 "("3772 SEMI@5339..5340 ";"
3476 PARAM@5537..55413773 WHITESPACE@5340..5351 "\n "
3477 DESTRUCT_FULL@5537..55413774 STMT_LOCAL@5351..5396
3478 NAME@5537..55413775 LOCAL_KW@5351..5356 "local"
3479 IDENT@5537..5541 "conf"3776 WHITESPACE@5356..5357 " "
3480 R_PAREN@5541..5542 ")"3777 BIND_DESTRUCT@5357..5395
3481 COLONCOLON@5542..5544 "::"3778 DESTRUCT_FULL@5357..5362
3482 WHITESPACE@5544..5549 "\n "3779 NAME@5357..5362
3483 STMT_LOCAL@5549..56413780 IDENT@5357..5362 "attrs"
3484 LOCAL_KW@5549..5554 "local"3781 WHITESPACE@5362..5363 " "
3485 WHITESPACE@5554..5555 " "3782 ASSIGN@5363..5364 "="
3486 BIND_DESTRUCT@5555..56403783 WHITESPACE@5364..5365 " "
3487 DESTRUCT_FULL@5555..55593784 EXPR@5365..5395
3488 NAME@5555..55593785 EXPR_IF_THEN_ELSE@5365..5395
3489 IDENT@5555..5559 "vars"3786 IF_KW@5365..5367 "if"
3490 WHITESPACE@5559..5560 " "3787 WHITESPACE@5367..5368 " "
3491 ASSIGN@5560..5561 "="3788 EXPR@5368..5377
3492 WHITESPACE@5561..5562 " "3789 EXPR_VAR@5368..5377
3493 EXPR_ARRAY_COMP@5562..56403790 NAME@5368..5377
3494 L_BRACK@5562..5563 "["3791 IDENT@5368..5377 "has_attrs"
3495 EXPR_BINARY@5563..56073792 WHITESPACE@5377..5378 " "
3496 LHS_EXPR@5563..55723793 THEN_KW@5378..5382 "then"
3497 EXPR_STRING@5563..55723794 WHITESPACE@5382..5383 " "
3498 STRING_SINGLE@5563..5572 "'%s = %s'"3795 TRUE_EXPR@5383..5387
3499 WHITESPACE@5572..5573 " "3796 EXPR@5383..5387
3500 MODULO@5573..5574 "%"3797 EXPR_VAR@5383..5384
3501 WHITESPACE@5574..5575 " "3798 NAME@5383..5384
3502 EXPR_ARRAY@5575..56073799 IDENT@5383..5384 "v"
3503 L_BRACK@5575..5576 "["3800 SUFFIX_INDEX_EXPR@5384..5387
3504 EXPR_VAR@5576..55773801 L_BRACK@5384..5385 "["
3505 NAME@5576..55773802 EXPR@5385..5386
3506 IDENT@5576..5577 "k"3803 EXPR_NUMBER@5385..5386
3507 COMMA@5577..5578 ","3804 FLOAT@5385..5386 "1"
3508 WHITESPACE@5578..5579 " "3805 R_BRACK@5386..5387 "]"
3509 EXPR_APPLY@5579..56063806 WHITESPACE@5387..5388 " "
3510 EXPR_INDEX@5579..55973807 ELSE_KW@5388..5392 "else"
3511 EXPR_VAR@5579..55823808 WHITESPACE@5392..5393 " "
3512 NAME@5579..55823809 FALSE_EXPR@5393..5395
3513 IDENT@5579..5582 "std"3810 EXPR@5393..5395
3514 DOT@5582..5583 "."3811 EXPR_OBJECT@5393..5395
3515 NAME@5583..55973812 OBJ_BODY_MEMBER_LIST@5393..5395
3516 IDENT@5583..5597 "manifestPython"3813 L_BRACE@5393..5394 "{"
3517 ARGS_DESC@5597..56063814 R_BRACE@5394..5395 "}"
3518 L_PAREN@5597..5598 "("3815 SEMI@5395..5396 ";"
3519 ARG@5598..56053816 WHITESPACE@5396..5407 "\n "
3520 EXPR_INDEX_EXPR@5598..56053817 STMT_LOCAL@5407..5459
3521 LHS_EXPR@5598..56023818 LOCAL_KW@5407..5412 "local"
3522 EXPR_VAR@5598..56023819 WHITESPACE@5412..5413 " "
3523 NAME@5598..56023820 BIND_DESTRUCT@5413..5458
3524 IDENT@5598..5602 "conf"3821 DESTRUCT_FULL@5413..5421
3525 L_BRACK@5602..5603 "["3822 NAME@5413..5421
3526 EXPR_VAR@5603..56043823 IDENT@5413..5421 "children"
3527 NAME@5603..56043824 WHITESPACE@5421..5422 " "
3528 IDENT@5603..5604 "k"3825 ASSIGN@5422..5423 "="
3529 R_BRACK@5604..5605 "]"3826 WHITESPACE@5423..5424 " "
3530 R_PAREN@5605..5606 ")"3827 EXPR@5424..5458
3531 R_BRACK@5606..5607 "]"3828 EXPR_IF_THEN_ELSE@5424..5458
3532 WHITESPACE@5607..5608 " "3829 IF_KW@5424..5426 "if"
3533 FOR_SPEC@5608..56393830 WHITESPACE@5426..5427 " "
3534 FOR_KW@5608..5611 "for"3831 EXPR@5427..5436
3535 WHITESPACE@5611..5612 " "3832 EXPR_VAR@5427..5436
3536 NAME@5612..56133833 NAME@5427..5436
3537 IDENT@5612..5613 "k"3834 IDENT@5427..5436 "has_attrs"
3538 WHITESPACE@5613..5614 " "3835 WHITESPACE@5436..5437 " "
3539 IN_KW@5614..5616 "in"3836 THEN_KW@5437..5441 "then"
3540 WHITESPACE@5616..5617 " "3837 WHITESPACE@5441..5442 " "
3541 EXPR_APPLY@5617..56393838 TRUE_EXPR@5442..5447
3542 EXPR_INDEX@5617..56333839 EXPR@5442..5447
3543 EXPR_VAR@5617..56203840 EXPR_VAR@5442..5443
3544 NAME@5617..56203841 NAME@5442..5443
3545 IDENT@5617..5620 "std"3842 IDENT@5442..5443 "v"
3546 DOT@5620..5621 "."3843 SUFFIX_SLICE@5443..5447
3547 NAME@5621..56333844 SLICE_DESC@5443..5447
3548 IDENT@5621..5633 "objectFields"3845 L_BRACK@5443..5444 "["
3549 ARGS_DESC@5633..56393846 EXPR@5444..5445
3550 L_PAREN@5633..5634 "("3847 EXPR_NUMBER@5444..5445
3551 ARG@5634..56383848 FLOAT@5444..5445 "2"
3552 EXPR_VAR@5634..56383849 COLON@5445..5446 ":"
3553 NAME@5634..56383850 R_BRACK@5446..5447 "]"
3554 IDENT@5634..5638 "conf"3851 WHITESPACE@5447..5448 " "
3555 R_PAREN@5638..5639 ")"3852 ELSE_KW@5448..5452 "else"
3556 R_BRACK@5639..5640 "]"3853 WHITESPACE@5452..5453 " "
3557 SEMI@5640..5641 ";"3854 FALSE_EXPR@5453..5458
3558 WHITESPACE@5641..5646 "\n "3855 EXPR@5453..5458
3559 EXPR_APPLY@5646..56733856 EXPR_VAR@5453..5454
3560 EXPR_INDEX@5646..56543857 NAME@5453..5454
3561 EXPR_VAR@5646..56493858 IDENT@5453..5454 "v"
3562 NAME@5646..56493859 SUFFIX_SLICE@5454..5458
3563 IDENT@5646..5649 "std"3860 SLICE_DESC@5454..5458
3564 DOT@5649..5650 "."3861 L_BRACK@5454..5455 "["
3565 NAME@5650..56543862 EXPR@5455..5456
3566 IDENT@5650..5654 "join"3863 EXPR_NUMBER@5455..5456
3567 ARGS_DESC@5654..56733864 FLOAT@5455..5456 "1"
3568 L_PAREN@5654..5655 "("3865 COLON@5456..5457 ":"
3569 ARG@5655..56593866 R_BRACK@5457..5458 "]"
3570 EXPR_STRING@5655..56593867 SEMI@5458..5459 ";"
3571 STRING_SINGLE@5655..5659 "'\\n'"3868 WHITESPACE@5459..5470 "\n "
3572 COMMA@5659..5660 ","3869 STMT_LOCAL@5470..5576
3573 WHITESPACE@5660..5661 " "3870 LOCAL_KW@5470..5475 "local"
3574 ARG@5661..56723871 WHITESPACE@5475..5476 " "
3575 EXPR_BINARY@5661..56723872 BIND_DESTRUCT@5476..5575
3576 LHS_EXPR@5661..56653873 DESTRUCT_FULL@5476..5485
3577 EXPR_VAR@5661..56653874 NAME@5476..5485
3578 NAME@5661..56653875 IDENT@5476..5485 "attrs_str"
3579 IDENT@5661..5665 "vars"3876 WHITESPACE@5485..5486 " "
3580 WHITESPACE@5665..5666 " "3877 ASSIGN@5486..5487 "="
3581 PLUS@5666..5667 "+"3878 WHITESPACE@5487..5500 "\n "
3582 WHITESPACE@5667..5668 " "3879 EXPR@5500..5575
3583 EXPR_ARRAY@5668..56723880 EXPR_VAR@5500..5503
3584 L_BRACK@5668..5669 "["3881 NAME@5500..5503
3585 EXPR_STRING@5669..56713882 IDENT@5500..5503 "std"
3586 STRING_SINGLE@5669..5671 "''"3883 SUFFIX_INDEX@5503..5508
3587 R_BRACK@5671..5672 "]"3884 DOT@5503..5504 "."
3588 R_PAREN@5672..5673 ")"3885 NAME@5504..5508
3589 COMMA@5673..5674 ","3886 IDENT@5504..5508 "join"
3590 WHITESPACE@5674..5678 "\n\n "3887 SUFFIX_APPLY@5508..5575
3591 MEMBER_FIELD_METHOD@5678..63453888 ARGS_DESC@5508..5575
3592 FIELD_NAME_FIXED@5678..56953889 L_PAREN@5508..5509 "("
3593 NAME@5678..56953890 ARG@5509..5511
3594 IDENT@5678..5695 "manifestXmlJsonml"3891 EXPR@5509..5511
3595 PARAMS_DESC@5695..57023892 EXPR_STRING@5509..5511
3596 L_PAREN@5695..5696 "("3893 STRING_SINGLE@5509..5511 "''"
3597 PARAM@5696..57013894 COMMA@5511..5512 ","
3598 DESTRUCT_FULL@5696..57013895 WHITESPACE@5512..5513 " "
3599 NAME@5696..57013896 ARG@5513..5574
3600 IDENT@5696..5701 "value"3897 EXPR@5513..5574
3601 R_PAREN@5701..5702 ")"3898 EXPR_ARRAY_COMP@5513..5574
3602 COLONCOLON@5702..5704 "::"3899 L_BRACK@5513..5514 "["
3603 WHITESPACE@5704..5709 "\n "3900 EXPR@5514..5540
3604 EXPR_IF_THEN_ELSE@5709..63453901 EXPR_BINARY@5514..5540
3605 IF_KW@5709..5711 "if"3902 EXPR@5514..5524
3606 WHITESPACE@5711..5712 " "3903 EXPR_STRING@5514..5524
3607 EXPR_UNARY@5712..57313904 STRING_SINGLE@5514..5524 "' %s=\"%s\"'"
3608 NOT@5712..5713 "!"3905 WHITESPACE@5524..5525 " "
3609 EXPR_APPLY@5713..57313906 MODULO@5525..5526 "%"
3610 EXPR_INDEX@5713..57243907 WHITESPACE@5526..5527 " "
3611 EXPR_VAR@5713..57163908 EXPR@5527..5540
3612 NAME@5713..57163909 EXPR_ARRAY@5527..5540
3613 IDENT@5713..5716 "std"3910 L_BRACK@5527..5528 "["
3614 DOT@5716..5717 "."3911 EXPR@5528..5529
3615 NAME@5717..57243912 EXPR_VAR@5528..5529
3616 IDENT@5717..5724 "isArray"3913 NAME@5528..5529
3617 ARGS_DESC@5724..57313914 IDENT@5528..5529 "k"
3618 L_PAREN@5724..5725 "("3915 COMMA@5529..5530 ","
3619 ARG@5725..57303916 WHITESPACE@5530..5531 " "
3620 EXPR_VAR@5725..57303917 EXPR@5531..5539
3621 NAME@5725..57303918 EXPR_VAR@5531..5536
3622 IDENT@5725..5730 "value"3919 NAME@5531..5536
3623 R_PAREN@5730..5731 ")"3920 IDENT@5531..5536 "attrs"
3624 WHITESPACE@5731..5732 " "3921 SUFFIX_INDEX_EXPR@5536..5539
3625 THEN_KW@5732..5736 "then"3922 L_BRACK@5536..5537 "["
3626 WHITESPACE@5736..5743 "\n "3923 EXPR@5537..5538
3627 TRUE_EXPR@5743..58113924 EXPR_VAR@5537..5538
3628 EXPR_ERROR@5743..58113925 NAME@5537..5538
3629 ERROR_KW@5743..5748 "error"3926 IDENT@5537..5538 "k"
3630 WHITESPACE@5748..5749 " "3927 R_BRACK@5538..5539 "]"
3631 EXPR_BINARY@5749..58113928 R_BRACK@5539..5540 "]"
3632 LHS_EXPR@5749..57933929 WHITESPACE@5540..5541 " "
3633 EXPR_STRING@5749..57933930 FOR_SPEC@5541..5573
3634 STRING_SINGLE@5749..5793 "'Expected a JSONML va ..."3931 FOR_KW@5541..5544 "for"
3635 WHITESPACE@5793..5794 " "3932 WHITESPACE@5544..5545 " "
3636 MODULO@5794..5795 "%"3933 DESTRUCT_FULL@5545..5546
3637 WHITESPACE@5795..5796 " "3934 NAME@5545..5546
3638 EXPR_APPLY@5796..58113935 IDENT@5545..5546 "k"
3639 EXPR_INDEX@5796..58043936 WHITESPACE@5546..5547 " "
3640 EXPR_VAR@5796..57993937 IN_KW@5547..5549 "in"
3641 NAME@5796..57993938 WHITESPACE@5549..5550 " "
3642 IDENT@5796..5799 "std"3939 EXPR@5550..5573
3643 DOT@5799..5800 "."3940 EXPR_VAR@5550..5553
3644 NAME@5800..58043941 NAME@5550..5553
3645 IDENT@5800..5804 "type"3942 IDENT@5550..5553 "std"
3646 ARGS_DESC@5804..58113943 SUFFIX_INDEX@5553..5566
3647 L_PAREN@5804..5805 "("3944 DOT@5553..5554 "."
3648 ARG@5805..58103945 NAME@5554..5566
3649 EXPR_VAR@5805..58103946 IDENT@5554..5566 "objectFields"
3650 NAME@5805..58103947 SUFFIX_APPLY@5566..5573
3651 IDENT@5805..5810 "value"3948 ARGS_DESC@5566..5573
3652 R_PAREN@5810..5811 ")"3949 L_PAREN@5566..5567 "("
3653 WHITESPACE@5811..5816 "\n "3950 ARG@5567..5572
3654 ELSE_KW@5816..5820 "else"3951 EXPR@5567..5572
3655 WHITESPACE@5820..5827 "\n "3952 EXPR_VAR@5567..5572
3656 STMT_LOCAL@5827..63273953 NAME@5567..5572
3657 LOCAL_KW@5827..5832 "local"3954 IDENT@5567..5572 "attrs"
3658 WHITESPACE@5832..5833 " "3955 R_PAREN@5572..5573 ")"
3659 BIND_FUNCTION@5833..63263956 R_BRACK@5573..5574 "]"
3660 NAME@5833..58363957 R_PAREN@5574..5575 ")"
3661 IDENT@5833..5836 "aux"3958 SEMI@5575..5576 ";"
3662 PARAMS_DESC@5836..58393959 WHITESPACE@5576..5587 "\n "
3663 L_PAREN@5836..5837 "("3960 EXPR_VAR@5587..5590
3664 PARAM@5837..58383961 NAME@5587..5590
3665 DESTRUCT_FULL@5837..58383962 IDENT@5587..5590 "std"
3666 NAME@5837..58383963 SUFFIX_INDEX@5590..5599
3667 IDENT@5837..5838 "v"3964 DOT@5590..5591 "."
3668 R_PAREN@5838..5839 ")"3965 NAME@5591..5599
3669 WHITESPACE@5839..5840 " "3966 IDENT@5591..5599 "deepJoin"
3670 ASSIGN@5840..5841 "="3967 SUFFIX_APPLY@5599..5671
3671 WHITESPACE@5841..5850 "\n "3968 ARGS_DESC@5599..5671
3672 EXPR_IF_THEN_ELSE@5850..63263969 L_PAREN@5599..5600 "("
3673 IF_KW@5850..5852 "if"3970 ARG@5600..5670
3674 WHITESPACE@5852..5853 " "3971 EXPR@5600..5670
3675 EXPR_APPLY@5853..58683972 EXPR_ARRAY@5600..5670
3676 EXPR_INDEX@5853..58653973 L_BRACK@5600..5601 "["
3677 EXPR_VAR@5853..58563974 EXPR@5601..5604
3678 NAME@5853..58563975 EXPR_STRING@5601..5604
3679 IDENT@5853..5856 "std"3976 STRING_SINGLE@5601..5604 "'<'"
3680 DOT@5856..5857 "."3977 COMMA@5604..5605 ","
3681 NAME@5857..58653978 WHITESPACE@5605..5606 " "
3682 IDENT@5857..5865 "isString"3979 EXPR@5606..5609
3683 ARGS_DESC@5865..58683980 EXPR_VAR@5606..5609
3684 L_PAREN@5865..5866 "("3981 NAME@5606..5609
3685 ARG@5866..58673982 IDENT@5606..5609 "tag"
3686 EXPR_VAR@5866..58673983 COMMA@5609..5610 ","
3687 NAME@5866..58673984 WHITESPACE@5610..5611 " "
3688 IDENT@5866..5867 "v"3985 EXPR@5611..5620
3689 R_PAREN@5867..5868 ")"3986 EXPR_VAR@5611..5620
3690 WHITESPACE@5868..5869 " "3987 NAME@5611..5620
3691 THEN_KW@5869..5873 "then"3988 IDENT@5611..5620 "attrs_str"
3692 WHITESPACE@5873..5884 "\n "3989 COMMA@5620..5621 ","
3693 TRUE_EXPR@5884..58853990 WHITESPACE@5621..5622 " "
3694 EXPR_VAR@5884..58853991 EXPR@5622..5625
3695 NAME@5884..58853992 EXPR_STRING@5622..5625
3696 IDENT@5884..5885 "v"3993 STRING_SINGLE@5622..5625 "'>'"
3697 WHITESPACE@5885..5894 "\n "3994 COMMA@5625..5626 ","
3698 ELSE_KW@5894..5898 "else"3995 WHITESPACE@5626..5627 " "
3699 WHITESPACE@5898..5909 "\n "3996 EXPR@5627..5653
3700 STMT_LOCAL@5909..59263997 EXPR_ARRAY_COMP@5627..5653
3701 LOCAL_KW@5909..5914 "local"3998 L_BRACK@5627..5628 "["
3702 WHITESPACE@5914..5915 " "3999 EXPR@5628..5634
3703 BIND_DESTRUCT@5915..59254000 EXPR_VAR@5628..5631
3704 DESTRUCT_FULL@5915..59184001 NAME@5628..5631
3705 NAME@5915..59184002 IDENT@5628..5631 "aux"
3706 IDENT@5915..5918 "tag"4003 SUFFIX_APPLY@5631..5634
3707 WHITESPACE@5918..5919 " "4004 ARGS_DESC@5631..5634
3708 ASSIGN@5919..5920 "="4005 L_PAREN@5631..5632 "("
3709 WHITESPACE@5920..5921 " "4006 ARG@5632..5633
3710 EXPR_INDEX_EXPR@5921..59254007 EXPR@5632..5633
3711 LHS_EXPR@5921..59224008 EXPR_VAR@5632..5633
3712 EXPR_VAR@5921..59224009 NAME@5632..5633
3713 NAME@5921..59224010 IDENT@5632..5633 "x"
3714 IDENT@5921..5922 "v"4011 R_PAREN@5633..5634 ")"
3715 L_BRACK@5922..5923 "["4012 WHITESPACE@5634..5635 " "
3716 EXPR_NUMBER@5923..59244013 FOR_SPEC@5635..5652
3717 FLOAT@5923..5924 "0"4014 FOR_KW@5635..5638 "for"
3718 R_BRACK@5924..5925 "]"4015 WHITESPACE@5638..5639 " "
3719 SEMI@5925..5926 ";"4016 DESTRUCT_FULL@5639..5640
3720 WHITESPACE@5926..5937 "\n "4017 NAME@5639..5640
3721 STMT_LOCAL@5937..59954018 IDENT@5639..5640 "x"
3722 LOCAL_KW@5937..5942 "local"4019 WHITESPACE@5640..5641 " "
3723 WHITESPACE@5942..5943 " "4020 IN_KW@5641..5643 "in"
3724 BIND_DESTRUCT@5943..59944021 WHITESPACE@5643..5644 " "
3725 DESTRUCT_FULL@5943..59524022 EXPR@5644..5652
3726 NAME@5943..59524023 EXPR_VAR@5644..5652
3727 IDENT@5943..5952 "has_attrs"4024 NAME@5644..5652
3728 WHITESPACE@5952..5953 " "4025 IDENT@5644..5652 "children"
3729 ASSIGN@5953..5954 "="4026 R_BRACK@5652..5653 "]"
3730 WHITESPACE@5954..5955 " "4027 COMMA@5653..5654 ","
3731 EXPR_BINARY@5955..59944028 WHITESPACE@5654..5655 " "
3732 LHS_EXPR@5955..59724029 EXPR@5655..5659
3733 EXPR_BINARY@5955..59724030 EXPR_STRING@5655..5659
3734 LHS_EXPR@5955..59684031 STRING_SINGLE@5655..5659 "'</'"
3735 EXPR_APPLY@5955..59684032 COMMA@5659..5660 ","
3736 EXPR_INDEX@5955..59654033 WHITESPACE@5660..5661 " "
3737 EXPR_VAR@5955..59584034 EXPR@5661..5664
3738 NAME@5955..59584035 EXPR_VAR@5661..5664
3739 IDENT@5955..5958 "std"4036 NAME@5661..5664
3740 DOT@5958..5959 "."4037 IDENT@5661..5664 "tag"
3741 NAME@5959..59654038 COMMA@5664..5665 ","
3742 IDENT@5959..5965 "length"4039 WHITESPACE@5665..5666 " "
3743 ARGS_DESC@5965..59684040 EXPR@5666..5669
3744 L_PAREN@5965..5966 "("4041 EXPR_STRING@5666..5669
3745 ARG@5966..59674042 STRING_SINGLE@5666..5669 "'>'"
3746 EXPR_VAR@5966..59674043 R_BRACK@5669..5670 "]"
3747 NAME@5966..59674044 R_PAREN@5670..5671 ")"
3748 IDENT@5966..5967 "v"4045 SEMI@5671..5672 ";"
3749 R_PAREN@5967..5968 ")"4046 WHITESPACE@5672..5680 "\n\n "
3750 WHITESPACE@5968..5969 " "4047 EXPR_VAR@5680..5683
3751 GT@5969..5970 ">"4048 NAME@5680..5683
3752 WHITESPACE@5970..5971 " "4049 IDENT@5680..5683 "aux"
3753 EXPR_NUMBER@5971..59724050 SUFFIX_APPLY@5683..5690
3754 FLOAT@5971..5972 "1"4051 ARGS_DESC@5683..5690
3755 WHITESPACE@5972..5973 " "4052 L_PAREN@5683..5684 "("
3756 AND@5973..5975 "&&"4053 ARG@5684..5689
3757 WHITESPACE@5975..5976 " "4054 EXPR@5684..5689
3758 EXPR_APPLY@5976..59944055 EXPR_VAR@5684..5689
3759 EXPR_INDEX@5976..59884056 NAME@5684..5689
3760 EXPR_VAR@5976..59794057 IDENT@5684..5689 "value"
3761 NAME@5976..59794058 R_PAREN@5689..5690 ")"
3762 IDENT@5976..5979 "std"4059 COMMA@5690..5691 ","
3763 DOT@5979..5980 "."4060 WHITESPACE@5691..5695 "\n\n "
3764 NAME@5980..59884061 MEMBER_FIELD_METHOD@5695..6483
3765 IDENT@5980..5988 "isObject"4062 FIELD_NAME_FIXED@5695..5705
3766 ARGS_DESC@5988..59944063 NAME@5695..5705
3767 L_PAREN@5988..5989 "("4064 IDENT@5695..5705 "mergePatch"
3768 ARG@5989..59934065 PARAMS_DESC@5705..5720
3769 EXPR_INDEX_EXPR@5989..59934066 L_PAREN@5705..5706 "("
3770 LHS_EXPR@5989..59904067 PARAM@5706..5712
3771 EXPR_VAR@5989..59904068 DESTRUCT_FULL@5706..5712
3772 NAME@5989..59904069 NAME@5706..5712
3773 IDENT@5989..5990 "v"4070 IDENT@5706..5712 "target"
3774 L_BRACK@5990..5991 "["4071 COMMA@5712..5713 ","
3775 EXPR_NUMBER@5991..59924072 WHITESPACE@5713..5714 " "
3776 FLOAT@5991..5992 "1"4073 PARAM@5714..5719
3777 R_BRACK@5992..5993 "]"4074 DESTRUCT_FULL@5714..5719
3778 R_PAREN@5993..5994 ")"4075 NAME@5714..5719
3779 SEMI@5994..5995 ";"4076 IDENT@5714..5719 "patch"
3780 WHITESPACE@5995..6006 "\n "4077 R_PAREN@5719..5720 ")"
3781 STMT_LOCAL@6006..60514078 COLONCOLON@5720..5722 "::"
3782 LOCAL_KW@6006..6011 "local"4079 WHITESPACE@5722..5727 "\n "
3783 WHITESPACE@6011..6012 " "4080 EXPR@5727..6483
3784 BIND_DESTRUCT@6012..60504081 EXPR_IF_THEN_ELSE@5727..6483
3785 DESTRUCT_FULL@6012..60174082 IF_KW@5727..5729 "if"
3786 NAME@6012..60174083 WHITESPACE@5729..5730 " "
3787 IDENT@6012..6017 "attrs"4084 EXPR@5730..5749
3788 WHITESPACE@6017..6018 " "4085 EXPR_VAR@5730..5733
3789 ASSIGN@6018..6019 "="4086 NAME@5730..5733
3790 WHITESPACE@6019..6020 " "4087 IDENT@5730..5733 "std"
3791 EXPR_IF_THEN_ELSE@6020..60504088 SUFFIX_INDEX@5733..5742
3792 IF_KW@6020..6022 "if"4089 DOT@5733..5734 "."
3793 WHITESPACE@6022..6023 " "4090 NAME@5734..5742
3794 EXPR_VAR@6023..60324091 IDENT@5734..5742 "isObject"
3795 NAME@6023..60324092 SUFFIX_APPLY@5742..5749
3796 IDENT@6023..6032 "has_attrs"4093 ARGS_DESC@5742..5749
3797 WHITESPACE@6032..6033 " "4094 L_PAREN@5742..5743 "("
3798 THEN_KW@6033..6037 "then"4095 ARG@5743..5748
3799 WHITESPACE@6037..6038 " "4096 EXPR@5743..5748
3800 TRUE_EXPR@6038..60424097 EXPR_VAR@5743..5748
3801 EXPR_INDEX_EXPR@6038..60424098 NAME@5743..5748
3802 LHS_EXPR@6038..60394099 IDENT@5743..5748 "patch"
3803 EXPR_VAR@6038..60394100 R_PAREN@5748..5749 ")"
3804 NAME@6038..60394101 WHITESPACE@5749..5750 " "
3805 IDENT@6038..6039 "v"4102 THEN_KW@5750..5754 "then"
3806 L_BRACK@6039..6040 "["4103 WHITESPACE@5754..5761 "\n "
3807 EXPR_NUMBER@6040..60414104 TRUE_EXPR@5761..6462
3808 FLOAT@6040..6041 "1"4105 EXPR@5761..6462
3809 R_BRACK@6041..6042 "]"4106 STMT_LOCAL@5761..5835
3810 WHITESPACE@6042..6043 " "4107 LOCAL_KW@5761..5766 "local"
3811 ELSE_KW@6043..6047 "else"4108 WHITESPACE@5766..5767 " "
3812 WHITESPACE@6047..6048 " "4109 BIND_DESTRUCT@5767..5834
3813 FALSE_EXPR@6048..60504110 DESTRUCT_FULL@5767..5780
3814 EXPR_OBJECT@6048..60504111 NAME@5767..5780
3815 OBJ_BODY_MEMBER_LIST@6048..60504112 IDENT@5767..5780 "target_object"
3816 L_BRACE@6048..6049 "{"4113 WHITESPACE@5780..5781 " "
3817 R_BRACE@6049..6050 "}"4114 ASSIGN@5781..5782 "="
3818 SEMI@6050..6051 ";"4115 WHITESPACE@5782..5791 "\n "
3819 WHITESPACE@6051..6062 "\n "4116 EXPR@5791..5834
3820 STMT_LOCAL@6062..61144117 EXPR_IF_THEN_ELSE@5791..5834
3821 LOCAL_KW@6062..6067 "local"4118 IF_KW@5791..5793 "if"
3822 WHITESPACE@6067..6068 " "4119 WHITESPACE@5793..5794 " "
3823 BIND_DESTRUCT@6068..61134120 EXPR@5794..5814
3824 DESTRUCT_FULL@6068..60764121 EXPR_VAR@5794..5797
3825 NAME@6068..60764122 NAME@5794..5797
3826 IDENT@6068..6076 "children"4123 IDENT@5794..5797 "std"
3827 WHITESPACE@6076..6077 " "4124 SUFFIX_INDEX@5797..5806
3828 ASSIGN@6077..6078 "="4125 DOT@5797..5798 "."
3829 WHITESPACE@6078..6079 " "4126 NAME@5798..5806
3830 EXPR_IF_THEN_ELSE@6079..61134127 IDENT@5798..5806 "isObject"
3831 IF_KW@6079..6081 "if"4128 SUFFIX_APPLY@5806..5814
3832 WHITESPACE@6081..6082 " "4129 ARGS_DESC@5806..5814
3833 EXPR_VAR@6082..60914130 L_PAREN@5806..5807 "("
3834 NAME@6082..60914131 ARG@5807..5813
3835 IDENT@6082..6091 "has_attrs"4132 EXPR@5807..5813
3836 WHITESPACE@6091..6092 " "4133 EXPR_VAR@5807..5813
3837 THEN_KW@6092..6096 "then"4134 NAME@5807..5813
3838 WHITESPACE@6096..6097 " "4135 IDENT@5807..5813 "target"
3839 TRUE_EXPR@6097..61024136 R_PAREN@5813..5814 ")"
3840 EXPR_SLICE@6097..61024137 WHITESPACE@5814..5815 " "
3841 EXPR_VAR@6097..60984138 THEN_KW@5815..5819 "then"
3842 NAME@6097..60984139 WHITESPACE@5819..5820 " "
3843 IDENT@6097..6098 "v"4140 TRUE_EXPR@5820..5826
3844 SLICE_DESC@6098..61024141 EXPR@5820..5826
3845 L_BRACK@6098..6099 "["4142 EXPR_VAR@5820..5826
3846 EXPR_NUMBER@6099..61004143 NAME@5820..5826
3847 FLOAT@6099..6100 "2"4144 IDENT@5820..5826 "target"
3848 COLON@6100..6101 ":"4145 WHITESPACE@5826..5827 " "
3849 R_BRACK@6101..6102 "]"4146 ELSE_KW@5827..5831 "else"
3850 WHITESPACE@6102..6103 " "4147 WHITESPACE@5831..5832 " "
3851 ELSE_KW@6103..6107 "else"4148 FALSE_EXPR@5832..5834
3852 WHITESPACE@6107..6108 " "4149 EXPR@5832..5834
3853 FALSE_EXPR@6108..61134150 EXPR_OBJECT@5832..5834
3854 EXPR_SLICE@6108..61134151 OBJ_BODY_MEMBER_LIST@5832..5834
3855 EXPR_VAR@6108..61094152 L_BRACE@5832..5833 "{"
3856 NAME@6108..61094153 R_BRACE@5833..5834 "}"
3857 IDENT@6108..6109 "v"4154 SEMI@5834..5835 ";"
3858 SLICE_DESC@6109..61134155 WHITESPACE@5835..5843 "\n\n "
3859 L_BRACK@6109..6110 "["4156 STMT_LOCAL@5843..5949
3860 EXPR_NUMBER@6110..61114157 LOCAL_KW@5843..5848 "local"
3861 FLOAT@6110..6111 "1"4158 WHITESPACE@5848..5849 " "
3862 COLON@6111..6112 ":"4159 BIND_DESTRUCT@5849..5948
3863 R_BRACK@6112..6113 "]"4160 DESTRUCT_FULL@5849..5862
3864 SEMI@6113..6114 ";"4161 NAME@5849..5862
3865 WHITESPACE@6114..6125 "\n "4162 IDENT@5849..5862 "target_fields"
3866 STMT_LOCAL@6125..62314163 WHITESPACE@5862..5863 " "
3867 LOCAL_KW@6125..6130 "local"4164 ASSIGN@5863..5864 "="
3868 WHITESPACE@6130..6131 " "4165 WHITESPACE@5864..5873 "\n "
3869 BIND_DESTRUCT@6131..62304166 EXPR@5873..5948
3870 DESTRUCT_FULL@6131..61404167 EXPR_IF_THEN_ELSE@5873..5948
3871 NAME@6131..61404168 IF_KW@5873..5875 "if"
3872 IDENT@6131..6140 "attrs_str"4169 WHITESPACE@5875..5876 " "
3873 WHITESPACE@6140..6141 " "4170 EXPR@5876..5903
3874 ASSIGN@6141..6142 "="4171 EXPR_VAR@5876..5879
3875 WHITESPACE@6142..6155 "\n "4172 NAME@5876..5879
3876 EXPR_APPLY@6155..62304173 IDENT@5876..5879 "std"
3877 EXPR_INDEX@6155..61634174 SUFFIX_INDEX@5879..5888
3878 EXPR_VAR@6155..61584175 DOT@5879..5880 "."
3879 NAME@6155..61584176 NAME@5880..5888
3880 IDENT@6155..6158 "std"4177 IDENT@5880..5888 "isObject"
3881 DOT@6158..6159 "."4178 SUFFIX_APPLY@5888..5903
3882 NAME@6159..61634179 ARGS_DESC@5888..5903
3883 IDENT@6159..6163 "join"4180 L_PAREN@5888..5889 "("
3884 ARGS_DESC@6163..62304181 ARG@5889..5902
3885 L_PAREN@6163..6164 "("4182 EXPR@5889..5902
3886 ARG@6164..61664183 EXPR_VAR@5889..5902
3887 EXPR_STRING@6164..61664184 NAME@5889..5902
3888 STRING_SINGLE@6164..6166 "''"4185 IDENT@5889..5902 "target_object"
3889 COMMA@6166..6167 ","4186 R_PAREN@5902..5903 ")"
3890 WHITESPACE@6167..6168 " "4187 WHITESPACE@5903..5904 " "
3891 ARG@6168..62294188 THEN_KW@5904..5908 "then"
3892 EXPR_ARRAY_COMP@6168..62294189 WHITESPACE@5908..5909 " "
3893 L_BRACK@6168..6169 "["4190 TRUE_EXPR@5909..5940
3894 EXPR_BINARY@6169..61954191 EXPR@5909..5940
3895 LHS_EXPR@6169..61794192 EXPR_VAR@5909..5912
3896 EXPR_STRING@6169..61794193 NAME@5909..5912
3897 STRING_SINGLE@6169..6179 "' %s=\"%s\"'"4194 IDENT@5909..5912 "std"
3898 WHITESPACE@6179..6180 " "4195 SUFFIX_INDEX@5912..5925
3899 MODULO@6180..6181 "%"4196 DOT@5912..5913 "."
3900 WHITESPACE@6181..6182 " "4197 NAME@5913..5925
3901 EXPR_ARRAY@6182..61954198 IDENT@5913..5925 "objectFields"
3902 L_BRACK@6182..6183 "["4199 SUFFIX_APPLY@5925..5940
3903 EXPR_VAR@6183..61844200 ARGS_DESC@5925..5940
3904 NAME@6183..61844201 L_PAREN@5925..5926 "("
3905 IDENT@6183..6184 "k"4202 ARG@5926..5939
3906 COMMA@6184..6185 ","4203 EXPR@5926..5939
3907 WHITESPACE@6185..6186 " "4204 EXPR_VAR@5926..5939
3908 EXPR_INDEX_EXPR@6186..61944205 NAME@5926..5939
3909 LHS_EXPR@6186..61914206 IDENT@5926..5939 "target_object"
3910 EXPR_VAR@6186..61914207 R_PAREN@5939..5940 ")"
3911 NAME@6186..61914208 WHITESPACE@5940..5941 " "
3912 IDENT@6186..6191 "attrs"4209 ELSE_KW@5941..5945 "else"
3913 L_BRACK@6191..6192 "["4210 WHITESPACE@5945..5946 " "
3914 EXPR_VAR@6192..61934211 FALSE_EXPR@5946..5948
3915 NAME@6192..61934212 EXPR@5946..5948
3916 IDENT@6192..6193 "k"4213 EXPR_ARRAY@5946..5948
3917 R_BRACK@6193..6194 "]"4214 L_BRACK@5946..5947 "["
3918 R_BRACK@6194..6195 "]"4215 R_BRACK@5947..5948 "]"
3919 WHITESPACE@6195..6196 " "4216 SEMI@5948..5949 ";"
3920 FOR_SPEC@6196..62284217 WHITESPACE@5949..5957 "\n\n "
3921 FOR_KW@6196..6199 "for"4218 STMT_LOCAL@5957..6034
3922 WHITESPACE@6199..6200 " "4219 LOCAL_KW@5957..5962 "local"
3923 NAME@6200..62014220 WHITESPACE@5962..5963 " "
3924 IDENT@6200..6201 "k"4221 BIND_DESTRUCT@5963..6033
3925 WHITESPACE@6201..6202 " "4222 DESTRUCT_FULL@5963..5974
3926 IN_KW@6202..6204 "in"4223 NAME@5963..5974
3927 WHITESPACE@6204..6205 " "4224 IDENT@5963..5974 "null_fields"
3928 EXPR_APPLY@6205..62284225 WHITESPACE@5974..5975 " "
3929 EXPR_INDEX@6205..62214226 ASSIGN@5975..5976 "="
3930 EXPR_VAR@6205..62084227 WHITESPACE@5976..5977 " "
3931 NAME@6205..62084228 EXPR@5977..6033
3932 IDENT@6205..6208 "std"4229 EXPR_ARRAY_COMP@5977..6033
3933 DOT@6208..6209 "."4230 L_BRACK@5977..5978 "["
3934 NAME@6209..62214231 EXPR@5978..5979
3935 IDENT@6209..6221 "objectFields"4232 EXPR_VAR@5978..5979
3936 ARGS_DESC@6221..62284233 NAME@5978..5979
3937 L_PAREN@6221..6222 "("4234 IDENT@5978..5979 "k"
3938 ARG@6222..62274235 WHITESPACE@5979..5980 " "
3939 EXPR_VAR@6222..62274236 FOR_SPEC@5980..6012
3940 NAME@6222..62274237 FOR_KW@5980..5983 "for"
3941 IDENT@6222..6227 "attrs"4238 WHITESPACE@5983..5984 " "
3942 R_PAREN@6227..6228 ")"4239 DESTRUCT_FULL@5984..5985
3943 R_BRACK@6228..6229 "]"4240 NAME@5984..5985
3944 R_PAREN@6229..6230 ")"4241 IDENT@5984..5985 "k"
3945 SEMI@6230..6231 ";"4242 WHITESPACE@5985..5986 " "
3946 WHITESPACE@6231..6242 "\n "4243 IN_KW@5986..5988 "in"
3947 FALSE_EXPR@6242..63264244 WHITESPACE@5988..5989 " "
3948 EXPR_APPLY@6242..63264245 EXPR@5989..6012
3949 EXPR_INDEX@6242..62544246 EXPR_VAR@5989..5992
3950 EXPR_VAR@6242..62454247 NAME@5989..5992
3951 NAME@6242..62454248 IDENT@5989..5992 "std"
3952 IDENT@6242..6245 "std"4249 SUFFIX_INDEX@5992..6005
3953 DOT@6245..6246 "."4250 DOT@5992..5993 "."
3954 NAME@6246..62544251 NAME@5993..6005
3955 IDENT@6246..6254 "deepJoin"4252 IDENT@5993..6005 "objectFields"
3956 ARGS_DESC@6254..63264253 SUFFIX_APPLY@6005..6012
3957 L_PAREN@6254..6255 "("4254 ARGS_DESC@6005..6012
3958 ARG@6255..63254255 L_PAREN@6005..6006 "("
3959 EXPR_ARRAY@6255..63254256 ARG@6006..6011
3960 L_BRACK@6255..6256 "["4257 EXPR@6006..6011
3961 EXPR_STRING@6256..62594258 EXPR_VAR@6006..6011
3962 STRING_SINGLE@6256..6259 "'<'"4259 NAME@6006..6011
3963 COMMA@6259..6260 ","4260 IDENT@6006..6011 "patch"
3964 WHITESPACE@6260..6261 " "4261 R_PAREN@6011..6012 ")"
3965 EXPR_VAR@6261..62644262 WHITESPACE@6012..6013 " "
3966 NAME@6261..62644263 IF_SPEC@6013..6032
3967 IDENT@6261..6264 "tag"4264 IF_KW@6013..6015 "if"
3968 COMMA@6264..6265 ","4265 WHITESPACE@6015..6016 " "
3969 WHITESPACE@6265..6266 " "4266 EXPR@6016..6032
3970 EXPR_VAR@6266..62754267 EXPR_BINARY@6016..6032
3971 NAME@6266..62754268 EXPR@6016..6021
3972 IDENT@6266..6275 "attrs_str"4269 EXPR_VAR@6016..6021
3973 COMMA@6275..6276 ","4270 NAME@6016..6021
3974 WHITESPACE@6276..6277 " "4271 IDENT@6016..6021 "patch"
3975 EXPR_STRING@6277..62804272 SUFFIX_INDEX_EXPR@6021..6024
3976 STRING_SINGLE@6277..6280 "'>'"4273 L_BRACK@6021..6022 "["
3977 COMMA@6280..6281 ","4274 EXPR@6022..6023
3978 WHITESPACE@6281..6282 " "4275 EXPR_VAR@6022..6023
3979 EXPR_ARRAY_COMP@6282..63084276 NAME@6022..6023
3980 L_BRACK@6282..6283 "["4277 IDENT@6022..6023 "k"
3981 EXPR_APPLY@6283..62894278 R_BRACK@6023..6024 "]"
3982 EXPR_VAR@6283..62864279 WHITESPACE@6024..6025 " "
3983 NAME@6283..62864280 EQ@6025..6027 "=="
3984 IDENT@6283..6286 "aux"4281 WHITESPACE@6027..6028 " "
3985 ARGS_DESC@6286..62894282 EXPR@6028..6032
3986 L_PAREN@6286..6287 "("4283 EXPR_LITERAL@6028..6032
3987 ARG@6287..62884284 NULL_KW@6028..6032 "null"
3988 EXPR_VAR@6287..62884285 R_BRACK@6032..6033 "]"
3989 NAME@6287..62884286 SEMI@6033..6034 ";"
3990 IDENT@6287..6288 "x"4287 WHITESPACE@6034..6041 "\n "
3991 R_PAREN@6288..6289 ")"4288 STMT_LOCAL@6041..6114
3992 WHITESPACE@6289..6290 " "4289 LOCAL_KW@6041..6046 "local"
3993 FOR_SPEC@6290..63074290 WHITESPACE@6046..6047 " "
3994 FOR_KW@6290..6293 "for"4291 BIND_DESTRUCT@6047..6113
3995 WHITESPACE@6293..6294 " "4292 DESTRUCT_FULL@6047..6058
3996 NAME@6294..62954293 NAME@6047..6058
3997 IDENT@6294..6295 "x"4294 IDENT@6047..6058 "both_fields"
3998 WHITESPACE@6295..6296 " "4295 WHITESPACE@6058..6059 " "
3999 IN_KW@6296..6298 "in"4296 ASSIGN@6059..6060 "="
4000 WHITESPACE@6298..6299 " "4297 WHITESPACE@6060..6061 " "
4001 EXPR_VAR@6299..63074298 EXPR@6061..6113
4002 NAME@6299..63074299 EXPR_VAR@6061..6064
4003 IDENT@6299..6307 "children"4300 NAME@6061..6064
4004 R_BRACK@6307..6308 "]"4301 IDENT@6061..6064 "std"
4005 COMMA@6308..6309 ","4302 SUFFIX_INDEX@6064..6073
4006 WHITESPACE@6309..6310 " "4303 DOT@6064..6065 "."
4007 EXPR_STRING@6310..63144304 NAME@6065..6073
4008 STRING_SINGLE@6310..6314 "'</'"4305 IDENT@6065..6073 "setUnion"
4009 COMMA@6314..6315 ","4306 SUFFIX_APPLY@6073..6113
4010 WHITESPACE@6315..6316 " "4307 ARGS_DESC@6073..6113
4011 EXPR_VAR@6316..63194308 L_PAREN@6073..6074 "("
4012 NAME@6316..63194309 ARG@6074..6087
4013 IDENT@6316..6319 "tag"4310 EXPR@6074..6087
4014 COMMA@6319..6320 ","4311 EXPR_VAR@6074..6087
4015 WHITESPACE@6320..6321 " "4312 NAME@6074..6087
4016 EXPR_STRING@6321..63244313 IDENT@6074..6087 "target_fields"
4017 STRING_SINGLE@6321..6324 "'>'"4314 COMMA@6087..6088 ","
4018 R_BRACK@6324..6325 "]"4315 WHITESPACE@6088..6089 " "
4019 R_PAREN@6325..6326 ")"4316 ARG@6089..6112
4020 SEMI@6326..6327 ";"4317 EXPR@6089..6112
4021 WHITESPACE@6327..6335 "\n\n "4318 EXPR_VAR@6089..6092
4022 FALSE_EXPR@6335..63454319 NAME@6089..6092
4023 EXPR_APPLY@6335..63454320 IDENT@6089..6092 "std"
4024 EXPR_VAR@6335..63384321 SUFFIX_INDEX@6092..6105
4025 NAME@6335..63384322 DOT@6092..6093 "."
4026 IDENT@6335..6338 "aux"4323 NAME@6093..6105
4027 ARGS_DESC@6338..63454324 IDENT@6093..6105 "objectFields"
4028 L_PAREN@6338..6339 "("4325 SUFFIX_APPLY@6105..6112
4029 ARG@6339..63444326 ARGS_DESC@6105..6112
4030 EXPR_VAR@6339..63444327 L_PAREN@6105..6106 "("
4031 NAME@6339..63444328 ARG@6106..6111
4032 IDENT@6339..6344 "value"4329 EXPR@6106..6111
4033 R_PAREN@6344..6345 ")"4330 EXPR_VAR@6106..6111
4034 COMMA@6345..6346 ","4331 NAME@6106..6111
4035 WHITESPACE@6346..6350 "\n\n "4332 IDENT@6106..6111 "patch"
4036 MEMBER_FIELD_METHOD@6350..68994333 R_PAREN@6111..6112 ")"
4037 FIELD_NAME_FIXED@6350..63584334 R_PAREN@6112..6113 ")"
4038 NAME@6350..63584335 SEMI@6113..6114 ";"
4039 IDENT@6350..6358 "setUnion"4336 WHITESPACE@6114..6122 "\n\n "
4040 PARAMS_DESC@6358..63734337 EXPR_OBJECT@6122..6462
4041 L_PAREN@6358..6359 "("4338 OBJ_BODY_COMP@6122..6462
4042 PARAM@6359..63604339 L_BRACE@6122..6123 "{"
4043 DESTRUCT_FULL@6359..63604340 WHITESPACE@6123..6132 "\n "
4044 NAME@6359..63604341 MEMBER_FIELD_NORMAL@6132..6399
4045 IDENT@6359..6360 "a"4342 FIELD_NAME_DYNAMIC@6132..6135
4046 COMMA@6360..6361 ","4343 L_BRACK@6132..6133 "["
4047 WHITESPACE@6361..6362 " "4344 EXPR@6133..6134
4048 PARAM@6362..63634345 EXPR_VAR@6133..6134
4049 DESTRUCT_FULL@6362..63634346 NAME@6133..6134
4050 NAME@6362..63634347 IDENT@6133..6134 "k"
4051 IDENT@6362..6363 "b"4348 R_BRACK@6134..6135 "]"
4052 COMMA@6363..6364 ","4349 COLON@6135..6136 ":"
4053 WHITESPACE@6364..6365 " "4350 WHITESPACE@6136..6147 "\n "
4054 PARAM@6365..63724351 EXPR@6147..6399
4055 DESTRUCT_FULL@6365..63694352 EXPR_IF_THEN_ELSE@6147..6399
4056 NAME@6365..63694353 IF_KW@6147..6149 "if"
4057 IDENT@6365..6369 "keyF"4354 WHITESPACE@6149..6150 " "
4058 ASSIGN@6369..6370 "="4355 EXPR@6150..6174
4059 EXPR_VAR@6370..63724356 EXPR_UNARY@6150..6174
4060 NAME@6370..63724357 NOT@6150..6151 "!"
4061 IDENT@6370..6372 "id"4358 EXPR_VAR@6151..6154
4062 R_PAREN@6372..6373 ")"4359 NAME@6151..6154
4063 COLONCOLON@6373..6375 "::"4360 IDENT@6151..6154 "std"
4064 WHITESPACE@6375..6380 "\n "4361 SUFFIX_INDEX@6154..6164
4065 SINGLE_LINE_SLASH_COMMENT@6380..6422 "// NOTE: order matter ..."4362 DOT@6154..6155 "."
4066 WHITESPACE@6422..6426 " "4363 NAME@6155..6164
4067 STMT_LOCAL@6426..68754364 IDENT@6155..6164 "objectHas"
4068 LOCAL_KW@6426..6431 "local"4365 SUFFIX_APPLY@6164..6174
4069 WHITESPACE@6431..6432 " "4366 ARGS_DESC@6164..6174
4070 BIND_FUNCTION@6432..68744367 L_PAREN@6164..6165 "("
4071 NAME@6432..64354368 ARG@6165..6170
4072 IDENT@6432..6435 "aux"4369 EXPR@6165..6170
4073 PARAMS_DESC@6435..64524370 EXPR_VAR@6165..6170
4074 L_PAREN@6435..6436 "("4371 NAME@6165..6170
4075 PARAM@6436..64374372 IDENT@6165..6170 "patch"
4076 DESTRUCT_FULL@6436..64374373 COMMA@6170..6171 ","
4077 NAME@6436..64374374 WHITESPACE@6171..6172 " "
4078 IDENT@6436..6437 "a"4375 ARG@6172..6173
4079 COMMA@6437..6438 ","4376 EXPR@6172..6173
4080 WHITESPACE@6438..6439 " "4377 EXPR_VAR@6172..6173
4081 PARAM@6439..64404378 NAME@6172..6173
4082 DESTRUCT_FULL@6439..64404379 IDENT@6172..6173 "k"
4083 NAME@6439..64404380 R_PAREN@6173..6174 ")"
4084 IDENT@6439..6440 "b"4381 WHITESPACE@6174..6175 " "
4085 COMMA@6440..6441 ","4382 THEN_KW@6175..6179 "then"
4086 WHITESPACE@6441..6442 " "4383 WHITESPACE@6179..6192 "\n "
4087 PARAM@6442..64434384 TRUE_EXPR@6192..6208
4088 DESTRUCT_FULL@6442..64434385 EXPR@6192..6208
4089 NAME@6442..64434386 EXPR_VAR@6192..6205
4090 IDENT@6442..6443 "i"4387 NAME@6192..6205
4091 COMMA@6443..6444 ","4388 IDENT@6192..6205 "target_object"
4092 WHITESPACE@6444..6445 " "4389 SUFFIX_INDEX_EXPR@6205..6208
4093 PARAM@6445..64464390 L_BRACK@6205..6206 "["
4094 DESTRUCT_FULL@6445..64464391 EXPR@6206..6207
4095 NAME@6445..64464392 EXPR_VAR@6206..6207
4096 IDENT@6445..6446 "j"4393 NAME@6206..6207
4097 COMMA@6446..6447 ","4394 IDENT@6206..6207 "k"
4098 WHITESPACE@6447..6448 " "4395 R_BRACK@6207..6208 "]"
4099 PARAM@6448..64514396 WHITESPACE@6208..6219 "\n "
4100 DESTRUCT_FULL@6448..64514397 ELSE_KW@6219..6223 "else"
4101 NAME@6448..64514398 WHITESPACE@6223..6224 " "
4102 IDENT@6448..6451 "acc"4399 FALSE_EXPR@6224..6399
4103 R_PAREN@6451..6452 ")"4400 EXPR@6224..6399
4104 WHITESPACE@6452..6453 " "4401 EXPR_IF_THEN_ELSE@6224..6399
4105 ASSIGN@6453..6454 "="4402 IF_KW@6224..6226 "if"
4106 WHITESPACE@6454..6461 "\n "4403 WHITESPACE@6226..6227 " "
4107 EXPR_IF_THEN_ELSE@6461..68744404 EXPR@6227..6259
4108 IF_KW@6461..6463 "if"4405 EXPR_UNARY@6227..6259
4109 WHITESPACE@6463..6464 " "4406 NOT@6227..6228 "!"
4110 EXPR_BINARY@6464..64824407 EXPR_VAR@6228..6231
4111 LHS_EXPR@6464..64654408 NAME@6228..6231
4112 EXPR_VAR@6464..64654409 IDENT@6228..6231 "std"
4113 NAME@6464..64654410 SUFFIX_INDEX@6231..6241
4114 IDENT@6464..6465 "i"4411 DOT@6231..6232 "."
4115 WHITESPACE@6465..6466 " "4412 NAME@6232..6241
4116 GE@6466..6468 ">="4413 IDENT@6232..6241 "objectHas"
4117 WHITESPACE@6468..6469 " "4414 SUFFIX_APPLY@6241..6259
4118 EXPR_APPLY@6469..64824415 ARGS_DESC@6241..6259
4119 EXPR_INDEX@6469..64794416 L_PAREN@6241..6242 "("
4120 EXPR_VAR@6469..64724417 ARG@6242..6255
4121 NAME@6469..64724418 EXPR@6242..6255
4122 IDENT@6469..6472 "std"4419 EXPR_VAR@6242..6255
4123 DOT@6472..6473 "."4420 NAME@6242..6255
4124 NAME@6473..64794421 IDENT@6242..6255 "target_object"
4125 IDENT@6473..6479 "length"4422 COMMA@6255..6256 ","
4126 ARGS_DESC@6479..64824423 WHITESPACE@6256..6257 " "
4127 L_PAREN@6479..6480 "("4424 ARG@6257..6258
4128 ARG@6480..64814425 EXPR@6257..6258
4129 EXPR_VAR@6480..64814426 EXPR_VAR@6257..6258
4130 NAME@6480..64814427 NAME@6257..6258
4131 IDENT@6480..6481 "a"4428 IDENT@6257..6258 "k"
4132 R_PAREN@6481..6482 ")"4429 R_PAREN@6258..6259 ")"
4133 WHITESPACE@6482..6483 " "4430 WHITESPACE@6259..6260 " "
4134 THEN_KW@6483..6487 "then"4431 THEN_KW@6260..6264 "then"
4135 WHITESPACE@6487..6496 "\n "4432 WHITESPACE@6264..6277 "\n "
4136 TRUE_EXPR@6496..65074433 TRUE_EXPR@6277..6318
4137 EXPR_BINARY@6496..65074434 EXPR@6277..6318
4138 LHS_EXPR@6496..64994435 EXPR_VAR@6277..6280
4139 EXPR_VAR@6496..64994436 NAME@6277..6280
4140 NAME@6496..64994437 IDENT@6277..6280 "std"
4141 IDENT@6496..6499 "acc"4438 SUFFIX_INDEX@6280..6291
4142 WHITESPACE@6499..6500 " "4439 DOT@6280..6281 "."
4143 PLUS@6500..6501 "+"4440 NAME@6281..6291
4144 WHITESPACE@6501..6502 " "4441 IDENT@6281..6291 "mergePatch"
4145 EXPR_SLICE@6502..65074442 SUFFIX_APPLY@6291..6318
4146 EXPR_VAR@6502..65034443 ARGS_DESC@6291..6318
4147 NAME@6502..65034444 L_PAREN@6291..6292 "("
4148 IDENT@6502..6503 "b"4445 ARG@6292..6296
4149 SLICE_DESC@6503..65074446 EXPR@6292..6296
4150 L_BRACK@6503..6504 "["4447 EXPR_LITERAL@6292..6296
4151 EXPR_VAR@6504..65054448 NULL_KW@6292..6296 "null"
4152 NAME@6504..65054449 COMMA@6296..6297 ","
4153 IDENT@6504..6505 "j"4450 WHITESPACE@6297..6298 " "
4154 COLON@6505..6506 ":"4451 ARG@6298..6306
4155 R_BRACK@6506..6507 "]"4452 EXPR@6298..6306
4156 WHITESPACE@6507..6514 "\n "4453 EXPR_VAR@6298..6303
4157 ELSE_KW@6514..6518 "else"4454 NAME@6298..6303
4158 WHITESPACE@6518..6519 " "4455 IDENT@6298..6303 "patch"
4159 FALSE_EXPR@6519..68744456 SUFFIX_INDEX_EXPR@6303..6306
4160 EXPR_IF_THEN_ELSE@6519..68744457 L_BRACK@6303..6304 "["
4161 IF_KW@6519..6521 "if"4458 EXPR@6304..6305
4162 WHITESPACE@6521..6522 " "4459 EXPR_VAR@6304..6305
4163 EXPR_BINARY@6522..65404460 NAME@6304..6305
4164 LHS_EXPR@6522..65234461 IDENT@6304..6305 "k"
4165 EXPR_VAR@6522..65234462 R_BRACK@6305..6306 "]"
4166 NAME@6522..65234463 R_PAREN@6306..6307 ")"
4167 IDENT@6522..6523 "j"4464 WHITESPACE@6307..6308 " "
4168 WHITESPACE@6523..6524 " "4465 TAILSTRICT_KW@6308..6318 "tailstrict"
4169 GE@6524..6526 ">="4466 WHITESPACE@6318..6329 "\n "
4170 WHITESPACE@6526..6527 " "4467 ELSE_KW@6329..6333 "else"
4171 EXPR_APPLY@6527..65404468 WHITESPACE@6333..6346 "\n "
4172 EXPR_INDEX@6527..65374469 FALSE_EXPR@6346..6399
4173 EXPR_VAR@6527..65304470 EXPR@6346..6399
4174 NAME@6527..65304471 EXPR_VAR@6346..6349
4175 IDENT@6527..6530 "std"4472 NAME@6346..6349
4176 DOT@6530..6531 "."4473 IDENT@6346..6349 "std"
4177 NAME@6531..65374474 SUFFIX_INDEX@6349..6360
4178 IDENT@6531..6537 "length"4475 DOT@6349..6350 "."
4179 ARGS_DESC@6537..65404476 NAME@6350..6360
4180 L_PAREN@6537..6538 "("4477 IDENT@6350..6360 "mergePatch"
4181 ARG@6538..65394478 SUFFIX_APPLY@6360..6399
4182 EXPR_VAR@6538..65394479 ARGS_DESC@6360..6399
4183 NAME@6538..65394480 L_PAREN@6360..6361 "("
4184 IDENT@6538..6539 "b"4481 ARG@6361..6377
4185 R_PAREN@6539..6540 ")"4482 EXPR@6361..6377
4186 WHITESPACE@6540..6541 " "4483 EXPR_VAR@6361..6374
4187 THEN_KW@6541..6545 "then"4484 NAME@6361..6374
4188 WHITESPACE@6545..6554 "\n "4485 IDENT@6361..6374 "target_object"
4189 TRUE_EXPR@6554..65654486 SUFFIX_INDEX_EXPR@6374..6377
4190 EXPR_BINARY@6554..65654487 L_BRACK@6374..6375 "["
4191 LHS_EXPR@6554..65574488 EXPR@6375..6376
4192 EXPR_VAR@6554..65574489 EXPR_VAR@6375..6376
4193 NAME@6554..65574490 NAME@6375..6376
4194 IDENT@6554..6557 "acc"4491 IDENT@6375..6376 "k"
4195 WHITESPACE@6557..6558 " "4492 R_BRACK@6376..6377 "]"
4196 PLUS@6558..6559 "+"4493 COMMA@6377..6378 ","
4197 WHITESPACE@6559..6560 " "4494 WHITESPACE@6378..6379 " "
4198 EXPR_SLICE@6560..65654495 ARG@6379..6387
4199 EXPR_VAR@6560..65614496 EXPR@6379..6387
4200 NAME@6560..65614497 EXPR_VAR@6379..6384
4201 IDENT@6560..6561 "a"4498 NAME@6379..6384
4202 SLICE_DESC@6561..65654499 IDENT@6379..6384 "patch"
4203 L_BRACK@6561..6562 "["4500 SUFFIX_INDEX_EXPR@6384..6387
4204 EXPR_VAR@6562..65634501 L_BRACK@6384..6385 "["
4205 NAME@6562..65634502 EXPR@6385..6386
4206 IDENT@6562..6563 "i"4503 EXPR_VAR@6385..6386
4207 COLON@6563..6564 ":"4504 NAME@6385..6386
4208 R_BRACK@6564..6565 "]"4505 IDENT@6385..6386 "k"
4209 WHITESPACE@6565..6572 "\n "4506 R_BRACK@6386..6387 "]"
4210 ELSE_KW@6572..6576 "else"4507 R_PAREN@6387..6388 ")"
4211 WHITESPACE@6576..6585 "\n "4508 WHITESPACE@6388..6389 " "
4212 STMT_LOCAL@6585..66074509 TAILSTRICT_KW@6389..6399 "tailstrict"
4213 LOCAL_KW@6585..6590 "local"4510 WHITESPACE@6399..6408 "\n "
4214 WHITESPACE@6590..6591 " "4511 FOR_SPEC@6408..6454
4215 BIND_DESTRUCT@6591..66064512 FOR_KW@6408..6411 "for"
4216 DESTRUCT_FULL@6591..65934513 WHITESPACE@6411..6412 " "
4217 NAME@6591..65934514 DESTRUCT_FULL@6412..6413
4218 IDENT@6591..6593 "ak"4515 NAME@6412..6413
4219 WHITESPACE@6593..6594 " "4516 IDENT@6412..6413 "k"
4220 ASSIGN@6594..6595 "="4517 WHITESPACE@6413..6414 " "
4221 WHITESPACE@6595..6596 " "4518 IN_KW@6414..6416 "in"
4222 EXPR_APPLY@6596..66064519 WHITESPACE@6416..6417 " "
4223 EXPR_VAR@6596..66004520 EXPR@6417..6454
4224 NAME@6596..66004521 EXPR_VAR@6417..6420
4225 IDENT@6596..6600 "keyF"4522 NAME@6417..6420
4226 ARGS_DESC@6600..66064523 IDENT@6417..6420 "std"
4227 L_PAREN@6600..6601 "("4524 SUFFIX_INDEX@6420..6428
4228 ARG@6601..66054525 DOT@6420..6421 "."
4229 EXPR_INDEX_EXPR@6601..66054526 NAME@6421..6428
4230 LHS_EXPR@6601..66024527 IDENT@6421..6428 "setDiff"
4231 EXPR_VAR@6601..66024528 SUFFIX_APPLY@6428..6454
4232 NAME@6601..66024529 ARGS_DESC@6428..6454
4233 IDENT@6601..6602 "a"4530 L_PAREN@6428..6429 "("
4234 L_BRACK@6602..6603 "["4531 ARG@6429..6440
4235 EXPR_VAR@6603..66044532 EXPR@6429..6440
4236 NAME@6603..66044533 EXPR_VAR@6429..6440
4237 IDENT@6603..6604 "i"4534 NAME@6429..6440
4238 R_BRACK@6604..6605 "]"4535 IDENT@6429..6440 "both_fields"
4239 R_PAREN@6605..6606 ")"4536 COMMA@6440..6441 ","
4240 SEMI@6606..6607 ";"4537 WHITESPACE@6441..6442 " "
4241 WHITESPACE@6607..6616 "\n "4538 ARG@6442..6453
4242 STMT_LOCAL@6616..66384539 EXPR@6442..6453
4243 LOCAL_KW@6616..6621 "local"4540 EXPR_VAR@6442..6453
4244 WHITESPACE@6621..6622 " "4541 NAME@6442..6453
4245 BIND_DESTRUCT@6622..66374542 IDENT@6442..6453 "null_fields"
4246 DESTRUCT_FULL@6622..66244543 R_PAREN@6453..6454 ")"
4247 NAME@6622..66244544 WHITESPACE@6454..6461 "\n "
4248 IDENT@6622..6624 "bk"4545 R_BRACE@6461..6462 "}"
4249 WHITESPACE@6624..6625 " "4546 WHITESPACE@6462..6467 "\n "
4250 ASSIGN@6625..6626 "="4547 ELSE_KW@6467..6471 "else"
4251 WHITESPACE@6626..6627 " "4548 WHITESPACE@6471..6478 "\n "
4252 EXPR_APPLY@6627..66374549 FALSE_EXPR@6478..6483
4253 EXPR_VAR@6627..66314550 EXPR@6478..6483
4254 NAME@6627..66314551 EXPR_VAR@6478..6483
4255 IDENT@6627..6631 "keyF"4552 NAME@6478..6483
4256 ARGS_DESC@6631..66374553 IDENT@6478..6483 "patch"
4257 L_PAREN@6631..6632 "("4554 COMMA@6483..6484 ","
4258 ARG@6632..66364555 WHITESPACE@6484..6488 "\n\n "
4259 EXPR_INDEX_EXPR@6632..66364556 MEMBER_FIELD_METHOD@6488..6594
4260 LHS_EXPR@6632..66334557 FIELD_NAME_FIXED@6488..6491
4261 EXPR_VAR@6632..66334558 NAME@6488..6491
4262 NAME@6632..66334559 IDENT@6488..6491 "get"
4263 IDENT@6632..6633 "b"4560 PARAMS_DESC@6491..6528
4264 L_BRACK@6633..6634 "["4561 L_PAREN@6491..6492 "("
4265 EXPR_VAR@6634..66354562 PARAM@6492..6493
4266 NAME@6634..66354563 DESTRUCT_FULL@6492..6493
4267 IDENT@6634..6635 "j"4564 NAME@6492..6493
4268 R_BRACK@6635..6636 "]"4565 IDENT@6492..6493 "o"
4269 R_PAREN@6636..6637 ")"4566 COMMA@6493..6494 ","
4270 SEMI@6637..6638 ";"4567 WHITESPACE@6494..6495 " "
4271 WHITESPACE@6638..6647 "\n "4568 PARAM@6495..6496
4272 FALSE_EXPR@6647..68744569 DESTRUCT_FULL@6495..6496
4273 EXPR_IF_THEN_ELSE@6647..68744570 NAME@6495..6496
4274 IF_KW@6647..6649 "if"4571 IDENT@6495..6496 "f"
4275 WHITESPACE@6649..6650 " "4572 COMMA@6496..6497 ","
4276 EXPR_BINARY@6650..66584573 WHITESPACE@6497..6498 " "
4277 LHS_EXPR@6650..66524574 PARAM@6498..6510
4278 EXPR_VAR@6650..66524575 DESTRUCT_FULL@6498..6505
4279 NAME@6650..66524576 NAME@6498..6505
4280 IDENT@6650..6652 "ak"4577 IDENT@6498..6505 "default"
4281 WHITESPACE@6652..6653 " "4578 ASSIGN@6505..6506 "="
4282 EQ@6653..6655 "=="4579 EXPR@6506..6510
4283 WHITESPACE@6655..6656 " "4580 EXPR_LITERAL@6506..6510
4284 EXPR_VAR@6656..66584581 NULL_KW@6506..6510 "null"
4285 NAME@6656..66584582 COMMA@6510..6511 ","
4286 IDENT@6656..6658 "bk"4583 WHITESPACE@6511..6512 " "
4287 WHITESPACE@6658..6659 " "4584 PARAM@6512..6527
4288 THEN_KW@6659..6663 "then"4585 DESTRUCT_FULL@6512..6522
4289 WHITESPACE@6663..6674 "\n "4586 NAME@6512..6522
4290 TRUE_EXPR@6674..67224587 IDENT@6512..6522 "inc_hidden"
4291 EXPR_APPLY@6674..67224588 ASSIGN@6522..6523 "="
4292 EXPR_VAR@6674..66774589 EXPR@6523..6527
4293 NAME@6674..66774590 EXPR_LITERAL@6523..6527
4294 IDENT@6674..6677 "aux"4591 TRUE_KW@6523..6527 "true"
4295 ARGS_DESC@6677..67224592 R_PAREN@6527..6528 ")"
4296 L_PAREN@6677..6678 "("4593 COLONCOLON@6528..6530 "::"
4297 ARG@6678..66794594 WHITESPACE@6530..6535 "\n "
4298 EXPR_VAR@6678..66794595 EXPR@6535..6594
4299 NAME@6678..66794596 EXPR_IF_THEN_ELSE@6535..6594
4300 IDENT@6678..6679 "a"4597 IF_KW@6535..6537 "if"
4301 COMMA@6679..6680 ","4598 WHITESPACE@6537..6538 " "
4302 WHITESPACE@6680..6681 " "4599 EXPR@6538..6571
4303 ARG@6681..66824600 EXPR_VAR@6538..6541
4304 EXPR_VAR@6681..66824601 NAME@6538..6541
4305 NAME@6681..66824602 IDENT@6538..6541 "std"
4306 IDENT@6681..6682 "b"4603 SUFFIX_INDEX@6541..6553
4307 COMMA@6682..6683 ","4604 DOT@6541..6542 "."
4308 WHITESPACE@6683..6684 " "4605 NAME@6542..6553
4309 ARG@6684..66894606 IDENT@6542..6553 "objectHasEx"
4310 EXPR_BINARY@6684..66894607 SUFFIX_APPLY@6553..6571
4311 LHS_EXPR@6684..66854608 ARGS_DESC@6553..6571
4312 EXPR_VAR@6684..66854609 L_PAREN@6553..6554 "("
4313 NAME@6684..66854610 ARG@6554..6555
4314 IDENT@6684..6685 "i"4611 EXPR@6554..6555
4315 WHITESPACE@6685..6686 " "4612 EXPR_VAR@6554..6555
4316 PLUS@6686..6687 "+"4613 NAME@6554..6555
4317 WHITESPACE@6687..6688 " "4614 IDENT@6554..6555 "o"
4318 EXPR_NUMBER@6688..66894615 COMMA@6555..6556 ","
4319 FLOAT@6688..6689 "1"4616 WHITESPACE@6556..6557 " "
4320 COMMA@6689..6690 ","4617 ARG@6557..6558
4321 WHITESPACE@6690..6691 " "4618 EXPR@6557..6558
4322 ARG@6691..66964619 EXPR_VAR@6557..6558
4323 EXPR_BINARY@6691..66964620 NAME@6557..6558
4324 LHS_EXPR@6691..66924621 IDENT@6557..6558 "f"
4325 EXPR_VAR@6691..66924622 COMMA@6558..6559 ","
4326 NAME@6691..66924623 WHITESPACE@6559..6560 " "
4327 IDENT@6691..6692 "j"4624 ARG@6560..6570
4328 WHITESPACE@6692..6693 " "4625 EXPR@6560..6570
4329 PLUS@6693..6694 "+"4626 EXPR_VAR@6560..6570
4330 WHITESPACE@6694..6695 " "4627 NAME@6560..6570
4331 EXPR_NUMBER@6695..66964628 IDENT@6560..6570 "inc_hidden"
4332 FLOAT@6695..6696 "1"4629 R_PAREN@6570..6571 ")"
4333 COMMA@6696..6697 ","4630 WHITESPACE@6571..6572 " "
4334 WHITESPACE@6697..6698 " "4631 THEN_KW@6572..6576 "then"
4335 ARG@6698..67104632 WHITESPACE@6576..6577 " "
4336 EXPR_BINARY@6698..67104633 TRUE_EXPR@6577..6581
4337 LHS_EXPR@6698..67014634 EXPR@6577..6581
4338 EXPR_VAR@6698..67014635 EXPR_VAR@6577..6578
4339 NAME@6698..67014636 NAME@6577..6578
4340 IDENT@6698..6701 "acc"4637 IDENT@6577..6578 "o"
4638 SUFFIX_INDEX_EXPR@6578..6581
4639 L_BRACK@6578..6579 "["
4640 EXPR@6579..6580
4641 EXPR_VAR@6579..6580
4642 NAME@6579..6580
4643 IDENT@6579..6580 "f"
4644 R_BRACK@6580..6581 "]"
4645 WHITESPACE@6581..6582 " "
4646 ELSE_KW@6582..6586 "else"
4647 WHITESPACE@6586..6587 " "
4648 FALSE_EXPR@6587..6594
4649 EXPR@6587..6594
4650 EXPR_VAR@6587..6594
4651 NAME@6587..6594
4652 IDENT@6587..6594 "default"
4653 COMMA@6594..6595 ","
4654 WHITESPACE@6595..6599 "\n\n "
4655 MEMBER_FIELD_METHOD@6599..6733
4656 FIELD_NAME_FIXED@6599..6610
4657 NAME@6599..6610
4658 IDENT@6599..6610 "resolvePath"
4659 PARAMS_DESC@6610..6616
4660 L_PAREN@6610..6611 "("
4661 PARAM@6611..6612
4662 DESTRUCT_FULL@6611..6612
4663 NAME@6611..6612
4664 IDENT@6611..6612 "f"
4665 COMMA@6612..6613 ","
4666 WHITESPACE@6613..6614 " "
4667 PARAM@6614..6615
4668 DESTRUCT_FULL@6614..6615
4669 NAME@6614..6615
4670 IDENT@6614..6615 "r"
4671 R_PAREN@6615..6616 ")"
4672 COLONCOLON@6616..6618 "::"
4673 WHITESPACE@6618..6623 "\n "
4674 EXPR@6623..6733
4675 STMT_LOCAL@6623..6653
4676 LOCAL_KW@6623..6628 "local"
4677 WHITESPACE@6628..6629 " "
4678 BIND_DESTRUCT@6629..6652
4679 DESTRUCT_FULL@6629..6632
4680 NAME@6629..6632
4681 IDENT@6629..6632 "arr"
4682 WHITESPACE@6632..6633 " "
4683 ASSIGN@6633..6634 "="
4684 WHITESPACE@6634..6635 " "
4685 EXPR@6635..6652
4686 EXPR_VAR@6635..6638
4687 NAME@6635..6638
4688 IDENT@6635..6638 "std"
4689 SUFFIX_INDEX@6638..6644
4690 DOT@6638..6639 "."
4691 NAME@6639..6644
4692 IDENT@6639..6644 "split"
4693 SUFFIX_APPLY@6644..6652
4694 ARGS_DESC@6644..6652
4695 L_PAREN@6644..6645 "("
4696 ARG@6645..6646
4697 EXPR@6645..6646
4698 EXPR_VAR@6645..6646
4699 NAME@6645..6646
4700 IDENT@6645..6646 "f"
4701 COMMA@6646..6647 ","
4702 WHITESPACE@6647..6648 " "
4703 ARG@6648..6651
4704 EXPR@6648..6651
4705 EXPR_STRING@6648..6651
4706 STRING_SINGLE@6648..6651 "'/'"
4707 R_PAREN@6651..6652 ")"
4708 SEMI@6652..6653 ";"
4709 WHITESPACE@6653..6658 "\n "
4710 EXPR_VAR@6658..6661
4711 NAME@6658..6661
4712 IDENT@6658..6661 "std"
4713 SUFFIX_INDEX@6661..6666
4714 DOT@6661..6662 "."
4715 NAME@6662..6666
4716 IDENT@6662..6666 "join"
4717 SUFFIX_APPLY@6666..6733
4718 ARGS_DESC@6666..6733
4719 L_PAREN@6666..6667 "("
4720 ARG@6667..6670
4721 EXPR@6667..6670
4722 EXPR_STRING@6667..6670
4723 STRING_SINGLE@6667..6670 "'/'"
4724 COMMA@6670..6671 ","
4725 WHITESPACE@6671..6672 " "
4726 ARG@6672..6732
4727 EXPR@6672..6732
4728 EXPR_BINARY@6672..6732
4729 EXPR@6672..6675
4730 EXPR_VAR@6672..6675
4731 NAME@6672..6675
4732 IDENT@6672..6675 "std"
4733 SUFFIX_INDEX@6675..6685
4734 DOT@6675..6676 "."
4735 NAME@6676..6685
4736 IDENT@6676..6685 "makeArray"
4737 SUFFIX_APPLY@6685..6726
4738 ARGS_DESC@6685..6726
4739 L_PAREN@6685..6686 "("
4740 ARG@6686..6705
4741 EXPR@6686..6705
4742 EXPR_BINARY@6686..6705
4743 EXPR@6686..6689
4744 EXPR_VAR@6686..6689
4745 NAME@6686..6689
4746 IDENT@6686..6689 "std"
4747 SUFFIX_INDEX@6689..6696
4748 DOT@6689..6690 "."
4749 NAME@6690..6696
4750 IDENT@6690..6696 "length"
4751 SUFFIX_APPLY@6696..6701
4752 ARGS_DESC@6696..6701
4753 L_PAREN@6696..6697 "("
4754 ARG@6697..6700
4755 EXPR@6697..6700
4756 EXPR_VAR@6697..6700
4757 NAME@6697..6700
4758 IDENT@6697..6700 "arr"
4759 R_PAREN@6700..6701 ")"
4341 WHITESPACE@6701..6702 " "4760 WHITESPACE@6701..6702 " "
4342 PLUS@6702..6703 "+"4761 MINUS@6702..6703 "-"
4343 WHITESPACE@6703..6704 " "4762 WHITESPACE@6703..6704 " "
4344 EXPR_ARRAY@6704..67104763 EXPR@6704..6705
4345 L_BRACK@6704..6705 "["4764 EXPR_NUMBER@6704..6705
4346 EXPR_INDEX_EXPR@6705..67094765 FLOAT@6704..6705 "1"
4347 LHS_EXPR@6705..67064766 COMMA@6705..6706 ","
4348 EXPR_VAR@6705..67064767 WHITESPACE@6706..6707 " "
4349 NAME@6705..67064768 ARG@6707..6725
4350 IDENT@6705..6706 "a"4769 EXPR@6707..6725
4351 L_BRACK@6706..6707 "["4770 EXPR_FUNCTION@6707..6725
4352 EXPR_VAR@6707..67084771 FUNCTION_KW@6707..6715 "function"
4353 NAME@6707..67084772 PARAMS_DESC@6715..6718
4354 IDENT@6707..6708 "i"4773 L_PAREN@6715..6716 "("
4355 R_BRACK@6708..6709 "]"4774 PARAM@6716..6717
4356 R_BRACK@6709..6710 "]"4775 DESTRUCT_FULL@6716..6717
4357 R_PAREN@6710..6711 ")"4776 NAME@6716..6717
4358 WHITESPACE@6711..6712 " "4777 IDENT@6716..6717 "i"
4359 TAILSTRICT_KW@6712..6722 "tailstrict"4778 R_PAREN@6717..6718 ")"
4360 WHITESPACE@6722..6731 "\n "4779 WHITESPACE@6718..6719 " "
4361 ELSE_KW@6731..6735 "else"4780 EXPR@6719..6725
4362 WHITESPACE@6735..6736 " "4781 EXPR_VAR@6719..6722
4363 FALSE_EXPR@6736..68744782 NAME@6719..6722
4364 EXPR_IF_THEN_ELSE@6736..68744783 IDENT@6719..6722 "arr"
4365 IF_KW@6736..6738 "if"4784 SUFFIX_INDEX_EXPR@6722..6725
4366 WHITESPACE@6738..6739 " "4785 L_BRACK@6722..6723 "["
4367 EXPR_BINARY@6739..67464786 EXPR@6723..6724
4368 LHS_EXPR@6739..67414787 EXPR_VAR@6723..6724
4369 EXPR_VAR@6739..67414788 NAME@6723..6724
4370 NAME@6739..67414789 IDENT@6723..6724 "i"
4371 IDENT@6739..6741 "ak"4790 R_BRACK@6724..6725 "]"
4372 WHITESPACE@6741..6742 " "4791 R_PAREN@6725..6726 ")"
4373 LT@6742..6743 "<"4792 WHITESPACE@6726..6727 " "
4374 WHITESPACE@6743..6744 " "4793 PLUS@6727..6728 "+"
4375 EXPR_VAR@6744..67464794 WHITESPACE@6728..6729 " "
4376 NAME@6744..67464795 EXPR@6729..6732
4377 IDENT@6744..6746 "bk"4796 EXPR_ARRAY@6729..6732
4378 WHITESPACE@6746..6747 " "4797 L_BRACK@6729..6730 "["
4379 THEN_KW@6747..6751 "then"4798 EXPR@6730..6731
4380 WHITESPACE@6751..6762 "\n "4799 EXPR_VAR@6730..6731
4381 TRUE_EXPR@6762..68064800 NAME@6730..6731
4382 EXPR_APPLY@6762..68064801 IDENT@6730..6731 "r"
4383 EXPR_VAR@6762..67654802 R_BRACK@6731..6732 "]"
4384 NAME@6762..67654803 R_PAREN@6732..6733 ")"
4385 IDENT@6762..6765 "aux"4804 COMMA@6733..6734 ","
4386 ARGS_DESC@6765..68064805 WHITESPACE@6734..6738 "\n\n "
4387 L_PAREN@6765..6766 "("4806 MEMBER_FIELD_METHOD@6738..7191
4388 ARG@6766..67674807 FIELD_NAME_FIXED@6738..6743
4389 EXPR_VAR@6766..67674808 NAME@6738..6743
4390 NAME@6766..67674809 IDENT@6738..6743 "prune"
4391 IDENT@6766..6767 "a"4810 PARAMS_DESC@6743..6746
4392 COMMA@6767..6768 ","4811 L_PAREN@6743..6744 "("
4393 WHITESPACE@6768..6769 " "4812 PARAM@6744..6745
4394 ARG@6769..67704813 DESTRUCT_FULL@6744..6745
4395 EXPR_VAR@6769..67704814 NAME@6744..6745
4396 NAME@6769..67704815 IDENT@6744..6745 "a"
4397 IDENT@6769..6770 "b"4816 R_PAREN@6745..6746 ")"
4398 COMMA@6770..6771 ","4817 COLONCOLON@6746..6748 "::"
4399 WHITESPACE@6771..6772 " "4818 WHITESPACE@6748..6753 "\n "
4400 ARG@6772..67774819 EXPR@6753..7191
4401 EXPR_BINARY@6772..67774820 STMT_LOCAL@6753..6957
4402 LHS_EXPR@6772..67734821 LOCAL_KW@6753..6758 "local"
4403 EXPR_VAR@6772..67734822 WHITESPACE@6758..6759 " "
4404 NAME@6772..67734823 BIND_FUNCTION@6759..6956
4405 IDENT@6772..6773 "i"4824 NAME@6759..6768
4406 WHITESPACE@6773..6774 " "4825 IDENT@6759..6768 "isContent"
4407 PLUS@6774..6775 "+"4826 PARAMS_DESC@6768..6771
4408 WHITESPACE@6775..6776 " "4827 L_PAREN@6768..6769 "("
4409 EXPR_NUMBER@6776..67774828 PARAM@6769..6770
4410 FLOAT@6776..6777 "1"4829 DESTRUCT_FULL@6769..6770
4411 COMMA@6777..6778 ","4830 NAME@6769..6770
4412 WHITESPACE@6778..6779 " "4831 IDENT@6769..6770 "b"
4413 ARG@6779..67804832 R_PAREN@6770..6771 ")"
4414 EXPR_VAR@6779..67804833 WHITESPACE@6771..6772 " "
4415 NAME@6779..67804834 ASSIGN@6772..6773 "="
4416 IDENT@6779..6780 "j"4835 WHITESPACE@6773..6780 "\n "
4417 COMMA@6780..6781 ","4836 EXPR@6780..6956
4418 WHITESPACE@6781..6782 " "4837 EXPR_IF_THEN_ELSE@6780..6956
4419 ARG@6782..67944838 IF_KW@6780..6782 "if"
4420 EXPR_BINARY@6782..67944839 WHITESPACE@6782..6783 " "
4421 LHS_EXPR@6782..67854840 EXPR@6783..6792
4422 EXPR_VAR@6782..67854841 EXPR_BINARY@6783..6792
4423 NAME@6782..67854842 EXPR@6783..6784
4424 IDENT@6782..6785 "acc"4843 EXPR_VAR@6783..6784
4425 WHITESPACE@6785..6786 " "4844 NAME@6783..6784
4426 PLUS@6786..6787 "+"4845 IDENT@6783..6784 "b"
4427 WHITESPACE@6787..6788 " "4846 WHITESPACE@6784..6785 " "
4428 EXPR_ARRAY@6788..67944847 EQ@6785..6787 "=="
4429 L_BRACK@6788..6789 "["4848 WHITESPACE@6787..6788 " "
4430 EXPR_INDEX_EXPR@6789..67934849 EXPR@6788..6792
4431 LHS_EXPR@6789..67904850 EXPR_LITERAL@6788..6792
4432 EXPR_VAR@6789..67904851 NULL_KW@6788..6792 "null"
4433 NAME@6789..67904852 WHITESPACE@6792..6793 " "
4434 IDENT@6789..6790 "a"4853 THEN_KW@6793..6797 "then"
4435 L_BRACK@6790..6791 "["4854 WHITESPACE@6797..6806 "\n "
4436 EXPR_VAR@6791..67924855 TRUE_EXPR@6806..6811
4437 NAME@6791..67924856 EXPR@6806..6811
4438 IDENT@6791..6792 "i"4857 EXPR_LITERAL@6806..6811
4439 R_BRACK@6792..6793 "]"4858 FALSE_KW@6806..6811 "false"
4440 R_BRACK@6793..6794 "]"4859 WHITESPACE@6811..6818 "\n "
4441 R_PAREN@6794..6795 ")"4860 ELSE_KW@6818..6822 "else"
4442 WHITESPACE@6795..6796 " "4861 WHITESPACE@6822..6823 " "
4443 TAILSTRICT_KW@6796..6806 "tailstrict"4862 FALSE_EXPR@6823..6956
4444 WHITESPACE@6806..6815 "\n "4863 EXPR@6823..6956
4445 ELSE_KW@6815..6819 "else"4864 EXPR_IF_THEN_ELSE@6823..6956
4446 WHITESPACE@6819..6830 "\n "4865 IF_KW@6823..6825 "if"
4447 FALSE_EXPR@6830..68744866 WHITESPACE@6825..6826 " "
4448 EXPR_APPLY@6830..68744867 EXPR@6826..6840
4449 EXPR_VAR@6830..68334868 EXPR_VAR@6826..6829
4450 NAME@6830..68334869 NAME@6826..6829
4451 IDENT@6830..6833 "aux"4870 IDENT@6826..6829 "std"
4452 ARGS_DESC@6833..68744871 SUFFIX_INDEX@6829..6837
4453 L_PAREN@6833..6834 "("4872 DOT@6829..6830 "."
4454 ARG@6834..68354873 NAME@6830..6837
4455 EXPR_VAR@6834..68354874 IDENT@6830..6837 "isArray"
4456 NAME@6834..68354875 SUFFIX_APPLY@6837..6840
4457 IDENT@6834..6835 "a"4876 ARGS_DESC@6837..6840
4458 COMMA@6835..6836 ","4877 L_PAREN@6837..6838 "("
4459 WHITESPACE@6836..6837 " "4878 ARG@6838..6839
4460 ARG@6837..68384879 EXPR@6838..6839
4461 EXPR_VAR@6837..68384880 EXPR_VAR@6838..6839
4462 NAME@6837..68384881 NAME@6838..6839
4463 IDENT@6837..6838 "b"4882 IDENT@6838..6839 "b"
4464 COMMA@6838..6839 ","4883 R_PAREN@6839..6840 ")"
4465 WHITESPACE@6839..6840 " "4884 WHITESPACE@6840..6841 " "
4466 ARG@6840..68414885 THEN_KW@6841..6845 "then"
4467 EXPR_VAR@6840..68414886 WHITESPACE@6845..6854 "\n "
4468 NAME@6840..68414887 TRUE_EXPR@6854..6871
4469 IDENT@6840..6841 "i"4888 EXPR@6854..6871
4470 COMMA@6841..6842 ","4889 EXPR_BINARY@6854..6871
4471 WHITESPACE@6842..6843 " "4890 EXPR@6854..6857
4472 ARG@6843..68484891 EXPR_VAR@6854..6857
4473 EXPR_BINARY@6843..68484892 NAME@6854..6857
4474 LHS_EXPR@6843..68444893 IDENT@6854..6857 "std"
4475 EXPR_VAR@6843..68444894 SUFFIX_INDEX@6857..6864
4476 NAME@6843..68444895 DOT@6857..6858 "."
4477 IDENT@6843..6844 "j"4896 NAME@6858..6864
4478 WHITESPACE@6844..6845 " "4897 IDENT@6858..6864 "length"
4479 PLUS@6845..6846 "+"4898 SUFFIX_APPLY@6864..6867
4480 WHITESPACE@6846..6847 " "4899 ARGS_DESC@6864..6867
4481 EXPR_NUMBER@6847..68484900 L_PAREN@6864..6865 "("
4482 FLOAT@6847..6848 "1"4901 ARG@6865..6866
4483 COMMA@6848..6849 ","4902 EXPR@6865..6866
4484 WHITESPACE@6849..6850 " "4903 EXPR_VAR@6865..6866
4485 ARG@6850..68624904 NAME@6865..6866
4486 EXPR_BINARY@6850..68624905 IDENT@6865..6866 "b"
4487 LHS_EXPR@6850..68534906 R_PAREN@6866..6867 ")"
4488 EXPR_VAR@6850..68534907 WHITESPACE@6867..6868 " "
4489 NAME@6850..68534908 GT@6868..6869 ">"
4490 IDENT@6850..6853 "acc"4909 WHITESPACE@6869..6870 " "
4491 WHITESPACE@6853..6854 " "4910 EXPR@6870..6871
4492 PLUS@6854..6855 "+"4911 EXPR_NUMBER@6870..6871
4493 WHITESPACE@6855..6856 " "4912 FLOAT@6870..6871 "0"
4494 EXPR_ARRAY@6856..68624913 WHITESPACE@6871..6878 "\n "
4495 L_BRACK@6856..6857 "["4914 ELSE_KW@6878..6882 "else"
4496 EXPR_INDEX_EXPR@6857..68614915 WHITESPACE@6882..6883 " "
4497 LHS_EXPR@6857..68584916 FALSE_EXPR@6883..6956
4498 EXPR_VAR@6857..68584917 EXPR@6883..6956
4499 NAME@6857..68584918 EXPR_IF_THEN_ELSE@6883..6956
4500 IDENT@6857..6858 "b"4919 IF_KW@6883..6885 "if"
4501 L_BRACK@6858..6859 "["4920 WHITESPACE@6885..6886 " "
4502 EXPR_VAR@6859..68604921 EXPR@6886..6901
4503 NAME@6859..68604922 EXPR_VAR@6886..6889
4504 IDENT@6859..6860 "j"4923 NAME@6886..6889
4505 R_BRACK@6860..6861 "]"4924 IDENT@6886..6889 "std"
4506 R_BRACK@6861..6862 "]"4925 SUFFIX_INDEX@6889..6898
4507 R_PAREN@6862..6863 ")"4926 DOT@6889..6890 "."
4508 WHITESPACE@6863..6864 " "4927 NAME@6890..6898
4509 TAILSTRICT_KW@6864..6874 "tailstrict"4928 IDENT@6890..6898 "isObject"
4510 SEMI@6874..6875 ";"4929 SUFFIX_APPLY@6898..6901
4511 WHITESPACE@6875..6880 "\n "4930 ARGS_DESC@6898..6901
4512 EXPR_APPLY@6880..68994931 L_PAREN@6898..6899 "("
4513 EXPR_VAR@6880..68834932 ARG@6899..6900
4514 NAME@6880..68834933 EXPR@6899..6900
4515 IDENT@6880..6883 "aux"4934 EXPR_VAR@6899..6900
4516 ARGS_DESC@6883..68994935 NAME@6899..6900
4517 L_PAREN@6883..6884 "("4936 IDENT@6899..6900 "b"
4518 ARG@6884..68854937 R_PAREN@6900..6901 ")"
4519 EXPR_VAR@6884..68854938 WHITESPACE@6901..6902 " "
4520 NAME@6884..68854939 THEN_KW@6902..6906 "then"
4521 IDENT@6884..6885 "a"4940 WHITESPACE@6906..6915 "\n "
4522 COMMA@6885..6886 ","4941 TRUE_EXPR@6915..6932
4523 WHITESPACE@6886..6887 " "4942 EXPR@6915..6932
4524 ARG@6887..68884943 EXPR_BINARY@6915..6932
4525 EXPR_VAR@6887..68884944 EXPR@6915..6918
4526 NAME@6887..68884945 EXPR_VAR@6915..6918
4527 IDENT@6887..6888 "b"4946 NAME@6915..6918
4528 COMMA@6888..6889 ","4947 IDENT@6915..6918 "std"
4529 WHITESPACE@6889..6890 " "4948 SUFFIX_INDEX@6918..6925
4530 ARG@6890..68914949 DOT@6918..6919 "."
4531 EXPR_NUMBER@6890..68914950 NAME@6919..6925
4532 FLOAT@6890..6891 "0"4951 IDENT@6919..6925 "length"
4533 COMMA@6891..6892 ","4952 SUFFIX_APPLY@6925..6928
4534 WHITESPACE@6892..6893 " "4953 ARGS_DESC@6925..6928
4535 ARG@6893..68944954 L_PAREN@6925..6926 "("
4536 EXPR_NUMBER@6893..68944955 ARG@6926..6927
4537 FLOAT@6893..6894 "0"4956 EXPR@6926..6927
4538 COMMA@6894..6895 ","4957 EXPR_VAR@6926..6927
4539 WHITESPACE@6895..6896 " "4958 NAME@6926..6927
4540 ARG@6896..68984959 IDENT@6926..6927 "b"
4541 EXPR_ARRAY@6896..68984960 R_PAREN@6927..6928 ")"
4542 L_BRACK@6896..6897 "["4961 WHITESPACE@6928..6929 " "
4543 R_BRACK@6897..6898 "]"4962 GT@6929..6930 ">"
4544 R_PAREN@6898..6899 ")"4963 WHITESPACE@6930..6931 " "
4545 COMMA@6899..6900 ","4964 EXPR@6931..6932
4546 WHITESPACE@6900..6904 "\n\n "4965 EXPR_NUMBER@6931..6932
4547 MEMBER_FIELD_METHOD@6904..73614966 FLOAT@6931..6932 "0"
4548 FIELD_NAME_FIXED@6904..69114967 WHITESPACE@6932..6939 "\n "
4549 NAME@6904..69114968 ELSE_KW@6939..6943 "else"
4550 IDENT@6904..6911 "setDiff"4969 WHITESPACE@6943..6952 "\n "
4551 PARAMS_DESC@6911..69264970 FALSE_EXPR@6952..6956
4552 L_PAREN@6911..6912 "("4971 EXPR@6952..6956
4553 PARAM@6912..69134972 EXPR_LITERAL@6952..6956
4554 DESTRUCT_FULL@6912..69134973 TRUE_KW@6952..6956 "true"
4555 NAME@6912..69134974 SEMI@6956..6957 ";"
4556 IDENT@6912..6913 "a"4975 WHITESPACE@6957..6962 "\n "
4557 COMMA@6913..6914 ","4976 EXPR_IF_THEN_ELSE@6962..7191
4558 WHITESPACE@6914..6915 " "4977 IF_KW@6962..6964 "if"
4559 PARAM@6915..69164978 WHITESPACE@6964..6965 " "
4560 DESTRUCT_FULL@6915..69164979 EXPR@6965..6979
4561 NAME@6915..69164980 EXPR_VAR@6965..6968
4562 IDENT@6915..6916 "b"4981 NAME@6965..6968
4563 COMMA@6916..6917 ","4982 IDENT@6965..6968 "std"
4564 WHITESPACE@6917..6918 " "4983 SUFFIX_INDEX@6968..6976
4565 PARAM@6918..69254984 DOT@6968..6969 "."
4566 DESTRUCT_FULL@6918..69224985 NAME@6969..6976
4567 NAME@6918..69224986 IDENT@6969..6976 "isArray"
4568 IDENT@6918..6922 "keyF"4987 SUFFIX_APPLY@6976..6979
4569 ASSIGN@6922..6923 "="4988 ARGS_DESC@6976..6979
4570 EXPR_VAR@6923..69254989 L_PAREN@6976..6977 "("
4571 NAME@6923..69254990 ARG@6977..6978
4572 IDENT@6923..6925 "id"4991 EXPR@6977..6978
4573 R_PAREN@6925..6926 ")"4992 EXPR_VAR@6977..6978
4574 COLONCOLON@6926..6928 "::"4993 NAME@6977..6978
4575 WHITESPACE@6928..6933 "\n "4994 IDENT@6977..6978 "a"
4576 STMT_LOCAL@6933..73264995 R_PAREN@6978..6979 ")"
4577 LOCAL_KW@6933..6938 "local"4996 WHITESPACE@6979..6980 " "
4578 WHITESPACE@6938..6939 " "4997 THEN_KW@6980..6984 "then"
4579 BIND_FUNCTION@6939..73254998 WHITESPACE@6984..6991 "\n "
4580 NAME@6939..69424999 TRUE_EXPR@6991..7041
4581 IDENT@6939..6942 "aux"5000 EXPR@6991..7041
4582 PARAMS_DESC@6942..69595001 EXPR_ARRAY_COMP@6991..7041
4583 L_PAREN@6942..6943 "("5002 L_BRACK@6991..6992 "["
4584 PARAM@6943..69445003 EXPR@6992..7004
4585 DESTRUCT_FULL@6943..69445004 EXPR_VAR@6992..6995
4586 NAME@6943..69445005 NAME@6992..6995
4587 IDENT@6943..6944 "a"5006 IDENT@6992..6995 "std"
4588 COMMA@6944..6945 ","5007 SUFFIX_INDEX@6995..7001
4589 WHITESPACE@6945..6946 " "5008 DOT@6995..6996 "."
4590 PARAM@6946..69475009 NAME@6996..7001
4591 DESTRUCT_FULL@6946..69475010 IDENT@6996..7001 "prune"
4592 NAME@6946..69475011 SUFFIX_APPLY@7001..7004
4593 IDENT@6946..6947 "b"5012 ARGS_DESC@7001..7004
4594 COMMA@6947..6948 ","5013 L_PAREN@7001..7002 "("
4595 WHITESPACE@6948..6949 " "5014 ARG@7002..7003
4596 PARAM@6949..69505015 EXPR@7002..7003
4597 DESTRUCT_FULL@6949..69505016 EXPR_VAR@7002..7003
4598 NAME@6949..69505017 NAME@7002..7003
4599 IDENT@6949..6950 "i"5018 IDENT@7002..7003 "x"
4600 COMMA@6950..6951 ","5019 R_PAREN@7003..7004 ")"
4601 WHITESPACE@6951..6952 " "5020 WHITESPACE@7004..7005 " "
4602 PARAM@6952..69535021 FOR_SPEC@7005..7015
4603 DESTRUCT_FULL@6952..69535022 FOR_KW@7005..7008 "for"
4604 NAME@6952..69535023 WHITESPACE@7008..7009 " "
4605 IDENT@6952..6953 "j"5024 DESTRUCT_FULL@7009..7010
4606 COMMA@6953..6954 ","5025 NAME@7009..7010
4607 WHITESPACE@6954..6955 " "5026 IDENT@7009..7010 "x"
4608 PARAM@6955..69585027 WHITESPACE@7010..7011 " "
4609 DESTRUCT_FULL@6955..69585028 IN_KW@7011..7013 "in"
4610 NAME@6955..69585029 WHITESPACE@7013..7014 " "
4611 IDENT@6955..6958 "acc"5030 EXPR@7014..7015
4612 R_PAREN@6958..6959 ")"5031 EXPR_VAR@7014..7015
4613 WHITESPACE@6959..6960 " "5032 NAME@7014..7015
4614 ASSIGN@6960..6961 "="5033 IDENT@7014..7015 "a"
4615 WHITESPACE@6961..6968 "\n "5034 WHITESPACE@7015..7016 " "
4616 EXPR_IF_THEN_ELSE@6968..73255035 IF_SPEC@7016..7040
4617 IF_KW@6968..6970 "if"5036 IF_KW@7016..7018 "if"
4618 WHITESPACE@6970..6971 " "5037 WHITESPACE@7018..7019 " "
4619 EXPR_BINARY@6971..69895038 EXPR@7019..7040
4620 LHS_EXPR@6971..69725039 EXPR_VAR@7019..7028
4621 EXPR_VAR@6971..69725040 NAME@7019..7028
4622 NAME@6971..69725041 IDENT@7019..7028 "isContent"
4623 IDENT@6971..6972 "i"5042 SUFFIX_APPLY@7028..7040
4624 WHITESPACE@6972..6973 " "5043 ARGS_DESC@7028..7040
4625 GE@6973..6975 ">="5044 L_PAREN@7028..7029 "("
4626 WHITESPACE@6975..6976 " "5045 ARG@7029..7039
4627 EXPR_APPLY@6976..69895046 EXPR@7029..7039
4628 EXPR_INDEX@6976..69865047 EXPR_LITERAL@7029..7030
4629 EXPR_VAR@6976..69795048 DOLLAR@7029..7030 "$"
4630 NAME@6976..69795049 SUFFIX_INDEX@7030..7036
4631 IDENT@6976..6979 "std"5050 DOT@7030..7031 "."
4632 DOT@6979..6980 "."5051 NAME@7031..7036
4633 NAME@6980..69865052 IDENT@7031..7036 "prune"
4634 IDENT@6980..6986 "length"5053 SUFFIX_APPLY@7036..7039
4635 ARGS_DESC@6986..69895054 ARGS_DESC@7036..7039
4636 L_PAREN@6986..6987 "("5055 L_PAREN@7036..7037 "("
4637 ARG@6987..69885056 ARG@7037..7038
4638 EXPR_VAR@6987..69885057 EXPR@7037..7038
4639 NAME@6987..69885058 EXPR_VAR@7037..7038
4640 IDENT@6987..6988 "a"5059 NAME@7037..7038
4641 R_PAREN@6988..6989 ")"5060 IDENT@7037..7038 "x"
4642 WHITESPACE@6989..6990 " "5061 R_PAREN@7038..7039 ")"
4643 THEN_KW@6990..6994 "then"5062 R_PAREN@7039..7040 ")"
4644 WHITESPACE@6994..7003 "\n "5063 R_BRACK@7040..7041 "]"
4645 TRUE_EXPR@7003..70065064 WHITESPACE@7041..7046 "\n "
4646 EXPR_VAR@7003..70065065 ELSE_KW@7046..7050 "else"
4647 NAME@7003..70065066 WHITESPACE@7050..7051 " "
4648 IDENT@7003..7006 "acc"5067 FALSE_EXPR@7051..7191
4649 WHITESPACE@7006..7013 "\n "5068 EXPR@7051..7191
4650 ELSE_KW@7013..7017 "else"5069 EXPR_IF_THEN_ELSE@7051..7191
4651 WHITESPACE@7017..7018 " "5070 IF_KW@7051..7053 "if"
4652 FALSE_EXPR@7018..73255071 WHITESPACE@7053..7054 " "
4653 EXPR_IF_THEN_ELSE@7018..73255072 EXPR@7054..7069
4654 IF_KW@7018..7020 "if"5073 EXPR_VAR@7054..7057
4655 WHITESPACE@7020..7021 " "5074 NAME@7054..7057
4656 EXPR_BINARY@7021..70395075 IDENT@7054..7057 "std"
4657 LHS_EXPR@7021..70225076 SUFFIX_INDEX@7057..7066
4658 EXPR_VAR@7021..70225077 DOT@7057..7058 "."
4659 NAME@7021..70225078 NAME@7058..7066
4660 IDENT@7021..7022 "j"5079 IDENT@7058..7066 "isObject"
4661 WHITESPACE@7022..7023 " "5080 SUFFIX_APPLY@7066..7069
4662 GE@7023..7025 ">="5081 ARGS_DESC@7066..7069
4663 WHITESPACE@7025..7026 " "5082 L_PAREN@7066..7067 "("
4664 EXPR_APPLY@7026..70395083 ARG@7067..7068
4665 EXPR_INDEX@7026..70365084 EXPR@7067..7068
4666 EXPR_VAR@7026..70295085 EXPR_VAR@7067..7068
4667 NAME@7026..70295086 NAME@7067..7068
4668 IDENT@7026..7029 "std"5087 IDENT@7067..7068 "a"
4669 DOT@7029..7030 "."5088 R_PAREN@7068..7069 ")"
4670 NAME@7030..70365089 WHITESPACE@7069..7070 " "
4671 IDENT@7030..7036 "length"5090 THEN_KW@7070..7074 "then"
4672 ARGS_DESC@7036..70395091 WHITESPACE@7074..7075 " "
4673 L_PAREN@7036..7037 "("5092 TRUE_EXPR@7075..7178
4674 ARG@7037..70385093 EXPR@7075..7178
4675 EXPR_VAR@7037..70385094 EXPR_OBJECT@7075..7178
4676 NAME@7037..70385095 OBJ_BODY_COMP@7075..7178
4677 IDENT@7037..7038 "b"5096 L_BRACE@7075..7076 "{"
4678 R_PAREN@7038..7039 ")"5097 WHITESPACE@7076..7083 "\n "
4679 WHITESPACE@7039..7040 " "5098 MEMBER_FIELD_NORMAL@7083..7101
4680 THEN_KW@7040..7044 "then"5099 FIELD_NAME_DYNAMIC@7083..7086
4681 WHITESPACE@7044..7053 "\n "5100 L_BRACK@7083..7084 "["
4682 TRUE_EXPR@7053..70645101 EXPR@7084..7085
4683 EXPR_BINARY@7053..70645102 EXPR_VAR@7084..7085
4684 LHS_EXPR@7053..70565103 NAME@7084..7085
4685 EXPR_VAR@7053..70565104 IDENT@7084..7085 "x"
4686 NAME@7053..70565105 R_BRACK@7085..7086 "]"
4687 IDENT@7053..7056 "acc"5106 COLON@7086..7087 ":"
4688 WHITESPACE@7056..7057 " "5107 WHITESPACE@7087..7088 " "
4689 PLUS@7057..7058 "+"5108 EXPR@7088..7101
4690 WHITESPACE@7058..7059 " "5109 EXPR_LITERAL@7088..7089
4691 EXPR_SLICE@7059..70645110 DOLLAR@7088..7089 "$"
4692 EXPR_VAR@7059..70605111 SUFFIX_INDEX@7089..7095
4693 NAME@7059..70605112 DOT@7089..7090 "."
4694 IDENT@7059..7060 "a"5113 NAME@7090..7095
4695 SLICE_DESC@7060..70645114 IDENT@7090..7095 "prune"
4696 L_BRACK@7060..7061 "["5115 SUFFIX_APPLY@7095..7101
4697 EXPR_VAR@7061..70625116 ARGS_DESC@7095..7101
4698 NAME@7061..70625117 L_PAREN@7095..7096 "("
4699 IDENT@7061..7062 "i"5118 ARG@7096..7100
4700 COLON@7062..7063 ":"5119 EXPR@7096..7100
4701 R_BRACK@7063..7064 "]"5120 EXPR_VAR@7096..7097
4702 WHITESPACE@7064..7071 "\n "5121 NAME@7096..7097
4703 ELSE_KW@7071..7075 "else"5122 IDENT@7096..7097 "a"
4704 WHITESPACE@7075..7084 "\n "5123 SUFFIX_INDEX_EXPR@7097..7100
4705 FALSE_EXPR@7084..73255124 L_BRACK@7097..7098 "["
4706 EXPR_IF_THEN_ELSE@7084..73255125 EXPR@7098..7099
4707 IF_KW@7084..7086 "if"5126 EXPR_VAR@7098..7099
4708 WHITESPACE@7086..7087 " "5127 NAME@7098..7099
4709 EXPR_BINARY@7087..71115128 IDENT@7098..7099 "x"
4710 LHS_EXPR@7087..70975129 R_BRACK@7099..7100 "]"
4711 EXPR_APPLY@7087..70975130 R_PAREN@7100..7101 ")"
4712 EXPR_VAR@7087..70915131 WHITESPACE@7101..7108 "\n "
4713 NAME@7087..70915132 FOR_SPEC@7108..7136
4714 IDENT@7087..7091 "keyF"5133 FOR_KW@7108..7111 "for"
4715 ARGS_DESC@7091..70975134 WHITESPACE@7111..7112 " "
4716 L_PAREN@7091..7092 "("5135 DESTRUCT_FULL@7112..7113
4717 ARG@7092..70965136 NAME@7112..7113
4718 EXPR_INDEX_EXPR@7092..70965137 IDENT@7112..7113 "x"
4719 LHS_EXPR@7092..70935138 WHITESPACE@7113..7114 " "
4720 EXPR_VAR@7092..70935139 IN_KW@7114..7116 "in"
4721 NAME@7092..70935140 WHITESPACE@7116..7117 " "
4722 IDENT@7092..7093 "a"5141 EXPR@7117..7136
4723 L_BRACK@7093..7094 "["5142 EXPR_VAR@7117..7120
4724 EXPR_VAR@7094..70955143 NAME@7117..7120
4725 NAME@7094..70955144 IDENT@7117..7120 "std"
4726 IDENT@7094..7095 "i"5145 SUFFIX_INDEX@7120..7133
4727 R_BRACK@7095..7096 "]"5146 DOT@7120..7121 "."
4728 R_PAREN@7096..7097 ")"5147 NAME@7121..7133
4729 WHITESPACE@7097..7098 " "5148 IDENT@7121..7133 "objectFields"
4730 EQ@7098..7100 "=="5149 SUFFIX_APPLY@7133..7136
4731 WHITESPACE@7100..7101 " "5150 ARGS_DESC@7133..7136
4732 EXPR_APPLY@7101..71115151 L_PAREN@7133..7134 "("
4733 EXPR_VAR@7101..71055152 ARG@7134..7135
4734 NAME@7101..71055153 EXPR@7134..7135
4735 IDENT@7101..7105 "keyF"5154 EXPR_VAR@7134..7135
4736 ARGS_DESC@7105..71115155 NAME@7134..7135
4737 L_PAREN@7105..7106 "("5156 IDENT@7134..7135 "a"
4738 ARG@7106..71105157 R_PAREN@7135..7136 ")"
4739 EXPR_INDEX_EXPR@7106..71105158 WHITESPACE@7136..7143 "\n "
4740 LHS_EXPR@7106..71075159 IF_SPEC@7143..7172
4741 EXPR_VAR@7106..71075160 IF_KW@7143..7145 "if"
4742 NAME@7106..71075161 WHITESPACE@7145..7146 " "
4743 IDENT@7106..7107 "b"5162 EXPR@7146..7172
4744 L_BRACK@7107..7108 "["5163 EXPR_VAR@7146..7155
4745 EXPR_VAR@7108..71095164 NAME@7146..7155
4746 NAME@7108..71095165 IDENT@7146..7155 "isContent"
4747 IDENT@7108..7109 "j"5166 SUFFIX_APPLY@7155..7172
4748 R_BRACK@7109..7110 "]"5167 ARGS_DESC@7155..7172
4749 R_PAREN@7110..7111 ")"5168 L_PAREN@7155..7156 "("
4750 WHITESPACE@7111..7112 " "5169 ARG@7156..7171
4751 THEN_KW@7112..7116 "then"5170 EXPR@7156..7171
4752 WHITESPACE@7116..7127 "\n "5171 EXPR_VAR@7156..7159
4753 TRUE_EXPR@7127..71665172 NAME@7156..7159
4754 EXPR_APPLY@7127..71665173 IDENT@7156..7159 "std"
4755 EXPR_VAR@7127..71305174 SUFFIX_INDEX@7159..7165
4756 NAME@7127..71305175 DOT@7159..7160 "."
4757 IDENT@7127..7130 "aux"5176 NAME@7160..7165
4758 ARGS_DESC@7130..71665177 IDENT@7160..7165 "prune"
4759 L_PAREN@7130..7131 "("5178 SUFFIX_APPLY@7165..7171
4760 ARG@7131..71325179 ARGS_DESC@7165..7171
4761 EXPR_VAR@7131..71325180 L_PAREN@7165..7166 "("
4762 NAME@7131..71325181 ARG@7166..7170
4763 IDENT@7131..7132 "a"5182 EXPR@7166..7170
4764 COMMA@7132..7133 ","5183 EXPR_VAR@7166..7167
4765 WHITESPACE@7133..7134 " "5184 NAME@7166..7167
4766 ARG@7134..71355185 IDENT@7166..7167 "a"
4767 EXPR_VAR@7134..71355186 SUFFIX_INDEX_EXPR@7167..7170
4768 NAME@7134..71355187 L_BRACK@7167..7168 "["
4769 IDENT@7134..7135 "b"5188 EXPR@7168..7169
4770 COMMA@7135..7136 ","5189 EXPR_VAR@7168..7169
4771 WHITESPACE@7136..7137 " "5190 NAME@7168..7169
4772 ARG@7137..71425191 IDENT@7168..7169 "x"
4773 EXPR_BINARY@7137..71425192 R_BRACK@7169..7170 "]"
4774 LHS_EXPR@7137..71385193 R_PAREN@7170..7171 ")"
4775 EXPR_VAR@7137..71385194 R_PAREN@7171..7172 ")"
4776 NAME@7137..71385195 WHITESPACE@7172..7177 "\n "
4777 IDENT@7137..7138 "i"5196 R_BRACE@7177..7178 "}"
4778 WHITESPACE@7138..7139 " "5197 WHITESPACE@7178..7179 " "
4779 PLUS@7139..7140 "+"5198 ELSE_KW@7179..7183 "else"
4780 WHITESPACE@7140..7141 " "5199 WHITESPACE@7183..7190 "\n "
4781 EXPR_NUMBER@7141..71425200 FALSE_EXPR@7190..7191
4782 FLOAT@7141..7142 "1"5201 EXPR@7190..7191
4783 COMMA@7142..7143 ","5202 EXPR_VAR@7190..7191
4784 WHITESPACE@7143..7144 " "5203 NAME@7190..7191
4785 ARG@7144..71495204 IDENT@7190..7191 "a"
4786 EXPR_BINARY@7144..71495205 COMMA@7191..7192 ","
4787 LHS_EXPR@7144..71455206 WHITESPACE@7192..7196 "\n\n "
4788 EXPR_VAR@7144..71455207 MEMBER_FIELD_METHOD@7196..7411
4789 NAME@7144..71455208 FIELD_NAME_FIXED@7196..7200
4790 IDENT@7144..7145 "j"5209 NAME@7196..7200
4791 WHITESPACE@7145..7146 " "5210 IDENT@7196..7200 "find"
4792 PLUS@7146..7147 "+"5211 PARAMS_DESC@7200..7212
4793 WHITESPACE@7147..7148 " "5212 L_PAREN@7200..7201 "("
4794 EXPR_NUMBER@7148..71495213 PARAM@7201..7206
4795 FLOAT@7148..7149 "1"5214 DESTRUCT_FULL@7201..7206
4796 COMMA@7149..7150 ","5215 NAME@7201..7206
4797 WHITESPACE@7150..7151 " "5216 IDENT@7201..7206 "value"
4798 ARG@7151..71545217 COMMA@7206..7207 ","
4799 EXPR_VAR@7151..71545218 WHITESPACE@7207..7208 " "
4800 NAME@7151..71545219 PARAM@7208..7211
4801 IDENT@7151..7154 "acc"5220 DESTRUCT_FULL@7208..7211
4802 R_PAREN@7154..7155 ")"5221 NAME@7208..7211
4803 WHITESPACE@7155..7156 " "5222 IDENT@7208..7211 "arr"
4804 TAILSTRICT_KW@7156..7166 "tailstrict"5223 R_PAREN@7211..7212 ")"
4805 WHITESPACE@7166..7175 "\n "5224 COLONCOLON@7212..7214 "::"
4806 ELSE_KW@7175..7179 "else"5225 WHITESPACE@7214..7219 "\n "
4807 WHITESPACE@7179..7180 " "5226 EXPR@7219..7411
4808 FALSE_EXPR@7180..73255227 EXPR_IF_THEN_ELSE@7219..7411
4809 EXPR_IF_THEN_ELSE@7180..73255228 IF_KW@7219..7221 "if"
4810 IF_KW@7180..7182 "if"5229 WHITESPACE@7221..7222 " "
4811 WHITESPACE@7182..7183 " "5230 EXPR@7222..7239
4812 EXPR_BINARY@7183..72065231 EXPR_UNARY@7222..7239
4813 LHS_EXPR@7183..71935232 NOT@7222..7223 "!"
4814 EXPR_APPLY@7183..71935233 EXPR_VAR@7223..7226
4815 EXPR_VAR@7183..71875234 NAME@7223..7226
4816 NAME@7183..71875235 IDENT@7223..7226 "std"
4817 IDENT@7183..7187 "keyF"5236 SUFFIX_INDEX@7226..7234
4818 ARGS_DESC@7187..71935237 DOT@7226..7227 "."
4819 L_PAREN@7187..7188 "("5238 NAME@7227..7234
4820 ARG@7188..71925239 IDENT@7227..7234 "isArray"
4821 EXPR_INDEX_EXPR@7188..71925240 SUFFIX_APPLY@7234..7239
4822 LHS_EXPR@7188..71895241 ARGS_DESC@7234..7239
4823 EXPR_VAR@7188..71895242 L_PAREN@7234..7235 "("
4824 NAME@7188..71895243 ARG@7235..7238
4825 IDENT@7188..7189 "a"5244 EXPR@7235..7238
4826 L_BRACK@7189..7190 "["5245 EXPR_VAR@7235..7238
4827 EXPR_VAR@7190..71915246 NAME@7235..7238
4828 NAME@7190..71915247 IDENT@7235..7238 "arr"
4829 IDENT@7190..7191 "i"5248 R_PAREN@7238..7239 ")"
4830 R_BRACK@7191..7192 "]"5249 WHITESPACE@7239..7240 " "
4831 R_PAREN@7192..7193 ")"5250 THEN_KW@7240..7244 "then"
4832 WHITESPACE@7193..7194 " "5251 WHITESPACE@7244..7251 "\n "
4833 LT@7194..7195 "<"5252 TRUE_EXPR@7251..7321
4834 WHITESPACE@7195..7196 " "5253 EXPR@7251..7321
4835 EXPR_APPLY@7196..72065254 EXPR_ERROR@7251..7321
4836 EXPR_VAR@7196..72005255 ERROR_KW@7251..7256 "error"
4837 NAME@7196..72005256 WHITESPACE@7256..7257 " "
4838 IDENT@7196..7200 "keyF"5257 EXPR@7257..7321
4839 ARGS_DESC@7200..72065258 EXPR_BINARY@7257..7321
4840 L_PAREN@7200..7201 "("5259 EXPR@7257..7305
4841 ARG@7201..72055260 EXPR_STRING@7257..7305
4842 EXPR_INDEX_EXPR@7201..72055261 STRING_SINGLE@7257..7305 "'find second paramete ..."
4843 LHS_EXPR@7201..72025262 WHITESPACE@7305..7306 " "
4844 EXPR_VAR@7201..72025263 PLUS@7306..7307 "+"
4845 NAME@7201..72025264 WHITESPACE@7307..7308 " "
4846 IDENT@7201..7202 "b"5265 EXPR@7308..7321
4847 L_BRACK@7202..7203 "["5266 EXPR_VAR@7308..7311
4848 EXPR_VAR@7203..72045267 NAME@7308..7311
4849 NAME@7203..72045268 IDENT@7308..7311 "std"
4850 IDENT@7203..7204 "j"5269 SUFFIX_INDEX@7311..7316
4851 R_BRACK@7204..7205 "]"5270 DOT@7311..7312 "."
4852 R_PAREN@7205..7206 ")"5271 NAME@7312..7316
4853 WHITESPACE@7206..7207 " "5272 IDENT@7312..7316 "type"
4854 THEN_KW@7207..7211 "then"5273 SUFFIX_APPLY@7316..7321
4855 WHITESPACE@7211..7222 "\n "5274 ARGS_DESC@7316..7321
4856 TRUE_EXPR@7222..72665275 L_PAREN@7316..7317 "("
4857 EXPR_APPLY@7222..72665276 ARG@7317..7320
4858 EXPR_VAR@7222..72255277 EXPR@7317..7320
4859 NAME@7222..72255278 EXPR_VAR@7317..7320
4860 IDENT@7222..7225 "aux"5279 NAME@7317..7320
4861 ARGS_DESC@7225..72665280 IDENT@7317..7320 "arr"
4862 L_PAREN@7225..7226 "("5281 R_PAREN@7320..7321 ")"
4863 ARG@7226..72275282 WHITESPACE@7321..7326 "\n "
4864 EXPR_VAR@7226..72275283 ELSE_KW@7326..7330 "else"
4865 NAME@7226..72275284 WHITESPACE@7330..7337 "\n "
4866 IDENT@7226..7227 "a"5285 FALSE_EXPR@7337..7411
4867 COMMA@7227..7228 ","5286 EXPR@7337..7411
4868 WHITESPACE@7228..7229 " "5287 EXPR_VAR@7337..7340
4869 ARG@7229..72305288 NAME@7337..7340
4870 EXPR_VAR@7229..72305289 IDENT@7337..7340 "std"
4871 NAME@7229..72305290 SUFFIX_INDEX@7340..7347
4872 IDENT@7229..7230 "b"5291 DOT@7340..7341 "."
4873 COMMA@7230..7231 ","5292 NAME@7341..7347
4874 WHITESPACE@7231..7232 " "5293 IDENT@7341..7347 "filter"
4875 ARG@7232..72375294 SUFFIX_APPLY@7347..7411
4876 EXPR_BINARY@7232..72375295 ARGS_DESC@7347..7411
4877 LHS_EXPR@7232..72335296 L_PAREN@7347..7348 "("
4878 EXPR_VAR@7232..72335297 ARG@7348..7375
4879 NAME@7232..72335298 EXPR@7348..7375
4880 IDENT@7232..7233 "i"5299 EXPR_FUNCTION@7348..7375
4881 WHITESPACE@7233..7234 " "5300 FUNCTION_KW@7348..7356 "function"
4882 PLUS@7234..7235 "+"5301 PARAMS_DESC@7356..7359
4883 WHITESPACE@7235..7236 " "5302 L_PAREN@7356..7357 "("
4884 EXPR_NUMBER@7236..72375303 PARAM@7357..7358
4885 FLOAT@7236..7237 "1"5304 DESTRUCT_FULL@7357..7358
4886 COMMA@7237..7238 ","5305 NAME@7357..7358
4887 WHITESPACE@7238..7239 " "5306 IDENT@7357..7358 "i"
4888 ARG@7239..72405307 R_PAREN@7358..7359 ")"
4889 EXPR_VAR@7239..72405308 WHITESPACE@7359..7360 " "
4890 NAME@7239..72405309 EXPR@7360..7375
4891 IDENT@7239..7240 "j"5310 EXPR_BINARY@7360..7375
4892 COMMA@7240..7241 ","5311 EXPR@7360..7363
4893 WHITESPACE@7241..7242 " "5312 EXPR_VAR@7360..7363
4894 ARG@7242..72545313 NAME@7360..7363
4895 EXPR_BINARY@7242..72545314 IDENT@7360..7363 "arr"
4896 LHS_EXPR@7242..72455315 SUFFIX_INDEX_EXPR@7363..7366
4897 EXPR_VAR@7242..72455316 L_BRACK@7363..7364 "["
4898 NAME@7242..72455317 EXPR@7364..7365
4899 IDENT@7242..7245 "acc"5318 EXPR_VAR@7364..7365
4900 WHITESPACE@7245..7246 " "5319 NAME@7364..7365
4901 PLUS@7246..7247 "+"5320 IDENT@7364..7365 "i"
4902 WHITESPACE@7247..7248 " "5321 R_BRACK@7365..7366 "]"
4903 EXPR_ARRAY@7248..72545322 WHITESPACE@7366..7367 " "
4904 L_BRACK@7248..7249 "["5323 EQ@7367..7369 "=="
4905 EXPR_INDEX_EXPR@7249..72535324 WHITESPACE@7369..7370 " "
4906 LHS_EXPR@7249..72505325 EXPR@7370..7375
4907 EXPR_VAR@7249..72505326 EXPR_VAR@7370..7375
4908 NAME@7249..72505327 NAME@7370..7375
4909 IDENT@7249..7250 "a"5328 IDENT@7370..7375 "value"
4910 L_BRACK@7250..7251 "["5329 COMMA@7375..7376 ","
4911 EXPR_VAR@7251..72525330 WHITESPACE@7376..7377 " "
4912 NAME@7251..72525331 ARG@7377..7410
4913 IDENT@7251..7252 "i"5332 EXPR@7377..7410
4914 R_BRACK@7252..7253 "]"5333 EXPR_VAR@7377..7380
4915 R_BRACK@7253..7254 "]"5334 NAME@7377..7380
4916 R_PAREN@7254..7255 ")"5335 IDENT@7377..7380 "std"
4917 WHITESPACE@7255..7256 " "5336 SUFFIX_INDEX@7380..7386
4918 TAILSTRICT_KW@7256..7266 "tailstrict"5337 DOT@7380..7381 "."
4919 WHITESPACE@7266..7275 "\n "5338 NAME@7381..7386
4920 ELSE_KW@7275..7279 "else"5339 IDENT@7381..7386 "range"
4921 WHITESPACE@7279..7290 "\n "5340 SUFFIX_APPLY@7386..7410
4922 FALSE_EXPR@7290..73255341 ARGS_DESC@7386..7410
4923 EXPR_APPLY@7290..73255342 L_PAREN@7386..7387 "("
4924 EXPR_VAR@7290..72935343 ARG@7387..7388
4925 NAME@7290..72935344 EXPR@7387..7388
4926 IDENT@7290..7293 "aux"5345 EXPR_NUMBER@7387..7388
4927 ARGS_DESC@7293..73255346 FLOAT@7387..7388 "0"
4928 L_PAREN@7293..7294 "("5347 COMMA@7388..7389 ","
4929 ARG@7294..72955348 WHITESPACE@7389..7390 " "
4930 EXPR_VAR@7294..72955349 ARG@7390..7409
4931 NAME@7294..72955350 EXPR@7390..7409
4932 IDENT@7294..7295 "a"5351 EXPR_BINARY@7390..7409
4933 COMMA@7295..7296 ","5352 EXPR@7390..7393
4934 WHITESPACE@7296..7297 " "5353 EXPR_VAR@7390..7393
4935 ARG@7297..72985354 NAME@7390..7393
4936 EXPR_VAR@7297..72985355 IDENT@7390..7393 "std"
4937 NAME@7297..72985356 SUFFIX_INDEX@7393..7400
4938 IDENT@7297..7298 "b"5357 DOT@7393..7394 "."
4939 COMMA@7298..7299 ","5358 NAME@7394..7400
4940 WHITESPACE@7299..7300 " "5359 IDENT@7394..7400 "length"
4941 ARG@7300..73015360 SUFFIX_APPLY@7400..7405
4942 EXPR_VAR@7300..73015361 ARGS_DESC@7400..7405
4943 NAME@7300..73015362 L_PAREN@7400..7401 "("
4944 IDENT@7300..7301 "i"5363 ARG@7401..7404
4945 COMMA@7301..7302 ","5364 EXPR@7401..7404
4946 WHITESPACE@7302..7303 " "5365 EXPR_VAR@7401..7404
4947 ARG@7303..73085366 NAME@7401..7404
4948 EXPR_BINARY@7303..73085367 IDENT@7401..7404 "arr"
4949 LHS_EXPR@7303..73045368 R_PAREN@7404..7405 ")"
4950 EXPR_VAR@7303..73045369 WHITESPACE@7405..7406 " "
4951 NAME@7303..73045370 MINUS@7406..7407 "-"
4952 IDENT@7303..7304 "j"5371 WHITESPACE@7407..7408 " "
4953 WHITESPACE@7304..7305 " "5372 EXPR@7408..7409
4954 PLUS@7305..7306 "+"5373 EXPR_NUMBER@7408..7409
4955 WHITESPACE@7306..7307 " "5374 FLOAT@7408..7409 "1"
4956 EXPR_NUMBER@7307..73085375 R_PAREN@7409..7410 ")"
4957 FLOAT@7307..7308 "1"5376 R_PAREN@7410..7411 ")"
4958 COMMA@7308..7309 ","5377 COMMA@7411..7412 ","
4959 WHITESPACE@7309..7310 " "5378 WHITESPACE@7412..7416 "\n\n "
4960 ARG@7310..73135379 SINGLE_LINE_SLASH_COMMENT@7416..7426 "// Compat\n"
4961 EXPR_VAR@7310..73135380 WHITESPACE@7426..7428 " "
4962 NAME@7310..73135381 MEMBER_FIELD_METHOD@7428..7538
4963 IDENT@7310..7313 "acc"5382 FIELD_NAME_FIXED@7428..7443
4964 R_PAREN@7313..7314 ")"5383 NAME@7428..7443
4965 WHITESPACE@7314..7315 " "5384 IDENT@7428..7443 "__compare_array"
4966 TAILSTRICT_KW@7315..7325 "tailstrict"5385 PARAMS_DESC@7443..7455
4967 SEMI@7325..7326 ";"5386 L_PAREN@7443..7444 "("
4968 WHITESPACE@7326..7331 "\n "5387 PARAM@7444..7448
4969 EXPR_APPLY@7331..73615388 DESTRUCT_FULL@7444..7448
4970 EXPR_VAR@7331..73345389 NAME@7444..7448
4971 NAME@7331..73345390 IDENT@7444..7448 "arr1"
4972 IDENT@7331..7334 "aux"5391 COMMA@7448..7449 ","
4973 ARGS_DESC@7334..73615392 WHITESPACE@7449..7450 " "
4974 L_PAREN@7334..7335 "("5393 PARAM@7450..7454
4975 ARG@7335..73365394 DESTRUCT_FULL@7450..7454
4976 EXPR_VAR@7335..73365395 NAME@7450..7454
4977 NAME@7335..73365396 IDENT@7450..7454 "arr2"
4978 IDENT@7335..7336 "a"5397 R_PAREN@7454..7455 ")"
4979 COMMA@7336..7337 ","5398 COLONCOLON@7455..7457 "::"
4980 WHITESPACE@7337..7338 " "5399 WHITESPACE@7457..7462 "\n "
4981 ARG@7338..73395400 EXPR@7462..7538
4982 EXPR_VAR@7338..73395401 STMT_ASSERT@7462..7508
4983 NAME@7338..73395402 ASSERTION@7462..7507
4984 IDENT@7338..7339 "b"5403 ASSERT_KW@7462..7468 "assert"
4985 COMMA@7339..7340 ","5404 WHITESPACE@7468..7469 " "
4986 WHITESPACE@7340..7341 " "5405 EXPR@7469..7507
4987 ARG@7341..73425406 EXPR_BINARY@7469..7507
4988 EXPR_NUMBER@7341..73425407 EXPR@7469..7472
4989 FLOAT@7341..7342 "0"5408 EXPR_VAR@7469..7472
4990 COMMA@7342..7343 ","5409 NAME@7469..7472
4991 WHITESPACE@7343..7344 " "5410 IDENT@7469..7472 "std"
4992 ARG@7344..73455411 SUFFIX_INDEX@7472..7480
4993 EXPR_NUMBER@7344..73455412 DOT@7472..7473 "."
4994 FLOAT@7344..7345 "0"5413 NAME@7473..7480
4995 COMMA@7345..7346 ","5414 IDENT@7473..7480 "isArray"
4996 WHITESPACE@7346..7347 " "5415 SUFFIX_APPLY@7480..7486
4997 ARG@7347..73495416 ARGS_DESC@7480..7486
4998 EXPR_ARRAY@7347..73495417 L_PAREN@7480..7481 "("
4999 L_BRACK@7347..7348 "["5418 ARG@7481..7485
5000 R_BRACK@7348..7349 "]"5419 EXPR@7481..7485
5001 R_PAREN@7349..7350 ")"5420 EXPR_VAR@7481..7485
5002 WHITESPACE@7350..7351 " "5421 NAME@7481..7485
5003 TAILSTRICT_KW@7351..7361 "tailstrict"5422 IDENT@7481..7485 "arr1"
5004 COMMA@7361..7362 ","5423 R_PAREN@7485..7486 ")"
5005 WHITESPACE@7362..7366 "\n\n "5424 WHITESPACE@7486..7487 " "
5006 MEMBER_FIELD_METHOD@7366..81545425 AND@7487..7489 "&&"
5007 FIELD_NAME_FIXED@7366..73765426 WHITESPACE@7489..7490 " "
5008 NAME@7366..73765427 EXPR@7490..7507
5009 IDENT@7366..7376 "mergePatch"5428 EXPR_VAR@7490..7493
5010 PARAMS_DESC@7376..73915429 NAME@7490..7493
5011 L_PAREN@7376..7377 "("5430 IDENT@7490..7493 "std"
5012 PARAM@7377..73835431 SUFFIX_INDEX@7493..7501
5013 DESTRUCT_FULL@7377..73835432 DOT@7493..7494 "."
5014 NAME@7377..73835433 NAME@7494..7501
5015 IDENT@7377..7383 "target"5434 IDENT@7494..7501 "isArray"
5016 COMMA@7383..7384 ","5435 SUFFIX_APPLY@7501..7507
5017 WHITESPACE@7384..7385 " "5436 ARGS_DESC@7501..7507
5018 PARAM@7385..73905437 L_PAREN@7501..7502 "("
5019 DESTRUCT_FULL@7385..73905438 ARG@7502..7506
5020 NAME@7385..73905439 EXPR@7502..7506
5021 IDENT@7385..7390 "patch"5440 EXPR_VAR@7502..7506
5022 R_PAREN@7390..7391 ")"5441 NAME@7502..7506
5023 COLONCOLON@7391..7393 "::"5442 IDENT@7502..7506 "arr2"
5024 WHITESPACE@7393..7398 "\n "5443 R_PAREN@7506..7507 ")"
5025 EXPR_IF_THEN_ELSE@7398..81545444 SEMI@7507..7508 ";"
5026 IF_KW@7398..7400 "if"5445 WHITESPACE@7508..7513 "\n "
5027 WHITESPACE@7400..7401 " "5446 EXPR_VAR@7513..7516
5028 EXPR_APPLY@7401..74205447 NAME@7513..7516
5029 EXPR_INDEX@7401..74135448 IDENT@7513..7516 "std"
5030 EXPR_VAR@7401..74045449 SUFFIX_INDEX@7516..7526
5031 NAME@7401..74045450 DOT@7516..7517 "."
5032 IDENT@7401..7404 "std"5451 NAME@7517..7526
5033 DOT@7404..7405 "."5452 IDENT@7517..7526 "__compare"
5034 NAME@7405..74135453 SUFFIX_APPLY@7526..7538
5035 IDENT@7405..7413 "isObject"5454 ARGS_DESC@7526..7538
5036 ARGS_DESC@7413..74205455 L_PAREN@7526..7527 "("
5037 L_PAREN@7413..7414 "("5456 ARG@7527..7531
5038 ARG@7414..74195457 EXPR@7527..7531
5039 EXPR_VAR@7414..74195458 EXPR_VAR@7527..7531
5040 NAME@7414..74195459 NAME@7527..7531
5041 IDENT@7414..7419 "patch"5460 IDENT@7527..7531 "arr1"
5042 R_PAREN@7419..7420 ")"5461 COMMA@7531..7532 ","
5043 WHITESPACE@7420..7421 " "5462 WHITESPACE@7532..7533 " "
5044 THEN_KW@7421..7425 "then"5463 ARG@7533..7537
5045 WHITESPACE@7425..7432 "\n "5464 EXPR@7533..7537
5046 STMT_LOCAL@7432..75065465 EXPR_VAR@7533..7537
5047 LOCAL_KW@7432..7437 "local"5466 NAME@7533..7537
5048 WHITESPACE@7437..7438 " "5467 IDENT@7533..7537 "arr2"
5049 BIND_DESTRUCT@7438..75055468 R_PAREN@7537..7538 ")"
5050 DESTRUCT_FULL@7438..74515469 COMMA@7538..7539 ","
5051 NAME@7438..74515470 WHITESPACE@7539..7542 "\n "
5052 IDENT@7438..7451 "target_object"5471 MEMBER_FIELD_METHOD@7542..7606
5053 WHITESPACE@7451..7452 " "5472 FIELD_NAME_FIXED@7542..7554
5054 ASSIGN@7452..7453 "="5473 NAME@7542..7554
5055 WHITESPACE@7453..7462 "\n "5474 IDENT@7542..7554 "__array_less"
5056 EXPR_IF_THEN_ELSE@7462..75055475 PARAMS_DESC@7554..7566
5057 IF_KW@7462..7464 "if"5476 L_PAREN@7554..7555 "("
5058 WHITESPACE@7464..7465 " "5477 PARAM@7555..7559
5059 EXPR_APPLY@7465..74855478 DESTRUCT_FULL@7555..7559
5060 EXPR_INDEX@7465..74775479 NAME@7555..7559
5061 EXPR_VAR@7465..74685480 IDENT@7555..7559 "arr1"
5062 NAME@7465..74685481 COMMA@7559..7560 ","
5063 IDENT@7465..7468 "std"5482 WHITESPACE@7560..7561 " "
5064 DOT@7468..7469 "."5483 PARAM@7561..7565
5065 NAME@7469..74775484 DESTRUCT_FULL@7561..7565
5066 IDENT@7469..7477 "isObject"5485 NAME@7561..7565
5067 ARGS_DESC@7477..74855486 IDENT@7561..7565 "arr2"
5068 L_PAREN@7477..7478 "("5487 R_PAREN@7565..7566 ")"
5069 ARG@7478..74845488 COLONCOLON@7566..7568 "::"
5070 EXPR_VAR@7478..74845489 WHITESPACE@7568..7569 " "
5071 NAME@7478..74845490 EXPR@7569..7606
5072 IDENT@7478..7484 "target"5491 EXPR_BINARY@7569..7606
5073 R_PAREN@7484..7485 ")"5492 EXPR@7569..7572
5074 WHITESPACE@7485..7486 " "5493 EXPR_VAR@7569..7572
5075 THEN_KW@7486..7490 "then"5494 NAME@7569..7572
5076 WHITESPACE@7490..7491 " "5495 IDENT@7569..7572 "std"
5077 TRUE_EXPR@7491..74975496 SUFFIX_INDEX@7572..7588
5078 EXPR_VAR@7491..74975497 DOT@7572..7573 "."
5079 NAME@7491..74975498 NAME@7573..7588
5080 IDENT@7491..7497 "target"5499 IDENT@7573..7588 "__compare_array"
5081 WHITESPACE@7497..7498 " "5500 SUFFIX_APPLY@7588..7600
5082 ELSE_KW@7498..7502 "else"5501 ARGS_DESC@7588..7600
5083 WHITESPACE@7502..7503 " "5502 L_PAREN@7588..7589 "("
5084 FALSE_EXPR@7503..75055503 ARG@7589..7593
5085 EXPR_OBJECT@7503..75055504 EXPR@7589..7593
5086 OBJ_BODY_MEMBER_LIST@7503..75055505 EXPR_VAR@7589..7593
5087 L_BRACE@7503..7504 "{"5506 NAME@7589..7593
5088 R_BRACE@7504..7505 "}"5507 IDENT@7589..7593 "arr1"
5089 SEMI@7505..7506 ";"5508 COMMA@7593..7594 ","
5090 WHITESPACE@7506..7514 "\n\n "5509 WHITESPACE@7594..7595 " "
5091 STMT_LOCAL@7514..76205510 ARG@7595..7599
5092 LOCAL_KW@7514..7519 "local"5511 EXPR@7595..7599
5093 WHITESPACE@7519..7520 " "5512 EXPR_VAR@7595..7599
5094 BIND_DESTRUCT@7520..76195513 NAME@7595..7599
5095 DESTRUCT_FULL@7520..75335514 IDENT@7595..7599 "arr2"
5096 NAME@7520..75335515 R_PAREN@7599..7600 ")"
5097 IDENT@7520..7533 "target_fields"5516 WHITESPACE@7600..7601 " "
5098 WHITESPACE@7533..7534 " "5517 EQ@7601..7603 "=="
5099 ASSIGN@7534..7535 "="5518 WHITESPACE@7603..7604 " "
5100 WHITESPACE@7535..7544 "\n "5519 EXPR@7604..7606
5101 EXPR_IF_THEN_ELSE@7544..76195520 EXPR_UNARY@7604..7606
5102 IF_KW@7544..7546 "if"5521 MINUS@7604..7605 "-"
5103 WHITESPACE@7546..7547 " "5522 EXPR_NUMBER@7605..7606
5104 EXPR_APPLY@7547..75745523 FLOAT@7605..7606 "1"
5105 EXPR_INDEX@7547..75595524 COMMA@7606..7607 ","
5106 EXPR_VAR@7547..75505525 WHITESPACE@7607..7610 "\n "
5107 NAME@7547..75505526 MEMBER_FIELD_METHOD@7610..7676
5108 IDENT@7547..7550 "std"5527 FIELD_NAME_FIXED@7610..7625
5109 DOT@7550..7551 "."5528 NAME@7610..7625
5110 NAME@7551..75595529 IDENT@7610..7625 "__array_greater"
5111 IDENT@7551..7559 "isObject"5530 PARAMS_DESC@7625..7637
5112 ARGS_DESC@7559..75745531 L_PAREN@7625..7626 "("
5113 L_PAREN@7559..7560 "("5532 PARAM@7626..7630
5114 ARG@7560..75735533 DESTRUCT_FULL@7626..7630
5115 EXPR_VAR@7560..75735534 NAME@7626..7630
5116 NAME@7560..75735535 IDENT@7626..7630 "arr1"
5117 IDENT@7560..7573 "target_object"5536 COMMA@7630..7631 ","
5118 R_PAREN@7573..7574 ")"5537 WHITESPACE@7631..7632 " "
5119 WHITESPACE@7574..7575 " "5538 PARAM@7632..7636
5120 THEN_KW@7575..7579 "then"5539 DESTRUCT_FULL@7632..7636
5121 WHITESPACE@7579..7580 " "5540 NAME@7632..7636
5122 TRUE_EXPR@7580..76115541 IDENT@7632..7636 "arr2"
5123 EXPR_APPLY@7580..76115542 R_PAREN@7636..7637 ")"
5124 EXPR_INDEX@7580..75965543 COLONCOLON@7637..7639 "::"
5125 EXPR_VAR@7580..75835544 WHITESPACE@7639..7640 " "
5126 NAME@7580..75835545 EXPR@7640..7676
5127 IDENT@7580..7583 "std"5546 EXPR_BINARY@7640..7676
5128 DOT@7583..7584 "."5547 EXPR@7640..7643
5129 NAME@7584..75965548 EXPR_VAR@7640..7643
5130 IDENT@7584..7596 "objectFields"5549 NAME@7640..7643
5131 ARGS_DESC@7596..76115550 IDENT@7640..7643 "std"
5132 L_PAREN@7596..7597 "("5551 SUFFIX_INDEX@7643..7659
5133 ARG@7597..76105552 DOT@7643..7644 "."
5134 EXPR_VAR@7597..76105553 NAME@7644..7659
5135 NAME@7597..76105554 IDENT@7644..7659 "__compare_array"
5136 IDENT@7597..7610 "target_object"5555 SUFFIX_APPLY@7659..7671
5137 R_PAREN@7610..7611 ")"5556 ARGS_DESC@7659..7671
5138 WHITESPACE@7611..7612 " "5557 L_PAREN@7659..7660 "("
5139 ELSE_KW@7612..7616 "else"5558 ARG@7660..7664
5140 WHITESPACE@7616..7617 " "5559 EXPR@7660..7664
5141 FALSE_EXPR@7617..76195560 EXPR_VAR@7660..7664
5142 EXPR_ARRAY@7617..76195561 NAME@7660..7664
5143 L_BRACK@7617..7618 "["5562 IDENT@7660..7664 "arr1"
5144 R_BRACK@7618..7619 "]"5563 COMMA@7664..7665 ","
5145 SEMI@7619..7620 ";"5564 WHITESPACE@7665..7666 " "
5146 WHITESPACE@7620..7628 "\n\n "5565 ARG@7666..7670
5147 STMT_LOCAL@7628..77055566 EXPR@7666..7670
5148 LOCAL_KW@7628..7633 "local"5567 EXPR_VAR@7666..7670
5149 WHITESPACE@7633..7634 " "5568 NAME@7666..7670
5150 BIND_DESTRUCT@7634..77045569 IDENT@7666..7670 "arr2"
5151 DESTRUCT_FULL@7634..76455570 R_PAREN@7670..7671 ")"
5152 NAME@7634..76455571 WHITESPACE@7671..7672 " "
5153 IDENT@7634..7645 "null_fields"5572 EQ@7672..7674 "=="
5154 WHITESPACE@7645..7646 " "5573 WHITESPACE@7674..7675 " "
5155 ASSIGN@7646..7647 "="5574 EXPR@7675..7676
5156 WHITESPACE@7647..7648 " "5575 EXPR_NUMBER@7675..7676
5157 EXPR_ARRAY_COMP@7648..77045576 FLOAT@7675..7676 "1"
5158 L_BRACK@7648..7649 "["5577 COMMA@7676..7677 ","
5159 EXPR_VAR@7649..76505578 WHITESPACE@7677..7680 "\n "
5160 NAME@7649..76505579 MEMBER_FIELD_METHOD@7680..7752
5161 IDENT@7649..7650 "k"5580 FIELD_NAME_FIXED@7680..7701
5162 WHITESPACE@7650..7651 " "5581 NAME@7680..7701
5163 FOR_SPEC@7651..76835582 IDENT@7680..7701 "__array_less_or_equal"
5164 FOR_KW@7651..7654 "for"5583 PARAMS_DESC@7701..7713
5165 WHITESPACE@7654..7655 " "5584 L_PAREN@7701..7702 "("
5166 NAME@7655..76565585 PARAM@7702..7706
5167 IDENT@7655..7656 "k"5586 DESTRUCT_FULL@7702..7706
5168 WHITESPACE@7656..7657 " "5587 NAME@7702..7706
5169 IN_KW@7657..7659 "in"5588 IDENT@7702..7706 "arr1"
5170 WHITESPACE@7659..7660 " "5589 COMMA@7706..7707 ","
5171 EXPR_APPLY@7660..76835590 WHITESPACE@7707..7708 " "
5172 EXPR_INDEX@7660..76765591 PARAM@7708..7712
5173 EXPR_VAR@7660..76635592 DESTRUCT_FULL@7708..7712
5174 NAME@7660..76635593 NAME@7708..7712
5175 IDENT@7660..7663 "std"5594 IDENT@7708..7712 "arr2"
5176 DOT@7663..7664 "."5595 R_PAREN@7712..7713 ")"
5177 NAME@7664..76765596 COLONCOLON@7713..7715 "::"
5178 IDENT@7664..7676 "objectFields"5597 WHITESPACE@7715..7716 " "
5179 ARGS_DESC@7676..76835598 EXPR@7716..7752
5180 L_PAREN@7676..7677 "("5599 EXPR_BINARY@7716..7752
5181 ARG@7677..76825600 EXPR@7716..7719
5182 EXPR_VAR@7677..76825601 EXPR_VAR@7716..7719
5183 NAME@7677..76825602 NAME@7716..7719
5184 IDENT@7677..7682 "patch"5603 IDENT@7716..7719 "std"
5185 R_PAREN@7682..7683 ")"5604 SUFFIX_INDEX@7719..7735
5186 WHITESPACE@7683..7684 " "5605 DOT@7719..7720 "."
5187 IF_SPEC@7684..77035606 NAME@7720..7735
5188 IF_KW@7684..7686 "if"5607 IDENT@7720..7735 "__compare_array"
5189 WHITESPACE@7686..7687 " "5608 SUFFIX_APPLY@7735..7747
5190 EXPR_BINARY@7687..77035609 ARGS_DESC@7735..7747
5191 LHS_EXPR@7687..76955610 L_PAREN@7735..7736 "("
5192 EXPR_INDEX_EXPR@7687..76955611 ARG@7736..7740
5193 LHS_EXPR@7687..76925612 EXPR@7736..7740
5194 EXPR_VAR@7687..76925613 EXPR_VAR@7736..7740
5195 NAME@7687..76925614 NAME@7736..7740
5196 IDENT@7687..7692 "patch"5615 IDENT@7736..7740 "arr1"
5197 L_BRACK@7692..7693 "["5616 COMMA@7740..7741 ","
5198 EXPR_VAR@7693..76945617 WHITESPACE@7741..7742 " "
5199 NAME@7693..76945618 ARG@7742..7746
5200 IDENT@7693..7694 "k"5619 EXPR@7742..7746
5201 R_BRACK@7694..7695 "]"5620 EXPR_VAR@7742..7746
5202 WHITESPACE@7695..7696 " "5621 NAME@7742..7746
5203 EQ@7696..7698 "=="5622 IDENT@7742..7746 "arr2"
5204 WHITESPACE@7698..7699 " "5623 R_PAREN@7746..7747 ")"
5205 EXPR_LITERAL@7699..77035624 WHITESPACE@7747..7748 " "
5206 NULL_KW@7699..7703 "null"5625 LE@7748..7750 "<="
5207 R_BRACK@7703..7704 "]"5626 WHITESPACE@7750..7751 " "
5208 SEMI@7704..7705 ";"5627 EXPR@7751..7752
5209 WHITESPACE@7705..7712 "\n "5628 EXPR_NUMBER@7751..7752
5210 STMT_LOCAL@7712..77855629 FLOAT@7751..7752 "0"
5211 LOCAL_KW@7712..7717 "local"5630 COMMA@7752..7753 ","
5212 WHITESPACE@7717..7718 " "5631 WHITESPACE@7753..7756 "\n "
5213 BIND_DESTRUCT@7718..77845632 MEMBER_FIELD_METHOD@7756..7831
5214 DESTRUCT_FULL@7718..77295633 FIELD_NAME_FIXED@7756..7780
5215 NAME@7718..77295634 NAME@7756..7780
5216 IDENT@7718..7729 "both_fields"5635 IDENT@7756..7780 "__array_greater_or_equal"
5217 WHITESPACE@7729..7730 " "5636 PARAMS_DESC@7780..7792
5218 ASSIGN@7730..7731 "="5637 L_PAREN@7780..7781 "("
5219 WHITESPACE@7731..7732 " "5638 PARAM@7781..7785
5220 EXPR_APPLY@7732..77845639 DESTRUCT_FULL@7781..7785
5221 EXPR_INDEX@7732..77445640 NAME@7781..7785
5222 EXPR_VAR@7732..77355641 IDENT@7781..7785 "arr1"
5223 NAME@7732..77355642 COMMA@7785..7786 ","
5224 IDENT@7732..7735 "std"5643 WHITESPACE@7786..7787 " "
5225 DOT@7735..7736 "."5644 PARAM@7787..7791
5226 NAME@7736..77445645 DESTRUCT_FULL@7787..7791
5227 IDENT@7736..7744 "setUnion"5646 NAME@7787..7791
5228 ARGS_DESC@7744..77845647 IDENT@7787..7791 "arr2"
5229 L_PAREN@7744..7745 "("5648 R_PAREN@7791..7792 ")"
5230 ARG@7745..77585649 COLONCOLON@7792..7794 "::"
5231 EXPR_VAR@7745..77585650 WHITESPACE@7794..7795 " "
5232 NAME@7745..77585651 EXPR@7795..7831
5233 IDENT@7745..7758 "target_fields"5652 EXPR_BINARY@7795..7831
5234 COMMA@7758..7759 ","5653 EXPR@7795..7798
5235 WHITESPACE@7759..7760 " "5654 EXPR_VAR@7795..7798
5236 ARG@7760..77835655 NAME@7795..7798
5237 EXPR_APPLY@7760..77835656 IDENT@7795..7798 "std"
5238 EXPR_INDEX@7760..77765657 SUFFIX_INDEX@7798..7814
5239 EXPR_VAR@7760..77635658 DOT@7798..7799 "."
5240 NAME@7760..77635659 NAME@7799..7814
5241 IDENT@7760..7763 "std"5660 IDENT@7799..7814 "__compare_array"
5242 DOT@7763..7764 "."5661 SUFFIX_APPLY@7814..7826
5243 NAME@7764..77765662 ARGS_DESC@7814..7826
5244 IDENT@7764..7776 "objectFields"5663 L_PAREN@7814..7815 "("
5245 ARGS_DESC@7776..77835664 ARG@7815..7819
5246 L_PAREN@7776..7777 "("5665 EXPR@7815..7819
5247 ARG@7777..77825666 EXPR_VAR@7815..7819
5248 EXPR_VAR@7777..77825667 NAME@7815..7819
5249 NAME@7777..77825668 IDENT@7815..7819 "arr1"
5250 IDENT@7777..7782 "patch"5669 COMMA@7819..7820 ","
5251 R_PAREN@7782..7783 ")"5670 WHITESPACE@7820..7821 " "
5252 R_PAREN@7783..7784 ")"5671 ARG@7821..7825
5253 SEMI@7784..7785 ";"5672 EXPR@7821..7825
5254 WHITESPACE@7785..7793 "\n\n "5673 EXPR_VAR@7821..7825
5255 TRUE_EXPR@7793..81335674 NAME@7821..7825
5256 EXPR_OBJECT@7793..81335675 IDENT@7821..7825 "arr2"
5257 OBJ_BODY_COMP@7793..81335676 R_PAREN@7825..7826 ")"
5258 L_BRACE@7793..7794 "{"5677 WHITESPACE@7826..7827 " "
5259 WHITESPACE@7794..7803 "\n "5678 GE@7827..7829 ">="
5260 MEMBER_FIELD_NORMAL@7803..80705679 WHITESPACE@7829..7830 " "
5261 FIELD_NAME_DYNAMIC@7803..78065680 EXPR@7830..7831
5262 L_BRACK@7803..7804 "["5681 EXPR_NUMBER@7830..7831
5263 EXPR_VAR@7804..78055682 FLOAT@7830..7831 "0"
5264 NAME@7804..78055683 COMMA@7831..7832 ","
5265 IDENT@7804..7805 "k"5684 WHITESPACE@7832..7833 "\n"
5266 R_BRACK@7805..7806 "]"5685 R_BRACE@7833..7834 "}"
5267 COLON@7806..7807 ":"5686 WHITESPACE@7834..7835 "\n"
5268 WHITESPACE@7807..7818 "\n "
5269 EXPR_IF_THEN_ELSE@7818..8070
5270 IF_KW@7818..7820 "if"
5271 WHITESPACE@7820..7821 " "
5272 EXPR_UNARY@7821..7845
5273 NOT@7821..7822 "!"
5274 EXPR_APPLY@7822..7845
5275 EXPR_INDEX@7822..7835
5276 EXPR_VAR@7822..7825
5277 NAME@7822..7825
5278 IDENT@7822..7825 "std"
5279 DOT@7825..7826 "."
5280 NAME@7826..7835
5281 IDENT@7826..7835 "objectHas"
5282 ARGS_DESC@7835..7845
5283 L_PAREN@7835..7836 "("
5284 ARG@7836..7841
5285 EXPR_VAR@7836..7841
5286 NAME@7836..7841
5287 IDENT@7836..7841 "patch"
5288 COMMA@7841..7842 ","
5289 WHITESPACE@7842..7843 " "
5290 ARG@7843..7844
5291 EXPR_VAR@7843..7844
5292 NAME@7843..7844
5293 IDENT@7843..7844 "k"
5294 R_PAREN@7844..7845 ")"
5295 WHITESPACE@7845..7846 " "
5296 THEN_KW@7846..7850 "then"
5297 WHITESPACE@7850..7863 "\n "
5298 TRUE_EXPR@7863..7879
5299 EXPR_INDEX_EXPR@7863..7879
5300 LHS_EXPR@7863..7876
5301 EXPR_VAR@7863..7876
5302 NAME@7863..7876
5303 IDENT@7863..7876 "target_object"
5304 L_BRACK@7876..7877 "["
5305 EXPR_VAR@7877..7878
5306 NAME@7877..7878
5307 IDENT@7877..7878 "k"
5308 R_BRACK@7878..7879 "]"
5309 WHITESPACE@7879..7890 "\n "
5310 ELSE_KW@7890..7894 "else"
5311 WHITESPACE@7894..7895 " "
5312 FALSE_EXPR@7895..8070
5313 EXPR_IF_THEN_ELSE@7895..8070
5314 IF_KW@7895..7897 "if"
5315 WHITESPACE@7897..7898 " "
5316 EXPR_UNARY@7898..7930
5317 NOT@7898..7899 "!"
5318 EXPR_APPLY@7899..7930
5319 EXPR_INDEX@7899..7912
5320 EXPR_VAR@7899..7902
5321 NAME@7899..7902
5322 IDENT@7899..7902 "std"
5323 DOT@7902..7903 "."
5324 NAME@7903..7912
5325 IDENT@7903..7912 "objectHas"
5326 ARGS_DESC@7912..7930
5327 L_PAREN@7912..7913 "("
5328 ARG@7913..7926
5329 EXPR_VAR@7913..7926
5330 NAME@7913..7926
5331 IDENT@7913..7926 "target_object"
5332 COMMA@7926..7927 ","
5333 WHITESPACE@7927..7928 " "
5334 ARG@7928..7929
5335 EXPR_VAR@7928..7929
5336 NAME@7928..7929
5337 IDENT@7928..7929 "k"
5338 R_PAREN@7929..7930 ")"
5339 WHITESPACE@7930..7931 " "
5340 THEN_KW@7931..7935 "then"
5341 WHITESPACE@7935..7948 "\n "
5342 TRUE_EXPR@7948..7989
5343 EXPR_APPLY@7948..7989
5344 EXPR_INDEX@7948..7962
5345 EXPR_VAR@7948..7951
5346 NAME@7948..7951
5347 IDENT@7948..7951 "std"
5348 DOT@7951..7952 "."
5349 NAME@7952..7962
5350 IDENT@7952..7962 "mergePatch"
5351 ARGS_DESC@7962..7989
5352 L_PAREN@7962..7963 "("
5353 ARG@7963..7967
5354 EXPR_LITERAL@7963..7967
5355 NULL_KW@7963..7967 "null"
5356 COMMA@7967..7968 ","
5357 WHITESPACE@7968..7969 " "
5358 ARG@7969..7977
5359 EXPR_INDEX_EXPR@7969..7977
5360 LHS_EXPR@7969..7974
5361 EXPR_VAR@7969..7974
5362 NAME@7969..7974
5363 IDENT@7969..7974 "patch"
5364 L_BRACK@7974..7975 "["
5365 EXPR_VAR@7975..7976
5366 NAME@7975..7976
5367 IDENT@7975..7976 "k"
5368 R_BRACK@7976..7977 "]"
5369 R_PAREN@7977..7978 ")"
5370 WHITESPACE@7978..7979 " "
5371 TAILSTRICT_KW@7979..7989 "tailstrict"
5372 WHITESPACE@7989..8000 "\n "
5373 ELSE_KW@8000..8004 "else"
5374 WHITESPACE@8004..8017 "\n "
5375 FALSE_EXPR@8017..8070
5376 EXPR_APPLY@8017..8070
5377 EXPR_INDEX@8017..8031
5378 EXPR_VAR@8017..8020
5379 NAME@8017..8020
5380 IDENT@8017..8020 "std"
5381 DOT@8020..8021 "."
5382 NAME@8021..8031
5383 IDENT@8021..8031 "mergePatch"
5384 ARGS_DESC@8031..8070
5385 L_PAREN@8031..8032 "("
5386 ARG@8032..8048
5387 EXPR_INDEX_EXPR@8032..8048
5388 LHS_EXPR@8032..8045
5389 EXPR_VAR@8032..8045
5390 NAME@8032..8045
5391 IDENT@8032..8045 "target_object"
5392 L_BRACK@8045..8046 "["
5393 EXPR_VAR@8046..8047
5394 NAME@8046..8047
5395 IDENT@8046..8047 "k"
5396 R_BRACK@8047..8048 "]"
5397 COMMA@8048..8049 ","
5398 WHITESPACE@8049..8050 " "
5399 ARG@8050..8058
5400 EXPR_INDEX_EXPR@8050..8058
5401 LHS_EXPR@8050..8055
5402 EXPR_VAR@8050..8055
5403 NAME@8050..8055
5404 IDENT@8050..8055 "patch"
5405 L_BRACK@8055..8056 "["
5406 EXPR_VAR@8056..8057
5407 NAME@8056..8057
5408 IDENT@8056..8057 "k"
5409 R_BRACK@8057..8058 "]"
5410 R_PAREN@8058..8059 ")"
5411 WHITESPACE@8059..8060 " "
5412 TAILSTRICT_KW@8060..8070 "tailstrict"
5413 WHITESPACE@8070..8079 "\n "
5414 FOR_SPEC@8079..8125
5415 FOR_KW@8079..8082 "for"
5416 WHITESPACE@8082..8083 " "
5417 NAME@8083..8084
5418 IDENT@8083..8084 "k"
5419 WHITESPACE@8084..8085 " "
5420 IN_KW@8085..8087 "in"
5421 WHITESPACE@8087..8088 " "
5422 EXPR_APPLY@8088..8125
5423 EXPR_INDEX@8088..8099
5424 EXPR_VAR@8088..8091
5425 NAME@8088..8091
5426 IDENT@8088..8091 "std"
5427 DOT@8091..8092 "."
5428 NAME@8092..8099
5429 IDENT@8092..8099 "setDiff"
5430 ARGS_DESC@8099..8125
5431 L_PAREN@8099..8100 "("
5432 ARG@8100..8111
5433 EXPR_VAR@8100..8111
5434 NAME@8100..8111
5435 IDENT@8100..8111 "both_fields"
5436 COMMA@8111..8112 ","
5437 WHITESPACE@8112..8113 " "
5438 ARG@8113..8124
5439 EXPR_VAR@8113..8124
5440 NAME@8113..8124
5441 IDENT@8113..8124 "null_fields"
5442 R_PAREN@8124..8125 ")"
5443 WHITESPACE@8125..8132 "\n "
5444 R_BRACE@8132..8133 "}"
5445 WHITESPACE@8133..8138 "\n "
5446 ELSE_KW@8138..8142 "else"
5447 WHITESPACE@8142..8149 "\n "
5448 FALSE_EXPR@8149..8154
5449 EXPR_VAR@8149..8154
5450 NAME@8149..8154
5451 IDENT@8149..8154 "patch"
5452 COMMA@8154..8155 ","
5453 WHITESPACE@8155..8159 "\n\n "
5454 MEMBER_FIELD_METHOD@8159..8265
5455 FIELD_NAME_FIXED@8159..8162
5456 NAME@8159..8162
5457 IDENT@8159..8162 "get"
5458 PARAMS_DESC@8162..8199
5459 L_PAREN@8162..8163 "("
5460 PARAM@8163..8164
5461 DESTRUCT_FULL@8163..8164
5462 NAME@8163..8164
5463 IDENT@8163..8164 "o"
5464 COMMA@8164..8165 ","
5465 WHITESPACE@8165..8166 " "
5466 PARAM@8166..8167
5467 DESTRUCT_FULL@8166..8167
5468 NAME@8166..8167
5469 IDENT@8166..8167 "f"
5470 COMMA@8167..8168 ","
5471 WHITESPACE@8168..8169 " "
5472 PARAM@8169..8181
5473 DESTRUCT_FULL@8169..8176
5474 NAME@8169..8176
5475 IDENT@8169..8176 "default"
5476 ASSIGN@8176..8177 "="
5477 EXPR_LITERAL@8177..8181
5478 NULL_KW@8177..8181 "null"
5479 COMMA@8181..8182 ","
5480 WHITESPACE@8182..8183 " "
5481 PARAM@8183..8198
5482 DESTRUCT_FULL@8183..8193
5483 NAME@8183..8193
5484 IDENT@8183..8193 "inc_hidden"
5485 ASSIGN@8193..8194 "="
5486 EXPR_LITERAL@8194..8198
5487 TRUE_KW@8194..8198 "true"
5488 R_PAREN@8198..8199 ")"
5489 COLONCOLON@8199..8201 "::"
5490 WHITESPACE@8201..8206 "\n "
5491 EXPR_IF_THEN_ELSE@8206..8265
5492 IF_KW@8206..8208 "if"
5493 WHITESPACE@8208..8209 " "
5494 EXPR_APPLY@8209..8242
5495 EXPR_INDEX@8209..8224
5496 EXPR_VAR@8209..8212
5497 NAME@8209..8212
5498 IDENT@8209..8212 "std"
5499 DOT@8212..8213 "."
5500 NAME@8213..8224
5501 IDENT@8213..8224 "objectHasEx"
5502 ARGS_DESC@8224..8242
5503 L_PAREN@8224..8225 "("
5504 ARG@8225..8226
5505 EXPR_VAR@8225..8226
5506 NAME@8225..8226
5507 IDENT@8225..8226 "o"
5508 COMMA@8226..8227 ","
5509 WHITESPACE@8227..8228 " "
5510 ARG@8228..8229
5511 EXPR_VAR@8228..8229
5512 NAME@8228..8229
5513 IDENT@8228..8229 "f"
5514 COMMA@8229..8230 ","
5515 WHITESPACE@8230..8231 " "
5516 ARG@8231..8241
5517 EXPR_VAR@8231..8241
5518 NAME@8231..8241
5519 IDENT@8231..8241 "inc_hidden"
5520 R_PAREN@8241..8242 ")"
5521 WHITESPACE@8242..8243 " "
5522 THEN_KW@8243..8247 "then"
5523 WHITESPACE@8247..8248 " "
5524 TRUE_EXPR@8248..8252
5525 EXPR_INDEX_EXPR@8248..8252
5526 LHS_EXPR@8248..8249
5527 EXPR_VAR@8248..8249
5528 NAME@8248..8249
5529 IDENT@8248..8249 "o"
5530 L_BRACK@8249..8250 "["
5531 EXPR_VAR@8250..8251
5532 NAME@8250..8251
5533 IDENT@8250..8251 "f"
5534 R_BRACK@8251..8252 "]"
5535 WHITESPACE@8252..8253 " "
5536 ELSE_KW@8253..8257 "else"
5537 WHITESPACE@8257..8258 " "
5538 FALSE_EXPR@8258..8265
5539 EXPR_VAR@8258..8265
5540 NAME@8258..8265
5541 IDENT@8258..8265 "default"
5542 COMMA@8265..8266 ","
5543 WHITESPACE@8266..8270 "\n\n "
5544 MEMBER_FIELD_METHOD@8270..8320
5545 FIELD_NAME_FIXED@8270..8282
5546 NAME@8270..8282
5547 IDENT@8270..8282 "objectFields"
5548 PARAMS_DESC@8282..8285
5549 L_PAREN@8282..8283 "("
5550 PARAM@8283..8284
5551 DESTRUCT_FULL@8283..8284
5552 NAME@8283..8284
5553 IDENT@8283..8284 "o"
5554 R_PAREN@8284..8285 ")"
5555 COLONCOLON@8285..8287 "::"
5556 WHITESPACE@8287..8292 "\n "
5557 EXPR_APPLY@8292..8320
5558 EXPR_INDEX@8292..8310
5559 EXPR_VAR@8292..8295
5560 NAME@8292..8295
5561 IDENT@8292..8295 "std"
5562 DOT@8295..8296 "."
5563 NAME@8296..8310
5564 IDENT@8296..8310 "objectFieldsEx"
5565 ARGS_DESC@8310..8320
5566 L_PAREN@8310..8311 "("
5567 ARG@8311..8312
5568 EXPR_VAR@8311..8312
5569 NAME@8311..8312
5570 IDENT@8311..8312 "o"
5571 COMMA@8312..8313 ","
5572 WHITESPACE@8313..8314 " "
5573 ARG@8314..8319
5574 EXPR_LITERAL@8314..8319
5575 FALSE_KW@8314..8319 "false"
5576 R_PAREN@8319..8320 ")"
5577 COMMA@8320..8321 ","
5578 WHITESPACE@8321..8325 "\n\n "
5579 MEMBER_FIELD_METHOD@8325..8377
5580 FIELD_NAME_FIXED@8325..8340
5581 NAME@8325..8340
5582 IDENT@8325..8340 "objectFieldsAll"
5583 PARAMS_DESC@8340..8343
5584 L_PAREN@8340..8341 "("
5585 PARAM@8341..8342
5586 DESTRUCT_FULL@8341..8342
5587 NAME@8341..8342
5588 IDENT@8341..8342 "o"
5589 R_PAREN@8342..8343 ")"
5590 COLONCOLON@8343..8345 "::"
5591 WHITESPACE@8345..8350 "\n "
5592 EXPR_APPLY@8350..8377
5593 EXPR_INDEX@8350..8368
5594 EXPR_VAR@8350..8353
5595 NAME@8350..8353
5596 IDENT@8350..8353 "std"
5597 DOT@8353..8354 "."
5598 NAME@8354..8368
5599 IDENT@8354..8368 "objectFieldsEx"
5600 ARGS_DESC@8368..8377
5601 L_PAREN@8368..8369 "("
5602 ARG@8369..8370
5603 EXPR_VAR@8369..8370
5604 NAME@8369..8370
5605 IDENT@8369..8370 "o"
5606 COMMA@8370..8371 ","
5607 WHITESPACE@8371..8372 " "
5608 ARG@8372..8376
5609 EXPR_LITERAL@8372..8376
5610 TRUE_KW@8372..8376 "true"
5611 R_PAREN@8376..8377 ")"
5612 COMMA@8377..8378 ","
5613 WHITESPACE@8378..8382 "\n\n "
5614 MEMBER_FIELD_METHOD@8382..8432
5615 FIELD_NAME_FIXED@8382..8391
5616 NAME@8382..8391
5617 IDENT@8382..8391 "objectHas"
5618 PARAMS_DESC@8391..8397
5619 L_PAREN@8391..8392 "("
5620 PARAM@8392..8393
5621 DESTRUCT_FULL@8392..8393
5622 NAME@8392..8393
5623 IDENT@8392..8393 "o"
5624 COMMA@8393..8394 ","
5625 WHITESPACE@8394..8395 " "
5626 PARAM@8395..8396
5627 DESTRUCT_FULL@8395..8396
5628 NAME@8395..8396
5629 IDENT@8395..8396 "f"
5630 R_PAREN@8396..8397 ")"
5631 COLONCOLON@8397..8399 "::"
5632 WHITESPACE@8399..8404 "\n "
5633 EXPR_APPLY@8404..8432
5634 EXPR_INDEX@8404..8419
5635 EXPR_VAR@8404..8407
5636 NAME@8404..8407
5637 IDENT@8404..8407 "std"
5638 DOT@8407..8408 "."
5639 NAME@8408..8419
5640 IDENT@8408..8419 "objectHasEx"
5641 ARGS_DESC@8419..8432
5642 L_PAREN@8419..8420 "("
5643 ARG@8420..8421
5644 EXPR_VAR@8420..8421
5645 NAME@8420..8421
5646 IDENT@8420..8421 "o"
5647 COMMA@8421..8422 ","
5648 WHITESPACE@8422..8423 " "
5649 ARG@8423..8424
5650 EXPR_VAR@8423..8424
5651 NAME@8423..8424
5652 IDENT@8423..8424 "f"
5653 COMMA@8424..8425 ","
5654 WHITESPACE@8425..8426 " "
5655 ARG@8426..8431
5656 EXPR_LITERAL@8426..8431
5657 FALSE_KW@8426..8431 "false"
5658 R_PAREN@8431..8432 ")"
5659 COMMA@8432..8433 ","
5660 WHITESPACE@8433..8437 "\n\n "
5661 MEMBER_FIELD_METHOD@8437..8489
5662 FIELD_NAME_FIXED@8437..8449
5663 NAME@8437..8449
5664 IDENT@8437..8449 "objectHasAll"
5665 PARAMS_DESC@8449..8455
5666 L_PAREN@8449..8450 "("
5667 PARAM@8450..8451
5668 DESTRUCT_FULL@8450..8451
5669 NAME@8450..8451
5670 IDENT@8450..8451 "o"
5671 COMMA@8451..8452 ","
5672 WHITESPACE@8452..8453 " "
5673 PARAM@8453..8454
5674 DESTRUCT_FULL@8453..8454
5675 NAME@8453..8454
5676 IDENT@8453..8454 "f"
5677 R_PAREN@8454..8455 ")"
5678 COLONCOLON@8455..8457 "::"
5679 WHITESPACE@8457..8462 "\n "
5680 EXPR_APPLY@8462..8489
5681 EXPR_INDEX@8462..8477
5682 EXPR_VAR@8462..8465
5683 NAME@8462..8465
5684 IDENT@8462..8465 "std"
5685 DOT@8465..8466 "."
5686 NAME@8466..8477
5687 IDENT@8466..8477 "objectHasEx"
5688 ARGS_DESC@8477..8489
5689 L_PAREN@8477..8478 "("
5690 ARG@8478..8479
5691 EXPR_VAR@8478..8479
5692 NAME@8478..8479
5693 IDENT@8478..8479 "o"
5694 COMMA@8479..8480 ","
5695 WHITESPACE@8480..8481 " "
5696 ARG@8481..8482
5697 EXPR_VAR@8481..8482
5698 NAME@8481..8482
5699 IDENT@8481..8482 "f"
5700 COMMA@8482..8483 ","
5701 WHITESPACE@8483..8484 " "
5702 ARG@8484..8488
5703 EXPR_LITERAL@8484..8488
5704 TRUE_KW@8484..8488 "true"
5705 R_PAREN@8488..8489 ")"
5706 COMMA@8489..8490 ","
5707 WHITESPACE@8490..8494 "\n\n "
5708 MEMBER_FIELD_METHOD@8494..8551
5709 FIELD_NAME_FIXED@8494..8506
5710 NAME@8494..8506
5711 IDENT@8494..8506 "objectValues"
5712 PARAMS_DESC@8506..8509
5713 L_PAREN@8506..8507 "("
5714 PARAM@8507..8508
5715 DESTRUCT_FULL@8507..8508
5716 NAME@8507..8508
5717 IDENT@8507..8508 "o"
5718 R_PAREN@8508..8509 ")"
5719 COLONCOLON@8509..8511 "::"
5720 WHITESPACE@8511..8516 "\n "
5721 EXPR_ARRAY_COMP@8516..8551
5722 L_BRACK@8516..8517 "["
5723 EXPR_INDEX_EXPR@8517..8521
5724 LHS_EXPR@8517..8518
5725 EXPR_VAR@8517..8518
5726 NAME@8517..8518
5727 IDENT@8517..8518 "o"
5728 L_BRACK@8518..8519 "["
5729 EXPR_VAR@8519..8520
5730 NAME@8519..8520
5731 IDENT@8519..8520 "k"
5732 R_BRACK@8520..8521 "]"
5733 WHITESPACE@8521..8522 " "
5734 FOR_SPEC@8522..8550
5735 FOR_KW@8522..8525 "for"
5736 WHITESPACE@8525..8526 " "
5737 NAME@8526..8527
5738 IDENT@8526..8527 "k"
5739 WHITESPACE@8527..8528 " "
5740 IN_KW@8528..8530 "in"
5741 WHITESPACE@8530..8531 " "
5742 EXPR_APPLY@8531..8550
5743 EXPR_INDEX@8531..8547
5744 EXPR_VAR@8531..8534
5745 NAME@8531..8534
5746 IDENT@8531..8534 "std"
5747 DOT@8534..8535 "."
5748 NAME@8535..8547
5749 IDENT@8535..8547 "objectFields"
5750 ARGS_DESC@8547..8550
5751 L_PAREN@8547..8548 "("
5752 ARG@8548..8549
5753 EXPR_VAR@8548..8549
5754 NAME@8548..8549
5755 IDENT@8548..8549 "o"
5756 R_PAREN@8549..8550 ")"
5757 R_BRACK@8550..8551 "]"
5758 COMMA@8551..8552 ","
5759 WHITESPACE@8552..8556 "\n\n "
5760 MEMBER_FIELD_METHOD@8556..8619
5761 FIELD_NAME_FIXED@8556..8571
5762 NAME@8556..8571
5763 IDENT@8556..8571 "objectValuesAll"
5764 PARAMS_DESC@8571..8574
5765 L_PAREN@8571..8572 "("
5766 PARAM@8572..8573
5767 DESTRUCT_FULL@8572..8573
5768 NAME@8572..8573
5769 IDENT@8572..8573 "o"
5770 R_PAREN@8573..8574 ")"
5771 COLONCOLON@8574..8576 "::"
5772 WHITESPACE@8576..8581 "\n "
5773 EXPR_ARRAY_COMP@8581..8619
5774 L_BRACK@8581..8582 "["
5775 EXPR_INDEX_EXPR@8582..8586
5776 LHS_EXPR@8582..8583
5777 EXPR_VAR@8582..8583
5778 NAME@8582..8583
5779 IDENT@8582..8583 "o"
5780 L_BRACK@8583..8584 "["
5781 EXPR_VAR@8584..8585
5782 NAME@8584..8585
5783 IDENT@8584..8585 "k"
5784 R_BRACK@8585..8586 "]"
5785 WHITESPACE@8586..8587 " "
5786 FOR_SPEC@8587..8618
5787 FOR_KW@8587..8590 "for"
5788 WHITESPACE@8590..8591 " "
5789 NAME@8591..8592
5790 IDENT@8591..8592 "k"
5791 WHITESPACE@8592..8593 " "
5792 IN_KW@8593..8595 "in"
5793 WHITESPACE@8595..8596 " "
5794 EXPR_APPLY@8596..8618
5795 EXPR_INDEX@8596..8615
5796 EXPR_VAR@8596..8599
5797 NAME@8596..8599
5798 IDENT@8596..8599 "std"
5799 DOT@8599..8600 "."
5800 NAME@8600..8615
5801 IDENT@8600..8615 "objectFieldsAll"
5802 ARGS_DESC@8615..8618
5803 L_PAREN@8615..8616 "("
5804 ARG@8616..8617
5805 EXPR_VAR@8616..8617
5806 NAME@8616..8617
5807 IDENT@8616..8617 "o"
5808 R_PAREN@8617..8618 ")"
5809 R_BRACK@8618..8619 "]"
5810 COMMA@8619..8620 ","
5811 WHITESPACE@8620..8624 "\n\n "
5812 MEMBER_FIELD_METHOD@8624..8758
5813 FIELD_NAME_FIXED@8624..8635
5814 NAME@8624..8635
5815 IDENT@8624..8635 "resolvePath"
5816 PARAMS_DESC@8635..8641
5817 L_PAREN@8635..8636 "("
5818 PARAM@8636..8637
5819 DESTRUCT_FULL@8636..8637
5820 NAME@8636..8637
5821 IDENT@8636..8637 "f"
5822 COMMA@8637..8638 ","
5823 WHITESPACE@8638..8639 " "
5824 PARAM@8639..8640
5825 DESTRUCT_FULL@8639..8640
5826 NAME@8639..8640
5827 IDENT@8639..8640 "r"
5828 R_PAREN@8640..8641 ")"
5829 COLONCOLON@8641..8643 "::"
5830 WHITESPACE@8643..8648 "\n "
5831 STMT_LOCAL@8648..8678
5832 LOCAL_KW@8648..8653 "local"
5833 WHITESPACE@8653..8654 " "
5834 BIND_DESTRUCT@8654..8677
5835 DESTRUCT_FULL@8654..8657
5836 NAME@8654..8657
5837 IDENT@8654..8657 "arr"
5838 WHITESPACE@8657..8658 " "
5839 ASSIGN@8658..8659 "="
5840 WHITESPACE@8659..8660 " "
5841 EXPR_APPLY@8660..8677
5842 EXPR_INDEX@8660..8669
5843 EXPR_VAR@8660..8663
5844 NAME@8660..8663
5845 IDENT@8660..8663 "std"
5846 DOT@8663..8664 "."
5847 NAME@8664..8669
5848 IDENT@8664..8669 "split"
5849 ARGS_DESC@8669..8677
5850 L_PAREN@8669..8670 "("
5851 ARG@8670..8671
5852 EXPR_VAR@8670..8671
5853 NAME@8670..8671
5854 IDENT@8670..8671 "f"
5855 COMMA@8671..8672 ","
5856 WHITESPACE@8672..8673 " "
5857 ARG@8673..8676
5858 EXPR_STRING@8673..8676
5859 STRING_SINGLE@8673..8676 "'/'"
5860 R_PAREN@8676..8677 ")"
5861 SEMI@8677..8678 ";"
5862 WHITESPACE@8678..8683 "\n "
5863 EXPR_APPLY@8683..8758
5864 EXPR_INDEX@8683..8691
5865 EXPR_VAR@8683..8686
5866 NAME@8683..8686
5867 IDENT@8683..8686 "std"
5868 DOT@8686..8687 "."
5869 NAME@8687..8691
5870 IDENT@8687..8691 "join"
5871 ARGS_DESC@8691..8758
5872 L_PAREN@8691..8692 "("
5873 ARG@8692..8695
5874 EXPR_STRING@8692..8695
5875 STRING_SINGLE@8692..8695 "'/'"
5876 COMMA@8695..8696 ","
5877 WHITESPACE@8696..8697 " "
5878 ARG@8697..8757
5879 EXPR_BINARY@8697..8757
5880 LHS_EXPR@8697..8751
5881 EXPR_APPLY@8697..8751
5882 EXPR_INDEX@8697..8710
5883 EXPR_VAR@8697..8700
5884 NAME@8697..8700
5885 IDENT@8697..8700 "std"
5886 DOT@8700..8701 "."
5887 NAME@8701..8710
5888 IDENT@8701..8710 "makeArray"
5889 ARGS_DESC@8710..8751
5890 L_PAREN@8710..8711 "("
5891 ARG@8711..8730
5892 EXPR_BINARY@8711..8730
5893 LHS_EXPR@8711..8726
5894 EXPR_APPLY@8711..8726
5895 EXPR_INDEX@8711..8721
5896 EXPR_VAR@8711..8714
5897 NAME@8711..8714
5898 IDENT@8711..8714 "std"
5899 DOT@8714..8715 "."
5900 NAME@8715..8721
5901 IDENT@8715..8721 "length"
5902 ARGS_DESC@8721..8726
5903 L_PAREN@8721..8722 "("
5904 ARG@8722..8725
5905 EXPR_VAR@8722..8725
5906 NAME@8722..8725
5907 IDENT@8722..8725 "arr"
5908 R_PAREN@8725..8726 ")"
5909 WHITESPACE@8726..8727 " "
5910 MINUS@8727..8728 "-"
5911 WHITESPACE@8728..8729 " "
5912 EXPR_NUMBER@8729..8730
5913 FLOAT@8729..8730 "1"
5914 COMMA@8730..8731 ","
5915 WHITESPACE@8731..8732 " "
5916 ARG@8732..8750
5917 EXPR_FUNCTION@8732..8750
5918 FUNCTION_KW@8732..8740 "function"
5919 PARAMS_DESC@8740..8743
5920 L_PAREN@8740..8741 "("
5921 PARAM@8741..8742
5922 DESTRUCT_FULL@8741..8742
5923 NAME@8741..8742
5924 IDENT@8741..8742 "i"
5925 R_PAREN@8742..8743 ")"
5926 WHITESPACE@8743..8744 " "
5927 EXPR_INDEX_EXPR@8744..8750
5928 LHS_EXPR@8744..8747
5929 EXPR_VAR@8744..8747
5930 NAME@8744..8747
5931 IDENT@8744..8747 "arr"
5932 L_BRACK@8747..8748 "["
5933 EXPR_VAR@8748..8749
5934 NAME@8748..8749
5935 IDENT@8748..8749 "i"
5936 R_BRACK@8749..8750 "]"
5937 R_PAREN@8750..8751 ")"
5938 WHITESPACE@8751..8752 " "
5939 PLUS@8752..8753 "+"
5940 WHITESPACE@8753..8754 " "
5941 EXPR_ARRAY@8754..8757
5942 L_BRACK@8754..8755 "["
5943 EXPR_VAR@8755..8756
5944 NAME@8755..8756
5945 IDENT@8755..8756 "r"
5946 R_BRACK@8756..8757 "]"
5947 R_PAREN@8757..8758 ")"
5948 COMMA@8758..8759 ","
5949 WHITESPACE@8759..8763 "\n\n "
5950 MEMBER_FIELD_METHOD@8763..9216
5951 FIELD_NAME_FIXED@8763..8768
5952 NAME@8763..8768
5953 IDENT@8763..8768 "prune"
5954 PARAMS_DESC@8768..8771
5955 L_PAREN@8768..8769 "("
5956 PARAM@8769..8770
5957 DESTRUCT_FULL@8769..8770
5958 NAME@8769..8770
5959 IDENT@8769..8770 "a"
5960 R_PAREN@8770..8771 ")"
5961 COLONCOLON@8771..8773 "::"
5962 WHITESPACE@8773..8778 "\n "
5963 STMT_LOCAL@8778..8982
5964 LOCAL_KW@8778..8783 "local"
5965 WHITESPACE@8783..8784 " "
5966 BIND_FUNCTION@8784..8981
5967 NAME@8784..8793
5968 IDENT@8784..8793 "isContent"
5969 PARAMS_DESC@8793..8796
5970 L_PAREN@8793..8794 "("
5971 PARAM@8794..8795
5972 DESTRUCT_FULL@8794..8795
5973 NAME@8794..8795
5974 IDENT@8794..8795 "b"
5975 R_PAREN@8795..8796 ")"
5976 WHITESPACE@8796..8797 " "
5977 ASSIGN@8797..8798 "="
5978 WHITESPACE@8798..8805 "\n "
5979 EXPR_IF_THEN_ELSE@8805..8981
5980 IF_KW@8805..8807 "if"
5981 WHITESPACE@8807..8808 " "
5982 EXPR_BINARY@8808..8817
5983 LHS_EXPR@8808..8809
5984 EXPR_VAR@8808..8809
5985 NAME@8808..8809
5986 IDENT@8808..8809 "b"
5987 WHITESPACE@8809..8810 " "
5988 EQ@8810..8812 "=="
5989 WHITESPACE@8812..8813 " "
5990 EXPR_LITERAL@8813..8817
5991 NULL_KW@8813..8817 "null"
5992 WHITESPACE@8817..8818 " "
5993 THEN_KW@8818..8822 "then"
5994 WHITESPACE@8822..8831 "\n "
5995 TRUE_EXPR@8831..8836
5996 EXPR_LITERAL@8831..8836
5997 FALSE_KW@8831..8836 "false"
5998 WHITESPACE@8836..8843 "\n "
5999 ELSE_KW@8843..8847 "else"
6000 WHITESPACE@8847..8848 " "
6001 FALSE_EXPR@8848..8981
6002 EXPR_IF_THEN_ELSE@8848..8981
6003 IF_KW@8848..8850 "if"
6004 WHITESPACE@8850..8851 " "
6005 EXPR_APPLY@8851..8865
6006 EXPR_INDEX@8851..8862
6007 EXPR_VAR@8851..8854
6008 NAME@8851..8854
6009 IDENT@8851..8854 "std"
6010 DOT@8854..8855 "."
6011 NAME@8855..8862
6012 IDENT@8855..8862 "isArray"
6013 ARGS_DESC@8862..8865
6014 L_PAREN@8862..8863 "("
6015 ARG@8863..8864
6016 EXPR_VAR@8863..8864
6017 NAME@8863..8864
6018 IDENT@8863..8864 "b"
6019 R_PAREN@8864..8865 ")"
6020 WHITESPACE@8865..8866 " "
6021 THEN_KW@8866..8870 "then"
6022 WHITESPACE@8870..8879 "\n "
6023 TRUE_EXPR@8879..8896
6024 EXPR_BINARY@8879..8896
6025 LHS_EXPR@8879..8892
6026 EXPR_APPLY@8879..8892
6027 EXPR_INDEX@8879..8889
6028 EXPR_VAR@8879..8882
6029 NAME@8879..8882
6030 IDENT@8879..8882 "std"
6031 DOT@8882..8883 "."
6032 NAME@8883..8889
6033 IDENT@8883..8889 "length"
6034 ARGS_DESC@8889..8892
6035 L_PAREN@8889..8890 "("
6036 ARG@8890..8891
6037 EXPR_VAR@8890..8891
6038 NAME@8890..8891
6039 IDENT@8890..8891 "b"
6040 R_PAREN@8891..8892 ")"
6041 WHITESPACE@8892..8893 " "
6042 GT@8893..8894 ">"
6043 WHITESPACE@8894..8895 " "
6044 EXPR_NUMBER@8895..8896
6045 FLOAT@8895..8896 "0"
6046 WHITESPACE@8896..8903 "\n "
6047 ELSE_KW@8903..8907 "else"
6048 WHITESPACE@8907..8908 " "
6049 FALSE_EXPR@8908..8981
6050 EXPR_IF_THEN_ELSE@8908..8981
6051 IF_KW@8908..8910 "if"
6052 WHITESPACE@8910..8911 " "
6053 EXPR_APPLY@8911..8926
6054 EXPR_INDEX@8911..8923
6055 EXPR_VAR@8911..8914
6056 NAME@8911..8914
6057 IDENT@8911..8914 "std"
6058 DOT@8914..8915 "."
6059 NAME@8915..8923
6060 IDENT@8915..8923 "isObject"
6061 ARGS_DESC@8923..8926
6062 L_PAREN@8923..8924 "("
6063 ARG@8924..8925
6064 EXPR_VAR@8924..8925
6065 NAME@8924..8925
6066 IDENT@8924..8925 "b"
6067 R_PAREN@8925..8926 ")"
6068 WHITESPACE@8926..8927 " "
6069 THEN_KW@8927..8931 "then"
6070 WHITESPACE@8931..8940 "\n "
6071 TRUE_EXPR@8940..8957
6072 EXPR_BINARY@8940..8957
6073 LHS_EXPR@8940..8953
6074 EXPR_APPLY@8940..8953
6075 EXPR_INDEX@8940..8950
6076 EXPR_VAR@8940..8943
6077 NAME@8940..8943
6078 IDENT@8940..8943 "std"
6079 DOT@8943..8944 "."
6080 NAME@8944..8950
6081 IDENT@8944..8950 "length"
6082 ARGS_DESC@8950..8953
6083 L_PAREN@8950..8951 "("
6084 ARG@8951..8952
6085 EXPR_VAR@8951..8952
6086 NAME@8951..8952
6087 IDENT@8951..8952 "b"
6088 R_PAREN@8952..8953 ")"
6089 WHITESPACE@8953..8954 " "
6090 GT@8954..8955 ">"
6091 WHITESPACE@8955..8956 " "
6092 EXPR_NUMBER@8956..8957
6093 FLOAT@8956..8957 "0"
6094 WHITESPACE@8957..8964 "\n "
6095 ELSE_KW@8964..8968 "else"
6096 WHITESPACE@8968..8977 "\n "
6097 FALSE_EXPR@8977..8981
6098 EXPR_LITERAL@8977..8981
6099 TRUE_KW@8977..8981 "true"
6100 SEMI@8981..8982 ";"
6101 WHITESPACE@8982..8987 "\n "
6102 EXPR_IF_THEN_ELSE@8987..9216
6103 IF_KW@8987..8989 "if"
6104 WHITESPACE@8989..8990 " "
6105 EXPR_APPLY@8990..9004
6106 EXPR_INDEX@8990..9001
6107 EXPR_VAR@8990..8993
6108 NAME@8990..8993
6109 IDENT@8990..8993 "std"
6110 DOT@8993..8994 "."
6111 NAME@8994..9001
6112 IDENT@8994..9001 "isArray"
6113 ARGS_DESC@9001..9004
6114 L_PAREN@9001..9002 "("
6115 ARG@9002..9003
6116 EXPR_VAR@9002..9003
6117 NAME@9002..9003
6118 IDENT@9002..9003 "a"
6119 R_PAREN@9003..9004 ")"
6120 WHITESPACE@9004..9005 " "
6121 THEN_KW@9005..9009 "then"
6122 WHITESPACE@9009..9016 "\n "
6123 TRUE_EXPR@9016..9066
6124 EXPR_ARRAY_COMP@9016..9066
6125 L_BRACK@9016..9017 "["
6126 EXPR_APPLY@9017..9029
6127 EXPR_INDEX@9017..9026
6128 EXPR_VAR@9017..9020
6129 NAME@9017..9020
6130 IDENT@9017..9020 "std"
6131 DOT@9020..9021 "."
6132 NAME@9021..9026
6133 IDENT@9021..9026 "prune"
6134 ARGS_DESC@9026..9029
6135 L_PAREN@9026..9027 "("
6136 ARG@9027..9028
6137 EXPR_VAR@9027..9028
6138 NAME@9027..9028
6139 IDENT@9027..9028 "x"
6140 R_PAREN@9028..9029 ")"
6141 WHITESPACE@9029..9030 " "
6142 FOR_SPEC@9030..9040
6143 FOR_KW@9030..9033 "for"
6144 WHITESPACE@9033..9034 " "
6145 NAME@9034..9035
6146 IDENT@9034..9035 "x"
6147 WHITESPACE@9035..9036 " "
6148 IN_KW@9036..9038 "in"
6149 WHITESPACE@9038..9039 " "
6150 EXPR_VAR@9039..9040
6151 NAME@9039..9040
6152 IDENT@9039..9040 "a"
6153 WHITESPACE@9040..9041 " "
6154 IF_SPEC@9041..9065
6155 IF_KW@9041..9043 "if"
6156 WHITESPACE@9043..9044 " "
6157 EXPR_APPLY@9044..9065
6158 EXPR_VAR@9044..9053
6159 NAME@9044..9053
6160 IDENT@9044..9053 "isContent"
6161 ARGS_DESC@9053..9065
6162 L_PAREN@9053..9054 "("
6163 ARG@9054..9064
6164 EXPR_APPLY@9054..9064
6165 EXPR_INDEX@9054..9061
6166 EXPR_LITERAL@9054..9055
6167 DOLLAR@9054..9055 "$"
6168 DOT@9055..9056 "."
6169 NAME@9056..9061
6170 IDENT@9056..9061 "prune"
6171 ARGS_DESC@9061..9064
6172 L_PAREN@9061..9062 "("
6173 ARG@9062..9063
6174 EXPR_VAR@9062..9063
6175 NAME@9062..9063
6176 IDENT@9062..9063 "x"
6177 R_PAREN@9063..9064 ")"
6178 R_PAREN@9064..9065 ")"
6179 R_BRACK@9065..9066 "]"
6180 WHITESPACE@9066..9071 "\n "
6181 ELSE_KW@9071..9075 "else"
6182 WHITESPACE@9075..9076 " "
6183 FALSE_EXPR@9076..9216
6184 EXPR_IF_THEN_ELSE@9076..9216
6185 IF_KW@9076..9078 "if"
6186 WHITESPACE@9078..9079 " "
6187 EXPR_APPLY@9079..9094
6188 EXPR_INDEX@9079..9091
6189 EXPR_VAR@9079..9082
6190 NAME@9079..9082
6191 IDENT@9079..9082 "std"
6192 DOT@9082..9083 "."
6193 NAME@9083..9091
6194 IDENT@9083..9091 "isObject"
6195 ARGS_DESC@9091..9094
6196 L_PAREN@9091..9092 "("
6197 ARG@9092..9093
6198 EXPR_VAR@9092..9093
6199 NAME@9092..9093
6200 IDENT@9092..9093 "a"
6201 R_PAREN@9093..9094 ")"
6202 WHITESPACE@9094..9095 " "
6203 THEN_KW@9095..9099 "then"
6204 WHITESPACE@9099..9100 " "
6205 TRUE_EXPR@9100..9203
6206 EXPR_OBJECT@9100..9203
6207 OBJ_BODY_COMP@9100..9203
6208 L_BRACE@9100..9101 "{"
6209 WHITESPACE@9101..9108 "\n "
6210 MEMBER_FIELD_NORMAL@9108..9126
6211 FIELD_NAME_DYNAMIC@9108..9111
6212 L_BRACK@9108..9109 "["
6213 EXPR_VAR@9109..9110
6214 NAME@9109..9110
6215 IDENT@9109..9110 "x"
6216 R_BRACK@9110..9111 "]"
6217 COLON@9111..9112 ":"
6218 WHITESPACE@9112..9113 " "
6219 EXPR_APPLY@9113..9126
6220 EXPR_INDEX@9113..9120
6221 EXPR_LITERAL@9113..9114
6222 DOLLAR@9113..9114 "$"
6223 DOT@9114..9115 "."
6224 NAME@9115..9120
6225 IDENT@9115..9120 "prune"
6226 ARGS_DESC@9120..9126
6227 L_PAREN@9120..9121 "("
6228 ARG@9121..9125
6229 EXPR_INDEX_EXPR@9121..9125
6230 LHS_EXPR@9121..9122
6231 EXPR_VAR@9121..9122
6232 NAME@9121..9122
6233 IDENT@9121..9122 "a"
6234 L_BRACK@9122..9123 "["
6235 EXPR_VAR@9123..9124
6236 NAME@9123..9124
6237 IDENT@9123..9124 "x"
6238 R_BRACK@9124..9125 "]"
6239 R_PAREN@9125..9126 ")"
6240 WHITESPACE@9126..9133 "\n "
6241 FOR_SPEC@9133..9161
6242 FOR_KW@9133..9136 "for"
6243 WHITESPACE@9136..9137 " "
6244 NAME@9137..9138
6245 IDENT@9137..9138 "x"
6246 WHITESPACE@9138..9139 " "
6247 IN_KW@9139..9141 "in"
6248 WHITESPACE@9141..9142 " "
6249 EXPR_APPLY@9142..9161
6250 EXPR_INDEX@9142..9158
6251 EXPR_VAR@9142..9145
6252 NAME@9142..9145
6253 IDENT@9142..9145 "std"
6254 DOT@9145..9146 "."
6255 NAME@9146..9158
6256 IDENT@9146..9158 "objectFields"
6257 ARGS_DESC@9158..9161
6258 L_PAREN@9158..9159 "("
6259 ARG@9159..9160
6260 EXPR_VAR@9159..9160
6261 NAME@9159..9160
6262 IDENT@9159..9160 "a"
6263 R_PAREN@9160..9161 ")"
6264 WHITESPACE@9161..9168 "\n "
6265 IF_SPEC@9168..9197
6266 IF_KW@9168..9170 "if"
6267 WHITESPACE@9170..9171 " "
6268 EXPR_APPLY@9171..9197
6269 EXPR_VAR@9171..9180
6270 NAME@9171..9180
6271 IDENT@9171..9180 "isContent"
6272 ARGS_DESC@9180..9197
6273 L_PAREN@9180..9181 "("
6274 ARG@9181..9196
6275 EXPR_APPLY@9181..9196
6276 EXPR_INDEX@9181..9190
6277 EXPR_VAR@9181..9184
6278 NAME@9181..9184
6279 IDENT@9181..9184 "std"
6280 DOT@9184..9185 "."
6281 NAME@9185..9190
6282 IDENT@9185..9190 "prune"
6283 ARGS_DESC@9190..9196
6284 L_PAREN@9190..9191 "("
6285 ARG@9191..9195
6286 EXPR_INDEX_EXPR@9191..9195
6287 LHS_EXPR@9191..9192
6288 EXPR_VAR@9191..9192
6289 NAME@9191..9192
6290 IDENT@9191..9192 "a"
6291 L_BRACK@9192..9193 "["
6292 EXPR_VAR@9193..9194
6293 NAME@9193..9194
6294 IDENT@9193..9194 "x"
6295 R_BRACK@9194..9195 "]"
6296 R_PAREN@9195..9196 ")"
6297 R_PAREN@9196..9197 ")"
6298 WHITESPACE@9197..9202 "\n "
6299 R_BRACE@9202..9203 "}"
6300 WHITESPACE@9203..9204 " "
6301 ELSE_KW@9204..9208 "else"
6302 WHITESPACE@9208..9215 "\n "
6303 FALSE_EXPR@9215..9216
6304 EXPR_VAR@9215..9216
6305 NAME@9215..9216
6306 IDENT@9215..9216 "a"
6307 COMMA@9216..9217 ","
6308 WHITESPACE@9217..9221 "\n\n "
6309 MEMBER_FIELD_METHOD@9221..9436
6310 FIELD_NAME_FIXED@9221..9225
6311 NAME@9221..9225
6312 IDENT@9221..9225 "find"
6313 PARAMS_DESC@9225..9237
6314 L_PAREN@9225..9226 "("
6315 PARAM@9226..9231
6316 DESTRUCT_FULL@9226..9231
6317 NAME@9226..9231
6318 IDENT@9226..9231 "value"
6319 COMMA@9231..9232 ","
6320 WHITESPACE@9232..9233 " "
6321 PARAM@9233..9236
6322 DESTRUCT_FULL@9233..9236
6323 NAME@9233..9236
6324 IDENT@9233..9236 "arr"
6325 R_PAREN@9236..9237 ")"
6326 COLONCOLON@9237..9239 "::"
6327 WHITESPACE@9239..9244 "\n "
6328 EXPR_IF_THEN_ELSE@9244..9436
6329 IF_KW@9244..9246 "if"
6330 WHITESPACE@9246..9247 " "
6331 EXPR_UNARY@9247..9264
6332 NOT@9247..9248 "!"
6333 EXPR_APPLY@9248..9264
6334 EXPR_INDEX@9248..9259
6335 EXPR_VAR@9248..9251
6336 NAME@9248..9251
6337 IDENT@9248..9251 "std"
6338 DOT@9251..9252 "."
6339 NAME@9252..9259
6340 IDENT@9252..9259 "isArray"
6341 ARGS_DESC@9259..9264
6342 L_PAREN@9259..9260 "("
6343 ARG@9260..9263
6344 EXPR_VAR@9260..9263
6345 NAME@9260..9263
6346 IDENT@9260..9263 "arr"
6347 R_PAREN@9263..9264 ")"
6348 WHITESPACE@9264..9265 " "
6349 THEN_KW@9265..9269 "then"
6350 WHITESPACE@9269..9276 "\n "
6351 TRUE_EXPR@9276..9346
6352 EXPR_ERROR@9276..9346
6353 ERROR_KW@9276..9281 "error"
6354 WHITESPACE@9281..9282 " "
6355 EXPR_BINARY@9282..9346
6356 LHS_EXPR@9282..9330
6357 EXPR_STRING@9282..9330
6358 STRING_SINGLE@9282..9330 "'find second paramete ..."
6359 WHITESPACE@9330..9331 " "
6360 PLUS@9331..9332 "+"
6361 WHITESPACE@9332..9333 " "
6362 EXPR_APPLY@9333..9346
6363 EXPR_INDEX@9333..9341
6364 EXPR_VAR@9333..9336
6365 NAME@9333..9336
6366 IDENT@9333..9336 "std"
6367 DOT@9336..9337 "."
6368 NAME@9337..9341
6369 IDENT@9337..9341 "type"
6370 ARGS_DESC@9341..9346
6371 L_PAREN@9341..9342 "("
6372 ARG@9342..9345
6373 EXPR_VAR@9342..9345
6374 NAME@9342..9345
6375 IDENT@9342..9345 "arr"
6376 R_PAREN@9345..9346 ")"
6377 WHITESPACE@9346..9351 "\n "
6378 ELSE_KW@9351..9355 "else"
6379 WHITESPACE@9355..9362 "\n "
6380 FALSE_EXPR@9362..9436
6381 EXPR_APPLY@9362..9436
6382 EXPR_INDEX@9362..9372
6383 EXPR_VAR@9362..9365
6384 NAME@9362..9365
6385 IDENT@9362..9365 "std"
6386 DOT@9365..9366 "."
6387 NAME@9366..9372
6388 IDENT@9366..9372 "filter"
6389 ARGS_DESC@9372..9436
6390 L_PAREN@9372..9373 "("
6391 ARG@9373..9400
6392 EXPR_FUNCTION@9373..9400
6393 FUNCTION_KW@9373..9381 "function"
6394 PARAMS_DESC@9381..9384
6395 L_PAREN@9381..9382 "("
6396 PARAM@9382..9383
6397 DESTRUCT_FULL@9382..9383
6398 NAME@9382..9383
6399 IDENT@9382..9383 "i"
6400 R_PAREN@9383..9384 ")"
6401 WHITESPACE@9384..9385 " "
6402 EXPR_BINARY@9385..9400
6403 LHS_EXPR@9385..9391
6404 EXPR_INDEX_EXPR@9385..9391
6405 LHS_EXPR@9385..9388
6406 EXPR_VAR@9385..9388
6407 NAME@9385..9388
6408 IDENT@9385..9388 "arr"
6409 L_BRACK@9388..9389 "["
6410 EXPR_VAR@9389..9390
6411 NAME@9389..9390
6412 IDENT@9389..9390 "i"
6413 R_BRACK@9390..9391 "]"
6414 WHITESPACE@9391..9392 " "
6415 EQ@9392..9394 "=="
6416 WHITESPACE@9394..9395 " "
6417 EXPR_VAR@9395..9400
6418 NAME@9395..9400
6419 IDENT@9395..9400 "value"
6420 COMMA@9400..9401 ","
6421 WHITESPACE@9401..9402 " "
6422 ARG@9402..9435
6423 EXPR_APPLY@9402..9435
6424 EXPR_INDEX@9402..9411
6425 EXPR_VAR@9402..9405
6426 NAME@9402..9405
6427 IDENT@9402..9405 "std"
6428 DOT@9405..9406 "."
6429 NAME@9406..9411
6430 IDENT@9406..9411 "range"
6431 ARGS_DESC@9411..9435
6432 L_PAREN@9411..9412 "("
6433 ARG@9412..9413
6434 EXPR_NUMBER@9412..9413
6435 FLOAT@9412..9413 "0"
6436 COMMA@9413..9414 ","
6437 WHITESPACE@9414..9415 " "
6438 ARG@9415..9434
6439 EXPR_BINARY@9415..9434
6440 LHS_EXPR@9415..9430
6441 EXPR_APPLY@9415..9430
6442 EXPR_INDEX@9415..9425
6443 EXPR_VAR@9415..9418
6444 NAME@9415..9418
6445 IDENT@9415..9418 "std"
6446 DOT@9418..9419 "."
6447 NAME@9419..9425
6448 IDENT@9419..9425 "length"
6449 ARGS_DESC@9425..9430
6450 L_PAREN@9425..9426 "("
6451 ARG@9426..9429
6452 EXPR_VAR@9426..9429
6453 NAME@9426..9429
6454 IDENT@9426..9429 "arr"
6455 R_PAREN@9429..9430 ")"
6456 WHITESPACE@9430..9431 " "
6457 MINUS@9431..9432 "-"
6458 WHITESPACE@9432..9433 " "
6459 EXPR_NUMBER@9433..9434
6460 FLOAT@9433..9434 "1"
6461 R_PAREN@9434..9435 ")"
6462 R_PAREN@9435..9436 ")"
6463 COMMA@9436..9437 ","
6464 WHITESPACE@9437..9441 "\n\n "
6465 SINGLE_LINE_SLASH_COMMENT@9441..9451 "// Compat\n"
6466 WHITESPACE@9451..9453 " "
6467 MEMBER_FIELD_METHOD@9453..9563
6468 FIELD_NAME_FIXED@9453..9468
6469 NAME@9453..9468
6470 IDENT@9453..9468 "__compare_array"
6471 PARAMS_DESC@9468..9480
6472 L_PAREN@9468..9469 "("
6473 PARAM@9469..9473
6474 DESTRUCT_FULL@9469..9473
6475 NAME@9469..9473
6476 IDENT@9469..9473 "arr1"
6477 COMMA@9473..9474 ","
6478 WHITESPACE@9474..9475 " "
6479 PARAM@9475..9479
6480 DESTRUCT_FULL@9475..9479
6481 NAME@9475..9479
6482 IDENT@9475..9479 "arr2"
6483 R_PAREN@9479..9480 ")"
6484 COLONCOLON@9480..9482 "::"
6485 WHITESPACE@9482..9487 "\n "
6486 EXPR_ASSERT@9487..9563
6487 ASSERTION@9487..9532
6488 ASSERT_KW@9487..9493 "assert"
6489 WHITESPACE@9493..9494 " "
6490 LHS_EXPR@9494..9532
6491 EXPR_BINARY@9494..9532
6492 LHS_EXPR@9494..9511
6493 EXPR_APPLY@9494..9511
6494 EXPR_INDEX@9494..9505
6495 EXPR_VAR@9494..9497
6496 NAME@9494..9497
6497 IDENT@9494..9497 "std"
6498 DOT@9497..9498 "."
6499 NAME@9498..9505
6500 IDENT@9498..9505 "isArray"
6501 ARGS_DESC@9505..9511
6502 L_PAREN@9505..9506 "("
6503 ARG@9506..9510
6504 EXPR_VAR@9506..9510
6505 NAME@9506..9510
6506 IDENT@9506..9510 "arr1"
6507 R_PAREN@9510..9511 ")"
6508 WHITESPACE@9511..9512 " "
6509 AND@9512..9514 "&&"
6510 WHITESPACE@9514..9515 " "
6511 EXPR_APPLY@9515..9532
6512 EXPR_INDEX@9515..9526
6513 EXPR_VAR@9515..9518
6514 NAME@9515..9518
6515 IDENT@9515..9518 "std"
6516 DOT@9518..9519 "."
6517 NAME@9519..9526
6518 IDENT@9519..9526 "isArray"
6519 ARGS_DESC@9526..9532
6520 L_PAREN@9526..9527 "("
6521 ARG@9527..9531
6522 EXPR_VAR@9527..9531
6523 NAME@9527..9531
6524 IDENT@9527..9531 "arr2"
6525 R_PAREN@9531..9532 ")"
6526 SEMI@9532..9533 ";"
6527 WHITESPACE@9533..9538 "\n "
6528 EXPR_APPLY@9538..9563
6529 EXPR_INDEX@9538..9551
6530 EXPR_VAR@9538..9541
6531 NAME@9538..9541
6532 IDENT@9538..9541 "std"
6533 DOT@9541..9542 "."
6534 NAME@9542..9551
6535 IDENT@9542..9551 "__compare"
6536 ARGS_DESC@9551..9563
6537 L_PAREN@9551..9552 "("
6538 ARG@9552..9556
6539 EXPR_VAR@9552..9556
6540 NAME@9552..9556
6541 IDENT@9552..9556 "arr1"
6542 COMMA@9556..9557 ","
6543 WHITESPACE@9557..9558 " "
6544 ARG@9558..9562
6545 EXPR_VAR@9558..9562
6546 NAME@9558..9562
6547 IDENT@9558..9562 "arr2"
6548 R_PAREN@9562..9563 ")"
6549 COMMA@9563..9564 ","
6550 WHITESPACE@9564..9567 "\n "
6551 MEMBER_FIELD_METHOD@9567..9631
6552 FIELD_NAME_FIXED@9567..9579
6553 NAME@9567..9579
6554 IDENT@9567..9579 "__array_less"
6555 PARAMS_DESC@9579..9591
6556 L_PAREN@9579..9580 "("
6557 PARAM@9580..9584
6558 DESTRUCT_FULL@9580..9584
6559 NAME@9580..9584
6560 IDENT@9580..9584 "arr1"
6561 COMMA@9584..9585 ","
6562 WHITESPACE@9585..9586 " "
6563 PARAM@9586..9590
6564 DESTRUCT_FULL@9586..9590
6565 NAME@9586..9590
6566 IDENT@9586..9590 "arr2"
6567 R_PAREN@9590..9591 ")"
6568 COLONCOLON@9591..9593 "::"
6569 WHITESPACE@9593..9594 " "
6570 EXPR_BINARY@9594..9631
6571 LHS_EXPR@9594..9625
6572 EXPR_APPLY@9594..9625
6573 EXPR_INDEX@9594..9613
6574 EXPR_VAR@9594..9597
6575 NAME@9594..9597
6576 IDENT@9594..9597 "std"
6577 DOT@9597..9598 "."
6578 NAME@9598..9613
6579 IDENT@9598..9613 "__compare_array"
6580 ARGS_DESC@9613..9625
6581 L_PAREN@9613..9614 "("
6582 ARG@9614..9618
6583 EXPR_VAR@9614..9618
6584 NAME@9614..9618
6585 IDENT@9614..9618 "arr1"
6586 COMMA@9618..9619 ","
6587 WHITESPACE@9619..9620 " "
6588 ARG@9620..9624
6589 EXPR_VAR@9620..9624
6590 NAME@9620..9624
6591 IDENT@9620..9624 "arr2"
6592 R_PAREN@9624..9625 ")"
6593 WHITESPACE@9625..9626 " "
6594 EQ@9626..9628 "=="
6595 WHITESPACE@9628..9629 " "
6596 EXPR_UNARY@9629..9631
6597 MINUS@9629..9630 "-"
6598 EXPR_NUMBER@9630..9631
6599 FLOAT@9630..9631 "1"
6600 COMMA@9631..9632 ","
6601 WHITESPACE@9632..9635 "\n "
6602 MEMBER_FIELD_METHOD@9635..9701
6603 FIELD_NAME_FIXED@9635..9650
6604 NAME@9635..9650
6605 IDENT@9635..9650 "__array_greater"
6606 PARAMS_DESC@9650..9662
6607 L_PAREN@9650..9651 "("
6608 PARAM@9651..9655
6609 DESTRUCT_FULL@9651..9655
6610 NAME@9651..9655
6611 IDENT@9651..9655 "arr1"
6612 COMMA@9655..9656 ","
6613 WHITESPACE@9656..9657 " "
6614 PARAM@9657..9661
6615 DESTRUCT_FULL@9657..9661
6616 NAME@9657..9661
6617 IDENT@9657..9661 "arr2"
6618 R_PAREN@9661..9662 ")"
6619 COLONCOLON@9662..9664 "::"
6620 WHITESPACE@9664..9665 " "
6621 EXPR_BINARY@9665..9701
6622 LHS_EXPR@9665..9696
6623 EXPR_APPLY@9665..9696
6624 EXPR_INDEX@9665..9684
6625 EXPR_VAR@9665..9668
6626 NAME@9665..9668
6627 IDENT@9665..9668 "std"
6628 DOT@9668..9669 "."
6629 NAME@9669..9684
6630 IDENT@9669..9684 "__compare_array"
6631 ARGS_DESC@9684..9696
6632 L_PAREN@9684..9685 "("
6633 ARG@9685..9689
6634 EXPR_VAR@9685..9689
6635 NAME@9685..9689
6636 IDENT@9685..9689 "arr1"
6637 COMMA@9689..9690 ","
6638 WHITESPACE@9690..9691 " "
6639 ARG@9691..9695
6640 EXPR_VAR@9691..9695
6641 NAME@9691..9695
6642 IDENT@9691..9695 "arr2"
6643 R_PAREN@9695..9696 ")"
6644 WHITESPACE@9696..9697 " "
6645 EQ@9697..9699 "=="
6646 WHITESPACE@9699..9700 " "
6647 EXPR_NUMBER@9700..9701
6648 FLOAT@9700..9701 "1"
6649 COMMA@9701..9702 ","
6650 WHITESPACE@9702..9705 "\n "
6651 MEMBER_FIELD_METHOD@9705..9777
6652 FIELD_NAME_FIXED@9705..9726
6653 NAME@9705..9726
6654 IDENT@9705..9726 "__array_less_or_equal"
6655 PARAMS_DESC@9726..9738
6656 L_PAREN@9726..9727 "("
6657 PARAM@9727..9731
6658 DESTRUCT_FULL@9727..9731
6659 NAME@9727..9731
6660 IDENT@9727..9731 "arr1"
6661 COMMA@9731..9732 ","
6662 WHITESPACE@9732..9733 " "
6663 PARAM@9733..9737
6664 DESTRUCT_FULL@9733..9737
6665 NAME@9733..9737
6666 IDENT@9733..9737 "arr2"
6667 R_PAREN@9737..9738 ")"
6668 COLONCOLON@9738..9740 "::"
6669 WHITESPACE@9740..9741 " "
6670 EXPR_BINARY@9741..9777
6671 LHS_EXPR@9741..9772
6672 EXPR_APPLY@9741..9772
6673 EXPR_INDEX@9741..9760
6674 EXPR_VAR@9741..9744
6675 NAME@9741..9744
6676 IDENT@9741..9744 "std"
6677 DOT@9744..9745 "."
6678 NAME@9745..9760
6679 IDENT@9745..9760 "__compare_array"
6680 ARGS_DESC@9760..9772
6681 L_PAREN@9760..9761 "("
6682 ARG@9761..9765
6683 EXPR_VAR@9761..9765
6684 NAME@9761..9765
6685 IDENT@9761..9765 "arr1"
6686 COMMA@9765..9766 ","
6687 WHITESPACE@9766..9767 " "
6688 ARG@9767..9771
6689 EXPR_VAR@9767..9771
6690 NAME@9767..9771
6691 IDENT@9767..9771 "arr2"
6692 R_PAREN@9771..9772 ")"
6693 WHITESPACE@9772..9773 " "
6694 LE@9773..9775 "<="
6695 WHITESPACE@9775..9776 " "
6696 EXPR_NUMBER@9776..9777
6697 FLOAT@9776..9777 "0"
6698 COMMA@9777..9778 ","
6699 WHITESPACE@9778..9781 "\n "
6700 MEMBER_FIELD_METHOD@9781..9856
6701 FIELD_NAME_FIXED@9781..9805
6702 NAME@9781..9805
6703 IDENT@9781..9805 "__array_greater_or_equal"
6704 PARAMS_DESC@9805..9817
6705 L_PAREN@9805..9806 "("
6706 PARAM@9806..9810
6707 DESTRUCT_FULL@9806..9810
6708 NAME@9806..9810
6709 IDENT@9806..9810 "arr1"
6710 COMMA@9810..9811 ","
6711 WHITESPACE@9811..9812 " "
6712 PARAM@9812..9816
6713 DESTRUCT_FULL@9812..9816
6714 NAME@9812..9816
6715 IDENT@9812..9816 "arr2"
6716 R_PAREN@9816..9817 ")"
6717 COLONCOLON@9817..9819 "::"
6718 WHITESPACE@9819..9820 " "
6719 EXPR_BINARY@9820..9856
6720 LHS_EXPR@9820..9851
6721 EXPR_APPLY@9820..9851
6722 EXPR_INDEX@9820..9839
6723 EXPR_VAR@9820..9823
6724 NAME@9820..9823
6725 IDENT@9820..9823 "std"
6726 DOT@9823..9824 "."
6727 NAME@9824..9839
6728 IDENT@9824..9839 "__compare_array"
6729 ARGS_DESC@9839..9851
6730 L_PAREN@9839..9840 "("
6731 ARG@9840..9844
6732 EXPR_VAR@9840..9844
6733 NAME@9840..9844
6734 IDENT@9840..9844 "arr1"
6735 COMMA@9844..9845 ","
6736 WHITESPACE@9845..9846 " "
6737 ARG@9846..9850
6738 EXPR_VAR@9846..9850
6739 NAME@9846..9850
6740 IDENT@9846..9850 "arr2"
6741 R_PAREN@9850..9851 ")"
6742 WHITESPACE@9851..9852 " "
6743 GE@9852..9854 ">="
6744 WHITESPACE@9854..9855 " "
6745 EXPR_NUMBER@9855..9856
6746 FLOAT@9855..9856 "0"
6747 COMMA@9856..9857 ","
6748 WHITESPACE@9857..9858 "\n"
6749 R_BRACE@9858..9859 "}"
6750 WHITESPACE@9859..9860 "\n"
67515687
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__str_block_missing_indent.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__str_block_missing_indent.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__str_block_missing_indent.snap
@@ -3,6 +3,6 @@
 expression: "|||\n"
 ---
 SOURCE_FILE@0..4
-  EXPR_STRING@0..4
-    ERROR_STRING_BLOCK_MISSING_INDENT@0..4 "|||\n"
-
+  EXPR@0..4
+    EXPR_STRING@0..4
+      ERROR_STRING_BLOCK_MISSING_INDENT@0..4 "|||\n"
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__str_block_missing_indent_text.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__str_block_missing_indent_text.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__str_block_missing_indent_text.snap
@@ -3,6 +3,6 @@
 expression: "|||\nhello\n"
 ---
 SOURCE_FILE@0..10
-  EXPR_STRING@0..10
-    ERROR_STRING_BLOCK_MISSING_INDENT@0..10 "|||\nhello\n"
-
+  EXPR@0..10
+    EXPR_STRING@0..10
+      ERROR_STRING_BLOCK_MISSING_INDENT@0..10 "|||\nhello\n"
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__str_block_missing_newline.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__str_block_missing_newline.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__str_block_missing_newline.snap
@@ -3,6 +3,6 @@
 expression: "|||hello\n"
 ---
 SOURCE_FILE@0..9
-  EXPR_STRING@0..9
-    ERROR_STRING_BLOCK_MISSING_NEW_LINE@0..9 "|||hello\n"
-
+  EXPR@0..9
+    EXPR_STRING@0..9
+      ERROR_STRING_BLOCK_MISSING_NEW_LINE@0..9 "|||hello\n"
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__str_block_missing_termination.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__str_block_missing_termination.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__str_block_missing_termination.snap
@@ -3,6 +3,6 @@
 expression: "|||\n\thello\n"
 ---
 SOURCE_FILE@0..11
-  EXPR_STRING@0..11
-    ERROR_STRING_BLOCK_UNEXPECTED_END@0..11 "|||\n\thello\n"
-
+  EXPR@0..11
+    EXPR_STRING@0..11
+      ERROR_STRING_BLOCK_UNEXPECTED_END@0..11 "|||\n\thello\n"
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__unexpected_destruct.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__unexpected_destruct.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__unexpected_destruct.snap
@@ -3,22 +3,24 @@
 expression: "local * = 1;\na\n"
 ---
 SOURCE_FILE@0..15
-  STMT_LOCAL@0..12
-    LOCAL_KW@0..5 "local"
-    WHITESPACE@5..6 " "
-    BIND_DESTRUCT@6..11
-      ERROR_UNEXPECTED_TOKEN@6..7
-        MUL@6..7 "*"
-      WHITESPACE@7..8 " "
-      ASSIGN@8..9 "="
-      WHITESPACE@9..10 " "
-      EXPR_NUMBER@10..11
-        FLOAT@10..11 "1"
-    SEMI@11..12 ";"
-  WHITESPACE@12..13 "\n"
-  EXPR_VAR@13..14
-    NAME@13..14
-      IDENT@13..14 "a"
+  EXPR@0..14
+    STMT_LOCAL@0..12
+      LOCAL_KW@0..5 "local"
+      WHITESPACE@5..6 " "
+      BIND_DESTRUCT@6..11
+        ERROR_UNEXPECTED_TOKEN@6..7
+          MUL@6..7 "*"
+        WHITESPACE@7..8 " "
+        ASSIGN@8..9 "="
+        WHITESPACE@9..10 " "
+        EXPR@10..11
+          EXPR_NUMBER@10..11
+            FLOAT@10..11 "1"
+      SEMI@11..12 ";"
+    WHITESPACE@12..13 "\n"
+    EXPR_VAR@13..14
+      NAME@13..14
+        IDENT@13..14 "a"
   WHITESPACE@14..15 "\n"
 ===
 LocatedSyntaxError { error: Unexpected { expected: Named("destruction specifier"), found: MUL }, range: 6..7 }
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__wrong_field_end.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__wrong_field_end.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__wrong_field_end.snap
@@ -3,33 +3,36 @@
 expression: "{\n\ta: 1;\n\tb: 2;\n}\n"
 ---
 SOURCE_FILE@0..18
-  EXPR_OBJECT@0..17
-    OBJ_BODY_MEMBER_LIST@0..17
-      L_BRACE@0..1 "{"
-      WHITESPACE@1..3 "\n\t"
-      MEMBER_FIELD_NORMAL@3..7
-        FIELD_NAME_FIXED@3..4
-          NAME@3..4
-            IDENT@3..4 "a"
-        COLON@4..5 ":"
-        WHITESPACE@5..6 " "
-        EXPR_NUMBER@6..7
-          FLOAT@6..7 "1"
-      ERROR_UNEXPECTED_TOKEN@7..8
-        SEMI@7..8 ";"
-      WHITESPACE@8..10 "\n\t"
-      MEMBER_FIELD_NORMAL@10..14
-        FIELD_NAME_FIXED@10..11
-          NAME@10..11
-            IDENT@10..11 "b"
-        COLON@11..12 ":"
-        WHITESPACE@12..13 " "
-        EXPR_NUMBER@13..14
-          FLOAT@13..14 "2"
-      ERROR_UNEXPECTED_TOKEN@14..15
-        SEMI@14..15 ";"
-      WHITESPACE@15..16 "\n"
-      R_BRACE@16..17 "}"
+  EXPR@0..17
+    EXPR_OBJECT@0..17
+      OBJ_BODY_MEMBER_LIST@0..17
+        L_BRACE@0..1 "{"
+        WHITESPACE@1..3 "\n\t"
+        MEMBER_FIELD_NORMAL@3..7
+          FIELD_NAME_FIXED@3..4
+            NAME@3..4
+              IDENT@3..4 "a"
+          COLON@4..5 ":"
+          WHITESPACE@5..6 " "
+          EXPR@6..7
+            EXPR_NUMBER@6..7
+              FLOAT@6..7 "1"
+        ERROR_UNEXPECTED_TOKEN@7..8
+          SEMI@7..8 ";"
+        WHITESPACE@8..10 "\n\t"
+        MEMBER_FIELD_NORMAL@10..14
+          FIELD_NAME_FIXED@10..11
+            NAME@10..11
+              IDENT@10..11 "b"
+          COLON@11..12 ":"
+          WHITESPACE@12..13 " "
+          EXPR@13..14
+            EXPR_NUMBER@13..14
+              FLOAT@13..14 "2"
+        ERROR_UNEXPECTED_TOKEN@14..15
+          SEMI@14..15 ";"
+        WHITESPACE@15..16 "\n"
+        R_BRACE@16..17 "}"
   WHITESPACE@17..18 "\n"
 ===
 LocatedSyntaxError { error: Unexpected { expected: Named("comma"), found: SEMI }, range: 7..8 }
modifiedcrates/jrsonnet-rowan-parser/src/tests.rsdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/tests.rs
+++ b/crates/jrsonnet-rowan-parser/src/tests.rs
@@ -72,7 +72,7 @@
 			styles: ThemeStyles::none(),
 		});
 
-		write!(out, "===").unwrap();
+		writeln!(out, "===").unwrap();
 		handler
 			.render_report(&mut out, &diag)
 			.expect("fmt error?..");
modifiedxtask/src/sourcegen/ast.rsdiffbeforeafterboth
--- a/xtask/src/sourcegen/ast.rs
+++ b/xtask/src/sourcegen/ast.rs
@@ -149,7 +149,7 @@
 					let mut types = HashMap::new();
 					for field in fields.iter().filter(|f| f.token_name().is_none()) {
 						if let Some(old) = types.insert(field.ty(), field.method_name(kinds)) {
-							panic!("{name}.{} has same type as {name}.{}, resolve conflict by wrapping one field: {}", old, field.method_name(kinds), field.ty());
+							// panic!("{name}.{} has same type as {name}.{}, resolve conflict by wrapping one field: {}", old, field.method_name(kinds), field.ty());
 						}
 						// TODO: check for assignable field types, i.e you can have
 						// ```
modifiedxtask/src/sourcegen/kinds.rsdiffbeforeafterboth
--- a/xtask/src/sourcegen/kinds.rs
+++ b/xtask/src/sourcegen/kinds.rs
@@ -212,6 +212,7 @@
 	let mut kinds = KindsSrc::new();
 	define_kinds![kinds =
 		"||" => "OR";
+		"??" => "NULL_COAELSE";
 		"&&" => "AND";
 		"|" => "BIT_OR";
 		"^" => "BIT_XOR";