git.delta.rocks / jrsonnet / refs/commits / a7bbbb48a2fd

difftreelog

feat try to parse locals as statements, not as expressions

Yaroslav Bolyukin2023-09-04parent: #e17e60d.patch.diff
in: master

13 files changed

modifiedcrates/jrsonnet-rowan-parser/jsonnet.ungramdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/jsonnet.ungram
+++ b/crates/jrsonnet-rowan-parser/jsonnet.ungram
@@ -65,11 +65,6 @@
 
 ExprVar =
     name:Name
-ExprLocal =
-    'local'
-    (Bind (',' Bind)* ','?)
-    ';'
-    Expr
 
 ExprIfThenElse =
     'if'
@@ -92,7 +87,15 @@
     'error'
     Expr
 
+StmtLocal =
+    'local'
+    (Bind (',' Bind)* ','?)
+    ';'
+
 Expr =
+    StmtLocal*
+    ExprBase
+ExprBase =
     ExprBinary
 |   ExprUnary
 |   ExprSlice
@@ -109,7 +112,6 @@
 |   ExprArrayComp
 |   ExprImport
 |   ExprVar
-|   ExprLocal
 |   ExprIfThenElse
 |   ExprFunction
 |   ExprAssert
modifiedcrates/jrsonnet-rowan-parser/src/generated/nodes.rsdiffbeforeafterboth
18 }18 }
19}19}
20
21#[derive(Debug, Clone, PartialEq, Eq, Hash)]
22pub struct Expr {
23 pub(crate) syntax: SyntaxNode,
24}
25impl Expr {
26 pub fn stmt_locals(&self) -> AstChildren<StmtLocal> {
27 support::children(&self.syntax)
28 }
29 pub fn expr_base(&self) -> Option<ExprBase> {
30 support::child(&self.syntax)
31 }
32}
2033
21#[derive(Debug, Clone, PartialEq, Eq, Hash)]34#[derive(Debug, Clone, PartialEq, Eq, Hash)]
22pub struct ExprBinary {35pub struct ExprBinary {
302 }315 }
303}316}
304
305#[derive(Debug, Clone, PartialEq, Eq, Hash)]
306pub struct ExprLocal {
307 pub(crate) syntax: SyntaxNode,
308}
309impl ExprLocal {
310 pub fn local_kw_token(&self) -> Option<SyntaxToken> {
311 support::token(&self.syntax, T![local])
312 }
313 pub fn binds(&self) -> AstChildren<Bind> {
314 support::children(&self.syntax)
315 }
316 pub fn semi_token(&self) -> Option<SyntaxToken> {
317 support::token(&self.syntax, T![;])
318 }
319 pub fn expr(&self) -> Option<Expr> {
320 support::child(&self.syntax)
321 }
322}
323317
324#[derive(Debug, Clone, PartialEq, Eq, Hash)]318#[derive(Debug, Clone, PartialEq, Eq, Hash)]
325pub struct ExprIfThenElse {319pub struct ExprIfThenElse {
452 }446 }
453}447}
448
449#[derive(Debug, Clone, PartialEq, Eq, Hash)]
450pub struct StmtLocal {
451 pub(crate) syntax: SyntaxNode,
452}
453impl StmtLocal {
454 pub fn local_kw_token(&self) -> Option<SyntaxToken> {
455 support::token(&self.syntax, T![local])
456 }
457 pub fn binds(&self) -> AstChildren<Bind> {
458 support::children(&self.syntax)
459 }
460 pub fn semi_token(&self) -> Option<SyntaxToken> {
461 support::token(&self.syntax, T![;])
462 }
463}
454464
455#[derive(Debug, Clone, PartialEq, Eq, Hash)]465#[derive(Debug, Clone, PartialEq, Eq, Hash)]
456pub struct SliceDescEnd {466pub struct SliceDescEnd {
809 }819 }
810}820}
811
812#[derive(Debug, Clone, PartialEq, Eq, Hash)]
813pub enum Expr {
814 ExprBinary(ExprBinary),
815 ExprUnary(ExprUnary),
816 ExprSlice(ExprSlice),
817 ExprIndex(ExprIndex),
818 ExprIndexExpr(ExprIndexExpr),
819 ExprApply(ExprApply),
820 ExprObjExtend(ExprObjExtend),
821 ExprParened(ExprParened),
822 ExprString(ExprString),
823 ExprNumber(ExprNumber),
824 ExprLiteral(ExprLiteral),
825 ExprArray(ExprArray),
826 ExprObject(ExprObject),
827 ExprArrayComp(ExprArrayComp),
828 ExprImport(ExprImport),
829 ExprVar(ExprVar),
830 ExprLocal(ExprLocal),
831 ExprIfThenElse(ExprIfThenElse),
832 ExprFunction(ExprFunction),
833 ExprAssert(ExprAssert),
834 ExprError(ExprError),
835}
836821
837#[derive(Debug, Clone, PartialEq, Eq, Hash)]822#[derive(Debug, Clone, PartialEq, Eq, Hash)]
838pub enum ObjBody {823pub enum ObjBody {
852 BindFunction(BindFunction),837 BindFunction(BindFunction),
853}838}
839
840#[derive(Debug, Clone, PartialEq, Eq, Hash)]
841pub enum ExprBase {
842 ExprBinary(ExprBinary),
843 ExprUnary(ExprUnary),
844 ExprSlice(ExprSlice),
845 ExprIndex(ExprIndex),
846 ExprIndexExpr(ExprIndexExpr),
847 ExprApply(ExprApply),
848 ExprObjExtend(ExprObjExtend),
849 ExprParened(ExprParened),
850 ExprString(ExprString),
851 ExprNumber(ExprNumber),
852 ExprLiteral(ExprLiteral),
853 ExprArray(ExprArray),
854 ExprObject(ExprObject),
855 ExprArrayComp(ExprArrayComp),
856 ExprImport(ExprImport),
857 ExprVar(ExprVar),
858 ExprIfThenElse(ExprIfThenElse),
859 ExprFunction(ExprFunction),
860 ExprAssert(ExprAssert),
861 ExprError(ExprError),
862}
854863
855#[derive(Debug, Clone, PartialEq, Eq, Hash)]864#[derive(Debug, Clone, PartialEq, Eq, Hash)]
856pub enum MemberComp {865pub enum MemberComp {
1054 &self.syntax1063 &self.syntax
1055 }1064 }
1056}1065}
1066impl AstNode for Expr {
1067 fn can_cast(kind: SyntaxKind) -> bool {
1068 kind == EXPR
1069 }
1070 fn cast(syntax: SyntaxNode) -> Option<Self> {
1071 if Self::can_cast(syntax.kind()) {
1072 Some(Self { syntax })
1073 } else {
1074 None
1075 }
1076 }
1077 fn syntax(&self) -> &SyntaxNode {
1078 &self.syntax
1079 }
1080}
1057impl AstNode for ExprBinary {1081impl AstNode for ExprBinary {
1058 fn can_cast(kind: SyntaxKind) -> bool {1082 fn can_cast(kind: SyntaxKind) -> bool {
1059 kind == EXPR_BINARY1083 kind == EXPR_BINARY
1354 &self.syntax1378 &self.syntax
1355 }1379 }
1356}1380}
1357impl AstNode for ExprLocal {
1358 fn can_cast(kind: SyntaxKind) -> bool {
1359 kind == EXPR_LOCAL
1360 }
1361 fn cast(syntax: SyntaxNode) -> Option<Self> {
1362 if Self::can_cast(syntax.kind()) {
1363 Some(Self { syntax })
1364 } else {
1365 None
1366 }
1367 }
1368 fn syntax(&self) -> &SyntaxNode {
1369 &self.syntax
1370 }
1371}
1372impl AstNode for ExprIfThenElse {1381impl AstNode for ExprIfThenElse {
1373 fn can_cast(kind: SyntaxKind) -> bool {1382 fn can_cast(kind: SyntaxKind) -> bool {
1374 kind == EXPR_IF_THEN_ELSE1383 kind == EXPR_IF_THEN_ELSE
1489 &self.syntax1498 &self.syntax
1490 }1499 }
1491}1500}
1501impl AstNode for StmtLocal {
1502 fn can_cast(kind: SyntaxKind) -> bool {
1503 kind == STMT_LOCAL
1504 }
1505 fn cast(syntax: SyntaxNode) -> Option<Self> {
1506 if Self::can_cast(syntax.kind()) {
1507 Some(Self { syntax })
1508 } else {
1509 None
1510 }
1511 }
1512 fn syntax(&self) -> &SyntaxNode {
1513 &self.syntax
1514 }
1515}
1492impl AstNode for SliceDescEnd {1516impl AstNode for SliceDescEnd {
1493 fn can_cast(kind: SyntaxKind) -> bool {1517 fn can_cast(kind: SyntaxKind) -> bool {
1494 kind == SLICE_DESC_END1518 kind == SLICE_DESC_END
1849 &self.syntax1873 &self.syntax
1850 }1874 }
1851}1875}
1852impl From<ExprBinary> for Expr {
1853 fn from(node: ExprBinary) -> Expr {
1854 Expr::ExprBinary(node)
1855 }
1856}
1857impl From<ExprUnary> for Expr {
1858 fn from(node: ExprUnary) -> Expr {
1859 Expr::ExprUnary(node)
1860 }
1861}
1862impl From<ExprSlice> for Expr {
1863 fn from(node: ExprSlice) -> Expr {
1864 Expr::ExprSlice(node)
1865 }
1866}
1867impl From<ExprIndex> for Expr {
1868 fn from(node: ExprIndex) -> Expr {
1869 Expr::ExprIndex(node)
1870 }
1871}
1872impl From<ExprIndexExpr> for Expr {
1873 fn from(node: ExprIndexExpr) -> Expr {
1874 Expr::ExprIndexExpr(node)
1875 }
1876}
1877impl From<ExprApply> for Expr {
1878 fn from(node: ExprApply) -> Expr {
1879 Expr::ExprApply(node)
1880 }
1881}
1882impl From<ExprObjExtend> for Expr {
1883 fn from(node: ExprObjExtend) -> Expr {
1884 Expr::ExprObjExtend(node)
1885 }
1886}
1887impl From<ExprParened> for Expr {
1888 fn from(node: ExprParened) -> Expr {
1889 Expr::ExprParened(node)
1890 }
1891}
1892impl From<ExprString> for Expr {
1893 fn from(node: ExprString) -> Expr {
1894 Expr::ExprString(node)
1895 }
1896}
1897impl From<ExprNumber> for Expr {
1898 fn from(node: ExprNumber) -> Expr {
1899 Expr::ExprNumber(node)
1900 }
1901}
1902impl From<ExprLiteral> for Expr {
1903 fn from(node: ExprLiteral) -> Expr {
1904 Expr::ExprLiteral(node)
1905 }
1906}
1907impl From<ExprArray> for Expr {
1908 fn from(node: ExprArray) -> Expr {
1909 Expr::ExprArray(node)
1910 }
1911}
1912impl From<ExprObject> for Expr {
1913 fn from(node: ExprObject) -> Expr {
1914 Expr::ExprObject(node)
1915 }
1916}
1917impl From<ExprArrayComp> for Expr {
1918 fn from(node: ExprArrayComp) -> Expr {
1919 Expr::ExprArrayComp(node)
1920 }
1921}
1922impl From<ExprImport> for Expr {
1923 fn from(node: ExprImport) -> Expr {
1924 Expr::ExprImport(node)
1925 }
1926}
1927impl From<ExprVar> for Expr {
1928 fn from(node: ExprVar) -> Expr {
1929 Expr::ExprVar(node)
1930 }
1931}
1932impl From<ExprLocal> for Expr {
1933 fn from(node: ExprLocal) -> Expr {
1934 Expr::ExprLocal(node)
1935 }
1936}
1937impl From<ExprIfThenElse> for Expr {
1938 fn from(node: ExprIfThenElse) -> Expr {
1939 Expr::ExprIfThenElse(node)
1940 }
1941}
1942impl From<ExprFunction> for Expr {
1943 fn from(node: ExprFunction) -> Expr {
1944 Expr::ExprFunction(node)
1945 }
1946}
1947impl From<ExprAssert> for Expr {
1948 fn from(node: ExprAssert) -> Expr {
1949 Expr::ExprAssert(node)
1950 }
1951}
1952impl From<ExprError> for Expr {
1953 fn from(node: ExprError) -> Expr {
1954 Expr::ExprError(node)
1955 }
1956}
1957impl AstNode for Expr {
1958 fn can_cast(kind: SyntaxKind) -> bool {
1959 match kind {
1960 EXPR_BINARY | EXPR_UNARY | EXPR_SLICE | EXPR_INDEX | EXPR_INDEX_EXPR | EXPR_APPLY
1961 | EXPR_OBJ_EXTEND | EXPR_PARENED | EXPR_STRING | EXPR_NUMBER | EXPR_LITERAL
1962 | EXPR_ARRAY | EXPR_OBJECT | EXPR_ARRAY_COMP | EXPR_IMPORT | EXPR_VAR | EXPR_LOCAL
1963 | EXPR_IF_THEN_ELSE | EXPR_FUNCTION | EXPR_ASSERT | EXPR_ERROR => true,
1964 _ => false,
1965 }
1966 }
1967 fn cast(syntax: SyntaxNode) -> Option<Self> {
1968 let res = match syntax.kind() {
1969 EXPR_BINARY => Expr::ExprBinary(ExprBinary { syntax }),
1970 EXPR_UNARY => Expr::ExprUnary(ExprUnary { syntax }),
1971 EXPR_SLICE => Expr::ExprSlice(ExprSlice { syntax }),
1972 EXPR_INDEX => Expr::ExprIndex(ExprIndex { syntax }),
1973 EXPR_INDEX_EXPR => Expr::ExprIndexExpr(ExprIndexExpr { syntax }),
1974 EXPR_APPLY => Expr::ExprApply(ExprApply { syntax }),
1975 EXPR_OBJ_EXTEND => Expr::ExprObjExtend(ExprObjExtend { syntax }),
1976 EXPR_PARENED => Expr::ExprParened(ExprParened { syntax }),
1977 EXPR_STRING => Expr::ExprString(ExprString { syntax }),
1978 EXPR_NUMBER => Expr::ExprNumber(ExprNumber { syntax }),
1979 EXPR_LITERAL => Expr::ExprLiteral(ExprLiteral { syntax }),
1980 EXPR_ARRAY => Expr::ExprArray(ExprArray { syntax }),
1981 EXPR_OBJECT => Expr::ExprObject(ExprObject { syntax }),
1982 EXPR_ARRAY_COMP => Expr::ExprArrayComp(ExprArrayComp { syntax }),
1983 EXPR_IMPORT => Expr::ExprImport(ExprImport { syntax }),
1984 EXPR_VAR => Expr::ExprVar(ExprVar { syntax }),
1985 EXPR_LOCAL => Expr::ExprLocal(ExprLocal { syntax }),
1986 EXPR_IF_THEN_ELSE => Expr::ExprIfThenElse(ExprIfThenElse { syntax }),
1987 EXPR_FUNCTION => Expr::ExprFunction(ExprFunction { syntax }),
1988 EXPR_ASSERT => Expr::ExprAssert(ExprAssert { syntax }),
1989 EXPR_ERROR => Expr::ExprError(ExprError { syntax }),
1990 _ => return None,
1991 };
1992 Some(res)
1993 }
1994 fn syntax(&self) -> &SyntaxNode {
1995 match self {
1996 Expr::ExprBinary(it) => &it.syntax,
1997 Expr::ExprUnary(it) => &it.syntax,
1998 Expr::ExprSlice(it) => &it.syntax,
1999 Expr::ExprIndex(it) => &it.syntax,
2000 Expr::ExprIndexExpr(it) => &it.syntax,
2001 Expr::ExprApply(it) => &it.syntax,
2002 Expr::ExprObjExtend(it) => &it.syntax,
2003 Expr::ExprParened(it) => &it.syntax,
2004 Expr::ExprString(it) => &it.syntax,
2005 Expr::ExprNumber(it) => &it.syntax,
2006 Expr::ExprLiteral(it) => &it.syntax,
2007 Expr::ExprArray(it) => &it.syntax,
2008 Expr::ExprObject(it) => &it.syntax,
2009 Expr::ExprArrayComp(it) => &it.syntax,
2010 Expr::ExprImport(it) => &it.syntax,
2011 Expr::ExprVar(it) => &it.syntax,
2012 Expr::ExprLocal(it) => &it.syntax,
2013 Expr::ExprIfThenElse(it) => &it.syntax,
2014 Expr::ExprFunction(it) => &it.syntax,
2015 Expr::ExprAssert(it) => &it.syntax,
2016 Expr::ExprError(it) => &it.syntax,
2017 }
2018 }
2019}
2020impl From<ObjBodyComp> for ObjBody {1876impl From<ObjBodyComp> for ObjBody {
2021 fn from(node: ObjBodyComp) -> ObjBody {1877 fn from(node: ObjBodyComp) -> ObjBody {
2022 ObjBody::ObjBodyComp(node)1878 ObjBody::ObjBodyComp(node)
2113 }1969 }
2114 }1970 }
2115}1971}
1972impl From<ExprBinary> for ExprBase {
1973 fn from(node: ExprBinary) -> ExprBase {
1974 ExprBase::ExprBinary(node)
1975 }
1976}
1977impl From<ExprUnary> for ExprBase {
1978 fn from(node: ExprUnary) -> ExprBase {
1979 ExprBase::ExprUnary(node)
1980 }
1981}
1982impl From<ExprSlice> for ExprBase {
1983 fn from(node: ExprSlice) -> ExprBase {
1984 ExprBase::ExprSlice(node)
1985 }
1986}
1987impl From<ExprIndex> for ExprBase {
1988 fn from(node: ExprIndex) -> ExprBase {
1989 ExprBase::ExprIndex(node)
1990 }
1991}
1992impl From<ExprIndexExpr> for ExprBase {
1993 fn from(node: ExprIndexExpr) -> ExprBase {
1994 ExprBase::ExprIndexExpr(node)
1995 }
1996}
1997impl From<ExprApply> for ExprBase {
1998 fn from(node: ExprApply) -> ExprBase {
1999 ExprBase::ExprApply(node)
2000 }
2001}
2002impl From<ExprObjExtend> for ExprBase {
2003 fn from(node: ExprObjExtend) -> ExprBase {
2004 ExprBase::ExprObjExtend(node)
2005 }
2006}
2007impl From<ExprParened> for ExprBase {
2008 fn from(node: ExprParened) -> ExprBase {
2009 ExprBase::ExprParened(node)
2010 }
2011}
2012impl From<ExprString> for ExprBase {
2013 fn from(node: ExprString) -> ExprBase {
2014 ExprBase::ExprString(node)
2015 }
2016}
2017impl From<ExprNumber> for ExprBase {
2018 fn from(node: ExprNumber) -> ExprBase {
2019 ExprBase::ExprNumber(node)
2020 }
2021}
2022impl From<ExprLiteral> for ExprBase {
2023 fn from(node: ExprLiteral) -> ExprBase {
2024 ExprBase::ExprLiteral(node)
2025 }
2026}
2027impl From<ExprArray> for ExprBase {
2028 fn from(node: ExprArray) -> ExprBase {
2029 ExprBase::ExprArray(node)
2030 }
2031}
2032impl From<ExprObject> for ExprBase {
2033 fn from(node: ExprObject) -> ExprBase {
2034 ExprBase::ExprObject(node)
2035 }
2036}
2037impl From<ExprArrayComp> for ExprBase {
2038 fn from(node: ExprArrayComp) -> ExprBase {
2039 ExprBase::ExprArrayComp(node)
2040 }
2041}
2042impl From<ExprImport> for ExprBase {
2043 fn from(node: ExprImport) -> ExprBase {
2044 ExprBase::ExprImport(node)
2045 }
2046}
2047impl From<ExprVar> for ExprBase {
2048 fn from(node: ExprVar) -> ExprBase {
2049 ExprBase::ExprVar(node)
2050 }
2051}
2052impl From<ExprIfThenElse> for ExprBase {
2053 fn from(node: ExprIfThenElse) -> ExprBase {
2054 ExprBase::ExprIfThenElse(node)
2055 }
2056}
2057impl From<ExprFunction> for ExprBase {
2058 fn from(node: ExprFunction) -> ExprBase {
2059 ExprBase::ExprFunction(node)
2060 }
2061}
2062impl From<ExprAssert> for ExprBase {
2063 fn from(node: ExprAssert) -> ExprBase {
2064 ExprBase::ExprAssert(node)
2065 }
2066}
2067impl From<ExprError> for ExprBase {
2068 fn from(node: ExprError) -> ExprBase {
2069 ExprBase::ExprError(node)
2070 }
2071}
2072impl AstNode for ExprBase {
2073 fn can_cast(kind: SyntaxKind) -> bool {
2074 match kind {
2075 EXPR_BINARY | EXPR_UNARY | EXPR_SLICE | EXPR_INDEX | EXPR_INDEX_EXPR | EXPR_APPLY
2076 | EXPR_OBJ_EXTEND | EXPR_PARENED | EXPR_STRING | EXPR_NUMBER | EXPR_LITERAL
2077 | EXPR_ARRAY | EXPR_OBJECT | EXPR_ARRAY_COMP | EXPR_IMPORT | EXPR_VAR
2078 | EXPR_IF_THEN_ELSE | EXPR_FUNCTION | EXPR_ASSERT | EXPR_ERROR => true,
2079 _ => false,
2080 }
2081 }
2082 fn cast(syntax: SyntaxNode) -> Option<Self> {
2083 let res = match syntax.kind() {
2084 EXPR_BINARY => ExprBase::ExprBinary(ExprBinary { syntax }),
2085 EXPR_UNARY => ExprBase::ExprUnary(ExprUnary { syntax }),
2086 EXPR_SLICE => ExprBase::ExprSlice(ExprSlice { syntax }),
2087 EXPR_INDEX => ExprBase::ExprIndex(ExprIndex { syntax }),
2088 EXPR_INDEX_EXPR => ExprBase::ExprIndexExpr(ExprIndexExpr { syntax }),
2089 EXPR_APPLY => ExprBase::ExprApply(ExprApply { syntax }),
2090 EXPR_OBJ_EXTEND => ExprBase::ExprObjExtend(ExprObjExtend { syntax }),
2091 EXPR_PARENED => ExprBase::ExprParened(ExprParened { syntax }),
2092 EXPR_STRING => ExprBase::ExprString(ExprString { syntax }),
2093 EXPR_NUMBER => ExprBase::ExprNumber(ExprNumber { syntax }),
2094 EXPR_LITERAL => ExprBase::ExprLiteral(ExprLiteral { syntax }),
2095 EXPR_ARRAY => ExprBase::ExprArray(ExprArray { syntax }),
2096 EXPR_OBJECT => ExprBase::ExprObject(ExprObject { syntax }),
2097 EXPR_ARRAY_COMP => ExprBase::ExprArrayComp(ExprArrayComp { syntax }),
2098 EXPR_IMPORT => ExprBase::ExprImport(ExprImport { syntax }),
2099 EXPR_VAR => ExprBase::ExprVar(ExprVar { syntax }),
2100 EXPR_IF_THEN_ELSE => ExprBase::ExprIfThenElse(ExprIfThenElse { syntax }),
2101 EXPR_FUNCTION => ExprBase::ExprFunction(ExprFunction { syntax }),
2102 EXPR_ASSERT => ExprBase::ExprAssert(ExprAssert { syntax }),
2103 EXPR_ERROR => ExprBase::ExprError(ExprError { syntax }),
2104 _ => return None,
2105 };
2106 Some(res)
2107 }
2108 fn syntax(&self) -> &SyntaxNode {
2109 match self {
2110 ExprBase::ExprBinary(it) => &it.syntax,
2111 ExprBase::ExprUnary(it) => &it.syntax,
2112 ExprBase::ExprSlice(it) => &it.syntax,
2113 ExprBase::ExprIndex(it) => &it.syntax,
2114 ExprBase::ExprIndexExpr(it) => &it.syntax,
2115 ExprBase::ExprApply(it) => &it.syntax,
2116 ExprBase::ExprObjExtend(it) => &it.syntax,
2117 ExprBase::ExprParened(it) => &it.syntax,
2118 ExprBase::ExprString(it) => &it.syntax,
2119 ExprBase::ExprNumber(it) => &it.syntax,
2120 ExprBase::ExprLiteral(it) => &it.syntax,
2121 ExprBase::ExprArray(it) => &it.syntax,
2122 ExprBase::ExprObject(it) => &it.syntax,
2123 ExprBase::ExprArrayComp(it) => &it.syntax,
2124 ExprBase::ExprImport(it) => &it.syntax,
2125 ExprBase::ExprVar(it) => &it.syntax,
2126 ExprBase::ExprIfThenElse(it) => &it.syntax,
2127 ExprBase::ExprFunction(it) => &it.syntax,
2128 ExprBase::ExprAssert(it) => &it.syntax,
2129 ExprBase::ExprError(it) => &it.syntax,
2130 }
2131 }
2132}
2116impl From<MemberBindStmt> for MemberComp {2133impl From<MemberBindStmt> for MemberComp {
2117 fn from(node: MemberBindStmt) -> MemberComp {2134 fn from(node: MemberBindStmt) -> MemberComp {
2118 MemberComp::MemberBindStmt(node)2135 MemberComp::MemberBindStmt(node)
2725 std::fmt::Display::fmt(self.syntax(), f)2742 std::fmt::Display::fmt(self.syntax(), f)
2726 }2743 }
2727}2744}
2728impl std::fmt::Display for Expr {
2729 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
2730 std::fmt::Display::fmt(self.syntax(), f)
2731 }
2732}
2733impl std::fmt::Display for ObjBody {2745impl std::fmt::Display for ObjBody {
2734 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2746 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
2735 std::fmt::Display::fmt(self.syntax(), f)2747 std::fmt::Display::fmt(self.syntax(), f)
2745 std::fmt::Display::fmt(self.syntax(), f)2757 std::fmt::Display::fmt(self.syntax(), f)
2746 }2758 }
2747}2759}
2760impl std::fmt::Display for ExprBase {
2761 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
2762 std::fmt::Display::fmt(self.syntax(), f)
2763 }
2764}
2748impl std::fmt::Display for MemberComp {2765impl std::fmt::Display for MemberComp {
2749 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2766 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
2750 std::fmt::Display::fmt(self.syntax(), f)2767 std::fmt::Display::fmt(self.syntax(), f)
2775 std::fmt::Display::fmt(self.syntax(), f)2792 std::fmt::Display::fmt(self.syntax(), f)
2776 }2793 }
2777}2794}
2795impl std::fmt::Display for Expr {
2796 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
2797 std::fmt::Display::fmt(self.syntax(), f)
2798 }
2799}
2778impl std::fmt::Display for ExprBinary {2800impl std::fmt::Display for ExprBinary {
2779 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2801 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
2780 std::fmt::Display::fmt(self.syntax(), f)2802 std::fmt::Display::fmt(self.syntax(), f)
2875 std::fmt::Display::fmt(self.syntax(), f)2897 std::fmt::Display::fmt(self.syntax(), f)
2876 }2898 }
2877}2899}
2878impl std::fmt::Display for ExprLocal {
2879 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
2880 std::fmt::Display::fmt(self.syntax(), f)
2881 }
2882}
2883impl std::fmt::Display for ExprIfThenElse {2900impl std::fmt::Display for ExprIfThenElse {
2884 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2901 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
2885 std::fmt::Display::fmt(self.syntax(), f)2902 std::fmt::Display::fmt(self.syntax(), f)
2920 std::fmt::Display::fmt(self.syntax(), f)2937 std::fmt::Display::fmt(self.syntax(), f)
2921 }2938 }
2922}2939}
2940impl std::fmt::Display for StmtLocal {
2941 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
2942 std::fmt::Display::fmt(self.syntax(), f)
2943 }
2944}
2923impl std::fmt::Display for SliceDescEnd {2945impl std::fmt::Display for SliceDescEnd {
2924 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2946 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
2925 std::fmt::Display::fmt(self.syntax(), f)2947 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
@@ -143,8 +143,6 @@
 	IMPORTBIN_KW,
 	#[token("import")]
 	IMPORT_KW,
-	#[token("local")]
-	LOCAL_KW,
 	#[token("if")]
 	IF_KW,
 	#[token("then")]
@@ -155,6 +153,8 @@
 	FUNCTION_KW,
 	#[token("error")]
 	ERROR_KW,
+	#[token("local")]
+	LOCAL_KW,
 	#[token("in")]
 	IN_KW,
 	META_OBJECT_APPLY,
@@ -180,6 +180,7 @@
 	#[error]
 	LEXING_ERROR,
 	SOURCE_FILE,
+	EXPR,
 	EXPR_BINARY,
 	LHS_EXPR,
 	EXPR_UNARY,
@@ -200,7 +201,6 @@
 	EXPR_ARRAY_COMP,
 	EXPR_IMPORT,
 	EXPR_VAR,
-	EXPR_LOCAL,
 	EXPR_IF_THEN_ELSE,
 	TRUE_EXPR,
 	FALSE_EXPR,
@@ -209,6 +209,7 @@
 	EXPR_ASSERT,
 	ASSERTION,
 	EXPR_ERROR,
+	STMT_LOCAL,
 	SLICE_DESC_END,
 	SLICE_DESC_STEP,
 	ARG,
@@ -233,10 +234,10 @@
 	DESTRUCT_OBJECT_FIELD,
 	DESTRUCT_REST,
 	DESTRUCT_ARRAY_ELEMENT,
-	EXPR,
 	OBJ_BODY,
 	COMP_SPEC,
 	BIND,
+	EXPR_BASE,
 	MEMBER_COMP,
 	MEMBER,
 	FIELD_NAME,
@@ -262,17 +263,17 @@
 			| PLUS | MINUS | MUL | DIV | MODULO | NOT | BIT_NOT | L_BRACK | R_BRACK | L_PAREN
 			| R_PAREN | L_BRACE | R_BRACE | COLON | COLONCOLON | COLONCOLONCOLON | SEMI | DOT
 			| DOTDOTDOT | COMMA | DOLLAR | ASSIGN | QUESTION_MARK | TAILSTRICT_KW
-			| IMPORTSTR_KW | IMPORTBIN_KW | IMPORT_KW | LOCAL_KW | IF_KW | THEN_KW | ELSE_KW
-			| FUNCTION_KW | ERROR_KW | IN_KW | NULL_KW | TRUE_KW | FALSE_KW | SELF_KW
-			| SUPER_KW | FOR_KW | ASSERT_KW => true,
+			| IMPORTSTR_KW | IMPORTBIN_KW | IMPORT_KW | IF_KW | THEN_KW | ELSE_KW | FUNCTION_KW
+			| ERROR_KW | LOCAL_KW | IN_KW | NULL_KW | TRUE_KW | FALSE_KW | SELF_KW | SUPER_KW
+			| FOR_KW | ASSERT_KW => true,
 			_ => false,
 		}
 	}
 	pub fn is_enum(self) -> bool {
 		match self {
-			EXPR | OBJ_BODY | COMP_SPEC | BIND | MEMBER_COMP | MEMBER | FIELD_NAME | DESTRUCT
-			| DESTRUCT_ARRAY_PART | BINARY_OPERATOR | UNARY_OPERATOR | LITERAL | TEXT | NUMBER
-			| IMPORT_KIND | VISIBILITY | TRIVIA | CUSTOM_ERROR => true,
+			OBJ_BODY | COMP_SPEC | BIND | EXPR_BASE | MEMBER_COMP | MEMBER | FIELD_NAME
+			| DESTRUCT | DESTRUCT_ARRAY_PART | BINARY_OPERATOR | UNARY_OPERATOR | LITERAL
+			| TEXT | NUMBER | IMPORT_KIND | VISIBILITY | TRIVIA | CUSTOM_ERROR => true,
 			_ => false,
 		}
 	}
@@ -285,5 +286,5 @@
 	}
 }
 #[macro_export]
-macro_rules ! T { [||] => { $ crate :: SyntaxKind :: OR } ; [&&] => { $ crate :: SyntaxKind :: AND } ; [|] => { $ crate :: SyntaxKind :: BIT_OR } ; [^] => { $ crate :: SyntaxKind :: BIT_XOR } ; [&] => { $ crate :: SyntaxKind :: BIT_AND } ; [==] => { $ crate :: SyntaxKind :: EQ } ; [!=] => { $ crate :: SyntaxKind :: NE } ; [<] => { $ crate :: SyntaxKind :: LT } ; [>] => { $ crate :: SyntaxKind :: GT } ; [<=] => { $ crate :: SyntaxKind :: LE } ; [>=] => { $ crate :: SyntaxKind :: GE } ; [<<] => { $ crate :: SyntaxKind :: LHS } ; [>>] => { $ crate :: SyntaxKind :: RHS } ; [+] => { $ crate :: SyntaxKind :: PLUS } ; [-] => { $ crate :: SyntaxKind :: MINUS } ; [*] => { $ crate :: SyntaxKind :: MUL } ; [/] => { $ crate :: SyntaxKind :: DIV } ; [%] => { $ crate :: SyntaxKind :: MODULO } ; [!] => { $ crate :: SyntaxKind :: NOT } ; [~] => { $ crate :: SyntaxKind :: BIT_NOT } ; ['['] => { $ crate :: SyntaxKind :: L_BRACK } ; [']'] => { $ crate :: SyntaxKind :: R_BRACK } ; ['('] => { $ crate :: SyntaxKind :: L_PAREN } ; [')'] => { $ crate :: SyntaxKind :: R_PAREN } ; ['{'] => { $ crate :: SyntaxKind :: L_BRACE } ; ['}'] => { $ crate :: SyntaxKind :: R_BRACE } ; [:] => { $ crate :: SyntaxKind :: COLON } ; [::] => { $ crate :: SyntaxKind :: COLONCOLON } ; [:::] => { $ crate :: SyntaxKind :: COLONCOLONCOLON } ; [;] => { $ crate :: SyntaxKind :: SEMI } ; [.] => { $ crate :: SyntaxKind :: DOT } ; [...] => { $ crate :: SyntaxKind :: DOTDOTDOT } ; [,] => { $ crate :: SyntaxKind :: COMMA } ; ['$'] => { $ crate :: SyntaxKind :: DOLLAR } ; [=] => { $ crate :: SyntaxKind :: ASSIGN } ; [?] => { $ crate :: SyntaxKind :: QUESTION_MARK } ; [tailstrict] => { $ crate :: SyntaxKind :: TAILSTRICT_KW } ; [importstr] => { $ crate :: SyntaxKind :: IMPORTSTR_KW } ; [importbin] => { $ crate :: SyntaxKind :: IMPORTBIN_KW } ; [import] => { $ crate :: SyntaxKind :: IMPORT_KW } ; [local] => { $ crate :: SyntaxKind :: LOCAL_KW } ; [if] => { $ crate :: SyntaxKind :: IF_KW } ; [then] => { $ crate :: SyntaxKind :: THEN_KW } ; [else] => { $ crate :: SyntaxKind :: ELSE_KW } ; [function] => { $ crate :: SyntaxKind :: FUNCTION_KW } ; [error] => { $ crate :: SyntaxKind :: ERROR_KW } ; [in] => { $ crate :: SyntaxKind :: IN_KW } ; [null] => { $ crate :: SyntaxKind :: NULL_KW } ; [true] => { $ crate :: SyntaxKind :: TRUE_KW } ; [false] => { $ crate :: SyntaxKind :: FALSE_KW } ; [self] => { $ crate :: SyntaxKind :: SELF_KW } ; [super] => { $ crate :: SyntaxKind :: SUPER_KW } ; [for] => { $ crate :: SyntaxKind :: FOR_KW } ; [assert] => { $ crate :: SyntaxKind :: ASSERT_KW } }
+macro_rules ! T { [||] => { $ crate :: SyntaxKind :: OR } ; [&&] => { $ crate :: SyntaxKind :: AND } ; [|] => { $ crate :: SyntaxKind :: BIT_OR } ; [^] => { $ crate :: SyntaxKind :: BIT_XOR } ; [&] => { $ crate :: SyntaxKind :: BIT_AND } ; [==] => { $ crate :: SyntaxKind :: EQ } ; [!=] => { $ crate :: SyntaxKind :: NE } ; [<] => { $ crate :: SyntaxKind :: LT } ; [>] => { $ crate :: SyntaxKind :: GT } ; [<=] => { $ crate :: SyntaxKind :: LE } ; [>=] => { $ crate :: SyntaxKind :: GE } ; [<<] => { $ crate :: SyntaxKind :: LHS } ; [>>] => { $ crate :: SyntaxKind :: RHS } ; [+] => { $ crate :: SyntaxKind :: PLUS } ; [-] => { $ crate :: SyntaxKind :: MINUS } ; [*] => { $ crate :: SyntaxKind :: MUL } ; [/] => { $ crate :: SyntaxKind :: DIV } ; [%] => { $ crate :: SyntaxKind :: MODULO } ; [!] => { $ crate :: SyntaxKind :: NOT } ; [~] => { $ crate :: SyntaxKind :: BIT_NOT } ; ['['] => { $ crate :: SyntaxKind :: L_BRACK } ; [']'] => { $ crate :: SyntaxKind :: R_BRACK } ; ['('] => { $ crate :: SyntaxKind :: L_PAREN } ; [')'] => { $ crate :: SyntaxKind :: R_PAREN } ; ['{'] => { $ crate :: SyntaxKind :: L_BRACE } ; ['}'] => { $ crate :: SyntaxKind :: R_BRACE } ; [:] => { $ crate :: SyntaxKind :: COLON } ; [::] => { $ crate :: SyntaxKind :: COLONCOLON } ; [:::] => { $ crate :: SyntaxKind :: COLONCOLONCOLON } ; [;] => { $ crate :: SyntaxKind :: SEMI } ; [.] => { $ crate :: SyntaxKind :: DOT } ; [...] => { $ crate :: SyntaxKind :: DOTDOTDOT } ; [,] => { $ crate :: SyntaxKind :: COMMA } ; ['$'] => { $ crate :: SyntaxKind :: DOLLAR } ; [=] => { $ crate :: SyntaxKind :: ASSIGN } ; [?] => { $ crate :: SyntaxKind :: QUESTION_MARK } ; [tailstrict] => { $ crate :: SyntaxKind :: TAILSTRICT_KW } ; [importstr] => { $ crate :: SyntaxKind :: IMPORTSTR_KW } ; [importbin] => { $ crate :: SyntaxKind :: IMPORTBIN_KW } ; [import] => { $ crate :: SyntaxKind :: IMPORT_KW } ; [if] => { $ crate :: SyntaxKind :: IF_KW } ; [then] => { $ crate :: SyntaxKind :: THEN_KW } ; [else] => { $ crate :: SyntaxKind :: ELSE_KW } ; [function] => { $ crate :: SyntaxKind :: FUNCTION_KW } ; [error] => { $ crate :: SyntaxKind :: ERROR_KW } ; [local] => { $ crate :: SyntaxKind :: LOCAL_KW } ; [in] => { $ crate :: SyntaxKind :: IN_KW } ; [null] => { $ crate :: SyntaxKind :: NULL_KW } ; [true] => { $ crate :: SyntaxKind :: TRUE_KW } ; [false] => { $ crate :: SyntaxKind :: FALSE_KW } ; [self] => { $ crate :: SyntaxKind :: SELF_KW } ; [super] => { $ crate :: SyntaxKind :: SUPER_KW } ; [for] => { $ crate :: SyntaxKind :: FOR_KW } ; [assert] => { $ crate :: SyntaxKind :: ASSERT_KW } }
 pub use T;
modifiedcrates/jrsonnet-rowan-parser/src/parser.rsdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/parser.rs
+++ b/crates/jrsonnet-rowan-parser/src/parser.rs
@@ -293,6 +293,26 @@
 }
 
 fn expr(p: &mut Parser) -> CompletedMarker {
+	while p.at(T![local]) {
+		let m = p.start();
+
+		p.bump();
+		loop {
+			if p.at(T![;]) {
+				p.bump();
+				break;
+			}
+			bind(p);
+
+			if p.at(T![,]) {
+				p.bump();
+				continue;
+			}
+			p.expect(T![;]);
+			break;
+		}
+		m.complete(p, STMT_LOCAL);
+	}
 	match expr_binding_power(p, 0) {
 		Ok(m) => m,
 		Err(m) => m,
@@ -658,6 +678,7 @@
 	m.complete(p, SLICE_DESC);
 	true
 }
+
 fn lhs(p: &mut Parser) -> Result<CompletedMarker, CompletedMarker> {
 	let mut lhs = lhs_basic(p)?;
 
@@ -853,25 +874,6 @@
 		array(p)
 	} else if p.at(T!['{']) {
 		object(p)
-	} else if p.at(T![local]) {
-		let m = p.start();
-		p.bump();
-		loop {
-			if p.at(T![;]) {
-				p.bump();
-				break;
-			}
-			bind(p);
-
-			if p.at(T![,]) {
-				p.bump();
-				continue;
-			}
-			p.expect(T![;]);
-			break;
-		}
-		expr(p);
-		m.complete(p, EXPR_LOCAL)
 	} else if p.at(T![function]) {
 		let m = p.start();
 		p.bump();
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,7 +3,7 @@
 expression: "local intr = $intrinsic(test);\n\nlocal a = 1, b = 2, c = a + b;\n\n[c]\n"
 ---
 SOURCE_FILE@0..68
-  EXPR_LOCAL@0..29
+  STMT_LOCAL@0..23
     LOCAL_KW@0..5 "local"
     WHITESPACE@5..6 " "
     BIND_DESTRUCT@6..14
@@ -17,12 +17,12 @@
         DOLLAR@13..14 "$"
     ERROR_UNEXPECTED_TOKEN@14..23
       IDENT@14..23 "intrinsic"
-    EXPR_PARENED@23..29
-      L_PAREN@23..24 "("
-      EXPR_VAR@24..28
-        NAME@24..28
-          IDENT@24..28 "test"
-      R_PAREN@28..29 ")"
+  EXPR_PARENED@23..29
+    L_PAREN@23..24 "("
+    EXPR_VAR@24..28
+      NAME@24..28
+        IDENT@24..28 "test"
+    R_PAREN@28..29 ")"
   ERROR_CUSTOM@29..67
     SEMI@29..30 ";"
     WHITESPACE@30..32 "\n\n"
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,7 +3,7 @@
 expression: "local [a, b, c] = arr;\nlocal [a, ...] = arr_rest;\nlocal [..., a] = rest_arr;\nlocal [...] = rest_in_arr;\nlocal [a, ...n] = arr_rest_n;\nlocal [...n, a] = rest_arr_n;\nlocal [...n] = rest_in_arr_n;\n\nlocal {a, b, c} = obj;\nlocal {a, b, c, ...} = obj_rest;\nlocal {a, b, c, ...n} = obj_rest_n;\n\nnull\n"
 ---
 SOURCE_FILE@0..293
-  EXPR_LOCAL@0..292
+  STMT_LOCAL@0..22
     LOCAL_KW@0..5 "local"
     WHITESPACE@5..6 " "
     BIND_DESTRUCT@6..21
@@ -30,226 +30,225 @@
         NAME@18..21
           IDENT@18..21 "arr"
     SEMI@21..22 ";"
-    WHITESPACE@22..23 "\n"
-    EXPR_LOCAL@23..292
-      LOCAL_KW@23..28 "local"
-      WHITESPACE@28..29 " "
-      BIND_DESTRUCT@29..48
-        DESTRUCT_ARRAY@29..37
-          L_BRACK@29..30 "["
-          DESTRUCT_FULL@30..31
-            NAME@30..31
-              IDENT@30..31 "a"
-          COMMA@31..32 ","
-          WHITESPACE@32..33 " "
-          DESTRUCT_REST@33..36
-            DOTDOTDOT@33..36 "..."
-          R_BRACK@36..37 "]"
-        WHITESPACE@37..38 " "
-        ASSIGN@38..39 "="
-        WHITESPACE@39..40 " "
-        EXPR_VAR@40..48
-          NAME@40..48
-            IDENT@40..48 "arr_rest"
-      SEMI@48..49 ";"
-      WHITESPACE@49..50 "\n"
-      EXPR_LOCAL@50..292
-        LOCAL_KW@50..55 "local"
-        WHITESPACE@55..56 " "
-        BIND_DESTRUCT@56..75
-          DESTRUCT_ARRAY@56..64
-            L_BRACK@56..57 "["
-            DESTRUCT_REST@57..60
-              DOTDOTDOT@57..60 "..."
-            COMMA@60..61 ","
-            WHITESPACE@61..62 " "
-            DESTRUCT_FULL@62..63
-              NAME@62..63
-                IDENT@62..63 "a"
-            R_BRACK@63..64 "]"
-          WHITESPACE@64..65 " "
-          ASSIGN@65..66 "="
-          WHITESPACE@66..67 " "
-          EXPR_VAR@67..75
-            NAME@67..75
-              IDENT@67..75 "rest_arr"
-        SEMI@75..76 ";"
-        WHITESPACE@76..77 "\n"
-        EXPR_LOCAL@77..292
-          LOCAL_KW@77..82 "local"
-          WHITESPACE@82..83 " "
-          BIND_DESTRUCT@83..102
-            DESTRUCT_ARRAY@83..88
-              L_BRACK@83..84 "["
-              DESTRUCT_REST@84..87
-                DOTDOTDOT@84..87 "..."
-              R_BRACK@87..88 "]"
-            WHITESPACE@88..89 " "
-            ASSIGN@89..90 "="
-            WHITESPACE@90..91 " "
-            EXPR_VAR@91..102
-              NAME@91..102
-                IDENT@91..102 "rest_in_arr"
-          SEMI@102..103 ";"
-          WHITESPACE@103..104 "\n"
-          EXPR_LOCAL@104..292
-            LOCAL_KW@104..109 "local"
-            WHITESPACE@109..110 " "
-            BIND_DESTRUCT@110..132
-              DESTRUCT_ARRAY@110..119
-                L_BRACK@110..111 "["
-                DESTRUCT_FULL@111..112
-                  NAME@111..112
-                    IDENT@111..112 "a"
-                COMMA@112..113 ","
-                WHITESPACE@113..114 " "
-                DESTRUCT_REST@114..118
-                  DOTDOTDOT@114..117 "..."
-                  IDENT@117..118 "n"
-                R_BRACK@118..119 "]"
-              WHITESPACE@119..120 " "
-              ASSIGN@120..121 "="
-              WHITESPACE@121..122 " "
-              EXPR_VAR@122..132
-                NAME@122..132
-                  IDENT@122..132 "arr_rest_n"
-            SEMI@132..133 ";"
-            WHITESPACE@133..134 "\n"
-            EXPR_LOCAL@134..292
-              LOCAL_KW@134..139 "local"
-              WHITESPACE@139..140 " "
-              BIND_DESTRUCT@140..162
-                DESTRUCT_ARRAY@140..149
-                  L_BRACK@140..141 "["
-                  DESTRUCT_REST@141..145
-                    DOTDOTDOT@141..144 "..."
-                    IDENT@144..145 "n"
-                  COMMA@145..146 ","
-                  WHITESPACE@146..147 " "
-                  DESTRUCT_FULL@147..148
-                    NAME@147..148
-                      IDENT@147..148 "a"
-                  R_BRACK@148..149 "]"
-                WHITESPACE@149..150 " "
-                ASSIGN@150..151 "="
-                WHITESPACE@151..152 " "
-                EXPR_VAR@152..162
-                  NAME@152..162
-                    IDENT@152..162 "rest_arr_n"
-              SEMI@162..163 ";"
-              WHITESPACE@163..164 "\n"
-              EXPR_LOCAL@164..292
-                LOCAL_KW@164..169 "local"
-                WHITESPACE@169..170 " "
-                BIND_DESTRUCT@170..192
-                  DESTRUCT_ARRAY@170..176
-                    L_BRACK@170..171 "["
-                    DESTRUCT_REST@171..175
-                      DOTDOTDOT@171..174 "..."
-                      IDENT@174..175 "n"
-                    R_BRACK@175..176 "]"
-                  WHITESPACE@176..177 " "
-                  ASSIGN@177..178 "="
-                  WHITESPACE@178..179 " "
-                  EXPR_VAR@179..192
-                    NAME@179..192
-                      IDENT@179..192 "rest_in_arr_n"
-                SEMI@192..193 ";"
-                WHITESPACE@193..195 "\n\n"
-                EXPR_LOCAL@195..292
-                  LOCAL_KW@195..200 "local"
-                  WHITESPACE@200..201 " "
-                  BIND_DESTRUCT@201..216
-                    DESTRUCT_OBJECT@201..210
-                      L_BRACE@201..202 "{"
-                      DESTRUCT_OBJECT_FIELD@202..203
-                        NAME@202..203
-                          IDENT@202..203 "a"
-                      COMMA@203..204 ","
-                      WHITESPACE@204..205 " "
-                      DESTRUCT_OBJECT_FIELD@205..206
-                        NAME@205..206
-                          IDENT@205..206 "b"
-                      COMMA@206..207 ","
-                      WHITESPACE@207..208 " "
-                      DESTRUCT_OBJECT_FIELD@208..209
-                        NAME@208..209
-                          IDENT@208..209 "c"
-                      R_BRACE@209..210 "}"
-                    WHITESPACE@210..211 " "
-                    ASSIGN@211..212 "="
-                    WHITESPACE@212..213 " "
-                    EXPR_VAR@213..216
-                      NAME@213..216
-                        IDENT@213..216 "obj"
-                  SEMI@216..217 ";"
-                  WHITESPACE@217..218 "\n"
-                  EXPR_LOCAL@218..292
-                    LOCAL_KW@218..223 "local"
-                    WHITESPACE@223..224 " "
-                    BIND_DESTRUCT@224..249
-                      DESTRUCT_OBJECT@224..238
-                        L_BRACE@224..225 "{"
-                        DESTRUCT_OBJECT_FIELD@225..226
-                          NAME@225..226
-                            IDENT@225..226 "a"
-                        COMMA@226..227 ","
-                        WHITESPACE@227..228 " "
-                        DESTRUCT_OBJECT_FIELD@228..229
-                          NAME@228..229
-                            IDENT@228..229 "b"
-                        COMMA@229..230 ","
-                        WHITESPACE@230..231 " "
-                        DESTRUCT_OBJECT_FIELD@231..232
-                          NAME@231..232
-                            IDENT@231..232 "c"
-                        COMMA@232..233 ","
-                        WHITESPACE@233..234 " "
-                        DESTRUCT_REST@234..237
-                          DOTDOTDOT@234..237 "..."
-                        R_BRACE@237..238 "}"
-                      WHITESPACE@238..239 " "
-                      ASSIGN@239..240 "="
-                      WHITESPACE@240..241 " "
-                      EXPR_VAR@241..249
-                        NAME@241..249
-                          IDENT@241..249 "obj_rest"
-                    SEMI@249..250 ";"
-                    WHITESPACE@250..251 "\n"
-                    EXPR_LOCAL@251..292
-                      LOCAL_KW@251..256 "local"
-                      WHITESPACE@256..257 " "
-                      BIND_DESTRUCT@257..285
-                        DESTRUCT_OBJECT@257..272
-                          L_BRACE@257..258 "{"
-                          DESTRUCT_OBJECT_FIELD@258..259
-                            NAME@258..259
-                              IDENT@258..259 "a"
-                          COMMA@259..260 ","
-                          WHITESPACE@260..261 " "
-                          DESTRUCT_OBJECT_FIELD@261..262
-                            NAME@261..262
-                              IDENT@261..262 "b"
-                          COMMA@262..263 ","
-                          WHITESPACE@263..264 " "
-                          DESTRUCT_OBJECT_FIELD@264..265
-                            NAME@264..265
-                              IDENT@264..265 "c"
-                          COMMA@265..266 ","
-                          WHITESPACE@266..267 " "
-                          DESTRUCT_REST@267..271
-                            DOTDOTDOT@267..270 "..."
-                            IDENT@270..271 "n"
-                          R_BRACE@271..272 "}"
-                        WHITESPACE@272..273 " "
-                        ASSIGN@273..274 "="
-                        WHITESPACE@274..275 " "
-                        EXPR_VAR@275..285
-                          NAME@275..285
-                            IDENT@275..285 "obj_rest_n"
-                      SEMI@285..286 ";"
-                      WHITESPACE@286..288 "\n\n"
-                      EXPR_LITERAL@288..292
-                        NULL_KW@288..292 "null"
+  WHITESPACE@22..23 "\n"
+  STMT_LOCAL@23..49
+    LOCAL_KW@23..28 "local"
+    WHITESPACE@28..29 " "
+    BIND_DESTRUCT@29..48
+      DESTRUCT_ARRAY@29..37
+        L_BRACK@29..30 "["
+        DESTRUCT_FULL@30..31
+          NAME@30..31
+            IDENT@30..31 "a"
+        COMMA@31..32 ","
+        WHITESPACE@32..33 " "
+        DESTRUCT_REST@33..36
+          DOTDOTDOT@33..36 "..."
+        R_BRACK@36..37 "]"
+      WHITESPACE@37..38 " "
+      ASSIGN@38..39 "="
+      WHITESPACE@39..40 " "
+      EXPR_VAR@40..48
+        NAME@40..48
+          IDENT@40..48 "arr_rest"
+    SEMI@48..49 ";"
+  WHITESPACE@49..50 "\n"
+  STMT_LOCAL@50..76
+    LOCAL_KW@50..55 "local"
+    WHITESPACE@55..56 " "
+    BIND_DESTRUCT@56..75
+      DESTRUCT_ARRAY@56..64
+        L_BRACK@56..57 "["
+        DESTRUCT_REST@57..60
+          DOTDOTDOT@57..60 "..."
+        COMMA@60..61 ","
+        WHITESPACE@61..62 " "
+        DESTRUCT_FULL@62..63
+          NAME@62..63
+            IDENT@62..63 "a"
+        R_BRACK@63..64 "]"
+      WHITESPACE@64..65 " "
+      ASSIGN@65..66 "="
+      WHITESPACE@66..67 " "
+      EXPR_VAR@67..75
+        NAME@67..75
+          IDENT@67..75 "rest_arr"
+    SEMI@75..76 ";"
+  WHITESPACE@76..77 "\n"
+  STMT_LOCAL@77..103
+    LOCAL_KW@77..82 "local"
+    WHITESPACE@82..83 " "
+    BIND_DESTRUCT@83..102
+      DESTRUCT_ARRAY@83..88
+        L_BRACK@83..84 "["
+        DESTRUCT_REST@84..87
+          DOTDOTDOT@84..87 "..."
+        R_BRACK@87..88 "]"
+      WHITESPACE@88..89 " "
+      ASSIGN@89..90 "="
+      WHITESPACE@90..91 " "
+      EXPR_VAR@91..102
+        NAME@91..102
+          IDENT@91..102 "rest_in_arr"
+    SEMI@102..103 ";"
+  WHITESPACE@103..104 "\n"
+  STMT_LOCAL@104..133
+    LOCAL_KW@104..109 "local"
+    WHITESPACE@109..110 " "
+    BIND_DESTRUCT@110..132
+      DESTRUCT_ARRAY@110..119
+        L_BRACK@110..111 "["
+        DESTRUCT_FULL@111..112
+          NAME@111..112
+            IDENT@111..112 "a"
+        COMMA@112..113 ","
+        WHITESPACE@113..114 " "
+        DESTRUCT_REST@114..118
+          DOTDOTDOT@114..117 "..."
+          IDENT@117..118 "n"
+        R_BRACK@118..119 "]"
+      WHITESPACE@119..120 " "
+      ASSIGN@120..121 "="
+      WHITESPACE@121..122 " "
+      EXPR_VAR@122..132
+        NAME@122..132
+          IDENT@122..132 "arr_rest_n"
+    SEMI@132..133 ";"
+  WHITESPACE@133..134 "\n"
+  STMT_LOCAL@134..163
+    LOCAL_KW@134..139 "local"
+    WHITESPACE@139..140 " "
+    BIND_DESTRUCT@140..162
+      DESTRUCT_ARRAY@140..149
+        L_BRACK@140..141 "["
+        DESTRUCT_REST@141..145
+          DOTDOTDOT@141..144 "..."
+          IDENT@144..145 "n"
+        COMMA@145..146 ","
+        WHITESPACE@146..147 " "
+        DESTRUCT_FULL@147..148
+          NAME@147..148
+            IDENT@147..148 "a"
+        R_BRACK@148..149 "]"
+      WHITESPACE@149..150 " "
+      ASSIGN@150..151 "="
+      WHITESPACE@151..152 " "
+      EXPR_VAR@152..162
+        NAME@152..162
+          IDENT@152..162 "rest_arr_n"
+    SEMI@162..163 ";"
+  WHITESPACE@163..164 "\n"
+  STMT_LOCAL@164..193
+    LOCAL_KW@164..169 "local"
+    WHITESPACE@169..170 " "
+    BIND_DESTRUCT@170..192
+      DESTRUCT_ARRAY@170..176
+        L_BRACK@170..171 "["
+        DESTRUCT_REST@171..175
+          DOTDOTDOT@171..174 "..."
+          IDENT@174..175 "n"
+        R_BRACK@175..176 "]"
+      WHITESPACE@176..177 " "
+      ASSIGN@177..178 "="
+      WHITESPACE@178..179 " "
+      EXPR_VAR@179..192
+        NAME@179..192
+          IDENT@179..192 "rest_in_arr_n"
+    SEMI@192..193 ";"
+  WHITESPACE@193..195 "\n\n"
+  STMT_LOCAL@195..217
+    LOCAL_KW@195..200 "local"
+    WHITESPACE@200..201 " "
+    BIND_DESTRUCT@201..216
+      DESTRUCT_OBJECT@201..210
+        L_BRACE@201..202 "{"
+        DESTRUCT_OBJECT_FIELD@202..203
+          NAME@202..203
+            IDENT@202..203 "a"
+        COMMA@203..204 ","
+        WHITESPACE@204..205 " "
+        DESTRUCT_OBJECT_FIELD@205..206
+          NAME@205..206
+            IDENT@205..206 "b"
+        COMMA@206..207 ","
+        WHITESPACE@207..208 " "
+        DESTRUCT_OBJECT_FIELD@208..209
+          NAME@208..209
+            IDENT@208..209 "c"
+        R_BRACE@209..210 "}"
+      WHITESPACE@210..211 " "
+      ASSIGN@211..212 "="
+      WHITESPACE@212..213 " "
+      EXPR_VAR@213..216
+        NAME@213..216
+          IDENT@213..216 "obj"
+    SEMI@216..217 ";"
+  WHITESPACE@217..218 "\n"
+  STMT_LOCAL@218..250
+    LOCAL_KW@218..223 "local"
+    WHITESPACE@223..224 " "
+    BIND_DESTRUCT@224..249
+      DESTRUCT_OBJECT@224..238
+        L_BRACE@224..225 "{"
+        DESTRUCT_OBJECT_FIELD@225..226
+          NAME@225..226
+            IDENT@225..226 "a"
+        COMMA@226..227 ","
+        WHITESPACE@227..228 " "
+        DESTRUCT_OBJECT_FIELD@228..229
+          NAME@228..229
+            IDENT@228..229 "b"
+        COMMA@229..230 ","
+        WHITESPACE@230..231 " "
+        DESTRUCT_OBJECT_FIELD@231..232
+          NAME@231..232
+            IDENT@231..232 "c"
+        COMMA@232..233 ","
+        WHITESPACE@233..234 " "
+        DESTRUCT_REST@234..237
+          DOTDOTDOT@234..237 "..."
+        R_BRACE@237..238 "}"
+      WHITESPACE@238..239 " "
+      ASSIGN@239..240 "="
+      WHITESPACE@240..241 " "
+      EXPR_VAR@241..249
+        NAME@241..249
+          IDENT@241..249 "obj_rest"
+    SEMI@249..250 ";"
+  WHITESPACE@250..251 "\n"
+  STMT_LOCAL@251..286
+    LOCAL_KW@251..256 "local"
+    WHITESPACE@256..257 " "
+    BIND_DESTRUCT@257..285
+      DESTRUCT_OBJECT@257..272
+        L_BRACE@257..258 "{"
+        DESTRUCT_OBJECT_FIELD@258..259
+          NAME@258..259
+            IDENT@258..259 "a"
+        COMMA@259..260 ","
+        WHITESPACE@260..261 " "
+        DESTRUCT_OBJECT_FIELD@261..262
+          NAME@261..262
+            IDENT@261..262 "b"
+        COMMA@262..263 ","
+        WHITESPACE@263..264 " "
+        DESTRUCT_OBJECT_FIELD@264..265
+          NAME@264..265
+            IDENT@264..265 "c"
+        COMMA@265..266 ","
+        WHITESPACE@266..267 " "
+        DESTRUCT_REST@267..271
+          DOTDOTDOT@267..270 "..."
+          IDENT@270..271 "n"
+        R_BRACE@271..272 "}"
+      WHITESPACE@272..273 " "
+      ASSIGN@273..274 "="
+      WHITESPACE@274..275 " "
+      EXPR_VAR@275..285
+        NAME@275..285
+          IDENT@275..285 "obj_rest_n"
+    SEMI@285..286 ";"
+  WHITESPACE@286..288 "\n\n"
+  EXPR_LITERAL@288..292
+    NULL_KW@288..292 "null"
   WHITESPACE@292..293 "\n"
-
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,7 +3,7 @@
 expression: "local\n\ta(x) = x,\n\ta = function(x) x,\n; c\n"
 ---
 SOURCE_FILE@0..41
-  EXPR_LOCAL@0..40
+  STMT_LOCAL@0..38
     LOCAL_KW@0..5 "local"
     WHITESPACE@5..7 "\n\t"
     BIND_FUNCTION@7..15
@@ -45,8 +45,8 @@
     COMMA@35..36 ","
     WHITESPACE@36..37 "\n"
     SEMI@37..38 ";"
-    WHITESPACE@38..39 " "
-    EXPR_VAR@39..40
-      NAME@39..40
-        IDENT@39..40 "c"
+  WHITESPACE@38..39 " "
+  EXPR_VAR@39..40
+    NAME@39..40
+      IDENT@39..40 "c"
   WHITESPACE@40..41 "\n"
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,7 +3,7 @@
 expression: "local a =\nlocal b = 3;\n1\n"
 ---
 SOURCE_FILE@0..25
-  EXPR_LOCAL@0..25
+  STMT_LOCAL@0..25
     LOCAL_KW@0..5 "local"
     WHITESPACE@5..6 " "
     BIND_DESTRUCT@6..24
@@ -13,7 +13,7 @@
       WHITESPACE@7..8 " "
       ASSIGN@8..9 "="
       WHITESPACE@9..10 "\n"
-      EXPR_LOCAL@10..24
+      STMT_LOCAL@10..22
         LOCAL_KW@10..15 "local"
         WHITESPACE@15..16 " "
         BIND_DESTRUCT@16..21
@@ -26,12 +26,12 @@
           EXPR_NUMBER@20..21
             FLOAT@20..21 "3"
         SEMI@21..22 ";"
-        WHITESPACE@22..23 "\n"
-        EXPR_NUMBER@23..24
-          FLOAT@23..24 "1"
+      WHITESPACE@22..23 "\n"
+      EXPR_NUMBER@23..24
+        FLOAT@23..24 "1"
     WHITESPACE@24..25 "\n"
-    ERROR_MISSING_TOKEN@25..25
     ERROR_MISSING_TOKEN@25..25
+  ERROR_MISSING_TOKEN@25..25
 ===
 LocatedSyntaxError { error: Missing { expected: Unnamed(SyntaxKindSet([L_BRACK, L_PAREN, L_BRACE, SEMI, DOT, COMMA])) }, range: 25..25 }
 LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 25..25 }
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,7 +3,7 @@
 expression: "local a =\n"
 ---
 SOURCE_FILE@0..10
-  EXPR_LOCAL@0..10
+  STMT_LOCAL@0..10
     LOCAL_KW@0..5 "local"
     WHITESPACE@5..6 " "
     BIND_DESTRUCT@6..10
@@ -15,7 +15,7 @@
       WHITESPACE@9..10 "\n"
       ERROR_MISSING_TOKEN@10..10
     ERROR_MISSING_TOKEN@10..10
-    ERROR_MISSING_TOKEN@10..10
+  ERROR_MISSING_TOKEN@10..10
 ===
 LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 10..10 }
 LocatedSyntaxError { error: Missing { expected: Unnamed(SyntaxKindSet([SEMI, COMMA])) }, range: 10..10 }
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__stdlib.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__stdlib.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__stdlib.snap
@@ -1,10 +1,10 @@
 ---
 source: crates/jrsonnet-rowan-parser/src/tests.rs
-expression: "{\n  local std = self,\n  local id = std.id,\n\n  thisFile:: error 'std.thisFile is deprecated, to enable its support in jrsonnet - recompile it with \"legacy-this-file\" support.\\nThis will slow down stdlib caching a bit, though',\n\n  toString(a):: '' + a,\n\n  lstripChars(str, chars)::\n    if std.length(str) > 0 && std.member(chars, str[0]) then\n      std.lstripChars(str[1:], chars)\n    else\n      str,\n\n  rstripChars(str, chars)::\n    local len = std.length(str);\n    if len > 0 && std.member(chars, str[len - 1]) then\n      std.rstripChars(str[:len - 1], chars)\n    else\n      str,\n\n  stripChars(str, chars)::\n    std.lstripChars(std.rstripChars(str, chars), chars),\n\n  stringChars(str)::\n    std.makeArray(std.length(str), function(i) str[i]),\n\n  splitLimitR(str, c, maxsplits)::\n    if maxsplits == -1 then\n      std.splitLimit(str, c, -1)\n    else\n      local revStr(str) = std.join('', std.reverse(std.stringChars(str)));\n      std.map(function(e) revStr(e), std.reverse(std.splitLimit(revStr(str), revStr(c), maxsplits))),\n\n  split(str, c):: std.splitLimit(str, c, -1),\n\n  mapWithIndex(func, arr)::\n    if !std.isFunction(func) then\n      error ('std.mapWithIndex first param must be function, got ' + std.type(func))\n    else if !std.isArray(arr) && !std.isString(arr) then\n      error ('std.mapWithIndex second param must be array, got ' + std.type(arr))\n    else\n      std.makeArray(std.length(arr), function(i) func(i, arr[i])),\n\n  mapWithKey(func, obj)::\n    if !std.isFunction(func) then\n      error ('std.mapWithKey first param must be function, got ' + std.type(func))\n    else if !std.isObject(obj) then\n      error ('std.mapWithKey second param must be object, got ' + std.type(obj))\n    else\n      { [k]: func(k, obj[k]) for k in std.objectFields(obj) },\n\n  lines(arr)::\n    std.join('\\n', arr + ['']),\n\n  deepJoin(arr)::\n    if std.isString(arr) then\n      arr\n    else if std.isArray(arr) then\n      std.join('', [std.deepJoin(x) for x in arr])\n    else\n      error 'Expected string or array, got %s' % std.type(arr),\n\n  filterMap(filter_func, map_func, arr)::\n    if !std.isFunction(filter_func) then\n      error ('std.filterMap first param must be function, got ' + std.type(filter_func))\n    else if !std.isFunction(map_func) then\n      error ('std.filterMap second param must be function, got ' + std.type(map_func))\n    else if !std.isArray(arr) then\n      error ('std.filterMap third param must be array, got ' + std.type(arr))\n    else\n      std.map(map_func, std.filter(filter_func, arr)),\n\n  assertEqual(a, b)::\n    if a == b then\n      true\n    else\n      error 'Assertion failed. ' + a + ' != ' + b,\n\n  clamp(x, minVal, maxVal)::\n    if x < minVal then minVal\n    else if x > maxVal then maxVal\n    else x,\n\n  flattenArrays(arrs)::\n    std.foldl(function(a, b) a + b, arrs, []),\n\n  manifestIni(ini)::\n    local body_lines(body) =\n      std.join([], [\n        local value_or_values = body[k];\n        if std.isArray(value_or_values) then\n          ['%s = %s' % [k, value] for value in value_or_values]\n        else\n          ['%s = %s' % [k, value_or_values]]\n\n        for k in std.objectFields(body)\n      ]);\n\n    local section_lines(sname, sbody) = ['[%s]' % [sname]] + body_lines(sbody),\n          main_body = if std.objectHas(ini, 'main') then body_lines(ini.main) else [],\n          all_sections = [\n      section_lines(k, ini.sections[k])\n      for k in std.objectFields(ini.sections)\n    ];\n    std.join('\\n', main_body + std.flattenArrays(all_sections) + ['']),\n\n  manifestToml(value):: std.manifestTomlEx(value, '  '),\n\n  escapeStringPython(str)::\n    std.escapeStringJson(str),\n\n  escapeStringBash(str_)::\n    local str = std.toString(str_);\n    local trans(ch) =\n      if ch == \"'\" then\n        \"'\\\"'\\\"'\"\n      else\n        ch;\n    \"'%s'\" % std.join('', [trans(ch) for ch in std.stringChars(str)]),\n\n  escapeStringDollars(str_)::\n    local str = std.toString(str_);\n    local trans(ch) =\n      if ch == '$' then\n        '$$'\n      else\n        ch;\n    std.foldl(function(a, b) a + trans(b), std.stringChars(str), ''),\n\n  local xml_escapes = {\n    '<': '&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  uniq(arr, keyF=id)::\n    local f(a, b) =\n      if std.length(a) == 0 then\n        [b]\n      else if keyF(a[std.length(a) - 1]) == keyF(b) then\n        a\n      else\n        a + [b];\n    std.foldl(f, arr, []),\n\n  set(arr, keyF=id)::\n    std.uniq(std.sort(arr, keyF), keyF),\n\n  setMember(x, arr, keyF=id)::\n    // TODO(dcunnin): Binary chop for O(log n) complexity\n    std.length(std.setInter([x], arr, keyF)) > 0,\n\n  setUnion(a, b, keyF=id)::\n    // NOTE: order matters, values in `a` win\n    local aux(a, b, i, j, acc) =\n      if i >= std.length(a) then\n        acc + b[j:]\n      else if j >= std.length(b) then\n        acc + a[i:]\n      else\n        local ak = keyF(a[i]);\n        local bk = keyF(b[j]);\n        if ak == bk then\n          aux(a, b, i + 1, j + 1, acc + [a[i]]) tailstrict\n        else if ak < bk then\n          aux(a, b, i + 1, j, acc + [a[i]]) tailstrict\n        else\n          aux(a, b, i, j + 1, acc + [b[j]]) tailstrict;\n    aux(a, b, 0, 0, []),\n\n  setInter(a, b, keyF=id)::\n    local aux(a, b, i, j, acc) =\n      if i >= std.length(a) || j >= std.length(b) then\n        acc\n      else\n        if keyF(a[i]) == keyF(b[j]) then\n          aux(a, b, i + 1, j + 1, acc + [a[i]]) tailstrict\n        else if keyF(a[i]) < keyF(b[j]) then\n          aux(a, b, i + 1, j, acc) tailstrict\n        else\n          aux(a, b, i, j + 1, acc) tailstrict;\n    aux(a, b, 0, 0, []) tailstrict,\n\n  setDiff(a, b, keyF=id)::\n    local aux(a, b, i, j, acc) =\n      if i >= std.length(a) then\n        acc\n      else if j >= std.length(b) then\n        acc + a[i:]\n      else\n        if keyF(a[i]) == keyF(b[j]) then\n          aux(a, b, i + 1, j + 1, acc) tailstrict\n        else if keyF(a[i]) < keyF(b[j]) then\n          aux(a, b, i + 1, j, acc + [a[i]]) tailstrict\n        else\n          aux(a, b, i, j + 1, acc) tailstrict;\n    aux(a, b, 0, 0, []) tailstrict,\n\n  mergePatch(target, patch)::\n    if std.isObject(patch) then\n      local target_object =\n        if std.isObject(target) then target else {};\n\n      local target_fields =\n        if std.isObject(target_object) then std.objectFields(target_object) else [];\n\n      local null_fields = [k for k in std.objectFields(patch) if patch[k] == null];\n      local both_fields = std.setUnion(target_fields, std.objectFields(patch));\n\n      {\n        [k]:\n          if !std.objectHas(patch, k) then\n            target_object[k]\n          else if !std.objectHas(target_object, k) then\n            std.mergePatch(null, patch[k]) tailstrict\n          else\n            std.mergePatch(target_object[k], patch[k]) tailstrict\n        for k in std.setDiff(both_fields, null_fields)\n      }\n    else\n      patch,\n\n  get(o, f, default=null, inc_hidden=true)::\n    if std.objectHasEx(o, f, inc_hidden) then o[f] else default,\n\n  objectFields(o)::\n    std.objectFieldsEx(o, false),\n\n  objectFieldsAll(o)::\n    std.objectFieldsEx(o, true),\n\n  objectHas(o, f)::\n    std.objectHasEx(o, f, false),\n\n  objectHasAll(o, f)::\n    std.objectHasEx(o, f, true),\n\n  objectValues(o)::\n    [o[k] for k in std.objectFields(o)],\n\n  objectValuesAll(o)::\n    [o[k] for k in std.objectFieldsAll(o)],\n\n  resolvePath(f, r)::\n    local arr = std.split(f, '/');\n    std.join('/', std.makeArray(std.length(arr) - 1, function(i) arr[i]) + [r]),\n\n  prune(a)::\n    local isContent(b) =\n      if b == null then\n        false\n      else if std.isArray(b) then\n        std.length(b) > 0\n      else if std.isObject(b) then\n        std.length(b) > 0\n      else\n        true;\n    if std.isArray(a) then\n      [std.prune(x) for x in a if isContent($.prune(x))]\n    else if std.isObject(a) then {\n      [x]: $.prune(a[x])\n      for x in std.objectFields(a)\n      if isContent(std.prune(a[x]))\n    } else\n      a,\n\n  find(value, arr)::\n    if !std.isArray(arr) then\n      error 'find second parameter should be an array, got ' + std.type(arr)\n    else\n      std.filter(function(i) arr[i] == value, std.range(0, std.length(arr) - 1)),\n}\n"
+expression: "{\n  local std = self,\n  local id = std.id,\n\n  thisFile:: error 'std.thisFile is deprecated, to enable its support in jrsonnet - recompile it with \"legacy-this-file\" support.\\nThis will slow down stdlib caching a bit, though',\n\n  toString(a):: '' + a,\n\n  lstripChars(str, chars)::\n    if std.length(str) > 0 && std.member(chars, str[0]) then\n      std.lstripChars(str[1:], chars)\n    else\n      str,\n\n  rstripChars(str, chars)::\n    local len = std.length(str);\n    if len > 0 && std.member(chars, str[len - 1]) then\n      std.rstripChars(str[:len - 1], chars)\n    else\n      str,\n\n  stripChars(str, chars)::\n    std.lstripChars(std.rstripChars(str, chars), chars),\n\n  stringChars(str)::\n    std.makeArray(std.length(str), function(i) str[i]),\n\n  splitLimitR(str, c, maxsplits)::\n    if maxsplits == -1 then\n      std.splitLimit(str, c, -1)\n    else\n      local revStr(str) = std.join('', std.reverse(std.stringChars(str)));\n      std.map(function(e) revStr(e), std.reverse(std.splitLimit(revStr(str), revStr(c), maxsplits))),\n\n  split(str, c):: std.splitLimit(str, c, -1),\n\n  mapWithIndex(func, arr)::\n    if !std.isFunction(func) then\n      error ('std.mapWithIndex first param must be function, got ' + std.type(func))\n    else if !std.isArray(arr) && !std.isString(arr) then\n      error ('std.mapWithIndex second param must be array, got ' + std.type(arr))\n    else\n      std.makeArray(std.length(arr), function(i) func(i, arr[i])),\n\n  mapWithKey(func, obj)::\n    if !std.isFunction(func) then\n      error ('std.mapWithKey first param must be function, got ' + std.type(func))\n    else if !std.isObject(obj) then\n      error ('std.mapWithKey second param must be object, got ' + std.type(obj))\n    else\n      { [k]: func(k, obj[k]) for k in std.objectFields(obj) },\n\n  lines(arr)::\n    std.join('\\n', arr + ['']),\n\n  deepJoin(arr)::\n    if std.isString(arr) then\n      arr\n    else if std.isArray(arr) then\n      std.join('', [std.deepJoin(x) for x in arr])\n    else\n      error 'Expected string or array, got %s' % std.type(arr),\n\n  filterMap(filter_func, map_func, arr)::\n    if !std.isFunction(filter_func) then\n      error ('std.filterMap first param must be function, got ' + std.type(filter_func))\n    else if !std.isFunction(map_func) then\n      error ('std.filterMap second param must be function, got ' + std.type(map_func))\n    else if !std.isArray(arr) then\n      error ('std.filterMap third param must be array, got ' + std.type(arr))\n    else\n      std.map(map_func, std.filter(filter_func, arr)),\n\n  assertEqual(a, b)::\n    if a == b then\n      true\n    else\n      error 'Assertion failed. ' + a + ' != ' + b,\n\n  clamp(x, minVal, maxVal)::\n    if x < minVal then minVal\n    else if x > maxVal then maxVal\n    else x,\n\n  flattenArrays(arrs)::\n    std.foldl(function(a, b) a + b, arrs, []),\n\n  manifestIni(ini)::\n    local body_lines(body) =\n      std.join([], [\n        local value_or_values = body[k];\n        if std.isArray(value_or_values) then\n          ['%s = %s' % [k, value] for value in value_or_values]\n        else\n          ['%s = %s' % [k, value_or_values]]\n\n        for k in std.objectFields(body)\n      ]);\n\n    local section_lines(sname, sbody) = ['[%s]' % [sname]] + body_lines(sbody),\n          main_body = if std.objectHas(ini, 'main') then body_lines(ini.main) else [],\n          all_sections = [\n      section_lines(k, ini.sections[k])\n      for k in std.objectFields(ini.sections)\n    ];\n    std.join('\\n', main_body + std.flattenArrays(all_sections) + ['']),\n\n  manifestToml(value):: std.manifestTomlEx(value, '  '),\n\n  escapeStringPython(str)::\n    std.escapeStringJson(str),\n\n  escapeStringBash(str_)::\n    local str = std.toString(str_);\n    local trans(ch) =\n      if ch == \"'\" then\n        \"'\\\"'\\\"'\"\n      else\n        ch;\n    \"'%s'\" % std.join('', [trans(ch) for ch in std.stringChars(str)]),\n\n  escapeStringDollars(str_)::\n    local str = std.toString(str_);\n    local trans(ch) =\n      if ch == '$' then\n        '$$'\n      else\n        ch;\n    std.foldl(function(a, b) a + trans(b), std.stringChars(str), ''),\n\n  local xml_escapes = {\n    '<': '&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"
 ---
-SOURCE_FILE@0..10282
-  EXPR_OBJECT@0..10281
-    OBJ_BODY_MEMBER_LIST@0..10281
+SOURCE_FILE@0..9860
+  EXPR_OBJECT@0..9859
+    OBJ_BODY_MEMBER_LIST@0..9859
       L_BRACE@0..1 "{"
       WHITESPACE@1..4 "\n  "
       MEMBER_BIND_STMT@4..20
@@ -216,7 +216,7 @@
           R_PAREN@424..425 ")"
         COLONCOLON@425..427 "::"
         WHITESPACE@427..432 "\n    "
-        EXPR_LOCAL@432..578
+        STMT_LOCAL@432..460
           LOCAL_KW@432..437 "local"
           WHITESPACE@437..438 " "
           BIND_DESTRUCT@438..459
@@ -242,108 +242,108 @@
                       IDENT@455..458 "str"
                 R_PAREN@458..459 ")"
           SEMI@459..460 ";"
-          WHITESPACE@460..465 "\n    "
-          EXPR_IF_THEN_ELSE@465..578
-            IF_KW@465..467 "if"
-            WHITESPACE@467..468 " "
-            EXPR_BINARY@468..510
-              LHS_EXPR@468..475
-                EXPR_BINARY@468..475
-                  LHS_EXPR@468..471
-                    EXPR_VAR@468..471
-                      NAME@468..471
-                        IDENT@468..471 "len"
-                  WHITESPACE@471..472 " "
-                  GT@472..473 ">"
-                  WHITESPACE@473..474 " "
-                  EXPR_NUMBER@474..475
-                    FLOAT@474..475 "0"
-              WHITESPACE@475..476 " "
-              AND@476..478 "&&"
-              WHITESPACE@478..479 " "
-              EXPR_APPLY@479..510
-                EXPR_INDEX@479..489
-                  EXPR_VAR@479..482
-                    NAME@479..482
-                      IDENT@479..482 "std"
-                  DOT@482..483 "."
-                  NAME@483..489
-                    IDENT@483..489 "member"
-                ARGS_DESC@489..510
-                  L_PAREN@489..490 "("
-                  ARG@490..495
-                    EXPR_VAR@490..495
-                      NAME@490..495
-                        IDENT@490..495 "chars"
-                  COMMA@495..496 ","
-                  WHITESPACE@496..497 " "
-                  ARG@497..509
-                    EXPR_INDEX_EXPR@497..509
-                      LHS_EXPR@497..500
-                        EXPR_VAR@497..500
-                          NAME@497..500
-                            IDENT@497..500 "str"
-                      L_BRACK@500..501 "["
-                      EXPR_BINARY@501..508
-                        LHS_EXPR@501..504
-                          EXPR_VAR@501..504
-                            NAME@501..504
-                              IDENT@501..504 "len"
-                        WHITESPACE@504..505 " "
-                        MINUS@505..506 "-"
-                        WHITESPACE@506..507 " "
-                        EXPR_NUMBER@507..508
-                          FLOAT@507..508 "1"
-                      R_BRACK@508..509 "]"
-                  R_PAREN@509..510 ")"
-            WHITESPACE@510..511 " "
-            THEN_KW@511..515 "then"
-            WHITESPACE@515..522 "\n      "
-            TRUE_EXPR@522..559
-              EXPR_APPLY@522..559
-                EXPR_INDEX@522..537
-                  EXPR_VAR@522..525
-                    NAME@522..525
-                      IDENT@522..525 "std"
-                  DOT@525..526 "."
-                  NAME@526..537
-                    IDENT@526..537 "rstripChars"
-                ARGS_DESC@537..559
-                  L_PAREN@537..538 "("
-                  ARG@538..551
-                    EXPR_SLICE@538..551
-                      EXPR_VAR@538..541
-                        NAME@538..541
-                          IDENT@538..541 "str"
-                      SLICE_DESC@541..551
-                        L_BRACK@541..542 "["
-                        COLON@542..543 ":"
-                        SLICE_DESC_END@543..550
-                          EXPR_BINARY@543..550
-                            LHS_EXPR@543..546
-                              EXPR_VAR@543..546
-                                NAME@543..546
-                                  IDENT@543..546 "len"
-                            WHITESPACE@546..547 " "
-                            MINUS@547..548 "-"
-                            WHITESPACE@548..549 " "
-                            EXPR_NUMBER@549..550
-                              FLOAT@549..550 "1"
-                        R_BRACK@550..551 "]"
-                  COMMA@551..552 ","
-                  WHITESPACE@552..553 " "
-                  ARG@553..558
-                    EXPR_VAR@553..558
-                      NAME@553..558
-                        IDENT@553..558 "chars"
-                  R_PAREN@558..559 ")"
-            WHITESPACE@559..564 "\n    "
-            ELSE_KW@564..568 "else"
-            WHITESPACE@568..575 "\n      "
-            FALSE_EXPR@575..578
-              EXPR_VAR@575..578
-                NAME@575..578
-                  IDENT@575..578 "str"
+        WHITESPACE@460..465 "\n    "
+        EXPR_IF_THEN_ELSE@465..578
+          IF_KW@465..467 "if"
+          WHITESPACE@467..468 " "
+          EXPR_BINARY@468..510
+            LHS_EXPR@468..475
+              EXPR_BINARY@468..475
+                LHS_EXPR@468..471
+                  EXPR_VAR@468..471
+                    NAME@468..471
+                      IDENT@468..471 "len"
+                WHITESPACE@471..472 " "
+                GT@472..473 ">"
+                WHITESPACE@473..474 " "
+                EXPR_NUMBER@474..475
+                  FLOAT@474..475 "0"
+            WHITESPACE@475..476 " "
+            AND@476..478 "&&"
+            WHITESPACE@478..479 " "
+            EXPR_APPLY@479..510
+              EXPR_INDEX@479..489
+                EXPR_VAR@479..482
+                  NAME@479..482
+                    IDENT@479..482 "std"
+                DOT@482..483 "."
+                NAME@483..489
+                  IDENT@483..489 "member"
+              ARGS_DESC@489..510
+                L_PAREN@489..490 "("
+                ARG@490..495
+                  EXPR_VAR@490..495
+                    NAME@490..495
+                      IDENT@490..495 "chars"
+                COMMA@495..496 ","
+                WHITESPACE@496..497 " "
+                ARG@497..509
+                  EXPR_INDEX_EXPR@497..509
+                    LHS_EXPR@497..500
+                      EXPR_VAR@497..500
+                        NAME@497..500
+                          IDENT@497..500 "str"
+                    L_BRACK@500..501 "["
+                    EXPR_BINARY@501..508
+                      LHS_EXPR@501..504
+                        EXPR_VAR@501..504
+                          NAME@501..504
+                            IDENT@501..504 "len"
+                      WHITESPACE@504..505 " "
+                      MINUS@505..506 "-"
+                      WHITESPACE@506..507 " "
+                      EXPR_NUMBER@507..508
+                        FLOAT@507..508 "1"
+                    R_BRACK@508..509 "]"
+                R_PAREN@509..510 ")"
+          WHITESPACE@510..511 " "
+          THEN_KW@511..515 "then"
+          WHITESPACE@515..522 "\n      "
+          TRUE_EXPR@522..559
+            EXPR_APPLY@522..559
+              EXPR_INDEX@522..537
+                EXPR_VAR@522..525
+                  NAME@522..525
+                    IDENT@522..525 "std"
+                DOT@525..526 "."
+                NAME@526..537
+                  IDENT@526..537 "rstripChars"
+              ARGS_DESC@537..559
+                L_PAREN@537..538 "("
+                ARG@538..551
+                  EXPR_SLICE@538..551
+                    EXPR_VAR@538..541
+                      NAME@538..541
+                        IDENT@538..541 "str"
+                    SLICE_DESC@541..551
+                      L_BRACK@541..542 "["
+                      COLON@542..543 ":"
+                      SLICE_DESC_END@543..550
+                        EXPR_BINARY@543..550
+                          LHS_EXPR@543..546
+                            EXPR_VAR@543..546
+                              NAME@543..546
+                                IDENT@543..546 "len"
+                          WHITESPACE@546..547 " "
+                          MINUS@547..548 "-"
+                          WHITESPACE@548..549 " "
+                          EXPR_NUMBER@549..550
+                            FLOAT@549..550 "1"
+                      R_BRACK@550..551 "]"
+                COMMA@551..552 ","
+                WHITESPACE@552..553 " "
+                ARG@553..558
+                  EXPR_VAR@553..558
+                    NAME@553..558
+                      IDENT@553..558 "chars"
+                R_PAREN@558..559 ")"
+          WHITESPACE@559..564 "\n    "
+          ELSE_KW@564..568 "else"
+          WHITESPACE@568..575 "\n      "
+          FALSE_EXPR@575..578
+            EXPR_VAR@575..578
+              NAME@575..578
+                IDENT@575..578 "str"
       COMMA@578..579 ","
       WHITESPACE@579..583 "\n\n  "
       MEMBER_FIELD_METHOD@583..663
@@ -546,160 +546,160 @@
           WHITESPACE@839..844 "\n    "
           ELSE_KW@844..848 "else"
           WHITESPACE@848..855 "\n      "
-          FALSE_EXPR@855..1024
-            EXPR_LOCAL@855..1024
-              LOCAL_KW@855..860 "local"
-              WHITESPACE@860..861 " "
-              BIND_FUNCTION@861..922
-                NAME@861..867
-                  IDENT@861..867 "revStr"
-                PARAMS_DESC@867..872
-                  L_PAREN@867..868 "("
-                  PARAM@868..871
-                    DESTRUCT_FULL@868..871
-                      NAME@868..871
-                        IDENT@868..871 "str"
-                  R_PAREN@871..872 ")"
-                WHITESPACE@872..873 " "
-                ASSIGN@873..874 "="
-                WHITESPACE@874..875 " "
-                EXPR_APPLY@875..922
-                  EXPR_INDEX@875..883
-                    EXPR_VAR@875..878
-                      NAME@875..878
-                        IDENT@875..878 "std"
-                    DOT@878..879 "."
-                    NAME@879..883
-                      IDENT@879..883 "join"
-                  ARGS_DESC@883..922
-                    L_PAREN@883..884 "("
-                    ARG@884..886
-                      EXPR_STRING@884..886
-                        STRING_SINGLE@884..886 "''"
-                    COMMA@886..887 ","
-                    WHITESPACE@887..888 " "
-                    ARG@888..921
-                      EXPR_APPLY@888..921
-                        EXPR_INDEX@888..899
-                          EXPR_VAR@888..891
-                            NAME@888..891
-                              IDENT@888..891 "std"
-                          DOT@891..892 "."
-                          NAME@892..899
-                            IDENT@892..899 "reverse"
-                        ARGS_DESC@899..921
-                          L_PAREN@899..900 "("
-                          ARG@900..920
-                            EXPR_APPLY@900..920
-                              EXPR_INDEX@900..915
-                                EXPR_VAR@900..903
-                                  NAME@900..903
-                                    IDENT@900..903 "std"
-                                DOT@903..904 "."
-                                NAME@904..915
-                                  IDENT@904..915 "stringChars"
-                              ARGS_DESC@915..920
-                                L_PAREN@915..916 "("
-                                ARG@916..919
-                                  EXPR_VAR@916..919
-                                    NAME@916..919
-                                      IDENT@916..919 "str"
-                                R_PAREN@919..920 ")"
-                          R_PAREN@920..921 ")"
-                    R_PAREN@921..922 ")"
-              SEMI@922..923 ";"
-              WHITESPACE@923..930 "\n      "
-              EXPR_APPLY@930..1024
-                EXPR_INDEX@930..937
-                  EXPR_VAR@930..933
-                    NAME@930..933
-                      IDENT@930..933 "std"
-                  DOT@933..934 "."
-                  NAME@934..937
-                    IDENT@934..937 "map"
-                ARGS_DESC@937..1024
-                  L_PAREN@937..938 "("
-                  ARG@938..959
-                    EXPR_FUNCTION@938..959
-                      FUNCTION_KW@938..946 "function"
-                      PARAMS_DESC@946..949
-                        L_PAREN@946..947 "("
-                        PARAM@947..948
-                          DESTRUCT_FULL@947..948
-                            NAME@947..948
-                              IDENT@947..948 "e"
-                        R_PAREN@948..949 ")"
-                      WHITESPACE@949..950 " "
-                      EXPR_APPLY@950..959
-                        EXPR_VAR@950..956
-                          NAME@950..956
-                            IDENT@950..956 "revStr"
-                        ARGS_DESC@956..959
-                          L_PAREN@956..957 "("
-                          ARG@957..958
-                            EXPR_VAR@957..958
-                              NAME@957..958
-                                IDENT@957..958 "e"
-                          R_PAREN@958..959 ")"
-                  COMMA@959..960 ","
-                  WHITESPACE@960..961 " "
-                  ARG@961..1023
-                    EXPR_APPLY@961..1023
-                      EXPR_INDEX@961..972
-                        EXPR_VAR@961..964
-                          NAME@961..964
-                            IDENT@961..964 "std"
-                        DOT@964..965 "."
-                        NAME@965..972
-                          IDENT@965..972 "reverse"
-                      ARGS_DESC@972..1023
-                        L_PAREN@972..973 "("
-                        ARG@973..1022
-                          EXPR_APPLY@973..1022
-                            EXPR_INDEX@973..987
-                              EXPR_VAR@973..976
-                                NAME@973..976
-                                  IDENT@973..976 "std"
-                              DOT@976..977 "."
-                              NAME@977..987
-                                IDENT@977..987 "splitLimit"
-                            ARGS_DESC@987..1022
-                              L_PAREN@987..988 "("
-                              ARG@988..999
-                                EXPR_APPLY@988..999
-                                  EXPR_VAR@988..994
-                                    NAME@988..994
-                                      IDENT@988..994 "revStr"
-                                  ARGS_DESC@994..999
-                                    L_PAREN@994..995 "("
-                                    ARG@995..998
-                                      EXPR_VAR@995..998
-                                        NAME@995..998
-                                          IDENT@995..998 "str"
-                                    R_PAREN@998..999 ")"
-                              COMMA@999..1000 ","
-                              WHITESPACE@1000..1001 " "
-                              ARG@1001..1010
-                                EXPR_APPLY@1001..1010
-                                  EXPR_VAR@1001..1007
-                                    NAME@1001..1007
-                                      IDENT@1001..1007 "revStr"
-                                  ARGS_DESC@1007..1010
-                                    L_PAREN@1007..1008 "("
-                                    ARG@1008..1009
-                                      EXPR_VAR@1008..1009
-                                        NAME@1008..1009
-                                          IDENT@1008..1009 "c"
-                                    R_PAREN@1009..1010 ")"
-                              COMMA@1010..1011 ","
-                              WHITESPACE@1011..1012 " "
-                              ARG@1012..1021
-                                EXPR_VAR@1012..1021
-                                  NAME@1012..1021
-                                    IDENT@1012..1021 "maxsplits"
-                              R_PAREN@1021..1022 ")"
-                        R_PAREN@1022..1023 ")"
-                  R_PAREN@1023..1024 ")"
+          STMT_LOCAL@855..923
+            LOCAL_KW@855..860 "local"
+            WHITESPACE@860..861 " "
+            BIND_FUNCTION@861..922
+              NAME@861..867
+                IDENT@861..867 "revStr"
+              PARAMS_DESC@867..872
+                L_PAREN@867..868 "("
+                PARAM@868..871
+                  DESTRUCT_FULL@868..871
+                    NAME@868..871
+                      IDENT@868..871 "str"
+                R_PAREN@871..872 ")"
+              WHITESPACE@872..873 " "
+              ASSIGN@873..874 "="
+              WHITESPACE@874..875 " "
+              EXPR_APPLY@875..922
+                EXPR_INDEX@875..883
+                  EXPR_VAR@875..878
+                    NAME@875..878
+                      IDENT@875..878 "std"
+                  DOT@878..879 "."
+                  NAME@879..883
+                    IDENT@879..883 "join"
+                ARGS_DESC@883..922
+                  L_PAREN@883..884 "("
+                  ARG@884..886
+                    EXPR_STRING@884..886
+                      STRING_SINGLE@884..886 "''"
+                  COMMA@886..887 ","
+                  WHITESPACE@887..888 " "
+                  ARG@888..921
+                    EXPR_APPLY@888..921
+                      EXPR_INDEX@888..899
+                        EXPR_VAR@888..891
+                          NAME@888..891
+                            IDENT@888..891 "std"
+                        DOT@891..892 "."
+                        NAME@892..899
+                          IDENT@892..899 "reverse"
+                      ARGS_DESC@899..921
+                        L_PAREN@899..900 "("
+                        ARG@900..920
+                          EXPR_APPLY@900..920
+                            EXPR_INDEX@900..915
+                              EXPR_VAR@900..903
+                                NAME@900..903
+                                  IDENT@900..903 "std"
+                              DOT@903..904 "."
+                              NAME@904..915
+                                IDENT@904..915 "stringChars"
+                            ARGS_DESC@915..920
+                              L_PAREN@915..916 "("
+                              ARG@916..919
+                                EXPR_VAR@916..919
+                                  NAME@916..919
+                                    IDENT@916..919 "str"
+                              R_PAREN@919..920 ")"
+                        R_PAREN@920..921 ")"
+                  R_PAREN@921..922 ")"
+            SEMI@922..923 ";"
+          WHITESPACE@923..930 "\n      "
+          FALSE_EXPR@930..1024
+            EXPR_APPLY@930..1024
+              EXPR_INDEX@930..937
+                EXPR_VAR@930..933
+                  NAME@930..933
+                    IDENT@930..933 "std"
+                DOT@933..934 "."
+                NAME@934..937
+                  IDENT@934..937 "map"
+              ARGS_DESC@937..1024
+                L_PAREN@937..938 "("
+                ARG@938..959
+                  EXPR_FUNCTION@938..959
+                    FUNCTION_KW@938..946 "function"
+                    PARAMS_DESC@946..949
+                      L_PAREN@946..947 "("
+                      PARAM@947..948
+                        DESTRUCT_FULL@947..948
+                          NAME@947..948
+                            IDENT@947..948 "e"
+                      R_PAREN@948..949 ")"
+                    WHITESPACE@949..950 " "
+                    EXPR_APPLY@950..959
+                      EXPR_VAR@950..956
+                        NAME@950..956
+                          IDENT@950..956 "revStr"
+                      ARGS_DESC@956..959
+                        L_PAREN@956..957 "("
+                        ARG@957..958
+                          EXPR_VAR@957..958
+                            NAME@957..958
+                              IDENT@957..958 "e"
+                        R_PAREN@958..959 ")"
+                COMMA@959..960 ","
+                WHITESPACE@960..961 " "
+                ARG@961..1023
+                  EXPR_APPLY@961..1023
+                    EXPR_INDEX@961..972
+                      EXPR_VAR@961..964
+                        NAME@961..964
+                          IDENT@961..964 "std"
+                      DOT@964..965 "."
+                      NAME@965..972
+                        IDENT@965..972 "reverse"
+                    ARGS_DESC@972..1023
+                      L_PAREN@972..973 "("
+                      ARG@973..1022
+                        EXPR_APPLY@973..1022
+                          EXPR_INDEX@973..987
+                            EXPR_VAR@973..976
+                              NAME@973..976
+                                IDENT@973..976 "std"
+                            DOT@976..977 "."
+                            NAME@977..987
+                              IDENT@977..987 "splitLimit"
+                          ARGS_DESC@987..1022
+                            L_PAREN@987..988 "("
+                            ARG@988..999
+                              EXPR_APPLY@988..999
+                                EXPR_VAR@988..994
+                                  NAME@988..994
+                                    IDENT@988..994 "revStr"
+                                ARGS_DESC@994..999
+                                  L_PAREN@994..995 "("
+                                  ARG@995..998
+                                    EXPR_VAR@995..998
+                                      NAME@995..998
+                                        IDENT@995..998 "str"
+                                  R_PAREN@998..999 ")"
+                            COMMA@999..1000 ","
+                            WHITESPACE@1000..1001 " "
+                            ARG@1001..1010
+                              EXPR_APPLY@1001..1010
+                                EXPR_VAR@1001..1007
+                                  NAME@1001..1007
+                                    IDENT@1001..1007 "revStr"
+                                ARGS_DESC@1007..1010
+                                  L_PAREN@1007..1008 "("
+                                  ARG@1008..1009
+                                    EXPR_VAR@1008..1009
+                                      NAME@1008..1009
+                                        IDENT@1008..1009 "c"
+                                  R_PAREN@1009..1010 ")"
+                            COMMA@1010..1011 ","
+                            WHITESPACE@1011..1012 " "
+                            ARG@1012..1021
+                              EXPR_VAR@1012..1021
+                                NAME@1012..1021
+                                  IDENT@1012..1021 "maxsplits"
+                            R_PAREN@1021..1022 ")"
+                      R_PAREN@1022..1023 ")"
+                R_PAREN@1023..1024 ")"
       COMMA@1024..1025 ","
       WHITESPACE@1025..1029 "\n\n  "
       MEMBER_FIELD_METHOD@1029..1071
@@ -1819,7 +1819,7 @@
           R_PAREN@2824..2825 ")"
         COLONCOLON@2825..2827 "::"
         WHITESPACE@2827..2832 "\n    "
-        EXPR_LOCAL@2832..3495
+        STMT_LOCAL@2832..3136
           LOCAL_KW@2832..2837 "local"
           WHITESPACE@2837..2838 " "
           BIND_FUNCTION@2838..3135
@@ -1855,7 +1855,7 @@
                   EXPR_ARRAY_COMP@2876..3134
                     L_BRACK@2876..2877 "["
                     WHITESPACE@2877..2886 "\n        "
-                    EXPR_LOCAL@2886..3085
+                    STMT_LOCAL@2886..2918
                       LOCAL_KW@2886..2891 "local"
                       WHITESPACE@2891..2892 " "
                       BIND_DESTRUCT@2892..2917
@@ -1876,87 +1876,87 @@
                               IDENT@2915..2916 "k"
                           R_BRACK@2916..2917 "]"
                       SEMI@2917..2918 ";"
-                      WHITESPACE@2918..2927 "\n        "
-                      EXPR_IF_THEN_ELSE@2927..3085
-                        IF_KW@2927..2929 "if"
-                        WHITESPACE@2929..2930 " "
-                        EXPR_APPLY@2930..2958
-                          EXPR_INDEX@2930..2941
-                            EXPR_VAR@2930..2933
-                              NAME@2930..2933
-                                IDENT@2930..2933 "std"
-                            DOT@2933..2934 "."
-                            NAME@2934..2941
-                              IDENT@2934..2941 "isArray"
-                          ARGS_DESC@2941..2958
-                            L_PAREN@2941..2942 "("
-                            ARG@2942..2957
-                              EXPR_VAR@2942..2957
-                                NAME@2942..2957
-                                  IDENT@2942..2957 "value_or_values"
-                            R_PAREN@2957..2958 ")"
-                        WHITESPACE@2958..2959 " "
-                        THEN_KW@2959..2963 "then"
-                        WHITESPACE@2963..2974 "\n          "
-                        TRUE_EXPR@2974..3027
-                          EXPR_ARRAY_COMP@2974..3027
-                            L_BRACK@2974..2975 "["
-                            EXPR_BINARY@2975..2997
-                              LHS_EXPR@2975..2984
-                                EXPR_STRING@2975..2984
-                                  STRING_SINGLE@2975..2984 "'%s = %s'"
-                              WHITESPACE@2984..2985 " "
-                              MODULO@2985..2986 "%"
-                              WHITESPACE@2986..2987 " "
-                              EXPR_ARRAY@2987..2997
-                                L_BRACK@2987..2988 "["
-                                EXPR_VAR@2988..2989
-                                  NAME@2988..2989
-                                    IDENT@2988..2989 "k"
-                                COMMA@2989..2990 ","
-                                WHITESPACE@2990..2991 " "
-                                EXPR_VAR@2991..2996
-                                  NAME@2991..2996
-                                    IDENT@2991..2996 "value"
-                                R_BRACK@2996..2997 "]"
-                            WHITESPACE@2997..2998 " "
-                            FOR_SPEC@2998..3026
-                              FOR_KW@2998..3001 "for"
-                              WHITESPACE@3001..3002 " "
-                              NAME@3002..3007
-                                IDENT@3002..3007 "value"
-                              WHITESPACE@3007..3008 " "
-                              IN_KW@3008..3010 "in"
-                              WHITESPACE@3010..3011 " "
-                              EXPR_VAR@3011..3026
-                                NAME@3011..3026
-                                  IDENT@3011..3026 "value_or_values"
-                            R_BRACK@3026..3027 "]"
-                        WHITESPACE@3027..3036 "\n        "
-                        ELSE_KW@3036..3040 "else"
-                        WHITESPACE@3040..3051 "\n          "
-                        FALSE_EXPR@3051..3085
-                          EXPR_ARRAY@3051..3085
-                            L_BRACK@3051..3052 "["
-                            EXPR_BINARY@3052..3084
-                              LHS_EXPR@3052..3061
-                                EXPR_STRING@3052..3061
-                                  STRING_SINGLE@3052..3061 "'%s = %s'"
-                              WHITESPACE@3061..3062 " "
-                              MODULO@3062..3063 "%"
-                              WHITESPACE@3063..3064 " "
-                              EXPR_ARRAY@3064..3084
-                                L_BRACK@3064..3065 "["
-                                EXPR_VAR@3065..3066
-                                  NAME@3065..3066
-                                    IDENT@3065..3066 "k"
-                                COMMA@3066..3067 ","
-                                WHITESPACE@3067..3068 " "
-                                EXPR_VAR@3068..3083
-                                  NAME@3068..3083
-                                    IDENT@3068..3083 "value_or_values"
-                                R_BRACK@3083..3084 "]"
-                            R_BRACK@3084..3085 "]"
+                    WHITESPACE@2918..2927 "\n        "
+                    EXPR_IF_THEN_ELSE@2927..3085
+                      IF_KW@2927..2929 "if"
+                      WHITESPACE@2929..2930 " "
+                      EXPR_APPLY@2930..2958
+                        EXPR_INDEX@2930..2941
+                          EXPR_VAR@2930..2933
+                            NAME@2930..2933
+                              IDENT@2930..2933 "std"
+                          DOT@2933..2934 "."
+                          NAME@2934..2941
+                            IDENT@2934..2941 "isArray"
+                        ARGS_DESC@2941..2958
+                          L_PAREN@2941..2942 "("
+                          ARG@2942..2957
+                            EXPR_VAR@2942..2957
+                              NAME@2942..2957
+                                IDENT@2942..2957 "value_or_values"
+                          R_PAREN@2957..2958 ")"
+                      WHITESPACE@2958..2959 " "
+                      THEN_KW@2959..2963 "then"
+                      WHITESPACE@2963..2974 "\n          "
+                      TRUE_EXPR@2974..3027
+                        EXPR_ARRAY_COMP@2974..3027
+                          L_BRACK@2974..2975 "["
+                          EXPR_BINARY@2975..2997
+                            LHS_EXPR@2975..2984
+                              EXPR_STRING@2975..2984
+                                STRING_SINGLE@2975..2984 "'%s = %s'"
+                            WHITESPACE@2984..2985 " "
+                            MODULO@2985..2986 "%"
+                            WHITESPACE@2986..2987 " "
+                            EXPR_ARRAY@2987..2997
+                              L_BRACK@2987..2988 "["
+                              EXPR_VAR@2988..2989
+                                NAME@2988..2989
+                                  IDENT@2988..2989 "k"
+                              COMMA@2989..2990 ","
+                              WHITESPACE@2990..2991 " "
+                              EXPR_VAR@2991..2996
+                                NAME@2991..2996
+                                  IDENT@2991..2996 "value"
+                              R_BRACK@2996..2997 "]"
+                          WHITESPACE@2997..2998 " "
+                          FOR_SPEC@2998..3026
+                            FOR_KW@2998..3001 "for"
+                            WHITESPACE@3001..3002 " "
+                            NAME@3002..3007
+                              IDENT@3002..3007 "value"
+                            WHITESPACE@3007..3008 " "
+                            IN_KW@3008..3010 "in"
+                            WHITESPACE@3010..3011 " "
+                            EXPR_VAR@3011..3026
+                              NAME@3011..3026
+                                IDENT@3011..3026 "value_or_values"
+                          R_BRACK@3026..3027 "]"
+                      WHITESPACE@3027..3036 "\n        "
+                      ELSE_KW@3036..3040 "else"
+                      WHITESPACE@3040..3051 "\n          "
+                      FALSE_EXPR@3051..3085
+                        EXPR_ARRAY@3051..3085
+                          L_BRACK@3051..3052 "["
+                          EXPR_BINARY@3052..3084
+                            LHS_EXPR@3052..3061
+                              EXPR_STRING@3052..3061
+                                STRING_SINGLE@3052..3061 "'%s = %s'"
+                            WHITESPACE@3061..3062 " "
+                            MODULO@3062..3063 "%"
+                            WHITESPACE@3063..3064 " "
+                            EXPR_ARRAY@3064..3084
+                              L_BRACK@3064..3065 "["
+                              EXPR_VAR@3065..3066
+                                NAME@3065..3066
+                                  IDENT@3065..3066 "k"
+                              COMMA@3066..3067 ","
+                              WHITESPACE@3067..3068 " "
+                              EXPR_VAR@3068..3083
+                                NAME@3068..3083
+                                  IDENT@3068..3083 "value_or_values"
+                              R_BRACK@3083..3084 "]"
+                          R_BRACK@3084..3085 "]"
                     WHITESPACE@3085..3095 "\n\n        "
                     FOR_SPEC@3095..3126
                       FOR_KW@3095..3098 "for"
@@ -1985,241 +1985,241 @@
                     R_BRACK@3133..3134 "]"
                 R_PAREN@3134..3135 ")"
           SEMI@3135..3136 ";"
-          WHITESPACE@3136..3142 "\n\n    "
-          EXPR_LOCAL@3142..3495
-            LOCAL_KW@3142..3147 "local"
-            WHITESPACE@3147..3148 " "
-            BIND_FUNCTION@3148..3216
-              NAME@3148..3161
-                IDENT@3148..3161 "section_lines"
-              PARAMS_DESC@3161..3175
-                L_PAREN@3161..3162 "("
-                PARAM@3162..3167
-                  DESTRUCT_FULL@3162..3167
-                    NAME@3162..3167
-                      IDENT@3162..3167 "sname"
-                COMMA@3167..3168 ","
-                WHITESPACE@3168..3169 " "
-                PARAM@3169..3174
-                  DESTRUCT_FULL@3169..3174
-                    NAME@3169..3174
-                      IDENT@3169..3174 "sbody"
-                R_PAREN@3174..3175 ")"
-              WHITESPACE@3175..3176 " "
-              ASSIGN@3176..3177 "="
-              WHITESPACE@3177..3178 " "
-              EXPR_BINARY@3178..3216
-                LHS_EXPR@3178..3196
-                  EXPR_ARRAY@3178..3196
-                    L_BRACK@3178..3179 "["
-                    EXPR_BINARY@3179..3195
-                      LHS_EXPR@3179..3185
-                        EXPR_STRING@3179..3185
-                          STRING_SINGLE@3179..3185 "'[%s]'"
-                      WHITESPACE@3185..3186 " "
-                      MODULO@3186..3187 "%"
-                      WHITESPACE@3187..3188 " "
-                      EXPR_ARRAY@3188..3195
-                        L_BRACK@3188..3189 "["
-                        EXPR_VAR@3189..3194
-                          NAME@3189..3194
-                            IDENT@3189..3194 "sname"
-                        R_BRACK@3194..3195 "]"
-                    R_BRACK@3195..3196 "]"
-                WHITESPACE@3196..3197 " "
-                PLUS@3197..3198 "+"
-                WHITESPACE@3198..3199 " "
-                EXPR_APPLY@3199..3216
-                  EXPR_VAR@3199..3209
-                    NAME@3199..3209
-                      IDENT@3199..3209 "body_lines"
-                  ARGS_DESC@3209..3216
-                    L_PAREN@3209..3210 "("
-                    ARG@3210..3215
-                      EXPR_VAR@3210..3215
-                        NAME@3210..3215
-                          IDENT@3210..3215 "sbody"
-                    R_PAREN@3215..3216 ")"
-            COMMA@3216..3217 ","
-            WHITESPACE@3217..3228 "\n          "
-            BIND_DESTRUCT@3228..3303
-              DESTRUCT_FULL@3228..3237
-                NAME@3228..3237
-                  IDENT@3228..3237 "main_body"
-              WHITESPACE@3237..3238 " "
-              ASSIGN@3238..3239 "="
-              WHITESPACE@3239..3240 " "
-              EXPR_IF_THEN_ELSE@3240..3303
-                IF_KW@3240..3242 "if"
-                WHITESPACE@3242..3243 " "
-                EXPR_APPLY@3243..3269
-                  EXPR_INDEX@3243..3256
-                    EXPR_VAR@3243..3246
-                      NAME@3243..3246
-                        IDENT@3243..3246 "std"
-                    DOT@3246..3247 "."
-                    NAME@3247..3256
-                      IDENT@3247..3256 "objectHas"
-                  ARGS_DESC@3256..3269
-                    L_PAREN@3256..3257 "("
-                    ARG@3257..3260
-                      EXPR_VAR@3257..3260
-                        NAME@3257..3260
-                          IDENT@3257..3260 "ini"
-                    COMMA@3260..3261 ","
-                    WHITESPACE@3261..3262 " "
-                    ARG@3262..3268
-                      EXPR_STRING@3262..3268
-                        STRING_SINGLE@3262..3268 "'main'"
-                    R_PAREN@3268..3269 ")"
-                WHITESPACE@3269..3270 " "
-                THEN_KW@3270..3274 "then"
-                WHITESPACE@3274..3275 " "
-                TRUE_EXPR@3275..3295
-                  EXPR_APPLY@3275..3295
-                    EXPR_VAR@3275..3285
-                      NAME@3275..3285
-                        IDENT@3275..3285 "body_lines"
-                    ARGS_DESC@3285..3295
-                      L_PAREN@3285..3286 "("
-                      ARG@3286..3294
-                        EXPR_INDEX@3286..3294
-                          EXPR_VAR@3286..3289
-                            NAME@3286..3289
-                              IDENT@3286..3289 "ini"
-                          DOT@3289..3290 "."
-                          NAME@3290..3294
-                            IDENT@3290..3294 "main"
-                      R_PAREN@3294..3295 ")"
-                WHITESPACE@3295..3296 " "
-                ELSE_KW@3296..3300 "else"
-                WHITESPACE@3300..3301 " "
-                FALSE_EXPR@3301..3303
-                  EXPR_ARRAY@3301..3303
-                    L_BRACK@3301..3302 "["
-                    R_BRACK@3302..3303 "]"
-            COMMA@3303..3304 ","
-            WHITESPACE@3304..3315 "\n          "
-            BIND_DESTRUCT@3315..3423
-              DESTRUCT_FULL@3315..3327
-                NAME@3315..3327
-                  IDENT@3315..3327 "all_sections"
-              WHITESPACE@3327..3328 " "
-              ASSIGN@3328..3329 "="
-              WHITESPACE@3329..3330 " "
-              EXPR_ARRAY_COMP@3330..3423
-                L_BRACK@3330..3331 "["
-                WHITESPACE@3331..3338 "\n      "
-                EXPR_APPLY@3338..3371
-                  EXPR_VAR@3338..3351
-                    NAME@3338..3351
-                      IDENT@3338..3351 "section_lines"
-                  ARGS_DESC@3351..3371
-                    L_PAREN@3351..3352 "("
-                    ARG@3352..3353
-                      EXPR_VAR@3352..3353
-                        NAME@3352..3353
-                          IDENT@3352..3353 "k"
-                    COMMA@3353..3354 ","
-                    WHITESPACE@3354..3355 " "
-                    ARG@3355..3370
-                      EXPR_INDEX_EXPR@3355..3370
-                        LHS_EXPR@3355..3367
-                          EXPR_INDEX@3355..3367
-                            EXPR_VAR@3355..3358
-                              NAME@3355..3358
-                                IDENT@3355..3358 "ini"
-                            DOT@3358..3359 "."
-                            NAME@3359..3367
-                              IDENT@3359..3367 "sections"
-                        L_BRACK@3367..3368 "["
-                        EXPR_VAR@3368..3369
-                          NAME@3368..3369
-                            IDENT@3368..3369 "k"
-                        R_BRACK@3369..3370 "]"
-                    R_PAREN@3370..3371 ")"
-                WHITESPACE@3371..3378 "\n      "
-                FOR_SPEC@3378..3417
-                  FOR_KW@3378..3381 "for"
-                  WHITESPACE@3381..3382 " "
-                  NAME@3382..3383
-                    IDENT@3382..3383 "k"
-                  WHITESPACE@3383..3384 " "
-                  IN_KW@3384..3386 "in"
-                  WHITESPACE@3386..3387 " "
-                  EXPR_APPLY@3387..3417
-                    EXPR_INDEX@3387..3403
-                      EXPR_VAR@3387..3390
-                        NAME@3387..3390
-                          IDENT@3387..3390 "std"
-                      DOT@3390..3391 "."
-                      NAME@3391..3403
-                        IDENT@3391..3403 "objectFields"
-                    ARGS_DESC@3403..3417
-                      L_PAREN@3403..3404 "("
-                      ARG@3404..3416
-                        EXPR_INDEX@3404..3416
-                          EXPR_VAR@3404..3407
-                            NAME@3404..3407
-                              IDENT@3404..3407 "ini"
-                          DOT@3407..3408 "."
-                          NAME@3408..3416
-                            IDENT@3408..3416 "sections"
-                      R_PAREN@3416..3417 ")"
-                WHITESPACE@3417..3422 "\n    "
-                R_BRACK@3422..3423 "]"
-            SEMI@3423..3424 ";"
-            WHITESPACE@3424..3429 "\n    "
-            EXPR_APPLY@3429..3495
-              EXPR_INDEX@3429..3437
-                EXPR_VAR@3429..3432
-                  NAME@3429..3432
-                    IDENT@3429..3432 "std"
-                DOT@3432..3433 "."
-                NAME@3433..3437
-                  IDENT@3433..3437 "join"
-              ARGS_DESC@3437..3495
-                L_PAREN@3437..3438 "("
-                ARG@3438..3442
-                  EXPR_STRING@3438..3442
-                    STRING_SINGLE@3438..3442 "'\\n'"
-                COMMA@3442..3443 ","
-                WHITESPACE@3443..3444 " "
-                ARG@3444..3494
-                  EXPR_BINARY@3444..3494
-                    LHS_EXPR@3444..3487
-                      EXPR_BINARY@3444..3487
-                        LHS_EXPR@3444..3453
-                          EXPR_VAR@3444..3453
-                            NAME@3444..3453
-                              IDENT@3444..3453 "main_body"
-                        WHITESPACE@3453..3454 " "
-                        PLUS@3454..3455 "+"
-                        WHITESPACE@3455..3456 " "
-                        EXPR_APPLY@3456..3487
-                          EXPR_INDEX@3456..3473
-                            EXPR_VAR@3456..3459
-                              NAME@3456..3459
-                                IDENT@3456..3459 "std"
-                            DOT@3459..3460 "."
-                            NAME@3460..3473
-                              IDENT@3460..3473 "flattenArrays"
-                          ARGS_DESC@3473..3487
-                            L_PAREN@3473..3474 "("
-                            ARG@3474..3486
-                              EXPR_VAR@3474..3486
-                                NAME@3474..3486
-                                  IDENT@3474..3486 "all_sections"
-                            R_PAREN@3486..3487 ")"
-                    WHITESPACE@3487..3488 " "
-                    PLUS@3488..3489 "+"
-                    WHITESPACE@3489..3490 " "
-                    EXPR_ARRAY@3490..3494
-                      L_BRACK@3490..3491 "["
-                      EXPR_STRING@3491..3493
-                        STRING_SINGLE@3491..3493 "''"
-                      R_BRACK@3493..3494 "]"
-                R_PAREN@3494..3495 ")"
+        WHITESPACE@3136..3142 "\n\n    "
+        STMT_LOCAL@3142..3424
+          LOCAL_KW@3142..3147 "local"
+          WHITESPACE@3147..3148 " "
+          BIND_FUNCTION@3148..3216
+            NAME@3148..3161
+              IDENT@3148..3161 "section_lines"
+            PARAMS_DESC@3161..3175
+              L_PAREN@3161..3162 "("
+              PARAM@3162..3167
+                DESTRUCT_FULL@3162..3167
+                  NAME@3162..3167
+                    IDENT@3162..3167 "sname"
+              COMMA@3167..3168 ","
+              WHITESPACE@3168..3169 " "
+              PARAM@3169..3174
+                DESTRUCT_FULL@3169..3174
+                  NAME@3169..3174
+                    IDENT@3169..3174 "sbody"
+              R_PAREN@3174..3175 ")"
+            WHITESPACE@3175..3176 " "
+            ASSIGN@3176..3177 "="
+            WHITESPACE@3177..3178 " "
+            EXPR_BINARY@3178..3216
+              LHS_EXPR@3178..3196
+                EXPR_ARRAY@3178..3196
+                  L_BRACK@3178..3179 "["
+                  EXPR_BINARY@3179..3195
+                    LHS_EXPR@3179..3185
+                      EXPR_STRING@3179..3185
+                        STRING_SINGLE@3179..3185 "'[%s]'"
+                    WHITESPACE@3185..3186 " "
+                    MODULO@3186..3187 "%"
+                    WHITESPACE@3187..3188 " "
+                    EXPR_ARRAY@3188..3195
+                      L_BRACK@3188..3189 "["
+                      EXPR_VAR@3189..3194
+                        NAME@3189..3194
+                          IDENT@3189..3194 "sname"
+                      R_BRACK@3194..3195 "]"
+                  R_BRACK@3195..3196 "]"
+              WHITESPACE@3196..3197 " "
+              PLUS@3197..3198 "+"
+              WHITESPACE@3198..3199 " "
+              EXPR_APPLY@3199..3216
+                EXPR_VAR@3199..3209
+                  NAME@3199..3209
+                    IDENT@3199..3209 "body_lines"
+                ARGS_DESC@3209..3216
+                  L_PAREN@3209..3210 "("
+                  ARG@3210..3215
+                    EXPR_VAR@3210..3215
+                      NAME@3210..3215
+                        IDENT@3210..3215 "sbody"
+                  R_PAREN@3215..3216 ")"
+          COMMA@3216..3217 ","
+          WHITESPACE@3217..3228 "\n          "
+          BIND_DESTRUCT@3228..3303
+            DESTRUCT_FULL@3228..3237
+              NAME@3228..3237
+                IDENT@3228..3237 "main_body"
+            WHITESPACE@3237..3238 " "
+            ASSIGN@3238..3239 "="
+            WHITESPACE@3239..3240 " "
+            EXPR_IF_THEN_ELSE@3240..3303
+              IF_KW@3240..3242 "if"
+              WHITESPACE@3242..3243 " "
+              EXPR_APPLY@3243..3269
+                EXPR_INDEX@3243..3256
+                  EXPR_VAR@3243..3246
+                    NAME@3243..3246
+                      IDENT@3243..3246 "std"
+                  DOT@3246..3247 "."
+                  NAME@3247..3256
+                    IDENT@3247..3256 "objectHas"
+                ARGS_DESC@3256..3269
+                  L_PAREN@3256..3257 "("
+                  ARG@3257..3260
+                    EXPR_VAR@3257..3260
+                      NAME@3257..3260
+                        IDENT@3257..3260 "ini"
+                  COMMA@3260..3261 ","
+                  WHITESPACE@3261..3262 " "
+                  ARG@3262..3268
+                    EXPR_STRING@3262..3268
+                      STRING_SINGLE@3262..3268 "'main'"
+                  R_PAREN@3268..3269 ")"
+              WHITESPACE@3269..3270 " "
+              THEN_KW@3270..3274 "then"
+              WHITESPACE@3274..3275 " "
+              TRUE_EXPR@3275..3295
+                EXPR_APPLY@3275..3295
+                  EXPR_VAR@3275..3285
+                    NAME@3275..3285
+                      IDENT@3275..3285 "body_lines"
+                  ARGS_DESC@3285..3295
+                    L_PAREN@3285..3286 "("
+                    ARG@3286..3294
+                      EXPR_INDEX@3286..3294
+                        EXPR_VAR@3286..3289
+                          NAME@3286..3289
+                            IDENT@3286..3289 "ini"
+                        DOT@3289..3290 "."
+                        NAME@3290..3294
+                          IDENT@3290..3294 "main"
+                    R_PAREN@3294..3295 ")"
+              WHITESPACE@3295..3296 " "
+              ELSE_KW@3296..3300 "else"
+              WHITESPACE@3300..3301 " "
+              FALSE_EXPR@3301..3303
+                EXPR_ARRAY@3301..3303
+                  L_BRACK@3301..3302 "["
+                  R_BRACK@3302..3303 "]"
+          COMMA@3303..3304 ","
+          WHITESPACE@3304..3315 "\n          "
+          BIND_DESTRUCT@3315..3423
+            DESTRUCT_FULL@3315..3327
+              NAME@3315..3327
+                IDENT@3315..3327 "all_sections"
+            WHITESPACE@3327..3328 " "
+            ASSIGN@3328..3329 "="
+            WHITESPACE@3329..3330 " "
+            EXPR_ARRAY_COMP@3330..3423
+              L_BRACK@3330..3331 "["
+              WHITESPACE@3331..3338 "\n      "
+              EXPR_APPLY@3338..3371
+                EXPR_VAR@3338..3351
+                  NAME@3338..3351
+                    IDENT@3338..3351 "section_lines"
+                ARGS_DESC@3351..3371
+                  L_PAREN@3351..3352 "("
+                  ARG@3352..3353
+                    EXPR_VAR@3352..3353
+                      NAME@3352..3353
+                        IDENT@3352..3353 "k"
+                  COMMA@3353..3354 ","
+                  WHITESPACE@3354..3355 " "
+                  ARG@3355..3370
+                    EXPR_INDEX_EXPR@3355..3370
+                      LHS_EXPR@3355..3367
+                        EXPR_INDEX@3355..3367
+                          EXPR_VAR@3355..3358
+                            NAME@3355..3358
+                              IDENT@3355..3358 "ini"
+                          DOT@3358..3359 "."
+                          NAME@3359..3367
+                            IDENT@3359..3367 "sections"
+                      L_BRACK@3367..3368 "["
+                      EXPR_VAR@3368..3369
+                        NAME@3368..3369
+                          IDENT@3368..3369 "k"
+                      R_BRACK@3369..3370 "]"
+                  R_PAREN@3370..3371 ")"
+              WHITESPACE@3371..3378 "\n      "
+              FOR_SPEC@3378..3417
+                FOR_KW@3378..3381 "for"
+                WHITESPACE@3381..3382 " "
+                NAME@3382..3383
+                  IDENT@3382..3383 "k"
+                WHITESPACE@3383..3384 " "
+                IN_KW@3384..3386 "in"
+                WHITESPACE@3386..3387 " "
+                EXPR_APPLY@3387..3417
+                  EXPR_INDEX@3387..3403
+                    EXPR_VAR@3387..3390
+                      NAME@3387..3390
+                        IDENT@3387..3390 "std"
+                    DOT@3390..3391 "."
+                    NAME@3391..3403
+                      IDENT@3391..3403 "objectFields"
+                  ARGS_DESC@3403..3417
+                    L_PAREN@3403..3404 "("
+                    ARG@3404..3416
+                      EXPR_INDEX@3404..3416
+                        EXPR_VAR@3404..3407
+                          NAME@3404..3407
+                            IDENT@3404..3407 "ini"
+                        DOT@3407..3408 "."
+                        NAME@3408..3416
+                          IDENT@3408..3416 "sections"
+                    R_PAREN@3416..3417 ")"
+              WHITESPACE@3417..3422 "\n    "
+              R_BRACK@3422..3423 "]"
+          SEMI@3423..3424 ";"
+        WHITESPACE@3424..3429 "\n    "
+        EXPR_APPLY@3429..3495
+          EXPR_INDEX@3429..3437
+            EXPR_VAR@3429..3432
+              NAME@3429..3432
+                IDENT@3429..3432 "std"
+            DOT@3432..3433 "."
+            NAME@3433..3437
+              IDENT@3433..3437 "join"
+          ARGS_DESC@3437..3495
+            L_PAREN@3437..3438 "("
+            ARG@3438..3442
+              EXPR_STRING@3438..3442
+                STRING_SINGLE@3438..3442 "'\\n'"
+            COMMA@3442..3443 ","
+            WHITESPACE@3443..3444 " "
+            ARG@3444..3494
+              EXPR_BINARY@3444..3494
+                LHS_EXPR@3444..3487
+                  EXPR_BINARY@3444..3487
+                    LHS_EXPR@3444..3453
+                      EXPR_VAR@3444..3453
+                        NAME@3444..3453
+                          IDENT@3444..3453 "main_body"
+                    WHITESPACE@3453..3454 " "
+                    PLUS@3454..3455 "+"
+                    WHITESPACE@3455..3456 " "
+                    EXPR_APPLY@3456..3487
+                      EXPR_INDEX@3456..3473
+                        EXPR_VAR@3456..3459
+                          NAME@3456..3459
+                            IDENT@3456..3459 "std"
+                        DOT@3459..3460 "."
+                        NAME@3460..3473
+                          IDENT@3460..3473 "flattenArrays"
+                      ARGS_DESC@3473..3487
+                        L_PAREN@3473..3474 "("
+                        ARG@3474..3486
+                          EXPR_VAR@3474..3486
+                            NAME@3474..3486
+                              IDENT@3474..3486 "all_sections"
+                        R_PAREN@3486..3487 ")"
+                WHITESPACE@3487..3488 " "
+                PLUS@3488..3489 "+"
+                WHITESPACE@3489..3490 " "
+                EXPR_ARRAY@3490..3494
+                  L_BRACK@3490..3491 "["
+                  EXPR_STRING@3491..3493
+                    STRING_SINGLE@3491..3493 "''"
+                  R_BRACK@3493..3494 "]"
+            R_PAREN@3494..3495 ")"
       COMMA@3495..3496 ","
       WHITESPACE@3496..3500 "\n\n  "
       MEMBER_FIELD_METHOD@3500..3553
@@ -2300,7 +2300,7 @@
           R_PAREN@3639..3640 ")"
         COLONCOLON@3640..3642 "::"
         WHITESPACE@3642..3647 "\n    "
-        EXPR_LOCAL@3647..3835
+        STMT_LOCAL@3647..3678
           LOCAL_KW@3647..3652 "local"
           WHITESPACE@3652..3653 " "
           BIND_DESTRUCT@3653..3677
@@ -2326,113 +2326,113 @@
                       IDENT@3672..3676 "str_"
                 R_PAREN@3676..3677 ")"
           SEMI@3677..3678 ";"
-          WHITESPACE@3678..3683 "\n    "
-          EXPR_LOCAL@3683..3835
-            LOCAL_KW@3683..3688 "local"
-            WHITESPACE@3688..3689 " "
-            BIND_FUNCTION@3689..3764
-              NAME@3689..3694
-                IDENT@3689..3694 "trans"
-              PARAMS_DESC@3694..3698
-                L_PAREN@3694..3695 "("
-                PARAM@3695..3697
-                  DESTRUCT_FULL@3695..3697
-                    NAME@3695..3697
-                      IDENT@3695..3697 "ch"
-                R_PAREN@3697..3698 ")"
-              WHITESPACE@3698..3699 " "
-              ASSIGN@3699..3700 "="
-              WHITESPACE@3700..3707 "\n      "
-              EXPR_IF_THEN_ELSE@3707..3764
-                IF_KW@3707..3709 "if"
-                WHITESPACE@3709..3710 " "
-                EXPR_BINARY@3710..3719
-                  LHS_EXPR@3710..3712
-                    EXPR_VAR@3710..3712
-                      NAME@3710..3712
-                        IDENT@3710..3712 "ch"
-                  WHITESPACE@3712..3713 " "
-                  EQ@3713..3715 "=="
-                  WHITESPACE@3715..3716 " "
-                  EXPR_STRING@3716..3719
-                    STRING_DOUBLE@3716..3719 "\"'\""
-                WHITESPACE@3719..3720 " "
-                THEN_KW@3720..3724 "then"
-                WHITESPACE@3724..3733 "\n        "
-                TRUE_EXPR@3733..3742
-                  EXPR_STRING@3733..3742
-                    STRING_DOUBLE@3733..3742 "\"'\\\"'\\\"'\""
-                WHITESPACE@3742..3749 "\n      "
-                ELSE_KW@3749..3753 "else"
-                WHITESPACE@3753..3762 "\n        "
-                FALSE_EXPR@3762..3764
-                  EXPR_VAR@3762..3764
-                    NAME@3762..3764
-                      IDENT@3762..3764 "ch"
-            SEMI@3764..3765 ";"
-            WHITESPACE@3765..3770 "\n    "
-            EXPR_BINARY@3770..3835
-              LHS_EXPR@3770..3776
-                EXPR_STRING@3770..3776
-                  STRING_DOUBLE@3770..3776 "\"'%s'\""
-              WHITESPACE@3776..3777 " "
-              MODULO@3777..3778 "%"
-              WHITESPACE@3778..3779 " "
-              EXPR_APPLY@3779..3835
-                EXPR_INDEX@3779..3787
-                  EXPR_VAR@3779..3782
-                    NAME@3779..3782
-                      IDENT@3779..3782 "std"
-                  DOT@3782..3783 "."
-                  NAME@3783..3787
-                    IDENT@3783..3787 "join"
-                ARGS_DESC@3787..3835
-                  L_PAREN@3787..3788 "("
-                  ARG@3788..3790
-                    EXPR_STRING@3788..3790
-                      STRING_SINGLE@3788..3790 "''"
-                  COMMA@3790..3791 ","
-                  WHITESPACE@3791..3792 " "
-                  ARG@3792..3834
-                    EXPR_ARRAY_COMP@3792..3834
-                      L_BRACK@3792..3793 "["
-                      EXPR_APPLY@3793..3802
-                        EXPR_VAR@3793..3798
-                          NAME@3793..3798
-                            IDENT@3793..3798 "trans"
-                        ARGS_DESC@3798..3802
-                          L_PAREN@3798..3799 "("
-                          ARG@3799..3801
-                            EXPR_VAR@3799..3801
-                              NAME@3799..3801
-                                IDENT@3799..3801 "ch"
-                          R_PAREN@3801..3802 ")"
-                      WHITESPACE@3802..3803 " "
-                      FOR_SPEC@3803..3833
-                        FOR_KW@3803..3806 "for"
-                        WHITESPACE@3806..3807 " "
-                        NAME@3807..3809
-                          IDENT@3807..3809 "ch"
-                        WHITESPACE@3809..3810 " "
-                        IN_KW@3810..3812 "in"
-                        WHITESPACE@3812..3813 " "
-                        EXPR_APPLY@3813..3833
-                          EXPR_INDEX@3813..3828
-                            EXPR_VAR@3813..3816
-                              NAME@3813..3816
-                                IDENT@3813..3816 "std"
-                            DOT@3816..3817 "."
-                            NAME@3817..3828
-                              IDENT@3817..3828 "stringChars"
-                          ARGS_DESC@3828..3833
-                            L_PAREN@3828..3829 "("
-                            ARG@3829..3832
-                              EXPR_VAR@3829..3832
-                                NAME@3829..3832
-                                  IDENT@3829..3832 "str"
-                            R_PAREN@3832..3833 ")"
-                      R_BRACK@3833..3834 "]"
-                  R_PAREN@3834..3835 ")"
+        WHITESPACE@3678..3683 "\n    "
+        STMT_LOCAL@3683..3765
+          LOCAL_KW@3683..3688 "local"
+          WHITESPACE@3688..3689 " "
+          BIND_FUNCTION@3689..3764
+            NAME@3689..3694
+              IDENT@3689..3694 "trans"
+            PARAMS_DESC@3694..3698
+              L_PAREN@3694..3695 "("
+              PARAM@3695..3697
+                DESTRUCT_FULL@3695..3697
+                  NAME@3695..3697
+                    IDENT@3695..3697 "ch"
+              R_PAREN@3697..3698 ")"
+            WHITESPACE@3698..3699 " "
+            ASSIGN@3699..3700 "="
+            WHITESPACE@3700..3707 "\n      "
+            EXPR_IF_THEN_ELSE@3707..3764
+              IF_KW@3707..3709 "if"
+              WHITESPACE@3709..3710 " "
+              EXPR_BINARY@3710..3719
+                LHS_EXPR@3710..3712
+                  EXPR_VAR@3710..3712
+                    NAME@3710..3712
+                      IDENT@3710..3712 "ch"
+                WHITESPACE@3712..3713 " "
+                EQ@3713..3715 "=="
+                WHITESPACE@3715..3716 " "
+                EXPR_STRING@3716..3719
+                  STRING_DOUBLE@3716..3719 "\"'\""
+              WHITESPACE@3719..3720 " "
+              THEN_KW@3720..3724 "then"
+              WHITESPACE@3724..3733 "\n        "
+              TRUE_EXPR@3733..3742
+                EXPR_STRING@3733..3742
+                  STRING_DOUBLE@3733..3742 "\"'\\\"'\\\"'\""
+              WHITESPACE@3742..3749 "\n      "
+              ELSE_KW@3749..3753 "else"
+              WHITESPACE@3753..3762 "\n        "
+              FALSE_EXPR@3762..3764
+                EXPR_VAR@3762..3764
+                  NAME@3762..3764
+                    IDENT@3762..3764 "ch"
+          SEMI@3764..3765 ";"
+        WHITESPACE@3765..3770 "\n    "
+        EXPR_BINARY@3770..3835
+          LHS_EXPR@3770..3776
+            EXPR_STRING@3770..3776
+              STRING_DOUBLE@3770..3776 "\"'%s'\""
+          WHITESPACE@3776..3777 " "
+          MODULO@3777..3778 "%"
+          WHITESPACE@3778..3779 " "
+          EXPR_APPLY@3779..3835
+            EXPR_INDEX@3779..3787
+              EXPR_VAR@3779..3782
+                NAME@3779..3782
+                  IDENT@3779..3782 "std"
+              DOT@3782..3783 "."
+              NAME@3783..3787
+                IDENT@3783..3787 "join"
+            ARGS_DESC@3787..3835
+              L_PAREN@3787..3788 "("
+              ARG@3788..3790
+                EXPR_STRING@3788..3790
+                  STRING_SINGLE@3788..3790 "''"
+              COMMA@3790..3791 ","
+              WHITESPACE@3791..3792 " "
+              ARG@3792..3834
+                EXPR_ARRAY_COMP@3792..3834
+                  L_BRACK@3792..3793 "["
+                  EXPR_APPLY@3793..3802
+                    EXPR_VAR@3793..3798
+                      NAME@3793..3798
+                        IDENT@3793..3798 "trans"
+                    ARGS_DESC@3798..3802
+                      L_PAREN@3798..3799 "("
+                      ARG@3799..3801
+                        EXPR_VAR@3799..3801
+                          NAME@3799..3801
+                            IDENT@3799..3801 "ch"
+                      R_PAREN@3801..3802 ")"
+                  WHITESPACE@3802..3803 " "
+                  FOR_SPEC@3803..3833
+                    FOR_KW@3803..3806 "for"
+                    WHITESPACE@3806..3807 " "
+                    NAME@3807..3809
+                      IDENT@3807..3809 "ch"
+                    WHITESPACE@3809..3810 " "
+                    IN_KW@3810..3812 "in"
+                    WHITESPACE@3812..3813 " "
+                    EXPR_APPLY@3813..3833
+                      EXPR_INDEX@3813..3828
+                        EXPR_VAR@3813..3816
+                          NAME@3813..3816
+                            IDENT@3813..3816 "std"
+                        DOT@3816..3817 "."
+                        NAME@3817..3828
+                          IDENT@3817..3828 "stringChars"
+                      ARGS_DESC@3828..3833
+                        L_PAREN@3828..3829 "("
+                        ARG@3829..3832
+                          EXPR_VAR@3829..3832
+                            NAME@3829..3832
+                              IDENT@3829..3832 "str"
+                        R_PAREN@3832..3833 ")"
+                  R_BRACK@3833..3834 "]"
+              R_PAREN@3834..3835 ")"
       COMMA@3835..3836 ","
       WHITESPACE@3836..3840 "\n\n  "
       MEMBER_FIELD_METHOD@3840..4054
@@ -2448,7 +2448,7 @@
           R_PAREN@3864..3865 ")"
         COLONCOLON@3865..3867 "::"
         WHITESPACE@3867..3872 "\n    "
-        EXPR_LOCAL@3872..4054
+        STMT_LOCAL@3872..3903
           LOCAL_KW@3872..3877 "local"
           WHITESPACE@3877..3878 " "
           BIND_DESTRUCT@3878..3902
@@ -2474,121 +2474,121 @@
                       IDENT@3897..3901 "str_"
                 R_PAREN@3901..3902 ")"
           SEMI@3902..3903 ";"
-          WHITESPACE@3903..3908 "\n    "
-          EXPR_LOCAL@3908..4054
-            LOCAL_KW@3908..3913 "local"
-            WHITESPACE@3913..3914 " "
-            BIND_FUNCTION@3914..3984
-              NAME@3914..3919
-                IDENT@3914..3919 "trans"
-              PARAMS_DESC@3919..3923
-                L_PAREN@3919..3920 "("
-                PARAM@3920..3922
-                  DESTRUCT_FULL@3920..3922
-                    NAME@3920..3922
-                      IDENT@3920..3922 "ch"
-                R_PAREN@3922..3923 ")"
-              WHITESPACE@3923..3924 " "
-              ASSIGN@3924..3925 "="
-              WHITESPACE@3925..3932 "\n      "
-              EXPR_IF_THEN_ELSE@3932..3984
-                IF_KW@3932..3934 "if"
-                WHITESPACE@3934..3935 " "
-                EXPR_BINARY@3935..3944
-                  LHS_EXPR@3935..3937
-                    EXPR_VAR@3935..3937
-                      NAME@3935..3937
-                        IDENT@3935..3937 "ch"
-                  WHITESPACE@3937..3938 " "
-                  EQ@3938..3940 "=="
-                  WHITESPACE@3940..3941 " "
-                  EXPR_STRING@3941..3944
-                    STRING_SINGLE@3941..3944 "'$'"
-                WHITESPACE@3944..3945 " "
-                THEN_KW@3945..3949 "then"
-                WHITESPACE@3949..3958 "\n        "
-                TRUE_EXPR@3958..3962
-                  EXPR_STRING@3958..3962
-                    STRING_SINGLE@3958..3962 "'$$'"
-                WHITESPACE@3962..3969 "\n      "
-                ELSE_KW@3969..3973 "else"
-                WHITESPACE@3973..3982 "\n        "
-                FALSE_EXPR@3982..3984
-                  EXPR_VAR@3982..3984
-                    NAME@3982..3984
-                      IDENT@3982..3984 "ch"
-            SEMI@3984..3985 ";"
-            WHITESPACE@3985..3990 "\n    "
-            EXPR_APPLY@3990..4054
-              EXPR_INDEX@3990..3999
-                EXPR_VAR@3990..3993
-                  NAME@3990..3993
-                    IDENT@3990..3993 "std"
-                DOT@3993..3994 "."
-                NAME@3994..3999
-                  IDENT@3994..3999 "foldl"
-              ARGS_DESC@3999..4054
-                L_PAREN@3999..4000 "("
-                ARG@4000..4027
-                  EXPR_FUNCTION@4000..4027
-                    FUNCTION_KW@4000..4008 "function"
-                    PARAMS_DESC@4008..4014
-                      L_PAREN@4008..4009 "("
-                      PARAM@4009..4010
-                        DESTRUCT_FULL@4009..4010
-                          NAME@4009..4010
-                            IDENT@4009..4010 "a"
-                      COMMA@4010..4011 ","
-                      WHITESPACE@4011..4012 " "
-                      PARAM@4012..4013
-                        DESTRUCT_FULL@4012..4013
-                          NAME@4012..4013
-                            IDENT@4012..4013 "b"
-                      R_PAREN@4013..4014 ")"
-                    WHITESPACE@4014..4015 " "
-                    EXPR_BINARY@4015..4027
-                      LHS_EXPR@4015..4016
-                        EXPR_VAR@4015..4016
-                          NAME@4015..4016
-                            IDENT@4015..4016 "a"
-                      WHITESPACE@4016..4017 " "
-                      PLUS@4017..4018 "+"
-                      WHITESPACE@4018..4019 " "
-                      EXPR_APPLY@4019..4027
-                        EXPR_VAR@4019..4024
-                          NAME@4019..4024
-                            IDENT@4019..4024 "trans"
-                        ARGS_DESC@4024..4027
-                          L_PAREN@4024..4025 "("
-                          ARG@4025..4026
-                            EXPR_VAR@4025..4026
-                              NAME@4025..4026
-                                IDENT@4025..4026 "b"
-                          R_PAREN@4026..4027 ")"
-                COMMA@4027..4028 ","
-                WHITESPACE@4028..4029 " "
-                ARG@4029..4049
-                  EXPR_APPLY@4029..4049
-                    EXPR_INDEX@4029..4044
-                      EXPR_VAR@4029..4032
-                        NAME@4029..4032
-                          IDENT@4029..4032 "std"
-                      DOT@4032..4033 "."
-                      NAME@4033..4044
-                        IDENT@4033..4044 "stringChars"
-                    ARGS_DESC@4044..4049
-                      L_PAREN@4044..4045 "("
-                      ARG@4045..4048
-                        EXPR_VAR@4045..4048
-                          NAME@4045..4048
-                            IDENT@4045..4048 "str"
-                      R_PAREN@4048..4049 ")"
-                COMMA@4049..4050 ","
-                WHITESPACE@4050..4051 " "
-                ARG@4051..4053
-                  EXPR_STRING@4051..4053
-                    STRING_SINGLE@4051..4053 "''"
-                R_PAREN@4053..4054 ")"
+        WHITESPACE@3903..3908 "\n    "
+        STMT_LOCAL@3908..3985
+          LOCAL_KW@3908..3913 "local"
+          WHITESPACE@3913..3914 " "
+          BIND_FUNCTION@3914..3984
+            NAME@3914..3919
+              IDENT@3914..3919 "trans"
+            PARAMS_DESC@3919..3923
+              L_PAREN@3919..3920 "("
+              PARAM@3920..3922
+                DESTRUCT_FULL@3920..3922
+                  NAME@3920..3922
+                    IDENT@3920..3922 "ch"
+              R_PAREN@3922..3923 ")"
+            WHITESPACE@3923..3924 " "
+            ASSIGN@3924..3925 "="
+            WHITESPACE@3925..3932 "\n      "
+            EXPR_IF_THEN_ELSE@3932..3984
+              IF_KW@3932..3934 "if"
+              WHITESPACE@3934..3935 " "
+              EXPR_BINARY@3935..3944
+                LHS_EXPR@3935..3937
+                  EXPR_VAR@3935..3937
+                    NAME@3935..3937
+                      IDENT@3935..3937 "ch"
+                WHITESPACE@3937..3938 " "
+                EQ@3938..3940 "=="
+                WHITESPACE@3940..3941 " "
+                EXPR_STRING@3941..3944
+                  STRING_SINGLE@3941..3944 "'$'"
+              WHITESPACE@3944..3945 " "
+              THEN_KW@3945..3949 "then"
+              WHITESPACE@3949..3958 "\n        "
+              TRUE_EXPR@3958..3962
+                EXPR_STRING@3958..3962
+                  STRING_SINGLE@3958..3962 "'$$'"
+              WHITESPACE@3962..3969 "\n      "
+              ELSE_KW@3969..3973 "else"
+              WHITESPACE@3973..3982 "\n        "
+              FALSE_EXPR@3982..3984
+                EXPR_VAR@3982..3984
+                  NAME@3982..3984
+                    IDENT@3982..3984 "ch"
+          SEMI@3984..3985 ";"
+        WHITESPACE@3985..3990 "\n    "
+        EXPR_APPLY@3990..4054
+          EXPR_INDEX@3990..3999
+            EXPR_VAR@3990..3993
+              NAME@3990..3993
+                IDENT@3990..3993 "std"
+            DOT@3993..3994 "."
+            NAME@3994..3999
+              IDENT@3994..3999 "foldl"
+          ARGS_DESC@3999..4054
+            L_PAREN@3999..4000 "("
+            ARG@4000..4027
+              EXPR_FUNCTION@4000..4027
+                FUNCTION_KW@4000..4008 "function"
+                PARAMS_DESC@4008..4014
+                  L_PAREN@4008..4009 "("
+                  PARAM@4009..4010
+                    DESTRUCT_FULL@4009..4010
+                      NAME@4009..4010
+                        IDENT@4009..4010 "a"
+                  COMMA@4010..4011 ","
+                  WHITESPACE@4011..4012 " "
+                  PARAM@4012..4013
+                    DESTRUCT_FULL@4012..4013
+                      NAME@4012..4013
+                        IDENT@4012..4013 "b"
+                  R_PAREN@4013..4014 ")"
+                WHITESPACE@4014..4015 " "
+                EXPR_BINARY@4015..4027
+                  LHS_EXPR@4015..4016
+                    EXPR_VAR@4015..4016
+                      NAME@4015..4016
+                        IDENT@4015..4016 "a"
+                  WHITESPACE@4016..4017 " "
+                  PLUS@4017..4018 "+"
+                  WHITESPACE@4018..4019 " "
+                  EXPR_APPLY@4019..4027
+                    EXPR_VAR@4019..4024
+                      NAME@4019..4024
+                        IDENT@4019..4024 "trans"
+                    ARGS_DESC@4024..4027
+                      L_PAREN@4024..4025 "("
+                      ARG@4025..4026
+                        EXPR_VAR@4025..4026
+                          NAME@4025..4026
+                            IDENT@4025..4026 "b"
+                      R_PAREN@4026..4027 ")"
+            COMMA@4027..4028 ","
+            WHITESPACE@4028..4029 " "
+            ARG@4029..4049
+              EXPR_APPLY@4029..4049
+                EXPR_INDEX@4029..4044
+                  EXPR_VAR@4029..4032
+                    NAME@4029..4032
+                      IDENT@4029..4032 "std"
+                  DOT@4032..4033 "."
+                  NAME@4033..4044
+                    IDENT@4033..4044 "stringChars"
+                ARGS_DESC@4044..4049
+                  L_PAREN@4044..4045 "("
+                  ARG@4045..4048
+                    EXPR_VAR@4045..4048
+                      NAME@4045..4048
+                        IDENT@4045..4048 "str"
+                  R_PAREN@4048..4049 ")"
+            COMMA@4049..4050 ","
+            WHITESPACE@4050..4051 " "
+            ARG@4051..4053
+              EXPR_STRING@4051..4053
+                STRING_SINGLE@4051..4053 "''"
+            R_PAREN@4053..4054 ")"
       COMMA@4054..4055 ","
       WHITESPACE@4055..4059 "\n\n  "
       MEMBER_BIND_STMT@4059..4174
@@ -2667,7 +2667,7 @@
           R_PAREN@4199..4200 ")"
         COLONCOLON@4200..4202 "::"
         WHITESPACE@4202..4207 "\n    "
-        EXPR_LOCAL@4207..4318
+        STMT_LOCAL@4207..4238
           LOCAL_KW@4207..4212 "local"
           WHITESPACE@4212..4213 " "
           BIND_DESTRUCT@4213..4237
@@ -2693,78 +2693,78 @@
                       IDENT@4232..4236 "str_"
                 R_PAREN@4236..4237 ")"
           SEMI@4237..4238 ";"
-          WHITESPACE@4238..4243 "\n    "
-          EXPR_APPLY@4243..4318
-            EXPR_INDEX@4243..4251
-              EXPR_VAR@4243..4246
-                NAME@4243..4246
-                  IDENT@4243..4246 "std"
-              DOT@4246..4247 "."
-              NAME@4247..4251
-                IDENT@4247..4251 "join"
-            ARGS_DESC@4251..4318
-              L_PAREN@4251..4252 "("
-              ARG@4252..4254
-                EXPR_STRING@4252..4254
-                  STRING_SINGLE@4252..4254 "''"
-              COMMA@4254..4255 ","
-              WHITESPACE@4255..4256 " "
-              ARG@4256..4317
-                EXPR_ARRAY_COMP@4256..4317
-                  L_BRACK@4256..4257 "["
-                  EXPR_APPLY@4257..4285
-                    EXPR_INDEX@4257..4264
-                      EXPR_VAR@4257..4260
-                        NAME@4257..4260
-                          IDENT@4257..4260 "std"
-                      DOT@4260..4261 "."
-                      NAME@4261..4264
-                        IDENT@4261..4264 "get"
-                    ARGS_DESC@4264..4285
-                      L_PAREN@4264..4265 "("
-                      ARG@4265..4276
-                        EXPR_VAR@4265..4276
-                          NAME@4265..4276
-                            IDENT@4265..4276 "xml_escapes"
-                      COMMA@4276..4277 ","
-                      WHITESPACE@4277..4278 " "
-                      ARG@4278..4280
-                        EXPR_VAR@4278..4280
-                          NAME@4278..4280
-                            IDENT@4278..4280 "ch"
-                      COMMA@4280..4281 ","
-                      WHITESPACE@4281..4282 " "
-                      ARG@4282..4284
-                        EXPR_VAR@4282..4284
-                          NAME@4282..4284
-                            IDENT@4282..4284 "ch"
-                      R_PAREN@4284..4285 ")"
-                  WHITESPACE@4285..4286 " "
-                  FOR_SPEC@4286..4316
-                    FOR_KW@4286..4289 "for"
-                    WHITESPACE@4289..4290 " "
-                    NAME@4290..4292
-                      IDENT@4290..4292 "ch"
-                    WHITESPACE@4292..4293 " "
-                    IN_KW@4293..4295 "in"
-                    WHITESPACE@4295..4296 " "
-                    EXPR_APPLY@4296..4316
-                      EXPR_INDEX@4296..4311
-                        EXPR_VAR@4296..4299
-                          NAME@4296..4299
-                            IDENT@4296..4299 "std"
-                        DOT@4299..4300 "."
-                        NAME@4300..4311
-                          IDENT@4300..4311 "stringChars"
-                      ARGS_DESC@4311..4316
-                        L_PAREN@4311..4312 "("
-                        ARG@4312..4315
-                          EXPR_VAR@4312..4315
-                            NAME@4312..4315
-                              IDENT@4312..4315 "str"
-                        R_PAREN@4315..4316 ")"
-                  R_BRACK@4316..4317 "]"
-              R_PAREN@4317..4318 ")"
+        WHITESPACE@4238..4243 "\n    "
+        EXPR_APPLY@4243..4318
+          EXPR_INDEX@4243..4251
+            EXPR_VAR@4243..4246
+              NAME@4243..4246
+                IDENT@4243..4246 "std"
+            DOT@4246..4247 "."
+            NAME@4247..4251
+              IDENT@4247..4251 "join"
+          ARGS_DESC@4251..4318
+            L_PAREN@4251..4252 "("
+            ARG@4252..4254
+              EXPR_STRING@4252..4254
+                STRING_SINGLE@4252..4254 "''"
+            COMMA@4254..4255 ","
+            WHITESPACE@4255..4256 " "
+            ARG@4256..4317
+              EXPR_ARRAY_COMP@4256..4317
+                L_BRACK@4256..4257 "["
+                EXPR_APPLY@4257..4285
+                  EXPR_INDEX@4257..4264
+                    EXPR_VAR@4257..4260
+                      NAME@4257..4260
+                        IDENT@4257..4260 "std"
+                    DOT@4260..4261 "."
+                    NAME@4261..4264
+                      IDENT@4261..4264 "get"
+                  ARGS_DESC@4264..4285
+                    L_PAREN@4264..4265 "("
+                    ARG@4265..4276
+                      EXPR_VAR@4265..4276
+                        NAME@4265..4276
+                          IDENT@4265..4276 "xml_escapes"
+                    COMMA@4276..4277 ","
+                    WHITESPACE@4277..4278 " "
+                    ARG@4278..4280
+                      EXPR_VAR@4278..4280
+                        NAME@4278..4280
+                          IDENT@4278..4280 "ch"
+                    COMMA@4280..4281 ","
+                    WHITESPACE@4281..4282 " "
+                    ARG@4282..4284
+                      EXPR_VAR@4282..4284
+                        NAME@4282..4284
+                          IDENT@4282..4284 "ch"
+                    R_PAREN@4284..4285 ")"
+                WHITESPACE@4285..4286 " "
+                FOR_SPEC@4286..4316
+                  FOR_KW@4286..4289 "for"
+                  WHITESPACE@4289..4290 " "
+                  NAME@4290..4292
+                    IDENT@4290..4292 "ch"
+                  WHITESPACE@4292..4293 " "
+                  IN_KW@4293..4295 "in"
+                  WHITESPACE@4295..4296 " "
+                  EXPR_APPLY@4296..4316
+                    EXPR_INDEX@4296..4311
+                      EXPR_VAR@4296..4299
+                        NAME@4296..4299
+                          IDENT@4296..4299 "std"
+                      DOT@4299..4300 "."
+                      NAME@4300..4311
+                        IDENT@4300..4311 "stringChars"
+                    ARGS_DESC@4311..4316
+                      L_PAREN@4311..4312 "("
+                      ARG@4312..4315
+                        EXPR_VAR@4312..4315
+                          NAME@4312..4315
+                            IDENT@4312..4315 "str"
+                      R_PAREN@4315..4316 ")"
+                R_BRACK@4316..4317 "]"
+            R_PAREN@4317..4318 ")"
       COMMA@4318..4319 ","
       WHITESPACE@4319..4323 "\n\n  "
       MEMBER_FIELD_METHOD@4323..4389
@@ -3069,127 +3069,127 @@
           WHITESPACE@4899..4900 " "
           THEN_KW@4900..4904 "then"
           WHITESPACE@4904..4911 "\n      "
-          TRUE_EXPR@4911..5086
-            EXPR_LOCAL@4911..5086
-              LOCAL_KW@4911..4916 "local"
-              WHITESPACE@4916..4917 " "
-              BIND_DESTRUCT@4917..5045
-                DESTRUCT_FULL@4917..4923
-                  NAME@4917..4923
-                    IDENT@4917..4923 "fields"
-                WHITESPACE@4923..4924 " "
-                ASSIGN@4924..4925 "="
-                WHITESPACE@4925..4926 " "
-                EXPR_ARRAY_COMP@4926..5045
-                  L_BRACK@4926..4927 "["
-                  WHITESPACE@4927..4936 "\n        "
-                  EXPR_BINARY@4936..5000
-                    LHS_EXPR@4936..4944
-                      EXPR_STRING@4936..4944
-                        STRING_SINGLE@4936..4944 "'%s: %s'"
-                    WHITESPACE@4944..4945 " "
-                    MODULO@4945..4946 "%"
-                    WHITESPACE@4946..4947 " "
-                    EXPR_ARRAY@4947..5000
-                      L_BRACK@4947..4948 "["
-                      EXPR_APPLY@4948..4973
-                        EXPR_INDEX@4948..4970
-                          EXPR_VAR@4948..4951
-                            NAME@4948..4951
-                              IDENT@4948..4951 "std"
-                          DOT@4951..4952 "."
-                          NAME@4952..4970
-                            IDENT@4952..4970 "escapeStringPython"
-                        ARGS_DESC@4970..4973
-                          L_PAREN@4970..4971 "("
-                          ARG@4971..4972
-                            EXPR_VAR@4971..4972
-                              NAME@4971..4972
-                                IDENT@4971..4972 "k"
-                          R_PAREN@4972..4973 ")"
-                      COMMA@4973..4974 ","
-                      WHITESPACE@4974..4975 " "
-                      EXPR_APPLY@4975..4999
-                        EXPR_INDEX@4975..4993
-                          EXPR_VAR@4975..4978
-                            NAME@4975..4978
-                              IDENT@4975..4978 "std"
-                          DOT@4978..4979 "."
-                          NAME@4979..4993
-                            IDENT@4979..4993 "manifestPython"
-                        ARGS_DESC@4993..4999
-                          L_PAREN@4993..4994 "("
-                          ARG@4994..4998
-                            EXPR_INDEX_EXPR@4994..4998
-                              LHS_EXPR@4994..4995
-                                EXPR_VAR@4994..4995
-                                  NAME@4994..4995
-                                    IDENT@4994..4995 "v"
-                              L_BRACK@4995..4996 "["
-                              EXPR_VAR@4996..4997
-                                NAME@4996..4997
-                                  IDENT@4996..4997 "k"
-                              R_BRACK@4997..4998 "]"
-                          R_PAREN@4998..4999 ")"
-                      R_BRACK@4999..5000 "]"
-                  WHITESPACE@5000..5009 "\n        "
-                  FOR_SPEC@5009..5037
-                    FOR_KW@5009..5012 "for"
-                    WHITESPACE@5012..5013 " "
-                    NAME@5013..5014
-                      IDENT@5013..5014 "k"
-                    WHITESPACE@5014..5015 " "
-                    IN_KW@5015..5017 "in"
-                    WHITESPACE@5017..5018 " "
-                    EXPR_APPLY@5018..5037
-                      EXPR_INDEX@5018..5034
-                        EXPR_VAR@5018..5021
-                          NAME@5018..5021
-                            IDENT@5018..5021 "std"
-                        DOT@5021..5022 "."
-                        NAME@5022..5034
-                          IDENT@5022..5034 "objectFields"
-                      ARGS_DESC@5034..5037
-                        L_PAREN@5034..5035 "("
-                        ARG@5035..5036
-                          EXPR_VAR@5035..5036
-                            NAME@5035..5036
-                              IDENT@5035..5036 "v"
-                        R_PAREN@5036..5037 ")"
-                  WHITESPACE@5037..5044 "\n      "
-                  R_BRACK@5044..5045 "]"
-              SEMI@5045..5046 ";"
-              WHITESPACE@5046..5053 "\n      "
-              EXPR_BINARY@5053..5086
-                LHS_EXPR@5053..5059
-                  EXPR_STRING@5053..5059
-                    STRING_SINGLE@5053..5059 "'{%s}'"
-                WHITESPACE@5059..5060 " "
-                MODULO@5060..5061 "%"
-                WHITESPACE@5061..5062 " "
-                EXPR_ARRAY@5062..5086
-                  L_BRACK@5062..5063 "["
-                  EXPR_APPLY@5063..5085
-                    EXPR_INDEX@5063..5071
-                      EXPR_VAR@5063..5066
-                        NAME@5063..5066
-                          IDENT@5063..5066 "std"
-                      DOT@5066..5067 "."
-                      NAME@5067..5071
-                        IDENT@5067..5071 "join"
-                    ARGS_DESC@5071..5085
-                      L_PAREN@5071..5072 "("
-                      ARG@5072..5076
-                        EXPR_STRING@5072..5076
-                          STRING_SINGLE@5072..5076 "', '"
-                      COMMA@5076..5077 ","
-                      WHITESPACE@5077..5078 " "
-                      ARG@5078..5084
-                        EXPR_VAR@5078..5084
-                          NAME@5078..5084
-                            IDENT@5078..5084 "fields"
-                      R_PAREN@5084..5085 ")"
-                  R_BRACK@5085..5086 "]"
+          STMT_LOCAL@4911..5046
+            LOCAL_KW@4911..4916 "local"
+            WHITESPACE@4916..4917 " "
+            BIND_DESTRUCT@4917..5045
+              DESTRUCT_FULL@4917..4923
+                NAME@4917..4923
+                  IDENT@4917..4923 "fields"
+              WHITESPACE@4923..4924 " "
+              ASSIGN@4924..4925 "="
+              WHITESPACE@4925..4926 " "
+              EXPR_ARRAY_COMP@4926..5045
+                L_BRACK@4926..4927 "["
+                WHITESPACE@4927..4936 "\n        "
+                EXPR_BINARY@4936..5000
+                  LHS_EXPR@4936..4944
+                    EXPR_STRING@4936..4944
+                      STRING_SINGLE@4936..4944 "'%s: %s'"
+                  WHITESPACE@4944..4945 " "
+                  MODULO@4945..4946 "%"
+                  WHITESPACE@4946..4947 " "
+                  EXPR_ARRAY@4947..5000
+                    L_BRACK@4947..4948 "["
+                    EXPR_APPLY@4948..4973
+                      EXPR_INDEX@4948..4970
+                        EXPR_VAR@4948..4951
+                          NAME@4948..4951
+                            IDENT@4948..4951 "std"
+                        DOT@4951..4952 "."
+                        NAME@4952..4970
+                          IDENT@4952..4970 "escapeStringPython"
+                      ARGS_DESC@4970..4973
+                        L_PAREN@4970..4971 "("
+                        ARG@4971..4972
+                          EXPR_VAR@4971..4972
+                            NAME@4971..4972
+                              IDENT@4971..4972 "k"
+                        R_PAREN@4972..4973 ")"
+                    COMMA@4973..4974 ","
+                    WHITESPACE@4974..4975 " "
+                    EXPR_APPLY@4975..4999
+                      EXPR_INDEX@4975..4993
+                        EXPR_VAR@4975..4978
+                          NAME@4975..4978
+                            IDENT@4975..4978 "std"
+                        DOT@4978..4979 "."
+                        NAME@4979..4993
+                          IDENT@4979..4993 "manifestPython"
+                      ARGS_DESC@4993..4999
+                        L_PAREN@4993..4994 "("
+                        ARG@4994..4998
+                          EXPR_INDEX_EXPR@4994..4998
+                            LHS_EXPR@4994..4995
+                              EXPR_VAR@4994..4995
+                                NAME@4994..4995
+                                  IDENT@4994..4995 "v"
+                            L_BRACK@4995..4996 "["
+                            EXPR_VAR@4996..4997
+                              NAME@4996..4997
+                                IDENT@4996..4997 "k"
+                            R_BRACK@4997..4998 "]"
+                        R_PAREN@4998..4999 ")"
+                    R_BRACK@4999..5000 "]"
+                WHITESPACE@5000..5009 "\n        "
+                FOR_SPEC@5009..5037
+                  FOR_KW@5009..5012 "for"
+                  WHITESPACE@5012..5013 " "
+                  NAME@5013..5014
+                    IDENT@5013..5014 "k"
+                  WHITESPACE@5014..5015 " "
+                  IN_KW@5015..5017 "in"
+                  WHITESPACE@5017..5018 " "
+                  EXPR_APPLY@5018..5037
+                    EXPR_INDEX@5018..5034
+                      EXPR_VAR@5018..5021
+                        NAME@5018..5021
+                          IDENT@5018..5021 "std"
+                      DOT@5021..5022 "."
+                      NAME@5022..5034
+                        IDENT@5022..5034 "objectFields"
+                    ARGS_DESC@5034..5037
+                      L_PAREN@5034..5035 "("
+                      ARG@5035..5036
+                        EXPR_VAR@5035..5036
+                          NAME@5035..5036
+                            IDENT@5035..5036 "v"
+                      R_PAREN@5036..5037 ")"
+                WHITESPACE@5037..5044 "\n      "
+                R_BRACK@5044..5045 "]"
+            SEMI@5045..5046 ";"
+          WHITESPACE@5046..5053 "\n      "
+          TRUE_EXPR@5053..5086
+            EXPR_BINARY@5053..5086
+              LHS_EXPR@5053..5059
+                EXPR_STRING@5053..5059
+                  STRING_SINGLE@5053..5059 "'{%s}'"
+              WHITESPACE@5059..5060 " "
+              MODULO@5060..5061 "%"
+              WHITESPACE@5061..5062 " "
+              EXPR_ARRAY@5062..5086
+                L_BRACK@5062..5063 "["
+                EXPR_APPLY@5063..5085
+                  EXPR_INDEX@5063..5071
+                    EXPR_VAR@5063..5066
+                      NAME@5063..5066
+                        IDENT@5063..5066 "std"
+                    DOT@5066..5067 "."
+                    NAME@5067..5071
+                      IDENT@5067..5071 "join"
+                  ARGS_DESC@5071..5085
+                    L_PAREN@5071..5072 "("
+                    ARG@5072..5076
+                      EXPR_STRING@5072..5076
+                        STRING_SINGLE@5072..5076 "', '"
+                    COMMA@5076..5077 ","
+                    WHITESPACE@5077..5078 " "
+                    ARG@5078..5084
+                      EXPR_VAR@5078..5084
+                        NAME@5078..5084
+                          IDENT@5078..5084 "fields"
+                    R_PAREN@5084..5085 ")"
+                R_BRACK@5085..5086 "]"
           WHITESPACE@5086..5091 "\n    "
           ELSE_KW@5091..5095 "else"
           WHITESPACE@5095..5096 " "
@@ -3480,7 +3480,7 @@
           R_PAREN@5541..5542 ")"
         COLONCOLON@5542..5544 "::"
         WHITESPACE@5544..5549 "\n    "
-        EXPR_LOCAL@5549..5673
+        STMT_LOCAL@5549..5641
           LOCAL_KW@5549..5554 "local"
           WHITESPACE@5554..5555 " "
           BIND_DESTRUCT@5555..5640
@@ -3555,37 +3555,37 @@
                     R_PAREN@5638..5639 ")"
               R_BRACK@5639..5640 "]"
           SEMI@5640..5641 ";"
-          WHITESPACE@5641..5646 "\n    "
-          EXPR_APPLY@5646..5673
-            EXPR_INDEX@5646..5654
-              EXPR_VAR@5646..5649
-                NAME@5646..5649
-                  IDENT@5646..5649 "std"
-              DOT@5649..5650 "."
-              NAME@5650..5654
-                IDENT@5650..5654 "join"
-            ARGS_DESC@5654..5673
-              L_PAREN@5654..5655 "("
-              ARG@5655..5659
-                EXPR_STRING@5655..5659
-                  STRING_SINGLE@5655..5659 "'\\n'"
-              COMMA@5659..5660 ","
-              WHITESPACE@5660..5661 " "
-              ARG@5661..5672
-                EXPR_BINARY@5661..5672
-                  LHS_EXPR@5661..5665
-                    EXPR_VAR@5661..5665
-                      NAME@5661..5665
-                        IDENT@5661..5665 "vars"
-                  WHITESPACE@5665..5666 " "
-                  PLUS@5666..5667 "+"
-                  WHITESPACE@5667..5668 " "
-                  EXPR_ARRAY@5668..5672
-                    L_BRACK@5668..5669 "["
-                    EXPR_STRING@5669..5671
-                      STRING_SINGLE@5669..5671 "''"
-                    R_BRACK@5671..5672 "]"
-              R_PAREN@5672..5673 ")"
+        WHITESPACE@5641..5646 "\n    "
+        EXPR_APPLY@5646..5673
+          EXPR_INDEX@5646..5654
+            EXPR_VAR@5646..5649
+              NAME@5646..5649
+                IDENT@5646..5649 "std"
+            DOT@5649..5650 "."
+            NAME@5650..5654
+              IDENT@5650..5654 "join"
+          ARGS_DESC@5654..5673
+            L_PAREN@5654..5655 "("
+            ARG@5655..5659
+              EXPR_STRING@5655..5659
+                STRING_SINGLE@5655..5659 "'\\n'"
+            COMMA@5659..5660 ","
+            WHITESPACE@5660..5661 " "
+            ARG@5661..5672
+              EXPR_BINARY@5661..5672
+                LHS_EXPR@5661..5665
+                  EXPR_VAR@5661..5665
+                    NAME@5661..5665
+                      IDENT@5661..5665 "vars"
+                WHITESPACE@5665..5666 " "
+                PLUS@5666..5667 "+"
+                WHITESPACE@5667..5668 " "
+                EXPR_ARRAY@5668..5672
+                  L_BRACK@5668..5669 "["
+                  EXPR_STRING@5669..5671
+                    STRING_SINGLE@5669..5671 "''"
+                  R_BRACK@5671..5672 "]"
+            R_PAREN@5672..5673 ")"
       COMMA@5673..5674 ","
       WHITESPACE@5674..5678 "\n\n  "
       MEMBER_FIELD_METHOD@5678..6345
@@ -3653,3590 +3653,3098 @@
           WHITESPACE@5811..5816 "\n    "
           ELSE_KW@5816..5820 "else"
           WHITESPACE@5820..5827 "\n      "
-          FALSE_EXPR@5827..6345
-            EXPR_LOCAL@5827..6345
-              LOCAL_KW@5827..5832 "local"
-              WHITESPACE@5832..5833 " "
-              BIND_FUNCTION@5833..6326
-                NAME@5833..5836
-                  IDENT@5833..5836 "aux"
-                PARAMS_DESC@5836..5839
-                  L_PAREN@5836..5837 "("
-                  PARAM@5837..5838
-                    DESTRUCT_FULL@5837..5838
-                      NAME@5837..5838
-                        IDENT@5837..5838 "v"
-                  R_PAREN@5838..5839 ")"
-                WHITESPACE@5839..5840 " "
-                ASSIGN@5840..5841 "="
-                WHITESPACE@5841..5850 "\n        "
-                EXPR_IF_THEN_ELSE@5850..6326
-                  IF_KW@5850..5852 "if"
-                  WHITESPACE@5852..5853 " "
-                  EXPR_APPLY@5853..5868
-                    EXPR_INDEX@5853..5865
-                      EXPR_VAR@5853..5856
-                        NAME@5853..5856
-                          IDENT@5853..5856 "std"
-                      DOT@5856..5857 "."
-                      NAME@5857..5865
-                        IDENT@5857..5865 "isString"
-                    ARGS_DESC@5865..5868
-                      L_PAREN@5865..5866 "("
-                      ARG@5866..5867
-                        EXPR_VAR@5866..5867
-                          NAME@5866..5867
-                            IDENT@5866..5867 "v"
-                      R_PAREN@5867..5868 ")"
-                  WHITESPACE@5868..5869 " "
-                  THEN_KW@5869..5873 "then"
-                  WHITESPACE@5873..5884 "\n          "
-                  TRUE_EXPR@5884..5885
-                    EXPR_VAR@5884..5885
-                      NAME@5884..5885
-                        IDENT@5884..5885 "v"
-                  WHITESPACE@5885..5894 "\n        "
-                  ELSE_KW@5894..5898 "else"
-                  WHITESPACE@5898..5909 "\n          "
-                  FALSE_EXPR@5909..6326
-                    EXPR_LOCAL@5909..6326
-                      LOCAL_KW@5909..5914 "local"
-                      WHITESPACE@5914..5915 " "
-                      BIND_DESTRUCT@5915..5925
-                        DESTRUCT_FULL@5915..5918
-                          NAME@5915..5918
-                            IDENT@5915..5918 "tag"
-                        WHITESPACE@5918..5919 " "
-                        ASSIGN@5919..5920 "="
-                        WHITESPACE@5920..5921 " "
-                        EXPR_INDEX_EXPR@5921..5925
-                          LHS_EXPR@5921..5922
-                            EXPR_VAR@5921..5922
-                              NAME@5921..5922
-                                IDENT@5921..5922 "v"
-                          L_BRACK@5922..5923 "["
-                          EXPR_NUMBER@5923..5924
-                            FLOAT@5923..5924 "0"
-                          R_BRACK@5924..5925 "]"
-                      SEMI@5925..5926 ";"
-                      WHITESPACE@5926..5937 "\n          "
-                      EXPR_LOCAL@5937..6326
-                        LOCAL_KW@5937..5942 "local"
-                        WHITESPACE@5942..5943 " "
-                        BIND_DESTRUCT@5943..5994
-                          DESTRUCT_FULL@5943..5952
-                            NAME@5943..5952
-                              IDENT@5943..5952 "has_attrs"
-                          WHITESPACE@5952..5953 " "
-                          ASSIGN@5953..5954 "="
-                          WHITESPACE@5954..5955 " "
-                          EXPR_BINARY@5955..5994
-                            LHS_EXPR@5955..5972
-                              EXPR_BINARY@5955..5972
-                                LHS_EXPR@5955..5968
-                                  EXPR_APPLY@5955..5968
-                                    EXPR_INDEX@5955..5965
-                                      EXPR_VAR@5955..5958
-                                        NAME@5955..5958
-                                          IDENT@5955..5958 "std"
-                                      DOT@5958..5959 "."
-                                      NAME@5959..5965
-                                        IDENT@5959..5965 "length"
-                                    ARGS_DESC@5965..5968
-                                      L_PAREN@5965..5966 "("
-                                      ARG@5966..5967
-                                        EXPR_VAR@5966..5967
-                                          NAME@5966..5967
-                                            IDENT@5966..5967 "v"
-                                      R_PAREN@5967..5968 ")"
-                                WHITESPACE@5968..5969 " "
-                                GT@5969..5970 ">"
-                                WHITESPACE@5970..5971 " "
-                                EXPR_NUMBER@5971..5972
-                                  FLOAT@5971..5972 "1"
-                            WHITESPACE@5972..5973 " "
-                            AND@5973..5975 "&&"
-                            WHITESPACE@5975..5976 " "
-                            EXPR_APPLY@5976..5994
-                              EXPR_INDEX@5976..5988
-                                EXPR_VAR@5976..5979
-                                  NAME@5976..5979
-                                    IDENT@5976..5979 "std"
-                                DOT@5979..5980 "."
-                                NAME@5980..5988
-                                  IDENT@5980..5988 "isObject"
-                              ARGS_DESC@5988..5994
-                                L_PAREN@5988..5989 "("
-                                ARG@5989..5993
-                                  EXPR_INDEX_EXPR@5989..5993
-                                    LHS_EXPR@5989..5990
-                                      EXPR_VAR@5989..5990
-                                        NAME@5989..5990
-                                          IDENT@5989..5990 "v"
-                                    L_BRACK@5990..5991 "["
-                                    EXPR_NUMBER@5991..5992
-                                      FLOAT@5991..5992 "1"
-                                    R_BRACK@5992..5993 "]"
-                                R_PAREN@5993..5994 ")"
-                        SEMI@5994..5995 ";"
-                        WHITESPACE@5995..6006 "\n          "
-                        EXPR_LOCAL@6006..6326
-                          LOCAL_KW@6006..6011 "local"
-                          WHITESPACE@6011..6012 " "
-                          BIND_DESTRUCT@6012..6050
-                            DESTRUCT_FULL@6012..6017
-                              NAME@6012..6017
-                                IDENT@6012..6017 "attrs"
-                            WHITESPACE@6017..6018 " "
-                            ASSIGN@6018..6019 "="
-                            WHITESPACE@6019..6020 " "
-                            EXPR_IF_THEN_ELSE@6020..6050
-                              IF_KW@6020..6022 "if"
-                              WHITESPACE@6022..6023 " "
-                              EXPR_VAR@6023..6032
-                                NAME@6023..6032
-                                  IDENT@6023..6032 "has_attrs"
-                              WHITESPACE@6032..6033 " "
-                              THEN_KW@6033..6037 "then"
-                              WHITESPACE@6037..6038 " "
-                              TRUE_EXPR@6038..6042
-                                EXPR_INDEX_EXPR@6038..6042
-                                  LHS_EXPR@6038..6039
-                                    EXPR_VAR@6038..6039
-                                      NAME@6038..6039
-                                        IDENT@6038..6039 "v"
-                                  L_BRACK@6039..6040 "["
-                                  EXPR_NUMBER@6040..6041
-                                    FLOAT@6040..6041 "1"
-                                  R_BRACK@6041..6042 "]"
-                              WHITESPACE@6042..6043 " "
-                              ELSE_KW@6043..6047 "else"
-                              WHITESPACE@6047..6048 " "
-                              FALSE_EXPR@6048..6050
-                                EXPR_OBJECT@6048..6050
-                                  OBJ_BODY_MEMBER_LIST@6048..6050
-                                    L_BRACE@6048..6049 "{"
-                                    R_BRACE@6049..6050 "}"
-                          SEMI@6050..6051 ";"
-                          WHITESPACE@6051..6062 "\n          "
-                          EXPR_LOCAL@6062..6326
-                            LOCAL_KW@6062..6067 "local"
-                            WHITESPACE@6067..6068 " "
-                            BIND_DESTRUCT@6068..6113
-                              DESTRUCT_FULL@6068..6076
-                                NAME@6068..6076
-                                  IDENT@6068..6076 "children"
-                              WHITESPACE@6076..6077 " "
-                              ASSIGN@6077..6078 "="
-                              WHITESPACE@6078..6079 " "
-                              EXPR_IF_THEN_ELSE@6079..6113
-                                IF_KW@6079..6081 "if"
-                                WHITESPACE@6081..6082 " "
-                                EXPR_VAR@6082..6091
-                                  NAME@6082..6091
-                                    IDENT@6082..6091 "has_attrs"
-                                WHITESPACE@6091..6092 " "
-                                THEN_KW@6092..6096 "then"
-                                WHITESPACE@6096..6097 " "
-                                TRUE_EXPR@6097..6102
-                                  EXPR_SLICE@6097..6102
-                                    EXPR_VAR@6097..6098
-                                      NAME@6097..6098
-                                        IDENT@6097..6098 "v"
-                                    SLICE_DESC@6098..6102
-                                      L_BRACK@6098..6099 "["
-                                      EXPR_NUMBER@6099..6100
-                                        FLOAT@6099..6100 "2"
-                                      COLON@6100..6101 ":"
-                                      R_BRACK@6101..6102 "]"
-                                WHITESPACE@6102..6103 " "
-                                ELSE_KW@6103..6107 "else"
-                                WHITESPACE@6107..6108 " "
-                                FALSE_EXPR@6108..6113
-                                  EXPR_SLICE@6108..6113
-                                    EXPR_VAR@6108..6109
-                                      NAME@6108..6109
-                                        IDENT@6108..6109 "v"
-                                    SLICE_DESC@6109..6113
-                                      L_BRACK@6109..6110 "["
-                                      EXPR_NUMBER@6110..6111
-                                        FLOAT@6110..6111 "1"
-                                      COLON@6111..6112 ":"
-                                      R_BRACK@6112..6113 "]"
-                            SEMI@6113..6114 ";"
-                            WHITESPACE@6114..6125 "\n          "
-                            EXPR_LOCAL@6125..6326
-                              LOCAL_KW@6125..6130 "local"
-                              WHITESPACE@6130..6131 " "
-                              BIND_DESTRUCT@6131..6230
-                                DESTRUCT_FULL@6131..6140
-                                  NAME@6131..6140
-                                    IDENT@6131..6140 "attrs_str"
-                                WHITESPACE@6140..6141 " "
-                                ASSIGN@6141..6142 "="
-                                WHITESPACE@6142..6155 "\n            "
-                                EXPR_APPLY@6155..6230
-                                  EXPR_INDEX@6155..6163
-                                    EXPR_VAR@6155..6158
-                                      NAME@6155..6158
-                                        IDENT@6155..6158 "std"
-                                    DOT@6158..6159 "."
-                                    NAME@6159..6163
-                                      IDENT@6159..6163 "join"
-                                  ARGS_DESC@6163..6230
-                                    L_PAREN@6163..6164 "("
-                                    ARG@6164..6166
-                                      EXPR_STRING@6164..6166
-                                        STRING_SINGLE@6164..6166 "''"
-                                    COMMA@6166..6167 ","
-                                    WHITESPACE@6167..6168 " "
-                                    ARG@6168..6229
-                                      EXPR_ARRAY_COMP@6168..6229
-                                        L_BRACK@6168..6169 "["
-                                        EXPR_BINARY@6169..6195
-                                          LHS_EXPR@6169..6179
-                                            EXPR_STRING@6169..6179
-                                              STRING_SINGLE@6169..6179 "' %s=\"%s\"'"
-                                          WHITESPACE@6179..6180 " "
-                                          MODULO@6180..6181 "%"
-                                          WHITESPACE@6181..6182 " "
-                                          EXPR_ARRAY@6182..6195
-                                            L_BRACK@6182..6183 "["
-                                            EXPR_VAR@6183..6184
-                                              NAME@6183..6184
-                                                IDENT@6183..6184 "k"
-                                            COMMA@6184..6185 ","
-                                            WHITESPACE@6185..6186 " "
-                                            EXPR_INDEX_EXPR@6186..6194
-                                              LHS_EXPR@6186..6191
-                                                EXPR_VAR@6186..6191
-                                                  NAME@6186..6191
-                                                    IDENT@6186..6191 "attrs"
-                                              L_BRACK@6191..6192 "["
-                                              EXPR_VAR@6192..6193
-                                                NAME@6192..6193
-                                                  IDENT@6192..6193 "k"
-                                              R_BRACK@6193..6194 "]"
-                                            R_BRACK@6194..6195 "]"
-                                        WHITESPACE@6195..6196 " "
-                                        FOR_SPEC@6196..6228
-                                          FOR_KW@6196..6199 "for"
-                                          WHITESPACE@6199..6200 " "
-                                          NAME@6200..6201
-                                            IDENT@6200..6201 "k"
-                                          WHITESPACE@6201..6202 " "
-                                          IN_KW@6202..6204 "in"
-                                          WHITESPACE@6204..6205 " "
-                                          EXPR_APPLY@6205..6228
-                                            EXPR_INDEX@6205..6221
-                                              EXPR_VAR@6205..6208
-                                                NAME@6205..6208
-                                                  IDENT@6205..6208 "std"
-                                              DOT@6208..6209 "."
-                                              NAME@6209..6221
-                                                IDENT@6209..6221 "objectFields"
-                                            ARGS_DESC@6221..6228
-                                              L_PAREN@6221..6222 "("
-                                              ARG@6222..6227
-                                                EXPR_VAR@6222..6227
-                                                  NAME@6222..6227
-                                                    IDENT@6222..6227 "attrs"
-                                              R_PAREN@6227..6228 ")"
-                                        R_BRACK@6228..6229 "]"
-                                    R_PAREN@6229..6230 ")"
-                              SEMI@6230..6231 ";"
-                              WHITESPACE@6231..6242 "\n          "
-                              EXPR_APPLY@6242..6326
-                                EXPR_INDEX@6242..6254
-                                  EXPR_VAR@6242..6245
-                                    NAME@6242..6245
-                                      IDENT@6242..6245 "std"
-                                  DOT@6245..6246 "."
-                                  NAME@6246..6254
-                                    IDENT@6246..6254 "deepJoin"
-                                ARGS_DESC@6254..6326
-                                  L_PAREN@6254..6255 "("
-                                  ARG@6255..6325
-                                    EXPR_ARRAY@6255..6325
-                                      L_BRACK@6255..6256 "["
-                                      EXPR_STRING@6256..6259
-                                        STRING_SINGLE@6256..6259 "'<'"
-                                      COMMA@6259..6260 ","
-                                      WHITESPACE@6260..6261 " "
-                                      EXPR_VAR@6261..6264
-                                        NAME@6261..6264
-                                          IDENT@6261..6264 "tag"
-                                      COMMA@6264..6265 ","
-                                      WHITESPACE@6265..6266 " "
-                                      EXPR_VAR@6266..6275
-                                        NAME@6266..6275
-                                          IDENT@6266..6275 "attrs_str"
-                                      COMMA@6275..6276 ","
-                                      WHITESPACE@6276..6277 " "
-                                      EXPR_STRING@6277..6280
-                                        STRING_SINGLE@6277..6280 "'>'"
-                                      COMMA@6280..6281 ","
-                                      WHITESPACE@6281..6282 " "
-                                      EXPR_ARRAY_COMP@6282..6308
-                                        L_BRACK@6282..6283 "["
-                                        EXPR_APPLY@6283..6289
-                                          EXPR_VAR@6283..6286
-                                            NAME@6283..6286
-                                              IDENT@6283..6286 "aux"
-                                          ARGS_DESC@6286..6289
-                                            L_PAREN@6286..6287 "("
-                                            ARG@6287..6288
-                                              EXPR_VAR@6287..6288
-                                                NAME@6287..6288
-                                                  IDENT@6287..6288 "x"
-                                            R_PAREN@6288..6289 ")"
-                                        WHITESPACE@6289..6290 " "
-                                        FOR_SPEC@6290..6307
-                                          FOR_KW@6290..6293 "for"
-                                          WHITESPACE@6293..6294 " "
-                                          NAME@6294..6295
-                                            IDENT@6294..6295 "x"
-                                          WHITESPACE@6295..6296 " "
-                                          IN_KW@6296..6298 "in"
-                                          WHITESPACE@6298..6299 " "
-                                          EXPR_VAR@6299..6307
-                                            NAME@6299..6307
-                                              IDENT@6299..6307 "children"
-                                        R_BRACK@6307..6308 "]"
-                                      COMMA@6308..6309 ","
-                                      WHITESPACE@6309..6310 " "
-                                      EXPR_STRING@6310..6314
-                                        STRING_SINGLE@6310..6314 "'</'"
-                                      COMMA@6314..6315 ","
-                                      WHITESPACE@6315..6316 " "
-                                      EXPR_VAR@6316..6319
-                                        NAME@6316..6319
-                                          IDENT@6316..6319 "tag"
-                                      COMMA@6319..6320 ","
-                                      WHITESPACE@6320..6321 " "
-                                      EXPR_STRING@6321..6324
-                                        STRING_SINGLE@6321..6324 "'>'"
-                                      R_BRACK@6324..6325 "]"
-                                  R_PAREN@6325..6326 ")"
-              SEMI@6326..6327 ";"
-              WHITESPACE@6327..6335 "\n\n      "
-              EXPR_APPLY@6335..6345
-                EXPR_VAR@6335..6338
-                  NAME@6335..6338
-                    IDENT@6335..6338 "aux"
-                ARGS_DESC@6338..6345
-                  L_PAREN@6338..6339 "("
-                  ARG@6339..6344
-                    EXPR_VAR@6339..6344
-                      NAME@6339..6344
-                        IDENT@6339..6344 "value"
-                  R_PAREN@6344..6345 ")"
+          STMT_LOCAL@5827..6327
+            LOCAL_KW@5827..5832 "local"
+            WHITESPACE@5832..5833 " "
+            BIND_FUNCTION@5833..6326
+              NAME@5833..5836
+                IDENT@5833..5836 "aux"
+              PARAMS_DESC@5836..5839
+                L_PAREN@5836..5837 "("
+                PARAM@5837..5838
+                  DESTRUCT_FULL@5837..5838
+                    NAME@5837..5838
+                      IDENT@5837..5838 "v"
+                R_PAREN@5838..5839 ")"
+              WHITESPACE@5839..5840 " "
+              ASSIGN@5840..5841 "="
+              WHITESPACE@5841..5850 "\n        "
+              EXPR_IF_THEN_ELSE@5850..6326
+                IF_KW@5850..5852 "if"
+                WHITESPACE@5852..5853 " "
+                EXPR_APPLY@5853..5868
+                  EXPR_INDEX@5853..5865
+                    EXPR_VAR@5853..5856
+                      NAME@5853..5856
+                        IDENT@5853..5856 "std"
+                    DOT@5856..5857 "."
+                    NAME@5857..5865
+                      IDENT@5857..5865 "isString"
+                  ARGS_DESC@5865..5868
+                    L_PAREN@5865..5866 "("
+                    ARG@5866..5867
+                      EXPR_VAR@5866..5867
+                        NAME@5866..5867
+                          IDENT@5866..5867 "v"
+                    R_PAREN@5867..5868 ")"
+                WHITESPACE@5868..5869 " "
+                THEN_KW@5869..5873 "then"
+                WHITESPACE@5873..5884 "\n          "
+                TRUE_EXPR@5884..5885
+                  EXPR_VAR@5884..5885
+                    NAME@5884..5885
+                      IDENT@5884..5885 "v"
+                WHITESPACE@5885..5894 "\n        "
+                ELSE_KW@5894..5898 "else"
+                WHITESPACE@5898..5909 "\n          "
+                STMT_LOCAL@5909..5926
+                  LOCAL_KW@5909..5914 "local"
+                  WHITESPACE@5914..5915 " "
+                  BIND_DESTRUCT@5915..5925
+                    DESTRUCT_FULL@5915..5918
+                      NAME@5915..5918
+                        IDENT@5915..5918 "tag"
+                    WHITESPACE@5918..5919 " "
+                    ASSIGN@5919..5920 "="
+                    WHITESPACE@5920..5921 " "
+                    EXPR_INDEX_EXPR@5921..5925
+                      LHS_EXPR@5921..5922
+                        EXPR_VAR@5921..5922
+                          NAME@5921..5922
+                            IDENT@5921..5922 "v"
+                      L_BRACK@5922..5923 "["
+                      EXPR_NUMBER@5923..5924
+                        FLOAT@5923..5924 "0"
+                      R_BRACK@5924..5925 "]"
+                  SEMI@5925..5926 ";"
+                WHITESPACE@5926..5937 "\n          "
+                STMT_LOCAL@5937..5995
+                  LOCAL_KW@5937..5942 "local"
+                  WHITESPACE@5942..5943 " "
+                  BIND_DESTRUCT@5943..5994
+                    DESTRUCT_FULL@5943..5952
+                      NAME@5943..5952
+                        IDENT@5943..5952 "has_attrs"
+                    WHITESPACE@5952..5953 " "
+                    ASSIGN@5953..5954 "="
+                    WHITESPACE@5954..5955 " "
+                    EXPR_BINARY@5955..5994
+                      LHS_EXPR@5955..5972
+                        EXPR_BINARY@5955..5972
+                          LHS_EXPR@5955..5968
+                            EXPR_APPLY@5955..5968
+                              EXPR_INDEX@5955..5965
+                                EXPR_VAR@5955..5958
+                                  NAME@5955..5958
+                                    IDENT@5955..5958 "std"
+                                DOT@5958..5959 "."
+                                NAME@5959..5965
+                                  IDENT@5959..5965 "length"
+                              ARGS_DESC@5965..5968
+                                L_PAREN@5965..5966 "("
+                                ARG@5966..5967
+                                  EXPR_VAR@5966..5967
+                                    NAME@5966..5967
+                                      IDENT@5966..5967 "v"
+                                R_PAREN@5967..5968 ")"
+                          WHITESPACE@5968..5969 " "
+                          GT@5969..5970 ">"
+                          WHITESPACE@5970..5971 " "
+                          EXPR_NUMBER@5971..5972
+                            FLOAT@5971..5972 "1"
+                      WHITESPACE@5972..5973 " "
+                      AND@5973..5975 "&&"
+                      WHITESPACE@5975..5976 " "
+                      EXPR_APPLY@5976..5994
+                        EXPR_INDEX@5976..5988
+                          EXPR_VAR@5976..5979
+                            NAME@5976..5979
+                              IDENT@5976..5979 "std"
+                          DOT@5979..5980 "."
+                          NAME@5980..5988
+                            IDENT@5980..5988 "isObject"
+                        ARGS_DESC@5988..5994
+                          L_PAREN@5988..5989 "("
+                          ARG@5989..5993
+                            EXPR_INDEX_EXPR@5989..5993
+                              LHS_EXPR@5989..5990
+                                EXPR_VAR@5989..5990
+                                  NAME@5989..5990
+                                    IDENT@5989..5990 "v"
+                              L_BRACK@5990..5991 "["
+                              EXPR_NUMBER@5991..5992
+                                FLOAT@5991..5992 "1"
+                              R_BRACK@5992..5993 "]"
+                          R_PAREN@5993..5994 ")"
+                  SEMI@5994..5995 ";"
+                WHITESPACE@5995..6006 "\n          "
+                STMT_LOCAL@6006..6051
+                  LOCAL_KW@6006..6011 "local"
+                  WHITESPACE@6011..6012 " "
+                  BIND_DESTRUCT@6012..6050
+                    DESTRUCT_FULL@6012..6017
+                      NAME@6012..6017
+                        IDENT@6012..6017 "attrs"
+                    WHITESPACE@6017..6018 " "
+                    ASSIGN@6018..6019 "="
+                    WHITESPACE@6019..6020 " "
+                    EXPR_IF_THEN_ELSE@6020..6050
+                      IF_KW@6020..6022 "if"
+                      WHITESPACE@6022..6023 " "
+                      EXPR_VAR@6023..6032
+                        NAME@6023..6032
+                          IDENT@6023..6032 "has_attrs"
+                      WHITESPACE@6032..6033 " "
+                      THEN_KW@6033..6037 "then"
+                      WHITESPACE@6037..6038 " "
+                      TRUE_EXPR@6038..6042
+                        EXPR_INDEX_EXPR@6038..6042
+                          LHS_EXPR@6038..6039
+                            EXPR_VAR@6038..6039
+                              NAME@6038..6039
+                                IDENT@6038..6039 "v"
+                          L_BRACK@6039..6040 "["
+                          EXPR_NUMBER@6040..6041
+                            FLOAT@6040..6041 "1"
+                          R_BRACK@6041..6042 "]"
+                      WHITESPACE@6042..6043 " "
+                      ELSE_KW@6043..6047 "else"
+                      WHITESPACE@6047..6048 " "
+                      FALSE_EXPR@6048..6050
+                        EXPR_OBJECT@6048..6050
+                          OBJ_BODY_MEMBER_LIST@6048..6050
+                            L_BRACE@6048..6049 "{"
+                            R_BRACE@6049..6050 "}"
+                  SEMI@6050..6051 ";"
+                WHITESPACE@6051..6062 "\n          "
+                STMT_LOCAL@6062..6114
+                  LOCAL_KW@6062..6067 "local"
+                  WHITESPACE@6067..6068 " "
+                  BIND_DESTRUCT@6068..6113
+                    DESTRUCT_FULL@6068..6076
+                      NAME@6068..6076
+                        IDENT@6068..6076 "children"
+                    WHITESPACE@6076..6077 " "
+                    ASSIGN@6077..6078 "="
+                    WHITESPACE@6078..6079 " "
+                    EXPR_IF_THEN_ELSE@6079..6113
+                      IF_KW@6079..6081 "if"
+                      WHITESPACE@6081..6082 " "
+                      EXPR_VAR@6082..6091
+                        NAME@6082..6091
+                          IDENT@6082..6091 "has_attrs"
+                      WHITESPACE@6091..6092 " "
+                      THEN_KW@6092..6096 "then"
+                      WHITESPACE@6096..6097 " "
+                      TRUE_EXPR@6097..6102
+                        EXPR_SLICE@6097..6102
+                          EXPR_VAR@6097..6098
+                            NAME@6097..6098
+                              IDENT@6097..6098 "v"
+                          SLICE_DESC@6098..6102
+                            L_BRACK@6098..6099 "["
+                            EXPR_NUMBER@6099..6100
+                              FLOAT@6099..6100 "2"
+                            COLON@6100..6101 ":"
+                            R_BRACK@6101..6102 "]"
+                      WHITESPACE@6102..6103 " "
+                      ELSE_KW@6103..6107 "else"
+                      WHITESPACE@6107..6108 " "
+                      FALSE_EXPR@6108..6113
+                        EXPR_SLICE@6108..6113
+                          EXPR_VAR@6108..6109
+                            NAME@6108..6109
+                              IDENT@6108..6109 "v"
+                          SLICE_DESC@6109..6113
+                            L_BRACK@6109..6110 "["
+                            EXPR_NUMBER@6110..6111
+                              FLOAT@6110..6111 "1"
+                            COLON@6111..6112 ":"
+                            R_BRACK@6112..6113 "]"
+                  SEMI@6113..6114 ";"
+                WHITESPACE@6114..6125 "\n          "
+                STMT_LOCAL@6125..6231
+                  LOCAL_KW@6125..6130 "local"
+                  WHITESPACE@6130..6131 " "
+                  BIND_DESTRUCT@6131..6230
+                    DESTRUCT_FULL@6131..6140
+                      NAME@6131..6140
+                        IDENT@6131..6140 "attrs_str"
+                    WHITESPACE@6140..6141 " "
+                    ASSIGN@6141..6142 "="
+                    WHITESPACE@6142..6155 "\n            "
+                    EXPR_APPLY@6155..6230
+                      EXPR_INDEX@6155..6163
+                        EXPR_VAR@6155..6158
+                          NAME@6155..6158
+                            IDENT@6155..6158 "std"
+                        DOT@6158..6159 "."
+                        NAME@6159..6163
+                          IDENT@6159..6163 "join"
+                      ARGS_DESC@6163..6230
+                        L_PAREN@6163..6164 "("
+                        ARG@6164..6166
+                          EXPR_STRING@6164..6166
+                            STRING_SINGLE@6164..6166 "''"
+                        COMMA@6166..6167 ","
+                        WHITESPACE@6167..6168 " "
+                        ARG@6168..6229
+                          EXPR_ARRAY_COMP@6168..6229
+                            L_BRACK@6168..6169 "["
+                            EXPR_BINARY@6169..6195
+                              LHS_EXPR@6169..6179
+                                EXPR_STRING@6169..6179
+                                  STRING_SINGLE@6169..6179 "' %s=\"%s\"'"
+                              WHITESPACE@6179..6180 " "
+                              MODULO@6180..6181 "%"
+                              WHITESPACE@6181..6182 " "
+                              EXPR_ARRAY@6182..6195
+                                L_BRACK@6182..6183 "["
+                                EXPR_VAR@6183..6184
+                                  NAME@6183..6184
+                                    IDENT@6183..6184 "k"
+                                COMMA@6184..6185 ","
+                                WHITESPACE@6185..6186 " "
+                                EXPR_INDEX_EXPR@6186..6194
+                                  LHS_EXPR@6186..6191
+                                    EXPR_VAR@6186..6191
+                                      NAME@6186..6191
+                                        IDENT@6186..6191 "attrs"
+                                  L_BRACK@6191..6192 "["
+                                  EXPR_VAR@6192..6193
+                                    NAME@6192..6193
+                                      IDENT@6192..6193 "k"
+                                  R_BRACK@6193..6194 "]"
+                                R_BRACK@6194..6195 "]"
+                            WHITESPACE@6195..6196 " "
+                            FOR_SPEC@6196..6228
+                              FOR_KW@6196..6199 "for"
+                              WHITESPACE@6199..6200 " "
+                              NAME@6200..6201
+                                IDENT@6200..6201 "k"
+                              WHITESPACE@6201..6202 " "
+                              IN_KW@6202..6204 "in"
+                              WHITESPACE@6204..6205 " "
+                              EXPR_APPLY@6205..6228
+                                EXPR_INDEX@6205..6221
+                                  EXPR_VAR@6205..6208
+                                    NAME@6205..6208
+                                      IDENT@6205..6208 "std"
+                                  DOT@6208..6209 "."
+                                  NAME@6209..6221
+                                    IDENT@6209..6221 "objectFields"
+                                ARGS_DESC@6221..6228
+                                  L_PAREN@6221..6222 "("
+                                  ARG@6222..6227
+                                    EXPR_VAR@6222..6227
+                                      NAME@6222..6227
+                                        IDENT@6222..6227 "attrs"
+                                  R_PAREN@6227..6228 ")"
+                            R_BRACK@6228..6229 "]"
+                        R_PAREN@6229..6230 ")"
+                  SEMI@6230..6231 ";"
+                WHITESPACE@6231..6242 "\n          "
+                FALSE_EXPR@6242..6326
+                  EXPR_APPLY@6242..6326
+                    EXPR_INDEX@6242..6254
+                      EXPR_VAR@6242..6245
+                        NAME@6242..6245
+                          IDENT@6242..6245 "std"
+                      DOT@6245..6246 "."
+                      NAME@6246..6254
+                        IDENT@6246..6254 "deepJoin"
+                    ARGS_DESC@6254..6326
+                      L_PAREN@6254..6255 "("
+                      ARG@6255..6325
+                        EXPR_ARRAY@6255..6325
+                          L_BRACK@6255..6256 "["
+                          EXPR_STRING@6256..6259
+                            STRING_SINGLE@6256..6259 "'<'"
+                          COMMA@6259..6260 ","
+                          WHITESPACE@6260..6261 " "
+                          EXPR_VAR@6261..6264
+                            NAME@6261..6264
+                              IDENT@6261..6264 "tag"
+                          COMMA@6264..6265 ","
+                          WHITESPACE@6265..6266 " "
+                          EXPR_VAR@6266..6275
+                            NAME@6266..6275
+                              IDENT@6266..6275 "attrs_str"
+                          COMMA@6275..6276 ","
+                          WHITESPACE@6276..6277 " "
+                          EXPR_STRING@6277..6280
+                            STRING_SINGLE@6277..6280 "'>'"
+                          COMMA@6280..6281 ","
+                          WHITESPACE@6281..6282 " "
+                          EXPR_ARRAY_COMP@6282..6308
+                            L_BRACK@6282..6283 "["
+                            EXPR_APPLY@6283..6289
+                              EXPR_VAR@6283..6286
+                                NAME@6283..6286
+                                  IDENT@6283..6286 "aux"
+                              ARGS_DESC@6286..6289
+                                L_PAREN@6286..6287 "("
+                                ARG@6287..6288
+                                  EXPR_VAR@6287..6288
+                                    NAME@6287..6288
+                                      IDENT@6287..6288 "x"
+                                R_PAREN@6288..6289 ")"
+                            WHITESPACE@6289..6290 " "
+                            FOR_SPEC@6290..6307
+                              FOR_KW@6290..6293 "for"
+                              WHITESPACE@6293..6294 " "
+                              NAME@6294..6295
+                                IDENT@6294..6295 "x"
+                              WHITESPACE@6295..6296 " "
+                              IN_KW@6296..6298 "in"
+                              WHITESPACE@6298..6299 " "
+                              EXPR_VAR@6299..6307
+                                NAME@6299..6307
+                                  IDENT@6299..6307 "children"
+                            R_BRACK@6307..6308 "]"
+                          COMMA@6308..6309 ","
+                          WHITESPACE@6309..6310 " "
+                          EXPR_STRING@6310..6314
+                            STRING_SINGLE@6310..6314 "'</'"
+                          COMMA@6314..6315 ","
+                          WHITESPACE@6315..6316 " "
+                          EXPR_VAR@6316..6319
+                            NAME@6316..6319
+                              IDENT@6316..6319 "tag"
+                          COMMA@6319..6320 ","
+                          WHITESPACE@6320..6321 " "
+                          EXPR_STRING@6321..6324
+                            STRING_SINGLE@6321..6324 "'>'"
+                          R_BRACK@6324..6325 "]"
+                      R_PAREN@6325..6326 ")"
+            SEMI@6326..6327 ";"
+          WHITESPACE@6327..6335 "\n\n      "
+          FALSE_EXPR@6335..6345
+            EXPR_APPLY@6335..6345
+              EXPR_VAR@6335..6338
+                NAME@6335..6338
+                  IDENT@6335..6338 "aux"
+              ARGS_DESC@6338..6345
+                L_PAREN@6338..6339 "("
+                ARG@6339..6344
+                  EXPR_VAR@6339..6344
+                    NAME@6339..6344
+                      IDENT@6339..6344 "value"
+                R_PAREN@6344..6345 ")"
       COMMA@6345..6346 ","
       WHITESPACE@6346..6350 "\n\n  "
-      MEMBER_FIELD_METHOD@6350..6556
-        FIELD_NAME_FIXED@6350..6354
-          NAME@6350..6354
-            IDENT@6350..6354 "uniq"
-        PARAMS_DESC@6354..6368
-          L_PAREN@6354..6355 "("
-          PARAM@6355..6358
-            DESTRUCT_FULL@6355..6358
-              NAME@6355..6358
-                IDENT@6355..6358 "arr"
-          COMMA@6358..6359 ","
-          WHITESPACE@6359..6360 " "
-          PARAM@6360..6367
-            DESTRUCT_FULL@6360..6364
-              NAME@6360..6364
-                IDENT@6360..6364 "keyF"
-            ASSIGN@6364..6365 "="
-            EXPR_VAR@6365..6367
-              NAME@6365..6367
-                IDENT@6365..6367 "id"
-          R_PAREN@6367..6368 ")"
-        COLONCOLON@6368..6370 "::"
-        WHITESPACE@6370..6375 "\n    "
-        EXPR_LOCAL@6375..6556
-          LOCAL_KW@6375..6380 "local"
-          WHITESPACE@6380..6381 " "
-          BIND_FUNCTION@6381..6529
-            NAME@6381..6382
-              IDENT@6381..6382 "f"
-            PARAMS_DESC@6382..6388
-              L_PAREN@6382..6383 "("
-              PARAM@6383..6384
-                DESTRUCT_FULL@6383..6384
-                  NAME@6383..6384
-                    IDENT@6383..6384 "a"
-              COMMA@6384..6385 ","
-              WHITESPACE@6385..6386 " "
-              PARAM@6386..6387
-                DESTRUCT_FULL@6386..6387
-                  NAME@6386..6387
-                    IDENT@6386..6387 "b"
-              R_PAREN@6387..6388 ")"
-            WHITESPACE@6388..6389 " "
-            ASSIGN@6389..6390 "="
-            WHITESPACE@6390..6397 "\n      "
-            EXPR_IF_THEN_ELSE@6397..6529
-              IF_KW@6397..6399 "if"
-              WHITESPACE@6399..6400 " "
-              EXPR_BINARY@6400..6418
-                LHS_EXPR@6400..6413
-                  EXPR_APPLY@6400..6413
-                    EXPR_INDEX@6400..6410
-                      EXPR_VAR@6400..6403
-                        NAME@6400..6403
-                          IDENT@6400..6403 "std"
-                      DOT@6403..6404 "."
-                      NAME@6404..6410
-                        IDENT@6404..6410 "length"
-                    ARGS_DESC@6410..6413
-                      L_PAREN@6410..6411 "("
-                      ARG@6411..6412
-                        EXPR_VAR@6411..6412
-                          NAME@6411..6412
-                            IDENT@6411..6412 "a"
-                      R_PAREN@6412..6413 ")"
-                WHITESPACE@6413..6414 " "
-                EQ@6414..6416 "=="
-                WHITESPACE@6416..6417 " "
-                EXPR_NUMBER@6417..6418
-                  FLOAT@6417..6418 "0"
-              WHITESPACE@6418..6419 " "
-              THEN_KW@6419..6423 "then"
-              WHITESPACE@6423..6432 "\n        "
-              TRUE_EXPR@6432..6435
-                EXPR_ARRAY@6432..6435
-                  L_BRACK@6432..6433 "["
-                  EXPR_VAR@6433..6434
-                    NAME@6433..6434
-                      IDENT@6433..6434 "b"
-                  R_BRACK@6434..6435 "]"
-              WHITESPACE@6435..6442 "\n      "
-              ELSE_KW@6442..6446 "else"
-              WHITESPACE@6446..6447 " "
-              FALSE_EXPR@6447..6529
-                EXPR_IF_THEN_ELSE@6447..6529
-                  IF_KW@6447..6449 "if"
-                  WHITESPACE@6449..6450 " "
-                  EXPR_BINARY@6450..6487
-                    LHS_EXPR@6450..6476
-                      EXPR_APPLY@6450..6476
-                        EXPR_VAR@6450..6454
-                          NAME@6450..6454
-                            IDENT@6450..6454 "keyF"
-                        ARGS_DESC@6454..6476
-                          L_PAREN@6454..6455 "("
-                          ARG@6455..6475
-                            EXPR_INDEX_EXPR@6455..6475
-                              LHS_EXPR@6455..6456
-                                EXPR_VAR@6455..6456
-                                  NAME@6455..6456
-                                    IDENT@6455..6456 "a"
-                              L_BRACK@6456..6457 "["
-                              EXPR_BINARY@6457..6474
-                                LHS_EXPR@6457..6470
-                                  EXPR_APPLY@6457..6470
-                                    EXPR_INDEX@6457..6467
-                                      EXPR_VAR@6457..6460
-                                        NAME@6457..6460
-                                          IDENT@6457..6460 "std"
-                                      DOT@6460..6461 "."
-                                      NAME@6461..6467
-                                        IDENT@6461..6467 "length"
-                                    ARGS_DESC@6467..6470
-                                      L_PAREN@6467..6468 "("
-                                      ARG@6468..6469
-                                        EXPR_VAR@6468..6469
-                                          NAME@6468..6469
-                                            IDENT@6468..6469 "a"
-                                      R_PAREN@6469..6470 ")"
-                                WHITESPACE@6470..6471 " "
-                                MINUS@6471..6472 "-"
-                                WHITESPACE@6472..6473 " "
-                                EXPR_NUMBER@6473..6474
-                                  FLOAT@6473..6474 "1"
-                              R_BRACK@6474..6475 "]"
-                          R_PAREN@6475..6476 ")"
-                    WHITESPACE@6476..6477 " "
-                    EQ@6477..6479 "=="
-                    WHITESPACE@6479..6480 " "
-                    EXPR_APPLY@6480..6487
-                      EXPR_VAR@6480..6484
-                        NAME@6480..6484
-                          IDENT@6480..6484 "keyF"
-                      ARGS_DESC@6484..6487
-                        L_PAREN@6484..6485 "("
-                        ARG@6485..6486
-                          EXPR_VAR@6485..6486
-                            NAME@6485..6486
-                              IDENT@6485..6486 "b"
-                        R_PAREN@6486..6487 ")"
-                  WHITESPACE@6487..6488 " "
-                  THEN_KW@6488..6492 "then"
-                  WHITESPACE@6492..6501 "\n        "
-                  TRUE_EXPR@6501..6502
-                    EXPR_VAR@6501..6502
-                      NAME@6501..6502
-                        IDENT@6501..6502 "a"
-                  WHITESPACE@6502..6509 "\n      "
-                  ELSE_KW@6509..6513 "else"
-                  WHITESPACE@6513..6522 "\n        "
-                  FALSE_EXPR@6522..6529
-                    EXPR_BINARY@6522..6529
-                      LHS_EXPR@6522..6523
-                        EXPR_VAR@6522..6523
-                          NAME@6522..6523
-                            IDENT@6522..6523 "a"
-                      WHITESPACE@6523..6524 " "
-                      PLUS@6524..6525 "+"
-                      WHITESPACE@6525..6526 " "
-                      EXPR_ARRAY@6526..6529
-                        L_BRACK@6526..6527 "["
-                        EXPR_VAR@6527..6528
-                          NAME@6527..6528
-                            IDENT@6527..6528 "b"
-                        R_BRACK@6528..6529 "]"
-          SEMI@6529..6530 ";"
-          WHITESPACE@6530..6535 "\n    "
-          EXPR_APPLY@6535..6556
-            EXPR_INDEX@6535..6544
-              EXPR_VAR@6535..6538
-                NAME@6535..6538
-                  IDENT@6535..6538 "std"
-              DOT@6538..6539 "."
-              NAME@6539..6544
-                IDENT@6539..6544 "foldl"
-            ARGS_DESC@6544..6556
-              L_PAREN@6544..6545 "("
-              ARG@6545..6546
-                EXPR_VAR@6545..6546
-                  NAME@6545..6546
-                    IDENT@6545..6546 "f"
-              COMMA@6546..6547 ","
-              WHITESPACE@6547..6548 " "
-              ARG@6548..6551
-                EXPR_VAR@6548..6551
-                  NAME@6548..6551
-                    IDENT@6548..6551 "arr"
-              COMMA@6551..6552 ","
-              WHITESPACE@6552..6553 " "
-              ARG@6553..6555
-                EXPR_ARRAY@6553..6555
-                  L_BRACK@6553..6554 "["
-                  R_BRACK@6554..6555 "]"
-              R_PAREN@6555..6556 ")"
-      COMMA@6556..6557 ","
-      WHITESPACE@6557..6561 "\n\n  "
-      MEMBER_FIELD_METHOD@6561..6620
-        FIELD_NAME_FIXED@6561..6564
-          NAME@6561..6564
-            IDENT@6561..6564 "set"
-        PARAMS_DESC@6564..6578
-          L_PAREN@6564..6565 "("
-          PARAM@6565..6568
-            DESTRUCT_FULL@6565..6568
-              NAME@6565..6568
-                IDENT@6565..6568 "arr"
-          COMMA@6568..6569 ","
-          WHITESPACE@6569..6570 " "
-          PARAM@6570..6577
-            DESTRUCT_FULL@6570..6574
-              NAME@6570..6574
-                IDENT@6570..6574 "keyF"
-            ASSIGN@6574..6575 "="
-            EXPR_VAR@6575..6577
-              NAME@6575..6577
-                IDENT@6575..6577 "id"
-          R_PAREN@6577..6578 ")"
-        COLONCOLON@6578..6580 "::"
-        WHITESPACE@6580..6585 "\n    "
-        EXPR_APPLY@6585..6620
-          EXPR_INDEX@6585..6593
-            EXPR_VAR@6585..6588
-              NAME@6585..6588
-                IDENT@6585..6588 "std"
-            DOT@6588..6589 "."
-            NAME@6589..6593
-              IDENT@6589..6593 "uniq"
-          ARGS_DESC@6593..6620
-            L_PAREN@6593..6594 "("
-            ARG@6594..6613
-              EXPR_APPLY@6594..6613
-                EXPR_INDEX@6594..6602
-                  EXPR_VAR@6594..6597
-                    NAME@6594..6597
-                      IDENT@6594..6597 "std"
-                  DOT@6597..6598 "."
-                  NAME@6598..6602
-                    IDENT@6598..6602 "sort"
-                ARGS_DESC@6602..6613
-                  L_PAREN@6602..6603 "("
-                  ARG@6603..6606
-                    EXPR_VAR@6603..6606
-                      NAME@6603..6606
-                        IDENT@6603..6606 "arr"
-                  COMMA@6606..6607 ","
-                  WHITESPACE@6607..6608 " "
-                  ARG@6608..6612
-                    EXPR_VAR@6608..6612
-                      NAME@6608..6612
-                        IDENT@6608..6612 "keyF"
-                  R_PAREN@6612..6613 ")"
-            COMMA@6613..6614 ","
-            WHITESPACE@6614..6615 " "
-            ARG@6615..6619
-              EXPR_VAR@6615..6619
-                NAME@6615..6619
-                  IDENT@6615..6619 "keyF"
-            R_PAREN@6619..6620 ")"
-      COMMA@6620..6621 ","
-      WHITESPACE@6621..6625 "\n\n  "
-      MEMBER_FIELD_METHOD@6625..6760
-        FIELD_NAME_FIXED@6625..6634
-          NAME@6625..6634
-            IDENT@6625..6634 "setMember"
-        PARAMS_DESC@6634..6651
-          L_PAREN@6634..6635 "("
-          PARAM@6635..6636
-            DESTRUCT_FULL@6635..6636
-              NAME@6635..6636
-                IDENT@6635..6636 "x"
-          COMMA@6636..6637 ","
-          WHITESPACE@6637..6638 " "
-          PARAM@6638..6641
-            DESTRUCT_FULL@6638..6641
-              NAME@6638..6641
-                IDENT@6638..6641 "arr"
-          COMMA@6641..6642 ","
-          WHITESPACE@6642..6643 " "
-          PARAM@6643..6650
-            DESTRUCT_FULL@6643..6647
-              NAME@6643..6647
-                IDENT@6643..6647 "keyF"
-            ASSIGN@6647..6648 "="
-            EXPR_VAR@6648..6650
-              NAME@6648..6650
-                IDENT@6648..6650 "id"
-          R_PAREN@6650..6651 ")"
-        COLONCOLON@6651..6653 "::"
-        WHITESPACE@6653..6658 "\n    "
-        SINGLE_LINE_SLASH_COMMENT@6658..6712 "// TODO(dcunnin): Bin ..."
-        WHITESPACE@6712..6716 "    "
-        EXPR_BINARY@6716..6760
-          LHS_EXPR@6716..6756
-            EXPR_APPLY@6716..6756
-              EXPR_INDEX@6716..6726
-                EXPR_VAR@6716..6719
-                  NAME@6716..6719
-                    IDENT@6716..6719 "std"
-                DOT@6719..6720 "."
-                NAME@6720..6726
-                  IDENT@6720..6726 "length"
-              ARGS_DESC@6726..6756
-                L_PAREN@6726..6727 "("
-                ARG@6727..6755
-                  EXPR_APPLY@6727..6755
-                    EXPR_INDEX@6727..6739
-                      EXPR_VAR@6727..6730
-                        NAME@6727..6730
-                          IDENT@6727..6730 "std"
-                      DOT@6730..6731 "."
-                      NAME@6731..6739
-                        IDENT@6731..6739 "setInter"
-                    ARGS_DESC@6739..6755
-                      L_PAREN@6739..6740 "("
-                      ARG@6740..6743
-                        EXPR_ARRAY@6740..6743
-                          L_BRACK@6740..6741 "["
-                          EXPR_VAR@6741..6742
-                            NAME@6741..6742
-                              IDENT@6741..6742 "x"
-                          R_BRACK@6742..6743 "]"
-                      COMMA@6743..6744 ","
-                      WHITESPACE@6744..6745 " "
-                      ARG@6745..6748
-                        EXPR_VAR@6745..6748
-                          NAME@6745..6748
-                            IDENT@6745..6748 "arr"
-                      COMMA@6748..6749 ","
-                      WHITESPACE@6749..6750 " "
-                      ARG@6750..6754
-                        EXPR_VAR@6750..6754
-                          NAME@6750..6754
-                            IDENT@6750..6754 "keyF"
-                      R_PAREN@6754..6755 ")"
-                R_PAREN@6755..6756 ")"
-          WHITESPACE@6756..6757 " "
-          GT@6757..6758 ">"
-          WHITESPACE@6758..6759 " "
-          EXPR_NUMBER@6759..6760
-            FLOAT@6759..6760 "0"
-      COMMA@6760..6761 ","
-      WHITESPACE@6761..6765 "\n\n  "
-      MEMBER_FIELD_METHOD@6765..7314
-        FIELD_NAME_FIXED@6765..6773
-          NAME@6765..6773
-            IDENT@6765..6773 "setUnion"
-        PARAMS_DESC@6773..6788
-          L_PAREN@6773..6774 "("
-          PARAM@6774..6775
-            DESTRUCT_FULL@6774..6775
-              NAME@6774..6775
-                IDENT@6774..6775 "a"
-          COMMA@6775..6776 ","
-          WHITESPACE@6776..6777 " "
-          PARAM@6777..6778
-            DESTRUCT_FULL@6777..6778
-              NAME@6777..6778
-                IDENT@6777..6778 "b"
-          COMMA@6778..6779 ","
-          WHITESPACE@6779..6780 " "
-          PARAM@6780..6787
-            DESTRUCT_FULL@6780..6784
-              NAME@6780..6784
-                IDENT@6780..6784 "keyF"
-            ASSIGN@6784..6785 "="
-            EXPR_VAR@6785..6787
-              NAME@6785..6787
-                IDENT@6785..6787 "id"
-          R_PAREN@6787..6788 ")"
-        COLONCOLON@6788..6790 "::"
-        WHITESPACE@6790..6795 "\n    "
-        SINGLE_LINE_SLASH_COMMENT@6795..6837 "// NOTE: order matter ..."
-        WHITESPACE@6837..6841 "    "
-        EXPR_LOCAL@6841..7314
-          LOCAL_KW@6841..6846 "local"
-          WHITESPACE@6846..6847 " "
-          BIND_FUNCTION@6847..7289
-            NAME@6847..6850
-              IDENT@6847..6850 "aux"
-            PARAMS_DESC@6850..6867
-              L_PAREN@6850..6851 "("
-              PARAM@6851..6852
-                DESTRUCT_FULL@6851..6852
-                  NAME@6851..6852
-                    IDENT@6851..6852 "a"
-              COMMA@6852..6853 ","
-              WHITESPACE@6853..6854 " "
-              PARAM@6854..6855
-                DESTRUCT_FULL@6854..6855
-                  NAME@6854..6855
-                    IDENT@6854..6855 "b"
-              COMMA@6855..6856 ","
-              WHITESPACE@6856..6857 " "
-              PARAM@6857..6858
-                DESTRUCT_FULL@6857..6858
-                  NAME@6857..6858
-                    IDENT@6857..6858 "i"
-              COMMA@6858..6859 ","
-              WHITESPACE@6859..6860 " "
-              PARAM@6860..6861
-                DESTRUCT_FULL@6860..6861
-                  NAME@6860..6861
-                    IDENT@6860..6861 "j"
-              COMMA@6861..6862 ","
-              WHITESPACE@6862..6863 " "
-              PARAM@6863..6866
-                DESTRUCT_FULL@6863..6866
-                  NAME@6863..6866
-                    IDENT@6863..6866 "acc"
-              R_PAREN@6866..6867 ")"
-            WHITESPACE@6867..6868 " "
-            ASSIGN@6868..6869 "="
-            WHITESPACE@6869..6876 "\n      "
-            EXPR_IF_THEN_ELSE@6876..7289
-              IF_KW@6876..6878 "if"
-              WHITESPACE@6878..6879 " "
-              EXPR_BINARY@6879..6897
-                LHS_EXPR@6879..6880
-                  EXPR_VAR@6879..6880
-                    NAME@6879..6880
-                      IDENT@6879..6880 "i"
-                WHITESPACE@6880..6881 " "
-                GE@6881..6883 ">="
-                WHITESPACE@6883..6884 " "
-                EXPR_APPLY@6884..6897
-                  EXPR_INDEX@6884..6894
-                    EXPR_VAR@6884..6887
-                      NAME@6884..6887
-                        IDENT@6884..6887 "std"
-                    DOT@6887..6888 "."
-                    NAME@6888..6894
-                      IDENT@6888..6894 "length"
-                  ARGS_DESC@6894..6897
-                    L_PAREN@6894..6895 "("
-                    ARG@6895..6896
-                      EXPR_VAR@6895..6896
-                        NAME@6895..6896
-                          IDENT@6895..6896 "a"
-                    R_PAREN@6896..6897 ")"
-              WHITESPACE@6897..6898 " "
-              THEN_KW@6898..6902 "then"
-              WHITESPACE@6902..6911 "\n        "
-              TRUE_EXPR@6911..6922
-                EXPR_BINARY@6911..6922
-                  LHS_EXPR@6911..6914
-                    EXPR_VAR@6911..6914
-                      NAME@6911..6914
-                        IDENT@6911..6914 "acc"
-                  WHITESPACE@6914..6915 " "
-                  PLUS@6915..6916 "+"
-                  WHITESPACE@6916..6917 " "
-                  EXPR_SLICE@6917..6922
-                    EXPR_VAR@6917..6918
-                      NAME@6917..6918
-                        IDENT@6917..6918 "b"
-                    SLICE_DESC@6918..6922
-                      L_BRACK@6918..6919 "["
-                      EXPR_VAR@6919..6920
-                        NAME@6919..6920
-                          IDENT@6919..6920 "j"
-                      COLON@6920..6921 ":"
-                      R_BRACK@6921..6922 "]"
-              WHITESPACE@6922..6929 "\n      "
-              ELSE_KW@6929..6933 "else"
-              WHITESPACE@6933..6934 " "
-              FALSE_EXPR@6934..7289
-                EXPR_IF_THEN_ELSE@6934..7289
-                  IF_KW@6934..6936 "if"
-                  WHITESPACE@6936..6937 " "
-                  EXPR_BINARY@6937..6955
-                    LHS_EXPR@6937..6938
-                      EXPR_VAR@6937..6938
-                        NAME@6937..6938
-                          IDENT@6937..6938 "j"
-                    WHITESPACE@6938..6939 " "
-                    GE@6939..6941 ">="
-                    WHITESPACE@6941..6942 " "
-                    EXPR_APPLY@6942..6955
-                      EXPR_INDEX@6942..6952
-                        EXPR_VAR@6942..6945
-                          NAME@6942..6945
-                            IDENT@6942..6945 "std"
-                        DOT@6945..6946 "."
-                        NAME@6946..6952
-                          IDENT@6946..6952 "length"
-                      ARGS_DESC@6952..6955
-                        L_PAREN@6952..6953 "("
-                        ARG@6953..6954
-                          EXPR_VAR@6953..6954
-                            NAME@6953..6954
-                              IDENT@6953..6954 "b"
-                        R_PAREN@6954..6955 ")"
-                  WHITESPACE@6955..6956 " "
-                  THEN_KW@6956..6960 "then"
-                  WHITESPACE@6960..6969 "\n        "
-                  TRUE_EXPR@6969..6980
-                    EXPR_BINARY@6969..6980
-                      LHS_EXPR@6969..6972
-                        EXPR_VAR@6969..6972
-                          NAME@6969..6972
-                            IDENT@6969..6972 "acc"
-                      WHITESPACE@6972..6973 " "
-                      PLUS@6973..6974 "+"
-                      WHITESPACE@6974..6975 " "
-                      EXPR_SLICE@6975..6980
-                        EXPR_VAR@6975..6976
-                          NAME@6975..6976
-                            IDENT@6975..6976 "a"
-                        SLICE_DESC@6976..6980
-                          L_BRACK@6976..6977 "["
-                          EXPR_VAR@6977..6978
-                            NAME@6977..6978
-                              IDENT@6977..6978 "i"
-                          COLON@6978..6979 ":"
-                          R_BRACK@6979..6980 "]"
-                  WHITESPACE@6980..6987 "\n      "
-                  ELSE_KW@6987..6991 "else"
-                  WHITESPACE@6991..7000 "\n        "
-                  FALSE_EXPR@7000..7289
-                    EXPR_LOCAL@7000..7289
-                      LOCAL_KW@7000..7005 "local"
-                      WHITESPACE@7005..7006 " "
-                      BIND_DESTRUCT@7006..7021
-                        DESTRUCT_FULL@7006..7008
-                          NAME@7006..7008
-                            IDENT@7006..7008 "ak"
-                        WHITESPACE@7008..7009 " "
-                        ASSIGN@7009..7010 "="
-                        WHITESPACE@7010..7011 " "
-                        EXPR_APPLY@7011..7021
-                          EXPR_VAR@7011..7015
-                            NAME@7011..7015
-                              IDENT@7011..7015 "keyF"
-                          ARGS_DESC@7015..7021
-                            L_PAREN@7015..7016 "("
-                            ARG@7016..7020
-                              EXPR_INDEX_EXPR@7016..7020
-                                LHS_EXPR@7016..7017
-                                  EXPR_VAR@7016..7017
-                                    NAME@7016..7017
-                                      IDENT@7016..7017 "a"
-                                L_BRACK@7017..7018 "["
-                                EXPR_VAR@7018..7019
-                                  NAME@7018..7019
-                                    IDENT@7018..7019 "i"
-                                R_BRACK@7019..7020 "]"
-                            R_PAREN@7020..7021 ")"
-                      SEMI@7021..7022 ";"
-                      WHITESPACE@7022..7031 "\n        "
-                      EXPR_LOCAL@7031..7289
-                        LOCAL_KW@7031..7036 "local"
-                        WHITESPACE@7036..7037 " "
-                        BIND_DESTRUCT@7037..7052
-                          DESTRUCT_FULL@7037..7039
-                            NAME@7037..7039
-                              IDENT@7037..7039 "bk"
-                          WHITESPACE@7039..7040 " "
-                          ASSIGN@7040..7041 "="
-                          WHITESPACE@7041..7042 " "
-                          EXPR_APPLY@7042..7052
-                            EXPR_VAR@7042..7046
-                              NAME@7042..7046
-                                IDENT@7042..7046 "keyF"
-                            ARGS_DESC@7046..7052
-                              L_PAREN@7046..7047 "("
-                              ARG@7047..7051
-                                EXPR_INDEX_EXPR@7047..7051
-                                  LHS_EXPR@7047..7048
-                                    EXPR_VAR@7047..7048
-                                      NAME@7047..7048
-                                        IDENT@7047..7048 "b"
-                                  L_BRACK@7048..7049 "["
-                                  EXPR_VAR@7049..7050
-                                    NAME@7049..7050
-                                      IDENT@7049..7050 "j"
-                                  R_BRACK@7050..7051 "]"
-                              R_PAREN@7051..7052 ")"
-                        SEMI@7052..7053 ";"
-                        WHITESPACE@7053..7062 "\n        "
-                        EXPR_IF_THEN_ELSE@7062..7289
-                          IF_KW@7062..7064 "if"
-                          WHITESPACE@7064..7065 " "
-                          EXPR_BINARY@7065..7073
-                            LHS_EXPR@7065..7067
-                              EXPR_VAR@7065..7067
-                                NAME@7065..7067
-                                  IDENT@7065..7067 "ak"
-                            WHITESPACE@7067..7068 " "
-                            EQ@7068..7070 "=="
-                            WHITESPACE@7070..7071 " "
-                            EXPR_VAR@7071..7073
-                              NAME@7071..7073
-                                IDENT@7071..7073 "bk"
-                          WHITESPACE@7073..7074 " "
-                          THEN_KW@7074..7078 "then"
-                          WHITESPACE@7078..7089 "\n          "
-                          TRUE_EXPR@7089..7137
-                            EXPR_APPLY@7089..7137
-                              EXPR_VAR@7089..7092
-                                NAME@7089..7092
-                                  IDENT@7089..7092 "aux"
-                              ARGS_DESC@7092..7137
-                                L_PAREN@7092..7093 "("
-                                ARG@7093..7094
-                                  EXPR_VAR@7093..7094
-                                    NAME@7093..7094
-                                      IDENT@7093..7094 "a"
-                                COMMA@7094..7095 ","
-                                WHITESPACE@7095..7096 " "
-                                ARG@7096..7097
-                                  EXPR_VAR@7096..7097
-                                    NAME@7096..7097
-                                      IDENT@7096..7097 "b"
-                                COMMA@7097..7098 ","
-                                WHITESPACE@7098..7099 " "
-                                ARG@7099..7104
-                                  EXPR_BINARY@7099..7104
-                                    LHS_EXPR@7099..7100
-                                      EXPR_VAR@7099..7100
-                                        NAME@7099..7100
-                                          IDENT@7099..7100 "i"
-                                    WHITESPACE@7100..7101 " "
-                                    PLUS@7101..7102 "+"
-                                    WHITESPACE@7102..7103 " "
-                                    EXPR_NUMBER@7103..7104
-                                      FLOAT@7103..7104 "1"
-                                COMMA@7104..7105 ","
-                                WHITESPACE@7105..7106 " "
-                                ARG@7106..7111
-                                  EXPR_BINARY@7106..7111
-                                    LHS_EXPR@7106..7107
-                                      EXPR_VAR@7106..7107
-                                        NAME@7106..7107
-                                          IDENT@7106..7107 "j"
-                                    WHITESPACE@7107..7108 " "
-                                    PLUS@7108..7109 "+"
-                                    WHITESPACE@7109..7110 " "
-                                    EXPR_NUMBER@7110..7111
-                                      FLOAT@7110..7111 "1"
-                                COMMA@7111..7112 ","
-                                WHITESPACE@7112..7113 " "
-                                ARG@7113..7125
-                                  EXPR_BINARY@7113..7125
-                                    LHS_EXPR@7113..7116
-                                      EXPR_VAR@7113..7116
-                                        NAME@7113..7116
-                                          IDENT@7113..7116 "acc"
-                                    WHITESPACE@7116..7117 " "
-                                    PLUS@7117..7118 "+"
-                                    WHITESPACE@7118..7119 " "
-                                    EXPR_ARRAY@7119..7125
-                                      L_BRACK@7119..7120 "["
-                                      EXPR_INDEX_EXPR@7120..7124
-                                        LHS_EXPR@7120..7121
-                                          EXPR_VAR@7120..7121
-                                            NAME@7120..7121
-                                              IDENT@7120..7121 "a"
-                                        L_BRACK@7121..7122 "["
-                                        EXPR_VAR@7122..7123
-                                          NAME@7122..7123
-                                            IDENT@7122..7123 "i"
-                                        R_BRACK@7123..7124 "]"
-                                      R_BRACK@7124..7125 "]"
-                                R_PAREN@7125..7126 ")"
-                                WHITESPACE@7126..7127 " "
-                                TAILSTRICT_KW@7127..7137 "tailstrict"
-                          WHITESPACE@7137..7146 "\n        "
-                          ELSE_KW@7146..7150 "else"
-                          WHITESPACE@7150..7151 " "
-                          FALSE_EXPR@7151..7289
-                            EXPR_IF_THEN_ELSE@7151..7289
-                              IF_KW@7151..7153 "if"
-                              WHITESPACE@7153..7154 " "
-                              EXPR_BINARY@7154..7161
-                                LHS_EXPR@7154..7156
-                                  EXPR_VAR@7154..7156
-                                    NAME@7154..7156
-                                      IDENT@7154..7156 "ak"
-                                WHITESPACE@7156..7157 " "
-                                LT@7157..7158 "<"
-                                WHITESPACE@7158..7159 " "
-                                EXPR_VAR@7159..7161
-                                  NAME@7159..7161
-                                    IDENT@7159..7161 "bk"
-                              WHITESPACE@7161..7162 " "
-                              THEN_KW@7162..7166 "then"
-                              WHITESPACE@7166..7177 "\n          "
-                              TRUE_EXPR@7177..7221
-                                EXPR_APPLY@7177..7221
-                                  EXPR_VAR@7177..7180
-                                    NAME@7177..7180
-                                      IDENT@7177..7180 "aux"
-                                  ARGS_DESC@7180..7221
-                                    L_PAREN@7180..7181 "("
-                                    ARG@7181..7182
-                                      EXPR_VAR@7181..7182
-                                        NAME@7181..7182
-                                          IDENT@7181..7182 "a"
-                                    COMMA@7182..7183 ","
-                                    WHITESPACE@7183..7184 " "
-                                    ARG@7184..7185
-                                      EXPR_VAR@7184..7185
-                                        NAME@7184..7185
-                                          IDENT@7184..7185 "b"
-                                    COMMA@7185..7186 ","
-                                    WHITESPACE@7186..7187 " "
-                                    ARG@7187..7192
-                                      EXPR_BINARY@7187..7192
-                                        LHS_EXPR@7187..7188
-                                          EXPR_VAR@7187..7188
-                                            NAME@7187..7188
-                                              IDENT@7187..7188 "i"
-                                        WHITESPACE@7188..7189 " "
-                                        PLUS@7189..7190 "+"
-                                        WHITESPACE@7190..7191 " "
-                                        EXPR_NUMBER@7191..7192
-                                          FLOAT@7191..7192 "1"
-                                    COMMA@7192..7193 ","
-                                    WHITESPACE@7193..7194 " "
-                                    ARG@7194..7195
-                                      EXPR_VAR@7194..7195
-                                        NAME@7194..7195
-                                          IDENT@7194..7195 "j"
-                                    COMMA@7195..7196 ","
-                                    WHITESPACE@7196..7197 " "
-                                    ARG@7197..7209
-                                      EXPR_BINARY@7197..7209
-                                        LHS_EXPR@7197..7200
-                                          EXPR_VAR@7197..7200
-                                            NAME@7197..7200
-                                              IDENT@7197..7200 "acc"
-                                        WHITESPACE@7200..7201 " "
-                                        PLUS@7201..7202 "+"
-                                        WHITESPACE@7202..7203 " "
-                                        EXPR_ARRAY@7203..7209
-                                          L_BRACK@7203..7204 "["
-                                          EXPR_INDEX_EXPR@7204..7208
-                                            LHS_EXPR@7204..7205
-                                              EXPR_VAR@7204..7205
-                                                NAME@7204..7205
-                                                  IDENT@7204..7205 "a"
-                                            L_BRACK@7205..7206 "["
-                                            EXPR_VAR@7206..7207
-                                              NAME@7206..7207
-                                                IDENT@7206..7207 "i"
-                                            R_BRACK@7207..7208 "]"
-                                          R_BRACK@7208..7209 "]"
-                                    R_PAREN@7209..7210 ")"
-                                    WHITESPACE@7210..7211 " "
-                                    TAILSTRICT_KW@7211..7221 "tailstrict"
-                              WHITESPACE@7221..7230 "\n        "
-                              ELSE_KW@7230..7234 "else"
-                              WHITESPACE@7234..7245 "\n          "
-                              FALSE_EXPR@7245..7289
-                                EXPR_APPLY@7245..7289
-                                  EXPR_VAR@7245..7248
-                                    NAME@7245..7248
-                                      IDENT@7245..7248 "aux"
-                                  ARGS_DESC@7248..7289
-                                    L_PAREN@7248..7249 "("
-                                    ARG@7249..7250
-                                      EXPR_VAR@7249..7250
-                                        NAME@7249..7250
-                                          IDENT@7249..7250 "a"
-                                    COMMA@7250..7251 ","
-                                    WHITESPACE@7251..7252 " "
-                                    ARG@7252..7253
-                                      EXPR_VAR@7252..7253
-                                        NAME@7252..7253
-                                          IDENT@7252..7253 "b"
-                                    COMMA@7253..7254 ","
-                                    WHITESPACE@7254..7255 " "
-                                    ARG@7255..7256
-                                      EXPR_VAR@7255..7256
-                                        NAME@7255..7256
-                                          IDENT@7255..7256 "i"
-                                    COMMA@7256..7257 ","
-                                    WHITESPACE@7257..7258 " "
-                                    ARG@7258..7263
-                                      EXPR_BINARY@7258..7263
-                                        LHS_EXPR@7258..7259
-                                          EXPR_VAR@7258..7259
-                                            NAME@7258..7259
-                                              IDENT@7258..7259 "j"
-                                        WHITESPACE@7259..7260 " "
-                                        PLUS@7260..7261 "+"
-                                        WHITESPACE@7261..7262 " "
-                                        EXPR_NUMBER@7262..7263
-                                          FLOAT@7262..7263 "1"
-                                    COMMA@7263..7264 ","
-                                    WHITESPACE@7264..7265 " "
-                                    ARG@7265..7277
-                                      EXPR_BINARY@7265..7277
-                                        LHS_EXPR@7265..7268
-                                          EXPR_VAR@7265..7268
-                                            NAME@7265..7268
-                                              IDENT@7265..7268 "acc"
-                                        WHITESPACE@7268..7269 " "
-                                        PLUS@7269..7270 "+"
-                                        WHITESPACE@7270..7271 " "
-                                        EXPR_ARRAY@7271..7277
-                                          L_BRACK@7271..7272 "["
-                                          EXPR_INDEX_EXPR@7272..7276
-                                            LHS_EXPR@7272..7273
-                                              EXPR_VAR@7272..7273
-                                                NAME@7272..7273
-                                                  IDENT@7272..7273 "b"
-                                            L_BRACK@7273..7274 "["
-                                            EXPR_VAR@7274..7275
-                                              NAME@7274..7275
-                                                IDENT@7274..7275 "j"
-                                            R_BRACK@7275..7276 "]"
-                                          R_BRACK@7276..7277 "]"
-                                    R_PAREN@7277..7278 ")"
-                                    WHITESPACE@7278..7279 " "
-                                    TAILSTRICT_KW@7279..7289 "tailstrict"
-          SEMI@7289..7290 ";"
-          WHITESPACE@7290..7295 "\n    "
-          EXPR_APPLY@7295..7314
-            EXPR_VAR@7295..7298
-              NAME@7295..7298
-                IDENT@7295..7298 "aux"
-            ARGS_DESC@7298..7314
-              L_PAREN@7298..7299 "("
-              ARG@7299..7300
-                EXPR_VAR@7299..7300
-                  NAME@7299..7300
-                    IDENT@7299..7300 "a"
-              COMMA@7300..7301 ","
-              WHITESPACE@7301..7302 " "
-              ARG@7302..7303
-                EXPR_VAR@7302..7303
-                  NAME@7302..7303
-                    IDENT@7302..7303 "b"
-              COMMA@7303..7304 ","
-              WHITESPACE@7304..7305 " "
-              ARG@7305..7306
-                EXPR_NUMBER@7305..7306
-                  FLOAT@7305..7306 "0"
-              COMMA@7306..7307 ","
-              WHITESPACE@7307..7308 " "
-              ARG@7308..7309
-                EXPR_NUMBER@7308..7309
-                  FLOAT@7308..7309 "0"
-              COMMA@7309..7310 ","
-              WHITESPACE@7310..7311 " "
-              ARG@7311..7313
-                EXPR_ARRAY@7311..7313
-                  L_BRACK@7311..7312 "["
-                  R_BRACK@7312..7313 "]"
-              R_PAREN@7313..7314 ")"
-      COMMA@7314..7315 ","
-      WHITESPACE@7315..7319 "\n\n  "
-      MEMBER_FIELD_METHOD@7319..7741
-        FIELD_NAME_FIXED@7319..7327
-          NAME@7319..7327
-            IDENT@7319..7327 "setInter"
-        PARAMS_DESC@7327..7342
-          L_PAREN@7327..7328 "("
-          PARAM@7328..7329
-            DESTRUCT_FULL@7328..7329
-              NAME@7328..7329
-                IDENT@7328..7329 "a"
-          COMMA@7329..7330 ","
-          WHITESPACE@7330..7331 " "
-          PARAM@7331..7332
-            DESTRUCT_FULL@7331..7332
-              NAME@7331..7332
-                IDENT@7331..7332 "b"
-          COMMA@7332..7333 ","
-          WHITESPACE@7333..7334 " "
-          PARAM@7334..7341
-            DESTRUCT_FULL@7334..7338
-              NAME@7334..7338
-                IDENT@7334..7338 "keyF"
-            ASSIGN@7338..7339 "="
-            EXPR_VAR@7339..7341
-              NAME@7339..7341
-                IDENT@7339..7341 "id"
-          R_PAREN@7341..7342 ")"
-        COLONCOLON@7342..7344 "::"
-        WHITESPACE@7344..7349 "\n    "
-        EXPR_LOCAL@7349..7741
-          LOCAL_KW@7349..7354 "local"
-          WHITESPACE@7354..7355 " "
-          BIND_FUNCTION@7355..7705
-            NAME@7355..7358
-              IDENT@7355..7358 "aux"
-            PARAMS_DESC@7358..7375
-              L_PAREN@7358..7359 "("
-              PARAM@7359..7360
-                DESTRUCT_FULL@7359..7360
-                  NAME@7359..7360
-                    IDENT@7359..7360 "a"
-              COMMA@7360..7361 ","
-              WHITESPACE@7361..7362 " "
-              PARAM@7362..7363
-                DESTRUCT_FULL@7362..7363
-                  NAME@7362..7363
-                    IDENT@7362..7363 "b"
-              COMMA@7363..7364 ","
-              WHITESPACE@7364..7365 " "
-              PARAM@7365..7366
-                DESTRUCT_FULL@7365..7366
-                  NAME@7365..7366
-                    IDENT@7365..7366 "i"
-              COMMA@7366..7367 ","
-              WHITESPACE@7367..7368 " "
-              PARAM@7368..7369
-                DESTRUCT_FULL@7368..7369
-                  NAME@7368..7369
-                    IDENT@7368..7369 "j"
-              COMMA@7369..7370 ","
-              WHITESPACE@7370..7371 " "
-              PARAM@7371..7374
-                DESTRUCT_FULL@7371..7374
-                  NAME@7371..7374
-                    IDENT@7371..7374 "acc"
-              R_PAREN@7374..7375 ")"
-            WHITESPACE@7375..7376 " "
-            ASSIGN@7376..7377 "="
-            WHITESPACE@7377..7384 "\n      "
-            EXPR_IF_THEN_ELSE@7384..7705
-              IF_KW@7384..7386 "if"
-              WHITESPACE@7386..7387 " "
-              EXPR_BINARY@7387..7427
-                LHS_EXPR@7387..7405
-                  EXPR_BINARY@7387..7405
-                    LHS_EXPR@7387..7388
-                      EXPR_VAR@7387..7388
-                        NAME@7387..7388
-                          IDENT@7387..7388 "i"
-                    WHITESPACE@7388..7389 " "
-                    GE@7389..7391 ">="
-                    WHITESPACE@7391..7392 " "
-                    EXPR_APPLY@7392..7405
-                      EXPR_INDEX@7392..7402
-                        EXPR_VAR@7392..7395
-                          NAME@7392..7395
-                            IDENT@7392..7395 "std"
-                        DOT@7395..7396 "."
-                        NAME@7396..7402
-                          IDENT@7396..7402 "length"
-                      ARGS_DESC@7402..7405
-                        L_PAREN@7402..7403 "("
-                        ARG@7403..7404
-                          EXPR_VAR@7403..7404
-                            NAME@7403..7404
-                              IDENT@7403..7404 "a"
-                        R_PAREN@7404..7405 ")"
-                WHITESPACE@7405..7406 " "
-                OR@7406..7408 "||"
-                WHITESPACE@7408..7409 " "
-                EXPR_BINARY@7409..7427
-                  LHS_EXPR@7409..7410
-                    EXPR_VAR@7409..7410
-                      NAME@7409..7410
-                        IDENT@7409..7410 "j"
-                  WHITESPACE@7410..7411 " "
-                  GE@7411..7413 ">="
-                  WHITESPACE@7413..7414 " "
-                  EXPR_APPLY@7414..7427
-                    EXPR_INDEX@7414..7424
-                      EXPR_VAR@7414..7417
-                        NAME@7414..7417
-                          IDENT@7414..7417 "std"
-                      DOT@7417..7418 "."
-                      NAME@7418..7424
-                        IDENT@7418..7424 "length"
-                    ARGS_DESC@7424..7427
-                      L_PAREN@7424..7425 "("
-                      ARG@7425..7426
-                        EXPR_VAR@7425..7426
-                          NAME@7425..7426
-                            IDENT@7425..7426 "b"
-                      R_PAREN@7426..7427 ")"
-              WHITESPACE@7427..7428 " "
-              THEN_KW@7428..7432 "then"
-              WHITESPACE@7432..7441 "\n        "
-              TRUE_EXPR@7441..7444
-                EXPR_VAR@7441..7444
-                  NAME@7441..7444
-                    IDENT@7441..7444 "acc"
-              WHITESPACE@7444..7451 "\n      "
-              ELSE_KW@7451..7455 "else"
-              WHITESPACE@7455..7464 "\n        "
-              FALSE_EXPR@7464..7705
-                EXPR_IF_THEN_ELSE@7464..7705
-                  IF_KW@7464..7466 "if"
-                  WHITESPACE@7466..7467 " "
-                  EXPR_BINARY@7467..7491
-                    LHS_EXPR@7467..7477
-                      EXPR_APPLY@7467..7477
-                        EXPR_VAR@7467..7471
-                          NAME@7467..7471
-                            IDENT@7467..7471 "keyF"
-                        ARGS_DESC@7471..7477
-                          L_PAREN@7471..7472 "("
-                          ARG@7472..7476
-                            EXPR_INDEX_EXPR@7472..7476
-                              LHS_EXPR@7472..7473
-                                EXPR_VAR@7472..7473
-                                  NAME@7472..7473
-                                    IDENT@7472..7473 "a"
-                              L_BRACK@7473..7474 "["
-                              EXPR_VAR@7474..7475
-                                NAME@7474..7475
-                                  IDENT@7474..7475 "i"
-                              R_BRACK@7475..7476 "]"
-                          R_PAREN@7476..7477 ")"
-                    WHITESPACE@7477..7478 " "
-                    EQ@7478..7480 "=="
-                    WHITESPACE@7480..7481 " "
-                    EXPR_APPLY@7481..7491
-                      EXPR_VAR@7481..7485
-                        NAME@7481..7485
-                          IDENT@7481..7485 "keyF"
-                      ARGS_DESC@7485..7491
-                        L_PAREN@7485..7486 "("
-                        ARG@7486..7490
-                          EXPR_INDEX_EXPR@7486..7490
-                            LHS_EXPR@7486..7487
-                              EXPR_VAR@7486..7487
-                                NAME@7486..7487
-                                  IDENT@7486..7487 "b"
-                            L_BRACK@7487..7488 "["
-                            EXPR_VAR@7488..7489
-                              NAME@7488..7489
-                                IDENT@7488..7489 "j"
-                            R_BRACK@7489..7490 "]"
-                        R_PAREN@7490..7491 ")"
-                  WHITESPACE@7491..7492 " "
-                  THEN_KW@7492..7496 "then"
-                  WHITESPACE@7496..7507 "\n          "
-                  TRUE_EXPR@7507..7555
-                    EXPR_APPLY@7507..7555
-                      EXPR_VAR@7507..7510
-                        NAME@7507..7510
-                          IDENT@7507..7510 "aux"
-                      ARGS_DESC@7510..7555
-                        L_PAREN@7510..7511 "("
-                        ARG@7511..7512
-                          EXPR_VAR@7511..7512
-                            NAME@7511..7512
-                              IDENT@7511..7512 "a"
-                        COMMA@7512..7513 ","
-                        WHITESPACE@7513..7514 " "
-                        ARG@7514..7515
-                          EXPR_VAR@7514..7515
-                            NAME@7514..7515
-                              IDENT@7514..7515 "b"
-                        COMMA@7515..7516 ","
-                        WHITESPACE@7516..7517 " "
-                        ARG@7517..7522
-                          EXPR_BINARY@7517..7522
-                            LHS_EXPR@7517..7518
-                              EXPR_VAR@7517..7518
-                                NAME@7517..7518
-                                  IDENT@7517..7518 "i"
-                            WHITESPACE@7518..7519 " "
-                            PLUS@7519..7520 "+"
-                            WHITESPACE@7520..7521 " "
-                            EXPR_NUMBER@7521..7522
-                              FLOAT@7521..7522 "1"
-                        COMMA@7522..7523 ","
-                        WHITESPACE@7523..7524 " "
-                        ARG@7524..7529
-                          EXPR_BINARY@7524..7529
-                            LHS_EXPR@7524..7525
-                              EXPR_VAR@7524..7525
-                                NAME@7524..7525
-                                  IDENT@7524..7525 "j"
-                            WHITESPACE@7525..7526 " "
-                            PLUS@7526..7527 "+"
-                            WHITESPACE@7527..7528 " "
-                            EXPR_NUMBER@7528..7529
-                              FLOAT@7528..7529 "1"
-                        COMMA@7529..7530 ","
-                        WHITESPACE@7530..7531 " "
-                        ARG@7531..7543
-                          EXPR_BINARY@7531..7543
-                            LHS_EXPR@7531..7534
-                              EXPR_VAR@7531..7534
-                                NAME@7531..7534
-                                  IDENT@7531..7534 "acc"
-                            WHITESPACE@7534..7535 " "
-                            PLUS@7535..7536 "+"
-                            WHITESPACE@7536..7537 " "
-                            EXPR_ARRAY@7537..7543
-                              L_BRACK@7537..7538 "["
-                              EXPR_INDEX_EXPR@7538..7542
-                                LHS_EXPR@7538..7539
-                                  EXPR_VAR@7538..7539
-                                    NAME@7538..7539
-                                      IDENT@7538..7539 "a"
-                                L_BRACK@7539..7540 "["
-                                EXPR_VAR@7540..7541
-                                  NAME@7540..7541
-                                    IDENT@7540..7541 "i"
-                                R_BRACK@7541..7542 "]"
-                              R_BRACK@7542..7543 "]"
-                        R_PAREN@7543..7544 ")"
-                        WHITESPACE@7544..7545 " "
-                        TAILSTRICT_KW@7545..7555 "tailstrict"
-                  WHITESPACE@7555..7564 "\n        "
-                  ELSE_KW@7564..7568 "else"
-                  WHITESPACE@7568..7569 " "
-                  FALSE_EXPR@7569..7705
-                    EXPR_IF_THEN_ELSE@7569..7705
-                      IF_KW@7569..7571 "if"
-                      WHITESPACE@7571..7572 " "
-                      EXPR_BINARY@7572..7595
-                        LHS_EXPR@7572..7582
-                          EXPR_APPLY@7572..7582
-                            EXPR_VAR@7572..7576
-                              NAME@7572..7576
-                                IDENT@7572..7576 "keyF"
-                            ARGS_DESC@7576..7582
-                              L_PAREN@7576..7577 "("
-                              ARG@7577..7581
-                                EXPR_INDEX_EXPR@7577..7581
-                                  LHS_EXPR@7577..7578
-                                    EXPR_VAR@7577..7578
-                                      NAME@7577..7578
-                                        IDENT@7577..7578 "a"
-                                  L_BRACK@7578..7579 "["
-                                  EXPR_VAR@7579..7580
-                                    NAME@7579..7580
-                                      IDENT@7579..7580 "i"
-                                  R_BRACK@7580..7581 "]"
-                              R_PAREN@7581..7582 ")"
-                        WHITESPACE@7582..7583 " "
-                        LT@7583..7584 "<"
-                        WHITESPACE@7584..7585 " "
-                        EXPR_APPLY@7585..7595
-                          EXPR_VAR@7585..7589
-                            NAME@7585..7589
-                              IDENT@7585..7589 "keyF"
-                          ARGS_DESC@7589..7595
-                            L_PAREN@7589..7590 "("
-                            ARG@7590..7594
-                              EXPR_INDEX_EXPR@7590..7594
-                                LHS_EXPR@7590..7591
-                                  EXPR_VAR@7590..7591
-                                    NAME@7590..7591
-                                      IDENT@7590..7591 "b"
-                                L_BRACK@7591..7592 "["
-                                EXPR_VAR@7592..7593
-                                  NAME@7592..7593
-                                    IDENT@7592..7593 "j"
-                                R_BRACK@7593..7594 "]"
-                            R_PAREN@7594..7595 ")"
-                      WHITESPACE@7595..7596 " "
-                      THEN_KW@7596..7600 "then"
-                      WHITESPACE@7600..7611 "\n          "
-                      TRUE_EXPR@7611..7646
-                        EXPR_APPLY@7611..7646
-                          EXPR_VAR@7611..7614
-                            NAME@7611..7614
-                              IDENT@7611..7614 "aux"
-                          ARGS_DESC@7614..7646
-                            L_PAREN@7614..7615 "("
-                            ARG@7615..7616
-                              EXPR_VAR@7615..7616
-                                NAME@7615..7616
-                                  IDENT@7615..7616 "a"
-                            COMMA@7616..7617 ","
-                            WHITESPACE@7617..7618 " "
-                            ARG@7618..7619
-                              EXPR_VAR@7618..7619
-                                NAME@7618..7619
-                                  IDENT@7618..7619 "b"
-                            COMMA@7619..7620 ","
-                            WHITESPACE@7620..7621 " "
-                            ARG@7621..7626
-                              EXPR_BINARY@7621..7626
-                                LHS_EXPR@7621..7622
-                                  EXPR_VAR@7621..7622
-                                    NAME@7621..7622
-                                      IDENT@7621..7622 "i"
-                                WHITESPACE@7622..7623 " "
-                                PLUS@7623..7624 "+"
-                                WHITESPACE@7624..7625 " "
-                                EXPR_NUMBER@7625..7626
-                                  FLOAT@7625..7626 "1"
-                            COMMA@7626..7627 ","
-                            WHITESPACE@7627..7628 " "
-                            ARG@7628..7629
-                              EXPR_VAR@7628..7629
-                                NAME@7628..7629
-                                  IDENT@7628..7629 "j"
-                            COMMA@7629..7630 ","
-                            WHITESPACE@7630..7631 " "
-                            ARG@7631..7634
-                              EXPR_VAR@7631..7634
-                                NAME@7631..7634
-                                  IDENT@7631..7634 "acc"
-                            R_PAREN@7634..7635 ")"
-                            WHITESPACE@7635..7636 " "
-                            TAILSTRICT_KW@7636..7646 "tailstrict"
-                      WHITESPACE@7646..7655 "\n        "
-                      ELSE_KW@7655..7659 "else"
-                      WHITESPACE@7659..7670 "\n          "
-                      FALSE_EXPR@7670..7705
-                        EXPR_APPLY@7670..7705
-                          EXPR_VAR@7670..7673
-                            NAME@7670..7673
-                              IDENT@7670..7673 "aux"
-                          ARGS_DESC@7673..7705
-                            L_PAREN@7673..7674 "("
-                            ARG@7674..7675
-                              EXPR_VAR@7674..7675
-                                NAME@7674..7675
-                                  IDENT@7674..7675 "a"
-                            COMMA@7675..7676 ","
-                            WHITESPACE@7676..7677 " "
-                            ARG@7677..7678
-                              EXPR_VAR@7677..7678
-                                NAME@7677..7678
-                                  IDENT@7677..7678 "b"
-                            COMMA@7678..7679 ","
-                            WHITESPACE@7679..7680 " "
-                            ARG@7680..7681
-                              EXPR_VAR@7680..7681
-                                NAME@7680..7681
-                                  IDENT@7680..7681 "i"
-                            COMMA@7681..7682 ","
-                            WHITESPACE@7682..7683 " "
-                            ARG@7683..7688
-                              EXPR_BINARY@7683..7688
-                                LHS_EXPR@7683..7684
-                                  EXPR_VAR@7683..7684
-                                    NAME@7683..7684
-                                      IDENT@7683..7684 "j"
-                                WHITESPACE@7684..7685 " "
-                                PLUS@7685..7686 "+"
-                                WHITESPACE@7686..7687 " "
-                                EXPR_NUMBER@7687..7688
-                                  FLOAT@7687..7688 "1"
-                            COMMA@7688..7689 ","
-                            WHITESPACE@7689..7690 " "
-                            ARG@7690..7693
-                              EXPR_VAR@7690..7693
-                                NAME@7690..7693
-                                  IDENT@7690..7693 "acc"
-                            R_PAREN@7693..7694 ")"
-                            WHITESPACE@7694..7695 " "
-                            TAILSTRICT_KW@7695..7705 "tailstrict"
-          SEMI@7705..7706 ";"
-          WHITESPACE@7706..7711 "\n    "
-          EXPR_APPLY@7711..7741
-            EXPR_VAR@7711..7714
-              NAME@7711..7714
-                IDENT@7711..7714 "aux"
-            ARGS_DESC@7714..7741
-              L_PAREN@7714..7715 "("
-              ARG@7715..7716
-                EXPR_VAR@7715..7716
-                  NAME@7715..7716
-                    IDENT@7715..7716 "a"
-              COMMA@7716..7717 ","
-              WHITESPACE@7717..7718 " "
-              ARG@7718..7719
-                EXPR_VAR@7718..7719
-                  NAME@7718..7719
-                    IDENT@7718..7719 "b"
-              COMMA@7719..7720 ","
-              WHITESPACE@7720..7721 " "
-              ARG@7721..7722
-                EXPR_NUMBER@7721..7722
-                  FLOAT@7721..7722 "0"
-              COMMA@7722..7723 ","
-              WHITESPACE@7723..7724 " "
-              ARG@7724..7725
-                EXPR_NUMBER@7724..7725
-                  FLOAT@7724..7725 "0"
-              COMMA@7725..7726 ","
-              WHITESPACE@7726..7727 " "
-              ARG@7727..7729
-                EXPR_ARRAY@7727..7729
-                  L_BRACK@7727..7728 "["
-                  R_BRACK@7728..7729 "]"
-              R_PAREN@7729..7730 ")"
-              WHITESPACE@7730..7731 " "
-              TAILSTRICT_KW@7731..7741 "tailstrict"
-      COMMA@7741..7742 ","
-      WHITESPACE@7742..7746 "\n\n  "
-      MEMBER_FIELD_METHOD@7746..8203
-        FIELD_NAME_FIXED@7746..7753
-          NAME@7746..7753
-            IDENT@7746..7753 "setDiff"
-        PARAMS_DESC@7753..7768
-          L_PAREN@7753..7754 "("
-          PARAM@7754..7755
-            DESTRUCT_FULL@7754..7755
-              NAME@7754..7755
-                IDENT@7754..7755 "a"
-          COMMA@7755..7756 ","
-          WHITESPACE@7756..7757 " "
-          PARAM@7757..7758
-            DESTRUCT_FULL@7757..7758
-              NAME@7757..7758
-                IDENT@7757..7758 "b"
-          COMMA@7758..7759 ","
-          WHITESPACE@7759..7760 " "
-          PARAM@7760..7767
-            DESTRUCT_FULL@7760..7764
-              NAME@7760..7764
-                IDENT@7760..7764 "keyF"
-            ASSIGN@7764..7765 "="
-            EXPR_VAR@7765..7767
-              NAME@7765..7767
-                IDENT@7765..7767 "id"
-          R_PAREN@7767..7768 ")"
-        COLONCOLON@7768..7770 "::"
-        WHITESPACE@7770..7775 "\n    "
-        EXPR_LOCAL@7775..8203
-          LOCAL_KW@7775..7780 "local"
-          WHITESPACE@7780..7781 " "
-          BIND_FUNCTION@7781..8167
-            NAME@7781..7784
-              IDENT@7781..7784 "aux"
-            PARAMS_DESC@7784..7801
-              L_PAREN@7784..7785 "("
-              PARAM@7785..7786
-                DESTRUCT_FULL@7785..7786
-                  NAME@7785..7786
-                    IDENT@7785..7786 "a"
-              COMMA@7786..7787 ","
-              WHITESPACE@7787..7788 " "
-              PARAM@7788..7789
-                DESTRUCT_FULL@7788..7789
-                  NAME@7788..7789
-                    IDENT@7788..7789 "b"
-              COMMA@7789..7790 ","
-              WHITESPACE@7790..7791 " "
-              PARAM@7791..7792
-                DESTRUCT_FULL@7791..7792
-                  NAME@7791..7792
-                    IDENT@7791..7792 "i"
-              COMMA@7792..7793 ","
-              WHITESPACE@7793..7794 " "
-              PARAM@7794..7795
-                DESTRUCT_FULL@7794..7795
-                  NAME@7794..7795
-                    IDENT@7794..7795 "j"
-              COMMA@7795..7796 ","
-              WHITESPACE@7796..7797 " "
-              PARAM@7797..7800
-                DESTRUCT_FULL@7797..7800
-                  NAME@7797..7800
-                    IDENT@7797..7800 "acc"
-              R_PAREN@7800..7801 ")"
-            WHITESPACE@7801..7802 " "
-            ASSIGN@7802..7803 "="
-            WHITESPACE@7803..7810 "\n      "
-            EXPR_IF_THEN_ELSE@7810..8167
-              IF_KW@7810..7812 "if"
-              WHITESPACE@7812..7813 " "
-              EXPR_BINARY@7813..7831
-                LHS_EXPR@7813..7814
-                  EXPR_VAR@7813..7814
-                    NAME@7813..7814
-                      IDENT@7813..7814 "i"
-                WHITESPACE@7814..7815 " "
-                GE@7815..7817 ">="
-                WHITESPACE@7817..7818 " "
-                EXPR_APPLY@7818..7831
-                  EXPR_INDEX@7818..7828
-                    EXPR_VAR@7818..7821
-                      NAME@7818..7821
-                        IDENT@7818..7821 "std"
-                    DOT@7821..7822 "."
-                    NAME@7822..7828
-                      IDENT@7822..7828 "length"
-                  ARGS_DESC@7828..7831
-                    L_PAREN@7828..7829 "("
-                    ARG@7829..7830
-                      EXPR_VAR@7829..7830
-                        NAME@7829..7830
-                          IDENT@7829..7830 "a"
-                    R_PAREN@7830..7831 ")"
-              WHITESPACE@7831..7832 " "
-              THEN_KW@7832..7836 "then"
-              WHITESPACE@7836..7845 "\n        "
-              TRUE_EXPR@7845..7848
-                EXPR_VAR@7845..7848
-                  NAME@7845..7848
-                    IDENT@7845..7848 "acc"
-              WHITESPACE@7848..7855 "\n      "
-              ELSE_KW@7855..7859 "else"
-              WHITESPACE@7859..7860 " "
-              FALSE_EXPR@7860..8167
-                EXPR_IF_THEN_ELSE@7860..8167
-                  IF_KW@7860..7862 "if"
-                  WHITESPACE@7862..7863 " "
-                  EXPR_BINARY@7863..7881
-                    LHS_EXPR@7863..7864
-                      EXPR_VAR@7863..7864
-                        NAME@7863..7864
-                          IDENT@7863..7864 "j"
-                    WHITESPACE@7864..7865 " "
-                    GE@7865..7867 ">="
-                    WHITESPACE@7867..7868 " "
-                    EXPR_APPLY@7868..7881
-                      EXPR_INDEX@7868..7878
-                        EXPR_VAR@7868..7871
-                          NAME@7868..7871
-                            IDENT@7868..7871 "std"
-                        DOT@7871..7872 "."
-                        NAME@7872..7878
-                          IDENT@7872..7878 "length"
-                      ARGS_DESC@7878..7881
-                        L_PAREN@7878..7879 "("
-                        ARG@7879..7880
-                          EXPR_VAR@7879..7880
-                            NAME@7879..7880
-                              IDENT@7879..7880 "b"
-                        R_PAREN@7880..7881 ")"
-                  WHITESPACE@7881..7882 " "
-                  THEN_KW@7882..7886 "then"
-                  WHITESPACE@7886..7895 "\n        "
-                  TRUE_EXPR@7895..7906
-                    EXPR_BINARY@7895..7906
-                      LHS_EXPR@7895..7898
-                        EXPR_VAR@7895..7898
-                          NAME@7895..7898
-                            IDENT@7895..7898 "acc"
-                      WHITESPACE@7898..7899 " "
-                      PLUS@7899..7900 "+"
-                      WHITESPACE@7900..7901 " "
-                      EXPR_SLICE@7901..7906
-                        EXPR_VAR@7901..7902
-                          NAME@7901..7902
-                            IDENT@7901..7902 "a"
-                        SLICE_DESC@7902..7906
-                          L_BRACK@7902..7903 "["
-                          EXPR_VAR@7903..7904
-                            NAME@7903..7904
-                              IDENT@7903..7904 "i"
-                          COLON@7904..7905 ":"
-                          R_BRACK@7905..7906 "]"
-                  WHITESPACE@7906..7913 "\n      "
-                  ELSE_KW@7913..7917 "else"
-                  WHITESPACE@7917..7926 "\n        "
-                  FALSE_EXPR@7926..8167
-                    EXPR_IF_THEN_ELSE@7926..8167
-                      IF_KW@7926..7928 "if"
-                      WHITESPACE@7928..7929 " "
-                      EXPR_BINARY@7929..7953
-                        LHS_EXPR@7929..7939
-                          EXPR_APPLY@7929..7939
-                            EXPR_VAR@7929..7933
-                              NAME@7929..7933
-                                IDENT@7929..7933 "keyF"
-                            ARGS_DESC@7933..7939
-                              L_PAREN@7933..7934 "("
-                              ARG@7934..7938
-                                EXPR_INDEX_EXPR@7934..7938
-                                  LHS_EXPR@7934..7935
-                                    EXPR_VAR@7934..7935
-                                      NAME@7934..7935
-                                        IDENT@7934..7935 "a"
-                                  L_BRACK@7935..7936 "["
-                                  EXPR_VAR@7936..7937
-                                    NAME@7936..7937
-                                      IDENT@7936..7937 "i"
-                                  R_BRACK@7937..7938 "]"
-                              R_PAREN@7938..7939 ")"
-                        WHITESPACE@7939..7940 " "
-                        EQ@7940..7942 "=="
-                        WHITESPACE@7942..7943 " "
-                        EXPR_APPLY@7943..7953
-                          EXPR_VAR@7943..7947
-                            NAME@7943..7947
-                              IDENT@7943..7947 "keyF"
-                          ARGS_DESC@7947..7953
-                            L_PAREN@7947..7948 "("
-                            ARG@7948..7952
-                              EXPR_INDEX_EXPR@7948..7952
-                                LHS_EXPR@7948..7949
-                                  EXPR_VAR@7948..7949
-                                    NAME@7948..7949
-                                      IDENT@7948..7949 "b"
-                                L_BRACK@7949..7950 "["
-                                EXPR_VAR@7950..7951
-                                  NAME@7950..7951
-                                    IDENT@7950..7951 "j"
-                                R_BRACK@7951..7952 "]"
-                            R_PAREN@7952..7953 ")"
-                      WHITESPACE@7953..7954 " "
-                      THEN_KW@7954..7958 "then"
-                      WHITESPACE@7958..7969 "\n          "
-                      TRUE_EXPR@7969..8008
-                        EXPR_APPLY@7969..8008
-                          EXPR_VAR@7969..7972
-                            NAME@7969..7972
-                              IDENT@7969..7972 "aux"
-                          ARGS_DESC@7972..8008
-                            L_PAREN@7972..7973 "("
-                            ARG@7973..7974
-                              EXPR_VAR@7973..7974
-                                NAME@7973..7974
-                                  IDENT@7973..7974 "a"
-                            COMMA@7974..7975 ","
-                            WHITESPACE@7975..7976 " "
-                            ARG@7976..7977
-                              EXPR_VAR@7976..7977
-                                NAME@7976..7977
-                                  IDENT@7976..7977 "b"
-                            COMMA@7977..7978 ","
-                            WHITESPACE@7978..7979 " "
-                            ARG@7979..7984
-                              EXPR_BINARY@7979..7984
-                                LHS_EXPR@7979..7980
-                                  EXPR_VAR@7979..7980
-                                    NAME@7979..7980
-                                      IDENT@7979..7980 "i"
-                                WHITESPACE@7980..7981 " "
-                                PLUS@7981..7982 "+"
-                                WHITESPACE@7982..7983 " "
-                                EXPR_NUMBER@7983..7984
-                                  FLOAT@7983..7984 "1"
-                            COMMA@7984..7985 ","
-                            WHITESPACE@7985..7986 " "
-                            ARG@7986..7991
-                              EXPR_BINARY@7986..7991
-                                LHS_EXPR@7986..7987
-                                  EXPR_VAR@7986..7987
-                                    NAME@7986..7987
-                                      IDENT@7986..7987 "j"
-                                WHITESPACE@7987..7988 " "
-                                PLUS@7988..7989 "+"
-                                WHITESPACE@7989..7990 " "
-                                EXPR_NUMBER@7990..7991
-                                  FLOAT@7990..7991 "1"
-                            COMMA@7991..7992 ","
-                            WHITESPACE@7992..7993 " "
-                            ARG@7993..7996
-                              EXPR_VAR@7993..7996
-                                NAME@7993..7996
-                                  IDENT@7993..7996 "acc"
-                            R_PAREN@7996..7997 ")"
-                            WHITESPACE@7997..7998 " "
-                            TAILSTRICT_KW@7998..8008 "tailstrict"
-                      WHITESPACE@8008..8017 "\n        "
-                      ELSE_KW@8017..8021 "else"
-                      WHITESPACE@8021..8022 " "
-                      FALSE_EXPR@8022..8167
-                        EXPR_IF_THEN_ELSE@8022..8167
-                          IF_KW@8022..8024 "if"
-                          WHITESPACE@8024..8025 " "
-                          EXPR_BINARY@8025..8048
-                            LHS_EXPR@8025..8035
-                              EXPR_APPLY@8025..8035
-                                EXPR_VAR@8025..8029
-                                  NAME@8025..8029
-                                    IDENT@8025..8029 "keyF"
-                                ARGS_DESC@8029..8035
-                                  L_PAREN@8029..8030 "("
-                                  ARG@8030..8034
-                                    EXPR_INDEX_EXPR@8030..8034
-                                      LHS_EXPR@8030..8031
-                                        EXPR_VAR@8030..8031
-                                          NAME@8030..8031
-                                            IDENT@8030..8031 "a"
-                                      L_BRACK@8031..8032 "["
-                                      EXPR_VAR@8032..8033
-                                        NAME@8032..8033
-                                          IDENT@8032..8033 "i"
-                                      R_BRACK@8033..8034 "]"
-                                  R_PAREN@8034..8035 ")"
-                            WHITESPACE@8035..8036 " "
-                            LT@8036..8037 "<"
-                            WHITESPACE@8037..8038 " "
-                            EXPR_APPLY@8038..8048
-                              EXPR_VAR@8038..8042
-                                NAME@8038..8042
-                                  IDENT@8038..8042 "keyF"
-                              ARGS_DESC@8042..8048
-                                L_PAREN@8042..8043 "("
-                                ARG@8043..8047
-                                  EXPR_INDEX_EXPR@8043..8047
-                                    LHS_EXPR@8043..8044
-                                      EXPR_VAR@8043..8044
-                                        NAME@8043..8044
-                                          IDENT@8043..8044 "b"
-                                    L_BRACK@8044..8045 "["
-                                    EXPR_VAR@8045..8046
-                                      NAME@8045..8046
-                                        IDENT@8045..8046 "j"
-                                    R_BRACK@8046..8047 "]"
-                                R_PAREN@8047..8048 ")"
-                          WHITESPACE@8048..8049 " "
-                          THEN_KW@8049..8053 "then"
-                          WHITESPACE@8053..8064 "\n          "
-                          TRUE_EXPR@8064..8108
-                            EXPR_APPLY@8064..8108
-                              EXPR_VAR@8064..8067
-                                NAME@8064..8067
-                                  IDENT@8064..8067 "aux"
-                              ARGS_DESC@8067..8108
-                                L_PAREN@8067..8068 "("
-                                ARG@8068..8069
-                                  EXPR_VAR@8068..8069
-                                    NAME@8068..8069
-                                      IDENT@8068..8069 "a"
-                                COMMA@8069..8070 ","
-                                WHITESPACE@8070..8071 " "
-                                ARG@8071..8072
-                                  EXPR_VAR@8071..8072
-                                    NAME@8071..8072
-                                      IDENT@8071..8072 "b"
-                                COMMA@8072..8073 ","
-                                WHITESPACE@8073..8074 " "
-                                ARG@8074..8079
-                                  EXPR_BINARY@8074..8079
-                                    LHS_EXPR@8074..8075
-                                      EXPR_VAR@8074..8075
-                                        NAME@8074..8075
-                                          IDENT@8074..8075 "i"
-                                    WHITESPACE@8075..8076 " "
-                                    PLUS@8076..8077 "+"
-                                    WHITESPACE@8077..8078 " "
-                                    EXPR_NUMBER@8078..8079
-                                      FLOAT@8078..8079 "1"
-                                COMMA@8079..8080 ","
-                                WHITESPACE@8080..8081 " "
-                                ARG@8081..8082
-                                  EXPR_VAR@8081..8082
-                                    NAME@8081..8082
-                                      IDENT@8081..8082 "j"
-                                COMMA@8082..8083 ","
-                                WHITESPACE@8083..8084 " "
-                                ARG@8084..8096
-                                  EXPR_BINARY@8084..8096
-                                    LHS_EXPR@8084..8087
-                                      EXPR_VAR@8084..8087
-                                        NAME@8084..8087
-                                          IDENT@8084..8087 "acc"
-                                    WHITESPACE@8087..8088 " "
-                                    PLUS@8088..8089 "+"
-                                    WHITESPACE@8089..8090 " "
-                                    EXPR_ARRAY@8090..8096
-                                      L_BRACK@8090..8091 "["
-                                      EXPR_INDEX_EXPR@8091..8095
-                                        LHS_EXPR@8091..8092
-                                          EXPR_VAR@8091..8092
-                                            NAME@8091..8092
-                                              IDENT@8091..8092 "a"
-                                        L_BRACK@8092..8093 "["
-                                        EXPR_VAR@8093..8094
-                                          NAME@8093..8094
-                                            IDENT@8093..8094 "i"
-                                        R_BRACK@8094..8095 "]"
-                                      R_BRACK@8095..8096 "]"
-                                R_PAREN@8096..8097 ")"
-                                WHITESPACE@8097..8098 " "
-                                TAILSTRICT_KW@8098..8108 "tailstrict"
-                          WHITESPACE@8108..8117 "\n        "
-                          ELSE_KW@8117..8121 "else"
-                          WHITESPACE@8121..8132 "\n          "
-                          FALSE_EXPR@8132..8167
-                            EXPR_APPLY@8132..8167
-                              EXPR_VAR@8132..8135
-                                NAME@8132..8135
-                                  IDENT@8132..8135 "aux"
-                              ARGS_DESC@8135..8167
-                                L_PAREN@8135..8136 "("
-                                ARG@8136..8137
-                                  EXPR_VAR@8136..8137
-                                    NAME@8136..8137
-                                      IDENT@8136..8137 "a"
-                                COMMA@8137..8138 ","
-                                WHITESPACE@8138..8139 " "
-                                ARG@8139..8140
-                                  EXPR_VAR@8139..8140
-                                    NAME@8139..8140
-                                      IDENT@8139..8140 "b"
-                                COMMA@8140..8141 ","
-                                WHITESPACE@8141..8142 " "
-                                ARG@8142..8143
-                                  EXPR_VAR@8142..8143
-                                    NAME@8142..8143
-                                      IDENT@8142..8143 "i"
-                                COMMA@8143..8144 ","
-                                WHITESPACE@8144..8145 " "
-                                ARG@8145..8150
-                                  EXPR_BINARY@8145..8150
-                                    LHS_EXPR@8145..8146
-                                      EXPR_VAR@8145..8146
-                                        NAME@8145..8146
-                                          IDENT@8145..8146 "j"
-                                    WHITESPACE@8146..8147 " "
-                                    PLUS@8147..8148 "+"
-                                    WHITESPACE@8148..8149 " "
-                                    EXPR_NUMBER@8149..8150
-                                      FLOAT@8149..8150 "1"
-                                COMMA@8150..8151 ","
-                                WHITESPACE@8151..8152 " "
-                                ARG@8152..8155
-                                  EXPR_VAR@8152..8155
-                                    NAME@8152..8155
-                                      IDENT@8152..8155 "acc"
-                                R_PAREN@8155..8156 ")"
-                                WHITESPACE@8156..8157 " "
-                                TAILSTRICT_KW@8157..8167 "tailstrict"
-          SEMI@8167..8168 ";"
-          WHITESPACE@8168..8173 "\n    "
-          EXPR_APPLY@8173..8203
-            EXPR_VAR@8173..8176
-              NAME@8173..8176
-                IDENT@8173..8176 "aux"
-            ARGS_DESC@8176..8203
-              L_PAREN@8176..8177 "("
-              ARG@8177..8178
-                EXPR_VAR@8177..8178
-                  NAME@8177..8178
-                    IDENT@8177..8178 "a"
-              COMMA@8178..8179 ","
-              WHITESPACE@8179..8180 " "
-              ARG@8180..8181
-                EXPR_VAR@8180..8181
-                  NAME@8180..8181
-                    IDENT@8180..8181 "b"
-              COMMA@8181..8182 ","
-              WHITESPACE@8182..8183 " "
-              ARG@8183..8184
-                EXPR_NUMBER@8183..8184
-                  FLOAT@8183..8184 "0"
-              COMMA@8184..8185 ","
-              WHITESPACE@8185..8186 " "
-              ARG@8186..8187
-                EXPR_NUMBER@8186..8187
-                  FLOAT@8186..8187 "0"
-              COMMA@8187..8188 ","
-              WHITESPACE@8188..8189 " "
-              ARG@8189..8191
-                EXPR_ARRAY@8189..8191
-                  L_BRACK@8189..8190 "["
-                  R_BRACK@8190..8191 "]"
-              R_PAREN@8191..8192 ")"
-              WHITESPACE@8192..8193 " "
-              TAILSTRICT_KW@8193..8203 "tailstrict"
-      COMMA@8203..8204 ","
-      WHITESPACE@8204..8208 "\n\n  "
-      MEMBER_FIELD_METHOD@8208..8996
-        FIELD_NAME_FIXED@8208..8218
-          NAME@8208..8218
-            IDENT@8208..8218 "mergePatch"
-        PARAMS_DESC@8218..8233
-          L_PAREN@8218..8219 "("
-          PARAM@8219..8225
-            DESTRUCT_FULL@8219..8225
-              NAME@8219..8225
-                IDENT@8219..8225 "target"
-          COMMA@8225..8226 ","
-          WHITESPACE@8226..8227 " "
-          PARAM@8227..8232
-            DESTRUCT_FULL@8227..8232
-              NAME@8227..8232
-                IDENT@8227..8232 "patch"
-          R_PAREN@8232..8233 ")"
-        COLONCOLON@8233..8235 "::"
-        WHITESPACE@8235..8240 "\n    "
-        EXPR_IF_THEN_ELSE@8240..8996
-          IF_KW@8240..8242 "if"
+      MEMBER_FIELD_METHOD@6350..6899
+        FIELD_NAME_FIXED@6350..6358
+          NAME@6350..6358
+            IDENT@6350..6358 "setUnion"
+        PARAMS_DESC@6358..6373
+          L_PAREN@6358..6359 "("
+          PARAM@6359..6360
+            DESTRUCT_FULL@6359..6360
+              NAME@6359..6360
+                IDENT@6359..6360 "a"
+          COMMA@6360..6361 ","
+          WHITESPACE@6361..6362 " "
+          PARAM@6362..6363
+            DESTRUCT_FULL@6362..6363
+              NAME@6362..6363
+                IDENT@6362..6363 "b"
+          COMMA@6363..6364 ","
+          WHITESPACE@6364..6365 " "
+          PARAM@6365..6372
+            DESTRUCT_FULL@6365..6369
+              NAME@6365..6369
+                IDENT@6365..6369 "keyF"
+            ASSIGN@6369..6370 "="
+            EXPR_VAR@6370..6372
+              NAME@6370..6372
+                IDENT@6370..6372 "id"
+          R_PAREN@6372..6373 ")"
+        COLONCOLON@6373..6375 "::"
+        WHITESPACE@6375..6380 "\n    "
+        SINGLE_LINE_SLASH_COMMENT@6380..6422 "// NOTE: order matter ..."
+        WHITESPACE@6422..6426 "    "
+        STMT_LOCAL@6426..6875
+          LOCAL_KW@6426..6431 "local"
+          WHITESPACE@6431..6432 " "
+          BIND_FUNCTION@6432..6874
+            NAME@6432..6435
+              IDENT@6432..6435 "aux"
+            PARAMS_DESC@6435..6452
+              L_PAREN@6435..6436 "("
+              PARAM@6436..6437
+                DESTRUCT_FULL@6436..6437
+                  NAME@6436..6437
+                    IDENT@6436..6437 "a"
+              COMMA@6437..6438 ","
+              WHITESPACE@6438..6439 " "
+              PARAM@6439..6440
+                DESTRUCT_FULL@6439..6440
+                  NAME@6439..6440
+                    IDENT@6439..6440 "b"
+              COMMA@6440..6441 ","
+              WHITESPACE@6441..6442 " "
+              PARAM@6442..6443
+                DESTRUCT_FULL@6442..6443
+                  NAME@6442..6443
+                    IDENT@6442..6443 "i"
+              COMMA@6443..6444 ","
+              WHITESPACE@6444..6445 " "
+              PARAM@6445..6446
+                DESTRUCT_FULL@6445..6446
+                  NAME@6445..6446
+                    IDENT@6445..6446 "j"
+              COMMA@6446..6447 ","
+              WHITESPACE@6447..6448 " "
+              PARAM@6448..6451
+                DESTRUCT_FULL@6448..6451
+                  NAME@6448..6451
+                    IDENT@6448..6451 "acc"
+              R_PAREN@6451..6452 ")"
+            WHITESPACE@6452..6453 " "
+            ASSIGN@6453..6454 "="
+            WHITESPACE@6454..6461 "\n      "
+            EXPR_IF_THEN_ELSE@6461..6874
+              IF_KW@6461..6463 "if"
+              WHITESPACE@6463..6464 " "
+              EXPR_BINARY@6464..6482
+                LHS_EXPR@6464..6465
+                  EXPR_VAR@6464..6465
+                    NAME@6464..6465
+                      IDENT@6464..6465 "i"
+                WHITESPACE@6465..6466 " "
+                GE@6466..6468 ">="
+                WHITESPACE@6468..6469 " "
+                EXPR_APPLY@6469..6482
+                  EXPR_INDEX@6469..6479
+                    EXPR_VAR@6469..6472
+                      NAME@6469..6472
+                        IDENT@6469..6472 "std"
+                    DOT@6472..6473 "."
+                    NAME@6473..6479
+                      IDENT@6473..6479 "length"
+                  ARGS_DESC@6479..6482
+                    L_PAREN@6479..6480 "("
+                    ARG@6480..6481
+                      EXPR_VAR@6480..6481
+                        NAME@6480..6481
+                          IDENT@6480..6481 "a"
+                    R_PAREN@6481..6482 ")"
+              WHITESPACE@6482..6483 " "
+              THEN_KW@6483..6487 "then"
+              WHITESPACE@6487..6496 "\n        "
+              TRUE_EXPR@6496..6507
+                EXPR_BINARY@6496..6507
+                  LHS_EXPR@6496..6499
+                    EXPR_VAR@6496..6499
+                      NAME@6496..6499
+                        IDENT@6496..6499 "acc"
+                  WHITESPACE@6499..6500 " "
+                  PLUS@6500..6501 "+"
+                  WHITESPACE@6501..6502 " "
+                  EXPR_SLICE@6502..6507
+                    EXPR_VAR@6502..6503
+                      NAME@6502..6503
+                        IDENT@6502..6503 "b"
+                    SLICE_DESC@6503..6507
+                      L_BRACK@6503..6504 "["
+                      EXPR_VAR@6504..6505
+                        NAME@6504..6505
+                          IDENT@6504..6505 "j"
+                      COLON@6505..6506 ":"
+                      R_BRACK@6506..6507 "]"
+              WHITESPACE@6507..6514 "\n      "
+              ELSE_KW@6514..6518 "else"
+              WHITESPACE@6518..6519 " "
+              FALSE_EXPR@6519..6874
+                EXPR_IF_THEN_ELSE@6519..6874
+                  IF_KW@6519..6521 "if"
+                  WHITESPACE@6521..6522 " "
+                  EXPR_BINARY@6522..6540
+                    LHS_EXPR@6522..6523
+                      EXPR_VAR@6522..6523
+                        NAME@6522..6523
+                          IDENT@6522..6523 "j"
+                    WHITESPACE@6523..6524 " "
+                    GE@6524..6526 ">="
+                    WHITESPACE@6526..6527 " "
+                    EXPR_APPLY@6527..6540
+                      EXPR_INDEX@6527..6537
+                        EXPR_VAR@6527..6530
+                          NAME@6527..6530
+                            IDENT@6527..6530 "std"
+                        DOT@6530..6531 "."
+                        NAME@6531..6537
+                          IDENT@6531..6537 "length"
+                      ARGS_DESC@6537..6540
+                        L_PAREN@6537..6538 "("
+                        ARG@6538..6539
+                          EXPR_VAR@6538..6539
+                            NAME@6538..6539
+                              IDENT@6538..6539 "b"
+                        R_PAREN@6539..6540 ")"
+                  WHITESPACE@6540..6541 " "
+                  THEN_KW@6541..6545 "then"
+                  WHITESPACE@6545..6554 "\n        "
+                  TRUE_EXPR@6554..6565
+                    EXPR_BINARY@6554..6565
+                      LHS_EXPR@6554..6557
+                        EXPR_VAR@6554..6557
+                          NAME@6554..6557
+                            IDENT@6554..6557 "acc"
+                      WHITESPACE@6557..6558 " "
+                      PLUS@6558..6559 "+"
+                      WHITESPACE@6559..6560 " "
+                      EXPR_SLICE@6560..6565
+                        EXPR_VAR@6560..6561
+                          NAME@6560..6561
+                            IDENT@6560..6561 "a"
+                        SLICE_DESC@6561..6565
+                          L_BRACK@6561..6562 "["
+                          EXPR_VAR@6562..6563
+                            NAME@6562..6563
+                              IDENT@6562..6563 "i"
+                          COLON@6563..6564 ":"
+                          R_BRACK@6564..6565 "]"
+                  WHITESPACE@6565..6572 "\n      "
+                  ELSE_KW@6572..6576 "else"
+                  WHITESPACE@6576..6585 "\n        "
+                  STMT_LOCAL@6585..6607
+                    LOCAL_KW@6585..6590 "local"
+                    WHITESPACE@6590..6591 " "
+                    BIND_DESTRUCT@6591..6606
+                      DESTRUCT_FULL@6591..6593
+                        NAME@6591..6593
+                          IDENT@6591..6593 "ak"
+                      WHITESPACE@6593..6594 " "
+                      ASSIGN@6594..6595 "="
+                      WHITESPACE@6595..6596 " "
+                      EXPR_APPLY@6596..6606
+                        EXPR_VAR@6596..6600
+                          NAME@6596..6600
+                            IDENT@6596..6600 "keyF"
+                        ARGS_DESC@6600..6606
+                          L_PAREN@6600..6601 "("
+                          ARG@6601..6605
+                            EXPR_INDEX_EXPR@6601..6605
+                              LHS_EXPR@6601..6602
+                                EXPR_VAR@6601..6602
+                                  NAME@6601..6602
+                                    IDENT@6601..6602 "a"
+                              L_BRACK@6602..6603 "["
+                              EXPR_VAR@6603..6604
+                                NAME@6603..6604
+                                  IDENT@6603..6604 "i"
+                              R_BRACK@6604..6605 "]"
+                          R_PAREN@6605..6606 ")"
+                    SEMI@6606..6607 ";"
+                  WHITESPACE@6607..6616 "\n        "
+                  STMT_LOCAL@6616..6638
+                    LOCAL_KW@6616..6621 "local"
+                    WHITESPACE@6621..6622 " "
+                    BIND_DESTRUCT@6622..6637
+                      DESTRUCT_FULL@6622..6624
+                        NAME@6622..6624
+                          IDENT@6622..6624 "bk"
+                      WHITESPACE@6624..6625 " "
+                      ASSIGN@6625..6626 "="
+                      WHITESPACE@6626..6627 " "
+                      EXPR_APPLY@6627..6637
+                        EXPR_VAR@6627..6631
+                          NAME@6627..6631
+                            IDENT@6627..6631 "keyF"
+                        ARGS_DESC@6631..6637
+                          L_PAREN@6631..6632 "("
+                          ARG@6632..6636
+                            EXPR_INDEX_EXPR@6632..6636
+                              LHS_EXPR@6632..6633
+                                EXPR_VAR@6632..6633
+                                  NAME@6632..6633
+                                    IDENT@6632..6633 "b"
+                              L_BRACK@6633..6634 "["
+                              EXPR_VAR@6634..6635
+                                NAME@6634..6635
+                                  IDENT@6634..6635 "j"
+                              R_BRACK@6635..6636 "]"
+                          R_PAREN@6636..6637 ")"
+                    SEMI@6637..6638 ";"
+                  WHITESPACE@6638..6647 "\n        "
+                  FALSE_EXPR@6647..6874
+                    EXPR_IF_THEN_ELSE@6647..6874
+                      IF_KW@6647..6649 "if"
+                      WHITESPACE@6649..6650 " "
+                      EXPR_BINARY@6650..6658
+                        LHS_EXPR@6650..6652
+                          EXPR_VAR@6650..6652
+                            NAME@6650..6652
+                              IDENT@6650..6652 "ak"
+                        WHITESPACE@6652..6653 " "
+                        EQ@6653..6655 "=="
+                        WHITESPACE@6655..6656 " "
+                        EXPR_VAR@6656..6658
+                          NAME@6656..6658
+                            IDENT@6656..6658 "bk"
+                      WHITESPACE@6658..6659 " "
+                      THEN_KW@6659..6663 "then"
+                      WHITESPACE@6663..6674 "\n          "
+                      TRUE_EXPR@6674..6722
+                        EXPR_APPLY@6674..6722
+                          EXPR_VAR@6674..6677
+                            NAME@6674..6677
+                              IDENT@6674..6677 "aux"
+                          ARGS_DESC@6677..6722
+                            L_PAREN@6677..6678 "("
+                            ARG@6678..6679
+                              EXPR_VAR@6678..6679
+                                NAME@6678..6679
+                                  IDENT@6678..6679 "a"
+                            COMMA@6679..6680 ","
+                            WHITESPACE@6680..6681 " "
+                            ARG@6681..6682
+                              EXPR_VAR@6681..6682
+                                NAME@6681..6682
+                                  IDENT@6681..6682 "b"
+                            COMMA@6682..6683 ","
+                            WHITESPACE@6683..6684 " "
+                            ARG@6684..6689
+                              EXPR_BINARY@6684..6689
+                                LHS_EXPR@6684..6685
+                                  EXPR_VAR@6684..6685
+                                    NAME@6684..6685
+                                      IDENT@6684..6685 "i"
+                                WHITESPACE@6685..6686 " "
+                                PLUS@6686..6687 "+"
+                                WHITESPACE@6687..6688 " "
+                                EXPR_NUMBER@6688..6689
+                                  FLOAT@6688..6689 "1"
+                            COMMA@6689..6690 ","
+                            WHITESPACE@6690..6691 " "
+                            ARG@6691..6696
+                              EXPR_BINARY@6691..6696
+                                LHS_EXPR@6691..6692
+                                  EXPR_VAR@6691..6692
+                                    NAME@6691..6692
+                                      IDENT@6691..6692 "j"
+                                WHITESPACE@6692..6693 " "
+                                PLUS@6693..6694 "+"
+                                WHITESPACE@6694..6695 " "
+                                EXPR_NUMBER@6695..6696
+                                  FLOAT@6695..6696 "1"
+                            COMMA@6696..6697 ","
+                            WHITESPACE@6697..6698 " "
+                            ARG@6698..6710
+                              EXPR_BINARY@6698..6710
+                                LHS_EXPR@6698..6701
+                                  EXPR_VAR@6698..6701
+                                    NAME@6698..6701
+                                      IDENT@6698..6701 "acc"
+                                WHITESPACE@6701..6702 " "
+                                PLUS@6702..6703 "+"
+                                WHITESPACE@6703..6704 " "
+                                EXPR_ARRAY@6704..6710
+                                  L_BRACK@6704..6705 "["
+                                  EXPR_INDEX_EXPR@6705..6709
+                                    LHS_EXPR@6705..6706
+                                      EXPR_VAR@6705..6706
+                                        NAME@6705..6706
+                                          IDENT@6705..6706 "a"
+                                    L_BRACK@6706..6707 "["
+                                    EXPR_VAR@6707..6708
+                                      NAME@6707..6708
+                                        IDENT@6707..6708 "i"
+                                    R_BRACK@6708..6709 "]"
+                                  R_BRACK@6709..6710 "]"
+                            R_PAREN@6710..6711 ")"
+                            WHITESPACE@6711..6712 " "
+                            TAILSTRICT_KW@6712..6722 "tailstrict"
+                      WHITESPACE@6722..6731 "\n        "
+                      ELSE_KW@6731..6735 "else"
+                      WHITESPACE@6735..6736 " "
+                      FALSE_EXPR@6736..6874
+                        EXPR_IF_THEN_ELSE@6736..6874
+                          IF_KW@6736..6738 "if"
+                          WHITESPACE@6738..6739 " "
+                          EXPR_BINARY@6739..6746
+                            LHS_EXPR@6739..6741
+                              EXPR_VAR@6739..6741
+                                NAME@6739..6741
+                                  IDENT@6739..6741 "ak"
+                            WHITESPACE@6741..6742 " "
+                            LT@6742..6743 "<"
+                            WHITESPACE@6743..6744 " "
+                            EXPR_VAR@6744..6746
+                              NAME@6744..6746
+                                IDENT@6744..6746 "bk"
+                          WHITESPACE@6746..6747 " "
+                          THEN_KW@6747..6751 "then"
+                          WHITESPACE@6751..6762 "\n          "
+                          TRUE_EXPR@6762..6806
+                            EXPR_APPLY@6762..6806
+                              EXPR_VAR@6762..6765
+                                NAME@6762..6765
+                                  IDENT@6762..6765 "aux"
+                              ARGS_DESC@6765..6806
+                                L_PAREN@6765..6766 "("
+                                ARG@6766..6767
+                                  EXPR_VAR@6766..6767
+                                    NAME@6766..6767
+                                      IDENT@6766..6767 "a"
+                                COMMA@6767..6768 ","
+                                WHITESPACE@6768..6769 " "
+                                ARG@6769..6770
+                                  EXPR_VAR@6769..6770
+                                    NAME@6769..6770
+                                      IDENT@6769..6770 "b"
+                                COMMA@6770..6771 ","
+                                WHITESPACE@6771..6772 " "
+                                ARG@6772..6777
+                                  EXPR_BINARY@6772..6777
+                                    LHS_EXPR@6772..6773
+                                      EXPR_VAR@6772..6773
+                                        NAME@6772..6773
+                                          IDENT@6772..6773 "i"
+                                    WHITESPACE@6773..6774 " "
+                                    PLUS@6774..6775 "+"
+                                    WHITESPACE@6775..6776 " "
+                                    EXPR_NUMBER@6776..6777
+                                      FLOAT@6776..6777 "1"
+                                COMMA@6777..6778 ","
+                                WHITESPACE@6778..6779 " "
+                                ARG@6779..6780
+                                  EXPR_VAR@6779..6780
+                                    NAME@6779..6780
+                                      IDENT@6779..6780 "j"
+                                COMMA@6780..6781 ","
+                                WHITESPACE@6781..6782 " "
+                                ARG@6782..6794
+                                  EXPR_BINARY@6782..6794
+                                    LHS_EXPR@6782..6785
+                                      EXPR_VAR@6782..6785
+                                        NAME@6782..6785
+                                          IDENT@6782..6785 "acc"
+                                    WHITESPACE@6785..6786 " "
+                                    PLUS@6786..6787 "+"
+                                    WHITESPACE@6787..6788 " "
+                                    EXPR_ARRAY@6788..6794
+                                      L_BRACK@6788..6789 "["
+                                      EXPR_INDEX_EXPR@6789..6793
+                                        LHS_EXPR@6789..6790
+                                          EXPR_VAR@6789..6790
+                                            NAME@6789..6790
+                                              IDENT@6789..6790 "a"
+                                        L_BRACK@6790..6791 "["
+                                        EXPR_VAR@6791..6792
+                                          NAME@6791..6792
+                                            IDENT@6791..6792 "i"
+                                        R_BRACK@6792..6793 "]"
+                                      R_BRACK@6793..6794 "]"
+                                R_PAREN@6794..6795 ")"
+                                WHITESPACE@6795..6796 " "
+                                TAILSTRICT_KW@6796..6806 "tailstrict"
+                          WHITESPACE@6806..6815 "\n        "
+                          ELSE_KW@6815..6819 "else"
+                          WHITESPACE@6819..6830 "\n          "
+                          FALSE_EXPR@6830..6874
+                            EXPR_APPLY@6830..6874
+                              EXPR_VAR@6830..6833
+                                NAME@6830..6833
+                                  IDENT@6830..6833 "aux"
+                              ARGS_DESC@6833..6874
+                                L_PAREN@6833..6834 "("
+                                ARG@6834..6835
+                                  EXPR_VAR@6834..6835
+                                    NAME@6834..6835
+                                      IDENT@6834..6835 "a"
+                                COMMA@6835..6836 ","
+                                WHITESPACE@6836..6837 " "
+                                ARG@6837..6838
+                                  EXPR_VAR@6837..6838
+                                    NAME@6837..6838
+                                      IDENT@6837..6838 "b"
+                                COMMA@6838..6839 ","
+                                WHITESPACE@6839..6840 " "
+                                ARG@6840..6841
+                                  EXPR_VAR@6840..6841
+                                    NAME@6840..6841
+                                      IDENT@6840..6841 "i"
+                                COMMA@6841..6842 ","
+                                WHITESPACE@6842..6843 " "
+                                ARG@6843..6848
+                                  EXPR_BINARY@6843..6848
+                                    LHS_EXPR@6843..6844
+                                      EXPR_VAR@6843..6844
+                                        NAME@6843..6844
+                                          IDENT@6843..6844 "j"
+                                    WHITESPACE@6844..6845 " "
+                                    PLUS@6845..6846 "+"
+                                    WHITESPACE@6846..6847 " "
+                                    EXPR_NUMBER@6847..6848
+                                      FLOAT@6847..6848 "1"
+                                COMMA@6848..6849 ","
+                                WHITESPACE@6849..6850 " "
+                                ARG@6850..6862
+                                  EXPR_BINARY@6850..6862
+                                    LHS_EXPR@6850..6853
+                                      EXPR_VAR@6850..6853
+                                        NAME@6850..6853
+                                          IDENT@6850..6853 "acc"
+                                    WHITESPACE@6853..6854 " "
+                                    PLUS@6854..6855 "+"
+                                    WHITESPACE@6855..6856 " "
+                                    EXPR_ARRAY@6856..6862
+                                      L_BRACK@6856..6857 "["
+                                      EXPR_INDEX_EXPR@6857..6861
+                                        LHS_EXPR@6857..6858
+                                          EXPR_VAR@6857..6858
+                                            NAME@6857..6858
+                                              IDENT@6857..6858 "b"
+                                        L_BRACK@6858..6859 "["
+                                        EXPR_VAR@6859..6860
+                                          NAME@6859..6860
+                                            IDENT@6859..6860 "j"
+                                        R_BRACK@6860..6861 "]"
+                                      R_BRACK@6861..6862 "]"
+                                R_PAREN@6862..6863 ")"
+                                WHITESPACE@6863..6864 " "
+                                TAILSTRICT_KW@6864..6874 "tailstrict"
+          SEMI@6874..6875 ";"
+        WHITESPACE@6875..6880 "\n    "
+        EXPR_APPLY@6880..6899
+          EXPR_VAR@6880..6883
+            NAME@6880..6883
+              IDENT@6880..6883 "aux"
+          ARGS_DESC@6883..6899
+            L_PAREN@6883..6884 "("
+            ARG@6884..6885
+              EXPR_VAR@6884..6885
+                NAME@6884..6885
+                  IDENT@6884..6885 "a"
+            COMMA@6885..6886 ","
+            WHITESPACE@6886..6887 " "
+            ARG@6887..6888
+              EXPR_VAR@6887..6888
+                NAME@6887..6888
+                  IDENT@6887..6888 "b"
+            COMMA@6888..6889 ","
+            WHITESPACE@6889..6890 " "
+            ARG@6890..6891
+              EXPR_NUMBER@6890..6891
+                FLOAT@6890..6891 "0"
+            COMMA@6891..6892 ","
+            WHITESPACE@6892..6893 " "
+            ARG@6893..6894
+              EXPR_NUMBER@6893..6894
+                FLOAT@6893..6894 "0"
+            COMMA@6894..6895 ","
+            WHITESPACE@6895..6896 " "
+            ARG@6896..6898
+              EXPR_ARRAY@6896..6898
+                L_BRACK@6896..6897 "["
+                R_BRACK@6897..6898 "]"
+            R_PAREN@6898..6899 ")"
+      COMMA@6899..6900 ","
+      WHITESPACE@6900..6904 "\n\n  "
+      MEMBER_FIELD_METHOD@6904..7361
+        FIELD_NAME_FIXED@6904..6911
+          NAME@6904..6911
+            IDENT@6904..6911 "setDiff"
+        PARAMS_DESC@6911..6926
+          L_PAREN@6911..6912 "("
+          PARAM@6912..6913
+            DESTRUCT_FULL@6912..6913
+              NAME@6912..6913
+                IDENT@6912..6913 "a"
+          COMMA@6913..6914 ","
+          WHITESPACE@6914..6915 " "
+          PARAM@6915..6916
+            DESTRUCT_FULL@6915..6916
+              NAME@6915..6916
+                IDENT@6915..6916 "b"
+          COMMA@6916..6917 ","
+          WHITESPACE@6917..6918 " "
+          PARAM@6918..6925
+            DESTRUCT_FULL@6918..6922
+              NAME@6918..6922
+                IDENT@6918..6922 "keyF"
+            ASSIGN@6922..6923 "="
+            EXPR_VAR@6923..6925
+              NAME@6923..6925
+                IDENT@6923..6925 "id"
+          R_PAREN@6925..6926 ")"
+        COLONCOLON@6926..6928 "::"
+        WHITESPACE@6928..6933 "\n    "
+        STMT_LOCAL@6933..7326
+          LOCAL_KW@6933..6938 "local"
+          WHITESPACE@6938..6939 " "
+          BIND_FUNCTION@6939..7325
+            NAME@6939..6942
+              IDENT@6939..6942 "aux"
+            PARAMS_DESC@6942..6959
+              L_PAREN@6942..6943 "("
+              PARAM@6943..6944
+                DESTRUCT_FULL@6943..6944
+                  NAME@6943..6944
+                    IDENT@6943..6944 "a"
+              COMMA@6944..6945 ","
+              WHITESPACE@6945..6946 " "
+              PARAM@6946..6947
+                DESTRUCT_FULL@6946..6947
+                  NAME@6946..6947
+                    IDENT@6946..6947 "b"
+              COMMA@6947..6948 ","
+              WHITESPACE@6948..6949 " "
+              PARAM@6949..6950
+                DESTRUCT_FULL@6949..6950
+                  NAME@6949..6950
+                    IDENT@6949..6950 "i"
+              COMMA@6950..6951 ","
+              WHITESPACE@6951..6952 " "
+              PARAM@6952..6953
+                DESTRUCT_FULL@6952..6953
+                  NAME@6952..6953
+                    IDENT@6952..6953 "j"
+              COMMA@6953..6954 ","
+              WHITESPACE@6954..6955 " "
+              PARAM@6955..6958
+                DESTRUCT_FULL@6955..6958
+                  NAME@6955..6958
+                    IDENT@6955..6958 "acc"
+              R_PAREN@6958..6959 ")"
+            WHITESPACE@6959..6960 " "
+            ASSIGN@6960..6961 "="
+            WHITESPACE@6961..6968 "\n      "
+            EXPR_IF_THEN_ELSE@6968..7325
+              IF_KW@6968..6970 "if"
+              WHITESPACE@6970..6971 " "
+              EXPR_BINARY@6971..6989
+                LHS_EXPR@6971..6972
+                  EXPR_VAR@6971..6972
+                    NAME@6971..6972
+                      IDENT@6971..6972 "i"
+                WHITESPACE@6972..6973 " "
+                GE@6973..6975 ">="
+                WHITESPACE@6975..6976 " "
+                EXPR_APPLY@6976..6989
+                  EXPR_INDEX@6976..6986
+                    EXPR_VAR@6976..6979
+                      NAME@6976..6979
+                        IDENT@6976..6979 "std"
+                    DOT@6979..6980 "."
+                    NAME@6980..6986
+                      IDENT@6980..6986 "length"
+                  ARGS_DESC@6986..6989
+                    L_PAREN@6986..6987 "("
+                    ARG@6987..6988
+                      EXPR_VAR@6987..6988
+                        NAME@6987..6988
+                          IDENT@6987..6988 "a"
+                    R_PAREN@6988..6989 ")"
+              WHITESPACE@6989..6990 " "
+              THEN_KW@6990..6994 "then"
+              WHITESPACE@6994..7003 "\n        "
+              TRUE_EXPR@7003..7006
+                EXPR_VAR@7003..7006
+                  NAME@7003..7006
+                    IDENT@7003..7006 "acc"
+              WHITESPACE@7006..7013 "\n      "
+              ELSE_KW@7013..7017 "else"
+              WHITESPACE@7017..7018 " "
+              FALSE_EXPR@7018..7325
+                EXPR_IF_THEN_ELSE@7018..7325
+                  IF_KW@7018..7020 "if"
+                  WHITESPACE@7020..7021 " "
+                  EXPR_BINARY@7021..7039
+                    LHS_EXPR@7021..7022
+                      EXPR_VAR@7021..7022
+                        NAME@7021..7022
+                          IDENT@7021..7022 "j"
+                    WHITESPACE@7022..7023 " "
+                    GE@7023..7025 ">="
+                    WHITESPACE@7025..7026 " "
+                    EXPR_APPLY@7026..7039
+                      EXPR_INDEX@7026..7036
+                        EXPR_VAR@7026..7029
+                          NAME@7026..7029
+                            IDENT@7026..7029 "std"
+                        DOT@7029..7030 "."
+                        NAME@7030..7036
+                          IDENT@7030..7036 "length"
+                      ARGS_DESC@7036..7039
+                        L_PAREN@7036..7037 "("
+                        ARG@7037..7038
+                          EXPR_VAR@7037..7038
+                            NAME@7037..7038
+                              IDENT@7037..7038 "b"
+                        R_PAREN@7038..7039 ")"
+                  WHITESPACE@7039..7040 " "
+                  THEN_KW@7040..7044 "then"
+                  WHITESPACE@7044..7053 "\n        "
+                  TRUE_EXPR@7053..7064
+                    EXPR_BINARY@7053..7064
+                      LHS_EXPR@7053..7056
+                        EXPR_VAR@7053..7056
+                          NAME@7053..7056
+                            IDENT@7053..7056 "acc"
+                      WHITESPACE@7056..7057 " "
+                      PLUS@7057..7058 "+"
+                      WHITESPACE@7058..7059 " "
+                      EXPR_SLICE@7059..7064
+                        EXPR_VAR@7059..7060
+                          NAME@7059..7060
+                            IDENT@7059..7060 "a"
+                        SLICE_DESC@7060..7064
+                          L_BRACK@7060..7061 "["
+                          EXPR_VAR@7061..7062
+                            NAME@7061..7062
+                              IDENT@7061..7062 "i"
+                          COLON@7062..7063 ":"
+                          R_BRACK@7063..7064 "]"
+                  WHITESPACE@7064..7071 "\n      "
+                  ELSE_KW@7071..7075 "else"
+                  WHITESPACE@7075..7084 "\n        "
+                  FALSE_EXPR@7084..7325
+                    EXPR_IF_THEN_ELSE@7084..7325
+                      IF_KW@7084..7086 "if"
+                      WHITESPACE@7086..7087 " "
+                      EXPR_BINARY@7087..7111
+                        LHS_EXPR@7087..7097
+                          EXPR_APPLY@7087..7097
+                            EXPR_VAR@7087..7091
+                              NAME@7087..7091
+                                IDENT@7087..7091 "keyF"
+                            ARGS_DESC@7091..7097
+                              L_PAREN@7091..7092 "("
+                              ARG@7092..7096
+                                EXPR_INDEX_EXPR@7092..7096
+                                  LHS_EXPR@7092..7093
+                                    EXPR_VAR@7092..7093
+                                      NAME@7092..7093
+                                        IDENT@7092..7093 "a"
+                                  L_BRACK@7093..7094 "["
+                                  EXPR_VAR@7094..7095
+                                    NAME@7094..7095
+                                      IDENT@7094..7095 "i"
+                                  R_BRACK@7095..7096 "]"
+                              R_PAREN@7096..7097 ")"
+                        WHITESPACE@7097..7098 " "
+                        EQ@7098..7100 "=="
+                        WHITESPACE@7100..7101 " "
+                        EXPR_APPLY@7101..7111
+                          EXPR_VAR@7101..7105
+                            NAME@7101..7105
+                              IDENT@7101..7105 "keyF"
+                          ARGS_DESC@7105..7111
+                            L_PAREN@7105..7106 "("
+                            ARG@7106..7110
+                              EXPR_INDEX_EXPR@7106..7110
+                                LHS_EXPR@7106..7107
+                                  EXPR_VAR@7106..7107
+                                    NAME@7106..7107
+                                      IDENT@7106..7107 "b"
+                                L_BRACK@7107..7108 "["
+                                EXPR_VAR@7108..7109
+                                  NAME@7108..7109
+                                    IDENT@7108..7109 "j"
+                                R_BRACK@7109..7110 "]"
+                            R_PAREN@7110..7111 ")"
+                      WHITESPACE@7111..7112 " "
+                      THEN_KW@7112..7116 "then"
+                      WHITESPACE@7116..7127 "\n          "
+                      TRUE_EXPR@7127..7166
+                        EXPR_APPLY@7127..7166
+                          EXPR_VAR@7127..7130
+                            NAME@7127..7130
+                              IDENT@7127..7130 "aux"
+                          ARGS_DESC@7130..7166
+                            L_PAREN@7130..7131 "("
+                            ARG@7131..7132
+                              EXPR_VAR@7131..7132
+                                NAME@7131..7132
+                                  IDENT@7131..7132 "a"
+                            COMMA@7132..7133 ","
+                            WHITESPACE@7133..7134 " "
+                            ARG@7134..7135
+                              EXPR_VAR@7134..7135
+                                NAME@7134..7135
+                                  IDENT@7134..7135 "b"
+                            COMMA@7135..7136 ","
+                            WHITESPACE@7136..7137 " "
+                            ARG@7137..7142
+                              EXPR_BINARY@7137..7142
+                                LHS_EXPR@7137..7138
+                                  EXPR_VAR@7137..7138
+                                    NAME@7137..7138
+                                      IDENT@7137..7138 "i"
+                                WHITESPACE@7138..7139 " "
+                                PLUS@7139..7140 "+"
+                                WHITESPACE@7140..7141 " "
+                                EXPR_NUMBER@7141..7142
+                                  FLOAT@7141..7142 "1"
+                            COMMA@7142..7143 ","
+                            WHITESPACE@7143..7144 " "
+                            ARG@7144..7149
+                              EXPR_BINARY@7144..7149
+                                LHS_EXPR@7144..7145
+                                  EXPR_VAR@7144..7145
+                                    NAME@7144..7145
+                                      IDENT@7144..7145 "j"
+                                WHITESPACE@7145..7146 " "
+                                PLUS@7146..7147 "+"
+                                WHITESPACE@7147..7148 " "
+                                EXPR_NUMBER@7148..7149
+                                  FLOAT@7148..7149 "1"
+                            COMMA@7149..7150 ","
+                            WHITESPACE@7150..7151 " "
+                            ARG@7151..7154
+                              EXPR_VAR@7151..7154
+                                NAME@7151..7154
+                                  IDENT@7151..7154 "acc"
+                            R_PAREN@7154..7155 ")"
+                            WHITESPACE@7155..7156 " "
+                            TAILSTRICT_KW@7156..7166 "tailstrict"
+                      WHITESPACE@7166..7175 "\n        "
+                      ELSE_KW@7175..7179 "else"
+                      WHITESPACE@7179..7180 " "
+                      FALSE_EXPR@7180..7325
+                        EXPR_IF_THEN_ELSE@7180..7325
+                          IF_KW@7180..7182 "if"
+                          WHITESPACE@7182..7183 " "
+                          EXPR_BINARY@7183..7206
+                            LHS_EXPR@7183..7193
+                              EXPR_APPLY@7183..7193
+                                EXPR_VAR@7183..7187
+                                  NAME@7183..7187
+                                    IDENT@7183..7187 "keyF"
+                                ARGS_DESC@7187..7193
+                                  L_PAREN@7187..7188 "("
+                                  ARG@7188..7192
+                                    EXPR_INDEX_EXPR@7188..7192
+                                      LHS_EXPR@7188..7189
+                                        EXPR_VAR@7188..7189
+                                          NAME@7188..7189
+                                            IDENT@7188..7189 "a"
+                                      L_BRACK@7189..7190 "["
+                                      EXPR_VAR@7190..7191
+                                        NAME@7190..7191
+                                          IDENT@7190..7191 "i"
+                                      R_BRACK@7191..7192 "]"
+                                  R_PAREN@7192..7193 ")"
+                            WHITESPACE@7193..7194 " "
+                            LT@7194..7195 "<"
+                            WHITESPACE@7195..7196 " "
+                            EXPR_APPLY@7196..7206
+                              EXPR_VAR@7196..7200
+                                NAME@7196..7200
+                                  IDENT@7196..7200 "keyF"
+                              ARGS_DESC@7200..7206
+                                L_PAREN@7200..7201 "("
+                                ARG@7201..7205
+                                  EXPR_INDEX_EXPR@7201..7205
+                                    LHS_EXPR@7201..7202
+                                      EXPR_VAR@7201..7202
+                                        NAME@7201..7202
+                                          IDENT@7201..7202 "b"
+                                    L_BRACK@7202..7203 "["
+                                    EXPR_VAR@7203..7204
+                                      NAME@7203..7204
+                                        IDENT@7203..7204 "j"
+                                    R_BRACK@7204..7205 "]"
+                                R_PAREN@7205..7206 ")"
+                          WHITESPACE@7206..7207 " "
+                          THEN_KW@7207..7211 "then"
+                          WHITESPACE@7211..7222 "\n          "
+                          TRUE_EXPR@7222..7266
+                            EXPR_APPLY@7222..7266
+                              EXPR_VAR@7222..7225
+                                NAME@7222..7225
+                                  IDENT@7222..7225 "aux"
+                              ARGS_DESC@7225..7266
+                                L_PAREN@7225..7226 "("
+                                ARG@7226..7227
+                                  EXPR_VAR@7226..7227
+                                    NAME@7226..7227
+                                      IDENT@7226..7227 "a"
+                                COMMA@7227..7228 ","
+                                WHITESPACE@7228..7229 " "
+                                ARG@7229..7230
+                                  EXPR_VAR@7229..7230
+                                    NAME@7229..7230
+                                      IDENT@7229..7230 "b"
+                                COMMA@7230..7231 ","
+                                WHITESPACE@7231..7232 " "
+                                ARG@7232..7237
+                                  EXPR_BINARY@7232..7237
+                                    LHS_EXPR@7232..7233
+                                      EXPR_VAR@7232..7233
+                                        NAME@7232..7233
+                                          IDENT@7232..7233 "i"
+                                    WHITESPACE@7233..7234 " "
+                                    PLUS@7234..7235 "+"
+                                    WHITESPACE@7235..7236 " "
+                                    EXPR_NUMBER@7236..7237
+                                      FLOAT@7236..7237 "1"
+                                COMMA@7237..7238 ","
+                                WHITESPACE@7238..7239 " "
+                                ARG@7239..7240
+                                  EXPR_VAR@7239..7240
+                                    NAME@7239..7240
+                                      IDENT@7239..7240 "j"
+                                COMMA@7240..7241 ","
+                                WHITESPACE@7241..7242 " "
+                                ARG@7242..7254
+                                  EXPR_BINARY@7242..7254
+                                    LHS_EXPR@7242..7245
+                                      EXPR_VAR@7242..7245
+                                        NAME@7242..7245
+                                          IDENT@7242..7245 "acc"
+                                    WHITESPACE@7245..7246 " "
+                                    PLUS@7246..7247 "+"
+                                    WHITESPACE@7247..7248 " "
+                                    EXPR_ARRAY@7248..7254
+                                      L_BRACK@7248..7249 "["
+                                      EXPR_INDEX_EXPR@7249..7253
+                                        LHS_EXPR@7249..7250
+                                          EXPR_VAR@7249..7250
+                                            NAME@7249..7250
+                                              IDENT@7249..7250 "a"
+                                        L_BRACK@7250..7251 "["
+                                        EXPR_VAR@7251..7252
+                                          NAME@7251..7252
+                                            IDENT@7251..7252 "i"
+                                        R_BRACK@7252..7253 "]"
+                                      R_BRACK@7253..7254 "]"
+                                R_PAREN@7254..7255 ")"
+                                WHITESPACE@7255..7256 " "
+                                TAILSTRICT_KW@7256..7266 "tailstrict"
+                          WHITESPACE@7266..7275 "\n        "
+                          ELSE_KW@7275..7279 "else"
+                          WHITESPACE@7279..7290 "\n          "
+                          FALSE_EXPR@7290..7325
+                            EXPR_APPLY@7290..7325
+                              EXPR_VAR@7290..7293
+                                NAME@7290..7293
+                                  IDENT@7290..7293 "aux"
+                              ARGS_DESC@7293..7325
+                                L_PAREN@7293..7294 "("
+                                ARG@7294..7295
+                                  EXPR_VAR@7294..7295
+                                    NAME@7294..7295
+                                      IDENT@7294..7295 "a"
+                                COMMA@7295..7296 ","
+                                WHITESPACE@7296..7297 " "
+                                ARG@7297..7298
+                                  EXPR_VAR@7297..7298
+                                    NAME@7297..7298
+                                      IDENT@7297..7298 "b"
+                                COMMA@7298..7299 ","
+                                WHITESPACE@7299..7300 " "
+                                ARG@7300..7301
+                                  EXPR_VAR@7300..7301
+                                    NAME@7300..7301
+                                      IDENT@7300..7301 "i"
+                                COMMA@7301..7302 ","
+                                WHITESPACE@7302..7303 " "
+                                ARG@7303..7308
+                                  EXPR_BINARY@7303..7308
+                                    LHS_EXPR@7303..7304
+                                      EXPR_VAR@7303..7304
+                                        NAME@7303..7304
+                                          IDENT@7303..7304 "j"
+                                    WHITESPACE@7304..7305 " "
+                                    PLUS@7305..7306 "+"
+                                    WHITESPACE@7306..7307 " "
+                                    EXPR_NUMBER@7307..7308
+                                      FLOAT@7307..7308 "1"
+                                COMMA@7308..7309 ","
+                                WHITESPACE@7309..7310 " "
+                                ARG@7310..7313
+                                  EXPR_VAR@7310..7313
+                                    NAME@7310..7313
+                                      IDENT@7310..7313 "acc"
+                                R_PAREN@7313..7314 ")"
+                                WHITESPACE@7314..7315 " "
+                                TAILSTRICT_KW@7315..7325 "tailstrict"
+          SEMI@7325..7326 ";"
+        WHITESPACE@7326..7331 "\n    "
+        EXPR_APPLY@7331..7361
+          EXPR_VAR@7331..7334
+            NAME@7331..7334
+              IDENT@7331..7334 "aux"
+          ARGS_DESC@7334..7361
+            L_PAREN@7334..7335 "("
+            ARG@7335..7336
+              EXPR_VAR@7335..7336
+                NAME@7335..7336
+                  IDENT@7335..7336 "a"
+            COMMA@7336..7337 ","
+            WHITESPACE@7337..7338 " "
+            ARG@7338..7339
+              EXPR_VAR@7338..7339
+                NAME@7338..7339
+                  IDENT@7338..7339 "b"
+            COMMA@7339..7340 ","
+            WHITESPACE@7340..7341 " "
+            ARG@7341..7342
+              EXPR_NUMBER@7341..7342
+                FLOAT@7341..7342 "0"
+            COMMA@7342..7343 ","
+            WHITESPACE@7343..7344 " "
+            ARG@7344..7345
+              EXPR_NUMBER@7344..7345
+                FLOAT@7344..7345 "0"
+            COMMA@7345..7346 ","
+            WHITESPACE@7346..7347 " "
+            ARG@7347..7349
+              EXPR_ARRAY@7347..7349
+                L_BRACK@7347..7348 "["
+                R_BRACK@7348..7349 "]"
+            R_PAREN@7349..7350 ")"
+            WHITESPACE@7350..7351 " "
+            TAILSTRICT_KW@7351..7361 "tailstrict"
+      COMMA@7361..7362 ","
+      WHITESPACE@7362..7366 "\n\n  "
+      MEMBER_FIELD_METHOD@7366..8154
+        FIELD_NAME_FIXED@7366..7376
+          NAME@7366..7376
+            IDENT@7366..7376 "mergePatch"
+        PARAMS_DESC@7376..7391
+          L_PAREN@7376..7377 "("
+          PARAM@7377..7383
+            DESTRUCT_FULL@7377..7383
+              NAME@7377..7383
+                IDENT@7377..7383 "target"
+          COMMA@7383..7384 ","
+          WHITESPACE@7384..7385 " "
+          PARAM@7385..7390
+            DESTRUCT_FULL@7385..7390
+              NAME@7385..7390
+                IDENT@7385..7390 "patch"
+          R_PAREN@7390..7391 ")"
+        COLONCOLON@7391..7393 "::"
+        WHITESPACE@7393..7398 "\n    "
+        EXPR_IF_THEN_ELSE@7398..8154
+          IF_KW@7398..7400 "if"
+          WHITESPACE@7400..7401 " "
+          EXPR_APPLY@7401..7420
+            EXPR_INDEX@7401..7413
+              EXPR_VAR@7401..7404
+                NAME@7401..7404
+                  IDENT@7401..7404 "std"
+              DOT@7404..7405 "."
+              NAME@7405..7413
+                IDENT@7405..7413 "isObject"
+            ARGS_DESC@7413..7420
+              L_PAREN@7413..7414 "("
+              ARG@7414..7419
+                EXPR_VAR@7414..7419
+                  NAME@7414..7419
+                    IDENT@7414..7419 "patch"
+              R_PAREN@7419..7420 ")"
+          WHITESPACE@7420..7421 " "
+          THEN_KW@7421..7425 "then"
+          WHITESPACE@7425..7432 "\n      "
+          STMT_LOCAL@7432..7506
+            LOCAL_KW@7432..7437 "local"
+            WHITESPACE@7437..7438 " "
+            BIND_DESTRUCT@7438..7505
+              DESTRUCT_FULL@7438..7451
+                NAME@7438..7451
+                  IDENT@7438..7451 "target_object"
+              WHITESPACE@7451..7452 " "
+              ASSIGN@7452..7453 "="
+              WHITESPACE@7453..7462 "\n        "
+              EXPR_IF_THEN_ELSE@7462..7505
+                IF_KW@7462..7464 "if"
+                WHITESPACE@7464..7465 " "
+                EXPR_APPLY@7465..7485
+                  EXPR_INDEX@7465..7477
+                    EXPR_VAR@7465..7468
+                      NAME@7465..7468
+                        IDENT@7465..7468 "std"
+                    DOT@7468..7469 "."
+                    NAME@7469..7477
+                      IDENT@7469..7477 "isObject"
+                  ARGS_DESC@7477..7485
+                    L_PAREN@7477..7478 "("
+                    ARG@7478..7484
+                      EXPR_VAR@7478..7484
+                        NAME@7478..7484
+                          IDENT@7478..7484 "target"
+                    R_PAREN@7484..7485 ")"
+                WHITESPACE@7485..7486 " "
+                THEN_KW@7486..7490 "then"
+                WHITESPACE@7490..7491 " "
+                TRUE_EXPR@7491..7497
+                  EXPR_VAR@7491..7497
+                    NAME@7491..7497
+                      IDENT@7491..7497 "target"
+                WHITESPACE@7497..7498 " "
+                ELSE_KW@7498..7502 "else"
+                WHITESPACE@7502..7503 " "
+                FALSE_EXPR@7503..7505
+                  EXPR_OBJECT@7503..7505
+                    OBJ_BODY_MEMBER_LIST@7503..7505
+                      L_BRACE@7503..7504 "{"
+                      R_BRACE@7504..7505 "}"
+            SEMI@7505..7506 ";"
+          WHITESPACE@7506..7514 "\n\n      "
+          STMT_LOCAL@7514..7620
+            LOCAL_KW@7514..7519 "local"
+            WHITESPACE@7519..7520 " "
+            BIND_DESTRUCT@7520..7619
+              DESTRUCT_FULL@7520..7533
+                NAME@7520..7533
+                  IDENT@7520..7533 "target_fields"
+              WHITESPACE@7533..7534 " "
+              ASSIGN@7534..7535 "="
+              WHITESPACE@7535..7544 "\n        "
+              EXPR_IF_THEN_ELSE@7544..7619
+                IF_KW@7544..7546 "if"
+                WHITESPACE@7546..7547 " "
+                EXPR_APPLY@7547..7574
+                  EXPR_INDEX@7547..7559
+                    EXPR_VAR@7547..7550
+                      NAME@7547..7550
+                        IDENT@7547..7550 "std"
+                    DOT@7550..7551 "."
+                    NAME@7551..7559
+                      IDENT@7551..7559 "isObject"
+                  ARGS_DESC@7559..7574
+                    L_PAREN@7559..7560 "("
+                    ARG@7560..7573
+                      EXPR_VAR@7560..7573
+                        NAME@7560..7573
+                          IDENT@7560..7573 "target_object"
+                    R_PAREN@7573..7574 ")"
+                WHITESPACE@7574..7575 " "
+                THEN_KW@7575..7579 "then"
+                WHITESPACE@7579..7580 " "
+                TRUE_EXPR@7580..7611
+                  EXPR_APPLY@7580..7611
+                    EXPR_INDEX@7580..7596
+                      EXPR_VAR@7580..7583
+                        NAME@7580..7583
+                          IDENT@7580..7583 "std"
+                      DOT@7583..7584 "."
+                      NAME@7584..7596
+                        IDENT@7584..7596 "objectFields"
+                    ARGS_DESC@7596..7611
+                      L_PAREN@7596..7597 "("
+                      ARG@7597..7610
+                        EXPR_VAR@7597..7610
+                          NAME@7597..7610
+                            IDENT@7597..7610 "target_object"
+                      R_PAREN@7610..7611 ")"
+                WHITESPACE@7611..7612 " "
+                ELSE_KW@7612..7616 "else"
+                WHITESPACE@7616..7617 " "
+                FALSE_EXPR@7617..7619
+                  EXPR_ARRAY@7617..7619
+                    L_BRACK@7617..7618 "["
+                    R_BRACK@7618..7619 "]"
+            SEMI@7619..7620 ";"
+          WHITESPACE@7620..7628 "\n\n      "
+          STMT_LOCAL@7628..7705
+            LOCAL_KW@7628..7633 "local"
+            WHITESPACE@7633..7634 " "
+            BIND_DESTRUCT@7634..7704
+              DESTRUCT_FULL@7634..7645
+                NAME@7634..7645
+                  IDENT@7634..7645 "null_fields"
+              WHITESPACE@7645..7646 " "
+              ASSIGN@7646..7647 "="
+              WHITESPACE@7647..7648 " "
+              EXPR_ARRAY_COMP@7648..7704
+                L_BRACK@7648..7649 "["
+                EXPR_VAR@7649..7650
+                  NAME@7649..7650
+                    IDENT@7649..7650 "k"
+                WHITESPACE@7650..7651 " "
+                FOR_SPEC@7651..7683
+                  FOR_KW@7651..7654 "for"
+                  WHITESPACE@7654..7655 " "
+                  NAME@7655..7656
+                    IDENT@7655..7656 "k"
+                  WHITESPACE@7656..7657 " "
+                  IN_KW@7657..7659 "in"
+                  WHITESPACE@7659..7660 " "
+                  EXPR_APPLY@7660..7683
+                    EXPR_INDEX@7660..7676
+                      EXPR_VAR@7660..7663
+                        NAME@7660..7663
+                          IDENT@7660..7663 "std"
+                      DOT@7663..7664 "."
+                      NAME@7664..7676
+                        IDENT@7664..7676 "objectFields"
+                    ARGS_DESC@7676..7683
+                      L_PAREN@7676..7677 "("
+                      ARG@7677..7682
+                        EXPR_VAR@7677..7682
+                          NAME@7677..7682
+                            IDENT@7677..7682 "patch"
+                      R_PAREN@7682..7683 ")"
+                WHITESPACE@7683..7684 " "
+                IF_SPEC@7684..7703
+                  IF_KW@7684..7686 "if"
+                  WHITESPACE@7686..7687 " "
+                  EXPR_BINARY@7687..7703
+                    LHS_EXPR@7687..7695
+                      EXPR_INDEX_EXPR@7687..7695
+                        LHS_EXPR@7687..7692
+                          EXPR_VAR@7687..7692
+                            NAME@7687..7692
+                              IDENT@7687..7692 "patch"
+                        L_BRACK@7692..7693 "["
+                        EXPR_VAR@7693..7694
+                          NAME@7693..7694
+                            IDENT@7693..7694 "k"
+                        R_BRACK@7694..7695 "]"
+                    WHITESPACE@7695..7696 " "
+                    EQ@7696..7698 "=="
+                    WHITESPACE@7698..7699 " "
+                    EXPR_LITERAL@7699..7703
+                      NULL_KW@7699..7703 "null"
+                R_BRACK@7703..7704 "]"
+            SEMI@7704..7705 ";"
+          WHITESPACE@7705..7712 "\n      "
+          STMT_LOCAL@7712..7785
+            LOCAL_KW@7712..7717 "local"
+            WHITESPACE@7717..7718 " "
+            BIND_DESTRUCT@7718..7784
+              DESTRUCT_FULL@7718..7729
+                NAME@7718..7729
+                  IDENT@7718..7729 "both_fields"
+              WHITESPACE@7729..7730 " "
+              ASSIGN@7730..7731 "="
+              WHITESPACE@7731..7732 " "
+              EXPR_APPLY@7732..7784
+                EXPR_INDEX@7732..7744
+                  EXPR_VAR@7732..7735
+                    NAME@7732..7735
+                      IDENT@7732..7735 "std"
+                  DOT@7735..7736 "."
+                  NAME@7736..7744
+                    IDENT@7736..7744 "setUnion"
+                ARGS_DESC@7744..7784
+                  L_PAREN@7744..7745 "("
+                  ARG@7745..7758
+                    EXPR_VAR@7745..7758
+                      NAME@7745..7758
+                        IDENT@7745..7758 "target_fields"
+                  COMMA@7758..7759 ","
+                  WHITESPACE@7759..7760 " "
+                  ARG@7760..7783
+                    EXPR_APPLY@7760..7783
+                      EXPR_INDEX@7760..7776
+                        EXPR_VAR@7760..7763
+                          NAME@7760..7763
+                            IDENT@7760..7763 "std"
+                        DOT@7763..7764 "."
+                        NAME@7764..7776
+                          IDENT@7764..7776 "objectFields"
+                      ARGS_DESC@7776..7783
+                        L_PAREN@7776..7777 "("
+                        ARG@7777..7782
+                          EXPR_VAR@7777..7782
+                            NAME@7777..7782
+                              IDENT@7777..7782 "patch"
+                        R_PAREN@7782..7783 ")"
+                  R_PAREN@7783..7784 ")"
+            SEMI@7784..7785 ";"
+          WHITESPACE@7785..7793 "\n\n      "
+          TRUE_EXPR@7793..8133
+            EXPR_OBJECT@7793..8133
+              OBJ_BODY_COMP@7793..8133
+                L_BRACE@7793..7794 "{"
+                WHITESPACE@7794..7803 "\n        "
+                MEMBER_FIELD_NORMAL@7803..8070
+                  FIELD_NAME_DYNAMIC@7803..7806
+                    L_BRACK@7803..7804 "["
+                    EXPR_VAR@7804..7805
+                      NAME@7804..7805
+                        IDENT@7804..7805 "k"
+                    R_BRACK@7805..7806 "]"
+                  COLON@7806..7807 ":"
+                  WHITESPACE@7807..7818 "\n          "
+                  EXPR_IF_THEN_ELSE@7818..8070
+                    IF_KW@7818..7820 "if"
+                    WHITESPACE@7820..7821 " "
+                    EXPR_UNARY@7821..7845
+                      NOT@7821..7822 "!"
+                      EXPR_APPLY@7822..7845
+                        EXPR_INDEX@7822..7835
+                          EXPR_VAR@7822..7825
+                            NAME@7822..7825
+                              IDENT@7822..7825 "std"
+                          DOT@7825..7826 "."
+                          NAME@7826..7835
+                            IDENT@7826..7835 "objectHas"
+                        ARGS_DESC@7835..7845
+                          L_PAREN@7835..7836 "("
+                          ARG@7836..7841
+                            EXPR_VAR@7836..7841
+                              NAME@7836..7841
+                                IDENT@7836..7841 "patch"
+                          COMMA@7841..7842 ","
+                          WHITESPACE@7842..7843 " "
+                          ARG@7843..7844
+                            EXPR_VAR@7843..7844
+                              NAME@7843..7844
+                                IDENT@7843..7844 "k"
+                          R_PAREN@7844..7845 ")"
+                    WHITESPACE@7845..7846 " "
+                    THEN_KW@7846..7850 "then"
+                    WHITESPACE@7850..7863 "\n            "
+                    TRUE_EXPR@7863..7879
+                      EXPR_INDEX_EXPR@7863..7879
+                        LHS_EXPR@7863..7876
+                          EXPR_VAR@7863..7876
+                            NAME@7863..7876
+                              IDENT@7863..7876 "target_object"
+                        L_BRACK@7876..7877 "["
+                        EXPR_VAR@7877..7878
+                          NAME@7877..7878
+                            IDENT@7877..7878 "k"
+                        R_BRACK@7878..7879 "]"
+                    WHITESPACE@7879..7890 "\n          "
+                    ELSE_KW@7890..7894 "else"
+                    WHITESPACE@7894..7895 " "
+                    FALSE_EXPR@7895..8070
+                      EXPR_IF_THEN_ELSE@7895..8070
+                        IF_KW@7895..7897 "if"
+                        WHITESPACE@7897..7898 " "
+                        EXPR_UNARY@7898..7930
+                          NOT@7898..7899 "!"
+                          EXPR_APPLY@7899..7930
+                            EXPR_INDEX@7899..7912
+                              EXPR_VAR@7899..7902
+                                NAME@7899..7902
+                                  IDENT@7899..7902 "std"
+                              DOT@7902..7903 "."
+                              NAME@7903..7912
+                                IDENT@7903..7912 "objectHas"
+                            ARGS_DESC@7912..7930
+                              L_PAREN@7912..7913 "("
+                              ARG@7913..7926
+                                EXPR_VAR@7913..7926
+                                  NAME@7913..7926
+                                    IDENT@7913..7926 "target_object"
+                              COMMA@7926..7927 ","
+                              WHITESPACE@7927..7928 " "
+                              ARG@7928..7929
+                                EXPR_VAR@7928..7929
+                                  NAME@7928..7929
+                                    IDENT@7928..7929 "k"
+                              R_PAREN@7929..7930 ")"
+                        WHITESPACE@7930..7931 " "
+                        THEN_KW@7931..7935 "then"
+                        WHITESPACE@7935..7948 "\n            "
+                        TRUE_EXPR@7948..7989
+                          EXPR_APPLY@7948..7989
+                            EXPR_INDEX@7948..7962
+                              EXPR_VAR@7948..7951
+                                NAME@7948..7951
+                                  IDENT@7948..7951 "std"
+                              DOT@7951..7952 "."
+                              NAME@7952..7962
+                                IDENT@7952..7962 "mergePatch"
+                            ARGS_DESC@7962..7989
+                              L_PAREN@7962..7963 "("
+                              ARG@7963..7967
+                                EXPR_LITERAL@7963..7967
+                                  NULL_KW@7963..7967 "null"
+                              COMMA@7967..7968 ","
+                              WHITESPACE@7968..7969 " "
+                              ARG@7969..7977
+                                EXPR_INDEX_EXPR@7969..7977
+                                  LHS_EXPR@7969..7974
+                                    EXPR_VAR@7969..7974
+                                      NAME@7969..7974
+                                        IDENT@7969..7974 "patch"
+                                  L_BRACK@7974..7975 "["
+                                  EXPR_VAR@7975..7976
+                                    NAME@7975..7976
+                                      IDENT@7975..7976 "k"
+                                  R_BRACK@7976..7977 "]"
+                              R_PAREN@7977..7978 ")"
+                              WHITESPACE@7978..7979 " "
+                              TAILSTRICT_KW@7979..7989 "tailstrict"
+                        WHITESPACE@7989..8000 "\n          "
+                        ELSE_KW@8000..8004 "else"
+                        WHITESPACE@8004..8017 "\n            "
+                        FALSE_EXPR@8017..8070
+                          EXPR_APPLY@8017..8070
+                            EXPR_INDEX@8017..8031
+                              EXPR_VAR@8017..8020
+                                NAME@8017..8020
+                                  IDENT@8017..8020 "std"
+                              DOT@8020..8021 "."
+                              NAME@8021..8031
+                                IDENT@8021..8031 "mergePatch"
+                            ARGS_DESC@8031..8070
+                              L_PAREN@8031..8032 "("
+                              ARG@8032..8048
+                                EXPR_INDEX_EXPR@8032..8048
+                                  LHS_EXPR@8032..8045
+                                    EXPR_VAR@8032..8045
+                                      NAME@8032..8045
+                                        IDENT@8032..8045 "target_object"
+                                  L_BRACK@8045..8046 "["
+                                  EXPR_VAR@8046..8047
+                                    NAME@8046..8047
+                                      IDENT@8046..8047 "k"
+                                  R_BRACK@8047..8048 "]"
+                              COMMA@8048..8049 ","
+                              WHITESPACE@8049..8050 " "
+                              ARG@8050..8058
+                                EXPR_INDEX_EXPR@8050..8058
+                                  LHS_EXPR@8050..8055
+                                    EXPR_VAR@8050..8055
+                                      NAME@8050..8055
+                                        IDENT@8050..8055 "patch"
+                                  L_BRACK@8055..8056 "["
+                                  EXPR_VAR@8056..8057
+                                    NAME@8056..8057
+                                      IDENT@8056..8057 "k"
+                                  R_BRACK@8057..8058 "]"
+                              R_PAREN@8058..8059 ")"
+                              WHITESPACE@8059..8060 " "
+                              TAILSTRICT_KW@8060..8070 "tailstrict"
+                WHITESPACE@8070..8079 "\n        "
+                FOR_SPEC@8079..8125
+                  FOR_KW@8079..8082 "for"
+                  WHITESPACE@8082..8083 " "
+                  NAME@8083..8084
+                    IDENT@8083..8084 "k"
+                  WHITESPACE@8084..8085 " "
+                  IN_KW@8085..8087 "in"
+                  WHITESPACE@8087..8088 " "
+                  EXPR_APPLY@8088..8125
+                    EXPR_INDEX@8088..8099
+                      EXPR_VAR@8088..8091
+                        NAME@8088..8091
+                          IDENT@8088..8091 "std"
+                      DOT@8091..8092 "."
+                      NAME@8092..8099
+                        IDENT@8092..8099 "setDiff"
+                    ARGS_DESC@8099..8125
+                      L_PAREN@8099..8100 "("
+                      ARG@8100..8111
+                        EXPR_VAR@8100..8111
+                          NAME@8100..8111
+                            IDENT@8100..8111 "both_fields"
+                      COMMA@8111..8112 ","
+                      WHITESPACE@8112..8113 " "
+                      ARG@8113..8124
+                        EXPR_VAR@8113..8124
+                          NAME@8113..8124
+                            IDENT@8113..8124 "null_fields"
+                      R_PAREN@8124..8125 ")"
+                WHITESPACE@8125..8132 "\n      "
+                R_BRACE@8132..8133 "}"
+          WHITESPACE@8133..8138 "\n    "
+          ELSE_KW@8138..8142 "else"
+          WHITESPACE@8142..8149 "\n      "
+          FALSE_EXPR@8149..8154
+            EXPR_VAR@8149..8154
+              NAME@8149..8154
+                IDENT@8149..8154 "patch"
+      COMMA@8154..8155 ","
+      WHITESPACE@8155..8159 "\n\n  "
+      MEMBER_FIELD_METHOD@8159..8265
+        FIELD_NAME_FIXED@8159..8162
+          NAME@8159..8162
+            IDENT@8159..8162 "get"
+        PARAMS_DESC@8162..8199
+          L_PAREN@8162..8163 "("
+          PARAM@8163..8164
+            DESTRUCT_FULL@8163..8164
+              NAME@8163..8164
+                IDENT@8163..8164 "o"
+          COMMA@8164..8165 ","
+          WHITESPACE@8165..8166 " "
+          PARAM@8166..8167
+            DESTRUCT_FULL@8166..8167
+              NAME@8166..8167
+                IDENT@8166..8167 "f"
+          COMMA@8167..8168 ","
+          WHITESPACE@8168..8169 " "
+          PARAM@8169..8181
+            DESTRUCT_FULL@8169..8176
+              NAME@8169..8176
+                IDENT@8169..8176 "default"
+            ASSIGN@8176..8177 "="
+            EXPR_LITERAL@8177..8181
+              NULL_KW@8177..8181 "null"
+          COMMA@8181..8182 ","
+          WHITESPACE@8182..8183 " "
+          PARAM@8183..8198
+            DESTRUCT_FULL@8183..8193
+              NAME@8183..8193
+                IDENT@8183..8193 "inc_hidden"
+            ASSIGN@8193..8194 "="
+            EXPR_LITERAL@8194..8198
+              TRUE_KW@8194..8198 "true"
+          R_PAREN@8198..8199 ")"
+        COLONCOLON@8199..8201 "::"
+        WHITESPACE@8201..8206 "\n    "
+        EXPR_IF_THEN_ELSE@8206..8265
+          IF_KW@8206..8208 "if"
+          WHITESPACE@8208..8209 " "
+          EXPR_APPLY@8209..8242
+            EXPR_INDEX@8209..8224
+              EXPR_VAR@8209..8212
+                NAME@8209..8212
+                  IDENT@8209..8212 "std"
+              DOT@8212..8213 "."
+              NAME@8213..8224
+                IDENT@8213..8224 "objectHasEx"
+            ARGS_DESC@8224..8242
+              L_PAREN@8224..8225 "("
+              ARG@8225..8226
+                EXPR_VAR@8225..8226
+                  NAME@8225..8226
+                    IDENT@8225..8226 "o"
+              COMMA@8226..8227 ","
+              WHITESPACE@8227..8228 " "
+              ARG@8228..8229
+                EXPR_VAR@8228..8229
+                  NAME@8228..8229
+                    IDENT@8228..8229 "f"
+              COMMA@8229..8230 ","
+              WHITESPACE@8230..8231 " "
+              ARG@8231..8241
+                EXPR_VAR@8231..8241
+                  NAME@8231..8241
+                    IDENT@8231..8241 "inc_hidden"
+              R_PAREN@8241..8242 ")"
           WHITESPACE@8242..8243 " "
-          EXPR_APPLY@8243..8262
-            EXPR_INDEX@8243..8255
-              EXPR_VAR@8243..8246
-                NAME@8243..8246
-                  IDENT@8243..8246 "std"
-              DOT@8246..8247 "."
-              NAME@8247..8255
-                IDENT@8247..8255 "isObject"
-            ARGS_DESC@8255..8262
-              L_PAREN@8255..8256 "("
-              ARG@8256..8261
-                EXPR_VAR@8256..8261
-                  NAME@8256..8261
-                    IDENT@8256..8261 "patch"
-              R_PAREN@8261..8262 ")"
-          WHITESPACE@8262..8263 " "
-          THEN_KW@8263..8267 "then"
-          WHITESPACE@8267..8274 "\n      "
-          TRUE_EXPR@8274..8975
-            EXPR_LOCAL@8274..8975
-              LOCAL_KW@8274..8279 "local"
-              WHITESPACE@8279..8280 " "
-              BIND_DESTRUCT@8280..8347
-                DESTRUCT_FULL@8280..8293
-                  NAME@8280..8293
-                    IDENT@8280..8293 "target_object"
-                WHITESPACE@8293..8294 " "
-                ASSIGN@8294..8295 "="
-                WHITESPACE@8295..8304 "\n        "
-                EXPR_IF_THEN_ELSE@8304..8347
-                  IF_KW@8304..8306 "if"
-                  WHITESPACE@8306..8307 " "
-                  EXPR_APPLY@8307..8327
-                    EXPR_INDEX@8307..8319
-                      EXPR_VAR@8307..8310
-                        NAME@8307..8310
-                          IDENT@8307..8310 "std"
-                      DOT@8310..8311 "."
-                      NAME@8311..8319
-                        IDENT@8311..8319 "isObject"
-                    ARGS_DESC@8319..8327
-                      L_PAREN@8319..8320 "("
-                      ARG@8320..8326
-                        EXPR_VAR@8320..8326
-                          NAME@8320..8326
-                            IDENT@8320..8326 "target"
-                      R_PAREN@8326..8327 ")"
-                  WHITESPACE@8327..8328 " "
-                  THEN_KW@8328..8332 "then"
-                  WHITESPACE@8332..8333 " "
-                  TRUE_EXPR@8333..8339
-                    EXPR_VAR@8333..8339
-                      NAME@8333..8339
-                        IDENT@8333..8339 "target"
-                  WHITESPACE@8339..8340 " "
-                  ELSE_KW@8340..8344 "else"
-                  WHITESPACE@8344..8345 " "
-                  FALSE_EXPR@8345..8347
-                    EXPR_OBJECT@8345..8347
-                      OBJ_BODY_MEMBER_LIST@8345..8347
-                        L_BRACE@8345..8346 "{"
-                        R_BRACE@8346..8347 "}"
-              SEMI@8347..8348 ";"
-              WHITESPACE@8348..8356 "\n\n      "
-              EXPR_LOCAL@8356..8975
-                LOCAL_KW@8356..8361 "local"
-                WHITESPACE@8361..8362 " "
-                BIND_DESTRUCT@8362..8461
-                  DESTRUCT_FULL@8362..8375
-                    NAME@8362..8375
-                      IDENT@8362..8375 "target_fields"
-                  WHITESPACE@8375..8376 " "
-                  ASSIGN@8376..8377 "="
-                  WHITESPACE@8377..8386 "\n        "
-                  EXPR_IF_THEN_ELSE@8386..8461
-                    IF_KW@8386..8388 "if"
-                    WHITESPACE@8388..8389 " "
-                    EXPR_APPLY@8389..8416
-                      EXPR_INDEX@8389..8401
-                        EXPR_VAR@8389..8392
-                          NAME@8389..8392
-                            IDENT@8389..8392 "std"
-                        DOT@8392..8393 "."
-                        NAME@8393..8401
-                          IDENT@8393..8401 "isObject"
-                      ARGS_DESC@8401..8416
-                        L_PAREN@8401..8402 "("
-                        ARG@8402..8415
-                          EXPR_VAR@8402..8415
-                            NAME@8402..8415
-                              IDENT@8402..8415 "target_object"
-                        R_PAREN@8415..8416 ")"
-                    WHITESPACE@8416..8417 " "
-                    THEN_KW@8417..8421 "then"
-                    WHITESPACE@8421..8422 " "
-                    TRUE_EXPR@8422..8453
-                      EXPR_APPLY@8422..8453
-                        EXPR_INDEX@8422..8438
-                          EXPR_VAR@8422..8425
-                            NAME@8422..8425
-                              IDENT@8422..8425 "std"
-                          DOT@8425..8426 "."
-                          NAME@8426..8438
-                            IDENT@8426..8438 "objectFields"
-                        ARGS_DESC@8438..8453
-                          L_PAREN@8438..8439 "("
-                          ARG@8439..8452
-                            EXPR_VAR@8439..8452
-                              NAME@8439..8452
-                                IDENT@8439..8452 "target_object"
-                          R_PAREN@8452..8453 ")"
-                    WHITESPACE@8453..8454 " "
-                    ELSE_KW@8454..8458 "else"
-                    WHITESPACE@8458..8459 " "
-                    FALSE_EXPR@8459..8461
-                      EXPR_ARRAY@8459..8461
-                        L_BRACK@8459..8460 "["
-                        R_BRACK@8460..8461 "]"
-                SEMI@8461..8462 ";"
-                WHITESPACE@8462..8470 "\n\n      "
-                EXPR_LOCAL@8470..8975
-                  LOCAL_KW@8470..8475 "local"
-                  WHITESPACE@8475..8476 " "
-                  BIND_DESTRUCT@8476..8546
-                    DESTRUCT_FULL@8476..8487
-                      NAME@8476..8487
-                        IDENT@8476..8487 "null_fields"
-                    WHITESPACE@8487..8488 " "
-                    ASSIGN@8488..8489 "="
-                    WHITESPACE@8489..8490 " "
-                    EXPR_ARRAY_COMP@8490..8546
-                      L_BRACK@8490..8491 "["
-                      EXPR_VAR@8491..8492
-                        NAME@8491..8492
-                          IDENT@8491..8492 "k"
-                      WHITESPACE@8492..8493 " "
-                      FOR_SPEC@8493..8525
-                        FOR_KW@8493..8496 "for"
-                        WHITESPACE@8496..8497 " "
-                        NAME@8497..8498
-                          IDENT@8497..8498 "k"
-                        WHITESPACE@8498..8499 " "
-                        IN_KW@8499..8501 "in"
-                        WHITESPACE@8501..8502 " "
-                        EXPR_APPLY@8502..8525
-                          EXPR_INDEX@8502..8518
-                            EXPR_VAR@8502..8505
-                              NAME@8502..8505
-                                IDENT@8502..8505 "std"
-                            DOT@8505..8506 "."
-                            NAME@8506..8518
-                              IDENT@8506..8518 "objectFields"
-                          ARGS_DESC@8518..8525
-                            L_PAREN@8518..8519 "("
-                            ARG@8519..8524
-                              EXPR_VAR@8519..8524
-                                NAME@8519..8524
-                                  IDENT@8519..8524 "patch"
-                            R_PAREN@8524..8525 ")"
-                      WHITESPACE@8525..8526 " "
-                      IF_SPEC@8526..8545
-                        IF_KW@8526..8528 "if"
-                        WHITESPACE@8528..8529 " "
-                        EXPR_BINARY@8529..8545
-                          LHS_EXPR@8529..8537
-                            EXPR_INDEX_EXPR@8529..8537
-                              LHS_EXPR@8529..8534
-                                EXPR_VAR@8529..8534
-                                  NAME@8529..8534
-                                    IDENT@8529..8534 "patch"
-                              L_BRACK@8534..8535 "["
-                              EXPR_VAR@8535..8536
-                                NAME@8535..8536
-                                  IDENT@8535..8536 "k"
-                              R_BRACK@8536..8537 "]"
-                          WHITESPACE@8537..8538 " "
-                          EQ@8538..8540 "=="
-                          WHITESPACE@8540..8541 " "
-                          EXPR_LITERAL@8541..8545
-                            NULL_KW@8541..8545 "null"
-                      R_BRACK@8545..8546 "]"
-                  SEMI@8546..8547 ";"
-                  WHITESPACE@8547..8554 "\n      "
-                  EXPR_LOCAL@8554..8975
-                    LOCAL_KW@8554..8559 "local"
-                    WHITESPACE@8559..8560 " "
-                    BIND_DESTRUCT@8560..8626
-                      DESTRUCT_FULL@8560..8571
-                        NAME@8560..8571
-                          IDENT@8560..8571 "both_fields"
-                      WHITESPACE@8571..8572 " "
-                      ASSIGN@8572..8573 "="
-                      WHITESPACE@8573..8574 " "
-                      EXPR_APPLY@8574..8626
-                        EXPR_INDEX@8574..8586
-                          EXPR_VAR@8574..8577
-                            NAME@8574..8577
-                              IDENT@8574..8577 "std"
-                          DOT@8577..8578 "."
-                          NAME@8578..8586
-                            IDENT@8578..8586 "setUnion"
-                        ARGS_DESC@8586..8626
-                          L_PAREN@8586..8587 "("
-                          ARG@8587..8600
-                            EXPR_VAR@8587..8600
-                              NAME@8587..8600
-                                IDENT@8587..8600 "target_fields"
-                          COMMA@8600..8601 ","
-                          WHITESPACE@8601..8602 " "
-                          ARG@8602..8625
-                            EXPR_APPLY@8602..8625
-                              EXPR_INDEX@8602..8618
-                                EXPR_VAR@8602..8605
-                                  NAME@8602..8605
-                                    IDENT@8602..8605 "std"
-                                DOT@8605..8606 "."
-                                NAME@8606..8618
-                                  IDENT@8606..8618 "objectFields"
-                              ARGS_DESC@8618..8625
-                                L_PAREN@8618..8619 "("
-                                ARG@8619..8624
-                                  EXPR_VAR@8619..8624
-                                    NAME@8619..8624
-                                      IDENT@8619..8624 "patch"
-                                R_PAREN@8624..8625 ")"
-                          R_PAREN@8625..8626 ")"
-                    SEMI@8626..8627 ";"
-                    WHITESPACE@8627..8635 "\n\n      "
-                    EXPR_OBJECT@8635..8975
-                      OBJ_BODY_COMP@8635..8975
-                        L_BRACE@8635..8636 "{"
-                        WHITESPACE@8636..8645 "\n        "
-                        MEMBER_FIELD_NORMAL@8645..8912
-                          FIELD_NAME_DYNAMIC@8645..8648
-                            L_BRACK@8645..8646 "["
-                            EXPR_VAR@8646..8647
-                              NAME@8646..8647
-                                IDENT@8646..8647 "k"
-                            R_BRACK@8647..8648 "]"
-                          COLON@8648..8649 ":"
-                          WHITESPACE@8649..8660 "\n          "
-                          EXPR_IF_THEN_ELSE@8660..8912
-                            IF_KW@8660..8662 "if"
-                            WHITESPACE@8662..8663 " "
-                            EXPR_UNARY@8663..8687
-                              NOT@8663..8664 "!"
-                              EXPR_APPLY@8664..8687
-                                EXPR_INDEX@8664..8677
-                                  EXPR_VAR@8664..8667
-                                    NAME@8664..8667
-                                      IDENT@8664..8667 "std"
-                                  DOT@8667..8668 "."
-                                  NAME@8668..8677
-                                    IDENT@8668..8677 "objectHas"
-                                ARGS_DESC@8677..8687
-                                  L_PAREN@8677..8678 "("
-                                  ARG@8678..8683
-                                    EXPR_VAR@8678..8683
-                                      NAME@8678..8683
-                                        IDENT@8678..8683 "patch"
-                                  COMMA@8683..8684 ","
-                                  WHITESPACE@8684..8685 " "
-                                  ARG@8685..8686
-                                    EXPR_VAR@8685..8686
-                                      NAME@8685..8686
-                                        IDENT@8685..8686 "k"
-                                  R_PAREN@8686..8687 ")"
-                            WHITESPACE@8687..8688 " "
-                            THEN_KW@8688..8692 "then"
-                            WHITESPACE@8692..8705 "\n            "
-                            TRUE_EXPR@8705..8721
-                              EXPR_INDEX_EXPR@8705..8721
-                                LHS_EXPR@8705..8718
-                                  EXPR_VAR@8705..8718
-                                    NAME@8705..8718
-                                      IDENT@8705..8718 "target_object"
-                                L_BRACK@8718..8719 "["
-                                EXPR_VAR@8719..8720
-                                  NAME@8719..8720
-                                    IDENT@8719..8720 "k"
-                                R_BRACK@8720..8721 "]"
-                            WHITESPACE@8721..8732 "\n          "
-                            ELSE_KW@8732..8736 "else"
-                            WHITESPACE@8736..8737 " "
-                            FALSE_EXPR@8737..8912
-                              EXPR_IF_THEN_ELSE@8737..8912
-                                IF_KW@8737..8739 "if"
-                                WHITESPACE@8739..8740 " "
-                                EXPR_UNARY@8740..8772
-                                  NOT@8740..8741 "!"
-                                  EXPR_APPLY@8741..8772
-                                    EXPR_INDEX@8741..8754
-                                      EXPR_VAR@8741..8744
-                                        NAME@8741..8744
-                                          IDENT@8741..8744 "std"
-                                      DOT@8744..8745 "."
-                                      NAME@8745..8754
-                                        IDENT@8745..8754 "objectHas"
-                                    ARGS_DESC@8754..8772
-                                      L_PAREN@8754..8755 "("
-                                      ARG@8755..8768
-                                        EXPR_VAR@8755..8768
-                                          NAME@8755..8768
-                                            IDENT@8755..8768 "target_object"
-                                      COMMA@8768..8769 ","
-                                      WHITESPACE@8769..8770 " "
-                                      ARG@8770..8771
-                                        EXPR_VAR@8770..8771
-                                          NAME@8770..8771
-                                            IDENT@8770..8771 "k"
-                                      R_PAREN@8771..8772 ")"
-                                WHITESPACE@8772..8773 " "
-                                THEN_KW@8773..8777 "then"
-                                WHITESPACE@8777..8790 "\n            "
-                                TRUE_EXPR@8790..8831
-                                  EXPR_APPLY@8790..8831
-                                    EXPR_INDEX@8790..8804
-                                      EXPR_VAR@8790..8793
-                                        NAME@8790..8793
-                                          IDENT@8790..8793 "std"
-                                      DOT@8793..8794 "."
-                                      NAME@8794..8804
-                                        IDENT@8794..8804 "mergePatch"
-                                    ARGS_DESC@8804..8831
-                                      L_PAREN@8804..8805 "("
-                                      ARG@8805..8809
-                                        EXPR_LITERAL@8805..8809
-                                          NULL_KW@8805..8809 "null"
-                                      COMMA@8809..8810 ","
-                                      WHITESPACE@8810..8811 " "
-                                      ARG@8811..8819
-                                        EXPR_INDEX_EXPR@8811..8819
-                                          LHS_EXPR@8811..8816
-                                            EXPR_VAR@8811..8816
-                                              NAME@8811..8816
-                                                IDENT@8811..8816 "patch"
-                                          L_BRACK@8816..8817 "["
-                                          EXPR_VAR@8817..8818
-                                            NAME@8817..8818
-                                              IDENT@8817..8818 "k"
-                                          R_BRACK@8818..8819 "]"
-                                      R_PAREN@8819..8820 ")"
-                                      WHITESPACE@8820..8821 " "
-                                      TAILSTRICT_KW@8821..8831 "tailstrict"
-                                WHITESPACE@8831..8842 "\n          "
-                                ELSE_KW@8842..8846 "else"
-                                WHITESPACE@8846..8859 "\n            "
-                                FALSE_EXPR@8859..8912
-                                  EXPR_APPLY@8859..8912
-                                    EXPR_INDEX@8859..8873
-                                      EXPR_VAR@8859..8862
-                                        NAME@8859..8862
-                                          IDENT@8859..8862 "std"
-                                      DOT@8862..8863 "."
-                                      NAME@8863..8873
-                                        IDENT@8863..8873 "mergePatch"
-                                    ARGS_DESC@8873..8912
-                                      L_PAREN@8873..8874 "("
-                                      ARG@8874..8890
-                                        EXPR_INDEX_EXPR@8874..8890
-                                          LHS_EXPR@8874..8887
-                                            EXPR_VAR@8874..8887
-                                              NAME@8874..8887
-                                                IDENT@8874..8887 "target_object"
-                                          L_BRACK@8887..8888 "["
-                                          EXPR_VAR@8888..8889
-                                            NAME@8888..8889
-                                              IDENT@8888..8889 "k"
-                                          R_BRACK@8889..8890 "]"
-                                      COMMA@8890..8891 ","
-                                      WHITESPACE@8891..8892 " "
-                                      ARG@8892..8900
-                                        EXPR_INDEX_EXPR@8892..8900
-                                          LHS_EXPR@8892..8897
-                                            EXPR_VAR@8892..8897
-                                              NAME@8892..8897
-                                                IDENT@8892..8897 "patch"
-                                          L_BRACK@8897..8898 "["
-                                          EXPR_VAR@8898..8899
-                                            NAME@8898..8899
-                                              IDENT@8898..8899 "k"
-                                          R_BRACK@8899..8900 "]"
-                                      R_PAREN@8900..8901 ")"
-                                      WHITESPACE@8901..8902 " "
-                                      TAILSTRICT_KW@8902..8912 "tailstrict"
-                        WHITESPACE@8912..8921 "\n        "
-                        FOR_SPEC@8921..8967
-                          FOR_KW@8921..8924 "for"
-                          WHITESPACE@8924..8925 " "
-                          NAME@8925..8926
-                            IDENT@8925..8926 "k"
-                          WHITESPACE@8926..8927 " "
-                          IN_KW@8927..8929 "in"
-                          WHITESPACE@8929..8930 " "
-                          EXPR_APPLY@8930..8967
-                            EXPR_INDEX@8930..8941
-                              EXPR_VAR@8930..8933
-                                NAME@8930..8933
-                                  IDENT@8930..8933 "std"
-                              DOT@8933..8934 "."
-                              NAME@8934..8941
-                                IDENT@8934..8941 "setDiff"
-                            ARGS_DESC@8941..8967
-                              L_PAREN@8941..8942 "("
-                              ARG@8942..8953
-                                EXPR_VAR@8942..8953
-                                  NAME@8942..8953
-                                    IDENT@8942..8953 "both_fields"
-                              COMMA@8953..8954 ","
-                              WHITESPACE@8954..8955 " "
-                              ARG@8955..8966
-                                EXPR_VAR@8955..8966
-                                  NAME@8955..8966
-                                    IDENT@8955..8966 "null_fields"
-                              R_PAREN@8966..8967 ")"
-                        WHITESPACE@8967..8974 "\n      "
-                        R_BRACE@8974..8975 "}"
-          WHITESPACE@8975..8980 "\n    "
-          ELSE_KW@8980..8984 "else"
-          WHITESPACE@8984..8991 "\n      "
-          FALSE_EXPR@8991..8996
-            EXPR_VAR@8991..8996
-              NAME@8991..8996
-                IDENT@8991..8996 "patch"
-      COMMA@8996..8997 ","
-      WHITESPACE@8997..9001 "\n\n  "
-      MEMBER_FIELD_METHOD@9001..9107
-        FIELD_NAME_FIXED@9001..9004
-          NAME@9001..9004
-            IDENT@9001..9004 "get"
-        PARAMS_DESC@9004..9041
-          L_PAREN@9004..9005 "("
-          PARAM@9005..9006
-            DESTRUCT_FULL@9005..9006
-              NAME@9005..9006
-                IDENT@9005..9006 "o"
-          COMMA@9006..9007 ","
-          WHITESPACE@9007..9008 " "
-          PARAM@9008..9009
-            DESTRUCT_FULL@9008..9009
-              NAME@9008..9009
-                IDENT@9008..9009 "f"
-          COMMA@9009..9010 ","
-          WHITESPACE@9010..9011 " "
-          PARAM@9011..9023
-            DESTRUCT_FULL@9011..9018
-              NAME@9011..9018
-                IDENT@9011..9018 "default"
-            ASSIGN@9018..9019 "="
-            EXPR_LITERAL@9019..9023
-              NULL_KW@9019..9023 "null"
-          COMMA@9023..9024 ","
-          WHITESPACE@9024..9025 " "
-          PARAM@9025..9040
-            DESTRUCT_FULL@9025..9035
-              NAME@9025..9035
-                IDENT@9025..9035 "inc_hidden"
-            ASSIGN@9035..9036 "="
-            EXPR_LITERAL@9036..9040
-              TRUE_KW@9036..9040 "true"
-          R_PAREN@9040..9041 ")"
-        COLONCOLON@9041..9043 "::"
-        WHITESPACE@9043..9048 "\n    "
-        EXPR_IF_THEN_ELSE@9048..9107
-          IF_KW@9048..9050 "if"
-          WHITESPACE@9050..9051 " "
-          EXPR_APPLY@9051..9084
-            EXPR_INDEX@9051..9066
-              EXPR_VAR@9051..9054
-                NAME@9051..9054
-                  IDENT@9051..9054 "std"
-              DOT@9054..9055 "."
-              NAME@9055..9066
-                IDENT@9055..9066 "objectHasEx"
-            ARGS_DESC@9066..9084
-              L_PAREN@9066..9067 "("
-              ARG@9067..9068
-                EXPR_VAR@9067..9068
-                  NAME@9067..9068
-                    IDENT@9067..9068 "o"
-              COMMA@9068..9069 ","
-              WHITESPACE@9069..9070 " "
-              ARG@9070..9071
-                EXPR_VAR@9070..9071
-                  NAME@9070..9071
-                    IDENT@9070..9071 "f"
-              COMMA@9071..9072 ","
-              WHITESPACE@9072..9073 " "
-              ARG@9073..9083
-                EXPR_VAR@9073..9083
-                  NAME@9073..9083
-                    IDENT@9073..9083 "inc_hidden"
-              R_PAREN@9083..9084 ")"
-          WHITESPACE@9084..9085 " "
-          THEN_KW@9085..9089 "then"
-          WHITESPACE@9089..9090 " "
-          TRUE_EXPR@9090..9094
-            EXPR_INDEX_EXPR@9090..9094
-              LHS_EXPR@9090..9091
-                EXPR_VAR@9090..9091
-                  NAME@9090..9091
-                    IDENT@9090..9091 "o"
-              L_BRACK@9091..9092 "["
-              EXPR_VAR@9092..9093
-                NAME@9092..9093
-                  IDENT@9092..9093 "f"
-              R_BRACK@9093..9094 "]"
-          WHITESPACE@9094..9095 " "
-          ELSE_KW@9095..9099 "else"
-          WHITESPACE@9099..9100 " "
-          FALSE_EXPR@9100..9107
-            EXPR_VAR@9100..9107
-              NAME@9100..9107
-                IDENT@9100..9107 "default"
-      COMMA@9107..9108 ","
-      WHITESPACE@9108..9112 "\n\n  "
-      MEMBER_FIELD_METHOD@9112..9162
-        FIELD_NAME_FIXED@9112..9124
-          NAME@9112..9124
-            IDENT@9112..9124 "objectFields"
-        PARAMS_DESC@9124..9127
-          L_PAREN@9124..9125 "("
-          PARAM@9125..9126
-            DESTRUCT_FULL@9125..9126
-              NAME@9125..9126
-                IDENT@9125..9126 "o"
-          R_PAREN@9126..9127 ")"
-        COLONCOLON@9127..9129 "::"
-        WHITESPACE@9129..9134 "\n    "
-        EXPR_APPLY@9134..9162
-          EXPR_INDEX@9134..9152
-            EXPR_VAR@9134..9137
-              NAME@9134..9137
-                IDENT@9134..9137 "std"
-            DOT@9137..9138 "."
-            NAME@9138..9152
-              IDENT@9138..9152 "objectFieldsEx"
-          ARGS_DESC@9152..9162
-            L_PAREN@9152..9153 "("
-            ARG@9153..9154
-              EXPR_VAR@9153..9154
-                NAME@9153..9154
-                  IDENT@9153..9154 "o"
-            COMMA@9154..9155 ","
-            WHITESPACE@9155..9156 " "
-            ARG@9156..9161
-              EXPR_LITERAL@9156..9161
-                FALSE_KW@9156..9161 "false"
-            R_PAREN@9161..9162 ")"
-      COMMA@9162..9163 ","
-      WHITESPACE@9163..9167 "\n\n  "
-      MEMBER_FIELD_METHOD@9167..9219
-        FIELD_NAME_FIXED@9167..9182
-          NAME@9167..9182
-            IDENT@9167..9182 "objectFieldsAll"
-        PARAMS_DESC@9182..9185
-          L_PAREN@9182..9183 "("
-          PARAM@9183..9184
-            DESTRUCT_FULL@9183..9184
-              NAME@9183..9184
-                IDENT@9183..9184 "o"
-          R_PAREN@9184..9185 ")"
-        COLONCOLON@9185..9187 "::"
-        WHITESPACE@9187..9192 "\n    "
-        EXPR_APPLY@9192..9219
-          EXPR_INDEX@9192..9210
-            EXPR_VAR@9192..9195
-              NAME@9192..9195
-                IDENT@9192..9195 "std"
-            DOT@9195..9196 "."
-            NAME@9196..9210
-              IDENT@9196..9210 "objectFieldsEx"
-          ARGS_DESC@9210..9219
-            L_PAREN@9210..9211 "("
-            ARG@9211..9212
-              EXPR_VAR@9211..9212
-                NAME@9211..9212
-                  IDENT@9211..9212 "o"
-            COMMA@9212..9213 ","
-            WHITESPACE@9213..9214 " "
-            ARG@9214..9218
-              EXPR_LITERAL@9214..9218
-                TRUE_KW@9214..9218 "true"
-            R_PAREN@9218..9219 ")"
-      COMMA@9219..9220 ","
-      WHITESPACE@9220..9224 "\n\n  "
-      MEMBER_FIELD_METHOD@9224..9274
-        FIELD_NAME_FIXED@9224..9233
-          NAME@9224..9233
-            IDENT@9224..9233 "objectHas"
-        PARAMS_DESC@9233..9239
-          L_PAREN@9233..9234 "("
-          PARAM@9234..9235
-            DESTRUCT_FULL@9234..9235
-              NAME@9234..9235
-                IDENT@9234..9235 "o"
-          COMMA@9235..9236 ","
-          WHITESPACE@9236..9237 " "
-          PARAM@9237..9238
-            DESTRUCT_FULL@9237..9238
-              NAME@9237..9238
-                IDENT@9237..9238 "f"
-          R_PAREN@9238..9239 ")"
-        COLONCOLON@9239..9241 "::"
-        WHITESPACE@9241..9246 "\n    "
-        EXPR_APPLY@9246..9274
-          EXPR_INDEX@9246..9261
-            EXPR_VAR@9246..9249
-              NAME@9246..9249
-                IDENT@9246..9249 "std"
-            DOT@9249..9250 "."
-            NAME@9250..9261
-              IDENT@9250..9261 "objectHasEx"
-          ARGS_DESC@9261..9274
-            L_PAREN@9261..9262 "("
-            ARG@9262..9263
-              EXPR_VAR@9262..9263
-                NAME@9262..9263
-                  IDENT@9262..9263 "o"
-            COMMA@9263..9264 ","
-            WHITESPACE@9264..9265 " "
-            ARG@9265..9266
-              EXPR_VAR@9265..9266
-                NAME@9265..9266
-                  IDENT@9265..9266 "f"
-            COMMA@9266..9267 ","
-            WHITESPACE@9267..9268 " "
-            ARG@9268..9273
-              EXPR_LITERAL@9268..9273
-                FALSE_KW@9268..9273 "false"
-            R_PAREN@9273..9274 ")"
-      COMMA@9274..9275 ","
-      WHITESPACE@9275..9279 "\n\n  "
-      MEMBER_FIELD_METHOD@9279..9331
-        FIELD_NAME_FIXED@9279..9291
-          NAME@9279..9291
-            IDENT@9279..9291 "objectHasAll"
-        PARAMS_DESC@9291..9297
-          L_PAREN@9291..9292 "("
-          PARAM@9292..9293
-            DESTRUCT_FULL@9292..9293
-              NAME@9292..9293
-                IDENT@9292..9293 "o"
-          COMMA@9293..9294 ","
-          WHITESPACE@9294..9295 " "
-          PARAM@9295..9296
-            DESTRUCT_FULL@9295..9296
-              NAME@9295..9296
-                IDENT@9295..9296 "f"
-          R_PAREN@9296..9297 ")"
-        COLONCOLON@9297..9299 "::"
-        WHITESPACE@9299..9304 "\n    "
-        EXPR_APPLY@9304..9331
-          EXPR_INDEX@9304..9319
-            EXPR_VAR@9304..9307
-              NAME@9304..9307
-                IDENT@9304..9307 "std"
-            DOT@9307..9308 "."
-            NAME@9308..9319
-              IDENT@9308..9319 "objectHasEx"
-          ARGS_DESC@9319..9331
-            L_PAREN@9319..9320 "("
-            ARG@9320..9321
-              EXPR_VAR@9320..9321
-                NAME@9320..9321
-                  IDENT@9320..9321 "o"
-            COMMA@9321..9322 ","
-            WHITESPACE@9322..9323 " "
-            ARG@9323..9324
-              EXPR_VAR@9323..9324
-                NAME@9323..9324
-                  IDENT@9323..9324 "f"
-            COMMA@9324..9325 ","
-            WHITESPACE@9325..9326 " "
-            ARG@9326..9330
-              EXPR_LITERAL@9326..9330
-                TRUE_KW@9326..9330 "true"
-            R_PAREN@9330..9331 ")"
-      COMMA@9331..9332 ","
-      WHITESPACE@9332..9336 "\n\n  "
-      MEMBER_FIELD_METHOD@9336..9393
-        FIELD_NAME_FIXED@9336..9348
-          NAME@9336..9348
-            IDENT@9336..9348 "objectValues"
-        PARAMS_DESC@9348..9351
-          L_PAREN@9348..9349 "("
-          PARAM@9349..9350
-            DESTRUCT_FULL@9349..9350
-              NAME@9349..9350
-                IDENT@9349..9350 "o"
-          R_PAREN@9350..9351 ")"
-        COLONCOLON@9351..9353 "::"
-        WHITESPACE@9353..9358 "\n    "
-        EXPR_ARRAY_COMP@9358..9393
-          L_BRACK@9358..9359 "["
-          EXPR_INDEX_EXPR@9359..9363
-            LHS_EXPR@9359..9360
-              EXPR_VAR@9359..9360
-                NAME@9359..9360
-                  IDENT@9359..9360 "o"
-            L_BRACK@9360..9361 "["
-            EXPR_VAR@9361..9362
-              NAME@9361..9362
-                IDENT@9361..9362 "k"
-            R_BRACK@9362..9363 "]"
-          WHITESPACE@9363..9364 " "
-          FOR_SPEC@9364..9392
-            FOR_KW@9364..9367 "for"
-            WHITESPACE@9367..9368 " "
-            NAME@9368..9369
-              IDENT@9368..9369 "k"
-            WHITESPACE@9369..9370 " "
-            IN_KW@9370..9372 "in"
-            WHITESPACE@9372..9373 " "
-            EXPR_APPLY@9373..9392
-              EXPR_INDEX@9373..9389
-                EXPR_VAR@9373..9376
-                  NAME@9373..9376
-                    IDENT@9373..9376 "std"
-                DOT@9376..9377 "."
-                NAME@9377..9389
-                  IDENT@9377..9389 "objectFields"
-              ARGS_DESC@9389..9392
-                L_PAREN@9389..9390 "("
-                ARG@9390..9391
-                  EXPR_VAR@9390..9391
-                    NAME@9390..9391
-                      IDENT@9390..9391 "o"
-                R_PAREN@9391..9392 ")"
-          R_BRACK@9392..9393 "]"
-      COMMA@9393..9394 ","
-      WHITESPACE@9394..9398 "\n\n  "
-      MEMBER_FIELD_METHOD@9398..9461
-        FIELD_NAME_FIXED@9398..9413
-          NAME@9398..9413
-            IDENT@9398..9413 "objectValuesAll"
-        PARAMS_DESC@9413..9416
-          L_PAREN@9413..9414 "("
-          PARAM@9414..9415
-            DESTRUCT_FULL@9414..9415
-              NAME@9414..9415
-                IDENT@9414..9415 "o"
-          R_PAREN@9415..9416 ")"
-        COLONCOLON@9416..9418 "::"
-        WHITESPACE@9418..9423 "\n    "
-        EXPR_ARRAY_COMP@9423..9461
-          L_BRACK@9423..9424 "["
-          EXPR_INDEX_EXPR@9424..9428
-            LHS_EXPR@9424..9425
-              EXPR_VAR@9424..9425
-                NAME@9424..9425
-                  IDENT@9424..9425 "o"
-            L_BRACK@9425..9426 "["
-            EXPR_VAR@9426..9427
-              NAME@9426..9427
-                IDENT@9426..9427 "k"
-            R_BRACK@9427..9428 "]"
-          WHITESPACE@9428..9429 " "
-          FOR_SPEC@9429..9460
-            FOR_KW@9429..9432 "for"
-            WHITESPACE@9432..9433 " "
-            NAME@9433..9434
-              IDENT@9433..9434 "k"
-            WHITESPACE@9434..9435 " "
-            IN_KW@9435..9437 "in"
-            WHITESPACE@9437..9438 " "
-            EXPR_APPLY@9438..9460
-              EXPR_INDEX@9438..9457
-                EXPR_VAR@9438..9441
-                  NAME@9438..9441
-                    IDENT@9438..9441 "std"
-                DOT@9441..9442 "."
-                NAME@9442..9457
-                  IDENT@9442..9457 "objectFieldsAll"
-              ARGS_DESC@9457..9460
-                L_PAREN@9457..9458 "("
-                ARG@9458..9459
-                  EXPR_VAR@9458..9459
-                    NAME@9458..9459
-                      IDENT@9458..9459 "o"
-                R_PAREN@9459..9460 ")"
-          R_BRACK@9460..9461 "]"
-      COMMA@9461..9462 ","
-      WHITESPACE@9462..9466 "\n\n  "
-      MEMBER_FIELD_METHOD@9466..9600
-        FIELD_NAME_FIXED@9466..9477
-          NAME@9466..9477
-            IDENT@9466..9477 "resolvePath"
-        PARAMS_DESC@9477..9483
-          L_PAREN@9477..9478 "("
-          PARAM@9478..9479
-            DESTRUCT_FULL@9478..9479
-              NAME@9478..9479
-                IDENT@9478..9479 "f"
-          COMMA@9479..9480 ","
-          WHITESPACE@9480..9481 " "
-          PARAM@9481..9482
-            DESTRUCT_FULL@9481..9482
-              NAME@9481..9482
-                IDENT@9481..9482 "r"
-          R_PAREN@9482..9483 ")"
-        COLONCOLON@9483..9485 "::"
-        WHITESPACE@9485..9490 "\n    "
-        EXPR_LOCAL@9490..9600
-          LOCAL_KW@9490..9495 "local"
-          WHITESPACE@9495..9496 " "
-          BIND_DESTRUCT@9496..9519
-            DESTRUCT_FULL@9496..9499
-              NAME@9496..9499
-                IDENT@9496..9499 "arr"
-            WHITESPACE@9499..9500 " "
-            ASSIGN@9500..9501 "="
-            WHITESPACE@9501..9502 " "
-            EXPR_APPLY@9502..9519
-              EXPR_INDEX@9502..9511
-                EXPR_VAR@9502..9505
-                  NAME@9502..9505
-                    IDENT@9502..9505 "std"
-                DOT@9505..9506 "."
-                NAME@9506..9511
-                  IDENT@9506..9511 "split"
-              ARGS_DESC@9511..9519
-                L_PAREN@9511..9512 "("
-                ARG@9512..9513
-                  EXPR_VAR@9512..9513
-                    NAME@9512..9513
-                      IDENT@9512..9513 "f"
-                COMMA@9513..9514 ","
+          THEN_KW@8243..8247 "then"
+          WHITESPACE@8247..8248 " "
+          TRUE_EXPR@8248..8252
+            EXPR_INDEX_EXPR@8248..8252
+              LHS_EXPR@8248..8249
+                EXPR_VAR@8248..8249
+                  NAME@8248..8249
+                    IDENT@8248..8249 "o"
+              L_BRACK@8249..8250 "["
+              EXPR_VAR@8250..8251
+                NAME@8250..8251
+                  IDENT@8250..8251 "f"
+              R_BRACK@8251..8252 "]"
+          WHITESPACE@8252..8253 " "
+          ELSE_KW@8253..8257 "else"
+          WHITESPACE@8257..8258 " "
+          FALSE_EXPR@8258..8265
+            EXPR_VAR@8258..8265
+              NAME@8258..8265
+                IDENT@8258..8265 "default"
+      COMMA@8265..8266 ","
+      WHITESPACE@8266..8270 "\n\n  "
+      MEMBER_FIELD_METHOD@8270..8320
+        FIELD_NAME_FIXED@8270..8282
+          NAME@8270..8282
+            IDENT@8270..8282 "objectFields"
+        PARAMS_DESC@8282..8285
+          L_PAREN@8282..8283 "("
+          PARAM@8283..8284
+            DESTRUCT_FULL@8283..8284
+              NAME@8283..8284
+                IDENT@8283..8284 "o"
+          R_PAREN@8284..8285 ")"
+        COLONCOLON@8285..8287 "::"
+        WHITESPACE@8287..8292 "\n    "
+        EXPR_APPLY@8292..8320
+          EXPR_INDEX@8292..8310
+            EXPR_VAR@8292..8295
+              NAME@8292..8295
+                IDENT@8292..8295 "std"
+            DOT@8295..8296 "."
+            NAME@8296..8310
+              IDENT@8296..8310 "objectFieldsEx"
+          ARGS_DESC@8310..8320
+            L_PAREN@8310..8311 "("
+            ARG@8311..8312
+              EXPR_VAR@8311..8312
+                NAME@8311..8312
+                  IDENT@8311..8312 "o"
+            COMMA@8312..8313 ","
+            WHITESPACE@8313..8314 " "
+            ARG@8314..8319
+              EXPR_LITERAL@8314..8319
+                FALSE_KW@8314..8319 "false"
+            R_PAREN@8319..8320 ")"
+      COMMA@8320..8321 ","
+      WHITESPACE@8321..8325 "\n\n  "
+      MEMBER_FIELD_METHOD@8325..8377
+        FIELD_NAME_FIXED@8325..8340
+          NAME@8325..8340
+            IDENT@8325..8340 "objectFieldsAll"
+        PARAMS_DESC@8340..8343
+          L_PAREN@8340..8341 "("
+          PARAM@8341..8342
+            DESTRUCT_FULL@8341..8342
+              NAME@8341..8342
+                IDENT@8341..8342 "o"
+          R_PAREN@8342..8343 ")"
+        COLONCOLON@8343..8345 "::"
+        WHITESPACE@8345..8350 "\n    "
+        EXPR_APPLY@8350..8377
+          EXPR_INDEX@8350..8368
+            EXPR_VAR@8350..8353
+              NAME@8350..8353
+                IDENT@8350..8353 "std"
+            DOT@8353..8354 "."
+            NAME@8354..8368
+              IDENT@8354..8368 "objectFieldsEx"
+          ARGS_DESC@8368..8377
+            L_PAREN@8368..8369 "("
+            ARG@8369..8370
+              EXPR_VAR@8369..8370
+                NAME@8369..8370
+                  IDENT@8369..8370 "o"
+            COMMA@8370..8371 ","
+            WHITESPACE@8371..8372 " "
+            ARG@8372..8376
+              EXPR_LITERAL@8372..8376
+                TRUE_KW@8372..8376 "true"
+            R_PAREN@8376..8377 ")"
+      COMMA@8377..8378 ","
+      WHITESPACE@8378..8382 "\n\n  "
+      MEMBER_FIELD_METHOD@8382..8432
+        FIELD_NAME_FIXED@8382..8391
+          NAME@8382..8391
+            IDENT@8382..8391 "objectHas"
+        PARAMS_DESC@8391..8397
+          L_PAREN@8391..8392 "("
+          PARAM@8392..8393
+            DESTRUCT_FULL@8392..8393
+              NAME@8392..8393
+                IDENT@8392..8393 "o"
+          COMMA@8393..8394 ","
+          WHITESPACE@8394..8395 " "
+          PARAM@8395..8396
+            DESTRUCT_FULL@8395..8396
+              NAME@8395..8396
+                IDENT@8395..8396 "f"
+          R_PAREN@8396..8397 ")"
+        COLONCOLON@8397..8399 "::"
+        WHITESPACE@8399..8404 "\n    "
+        EXPR_APPLY@8404..8432
+          EXPR_INDEX@8404..8419
+            EXPR_VAR@8404..8407
+              NAME@8404..8407
+                IDENT@8404..8407 "std"
+            DOT@8407..8408 "."
+            NAME@8408..8419
+              IDENT@8408..8419 "objectHasEx"
+          ARGS_DESC@8419..8432
+            L_PAREN@8419..8420 "("
+            ARG@8420..8421
+              EXPR_VAR@8420..8421
+                NAME@8420..8421
+                  IDENT@8420..8421 "o"
+            COMMA@8421..8422 ","
+            WHITESPACE@8422..8423 " "
+            ARG@8423..8424
+              EXPR_VAR@8423..8424
+                NAME@8423..8424
+                  IDENT@8423..8424 "f"
+            COMMA@8424..8425 ","
+            WHITESPACE@8425..8426 " "
+            ARG@8426..8431
+              EXPR_LITERAL@8426..8431
+                FALSE_KW@8426..8431 "false"
+            R_PAREN@8431..8432 ")"
+      COMMA@8432..8433 ","
+      WHITESPACE@8433..8437 "\n\n  "
+      MEMBER_FIELD_METHOD@8437..8489
+        FIELD_NAME_FIXED@8437..8449
+          NAME@8437..8449
+            IDENT@8437..8449 "objectHasAll"
+        PARAMS_DESC@8449..8455
+          L_PAREN@8449..8450 "("
+          PARAM@8450..8451
+            DESTRUCT_FULL@8450..8451
+              NAME@8450..8451
+                IDENT@8450..8451 "o"
+          COMMA@8451..8452 ","
+          WHITESPACE@8452..8453 " "
+          PARAM@8453..8454
+            DESTRUCT_FULL@8453..8454
+              NAME@8453..8454
+                IDENT@8453..8454 "f"
+          R_PAREN@8454..8455 ")"
+        COLONCOLON@8455..8457 "::"
+        WHITESPACE@8457..8462 "\n    "
+        EXPR_APPLY@8462..8489
+          EXPR_INDEX@8462..8477
+            EXPR_VAR@8462..8465
+              NAME@8462..8465
+                IDENT@8462..8465 "std"
+            DOT@8465..8466 "."
+            NAME@8466..8477
+              IDENT@8466..8477 "objectHasEx"
+          ARGS_DESC@8477..8489
+            L_PAREN@8477..8478 "("
+            ARG@8478..8479
+              EXPR_VAR@8478..8479
+                NAME@8478..8479
+                  IDENT@8478..8479 "o"
+            COMMA@8479..8480 ","
+            WHITESPACE@8480..8481 " "
+            ARG@8481..8482
+              EXPR_VAR@8481..8482
+                NAME@8481..8482
+                  IDENT@8481..8482 "f"
+            COMMA@8482..8483 ","
+            WHITESPACE@8483..8484 " "
+            ARG@8484..8488
+              EXPR_LITERAL@8484..8488
+                TRUE_KW@8484..8488 "true"
+            R_PAREN@8488..8489 ")"
+      COMMA@8489..8490 ","
+      WHITESPACE@8490..8494 "\n\n  "
+      MEMBER_FIELD_METHOD@8494..8551
+        FIELD_NAME_FIXED@8494..8506
+          NAME@8494..8506
+            IDENT@8494..8506 "objectValues"
+        PARAMS_DESC@8506..8509
+          L_PAREN@8506..8507 "("
+          PARAM@8507..8508
+            DESTRUCT_FULL@8507..8508
+              NAME@8507..8508
+                IDENT@8507..8508 "o"
+          R_PAREN@8508..8509 ")"
+        COLONCOLON@8509..8511 "::"
+        WHITESPACE@8511..8516 "\n    "
+        EXPR_ARRAY_COMP@8516..8551
+          L_BRACK@8516..8517 "["
+          EXPR_INDEX_EXPR@8517..8521
+            LHS_EXPR@8517..8518
+              EXPR_VAR@8517..8518
+                NAME@8517..8518
+                  IDENT@8517..8518 "o"
+            L_BRACK@8518..8519 "["
+            EXPR_VAR@8519..8520
+              NAME@8519..8520
+                IDENT@8519..8520 "k"
+            R_BRACK@8520..8521 "]"
+          WHITESPACE@8521..8522 " "
+          FOR_SPEC@8522..8550
+            FOR_KW@8522..8525 "for"
+            WHITESPACE@8525..8526 " "
+            NAME@8526..8527
+              IDENT@8526..8527 "k"
+            WHITESPACE@8527..8528 " "
+            IN_KW@8528..8530 "in"
+            WHITESPACE@8530..8531 " "
+            EXPR_APPLY@8531..8550
+              EXPR_INDEX@8531..8547
+                EXPR_VAR@8531..8534
+                  NAME@8531..8534
+                    IDENT@8531..8534 "std"
+                DOT@8534..8535 "."
+                NAME@8535..8547
+                  IDENT@8535..8547 "objectFields"
+              ARGS_DESC@8547..8550
+                L_PAREN@8547..8548 "("
+                ARG@8548..8549
+                  EXPR_VAR@8548..8549
+                    NAME@8548..8549
+                      IDENT@8548..8549 "o"
+                R_PAREN@8549..8550 ")"
+          R_BRACK@8550..8551 "]"
+      COMMA@8551..8552 ","
+      WHITESPACE@8552..8556 "\n\n  "
+      MEMBER_FIELD_METHOD@8556..8619
+        FIELD_NAME_FIXED@8556..8571
+          NAME@8556..8571
+            IDENT@8556..8571 "objectValuesAll"
+        PARAMS_DESC@8571..8574
+          L_PAREN@8571..8572 "("
+          PARAM@8572..8573
+            DESTRUCT_FULL@8572..8573
+              NAME@8572..8573
+                IDENT@8572..8573 "o"
+          R_PAREN@8573..8574 ")"
+        COLONCOLON@8574..8576 "::"
+        WHITESPACE@8576..8581 "\n    "
+        EXPR_ARRAY_COMP@8581..8619
+          L_BRACK@8581..8582 "["
+          EXPR_INDEX_EXPR@8582..8586
+            LHS_EXPR@8582..8583
+              EXPR_VAR@8582..8583
+                NAME@8582..8583
+                  IDENT@8582..8583 "o"
+            L_BRACK@8583..8584 "["
+            EXPR_VAR@8584..8585
+              NAME@8584..8585
+                IDENT@8584..8585 "k"
+            R_BRACK@8585..8586 "]"
+          WHITESPACE@8586..8587 " "
+          FOR_SPEC@8587..8618
+            FOR_KW@8587..8590 "for"
+            WHITESPACE@8590..8591 " "
+            NAME@8591..8592
+              IDENT@8591..8592 "k"
+            WHITESPACE@8592..8593 " "
+            IN_KW@8593..8595 "in"
+            WHITESPACE@8595..8596 " "
+            EXPR_APPLY@8596..8618
+              EXPR_INDEX@8596..8615
+                EXPR_VAR@8596..8599
+                  NAME@8596..8599
+                    IDENT@8596..8599 "std"
+                DOT@8599..8600 "."
+                NAME@8600..8615
+                  IDENT@8600..8615 "objectFieldsAll"
+              ARGS_DESC@8615..8618
+                L_PAREN@8615..8616 "("
+                ARG@8616..8617
+                  EXPR_VAR@8616..8617
+                    NAME@8616..8617
+                      IDENT@8616..8617 "o"
+                R_PAREN@8617..8618 ")"
+          R_BRACK@8618..8619 "]"
+      COMMA@8619..8620 ","
+      WHITESPACE@8620..8624 "\n\n  "
+      MEMBER_FIELD_METHOD@8624..8758
+        FIELD_NAME_FIXED@8624..8635
+          NAME@8624..8635
+            IDENT@8624..8635 "resolvePath"
+        PARAMS_DESC@8635..8641
+          L_PAREN@8635..8636 "("
+          PARAM@8636..8637
+            DESTRUCT_FULL@8636..8637
+              NAME@8636..8637
+                IDENT@8636..8637 "f"
+          COMMA@8637..8638 ","
+          WHITESPACE@8638..8639 " "
+          PARAM@8639..8640
+            DESTRUCT_FULL@8639..8640
+              NAME@8639..8640
+                IDENT@8639..8640 "r"
+          R_PAREN@8640..8641 ")"
+        COLONCOLON@8641..8643 "::"
+        WHITESPACE@8643..8648 "\n    "
+        STMT_LOCAL@8648..8678
+          LOCAL_KW@8648..8653 "local"
+          WHITESPACE@8653..8654 " "
+          BIND_DESTRUCT@8654..8677
+            DESTRUCT_FULL@8654..8657
+              NAME@8654..8657
+                IDENT@8654..8657 "arr"
+            WHITESPACE@8657..8658 " "
+            ASSIGN@8658..8659 "="
+            WHITESPACE@8659..8660 " "
+            EXPR_APPLY@8660..8677
+              EXPR_INDEX@8660..8669
+                EXPR_VAR@8660..8663
+                  NAME@8660..8663
+                    IDENT@8660..8663 "std"
+                DOT@8663..8664 "."
+                NAME@8664..8669
+                  IDENT@8664..8669 "split"
+              ARGS_DESC@8669..8677
+                L_PAREN@8669..8670 "("
+                ARG@8670..8671
+                  EXPR_VAR@8670..8671
+                    NAME@8670..8671
+                      IDENT@8670..8671 "f"
+                COMMA@8671..8672 ","
+                WHITESPACE@8672..8673 " "
+                ARG@8673..8676
+                  EXPR_STRING@8673..8676
+                    STRING_SINGLE@8673..8676 "'/'"
+                R_PAREN@8676..8677 ")"
+          SEMI@8677..8678 ";"
+        WHITESPACE@8678..8683 "\n    "
+        EXPR_APPLY@8683..8758
+          EXPR_INDEX@8683..8691
+            EXPR_VAR@8683..8686
+              NAME@8683..8686
+                IDENT@8683..8686 "std"
+            DOT@8686..8687 "."
+            NAME@8687..8691
+              IDENT@8687..8691 "join"
+          ARGS_DESC@8691..8758
+            L_PAREN@8691..8692 "("
+            ARG@8692..8695
+              EXPR_STRING@8692..8695
+                STRING_SINGLE@8692..8695 "'/'"
+            COMMA@8695..8696 ","
+            WHITESPACE@8696..8697 " "
+            ARG@8697..8757
+              EXPR_BINARY@8697..8757
+                LHS_EXPR@8697..8751
+                  EXPR_APPLY@8697..8751
+                    EXPR_INDEX@8697..8710
+                      EXPR_VAR@8697..8700
+                        NAME@8697..8700
+                          IDENT@8697..8700 "std"
+                      DOT@8700..8701 "."
+                      NAME@8701..8710
+                        IDENT@8701..8710 "makeArray"
+                    ARGS_DESC@8710..8751
+                      L_PAREN@8710..8711 "("
+                      ARG@8711..8730
+                        EXPR_BINARY@8711..8730
+                          LHS_EXPR@8711..8726
+                            EXPR_APPLY@8711..8726
+                              EXPR_INDEX@8711..8721
+                                EXPR_VAR@8711..8714
+                                  NAME@8711..8714
+                                    IDENT@8711..8714 "std"
+                                DOT@8714..8715 "."
+                                NAME@8715..8721
+                                  IDENT@8715..8721 "length"
+                              ARGS_DESC@8721..8726
+                                L_PAREN@8721..8722 "("
+                                ARG@8722..8725
+                                  EXPR_VAR@8722..8725
+                                    NAME@8722..8725
+                                      IDENT@8722..8725 "arr"
+                                R_PAREN@8725..8726 ")"
+                          WHITESPACE@8726..8727 " "
+                          MINUS@8727..8728 "-"
+                          WHITESPACE@8728..8729 " "
+                          EXPR_NUMBER@8729..8730
+                            FLOAT@8729..8730 "1"
+                      COMMA@8730..8731 ","
+                      WHITESPACE@8731..8732 " "
+                      ARG@8732..8750
+                        EXPR_FUNCTION@8732..8750
+                          FUNCTION_KW@8732..8740 "function"
+                          PARAMS_DESC@8740..8743
+                            L_PAREN@8740..8741 "("
+                            PARAM@8741..8742
+                              DESTRUCT_FULL@8741..8742
+                                NAME@8741..8742
+                                  IDENT@8741..8742 "i"
+                            R_PAREN@8742..8743 ")"
+                          WHITESPACE@8743..8744 " "
+                          EXPR_INDEX_EXPR@8744..8750
+                            LHS_EXPR@8744..8747
+                              EXPR_VAR@8744..8747
+                                NAME@8744..8747
+                                  IDENT@8744..8747 "arr"
+                            L_BRACK@8747..8748 "["
+                            EXPR_VAR@8748..8749
+                              NAME@8748..8749
+                                IDENT@8748..8749 "i"
+                            R_BRACK@8749..8750 "]"
+                      R_PAREN@8750..8751 ")"
+                WHITESPACE@8751..8752 " "
+                PLUS@8752..8753 "+"
+                WHITESPACE@8753..8754 " "
+                EXPR_ARRAY@8754..8757
+                  L_BRACK@8754..8755 "["
+                  EXPR_VAR@8755..8756
+                    NAME@8755..8756
+                      IDENT@8755..8756 "r"
+                  R_BRACK@8756..8757 "]"
+            R_PAREN@8757..8758 ")"
+      COMMA@8758..8759 ","
+      WHITESPACE@8759..8763 "\n\n  "
+      MEMBER_FIELD_METHOD@8763..9216
+        FIELD_NAME_FIXED@8763..8768
+          NAME@8763..8768
+            IDENT@8763..8768 "prune"
+        PARAMS_DESC@8768..8771
+          L_PAREN@8768..8769 "("
+          PARAM@8769..8770
+            DESTRUCT_FULL@8769..8770
+              NAME@8769..8770
+                IDENT@8769..8770 "a"
+          R_PAREN@8770..8771 ")"
+        COLONCOLON@8771..8773 "::"
+        WHITESPACE@8773..8778 "\n    "
+        STMT_LOCAL@8778..8982
+          LOCAL_KW@8778..8783 "local"
+          WHITESPACE@8783..8784 " "
+          BIND_FUNCTION@8784..8981
+            NAME@8784..8793
+              IDENT@8784..8793 "isContent"
+            PARAMS_DESC@8793..8796
+              L_PAREN@8793..8794 "("
+              PARAM@8794..8795
+                DESTRUCT_FULL@8794..8795
+                  NAME@8794..8795
+                    IDENT@8794..8795 "b"
+              R_PAREN@8795..8796 ")"
+            WHITESPACE@8796..8797 " "
+            ASSIGN@8797..8798 "="
+            WHITESPACE@8798..8805 "\n      "
+            EXPR_IF_THEN_ELSE@8805..8981
+              IF_KW@8805..8807 "if"
+              WHITESPACE@8807..8808 " "
+              EXPR_BINARY@8808..8817
+                LHS_EXPR@8808..8809
+                  EXPR_VAR@8808..8809
+                    NAME@8808..8809
+                      IDENT@8808..8809 "b"
+                WHITESPACE@8809..8810 " "
+                EQ@8810..8812 "=="
+                WHITESPACE@8812..8813 " "
+                EXPR_LITERAL@8813..8817
+                  NULL_KW@8813..8817 "null"
+              WHITESPACE@8817..8818 " "
+              THEN_KW@8818..8822 "then"
+              WHITESPACE@8822..8831 "\n        "
+              TRUE_EXPR@8831..8836
+                EXPR_LITERAL@8831..8836
+                  FALSE_KW@8831..8836 "false"
+              WHITESPACE@8836..8843 "\n      "
+              ELSE_KW@8843..8847 "else"
+              WHITESPACE@8847..8848 " "
+              FALSE_EXPR@8848..8981
+                EXPR_IF_THEN_ELSE@8848..8981
+                  IF_KW@8848..8850 "if"
+                  WHITESPACE@8850..8851 " "
+                  EXPR_APPLY@8851..8865
+                    EXPR_INDEX@8851..8862
+                      EXPR_VAR@8851..8854
+                        NAME@8851..8854
+                          IDENT@8851..8854 "std"
+                      DOT@8854..8855 "."
+                      NAME@8855..8862
+                        IDENT@8855..8862 "isArray"
+                    ARGS_DESC@8862..8865
+                      L_PAREN@8862..8863 "("
+                      ARG@8863..8864
+                        EXPR_VAR@8863..8864
+                          NAME@8863..8864
+                            IDENT@8863..8864 "b"
+                      R_PAREN@8864..8865 ")"
+                  WHITESPACE@8865..8866 " "
+                  THEN_KW@8866..8870 "then"
+                  WHITESPACE@8870..8879 "\n        "
+                  TRUE_EXPR@8879..8896
+                    EXPR_BINARY@8879..8896
+                      LHS_EXPR@8879..8892
+                        EXPR_APPLY@8879..8892
+                          EXPR_INDEX@8879..8889
+                            EXPR_VAR@8879..8882
+                              NAME@8879..8882
+                                IDENT@8879..8882 "std"
+                            DOT@8882..8883 "."
+                            NAME@8883..8889
+                              IDENT@8883..8889 "length"
+                          ARGS_DESC@8889..8892
+                            L_PAREN@8889..8890 "("
+                            ARG@8890..8891
+                              EXPR_VAR@8890..8891
+                                NAME@8890..8891
+                                  IDENT@8890..8891 "b"
+                            R_PAREN@8891..8892 ")"
+                      WHITESPACE@8892..8893 " "
+                      GT@8893..8894 ">"
+                      WHITESPACE@8894..8895 " "
+                      EXPR_NUMBER@8895..8896
+                        FLOAT@8895..8896 "0"
+                  WHITESPACE@8896..8903 "\n      "
+                  ELSE_KW@8903..8907 "else"
+                  WHITESPACE@8907..8908 " "
+                  FALSE_EXPR@8908..8981
+                    EXPR_IF_THEN_ELSE@8908..8981
+                      IF_KW@8908..8910 "if"
+                      WHITESPACE@8910..8911 " "
+                      EXPR_APPLY@8911..8926
+                        EXPR_INDEX@8911..8923
+                          EXPR_VAR@8911..8914
+                            NAME@8911..8914
+                              IDENT@8911..8914 "std"
+                          DOT@8914..8915 "."
+                          NAME@8915..8923
+                            IDENT@8915..8923 "isObject"
+                        ARGS_DESC@8923..8926
+                          L_PAREN@8923..8924 "("
+                          ARG@8924..8925
+                            EXPR_VAR@8924..8925
+                              NAME@8924..8925
+                                IDENT@8924..8925 "b"
+                          R_PAREN@8925..8926 ")"
+                      WHITESPACE@8926..8927 " "
+                      THEN_KW@8927..8931 "then"
+                      WHITESPACE@8931..8940 "\n        "
+                      TRUE_EXPR@8940..8957
+                        EXPR_BINARY@8940..8957
+                          LHS_EXPR@8940..8953
+                            EXPR_APPLY@8940..8953
+                              EXPR_INDEX@8940..8950
+                                EXPR_VAR@8940..8943
+                                  NAME@8940..8943
+                                    IDENT@8940..8943 "std"
+                                DOT@8943..8944 "."
+                                NAME@8944..8950
+                                  IDENT@8944..8950 "length"
+                              ARGS_DESC@8950..8953
+                                L_PAREN@8950..8951 "("
+                                ARG@8951..8952
+                                  EXPR_VAR@8951..8952
+                                    NAME@8951..8952
+                                      IDENT@8951..8952 "b"
+                                R_PAREN@8952..8953 ")"
+                          WHITESPACE@8953..8954 " "
+                          GT@8954..8955 ">"
+                          WHITESPACE@8955..8956 " "
+                          EXPR_NUMBER@8956..8957
+                            FLOAT@8956..8957 "0"
+                      WHITESPACE@8957..8964 "\n      "
+                      ELSE_KW@8964..8968 "else"
+                      WHITESPACE@8968..8977 "\n        "
+                      FALSE_EXPR@8977..8981
+                        EXPR_LITERAL@8977..8981
+                          TRUE_KW@8977..8981 "true"
+          SEMI@8981..8982 ";"
+        WHITESPACE@8982..8987 "\n    "
+        EXPR_IF_THEN_ELSE@8987..9216
+          IF_KW@8987..8989 "if"
+          WHITESPACE@8989..8990 " "
+          EXPR_APPLY@8990..9004
+            EXPR_INDEX@8990..9001
+              EXPR_VAR@8990..8993
+                NAME@8990..8993
+                  IDENT@8990..8993 "std"
+              DOT@8993..8994 "."
+              NAME@8994..9001
+                IDENT@8994..9001 "isArray"
+            ARGS_DESC@9001..9004
+              L_PAREN@9001..9002 "("
+              ARG@9002..9003
+                EXPR_VAR@9002..9003
+                  NAME@9002..9003
+                    IDENT@9002..9003 "a"
+              R_PAREN@9003..9004 ")"
+          WHITESPACE@9004..9005 " "
+          THEN_KW@9005..9009 "then"
+          WHITESPACE@9009..9016 "\n      "
+          TRUE_EXPR@9016..9066
+            EXPR_ARRAY_COMP@9016..9066
+              L_BRACK@9016..9017 "["
+              EXPR_APPLY@9017..9029
+                EXPR_INDEX@9017..9026
+                  EXPR_VAR@9017..9020
+                    NAME@9017..9020
+                      IDENT@9017..9020 "std"
+                  DOT@9020..9021 "."
+                  NAME@9021..9026
+                    IDENT@9021..9026 "prune"
+                ARGS_DESC@9026..9029
+                  L_PAREN@9026..9027 "("
+                  ARG@9027..9028
+                    EXPR_VAR@9027..9028
+                      NAME@9027..9028
+                        IDENT@9027..9028 "x"
+                  R_PAREN@9028..9029 ")"
+              WHITESPACE@9029..9030 " "
+              FOR_SPEC@9030..9040
+                FOR_KW@9030..9033 "for"
+                WHITESPACE@9033..9034 " "
+                NAME@9034..9035
+                  IDENT@9034..9035 "x"
+                WHITESPACE@9035..9036 " "
+                IN_KW@9036..9038 "in"
+                WHITESPACE@9038..9039 " "
+                EXPR_VAR@9039..9040
+                  NAME@9039..9040
+                    IDENT@9039..9040 "a"
+              WHITESPACE@9040..9041 " "
+              IF_SPEC@9041..9065
+                IF_KW@9041..9043 "if"
+                WHITESPACE@9043..9044 " "
+                EXPR_APPLY@9044..9065
+                  EXPR_VAR@9044..9053
+                    NAME@9044..9053
+                      IDENT@9044..9053 "isContent"
+                  ARGS_DESC@9053..9065
+                    L_PAREN@9053..9054 "("
+                    ARG@9054..9064
+                      EXPR_APPLY@9054..9064
+                        EXPR_INDEX@9054..9061
+                          EXPR_LITERAL@9054..9055
+                            DOLLAR@9054..9055 "$"
+                          DOT@9055..9056 "."
+                          NAME@9056..9061
+                            IDENT@9056..9061 "prune"
+                        ARGS_DESC@9061..9064
+                          L_PAREN@9061..9062 "("
+                          ARG@9062..9063
+                            EXPR_VAR@9062..9063
+                              NAME@9062..9063
+                                IDENT@9062..9063 "x"
+                          R_PAREN@9063..9064 ")"
+                    R_PAREN@9064..9065 ")"
+              R_BRACK@9065..9066 "]"
+          WHITESPACE@9066..9071 "\n    "
+          ELSE_KW@9071..9075 "else"
+          WHITESPACE@9075..9076 " "
+          FALSE_EXPR@9076..9216
+            EXPR_IF_THEN_ELSE@9076..9216
+              IF_KW@9076..9078 "if"
+              WHITESPACE@9078..9079 " "
+              EXPR_APPLY@9079..9094
+                EXPR_INDEX@9079..9091
+                  EXPR_VAR@9079..9082
+                    NAME@9079..9082
+                      IDENT@9079..9082 "std"
+                  DOT@9082..9083 "."
+                  NAME@9083..9091
+                    IDENT@9083..9091 "isObject"
+                ARGS_DESC@9091..9094
+                  L_PAREN@9091..9092 "("
+                  ARG@9092..9093
+                    EXPR_VAR@9092..9093
+                      NAME@9092..9093
+                        IDENT@9092..9093 "a"
+                  R_PAREN@9093..9094 ")"
+              WHITESPACE@9094..9095 " "
+              THEN_KW@9095..9099 "then"
+              WHITESPACE@9099..9100 " "
+              TRUE_EXPR@9100..9203
+                EXPR_OBJECT@9100..9203
+                  OBJ_BODY_COMP@9100..9203
+                    L_BRACE@9100..9101 "{"
+                    WHITESPACE@9101..9108 "\n      "
+                    MEMBER_FIELD_NORMAL@9108..9126
+                      FIELD_NAME_DYNAMIC@9108..9111
+                        L_BRACK@9108..9109 "["
+                        EXPR_VAR@9109..9110
+                          NAME@9109..9110
+                            IDENT@9109..9110 "x"
+                        R_BRACK@9110..9111 "]"
+                      COLON@9111..9112 ":"
+                      WHITESPACE@9112..9113 " "
+                      EXPR_APPLY@9113..9126
+                        EXPR_INDEX@9113..9120
+                          EXPR_LITERAL@9113..9114
+                            DOLLAR@9113..9114 "$"
+                          DOT@9114..9115 "."
+                          NAME@9115..9120
+                            IDENT@9115..9120 "prune"
+                        ARGS_DESC@9120..9126
+                          L_PAREN@9120..9121 "("
+                          ARG@9121..9125
+                            EXPR_INDEX_EXPR@9121..9125
+                              LHS_EXPR@9121..9122
+                                EXPR_VAR@9121..9122
+                                  NAME@9121..9122
+                                    IDENT@9121..9122 "a"
+                              L_BRACK@9122..9123 "["
+                              EXPR_VAR@9123..9124
+                                NAME@9123..9124
+                                  IDENT@9123..9124 "x"
+                              R_BRACK@9124..9125 "]"
+                          R_PAREN@9125..9126 ")"
+                    WHITESPACE@9126..9133 "\n      "
+                    FOR_SPEC@9133..9161
+                      FOR_KW@9133..9136 "for"
+                      WHITESPACE@9136..9137 " "
+                      NAME@9137..9138
+                        IDENT@9137..9138 "x"
+                      WHITESPACE@9138..9139 " "
+                      IN_KW@9139..9141 "in"
+                      WHITESPACE@9141..9142 " "
+                      EXPR_APPLY@9142..9161
+                        EXPR_INDEX@9142..9158
+                          EXPR_VAR@9142..9145
+                            NAME@9142..9145
+                              IDENT@9142..9145 "std"
+                          DOT@9145..9146 "."
+                          NAME@9146..9158
+                            IDENT@9146..9158 "objectFields"
+                        ARGS_DESC@9158..9161
+                          L_PAREN@9158..9159 "("
+                          ARG@9159..9160
+                            EXPR_VAR@9159..9160
+                              NAME@9159..9160
+                                IDENT@9159..9160 "a"
+                          R_PAREN@9160..9161 ")"
+                    WHITESPACE@9161..9168 "\n      "
+                    IF_SPEC@9168..9197
+                      IF_KW@9168..9170 "if"
+                      WHITESPACE@9170..9171 " "
+                      EXPR_APPLY@9171..9197
+                        EXPR_VAR@9171..9180
+                          NAME@9171..9180
+                            IDENT@9171..9180 "isContent"
+                        ARGS_DESC@9180..9197
+                          L_PAREN@9180..9181 "("
+                          ARG@9181..9196
+                            EXPR_APPLY@9181..9196
+                              EXPR_INDEX@9181..9190
+                                EXPR_VAR@9181..9184
+                                  NAME@9181..9184
+                                    IDENT@9181..9184 "std"
+                                DOT@9184..9185 "."
+                                NAME@9185..9190
+                                  IDENT@9185..9190 "prune"
+                              ARGS_DESC@9190..9196
+                                L_PAREN@9190..9191 "("
+                                ARG@9191..9195
+                                  EXPR_INDEX_EXPR@9191..9195
+                                    LHS_EXPR@9191..9192
+                                      EXPR_VAR@9191..9192
+                                        NAME@9191..9192
+                                          IDENT@9191..9192 "a"
+                                    L_BRACK@9192..9193 "["
+                                    EXPR_VAR@9193..9194
+                                      NAME@9193..9194
+                                        IDENT@9193..9194 "x"
+                                    R_BRACK@9194..9195 "]"
+                                R_PAREN@9195..9196 ")"
+                          R_PAREN@9196..9197 ")"
+                    WHITESPACE@9197..9202 "\n    "
+                    R_BRACE@9202..9203 "}"
+              WHITESPACE@9203..9204 " "
+              ELSE_KW@9204..9208 "else"
+              WHITESPACE@9208..9215 "\n      "
+              FALSE_EXPR@9215..9216
+                EXPR_VAR@9215..9216
+                  NAME@9215..9216
+                    IDENT@9215..9216 "a"
+      COMMA@9216..9217 ","
+      WHITESPACE@9217..9221 "\n\n  "
+      MEMBER_FIELD_METHOD@9221..9436
+        FIELD_NAME_FIXED@9221..9225
+          NAME@9221..9225
+            IDENT@9221..9225 "find"
+        PARAMS_DESC@9225..9237
+          L_PAREN@9225..9226 "("
+          PARAM@9226..9231
+            DESTRUCT_FULL@9226..9231
+              NAME@9226..9231
+                IDENT@9226..9231 "value"
+          COMMA@9231..9232 ","
+          WHITESPACE@9232..9233 " "
+          PARAM@9233..9236
+            DESTRUCT_FULL@9233..9236
+              NAME@9233..9236
+                IDENT@9233..9236 "arr"
+          R_PAREN@9236..9237 ")"
+        COLONCOLON@9237..9239 "::"
+        WHITESPACE@9239..9244 "\n    "
+        EXPR_IF_THEN_ELSE@9244..9436
+          IF_KW@9244..9246 "if"
+          WHITESPACE@9246..9247 " "
+          EXPR_UNARY@9247..9264
+            NOT@9247..9248 "!"
+            EXPR_APPLY@9248..9264
+              EXPR_INDEX@9248..9259
+                EXPR_VAR@9248..9251
+                  NAME@9248..9251
+                    IDENT@9248..9251 "std"
+                DOT@9251..9252 "."
+                NAME@9252..9259
+                  IDENT@9252..9259 "isArray"
+              ARGS_DESC@9259..9264
+                L_PAREN@9259..9260 "("
+                ARG@9260..9263
+                  EXPR_VAR@9260..9263
+                    NAME@9260..9263
+                      IDENT@9260..9263 "arr"
+                R_PAREN@9263..9264 ")"
+          WHITESPACE@9264..9265 " "
+          THEN_KW@9265..9269 "then"
+          WHITESPACE@9269..9276 "\n      "
+          TRUE_EXPR@9276..9346
+            EXPR_ERROR@9276..9346
+              ERROR_KW@9276..9281 "error"
+              WHITESPACE@9281..9282 " "
+              EXPR_BINARY@9282..9346
+                LHS_EXPR@9282..9330
+                  EXPR_STRING@9282..9330
+                    STRING_SINGLE@9282..9330 "'find second paramete ..."
+                WHITESPACE@9330..9331 " "
+                PLUS@9331..9332 "+"
+                WHITESPACE@9332..9333 " "
+                EXPR_APPLY@9333..9346
+                  EXPR_INDEX@9333..9341
+                    EXPR_VAR@9333..9336
+                      NAME@9333..9336
+                        IDENT@9333..9336 "std"
+                    DOT@9336..9337 "."
+                    NAME@9337..9341
+                      IDENT@9337..9341 "type"
+                  ARGS_DESC@9341..9346
+                    L_PAREN@9341..9342 "("
+                    ARG@9342..9345
+                      EXPR_VAR@9342..9345
+                        NAME@9342..9345
+                          IDENT@9342..9345 "arr"
+                    R_PAREN@9345..9346 ")"
+          WHITESPACE@9346..9351 "\n    "
+          ELSE_KW@9351..9355 "else"
+          WHITESPACE@9355..9362 "\n      "
+          FALSE_EXPR@9362..9436
+            EXPR_APPLY@9362..9436
+              EXPR_INDEX@9362..9372
+                EXPR_VAR@9362..9365
+                  NAME@9362..9365
+                    IDENT@9362..9365 "std"
+                DOT@9365..9366 "."
+                NAME@9366..9372
+                  IDENT@9366..9372 "filter"
+              ARGS_DESC@9372..9436
+                L_PAREN@9372..9373 "("
+                ARG@9373..9400
+                  EXPR_FUNCTION@9373..9400
+                    FUNCTION_KW@9373..9381 "function"
+                    PARAMS_DESC@9381..9384
+                      L_PAREN@9381..9382 "("
+                      PARAM@9382..9383
+                        DESTRUCT_FULL@9382..9383
+                          NAME@9382..9383
+                            IDENT@9382..9383 "i"
+                      R_PAREN@9383..9384 ")"
+                    WHITESPACE@9384..9385 " "
+                    EXPR_BINARY@9385..9400
+                      LHS_EXPR@9385..9391
+                        EXPR_INDEX_EXPR@9385..9391
+                          LHS_EXPR@9385..9388
+                            EXPR_VAR@9385..9388
+                              NAME@9385..9388
+                                IDENT@9385..9388 "arr"
+                          L_BRACK@9388..9389 "["
+                          EXPR_VAR@9389..9390
+                            NAME@9389..9390
+                              IDENT@9389..9390 "i"
+                          R_BRACK@9390..9391 "]"
+                      WHITESPACE@9391..9392 " "
+                      EQ@9392..9394 "=="
+                      WHITESPACE@9394..9395 " "
+                      EXPR_VAR@9395..9400
+                        NAME@9395..9400
+                          IDENT@9395..9400 "value"
+                COMMA@9400..9401 ","
+                WHITESPACE@9401..9402 " "
+                ARG@9402..9435
+                  EXPR_APPLY@9402..9435
+                    EXPR_INDEX@9402..9411
+                      EXPR_VAR@9402..9405
+                        NAME@9402..9405
+                          IDENT@9402..9405 "std"
+                      DOT@9405..9406 "."
+                      NAME@9406..9411
+                        IDENT@9406..9411 "range"
+                    ARGS_DESC@9411..9435
+                      L_PAREN@9411..9412 "("
+                      ARG@9412..9413
+                        EXPR_NUMBER@9412..9413
+                          FLOAT@9412..9413 "0"
+                      COMMA@9413..9414 ","
+                      WHITESPACE@9414..9415 " "
+                      ARG@9415..9434
+                        EXPR_BINARY@9415..9434
+                          LHS_EXPR@9415..9430
+                            EXPR_APPLY@9415..9430
+                              EXPR_INDEX@9415..9425
+                                EXPR_VAR@9415..9418
+                                  NAME@9415..9418
+                                    IDENT@9415..9418 "std"
+                                DOT@9418..9419 "."
+                                NAME@9419..9425
+                                  IDENT@9419..9425 "length"
+                              ARGS_DESC@9425..9430
+                                L_PAREN@9425..9426 "("
+                                ARG@9426..9429
+                                  EXPR_VAR@9426..9429
+                                    NAME@9426..9429
+                                      IDENT@9426..9429 "arr"
+                                R_PAREN@9429..9430 ")"
+                          WHITESPACE@9430..9431 " "
+                          MINUS@9431..9432 "-"
+                          WHITESPACE@9432..9433 " "
+                          EXPR_NUMBER@9433..9434
+                            FLOAT@9433..9434 "1"
+                      R_PAREN@9434..9435 ")"
+                R_PAREN@9435..9436 ")"
+      COMMA@9436..9437 ","
+      WHITESPACE@9437..9441 "\n\n  "
+      SINGLE_LINE_SLASH_COMMENT@9441..9451 "// Compat\n"
+      WHITESPACE@9451..9453 "  "
+      MEMBER_FIELD_METHOD@9453..9563
+        FIELD_NAME_FIXED@9453..9468
+          NAME@9453..9468
+            IDENT@9453..9468 "__compare_array"
+        PARAMS_DESC@9468..9480
+          L_PAREN@9468..9469 "("
+          PARAM@9469..9473
+            DESTRUCT_FULL@9469..9473
+              NAME@9469..9473
+                IDENT@9469..9473 "arr1"
+          COMMA@9473..9474 ","
+          WHITESPACE@9474..9475 " "
+          PARAM@9475..9479
+            DESTRUCT_FULL@9475..9479
+              NAME@9475..9479
+                IDENT@9475..9479 "arr2"
+          R_PAREN@9479..9480 ")"
+        COLONCOLON@9480..9482 "::"
+        WHITESPACE@9482..9487 "\n    "
+        EXPR_ASSERT@9487..9563
+          ASSERTION@9487..9532
+            ASSERT_KW@9487..9493 "assert"
+            WHITESPACE@9493..9494 " "
+            LHS_EXPR@9494..9532
+              EXPR_BINARY@9494..9532
+                LHS_EXPR@9494..9511
+                  EXPR_APPLY@9494..9511
+                    EXPR_INDEX@9494..9505
+                      EXPR_VAR@9494..9497
+                        NAME@9494..9497
+                          IDENT@9494..9497 "std"
+                      DOT@9497..9498 "."
+                      NAME@9498..9505
+                        IDENT@9498..9505 "isArray"
+                    ARGS_DESC@9505..9511
+                      L_PAREN@9505..9506 "("
+                      ARG@9506..9510
+                        EXPR_VAR@9506..9510
+                          NAME@9506..9510
+                            IDENT@9506..9510 "arr1"
+                      R_PAREN@9510..9511 ")"
+                WHITESPACE@9511..9512 " "
+                AND@9512..9514 "&&"
                 WHITESPACE@9514..9515 " "
-                ARG@9515..9518
-                  EXPR_STRING@9515..9518
-                    STRING_SINGLE@9515..9518 "'/'"
-                R_PAREN@9518..9519 ")"
-          SEMI@9519..9520 ";"
-          WHITESPACE@9520..9525 "\n    "
-          EXPR_APPLY@9525..9600
-            EXPR_INDEX@9525..9533
-              EXPR_VAR@9525..9528
-                NAME@9525..9528
-                  IDENT@9525..9528 "std"
-              DOT@9528..9529 "."
-              NAME@9529..9533
-                IDENT@9529..9533 "join"
-            ARGS_DESC@9533..9600
-              L_PAREN@9533..9534 "("
-              ARG@9534..9537
-                EXPR_STRING@9534..9537
-                  STRING_SINGLE@9534..9537 "'/'"
-              COMMA@9537..9538 ","
-              WHITESPACE@9538..9539 " "
-              ARG@9539..9599
-                EXPR_BINARY@9539..9599
-                  LHS_EXPR@9539..9593
-                    EXPR_APPLY@9539..9593
-                      EXPR_INDEX@9539..9552
-                        EXPR_VAR@9539..9542
-                          NAME@9539..9542
-                            IDENT@9539..9542 "std"
-                        DOT@9542..9543 "."
-                        NAME@9543..9552
-                          IDENT@9543..9552 "makeArray"
-                      ARGS_DESC@9552..9593
-                        L_PAREN@9552..9553 "("
-                        ARG@9553..9572
-                          EXPR_BINARY@9553..9572
-                            LHS_EXPR@9553..9568
-                              EXPR_APPLY@9553..9568
-                                EXPR_INDEX@9553..9563
-                                  EXPR_VAR@9553..9556
-                                    NAME@9553..9556
-                                      IDENT@9553..9556 "std"
-                                  DOT@9556..9557 "."
-                                  NAME@9557..9563
-                                    IDENT@9557..9563 "length"
-                                ARGS_DESC@9563..9568
-                                  L_PAREN@9563..9564 "("
-                                  ARG@9564..9567
-                                    EXPR_VAR@9564..9567
-                                      NAME@9564..9567
-                                        IDENT@9564..9567 "arr"
-                                  R_PAREN@9567..9568 ")"
-                            WHITESPACE@9568..9569 " "
-                            MINUS@9569..9570 "-"
-                            WHITESPACE@9570..9571 " "
-                            EXPR_NUMBER@9571..9572
-                              FLOAT@9571..9572 "1"
-                        COMMA@9572..9573 ","
-                        WHITESPACE@9573..9574 " "
-                        ARG@9574..9592
-                          EXPR_FUNCTION@9574..9592
-                            FUNCTION_KW@9574..9582 "function"
-                            PARAMS_DESC@9582..9585
-                              L_PAREN@9582..9583 "("
-                              PARAM@9583..9584
-                                DESTRUCT_FULL@9583..9584
-                                  NAME@9583..9584
-                                    IDENT@9583..9584 "i"
-                              R_PAREN@9584..9585 ")"
-                            WHITESPACE@9585..9586 " "
-                            EXPR_INDEX_EXPR@9586..9592
-                              LHS_EXPR@9586..9589
-                                EXPR_VAR@9586..9589
-                                  NAME@9586..9589
-                                    IDENT@9586..9589 "arr"
-                              L_BRACK@9589..9590 "["
-                              EXPR_VAR@9590..9591
-                                NAME@9590..9591
-                                  IDENT@9590..9591 "i"
-                              R_BRACK@9591..9592 "]"
-                        R_PAREN@9592..9593 ")"
-                  WHITESPACE@9593..9594 " "
-                  PLUS@9594..9595 "+"
-                  WHITESPACE@9595..9596 " "
-                  EXPR_ARRAY@9596..9599
-                    L_BRACK@9596..9597 "["
-                    EXPR_VAR@9597..9598
-                      NAME@9597..9598
-                        IDENT@9597..9598 "r"
-                    R_BRACK@9598..9599 "]"
-              R_PAREN@9599..9600 ")"
-      COMMA@9600..9601 ","
-      WHITESPACE@9601..9605 "\n\n  "
-      MEMBER_FIELD_METHOD@9605..10058
-        FIELD_NAME_FIXED@9605..9610
-          NAME@9605..9610
-            IDENT@9605..9610 "prune"
-        PARAMS_DESC@9610..9613
-          L_PAREN@9610..9611 "("
-          PARAM@9611..9612
-            DESTRUCT_FULL@9611..9612
-              NAME@9611..9612
-                IDENT@9611..9612 "a"
-          R_PAREN@9612..9613 ")"
-        COLONCOLON@9613..9615 "::"
-        WHITESPACE@9615..9620 "\n    "
-        EXPR_LOCAL@9620..10058
-          LOCAL_KW@9620..9625 "local"
+                EXPR_APPLY@9515..9532
+                  EXPR_INDEX@9515..9526
+                    EXPR_VAR@9515..9518
+                      NAME@9515..9518
+                        IDENT@9515..9518 "std"
+                    DOT@9518..9519 "."
+                    NAME@9519..9526
+                      IDENT@9519..9526 "isArray"
+                  ARGS_DESC@9526..9532
+                    L_PAREN@9526..9527 "("
+                    ARG@9527..9531
+                      EXPR_VAR@9527..9531
+                        NAME@9527..9531
+                          IDENT@9527..9531 "arr2"
+                    R_PAREN@9531..9532 ")"
+          SEMI@9532..9533 ";"
+          WHITESPACE@9533..9538 "\n    "
+          EXPR_APPLY@9538..9563
+            EXPR_INDEX@9538..9551
+              EXPR_VAR@9538..9541
+                NAME@9538..9541
+                  IDENT@9538..9541 "std"
+              DOT@9541..9542 "."
+              NAME@9542..9551
+                IDENT@9542..9551 "__compare"
+            ARGS_DESC@9551..9563
+              L_PAREN@9551..9552 "("
+              ARG@9552..9556
+                EXPR_VAR@9552..9556
+                  NAME@9552..9556
+                    IDENT@9552..9556 "arr1"
+              COMMA@9556..9557 ","
+              WHITESPACE@9557..9558 " "
+              ARG@9558..9562
+                EXPR_VAR@9558..9562
+                  NAME@9558..9562
+                    IDENT@9558..9562 "arr2"
+              R_PAREN@9562..9563 ")"
+      COMMA@9563..9564 ","
+      WHITESPACE@9564..9567 "\n  "
+      MEMBER_FIELD_METHOD@9567..9631
+        FIELD_NAME_FIXED@9567..9579
+          NAME@9567..9579
+            IDENT@9567..9579 "__array_less"
+        PARAMS_DESC@9579..9591
+          L_PAREN@9579..9580 "("
+          PARAM@9580..9584
+            DESTRUCT_FULL@9580..9584
+              NAME@9580..9584
+                IDENT@9580..9584 "arr1"
+          COMMA@9584..9585 ","
+          WHITESPACE@9585..9586 " "
+          PARAM@9586..9590
+            DESTRUCT_FULL@9586..9590
+              NAME@9586..9590
+                IDENT@9586..9590 "arr2"
+          R_PAREN@9590..9591 ")"
+        COLONCOLON@9591..9593 "::"
+        WHITESPACE@9593..9594 " "
+        EXPR_BINARY@9594..9631
+          LHS_EXPR@9594..9625
+            EXPR_APPLY@9594..9625
+              EXPR_INDEX@9594..9613
+                EXPR_VAR@9594..9597
+                  NAME@9594..9597
+                    IDENT@9594..9597 "std"
+                DOT@9597..9598 "."
+                NAME@9598..9613
+                  IDENT@9598..9613 "__compare_array"
+              ARGS_DESC@9613..9625
+                L_PAREN@9613..9614 "("
+                ARG@9614..9618
+                  EXPR_VAR@9614..9618
+                    NAME@9614..9618
+                      IDENT@9614..9618 "arr1"
+                COMMA@9618..9619 ","
+                WHITESPACE@9619..9620 " "
+                ARG@9620..9624
+                  EXPR_VAR@9620..9624
+                    NAME@9620..9624
+                      IDENT@9620..9624 "arr2"
+                R_PAREN@9624..9625 ")"
           WHITESPACE@9625..9626 " "
-          BIND_FUNCTION@9626..9823
-            NAME@9626..9635
-              IDENT@9626..9635 "isContent"
-            PARAMS_DESC@9635..9638
-              L_PAREN@9635..9636 "("
-              PARAM@9636..9637
-                DESTRUCT_FULL@9636..9637
-                  NAME@9636..9637
-                    IDENT@9636..9637 "b"
-              R_PAREN@9637..9638 ")"
-            WHITESPACE@9638..9639 " "
-            ASSIGN@9639..9640 "="
-            WHITESPACE@9640..9647 "\n      "
-            EXPR_IF_THEN_ELSE@9647..9823
-              IF_KW@9647..9649 "if"
-              WHITESPACE@9649..9650 " "
-              EXPR_BINARY@9650..9659
-                LHS_EXPR@9650..9651
-                  EXPR_VAR@9650..9651
-                    NAME@9650..9651
-                      IDENT@9650..9651 "b"
-                WHITESPACE@9651..9652 " "
-                EQ@9652..9654 "=="
-                WHITESPACE@9654..9655 " "
-                EXPR_LITERAL@9655..9659
-                  NULL_KW@9655..9659 "null"
-              WHITESPACE@9659..9660 " "
-              THEN_KW@9660..9664 "then"
-              WHITESPACE@9664..9673 "\n        "
-              TRUE_EXPR@9673..9678
-                EXPR_LITERAL@9673..9678
-                  FALSE_KW@9673..9678 "false"
-              WHITESPACE@9678..9685 "\n      "
-              ELSE_KW@9685..9689 "else"
-              WHITESPACE@9689..9690 " "
-              FALSE_EXPR@9690..9823
-                EXPR_IF_THEN_ELSE@9690..9823
-                  IF_KW@9690..9692 "if"
-                  WHITESPACE@9692..9693 " "
-                  EXPR_APPLY@9693..9707
-                    EXPR_INDEX@9693..9704
-                      EXPR_VAR@9693..9696
-                        NAME@9693..9696
-                          IDENT@9693..9696 "std"
-                      DOT@9696..9697 "."
-                      NAME@9697..9704
-                        IDENT@9697..9704 "isArray"
-                    ARGS_DESC@9704..9707
-                      L_PAREN@9704..9705 "("
-                      ARG@9705..9706
-                        EXPR_VAR@9705..9706
-                          NAME@9705..9706
-                            IDENT@9705..9706 "b"
-                      R_PAREN@9706..9707 ")"
-                  WHITESPACE@9707..9708 " "
-                  THEN_KW@9708..9712 "then"
-                  WHITESPACE@9712..9721 "\n        "
-                  TRUE_EXPR@9721..9738
-                    EXPR_BINARY@9721..9738
-                      LHS_EXPR@9721..9734
-                        EXPR_APPLY@9721..9734
-                          EXPR_INDEX@9721..9731
-                            EXPR_VAR@9721..9724
-                              NAME@9721..9724
-                                IDENT@9721..9724 "std"
-                            DOT@9724..9725 "."
-                            NAME@9725..9731
-                              IDENT@9725..9731 "length"
-                          ARGS_DESC@9731..9734
-                            L_PAREN@9731..9732 "("
-                            ARG@9732..9733
-                              EXPR_VAR@9732..9733
-                                NAME@9732..9733
-                                  IDENT@9732..9733 "b"
-                            R_PAREN@9733..9734 ")"
-                      WHITESPACE@9734..9735 " "
-                      GT@9735..9736 ">"
-                      WHITESPACE@9736..9737 " "
-                      EXPR_NUMBER@9737..9738
-                        FLOAT@9737..9738 "0"
-                  WHITESPACE@9738..9745 "\n      "
-                  ELSE_KW@9745..9749 "else"
-                  WHITESPACE@9749..9750 " "
-                  FALSE_EXPR@9750..9823
-                    EXPR_IF_THEN_ELSE@9750..9823
-                      IF_KW@9750..9752 "if"
-                      WHITESPACE@9752..9753 " "
-                      EXPR_APPLY@9753..9768
-                        EXPR_INDEX@9753..9765
-                          EXPR_VAR@9753..9756
-                            NAME@9753..9756
-                              IDENT@9753..9756 "std"
-                          DOT@9756..9757 "."
-                          NAME@9757..9765
-                            IDENT@9757..9765 "isObject"
-                        ARGS_DESC@9765..9768
-                          L_PAREN@9765..9766 "("
-                          ARG@9766..9767
-                            EXPR_VAR@9766..9767
-                              NAME@9766..9767
-                                IDENT@9766..9767 "b"
-                          R_PAREN@9767..9768 ")"
-                      WHITESPACE@9768..9769 " "
-                      THEN_KW@9769..9773 "then"
-                      WHITESPACE@9773..9782 "\n        "
-                      TRUE_EXPR@9782..9799
-                        EXPR_BINARY@9782..9799
-                          LHS_EXPR@9782..9795
-                            EXPR_APPLY@9782..9795
-                              EXPR_INDEX@9782..9792
-                                EXPR_VAR@9782..9785
-                                  NAME@9782..9785
-                                    IDENT@9782..9785 "std"
-                                DOT@9785..9786 "."
-                                NAME@9786..9792
-                                  IDENT@9786..9792 "length"
-                              ARGS_DESC@9792..9795
-                                L_PAREN@9792..9793 "("
-                                ARG@9793..9794
-                                  EXPR_VAR@9793..9794
-                                    NAME@9793..9794
-                                      IDENT@9793..9794 "b"
-                                R_PAREN@9794..9795 ")"
-                          WHITESPACE@9795..9796 " "
-                          GT@9796..9797 ">"
-                          WHITESPACE@9797..9798 " "
-                          EXPR_NUMBER@9798..9799
-                            FLOAT@9798..9799 "0"
-                      WHITESPACE@9799..9806 "\n      "
-                      ELSE_KW@9806..9810 "else"
-                      WHITESPACE@9810..9819 "\n        "
-                      FALSE_EXPR@9819..9823
-                        EXPR_LITERAL@9819..9823
-                          TRUE_KW@9819..9823 "true"
-          SEMI@9823..9824 ";"
-          WHITESPACE@9824..9829 "\n    "
-          EXPR_IF_THEN_ELSE@9829..10058
-            IF_KW@9829..9831 "if"
-            WHITESPACE@9831..9832 " "
-            EXPR_APPLY@9832..9846
-              EXPR_INDEX@9832..9843
-                EXPR_VAR@9832..9835
-                  NAME@9832..9835
-                    IDENT@9832..9835 "std"
-                DOT@9835..9836 "."
-                NAME@9836..9843
-                  IDENT@9836..9843 "isArray"
-              ARGS_DESC@9843..9846
-                L_PAREN@9843..9844 "("
-                ARG@9844..9845
-                  EXPR_VAR@9844..9845
-                    NAME@9844..9845
-                      IDENT@9844..9845 "a"
-                R_PAREN@9845..9846 ")"
-            WHITESPACE@9846..9847 " "
-            THEN_KW@9847..9851 "then"
-            WHITESPACE@9851..9858 "\n      "
-            TRUE_EXPR@9858..9908
-              EXPR_ARRAY_COMP@9858..9908
-                L_BRACK@9858..9859 "["
-                EXPR_APPLY@9859..9871
-                  EXPR_INDEX@9859..9868
-                    EXPR_VAR@9859..9862
-                      NAME@9859..9862
-                        IDENT@9859..9862 "std"
-                    DOT@9862..9863 "."
-                    NAME@9863..9868
-                      IDENT@9863..9868 "prune"
-                  ARGS_DESC@9868..9871
-                    L_PAREN@9868..9869 "("
-                    ARG@9869..9870
-                      EXPR_VAR@9869..9870
-                        NAME@9869..9870
-                          IDENT@9869..9870 "x"
-                    R_PAREN@9870..9871 ")"
-                WHITESPACE@9871..9872 " "
-                FOR_SPEC@9872..9882
-                  FOR_KW@9872..9875 "for"
-                  WHITESPACE@9875..9876 " "
-                  NAME@9876..9877
-                    IDENT@9876..9877 "x"
-                  WHITESPACE@9877..9878 " "
-                  IN_KW@9878..9880 "in"
-                  WHITESPACE@9880..9881 " "
-                  EXPR_VAR@9881..9882
-                    NAME@9881..9882
-                      IDENT@9881..9882 "a"
-                WHITESPACE@9882..9883 " "
-                IF_SPEC@9883..9907
-                  IF_KW@9883..9885 "if"
-                  WHITESPACE@9885..9886 " "
-                  EXPR_APPLY@9886..9907
-                    EXPR_VAR@9886..9895
-                      NAME@9886..9895
-                        IDENT@9886..9895 "isContent"
-                    ARGS_DESC@9895..9907
-                      L_PAREN@9895..9896 "("
-                      ARG@9896..9906
-                        EXPR_APPLY@9896..9906
-                          EXPR_INDEX@9896..9903
-                            EXPR_LITERAL@9896..9897
-                              DOLLAR@9896..9897 "$"
-                            DOT@9897..9898 "."
-                            NAME@9898..9903
-                              IDENT@9898..9903 "prune"
-                          ARGS_DESC@9903..9906
-                            L_PAREN@9903..9904 "("
-                            ARG@9904..9905
-                              EXPR_VAR@9904..9905
-                                NAME@9904..9905
-                                  IDENT@9904..9905 "x"
-                            R_PAREN@9905..9906 ")"
-                      R_PAREN@9906..9907 ")"
-                R_BRACK@9907..9908 "]"
-            WHITESPACE@9908..9913 "\n    "
-            ELSE_KW@9913..9917 "else"
-            WHITESPACE@9917..9918 " "
-            FALSE_EXPR@9918..10058
-              EXPR_IF_THEN_ELSE@9918..10058
-                IF_KW@9918..9920 "if"
-                WHITESPACE@9920..9921 " "
-                EXPR_APPLY@9921..9936
-                  EXPR_INDEX@9921..9933
-                    EXPR_VAR@9921..9924
-                      NAME@9921..9924
-                        IDENT@9921..9924 "std"
-                    DOT@9924..9925 "."
-                    NAME@9925..9933
-                      IDENT@9925..9933 "isObject"
-                  ARGS_DESC@9933..9936
-                    L_PAREN@9933..9934 "("
-                    ARG@9934..9935
-                      EXPR_VAR@9934..9935
-                        NAME@9934..9935
-                          IDENT@9934..9935 "a"
-                    R_PAREN@9935..9936 ")"
-                WHITESPACE@9936..9937 " "
-                THEN_KW@9937..9941 "then"
-                WHITESPACE@9941..9942 " "
-                TRUE_EXPR@9942..10045
-                  EXPR_OBJECT@9942..10045
-                    OBJ_BODY_COMP@9942..10045
-                      L_BRACE@9942..9943 "{"
-                      WHITESPACE@9943..9950 "\n      "
-                      MEMBER_FIELD_NORMAL@9950..9968
-                        FIELD_NAME_DYNAMIC@9950..9953
-                          L_BRACK@9950..9951 "["
-                          EXPR_VAR@9951..9952
-                            NAME@9951..9952
-                              IDENT@9951..9952 "x"
-                          R_BRACK@9952..9953 "]"
-                        COLON@9953..9954 ":"
-                        WHITESPACE@9954..9955 " "
-                        EXPR_APPLY@9955..9968
-                          EXPR_INDEX@9955..9962
-                            EXPR_LITERAL@9955..9956
-                              DOLLAR@9955..9956 "$"
-                            DOT@9956..9957 "."
-                            NAME@9957..9962
-                              IDENT@9957..9962 "prune"
-                          ARGS_DESC@9962..9968
-                            L_PAREN@9962..9963 "("
-                            ARG@9963..9967
-                              EXPR_INDEX_EXPR@9963..9967
-                                LHS_EXPR@9963..9964
-                                  EXPR_VAR@9963..9964
-                                    NAME@9963..9964
-                                      IDENT@9963..9964 "a"
-                                L_BRACK@9964..9965 "["
-                                EXPR_VAR@9965..9966
-                                  NAME@9965..9966
-                                    IDENT@9965..9966 "x"
-                                R_BRACK@9966..9967 "]"
-                            R_PAREN@9967..9968 ")"
-                      WHITESPACE@9968..9975 "\n      "
-                      FOR_SPEC@9975..10003
-                        FOR_KW@9975..9978 "for"
-                        WHITESPACE@9978..9979 " "
-                        NAME@9979..9980
-                          IDENT@9979..9980 "x"
-                        WHITESPACE@9980..9981 " "
-                        IN_KW@9981..9983 "in"
-                        WHITESPACE@9983..9984 " "
-                        EXPR_APPLY@9984..10003
-                          EXPR_INDEX@9984..10000
-                            EXPR_VAR@9984..9987
-                              NAME@9984..9987
-                                IDENT@9984..9987 "std"
-                            DOT@9987..9988 "."
-                            NAME@9988..10000
-                              IDENT@9988..10000 "objectFields"
-                          ARGS_DESC@10000..10003
-                            L_PAREN@10000..10001 "("
-                            ARG@10001..10002
-                              EXPR_VAR@10001..10002
-                                NAME@10001..10002
-                                  IDENT@10001..10002 "a"
-                            R_PAREN@10002..10003 ")"
-                      WHITESPACE@10003..10010 "\n      "
-                      IF_SPEC@10010..10039
-                        IF_KW@10010..10012 "if"
-                        WHITESPACE@10012..10013 " "
-                        EXPR_APPLY@10013..10039
-                          EXPR_VAR@10013..10022
-                            NAME@10013..10022
-                              IDENT@10013..10022 "isContent"
-                          ARGS_DESC@10022..10039
-                            L_PAREN@10022..10023 "("
-                            ARG@10023..10038
-                              EXPR_APPLY@10023..10038
-                                EXPR_INDEX@10023..10032
-                                  EXPR_VAR@10023..10026
-                                    NAME@10023..10026
-                                      IDENT@10023..10026 "std"
-                                  DOT@10026..10027 "."
-                                  NAME@10027..10032
-                                    IDENT@10027..10032 "prune"
-                                ARGS_DESC@10032..10038
-                                  L_PAREN@10032..10033 "("
-                                  ARG@10033..10037
-                                    EXPR_INDEX_EXPR@10033..10037
-                                      LHS_EXPR@10033..10034
-                                        EXPR_VAR@10033..10034
-                                          NAME@10033..10034
-                                            IDENT@10033..10034 "a"
-                                      L_BRACK@10034..10035 "["
-                                      EXPR_VAR@10035..10036
-                                        NAME@10035..10036
-                                          IDENT@10035..10036 "x"
-                                      R_BRACK@10036..10037 "]"
-                                  R_PAREN@10037..10038 ")"
-                            R_PAREN@10038..10039 ")"
-                      WHITESPACE@10039..10044 "\n    "
-                      R_BRACE@10044..10045 "}"
-                WHITESPACE@10045..10046 " "
-                ELSE_KW@10046..10050 "else"
-                WHITESPACE@10050..10057 "\n      "
-                FALSE_EXPR@10057..10058
-                  EXPR_VAR@10057..10058
-                    NAME@10057..10058
-                      IDENT@10057..10058 "a"
-      COMMA@10058..10059 ","
-      WHITESPACE@10059..10063 "\n\n  "
-      MEMBER_FIELD_METHOD@10063..10278
-        FIELD_NAME_FIXED@10063..10067
-          NAME@10063..10067
-            IDENT@10063..10067 "find"
-        PARAMS_DESC@10067..10079
-          L_PAREN@10067..10068 "("
-          PARAM@10068..10073
-            DESTRUCT_FULL@10068..10073
-              NAME@10068..10073
-                IDENT@10068..10073 "value"
-          COMMA@10073..10074 ","
-          WHITESPACE@10074..10075 " "
-          PARAM@10075..10078
-            DESTRUCT_FULL@10075..10078
-              NAME@10075..10078
-                IDENT@10075..10078 "arr"
-          R_PAREN@10078..10079 ")"
-        COLONCOLON@10079..10081 "::"
-        WHITESPACE@10081..10086 "\n    "
-        EXPR_IF_THEN_ELSE@10086..10278
-          IF_KW@10086..10088 "if"
-          WHITESPACE@10088..10089 " "
-          EXPR_UNARY@10089..10106
-            NOT@10089..10090 "!"
-            EXPR_APPLY@10090..10106
-              EXPR_INDEX@10090..10101
-                EXPR_VAR@10090..10093
-                  NAME@10090..10093
-                    IDENT@10090..10093 "std"
-                DOT@10093..10094 "."
-                NAME@10094..10101
-                  IDENT@10094..10101 "isArray"
-              ARGS_DESC@10101..10106
-                L_PAREN@10101..10102 "("
-                ARG@10102..10105
-                  EXPR_VAR@10102..10105
-                    NAME@10102..10105
-                      IDENT@10102..10105 "arr"
-                R_PAREN@10105..10106 ")"
-          WHITESPACE@10106..10107 " "
-          THEN_KW@10107..10111 "then"
-          WHITESPACE@10111..10118 "\n      "
-          TRUE_EXPR@10118..10188
-            EXPR_ERROR@10118..10188
-              ERROR_KW@10118..10123 "error"
-              WHITESPACE@10123..10124 " "
-              EXPR_BINARY@10124..10188
-                LHS_EXPR@10124..10172
-                  EXPR_STRING@10124..10172
-                    STRING_SINGLE@10124..10172 "'find second paramete ..."
-                WHITESPACE@10172..10173 " "
-                PLUS@10173..10174 "+"
-                WHITESPACE@10174..10175 " "
-                EXPR_APPLY@10175..10188
-                  EXPR_INDEX@10175..10183
-                    EXPR_VAR@10175..10178
-                      NAME@10175..10178
-                        IDENT@10175..10178 "std"
-                    DOT@10178..10179 "."
-                    NAME@10179..10183
-                      IDENT@10179..10183 "type"
-                  ARGS_DESC@10183..10188
-                    L_PAREN@10183..10184 "("
-                    ARG@10184..10187
-                      EXPR_VAR@10184..10187
-                        NAME@10184..10187
-                          IDENT@10184..10187 "arr"
-                    R_PAREN@10187..10188 ")"
-          WHITESPACE@10188..10193 "\n    "
-          ELSE_KW@10193..10197 "else"
-          WHITESPACE@10197..10204 "\n      "
-          FALSE_EXPR@10204..10278
-            EXPR_APPLY@10204..10278
-              EXPR_INDEX@10204..10214
-                EXPR_VAR@10204..10207
-                  NAME@10204..10207
-                    IDENT@10204..10207 "std"
-                DOT@10207..10208 "."
-                NAME@10208..10214
-                  IDENT@10208..10214 "filter"
-              ARGS_DESC@10214..10278
-                L_PAREN@10214..10215 "("
-                ARG@10215..10242
-                  EXPR_FUNCTION@10215..10242
-                    FUNCTION_KW@10215..10223 "function"
-                    PARAMS_DESC@10223..10226
-                      L_PAREN@10223..10224 "("
-                      PARAM@10224..10225
-                        DESTRUCT_FULL@10224..10225
-                          NAME@10224..10225
-                            IDENT@10224..10225 "i"
-                      R_PAREN@10225..10226 ")"
-                    WHITESPACE@10226..10227 " "
-                    EXPR_BINARY@10227..10242
-                      LHS_EXPR@10227..10233
-                        EXPR_INDEX_EXPR@10227..10233
-                          LHS_EXPR@10227..10230
-                            EXPR_VAR@10227..10230
-                              NAME@10227..10230
-                                IDENT@10227..10230 "arr"
-                          L_BRACK@10230..10231 "["
-                          EXPR_VAR@10231..10232
-                            NAME@10231..10232
-                              IDENT@10231..10232 "i"
-                          R_BRACK@10232..10233 "]"
-                      WHITESPACE@10233..10234 " "
-                      EQ@10234..10236 "=="
-                      WHITESPACE@10236..10237 " "
-                      EXPR_VAR@10237..10242
-                        NAME@10237..10242
-                          IDENT@10237..10242 "value"
-                COMMA@10242..10243 ","
-                WHITESPACE@10243..10244 " "
-                ARG@10244..10277
-                  EXPR_APPLY@10244..10277
-                    EXPR_INDEX@10244..10253
-                      EXPR_VAR@10244..10247
-                        NAME@10244..10247
-                          IDENT@10244..10247 "std"
-                      DOT@10247..10248 "."
-                      NAME@10248..10253
-                        IDENT@10248..10253 "range"
-                    ARGS_DESC@10253..10277
-                      L_PAREN@10253..10254 "("
-                      ARG@10254..10255
-                        EXPR_NUMBER@10254..10255
-                          FLOAT@10254..10255 "0"
-                      COMMA@10255..10256 ","
-                      WHITESPACE@10256..10257 " "
-                      ARG@10257..10276
-                        EXPR_BINARY@10257..10276
-                          LHS_EXPR@10257..10272
-                            EXPR_APPLY@10257..10272
-                              EXPR_INDEX@10257..10267
-                                EXPR_VAR@10257..10260
-                                  NAME@10257..10260
-                                    IDENT@10257..10260 "std"
-                                DOT@10260..10261 "."
-                                NAME@10261..10267
-                                  IDENT@10261..10267 "length"
-                              ARGS_DESC@10267..10272
-                                L_PAREN@10267..10268 "("
-                                ARG@10268..10271
-                                  EXPR_VAR@10268..10271
-                                    NAME@10268..10271
-                                      IDENT@10268..10271 "arr"
-                                R_PAREN@10271..10272 ")"
-                          WHITESPACE@10272..10273 " "
-                          MINUS@10273..10274 "-"
-                          WHITESPACE@10274..10275 " "
-                          EXPR_NUMBER@10275..10276
-                            FLOAT@10275..10276 "1"
-                      R_PAREN@10276..10277 ")"
-                R_PAREN@10277..10278 ")"
-      COMMA@10278..10279 ","
-      WHITESPACE@10279..10280 "\n"
-      R_BRACE@10280..10281 "}"
-  WHITESPACE@10281..10282 "\n"
+          EQ@9626..9628 "=="
+          WHITESPACE@9628..9629 " "
+          EXPR_UNARY@9629..9631
+            MINUS@9629..9630 "-"
+            EXPR_NUMBER@9630..9631
+              FLOAT@9630..9631 "1"
+      COMMA@9631..9632 ","
+      WHITESPACE@9632..9635 "\n  "
+      MEMBER_FIELD_METHOD@9635..9701
+        FIELD_NAME_FIXED@9635..9650
+          NAME@9635..9650
+            IDENT@9635..9650 "__array_greater"
+        PARAMS_DESC@9650..9662
+          L_PAREN@9650..9651 "("
+          PARAM@9651..9655
+            DESTRUCT_FULL@9651..9655
+              NAME@9651..9655
+                IDENT@9651..9655 "arr1"
+          COMMA@9655..9656 ","
+          WHITESPACE@9656..9657 " "
+          PARAM@9657..9661
+            DESTRUCT_FULL@9657..9661
+              NAME@9657..9661
+                IDENT@9657..9661 "arr2"
+          R_PAREN@9661..9662 ")"
+        COLONCOLON@9662..9664 "::"
+        WHITESPACE@9664..9665 " "
+        EXPR_BINARY@9665..9701
+          LHS_EXPR@9665..9696
+            EXPR_APPLY@9665..9696
+              EXPR_INDEX@9665..9684
+                EXPR_VAR@9665..9668
+                  NAME@9665..9668
+                    IDENT@9665..9668 "std"
+                DOT@9668..9669 "."
+                NAME@9669..9684
+                  IDENT@9669..9684 "__compare_array"
+              ARGS_DESC@9684..9696
+                L_PAREN@9684..9685 "("
+                ARG@9685..9689
+                  EXPR_VAR@9685..9689
+                    NAME@9685..9689
+                      IDENT@9685..9689 "arr1"
+                COMMA@9689..9690 ","
+                WHITESPACE@9690..9691 " "
+                ARG@9691..9695
+                  EXPR_VAR@9691..9695
+                    NAME@9691..9695
+                      IDENT@9691..9695 "arr2"
+                R_PAREN@9695..9696 ")"
+          WHITESPACE@9696..9697 " "
+          EQ@9697..9699 "=="
+          WHITESPACE@9699..9700 " "
+          EXPR_NUMBER@9700..9701
+            FLOAT@9700..9701 "1"
+      COMMA@9701..9702 ","
+      WHITESPACE@9702..9705 "\n  "
+      MEMBER_FIELD_METHOD@9705..9777
+        FIELD_NAME_FIXED@9705..9726
+          NAME@9705..9726
+            IDENT@9705..9726 "__array_less_or_equal"
+        PARAMS_DESC@9726..9738
+          L_PAREN@9726..9727 "("
+          PARAM@9727..9731
+            DESTRUCT_FULL@9727..9731
+              NAME@9727..9731
+                IDENT@9727..9731 "arr1"
+          COMMA@9731..9732 ","
+          WHITESPACE@9732..9733 " "
+          PARAM@9733..9737
+            DESTRUCT_FULL@9733..9737
+              NAME@9733..9737
+                IDENT@9733..9737 "arr2"
+          R_PAREN@9737..9738 ")"
+        COLONCOLON@9738..9740 "::"
+        WHITESPACE@9740..9741 " "
+        EXPR_BINARY@9741..9777
+          LHS_EXPR@9741..9772
+            EXPR_APPLY@9741..9772
+              EXPR_INDEX@9741..9760
+                EXPR_VAR@9741..9744
+                  NAME@9741..9744
+                    IDENT@9741..9744 "std"
+                DOT@9744..9745 "."
+                NAME@9745..9760
+                  IDENT@9745..9760 "__compare_array"
+              ARGS_DESC@9760..9772
+                L_PAREN@9760..9761 "("
+                ARG@9761..9765
+                  EXPR_VAR@9761..9765
+                    NAME@9761..9765
+                      IDENT@9761..9765 "arr1"
+                COMMA@9765..9766 ","
+                WHITESPACE@9766..9767 " "
+                ARG@9767..9771
+                  EXPR_VAR@9767..9771
+                    NAME@9767..9771
+                      IDENT@9767..9771 "arr2"
+                R_PAREN@9771..9772 ")"
+          WHITESPACE@9772..9773 " "
+          LE@9773..9775 "<="
+          WHITESPACE@9775..9776 " "
+          EXPR_NUMBER@9776..9777
+            FLOAT@9776..9777 "0"
+      COMMA@9777..9778 ","
+      WHITESPACE@9778..9781 "\n  "
+      MEMBER_FIELD_METHOD@9781..9856
+        FIELD_NAME_FIXED@9781..9805
+          NAME@9781..9805
+            IDENT@9781..9805 "__array_greater_or_equal"
+        PARAMS_DESC@9805..9817
+          L_PAREN@9805..9806 "("
+          PARAM@9806..9810
+            DESTRUCT_FULL@9806..9810
+              NAME@9806..9810
+                IDENT@9806..9810 "arr1"
+          COMMA@9810..9811 ","
+          WHITESPACE@9811..9812 " "
+          PARAM@9812..9816
+            DESTRUCT_FULL@9812..9816
+              NAME@9812..9816
+                IDENT@9812..9816 "arr2"
+          R_PAREN@9816..9817 ")"
+        COLONCOLON@9817..9819 "::"
+        WHITESPACE@9819..9820 " "
+        EXPR_BINARY@9820..9856
+          LHS_EXPR@9820..9851
+            EXPR_APPLY@9820..9851
+              EXPR_INDEX@9820..9839
+                EXPR_VAR@9820..9823
+                  NAME@9820..9823
+                    IDENT@9820..9823 "std"
+                DOT@9823..9824 "."
+                NAME@9824..9839
+                  IDENT@9824..9839 "__compare_array"
+              ARGS_DESC@9839..9851
+                L_PAREN@9839..9840 "("
+                ARG@9840..9844
+                  EXPR_VAR@9840..9844
+                    NAME@9840..9844
+                      IDENT@9840..9844 "arr1"
+                COMMA@9844..9845 ","
+                WHITESPACE@9845..9846 " "
+                ARG@9846..9850
+                  EXPR_VAR@9846..9850
+                    NAME@9846..9850
+                      IDENT@9846..9850 "arr2"
+                R_PAREN@9850..9851 ")"
+          WHITESPACE@9851..9852 " "
+          GE@9852..9854 ">="
+          WHITESPACE@9854..9855 " "
+          EXPR_NUMBER@9855..9856
+            FLOAT@9855..9856 "0"
+      COMMA@9856..9857 ","
+      WHITESPACE@9857..9858 "\n"
+      R_BRACE@9858..9859 "}"
+  WHITESPACE@9859..9860 "\n"
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,7 +3,7 @@
 expression: "local * = 1;\na\n"
 ---
 SOURCE_FILE@0..15
-  EXPR_LOCAL@0..14
+  STMT_LOCAL@0..12
     LOCAL_KW@0..5 "local"
     WHITESPACE@5..6 " "
     BIND_DESTRUCT@6..11
@@ -15,10 +15,10 @@
       EXPR_NUMBER@10..11
         FLOAT@10..11 "1"
     SEMI@11..12 ";"
-    WHITESPACE@12..13 "\n"
-    EXPR_VAR@13..14
-      NAME@13..14
-        IDENT@13..14 "a"
+  WHITESPACE@12..13 "\n"
+  EXPR_VAR@13..14
+    NAME@13..14
+      IDENT@13..14 "a"
   WHITESPACE@14..15 "\n"
 ===
 LocatedSyntaxError { error: Unexpected { expected: Named("destruction specifier"), found: MUL }, range: 6..7 }
modifiedcrates/jrsonnet-rowan-parser/src/tests.rsdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/tests.rs
+++ b/crates/jrsonnet-rowan-parser/src/tests.rs
@@ -244,3 +244,10 @@
 	let result = process(src);
 	insta::assert_snapshot!("stdlib", result, src);
 }
+#[test]
+fn eval_simple() {
+	let src = "local a = 1, b = 2; a + local c = 1; c";
+	let (node, errors) = parse(src);
+
+	dbg!(node);
+}
modifiedflake.nixdiffbeforeafterboth
--- a/flake.nix
+++ b/flake.nix
@@ -132,6 +132,7 @@
             cargo-asm
             cargo-outdated
             cargo-watch
+            cargo-insta
             lld
             hyperfine
             graphviz