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

difftreelog

feat parse object comprehensions

Yaroslav Bolyukin2022-12-13parent: #6beafa8.patch.diff
in: master

29 files changed

modifiedcrates/jrsonnet-rowan-parser/jsonnet.ungramdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/jsonnet.ungram
+++ b/crates/jrsonnet-rowan-parser/jsonnet.ungram
@@ -194,29 +194,25 @@
 
 MemberBindStmt = ObjLocal
 MemberAssertStmt = Assertion
-MemberField = Field
-Member =
-    MemberBindStmt
-|   MemberAssertStmt
-|   MemberField
-
-ObjLocal =
-    'local'
-    Bind
-
-FieldNormal =
+MemberFieldNormal =
     FieldName
     '+'?
     Visibility
     Expr
-FieldMethod =
+MemberFieldMethod =
     FieldName
     ParamsDesc
     Visibility
     Expr
-Field =
-    FieldNormal
-|   FieldMethod
+Member =
+    MemberBindStmt
+|   MemberAssertStmt
+|   MemberFieldNormal
+|   MemberFieldMethod
+
+ObjLocal =
+    'local'
+    Bind
 
 FieldNameFixed =
     id:Name
@@ -374,3 +370,4 @@
 ParsingError =
     'ERROR_MISSING_TOKEN!'
 |   'ERROR_UNEXPECTED_TOKEN!'
+|   'ERROR_CUSTOM!'
modifiedcrates/jrsonnet-rowan-parser/src/event.rsdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/event.rs
+++ b/crates/jrsonnet-rowan-parser/src/event.rs
@@ -1,4 +1,4 @@
-use std::mem;
+use std::{mem, num::NonZeroUsize};
 
 use rowan::{GreenNodeBuilder, Language, TextRange, TextSize};
 
@@ -9,7 +9,7 @@
 	AstToken, JsonnetLanguage, SyntaxKind,
 };
 
-#[derive(Clone, Debug, PartialEq, Eq)]
+#[derive(Clone, Debug)]
 pub enum Event {
 	/// Used for unfinished markers
 	Pending,
@@ -18,22 +18,18 @@
 		kind: SyntaxKind,
 		/// If marker is preceded or wrapped - instead of reordering events, we
 		/// insert start event in the end of events Vec instead, and store relative offset to this event here
-		forward_parent: Option<usize>,
+		forward_parent: Option<NonZeroUsize>,
 	},
 	/// Eat token
-	Token {
-		kind: SyntaxKind,
-	},
+	Token { kind: SyntaxKind },
 	/// Push token, but do not eat anything,
-	VirtualToken {
-		kind: SyntaxKind,
-	},
+	VirtualToken { kind: SyntaxKind },
 	/// Position of finished node
 	Finish {
 		/// Same as forward_parent of Start, but for wrapping
-		wrapper: Option<usize>,
+		wrapper: Option<NonZeroUsize>,
+		error: Option<Box<SyntaxError>>,
 	},
-	Error(SyntaxError),
 	/// Used for dropped markers and other things
 	Noop,
 }
@@ -74,7 +70,6 @@
 		let mut eat_start_whitespace = false;
 		let mut depth = 0;
 		let mut error_starts_at = Vec::new();
-		let mut error_last_range = None;
 		for idx in 0..self.events.len() {
 			match mem::replace(&mut self.events[idx], Event::Noop) {
 				Event::Start {
@@ -84,7 +79,6 @@
 					if depth != 0 {
 						self.skip_whitespace();
 					}
-					error_last_range = None;
 					let mut kinds = vec![kind];
 
 					let mut idx = idx;
@@ -94,7 +88,7 @@
 					// of that, and of that, etc. until we reach a StartNode event without a forward
 					// parent.
 					while let Some(fp) = forward_parent {
-						idx += fp;
+						idx += fp.get();
 
 						forward_parent = if let Event::Start {
 							kind,
@@ -123,7 +117,6 @@
 					if eat_start_whitespace {
 						self.skip_whitespace();
 					}
-					error_last_range = None;
 					self.token(kind);
 					eat_start_whitespace = true;
 				}
@@ -131,31 +124,43 @@
 					if eat_start_whitespace {
 						self.skip_whitespace();
 					}
-					error_last_range = None;
 					self.virtual_token(kind);
 					eat_start_whitespace = false;
 				}
-				Event::Finish { wrapper } => {
+				Event::Finish { wrapper, error } => {
 					if depth == 1 {
 						self.skip_whitespace();
 					}
-					error_last_range = Some((
+					let range = (
 						error_starts_at.pop().expect("starts == finishes"),
 						self.text_offset(),
-					));
+					);
+					if let Some(error) = error {
+						self.errors.push(LocatedSyntaxError {
+							error: *error,
+							range: TextRange::new(range.0, range.1),
+						})
+					}
 					self.builder.finish_node();
 					depth -= 1;
 					let mut idx = idx;
 					let mut wrapper = wrapper;
 					while let Some(w) = wrapper {
-						idx += w;
-						wrapper = if let Event::Finish { wrapper } =
+						idx += w.get();
+						wrapper = if let Event::Finish { wrapper, error } =
 							mem::replace(&mut self.events[idx], Event::Noop)
 						{
-							error_last_range = Some((
+							let range = (
 								error_starts_at.pop().expect("starts == finishes"),
 								self.text_offset(),
-							));
+							);
+							if let Some(error) = error {
+								self.errors.push(LocatedSyntaxError {
+									error: *error,
+									range: TextRange::new(range.0, range.1),
+								})
+							}
+
 							if depth == 1 {
 								self.skip_whitespace();
 							}
@@ -170,15 +175,6 @@
 				}
 				Event::Pending => panic!("pending event should not appear in finished events"),
 				Event::Noop => {}
-				Event::Error(error) => {
-					let (start, end) = error_last_range
-						.take()
-						.expect("expected error event right after closed node");
-					self.errors.push(LocatedSyntaxError {
-						error,
-						range: TextRange::new(start, end),
-					});
-				}
 			}
 		}
 
modifiedcrates/jrsonnet-rowan-parser/src/generated/nodes.rsdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/generated/nodes.rs
+++ b/crates/jrsonnet-rowan-parser/src/generated/nodes.rs
@@ -643,20 +643,10 @@
 }
 
 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
-pub struct MemberField {
+pub struct MemberFieldNormal {
 	pub(crate) syntax: SyntaxNode,
 }
-impl MemberField {
-	pub fn field(&self) -> Option<Field> {
-		support::child(&self.syntax)
-	}
-}
-
-#[derive(Debug, Clone, PartialEq, Eq, Hash)]
-pub struct FieldNormal {
-	pub(crate) syntax: SyntaxNode,
-}
-impl FieldNormal {
+impl MemberFieldNormal {
 	pub fn field_name(&self) -> Option<FieldName> {
 		support::child(&self.syntax)
 	}
@@ -672,10 +662,10 @@
 }
 
 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
-pub struct FieldMethod {
+pub struct MemberFieldMethod {
 	pub(crate) syntax: SyntaxNode,
 }
-impl FieldMethod {
+impl MemberFieldMethod {
 	pub fn field_name(&self) -> Option<FieldName> {
 		support::child(&self.syntax)
 	}
@@ -955,13 +945,8 @@
 pub enum Member {
 	MemberBindStmt(MemberBindStmt),
 	MemberAssertStmt(MemberAssertStmt),
-	MemberField(MemberField),
-}
-
-#[derive(Debug, Clone, PartialEq, Eq, Hash)]
-pub enum Field {
-	FieldNormal(FieldNormal),
-	FieldMethod(FieldMethod),
+	MemberFieldNormal(MemberFieldNormal),
+	MemberFieldMethod(MemberFieldMethod),
 }
 
 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
@@ -1134,6 +1119,7 @@
 pub enum ParsingErrorKind {
 	ErrorMissingToken,
 	ErrorUnexpectedToken,
+	ErrorCustom,
 }
 impl AstNode for SourceFile {
 	fn can_cast(kind: SyntaxKind) -> bool {
@@ -1780,24 +1766,9 @@
 		&self.syntax
 	}
 }
-impl AstNode for MemberField {
-	fn can_cast(kind: SyntaxKind) -> bool {
-		kind == MEMBER_FIELD
-	}
-	fn cast(syntax: SyntaxNode) -> Option<Self> {
-		if Self::can_cast(syntax.kind()) {
-			Some(Self { syntax })
-		} else {
-			None
-		}
-	}
-	fn syntax(&self) -> &SyntaxNode {
-		&self.syntax
-	}
-}
-impl AstNode for FieldNormal {
+impl AstNode for MemberFieldNormal {
 	fn can_cast(kind: SyntaxKind) -> bool {
-		kind == FIELD_NORMAL
+		kind == MEMBER_FIELD_NORMAL
 	}
 	fn cast(syntax: SyntaxNode) -> Option<Self> {
 		if Self::can_cast(syntax.kind()) {
@@ -1810,9 +1781,9 @@
 		&self.syntax
 	}
 }
-impl AstNode for FieldMethod {
+impl AstNode for MemberFieldMethod {
 	fn can_cast(kind: SyntaxKind) -> bool {
-		kind == FIELD_METHOD
+		kind == MEMBER_FIELD_METHOD
 	}
 	fn cast(syntax: SyntaxNode) -> Option<Self> {
 		if Self::can_cast(syntax.kind()) {
@@ -2352,15 +2323,22 @@
 		Member::MemberAssertStmt(node)
 	}
 }
-impl From<MemberField> for Member {
-	fn from(node: MemberField) -> Member {
-		Member::MemberField(node)
+impl From<MemberFieldNormal> for Member {
+	fn from(node: MemberFieldNormal) -> Member {
+		Member::MemberFieldNormal(node)
 	}
 }
+impl From<MemberFieldMethod> for Member {
+	fn from(node: MemberFieldMethod) -> Member {
+		Member::MemberFieldMethod(node)
+	}
+}
 impl AstNode for Member {
 	fn can_cast(kind: SyntaxKind) -> bool {
 		match kind {
-			MEMBER_BIND_STMT | MEMBER_ASSERT_STMT | MEMBER_FIELD => true,
+			MEMBER_BIND_STMT | MEMBER_ASSERT_STMT | MEMBER_FIELD_NORMAL | MEMBER_FIELD_METHOD => {
+				true
+			}
 			_ => false,
 		}
 	}
@@ -2368,7 +2346,8 @@
 		let res = match syntax.kind() {
 			MEMBER_BIND_STMT => Member::MemberBindStmt(MemberBindStmt { syntax }),
 			MEMBER_ASSERT_STMT => Member::MemberAssertStmt(MemberAssertStmt { syntax }),
-			MEMBER_FIELD => Member::MemberField(MemberField { syntax }),
+			MEMBER_FIELD_NORMAL => Member::MemberFieldNormal(MemberFieldNormal { syntax }),
+			MEMBER_FIELD_METHOD => Member::MemberFieldMethod(MemberFieldMethod { syntax }),
 			_ => return None,
 		};
 		Some(res)
@@ -2377,39 +2356,8 @@
 		match self {
 			Member::MemberBindStmt(it) => &it.syntax,
 			Member::MemberAssertStmt(it) => &it.syntax,
-			Member::MemberField(it) => &it.syntax,
-		}
-	}
-}
-impl From<FieldNormal> for Field {
-	fn from(node: FieldNormal) -> Field {
-		Field::FieldNormal(node)
-	}
-}
-impl From<FieldMethod> for Field {
-	fn from(node: FieldMethod) -> Field {
-		Field::FieldMethod(node)
-	}
-}
-impl AstNode for Field {
-	fn can_cast(kind: SyntaxKind) -> bool {
-		match kind {
-			FIELD_NORMAL | FIELD_METHOD => true,
-			_ => false,
-		}
-	}
-	fn cast(syntax: SyntaxNode) -> Option<Self> {
-		let res = match syntax.kind() {
-			FIELD_NORMAL => Field::FieldNormal(FieldNormal { syntax }),
-			FIELD_METHOD => Field::FieldMethod(FieldMethod { syntax }),
-			_ => return None,
-		};
-		Some(res)
-	}
-	fn syntax(&self) -> &SyntaxNode {
-		match self {
-			Field::FieldNormal(it) => &it.syntax,
-			Field::FieldMethod(it) => &it.syntax,
+			Member::MemberFieldNormal(it) => &it.syntax,
+			Member::MemberFieldMethod(it) => &it.syntax,
 		}
 	}
 }
@@ -2914,7 +2862,7 @@
 impl ParsingErrorKind {
 	fn can_cast(kind: SyntaxKind) -> bool {
 		match kind {
-			ERROR_MISSING_TOKEN | ERROR_UNEXPECTED_TOKEN => true,
+			ERROR_MISSING_TOKEN | ERROR_UNEXPECTED_TOKEN | ERROR_CUSTOM => true,
 			_ => false,
 		}
 	}
@@ -2922,6 +2870,7 @@
 		let res = match kind {
 			ERROR_MISSING_TOKEN => Self::ErrorMissingToken,
 			ERROR_UNEXPECTED_TOKEN => Self::ErrorUnexpectedToken,
+			ERROR_CUSTOM => Self::ErrorCustom,
 			_ => return None,
 		};
 		Some(res)
@@ -2958,11 +2907,6 @@
 	}
 }
 impl std::fmt::Display for Member {
-	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-		std::fmt::Display::fmt(self.syntax(), f)
-	}
-}
-impl std::fmt::Display for Field {
 	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 		std::fmt::Display::fmt(self.syntax(), f)
 	}
@@ -3197,17 +3141,12 @@
 		std::fmt::Display::fmt(self.syntax(), f)
 	}
 }
-impl std::fmt::Display for MemberField {
-	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-		std::fmt::Display::fmt(self.syntax(), f)
-	}
-}
-impl std::fmt::Display for FieldNormal {
+impl std::fmt::Display for MemberFieldNormal {
 	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 		std::fmt::Display::fmt(self.syntax(), f)
 	}
 }
-impl std::fmt::Display for FieldMethod {
+impl std::fmt::Display for MemberFieldMethod {
 	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 		std::fmt::Display::fmt(self.syntax(), f)
 	}
modifiedcrates/jrsonnet-rowan-parser/src/generated/syntax_kinds.rsdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/generated/syntax_kinds.rs
+++ b/crates/jrsonnet-rowan-parser/src/generated/syntax_kinds.rs
@@ -181,6 +181,7 @@
 	ASSERT_KW,
 	ERROR_MISSING_TOKEN,
 	ERROR_UNEXPECTED_TOKEN,
+	ERROR_CUSTOM,
 	#[doc = r" Also acts as __LAST_TOKEN"]
 	#[error]
 	LEXING_ERROR,
@@ -227,9 +228,8 @@
 	OBJ_LOCAL,
 	MEMBER_BIND_STMT,
 	MEMBER_ASSERT_STMT,
-	MEMBER_FIELD,
-	FIELD_NORMAL,
-	FIELD_METHOD,
+	MEMBER_FIELD_NORMAL,
+	MEMBER_FIELD_METHOD,
 	FIELD_NAME_FIXED,
 	FIELD_NAME_DYNAMIC,
 	FOR_SPEC,
@@ -249,7 +249,6 @@
 	COMP_SPEC,
 	BIND,
 	MEMBER,
-	FIELD,
 	FIELD_NAME,
 	DESTRUCT,
 	DESTRUCT_ARRAY_PART,
@@ -281,7 +280,7 @@
 	}
 	pub fn is_enum(self) -> bool {
 		match self {
-			EXPR | OBJ_BODY | COMP_SPEC | BIND | MEMBER | FIELD | FIELD_NAME | DESTRUCT
+			EXPR | OBJ_BODY | COMP_SPEC | BIND | MEMBER | FIELD_NAME | DESTRUCT
 			| DESTRUCT_ARRAY_PART | BINARY_OPERATOR | UNARY_OPERATOR | LITERAL | TEXT | NUMBER
 			| IMPORT_KIND | VISIBILITY | TRIVIA | PARSING_ERROR => true,
 			_ => false,
modifiedcrates/jrsonnet-rowan-parser/src/lib.rsdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/lib.rs
+++ b/crates/jrsonnet-rowan-parser/src/lib.rs
@@ -3,7 +3,7 @@
 use event::Sink;
 use generated::nodes::{SourceFile, Trivia};
 use lex::lex;
-use parser::{LocatedSyntaxError, Parser, SyntaxError};
+use parser::{LocatedSyntaxError, Parser};
 pub use rowan;
 
 mod ast;
modifiedcrates/jrsonnet-rowan-parser/src/marker.rsdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/marker.rs
+++ b/crates/jrsonnet-rowan-parser/src/marker.rs
@@ -1,7 +1,12 @@
+use std::num::NonZeroUsize;
+
 use drop_bomb::DropBomb;
-use rowan::TextRange;
 
-use crate::{event::Event, parser::Parser, SyntaxKind};
+use crate::{
+	event::Event,
+	parser::{ExpectedSyntax, Parser, SyntaxError},
+	SyntaxKind,
+};
 
 pub struct Ranger {
 	pub pos: usize,
@@ -38,7 +43,12 @@
 			bomb: DropBomb::new("marked dropped while not completed"),
 		}
 	}
-	pub fn complete(mut self, p: &mut Parser, kind: SyntaxKind) -> CompletedMarker {
+	fn complete_raw(
+		mut self,
+		p: &mut Parser,
+		kind: SyntaxKind,
+		error: Option<SyntaxError>,
+	) -> CompletedMarker {
 		self.bomb.defuse();
 		assert!(
 			!kind.is_enum(),
@@ -50,7 +60,7 @@
 		// 	"{kind:?} should be only emitted by lexer, not used directly"
 		// );
 		let event_at_pos = &mut p.events[self.start_event_idx];
-		assert_eq!(*event_at_pos, Event::Pending);
+		assert!(matches!(event_at_pos, Event::Pending));
 
 		*event_at_pos = Event::Start {
 			kind,
@@ -58,7 +68,10 @@
 		};
 
 		let finish_event_idx = p.events.len();
-		p.events.push(Event::Finish { wrapper: None });
+		p.events.push(Event::Finish {
+			wrapper: None,
+			error: error.map(Box::new),
+		});
 		p.entered -= 1;
 		p.clear_outdated_hints();
 		CompletedMarker {
@@ -66,10 +79,42 @@
 			finish_event_idx,
 		}
 	}
+	pub fn complete(mut self, p: &mut Parser, kind: SyntaxKind) -> CompletedMarker {
+		self.complete_raw(p, kind, None)
+	}
+	pub fn complete_error(mut self, p: &mut Parser, msg: impl AsRef<str>) -> CompletedMarker {
+		self.complete_raw(
+			p,
+			SyntaxKind::ERROR_CUSTOM,
+			Some(SyntaxError::Custom {
+				error: msg.as_ref().to_owned(),
+			}),
+		)
+	}
+	pub fn complete_missing(mut self, p: &mut Parser, expected: ExpectedSyntax) -> CompletedMarker {
+		self.complete_raw(
+			p,
+			SyntaxKind::ERROR_MISSING_TOKEN,
+			Some(SyntaxError::Missing { expected }),
+		)
+	}
+	pub fn complete_unexpected(
+		mut self,
+		p: &mut Parser,
+		expected: ExpectedSyntax,
+		found: SyntaxKind,
+	) -> CompletedMarker {
+		self.complete_raw(
+			p,
+			SyntaxKind::ERROR_UNEXPECTED_TOKEN,
+			Some(SyntaxError::Unexpected { expected, found }),
+		)
+	}
+
 	pub fn forget(mut self, p: &mut Parser) {
 		self.bomb.defuse();
 		let event_at_pos = &mut p.events[self.start_event_idx];
-		assert_eq!(*event_at_pos, Event::Pending);
+		assert!(matches!(event_at_pos, Event::Pending));
 
 		*event_at_pos = Event::Noop;
 		p.entered -= 1;
@@ -85,7 +130,9 @@
 		let new_m = p.start();
 		match &mut p.events[self.start_event_idx] {
 			Event::Start { forward_parent, .. } => {
-				*forward_parent = Some(new_m.start_event_idx - self.start_event_idx);
+				*forward_parent = Some(
+					NonZeroUsize::new(new_m.start_event_idx - self.start_event_idx).expect("!= 0"),
+				);
 			}
 			_ => unreachable!(),
 		}
@@ -93,23 +140,48 @@
 		new_m
 	}
 	/// Create new node around existing marker, not counting anything that comes after it
-	pub fn wrap(self, p: &mut Parser, kind: SyntaxKind) -> CompletedMarker {
+	fn wrap_raw(
+		self,
+		p: &mut Parser,
+		kind: SyntaxKind,
+		error: Option<SyntaxError>,
+	) -> CompletedMarker {
 		let new_m = p.start();
 		match &mut p.events[self.start_event_idx] {
 			Event::Start { forward_parent, .. } => {
-				*forward_parent = Some(new_m.start_event_idx - self.start_event_idx);
+				*forward_parent = Some(
+					NonZeroUsize::new(new_m.start_event_idx - self.start_event_idx).expect("!= 0"),
+				);
 			}
 			_ => unreachable!(),
 		}
 
-		let completed = new_m.complete(p, kind);
+		let completed = new_m.complete_raw(p, kind, error);
 
 		match &mut p.events[self.finish_event_idx] {
-			Event::Finish { wrapper } => {
-				*wrapper = Some(completed.finish_event_idx - self.finish_event_idx);
+			Event::Finish {
+				wrapper,
+				error: _error,
+			} => {
+				*wrapper = Some(
+					NonZeroUsize::new(completed.finish_event_idx - self.finish_event_idx)
+						.expect("!= 0"),
+				);
 			}
 			_ => unreachable!(),
 		}
 		completed
 	}
+	pub fn wrap(self, p: &mut Parser, kind: SyntaxKind) -> CompletedMarker {
+		self.wrap_raw(p, kind, None)
+	}
+	pub fn wrap_error(self, p: &mut Parser, msg: impl AsRef<str>) -> CompletedMarker {
+		self.wrap_raw(
+			p,
+			SyntaxKind::ERROR_CUSTOM,
+			Some(SyntaxError::Custom {
+				error: msg.as_ref().to_owned(),
+			}),
+		)
+	}
 }
modifiedcrates/jrsonnet-rowan-parser/src/parser.rsdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/parser.rs
+++ b/crates/jrsonnet-rowan-parser/src/parser.rs
@@ -1,13 +1,12 @@
-use std::{cell::Cell, fmt::Display, rc::Rc};
+use std::{cell::Cell, fmt, rc::Rc};
 
 use miette::{LabeledSpan, SourceOffset, SourceSpan};
-use rowan::{GreenNode, TextRange, TextSize};
+use rowan::{GreenNode, TextRange};
 
 use crate::{
 	event::Event,
-	lex::Lexeme,
 	marker::{CompletedMarker, Marker, Ranger},
-	nodes::{BinaryOperatorKind, Literal, Number, Text, Trivia, UnaryOperatorKind},
+	nodes::{BinaryOperatorKind, Literal, Number, Text, UnaryOperatorKind},
 	token_set::SyntaxKindSet,
 	AstToken, SyntaxKind,
 	SyntaxKind::*,
@@ -17,20 +16,6 @@
 pub struct Parse {
 	pub green_node: GreenNode,
 	pub errors: Vec<LocatedSyntaxError>,
-}
-
-#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
-pub enum ExpectedSyntax {
-	Named(&'static str),
-	Unnamed(SyntaxKind),
-}
-impl Display for ExpectedSyntax {
-	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-		match self {
-			ExpectedSyntax::Named(n) => write!(f, "{}", n),
-			ExpectedSyntax::Unnamed(u) => write!(f, "{:?}", u),
-		}
-	}
 }
 
 pub struct Parser {
@@ -41,14 +26,11 @@
 	pub entered: u32,
 	pub hints: Vec<(u32, TextRange, String)>,
 	pub last_error_token: usize,
-	expected_syntax: Option<ExpectedSyntax>,
-	expected_syntax_tracking_state: Rc<Cell<ExpectedSyntaxTrackingState>>,
+	expected_syntax_tracking_state: Rc<Cell<ExpectedSyntax>>,
 	steps: Cell<u64>,
 }
 
-const DEFAULT_RECOVERY_SET: SyntaxKindSet = TS![];
-
-#[derive(Clone, Debug, PartialEq, Eq)]
+#[derive(Clone, Debug)]
 pub enum SyntaxError {
 	Unexpected {
 		expected: ExpectedSyntax,
@@ -80,11 +62,11 @@
 		dbg!(&val);
 		match val.error {
 			SyntaxError::Unexpected { expected, found } => LabeledSpan::new_with_span(
-				Some(format!("expected {}, found {:?}", expected, found)),
+				Some(format!("expected {expected}, found {found:?}")),
 				span,
 			),
 			SyntaxError::Missing { expected } => {
-				LabeledSpan::new_with_span(Some(format!("missing {}", expected)), span)
+				LabeledSpan::new_with_span(Some(format!("missing {expected}")), span)
 			}
 			SyntaxError::Custom { error } | SyntaxError::Hint { error } => {
 				LabeledSpan::new_with_span(Some(error), span)
@@ -102,10 +84,7 @@
 			entered: 0,
 			last_error_token: 0,
 			hints: vec![],
-			expected_syntax: None,
-			expected_syntax_tracking_state: Rc::new(Cell::new(
-				ExpectedSyntaxTrackingState::Unnamed,
-			)),
+			expected_syntax_tracking_state: Rc::new(Cell::new(ExpectedSyntax::Unnamed(TS![]))),
 			steps: Cell::new(0),
 		}
 	}
@@ -119,9 +98,8 @@
 		self.hints.truncate(self.hints.len() - amount)
 	}
 	fn clear_expected_syntaxes(&mut self) {
-		self.expected_syntax = None;
 		self.expected_syntax_tracking_state
-			.set(ExpectedSyntaxTrackingState::Unnamed);
+			.set(ExpectedSyntax::Unnamed(TS![]));
 	}
 	pub fn start(&mut self) -> Marker {
 		let start_event_idx = self.events.len();
@@ -166,38 +144,19 @@
 		} else {
 			self.error_with_no_skip();
 		}
-	}
-	pub(crate) fn error_with_recovery_set(
-		&mut self,
-		recovery_set: SyntaxKindSet,
-	) -> CompletedMarker {
-		self.error_with_recovery_set_no_default(recovery_set.union(DEFAULT_RECOVERY_SET))
 	}
 	pub fn error_with_no_skip(&mut self) -> CompletedMarker {
-		self.error_with_recovery_set_no_default(SyntaxKindSet::ALL)
+		self.error_with_recovery_set(SyntaxKindSet::ALL)
 	}
 
-	pub fn error_with_recovery_set_no_default(
-		&mut self,
-		recovery_set: SyntaxKindSet,
-	) -> CompletedMarker {
-		let expected_syntax = self
-			.expected_syntax
-			.take()
-			.unwrap_or(ExpectedSyntax::Named("unknown"));
+	pub fn error_with_recovery_set(&mut self, recovery_set: SyntaxKindSet) -> CompletedMarker {
+		let expected = self.expected_syntax_tracking_state.get();
 		self.expected_syntax_tracking_state
-			.set(ExpectedSyntaxTrackingState::Unnamed);
+			.set(ExpectedSyntax::Unnamed(TS![]));
 
 		if self.at_end() || self.at_ts(recovery_set) {
-			// let range = self
-			// 	.offset
-			// 	.unwrap_or_else(|| TextRange::at(TextSize::from(0), TextSize::from(0)));
 			let m = self.start();
-			let m = m.complete(self, ERROR_MISSING_TOKEN);
-			self.events.push(Event::Error(SyntaxError::Missing {
-				expected: expected_syntax,
-			}));
-			return m;
+			return m.complete_missing(self, expected);
 		}
 
 		let current_token = self.current();
@@ -206,11 +165,7 @@
 
 		let m = self.start();
 		self.bump();
-		let m = m.complete(self, ERROR_UNEXPECTED_TOKEN);
-		self.events.push(Event::Error(SyntaxError::Unexpected {
-			expected: expected_syntax,
-			found: current_token,
-		}));
+		let m = m.complete_unexpected(self, expected, current_token);
 		self.clear_expected_syntaxes();
 		m
 	}
@@ -269,8 +224,7 @@
 	#[must_use]
 	pub(crate) fn expected_syntax_name(&mut self, name: &'static str) -> ExpectedSyntaxGuard {
 		self.expected_syntax_tracking_state
-			.set(ExpectedSyntaxTrackingState::Named);
-		self.expected_syntax = Some(ExpectedSyntax::Named(name));
+			.set(ExpectedSyntax::Named(name));
 
 		ExpectedSyntaxGuard::new(Rc::clone(&self.expected_syntax_tracking_state))
 	}
@@ -278,12 +232,21 @@
 		self.nth_at(0, kind)
 	}
 	pub fn nth_at(&mut self, n: usize, kind: SyntaxKind) -> bool {
-		if let ExpectedSyntaxTrackingState::Unnamed = self.expected_syntax_tracking_state.get() {
-			self.expected_syntax = Some(ExpectedSyntax::Unnamed(kind));
+		if n == 0 {
+			if let ExpectedSyntax::Unnamed(kinds) = self.expected_syntax_tracking_state.get() {
+				let kinds = kinds.with(kind);
+				self.expected_syntax_tracking_state
+					.set(ExpectedSyntax::Unnamed(kinds))
+			}
 		}
 		self.nth(n) == kind
 	}
 	pub fn at_ts(&mut self, set: SyntaxKindSet) -> bool {
+		if let ExpectedSyntax::Unnamed(kinds) = self.expected_syntax_tracking_state.get() {
+			let kinds = kinds.union(set);
+			self.expected_syntax_tracking_state
+				.set(ExpectedSyntax::Unnamed(kinds))
+		}
 		set.contains(self.current())
 	}
 	pub fn at_end(&mut self) -> bool {
@@ -291,11 +254,11 @@
 	}
 }
 pub(crate) struct ExpectedSyntaxGuard {
-	expected_syntax_tracking_state: Rc<Cell<ExpectedSyntaxTrackingState>>,
+	expected_syntax_tracking_state: Rc<Cell<ExpectedSyntax>>,
 }
 
 impl ExpectedSyntaxGuard {
-	fn new(expected_syntax_tracking_state: Rc<Cell<ExpectedSyntaxTrackingState>>) -> Self {
+	fn new(expected_syntax_tracking_state: Rc<Cell<ExpectedSyntax>>) -> Self {
 		Self {
 			expected_syntax_tracking_state,
 		}
@@ -305,14 +268,22 @@
 impl Drop for ExpectedSyntaxGuard {
 	fn drop(&mut self) {
 		self.expected_syntax_tracking_state
-			.set(ExpectedSyntaxTrackingState::Unnamed);
+			.set(ExpectedSyntax::Unnamed(TS![]));
 	}
 }
 
-#[derive(Debug, Clone, Copy)]
-enum ExpectedSyntaxTrackingState {
-	Named,
-	Unnamed,
+#[derive(Clone, Debug, Copy)]
+pub enum ExpectedSyntax {
+	Named(&'static str),
+	Unnamed(SyntaxKindSet),
+}
+impl fmt::Display for ExpectedSyntax {
+	fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+		match self {
+			ExpectedSyntax::Named(name) => write!(f, "{name}"),
+			ExpectedSyntax::Unnamed(set) => write!(f, "{set}"),
+		}
+	}
 }
 
 fn expr(p: &mut Parser) -> CompletedMarker {
@@ -357,44 +328,43 @@
 	}
 	Ok(lhs)
 }
-fn compspec(p: &mut Parser) {
-	assert!(p.at(T![for]) || p.at(T![if]));
+
+const COMPSPEC: SyntaxKindSet = TS![for if];
+fn compspec(p: &mut Parser) -> CompletedMarker {
+	assert!(p.at_ts(COMPSPEC));
 	if p.at(T![for]) {
 		let m = p.start();
 		p.bump();
 		name(p);
 		p.expect(T![in]);
 		expr(p);
-		m.complete(p, FOR_SPEC);
+		m.complete(p, FOR_SPEC)
 	} else if p.at(T![if]) {
 		let m = p.start();
 		p.bump();
 		expr(p);
-		m.complete(p, IF_SPEC);
+		m.complete(p, IF_SPEC)
 	} else {
 		unreachable!()
 	}
 }
+
 fn comma(p: &mut Parser) -> bool {
-	if p.at(T![,]) {
-		p.bump();
-		true
-	} else {
-		false
-	}
+	comma_with_alternatives(p, TS![])
 }
 fn comma_with_alternatives(p: &mut Parser, set: SyntaxKindSet) -> bool {
 	if p.at(T![,]) {
 		p.bump();
 		true
 	} else if p.at_ts(set) {
-		p.expect_with_no_skip(T![,]);
-		p.bump();
+		let _ex = p.expected_syntax_name("comma");
+		p.expect_with_recovery_set(T![,], TS![]);
 		true
 	} else {
 		false
 	}
 }
+
 fn field_name(p: &mut Parser) {
 	let _e = p.expected_syntax_name("field name");
 	let m = p.start();
@@ -410,49 +380,17 @@
 		text(p);
 		m.complete(p, FIELD_NAME_FIXED);
 	} else {
-		p.error_with_recovery_set(TS![;]);
+		m.forget(p);
+		p.error_with_recovery_set(TS![; : :: ::: '(']);
 	}
 }
 fn visibility(p: &mut Parser) {
 	if p.at_ts(TS![: :: :::]) {
 		p.bump()
 	} else {
-		p.error_with_recovery_set(TS![]);
+		p.error_with_recovery_set(TS![=]);
 	}
 }
-fn field(p: &mut Parser) {
-	let m = p.start();
-	field_name(p);
-	let plus = if p.at(T![+]) {
-		let r = p.start_ranger();
-		p.bump();
-		Some(r.finish(p))
-	} else {
-		None
-	};
-	let params = if p.at(T!['(']) {
-		// if let Some(plus) = plus {
-		// 	p.custom_error(plus, "can't extend with method");
-		// }
-		params_desc(p);
-		// if p.at(T![+]) {
-		// 	let r = p.start_ranger();
-		// 	p.bump();
-		// 	p.custom_error(r.finish(p), "can't extend with method");
-		// }
-		true
-	} else {
-		false
-	};
-	visibility(p);
-	expr(p);
-
-	if params {
-		m.complete(p, FIELD_METHOD)
-	} else {
-		m.complete(p, FIELD_NORMAL)
-	};
-}
 fn assertion(p: &mut Parser) {
 	let m = p.start();
 	p.bump_assert(T![assert]);
@@ -468,11 +406,27 @@
 	let m = p.start();
 	p.bump_assert(T!['{']);
 
+	let mut elems = 0;
+	let mut compspecs = Vec::new();
 	loop {
 		if p.at(T!['}']) {
 			p.bump();
 			break;
 		}
+		if p.at_ts(COMPSPEC) {
+			if elems == 0 {
+				let m = p.start();
+				m.complete_missing(p, ExpectedSyntax::Named("field definition"));
+			}
+			while p.at_ts(COMPSPEC) {
+				compspecs.push(compspec(p));
+			}
+			if comma_with_alternatives(p, TS![;]) {
+				continue;
+			}
+			p.expect(R_BRACE);
+			break;
+		}
 		let m = p.start();
 		if p.at(T![local]) {
 			obj_local(p);
@@ -481,20 +435,57 @@
 			assertion(p);
 			m.complete(p, MEMBER_ASSERT_STMT)
 		} else {
-			field(p);
-			while p.at(T![for]) || p.at(T![if]) {
-				compspec(p)
+			field_name(p);
+			if p.at(T![+]) {
+				p.bump();
+			}
+			let params = if p.at(T!['(']) {
+				params_desc(p);
+				visibility(p);
+				expr(p);
+				true
+			} else if p.at_ts(TS![: :: :::]) && p.nth_at(1, T![function]) {
+				visibility(p);
+				p.bump_assert(T![function]);
+				params_desc(p);
+				expr(p);
+				true
+			} else {
+				visibility(p);
+				expr(p);
+				false
+			};
+
+			if params {
+				m.complete(p, MEMBER_FIELD_METHOD)
+			} else {
+				m.complete(p, MEMBER_FIELD_NORMAL)
 			}
-			m.complete(p, MEMBER_FIELD)
 		};
-		if comma_with_alternatives(p, SyntaxKindSet::new(&[T![=]])) {
+		elems += 1;
+		while p.at_ts(COMPSPEC) {
+			compspecs.push(compspec(p));
+		}
+		if comma_with_alternatives(p, TS![;]) {
 			continue;
 		}
 		p.expect(R_BRACE);
 		break;
 	}
 
-	m.complete(p, OBJ_BODY_MEMBER_LIST);
+	if elems > 1 && !compspecs.is_empty() {
+		for errored in compspecs {
+			errored.wrap_error(
+				p,
+				"compspec may only be used if there is only one array element",
+			);
+		}
+		m.complete(p, OBJ_BODY_MEMBER_LIST);
+	} else if !compspecs.is_empty() {
+		m.complete(p, OBJ_BODY_COMP);
+	} else {
+		m.complete(p, OBJ_BODY_MEMBER_LIST);
+	}
 	m_t.complete(p, EXPR_OBJECT)
 }
 fn param(p: &mut Parser) {
@@ -530,6 +521,7 @@
 	p.bump_assert(T!['(']);
 
 	let started_named = Cell::new(false);
+	let mut unnamed_after_named = Vec::new();
 
 	loop {
 		if p.at(T![')']) {
@@ -545,7 +537,10 @@
 			started_named.set(true);
 		} else {
 			expr(p);
-			m.complete(p, ARG);
+			let arg = m.complete(p, ARG);
+			if started_named.get() {
+				unnamed_after_named.push(arg)
+			}
 		}
 		if comma(p) {
 			continue;
@@ -556,6 +551,11 @@
 	if p.at(T![tailstrict]) {
 		p.bump()
 	}
+
+	for errored in unnamed_after_named {
+		errored.wrap_error(p, "can't use positional arguments after named");
+	}
+
 	m.complete(p, ARGS_DESC);
 }
 
@@ -564,8 +564,7 @@
 	let m = p.start();
 	p.bump_assert(T!['[']);
 
-	// This vec will have at most one element in case of correct input
-	let mut compspecs = Vec::with_capacity(1);
+	let mut compspecs = Vec::new();
 	let mut elems = 0;
 
 	loop {
@@ -573,16 +572,20 @@
 			p.bump();
 			break;
 		}
+		if elems != 0 && p.at_ts(COMPSPEC) {
+			while p.at_ts(COMPSPEC) {
+				compspecs.push(compspec(p));
+			}
+			if comma(p) {
+				continue;
+			}
+			p.expect(T![']']);
+			break;
+		}
 		elems += 1;
 		expr(p);
-		let c = p.start_ranger();
-		let mut had_spec = false;
-		while p.at(T![for]) || p.at(T![if]) {
-			had_spec = true;
-			compspec(p)
-		}
-		if had_spec {
-			compspecs.push(c.finish(p));
+		while p.at_ts(COMPSPEC) {
+			compspecs.push(compspec(p));
 		}
 		if comma(p) {
 			continue;
@@ -593,10 +596,10 @@
 
 	if elems > 1 && !compspecs.is_empty() {
 		for spec in compspecs {
-			// p.custom_error(
-			// 	spec,
-			// 	"compspec may only be used if there is only one array element",
-			// )
+			spec.wrap_error(
+				p,
+				"compspec may only be used if there is only one array element",
+			);
 		}
 
 		m.complete(p, EXPR_ARRAY)
addedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec.snapdiffbeforeafterboth
--- /dev/null
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec.snap
@@ -0,0 +1,34 @@
+---
+source: crates/jrsonnet-rowan-parser/src/tests.rs
+expression: "[a for a in [1, 2, 3]]\n"
+---
+SOURCE_FILE@0..23
+  EXPR_ARRAY_COMP@0..22
+    L_BRACK@0..1 "["
+    EXPR_VAR@1..2
+      NAME@1..2
+        IDENT@1..2 "a"
+    WHITESPACE@2..3 " "
+    FOR_SPEC@3..21
+      FOR_KW@3..6 "for"
+      WHITESPACE@6..7 " "
+      NAME@7..8
+        IDENT@7..8 "a"
+      WHITESPACE@8..9 " "
+      IN_KW@9..11 "in"
+      WHITESPACE@11..12 " "
+      EXPR_ARRAY@12..21
+        L_BRACK@12..13 "["
+        EXPR_NUMBER@13..14
+          FLOAT@13..14 "1"
+        COMMA@14..15 ","
+        WHITESPACE@15..16 " "
+        EXPR_NUMBER@16..17
+          FLOAT@16..17 "2"
+        COMMA@17..18 ","
+        WHITESPACE@18..19 " "
+        EXPR_NUMBER@19..20
+          FLOAT@19..20 "3"
+        R_BRACK@20..21 "]"
+    R_BRACK@21..22 "]"
+  WHITESPACE@22..23 "\n"
addedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_comma.snapdiffbeforeafterboth

no changes

addedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_incompatible_with_multiple_elems.snapdiffbeforeafterboth
--- /dev/null
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_incompatible_with_multiple_elems.snap
@@ -0,0 +1,49 @@
+---
+source: crates/jrsonnet-rowan-parser/src/tests.rs
+expression: "[a for a in [1, 2, 3], b]\n"
+---
+SOURCE_FILE@0..26
+  EXPR_ARRAY@0..25
+    L_BRACK@0..1 "["
+    EXPR_VAR@1..2
+      NAME@1..2
+        IDENT@1..2 "a"
+    WHITESPACE@2..3 " "
+    ERROR_CUSTOM@3..21
+      FOR_SPEC@3..21
+        FOR_KW@3..6 "for"
+        WHITESPACE@6..7 " "
+        NAME@7..8
+          IDENT@7..8 "a"
+        WHITESPACE@8..9 " "
+        IN_KW@9..11 "in"
+        WHITESPACE@11..12 " "
+        EXPR_ARRAY@12..21
+          L_BRACK@12..13 "["
+          EXPR_NUMBER@13..14
+            FLOAT@13..14 "1"
+          COMMA@14..15 ","
+          WHITESPACE@15..16 " "
+          EXPR_NUMBER@16..17
+            FLOAT@16..17 "2"
+          COMMA@17..18 ","
+          WHITESPACE@18..19 " "
+          EXPR_NUMBER@19..20
+            FLOAT@19..20 "3"
+          R_BRACK@20..21 "]"
+    COMMA@21..22 ","
+    WHITESPACE@22..23 " "
+    EXPR_VAR@23..24
+      NAME@23..24
+        IDENT@23..24 "b"
+    R_BRACK@24..25 "]"
+  WHITESPACE@25..26 "\n"
+===
+LocatedSyntaxError { error: Custom { error: "compspec may only be used if there is only one array element" }, range: 3..21 }
+===
+  x syntax error
+   ,----
+ 1 | [a for a in [1, 2, 3], b]
+   :    ^^^^^^^^^|^^^^^^^^
+   :             `-- compspec may only be used if there is only one array element
+   `----
addedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_incompatible_with_multiple_elems_w.snapdiffbeforeafterboth
--- /dev/null
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_incompatible_with_multiple_elems_w.snap
@@ -0,0 +1,55 @@
+---
+source: crates/jrsonnet-rowan-parser/src/tests.rs
+expression: "[a, b, for a in [1, 2, 3], c]\n"
+---
+SOURCE_FILE@0..30
+  EXPR_ARRAY@0..29
+    L_BRACK@0..1 "["
+    EXPR_VAR@1..2
+      NAME@1..2
+        IDENT@1..2 "a"
+    COMMA@2..3 ","
+    WHITESPACE@3..4 " "
+    EXPR_VAR@4..5
+      NAME@4..5
+        IDENT@4..5 "b"
+    COMMA@5..6 ","
+    WHITESPACE@6..7 " "
+    ERROR_CUSTOM@7..25
+      FOR_SPEC@7..25
+        FOR_KW@7..10 "for"
+        WHITESPACE@10..11 " "
+        NAME@11..12
+          IDENT@11..12 "a"
+        WHITESPACE@12..13 " "
+        IN_KW@13..15 "in"
+        WHITESPACE@15..16 " "
+        EXPR_ARRAY@16..25
+          L_BRACK@16..17 "["
+          EXPR_NUMBER@17..18
+            FLOAT@17..18 "1"
+          COMMA@18..19 ","
+          WHITESPACE@19..20 " "
+          EXPR_NUMBER@20..21
+            FLOAT@20..21 "2"
+          COMMA@21..22 ","
+          WHITESPACE@22..23 " "
+          EXPR_NUMBER@23..24
+            FLOAT@23..24 "3"
+          R_BRACK@24..25 "]"
+    COMMA@25..26 ","
+    WHITESPACE@26..27 " "
+    EXPR_VAR@27..28
+      NAME@27..28
+        IDENT@27..28 "c"
+    R_BRACK@28..29 "]"
+  WHITESPACE@29..30 "\n"
+===
+LocatedSyntaxError { error: Custom { error: "compspec may only be used if there is only one array element" }, range: 7..25 }
+===
+  x syntax error
+   ,----
+ 1 | [a, b, for a in [1, 2, 3], c]
+   :        ^^^^^^^^^|^^^^^^^^
+   :                 `-- compspec may only be used if there is only one array element
+   `----
addedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_no_elems.snapdiffbeforeafterboth
--- /dev/null
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_no_elems.snap
@@ -0,0 +1,40 @@
+---
+source: crates/jrsonnet-rowan-parser/src/tests.rs
+expression: "[for a in [1, 2, 3]]\n"
+---
+SOURCE_FILE@0..21
+  EXPR_ARRAY_COMP@0..20
+    L_BRACK@0..1 "["
+    ERROR_MISSING_TOKEN@1..1
+    FOR_SPEC@1..19
+      FOR_KW@1..4 "for"
+      WHITESPACE@4..5 " "
+      NAME@5..6
+        IDENT@5..6 "a"
+      WHITESPACE@6..7 " "
+      IN_KW@7..9 "in"
+      WHITESPACE@9..10 " "
+      EXPR_ARRAY@10..19
+        L_BRACK@10..11 "["
+        EXPR_NUMBER@11..12
+          FLOAT@11..12 "1"
+        COMMA@12..13 ","
+        WHITESPACE@13..14 " "
+        EXPR_NUMBER@14..15
+          FLOAT@14..15 "2"
+        COMMA@15..16 ","
+        WHITESPACE@16..17 " "
+        EXPR_NUMBER@17..18
+          FLOAT@17..18 "3"
+        R_BRACK@18..19 "]"
+    R_BRACK@19..20 "]"
+  WHITESPACE@20..21 "\n"
+===
+LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 1..1 }
+===
+  x syntax error
+   ,----
+ 1 | [for a in [1, 2, 3]]
+   :  ^
+   :  `-- missing expression
+   `----
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_rparen.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_rparen.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_rparen.snap
@@ -21,7 +21,7 @@
       ERROR_MISSING_TOKEN@14..14
     ERROR_MISSING_TOKEN@14..14
 ===
-LocatedSyntaxError { error: Missing { expected: Unnamed(R_PAREN) }, range: 14..14 }
+LocatedSyntaxError { error: Missing { expected: Unnamed(SyntaxKindSet([R_PAREN, COMMA, ASSIGN])) }, range: 14..14 }
 LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 14..14 }
 ===
   x syntax error
@@ -29,5 +29,5 @@
  1 | function(a, b
    :               ^^
    :               |`-- missing expression
-   :               `-- missing R_PAREN
+   :               `-- missing R_PAREN, COMMA or ASSIGN
    `----
addedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_method.snapdiffbeforeafterboth
--- /dev/null
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_method.snap
@@ -0,0 +1,52 @@
+---
+source: crates/jrsonnet-rowan-parser/src/tests.rs
+expression: "local\n\ta(x) = x,\n\ta = function(x) x,\n; c\n"
+---
+SOURCE_FILE@0..41
+  EXPR_LOCAL@0..40
+    LOCAL_KW@0..5 "local"
+    WHITESPACE@5..7 "\n\t"
+    BIND_FUNCTION@7..15
+      NAME@7..8
+        IDENT@7..8 "a"
+      PARAMS_DESC@8..11
+        L_PAREN@8..9 "("
+        PARAM@9..10
+          DESTRUCT_FULL@9..10
+            NAME@9..10
+              IDENT@9..10 "x"
+        R_PAREN@10..11 ")"
+      WHITESPACE@11..12 " "
+      ASSIGN@12..13 "="
+      WHITESPACE@13..14 " "
+      EXPR_VAR@14..15
+        NAME@14..15
+          IDENT@14..15 "x"
+    COMMA@15..16 ","
+    WHITESPACE@16..18 "\n\t"
+    BIND_FUNCTION@18..35
+      NAME@18..19
+        IDENT@18..19 "a"
+      WHITESPACE@19..20 " "
+      ASSIGN@20..21 "="
+      WHITESPACE@21..22 " "
+      FUNCTION_KW@22..30 "function"
+      PARAMS_DESC@30..33
+        L_PAREN@30..31 "("
+        PARAM@31..32
+          DESTRUCT_FULL@31..32
+            NAME@31..32
+              IDENT@31..32 "x"
+        R_PAREN@32..33 ")"
+      WHITESPACE@33..34 " "
+      EXPR_VAR@34..35
+        NAME@34..35
+          IDENT@34..35 "x"
+    COMMA@35..36 ","
+    WHITESPACE@36..37 "\n"
+    SEMI@37..38 ";"
+    WHITESPACE@38..39 " "
+    EXPR_VAR@39..40
+      NAME@39..40
+        IDENT@39..40 "c"
+  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
@@ -33,7 +33,7 @@
     ERROR_MISSING_TOKEN@25..25
     ERROR_MISSING_TOKEN@25..25
 ===
-LocatedSyntaxError { error: Missing { expected: Unnamed(SEMI) }, range: 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 }
 ===
   x syntax error
@@ -42,5 +42,5 @@
  3 | 1
    :   ^^
    :   |`-- missing expression
-   :   `-- missing SEMI
+   :   `-- missing L_BRACK, L_PAREN, L_BRACE, SEMI, DOT or COMMA
    `----
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
@@ -18,7 +18,7 @@
     ERROR_MISSING_TOKEN@10..10
 ===
 LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 10..10 }
-LocatedSyntaxError { error: Missing { expected: Unnamed(SEMI) }, range: 10..10 }
+LocatedSyntaxError { error: Missing { expected: Unnamed(SyntaxKindSet([SEMI, COMMA])) }, range: 10..10 }
 LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 10..10 }
 ===
   x syntax error
@@ -26,6 +26,6 @@
  1 | local a =
    :           ^^^
    :           `-- missing expression
-   :           |`-- missing SEMI
+   :           |`-- missing SEMI or COMMA
    :           `-- missing expression
    `----
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__named_before_positional.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__named_before_positional.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__named_before_positional.snap
@@ -3,59 +3,68 @@
 expression: "a(1, 2, b=4, 3, 5, k = 12, 6)\n"
 ---
 SOURCE_FILE@0..30
-  EXPR_APPLY@0..30
+  EXPR_APPLY@0..29
     EXPR_VAR@0..1
-      IDENT@0..1 "a"
-    L_PAREN@1..2 "("
-    ARG@2..3
-      EXPR_NUMBER@2..3
-        NUMBER@2..3 "1"
-    COMMA@3..4 ","
-    WHITESPACE@4..5 " "
-    ARG@5..6
-      EXPR_NUMBER@5..6
-        NUMBER@5..6 "2"
-    COMMA@6..7 ","
-    WHITESPACE@7..8 " "
-    ARG@8..11
-      IDENT@8..9 "b"
-      ASSIGN@9..10 "="
-      EXPR_NUMBER@10..11
-        NUMBER@10..11 "4"
-    COMMA@11..12 ","
-    WHITESPACE@12..13 " "
-    ERROR@13..28
-      ARG@13..14
-        EXPR_NUMBER@13..14
-          NUMBER@13..14 "3"
+      NAME@0..1
+        IDENT@0..1 "a"
+    ARGS_DESC@1..29
+      L_PAREN@1..2 "("
+      ARG@2..3
+        EXPR_NUMBER@2..3
+          FLOAT@2..3 "1"
+      COMMA@3..4 ","
+      WHITESPACE@4..5 " "
+      ARG@5..6
+        EXPR_NUMBER@5..6
+          FLOAT@5..6 "2"
+      COMMA@6..7 ","
+      WHITESPACE@7..8 " "
+      ARG@8..11
+        NAME@8..9
+          IDENT@8..9 "b"
+        ASSIGN@9..10 "="
+        EXPR_NUMBER@10..11
+          FLOAT@10..11 "4"
+      COMMA@11..12 ","
+      WHITESPACE@12..13 " "
+      ERROR_CUSTOM@13..14
+        ARG@13..14
+          EXPR_NUMBER@13..14
+            FLOAT@13..14 "3"
       COMMA@14..15 ","
       WHITESPACE@15..16 " "
-      ARG@16..17
-        EXPR_NUMBER@16..17
-          NUMBER@16..17 "5"
+      ERROR_CUSTOM@16..17
+        ARG@16..17
+          EXPR_NUMBER@16..17
+            FLOAT@16..17 "5"
       COMMA@17..18 ","
       WHITESPACE@18..19 " "
       ARG@19..25
-        IDENT@19..20 "k"
+        NAME@19..20
+          IDENT@19..20 "k"
         WHITESPACE@20..21 " "
         ASSIGN@21..22 "="
         WHITESPACE@22..23 " "
         EXPR_NUMBER@23..25
-          NUMBER@23..25 "12"
+          FLOAT@23..25 "12"
       COMMA@25..26 ","
       WHITESPACE@26..27 " "
-      ARG@27..28
-        EXPR_NUMBER@27..28
-          NUMBER@27..28 "6"
-    R_PAREN@28..29 ")"
-    WHITESPACE@29..30 "\n"
+      ERROR_CUSTOM@27..28
+        ARG@27..28
+          EXPR_NUMBER@27..28
+            FLOAT@27..28 "6"
+      R_PAREN@28..29 ")"
+  WHITESPACE@29..30 "\n"
 ===
-Custom { error: "positional arguments can't be placed after named", range: 13..28 }
+LocatedSyntaxError { error: Custom { error: "can't use positional arguments after named" }, range: 13..14 }
+LocatedSyntaxError { error: Custom { error: "can't use positional arguments after named" }, range: 16..17 }
+LocatedSyntaxError { error: Custom { error: "can't use positional arguments after named" }, range: 27..28 }
 ===
   x syntax error
    ,----
  1 | a(1, 2, b=4, 3, 5, k = 12, 6)
-   :              ^^^^^^^|^^^^^^^
-   :                     `-- positional arguments can't be placed after named
+   :              |  |          |
+   :              |  |          `-- can't use positional arguments after named
+   :              |  `-- can't use positional arguments after named
+   :              `-- can't use positional arguments after named
    `----
-
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_lhs.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_lhs.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_lhs.snap
@@ -9,7 +9,7 @@
   WHITESPACE@1..2 " "
 ===
 LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 0..0 }
-LocatedSyntaxError { error: Unexpected { expected: Unnamed(EOF), found: PLUS }, range: 0..1 }
+LocatedSyntaxError { error: Unexpected { expected: Unnamed(SyntaxKindSet([EOF])), found: PLUS }, range: 0..1 }
 ===
   x syntax error
    ,----
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_operator.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_operator.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_operator.snap
@@ -10,11 +10,11 @@
     FLOAT@2..3 "2"
   WHITESPACE@3..4 "\n"
 ===
-LocatedSyntaxError { error: Unexpected { expected: Unnamed(EOF), found: FLOAT }, range: 2..3 }
+LocatedSyntaxError { error: Unexpected { expected: Unnamed(SyntaxKindSet([EOF, L_BRACK, L_PAREN, L_BRACE, DOT])), found: FLOAT }, range: 2..3 }
 ===
   x syntax error
    ,----
  1 | 2 2
    :   |
-   :   `-- expected EOF, found FLOAT
+   :   `-- expected EOF, L_BRACK, L_PAREN, L_BRACE or DOT, found FLOAT
    `----
addedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec.snapdiffbeforeafterboth
--- /dev/null
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec.snap
@@ -0,0 +1,39 @@
+---
+source: crates/jrsonnet-rowan-parser/src/tests.rs
+expression: "{a:1 for a in [1, 2, 3]}\n"
+---
+SOURCE_FILE@0..25
+  EXPR_OBJECT@0..24
+    OBJ_BODY_COMP@0..24
+      L_BRACE@0..1 "{"
+      MEMBER_FIELD_NORMAL@1..4
+        FIELD_NAME_FIXED@1..2
+          NAME@1..2
+            IDENT@1..2 "a"
+        COLON@2..3 ":"
+        EXPR_NUMBER@3..4
+          FLOAT@3..4 "1"
+      WHITESPACE@4..5 " "
+      FOR_SPEC@5..23
+        FOR_KW@5..8 "for"
+        WHITESPACE@8..9 " "
+        NAME@9..10
+          IDENT@9..10 "a"
+        WHITESPACE@10..11 " "
+        IN_KW@11..13 "in"
+        WHITESPACE@13..14 " "
+        EXPR_ARRAY@14..23
+          L_BRACK@14..15 "["
+          EXPR_NUMBER@15..16
+            FLOAT@15..16 "1"
+          COMMA@16..17 ","
+          WHITESPACE@17..18 " "
+          EXPR_NUMBER@18..19
+            FLOAT@18..19 "2"
+          COMMA@19..20 ","
+          WHITESPACE@20..21 " "
+          EXPR_NUMBER@21..22
+            FLOAT@21..22 "3"
+          R_BRACK@22..23 "]"
+      R_BRACE@23..24 "}"
+  WHITESPACE@24..25 "\n"
addedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_comma.snapdiffbeforeafterboth
--- /dev/null
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_comma.snap
@@ -0,0 +1,40 @@
+---
+source: crates/jrsonnet-rowan-parser/src/tests.rs
+expression: "{a:1, for a in [1, 2, 3]}\n"
+---
+SOURCE_FILE@0..26
+  EXPR_OBJECT@0..25
+    OBJ_BODY_COMP@0..25
+      L_BRACE@0..1 "{"
+      MEMBER_FIELD_NORMAL@1..4
+        FIELD_NAME_FIXED@1..2
+          NAME@1..2
+            IDENT@1..2 "a"
+        COLON@2..3 ":"
+        EXPR_NUMBER@3..4
+          FLOAT@3..4 "1"
+      COMMA@4..5 ","
+      WHITESPACE@5..6 " "
+      FOR_SPEC@6..24
+        FOR_KW@6..9 "for"
+        WHITESPACE@9..10 " "
+        NAME@10..11
+          IDENT@10..11 "a"
+        WHITESPACE@11..12 " "
+        IN_KW@12..14 "in"
+        WHITESPACE@14..15 " "
+        EXPR_ARRAY@15..24
+          L_BRACK@15..16 "["
+          EXPR_NUMBER@16..17
+            FLOAT@16..17 "1"
+          COMMA@17..18 ","
+          WHITESPACE@18..19 " "
+          EXPR_NUMBER@19..20
+            FLOAT@19..20 "2"
+          COMMA@20..21 ","
+          WHITESPACE@21..22 " "
+          EXPR_NUMBER@22..23
+            FLOAT@22..23 "3"
+          R_BRACK@23..24 "]"
+      R_BRACE@24..25 "}"
+  WHITESPACE@25..26 "\n"
addedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_multiple_elems.snapdiffbeforeafterboth
--- /dev/null
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_multiple_elems.snap
@@ -0,0 +1,58 @@
+---
+source: crates/jrsonnet-rowan-parser/src/tests.rs
+expression: "{a:1 for a in [1, 2, 3], b:1}\n"
+---
+SOURCE_FILE@0..30
+  EXPR_OBJECT@0..29
+    OBJ_BODY_MEMBER_LIST@0..29
+      L_BRACE@0..1 "{"
+      MEMBER_FIELD_NORMAL@1..4
+        FIELD_NAME_FIXED@1..2
+          NAME@1..2
+            IDENT@1..2 "a"
+        COLON@2..3 ":"
+        EXPR_NUMBER@3..4
+          FLOAT@3..4 "1"
+      WHITESPACE@4..5 " "
+      ERROR_CUSTOM@5..23
+        FOR_SPEC@5..23
+          FOR_KW@5..8 "for"
+          WHITESPACE@8..9 " "
+          NAME@9..10
+            IDENT@9..10 "a"
+          WHITESPACE@10..11 " "
+          IN_KW@11..13 "in"
+          WHITESPACE@13..14 " "
+          EXPR_ARRAY@14..23
+            L_BRACK@14..15 "["
+            EXPR_NUMBER@15..16
+              FLOAT@15..16 "1"
+            COMMA@16..17 ","
+            WHITESPACE@17..18 " "
+            EXPR_NUMBER@18..19
+              FLOAT@18..19 "2"
+            COMMA@19..20 ","
+            WHITESPACE@20..21 " "
+            EXPR_NUMBER@21..22
+              FLOAT@21..22 "3"
+            R_BRACK@22..23 "]"
+      COMMA@23..24 ","
+      WHITESPACE@24..25 " "
+      MEMBER_FIELD_NORMAL@25..28
+        FIELD_NAME_FIXED@25..26
+          NAME@25..26
+            IDENT@25..26 "b"
+        COLON@26..27 ":"
+        EXPR_NUMBER@27..28
+          FLOAT@27..28 "1"
+      R_BRACE@28..29 "}"
+  WHITESPACE@29..30 "\n"
+===
+LocatedSyntaxError { error: Custom { error: "compspec may only be used if there is only one array element" }, range: 5..23 }
+===
+  x syntax error
+   ,----
+ 1 | {a:1 for a in [1, 2, 3], b:1}
+   :      ^^^^^^^^^|^^^^^^^^
+   :               `-- compspec may only be used if there is only one array element
+   `----
addedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_multiple_elems_w.snapdiffbeforeafterboth
--- /dev/null
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_multiple_elems_w.snap
@@ -0,0 +1,68 @@
+---
+source: crates/jrsonnet-rowan-parser/src/tests.rs
+expression: "{a:1, b:1, for a in [1, 2, 3], c:1}\n"
+---
+SOURCE_FILE@0..36
+  EXPR_OBJECT@0..35
+    OBJ_BODY_MEMBER_LIST@0..35
+      L_BRACE@0..1 "{"
+      MEMBER_FIELD_NORMAL@1..4
+        FIELD_NAME_FIXED@1..2
+          NAME@1..2
+            IDENT@1..2 "a"
+        COLON@2..3 ":"
+        EXPR_NUMBER@3..4
+          FLOAT@3..4 "1"
+      COMMA@4..5 ","
+      WHITESPACE@5..6 " "
+      MEMBER_FIELD_NORMAL@6..9
+        FIELD_NAME_FIXED@6..7
+          NAME@6..7
+            IDENT@6..7 "b"
+        COLON@7..8 ":"
+        EXPR_NUMBER@8..9
+          FLOAT@8..9 "1"
+      COMMA@9..10 ","
+      WHITESPACE@10..11 " "
+      ERROR_CUSTOM@11..29
+        FOR_SPEC@11..29
+          FOR_KW@11..14 "for"
+          WHITESPACE@14..15 " "
+          NAME@15..16
+            IDENT@15..16 "a"
+          WHITESPACE@16..17 " "
+          IN_KW@17..19 "in"
+          WHITESPACE@19..20 " "
+          EXPR_ARRAY@20..29
+            L_BRACK@20..21 "["
+            EXPR_NUMBER@21..22
+              FLOAT@21..22 "1"
+            COMMA@22..23 ","
+            WHITESPACE@23..24 " "
+            EXPR_NUMBER@24..25
+              FLOAT@24..25 "2"
+            COMMA@25..26 ","
+            WHITESPACE@26..27 " "
+            EXPR_NUMBER@27..28
+              FLOAT@27..28 "3"
+            R_BRACK@28..29 "]"
+      COMMA@29..30 ","
+      WHITESPACE@30..31 " "
+      MEMBER_FIELD_NORMAL@31..34
+        FIELD_NAME_FIXED@31..32
+          NAME@31..32
+            IDENT@31..32 "c"
+        COLON@32..33 ":"
+        EXPR_NUMBER@33..34
+          FLOAT@33..34 "1"
+      R_BRACE@34..35 "}"
+  WHITESPACE@35..36 "\n"
+===
+LocatedSyntaxError { error: Custom { error: "compspec may only be used if there is only one array element" }, range: 11..29 }
+===
+  x syntax error
+   ,----
+ 1 | {a:1, b:1, for a in [1, 2, 3], c:1}
+   :            ^^^^^^^^^|^^^^^^^^
+   :                     `-- compspec may only be used if there is only one array element
+   `----
addedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_no_elems.snapdiffbeforeafterboth
--- /dev/null
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_no_elems.snap
@@ -0,0 +1,41 @@
+---
+source: crates/jrsonnet-rowan-parser/src/tests.rs
+expression: "{for a in [1, 2, 3]}\n"
+---
+SOURCE_FILE@0..21
+  EXPR_OBJECT@0..20
+    OBJ_BODY_COMP@0..20
+      L_BRACE@0..1 "{"
+      ERROR_MISSING_TOKEN@1..1
+      FOR_SPEC@1..19
+        FOR_KW@1..4 "for"
+        WHITESPACE@4..5 " "
+        NAME@5..6
+          IDENT@5..6 "a"
+        WHITESPACE@6..7 " "
+        IN_KW@7..9 "in"
+        WHITESPACE@9..10 " "
+        EXPR_ARRAY@10..19
+          L_BRACK@10..11 "["
+          EXPR_NUMBER@11..12
+            FLOAT@11..12 "1"
+          COMMA@12..13 ","
+          WHITESPACE@13..14 " "
+          EXPR_NUMBER@14..15
+            FLOAT@14..15 "2"
+          COMMA@15..16 ","
+          WHITESPACE@16..17 " "
+          EXPR_NUMBER@17..18
+            FLOAT@17..18 "3"
+          R_BRACK@18..19 "]"
+      R_BRACE@19..20 "}"
+  WHITESPACE@20..21 "\n"
+===
+LocatedSyntaxError { error: Missing { expected: Named("field definition") }, range: 1..1 }
+===
+  x syntax error
+   ,----
+ 1 | {for a in [1, 2, 3]}
+   :  ^
+   :  `-- missing field definition
+   `----
addedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_method.snapdiffbeforeafterboth
--- /dev/null
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_method.snap
@@ -0,0 +1,49 @@
+---
+source: crates/jrsonnet-rowan-parser/src/tests.rs
+expression: "{\n\ta(x): x,\n\ta: function(x) x,\n}\n"
+---
+SOURCE_FILE@0..33
+  EXPR_OBJECT@0..32
+    OBJ_BODY_MEMBER_LIST@0..32
+      L_BRACE@0..1 "{"
+      WHITESPACE@1..3 "\n\t"
+      MEMBER_FIELD_METHOD@3..10
+        FIELD_NAME_FIXED@3..4
+          NAME@3..4
+            IDENT@3..4 "a"
+        PARAMS_DESC@4..7
+          L_PAREN@4..5 "("
+          PARAM@5..6
+            DESTRUCT_FULL@5..6
+              NAME@5..6
+                IDENT@5..6 "x"
+          R_PAREN@6..7 ")"
+        COLON@7..8 ":"
+        WHITESPACE@8..9 " "
+        EXPR_VAR@9..10
+          NAME@9..10
+            IDENT@9..10 "x"
+      COMMA@10..11 ","
+      WHITESPACE@11..13 "\n\t"
+      MEMBER_FIELD_METHOD@13..29
+        FIELD_NAME_FIXED@13..14
+          NAME@13..14
+            IDENT@13..14 "a"
+        COLON@14..15 ":"
+        WHITESPACE@15..16 " "
+        FUNCTION_KW@16..24 "function"
+        PARAMS_DESC@24..27
+          L_PAREN@24..25 "("
+          PARAM@25..26
+            DESTRUCT_FULL@25..26
+              NAME@25..26
+                IDENT@25..26 "x"
+          R_PAREN@26..27 ")"
+        WHITESPACE@27..28 " "
+        EXPR_VAR@28..29
+          NAME@28..29
+            IDENT@28..29 "x"
+      COMMA@29..30 ","
+      WHITESPACE@30..31 "\n"
+      R_BRACE@31..32 "}"
+  WHITESPACE@32..33 "\n"
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
@@ -42,2575 +42,2553 @@
                 IDENT@39..41 "id"
       COMMA@41..42 ","
       WHITESPACE@42..46 "\n\n  "
-      MEMBER_FIELD@46..224
-        FIELD_NORMAL@46..224
-          FIELD_NAME_FIXED@46..54
-            NAME@46..54
-              IDENT@46..54 "thisFile"
-          COLONCOLON@54..56 "::"
-          WHITESPACE@56..57 " "
-          EXPR_ERROR@57..224
-            ERROR_KW@57..62 "error"
-            WHITESPACE@62..63 " "
-            EXPR_STRING@63..224
-              STRING_SINGLE@63..224 "'std.thisFile is depr ..."
+      MEMBER_FIELD_NORMAL@46..224
+        FIELD_NAME_FIXED@46..54
+          NAME@46..54
+            IDENT@46..54 "thisFile"
+        COLONCOLON@54..56 "::"
+        WHITESPACE@56..57 " "
+        EXPR_ERROR@57..224
+          ERROR_KW@57..62 "error"
+          WHITESPACE@62..63 " "
+          EXPR_STRING@63..224
+            STRING_SINGLE@63..224 "'std.thisFile is depr ..."
       COMMA@224..225 ","
       WHITESPACE@225..229 "\n\n  "
-      MEMBER_FIELD@229..249
-        FIELD_METHOD@229..249
-          FIELD_NAME_FIXED@229..237
-            NAME@229..237
-              IDENT@229..237 "toString"
-          PARAMS_DESC@237..240
-            L_PAREN@237..238 "("
-            PARAM@238..239
-              DESTRUCT_FULL@238..239
-                NAME@238..239
-                  IDENT@238..239 "a"
-            R_PAREN@239..240 ")"
-          COLONCOLON@240..242 "::"
-          WHITESPACE@242..243 " "
-          EXPR_BINARY@243..249
-            LHS_EXPR@243..245
-              EXPR_STRING@243..245
-                STRING_SINGLE@243..245 "''"
-            WHITESPACE@245..246 " "
-            PLUS@246..247 "+"
-            WHITESPACE@247..248 " "
-            EXPR_VAR@248..249
-              NAME@248..249
-                IDENT@248..249 "a"
+      MEMBER_FIELD_METHOD@229..249
+        FIELD_NAME_FIXED@229..237
+          NAME@229..237
+            IDENT@229..237 "toString"
+        PARAMS_DESC@237..240
+          L_PAREN@237..238 "("
+          PARAM@238..239
+            DESTRUCT_FULL@238..239
+              NAME@238..239
+                IDENT@238..239 "a"
+          R_PAREN@239..240 ")"
+        COLONCOLON@240..242 "::"
+        WHITESPACE@242..243 " "
+        EXPR_BINARY@243..249
+          LHS_EXPR@243..245
+            EXPR_STRING@243..245
+              STRING_SINGLE@243..245 "''"
+          WHITESPACE@245..246 " "
+          PLUS@246..247 "+"
+          WHITESPACE@247..248 " "
+          EXPR_VAR@248..249
+            NAME@248..249
+              IDENT@248..249 "a"
       COMMA@249..250 ","
       WHITESPACE@250..254 "\n\n  "
-      MEMBER_FIELD@254..397
-        FIELD_METHOD@254..397
-          FIELD_NAME_FIXED@254..265
-            NAME@254..265
-              IDENT@254..265 "lstripChars"
-          PARAMS_DESC@265..277
-            L_PAREN@265..266 "("
-            PARAM@266..269
-              DESTRUCT_FULL@266..269
-                NAME@266..269
-                  IDENT@266..269 "str"
-            COMMA@269..270 ","
-            WHITESPACE@270..271 " "
-            PARAM@271..276
-              DESTRUCT_FULL@271..276
-                NAME@271..276
-                  IDENT@271..276 "chars"
-            R_PAREN@276..277 ")"
-          COLONCOLON@277..279 "::"
-          WHITESPACE@279..284 "\n    "
-          EXPR_IF_THEN_ELSE@284..397
-            IF_KW@284..286 "if"
-            WHITESPACE@286..287 " "
-            EXPR_BINARY@287..335
-              LHS_EXPR@287..306
-                EXPR_BINARY@287..306
-                  LHS_EXPR@287..302
-                    EXPR_APPLY@287..302
-                      EXPR_INDEX@287..297
-                        EXPR_VAR@287..290
-                          NAME@287..290
-                            IDENT@287..290 "std"
-                        DOT@290..291 "."
-                        NAME@291..297
-                          IDENT@291..297 "length"
-                      ARGS_DESC@297..302
-                        L_PAREN@297..298 "("
-                        ARG@298..301
-                          EXPR_VAR@298..301
-                            NAME@298..301
-                              IDENT@298..301 "str"
-                        R_PAREN@301..302 ")"
-                  WHITESPACE@302..303 " "
-                  GT@303..304 ">"
-                  WHITESPACE@304..305 " "
-                  EXPR_NUMBER@305..306
-                    FLOAT@305..306 "0"
-              WHITESPACE@306..307 " "
-              AND@307..309 "&&"
-              WHITESPACE@309..310 " "
-              EXPR_APPLY@310..335
-                EXPR_INDEX@310..320
-                  EXPR_VAR@310..313
-                    NAME@310..313
-                      IDENT@310..313 "std"
-                  DOT@313..314 "."
-                  NAME@314..320
-                    IDENT@314..320 "member"
-                ARGS_DESC@320..335
-                  L_PAREN@320..321 "("
-                  ARG@321..326
-                    EXPR_VAR@321..326
-                      NAME@321..326
-                        IDENT@321..326 "chars"
-                  COMMA@326..327 ","
-                  WHITESPACE@327..328 " "
-                  ARG@328..334
-                    EXPR_INDEX_EXPR@328..334
-                      LHS_EXPR@328..331
-                        EXPR_VAR@328..331
-                          NAME@328..331
-                            IDENT@328..331 "str"
-                      L_BRACK@331..332 "["
-                      EXPR_NUMBER@332..333
-                        FLOAT@332..333 "0"
-                      R_BRACK@333..334 "]"
-                  R_PAREN@334..335 ")"
-            WHITESPACE@335..336 " "
-            THEN_KW@336..340 "then"
-            WHITESPACE@340..347 "\n      "
-            TRUE_EXPR@347..378
-              EXPR_APPLY@347..378
-                EXPR_INDEX@347..362
-                  EXPR_VAR@347..350
-                    NAME@347..350
-                      IDENT@347..350 "std"
-                  DOT@350..351 "."
-                  NAME@351..362
-                    IDENT@351..362 "lstripChars"
-                ARGS_DESC@362..378
-                  L_PAREN@362..363 "("
-                  ARG@363..370
-                    EXPR_SLICE@363..370
-                      EXPR_VAR@363..366
-                        NAME@363..366
-                          IDENT@363..366 "str"
-                      SLICE_DESC@366..370
-                        L_BRACK@366..367 "["
-                        EXPR_NUMBER@367..368
-                          FLOAT@367..368 "1"
-                        COLON@368..369 ":"
-                        R_BRACK@369..370 "]"
-                  COMMA@370..371 ","
-                  WHITESPACE@371..372 " "
-                  ARG@372..377
-                    EXPR_VAR@372..377
-                      NAME@372..377
-                        IDENT@372..377 "chars"
-                  R_PAREN@377..378 ")"
-            WHITESPACE@378..383 "\n    "
-            ELSE_KW@383..387 "else"
-            WHITESPACE@387..394 "\n      "
-            FALSE_EXPR@394..397
-              EXPR_VAR@394..397
-                NAME@394..397
-                  IDENT@394..397 "str"
+      MEMBER_FIELD_METHOD@254..397
+        FIELD_NAME_FIXED@254..265
+          NAME@254..265
+            IDENT@254..265 "lstripChars"
+        PARAMS_DESC@265..277
+          L_PAREN@265..266 "("
+          PARAM@266..269
+            DESTRUCT_FULL@266..269
+              NAME@266..269
+                IDENT@266..269 "str"
+          COMMA@269..270 ","
+          WHITESPACE@270..271 " "
+          PARAM@271..276
+            DESTRUCT_FULL@271..276
+              NAME@271..276
+                IDENT@271..276 "chars"
+          R_PAREN@276..277 ")"
+        COLONCOLON@277..279 "::"
+        WHITESPACE@279..284 "\n    "
+        EXPR_IF_THEN_ELSE@284..397
+          IF_KW@284..286 "if"
+          WHITESPACE@286..287 " "
+          EXPR_BINARY@287..335
+            LHS_EXPR@287..306
+              EXPR_BINARY@287..306
+                LHS_EXPR@287..302
+                  EXPR_APPLY@287..302
+                    EXPR_INDEX@287..297
+                      EXPR_VAR@287..290
+                        NAME@287..290
+                          IDENT@287..290 "std"
+                      DOT@290..291 "."
+                      NAME@291..297
+                        IDENT@291..297 "length"
+                    ARGS_DESC@297..302
+                      L_PAREN@297..298 "("
+                      ARG@298..301
+                        EXPR_VAR@298..301
+                          NAME@298..301
+                            IDENT@298..301 "str"
+                      R_PAREN@301..302 ")"
+                WHITESPACE@302..303 " "
+                GT@303..304 ">"
+                WHITESPACE@304..305 " "
+                EXPR_NUMBER@305..306
+                  FLOAT@305..306 "0"
+            WHITESPACE@306..307 " "
+            AND@307..309 "&&"
+            WHITESPACE@309..310 " "
+            EXPR_APPLY@310..335
+              EXPR_INDEX@310..320
+                EXPR_VAR@310..313
+                  NAME@310..313
+                    IDENT@310..313 "std"
+                DOT@313..314 "."
+                NAME@314..320
+                  IDENT@314..320 "member"
+              ARGS_DESC@320..335
+                L_PAREN@320..321 "("
+                ARG@321..326
+                  EXPR_VAR@321..326
+                    NAME@321..326
+                      IDENT@321..326 "chars"
+                COMMA@326..327 ","
+                WHITESPACE@327..328 " "
+                ARG@328..334
+                  EXPR_INDEX_EXPR@328..334
+                    LHS_EXPR@328..331
+                      EXPR_VAR@328..331
+                        NAME@328..331
+                          IDENT@328..331 "str"
+                    L_BRACK@331..332 "["
+                    EXPR_NUMBER@332..333
+                      FLOAT@332..333 "0"
+                    R_BRACK@333..334 "]"
+                R_PAREN@334..335 ")"
+          WHITESPACE@335..336 " "
+          THEN_KW@336..340 "then"
+          WHITESPACE@340..347 "\n      "
+          TRUE_EXPR@347..378
+            EXPR_APPLY@347..378
+              EXPR_INDEX@347..362
+                EXPR_VAR@347..350
+                  NAME@347..350
+                    IDENT@347..350 "std"
+                DOT@350..351 "."
+                NAME@351..362
+                  IDENT@351..362 "lstripChars"
+              ARGS_DESC@362..378
+                L_PAREN@362..363 "("
+                ARG@363..370
+                  EXPR_SLICE@363..370
+                    EXPR_VAR@363..366
+                      NAME@363..366
+                        IDENT@363..366 "str"
+                    SLICE_DESC@366..370
+                      L_BRACK@366..367 "["
+                      EXPR_NUMBER@367..368
+                        FLOAT@367..368 "1"
+                      COLON@368..369 ":"
+                      R_BRACK@369..370 "]"
+                COMMA@370..371 ","
+                WHITESPACE@371..372 " "
+                ARG@372..377
+                  EXPR_VAR@372..377
+                    NAME@372..377
+                      IDENT@372..377 "chars"
+                R_PAREN@377..378 ")"
+          WHITESPACE@378..383 "\n    "
+          ELSE_KW@383..387 "else"
+          WHITESPACE@387..394 "\n      "
+          FALSE_EXPR@394..397
+            EXPR_VAR@394..397
+              NAME@394..397
+                IDENT@394..397 "str"
       COMMA@397..398 ","
       WHITESPACE@398..402 "\n\n  "
-      MEMBER_FIELD@402..578
-        FIELD_METHOD@402..578
-          FIELD_NAME_FIXED@402..413
-            NAME@402..413
-              IDENT@402..413 "rstripChars"
-          PARAMS_DESC@413..425
-            L_PAREN@413..414 "("
-            PARAM@414..417
-              DESTRUCT_FULL@414..417
-                NAME@414..417
-                  IDENT@414..417 "str"
-            COMMA@417..418 ","
-            WHITESPACE@418..419 " "
-            PARAM@419..424
-              DESTRUCT_FULL@419..424
-                NAME@419..424
-                  IDENT@419..424 "chars"
-            R_PAREN@424..425 ")"
-          COLONCOLON@425..427 "::"
-          WHITESPACE@427..432 "\n    "
-          EXPR_LOCAL@432..578
-            LOCAL_KW@432..437 "local"
-            WHITESPACE@437..438 " "
-            BIND_DESTRUCT@438..459
-              DESTRUCT_FULL@438..441
-                NAME@438..441
-                  IDENT@438..441 "len"
-              WHITESPACE@441..442 " "
-              ASSIGN@442..443 "="
-              WHITESPACE@443..444 " "
-              EXPR_APPLY@444..459
-                EXPR_INDEX@444..454
-                  EXPR_VAR@444..447
-                    NAME@444..447
-                      IDENT@444..447 "std"
-                  DOT@447..448 "."
-                  NAME@448..454
-                    IDENT@448..454 "length"
-                ARGS_DESC@454..459
-                  L_PAREN@454..455 "("
-                  ARG@455..458
-                    EXPR_VAR@455..458
-                      NAME@455..458
-                        IDENT@455..458 "str"
-                  R_PAREN@458..459 ")"
-            SEMI@459..460 ";"
-            WHITESPACE@460..465 "\n    "
-            EXPR_IF_THEN_ELSE@465..578
-              IF_KW@465..467 "if"
-              WHITESPACE@467..468 " "
-              EXPR_BINARY@468..510
-                LHS_EXPR@468..475
-                  EXPR_BINARY@468..475
-                    LHS_EXPR@468..471
-                      EXPR_VAR@468..471
-                        NAME@468..471
-                          IDENT@468..471 "len"
-                    WHITESPACE@471..472 " "
-                    GT@472..473 ">"
-                    WHITESPACE@473..474 " "
-                    EXPR_NUMBER@474..475
-                      FLOAT@474..475 "0"
-                WHITESPACE@475..476 " "
-                AND@476..478 "&&"
-                WHITESPACE@478..479 " "
-                EXPR_APPLY@479..510
-                  EXPR_INDEX@479..489
-                    EXPR_VAR@479..482
-                      NAME@479..482
-                        IDENT@479..482 "std"
-                    DOT@482..483 "."
-                    NAME@483..489
-                      IDENT@483..489 "member"
-                  ARGS_DESC@489..510
-                    L_PAREN@489..490 "("
-                    ARG@490..495
-                      EXPR_VAR@490..495
-                        NAME@490..495
-                          IDENT@490..495 "chars"
-                    COMMA@495..496 ","
-                    WHITESPACE@496..497 " "
-                    ARG@497..509
-                      EXPR_INDEX_EXPR@497..509
-                        LHS_EXPR@497..500
-                          EXPR_VAR@497..500
-                            NAME@497..500
-                              IDENT@497..500 "str"
-                        L_BRACK@500..501 "["
-                        EXPR_BINARY@501..508
-                          LHS_EXPR@501..504
-                            EXPR_VAR@501..504
-                              NAME@501..504
-                                IDENT@501..504 "len"
-                          WHITESPACE@504..505 " "
-                          MINUS@505..506 "-"
-                          WHITESPACE@506..507 " "
-                          EXPR_NUMBER@507..508
-                            FLOAT@507..508 "1"
-                        R_BRACK@508..509 "]"
-                    R_PAREN@509..510 ")"
-              WHITESPACE@510..511 " "
-              THEN_KW@511..515 "then"
-              WHITESPACE@515..522 "\n      "
-              TRUE_EXPR@522..559
-                EXPR_APPLY@522..559
-                  EXPR_INDEX@522..537
-                    EXPR_VAR@522..525
-                      NAME@522..525
-                        IDENT@522..525 "std"
-                    DOT@525..526 "."
-                    NAME@526..537
-                      IDENT@526..537 "rstripChars"
-                  ARGS_DESC@537..559
-                    L_PAREN@537..538 "("
-                    ARG@538..551
-                      EXPR_SLICE@538..551
-                        EXPR_VAR@538..541
-                          NAME@538..541
-                            IDENT@538..541 "str"
-                        SLICE_DESC@541..551
-                          L_BRACK@541..542 "["
-                          COLON@542..543 ":"
-                          SLICE_DESC_END@543..550
-                            EXPR_BINARY@543..550
-                              LHS_EXPR@543..546
-                                EXPR_VAR@543..546
-                                  NAME@543..546
-                                    IDENT@543..546 "len"
-                              WHITESPACE@546..547 " "
-                              MINUS@547..548 "-"
-                              WHITESPACE@548..549 " "
-                              EXPR_NUMBER@549..550
-                                FLOAT@549..550 "1"
-                          R_BRACK@550..551 "]"
-                    COMMA@551..552 ","
-                    WHITESPACE@552..553 " "
-                    ARG@553..558
-                      EXPR_VAR@553..558
-                        NAME@553..558
-                          IDENT@553..558 "chars"
-                    R_PAREN@558..559 ")"
-              WHITESPACE@559..564 "\n    "
-              ELSE_KW@564..568 "else"
-              WHITESPACE@568..575 "\n      "
-              FALSE_EXPR@575..578
-                EXPR_VAR@575..578
-                  NAME@575..578
-                    IDENT@575..578 "str"
+      MEMBER_FIELD_METHOD@402..578
+        FIELD_NAME_FIXED@402..413
+          NAME@402..413
+            IDENT@402..413 "rstripChars"
+        PARAMS_DESC@413..425
+          L_PAREN@413..414 "("
+          PARAM@414..417
+            DESTRUCT_FULL@414..417
+              NAME@414..417
+                IDENT@414..417 "str"
+          COMMA@417..418 ","
+          WHITESPACE@418..419 " "
+          PARAM@419..424
+            DESTRUCT_FULL@419..424
+              NAME@419..424
+                IDENT@419..424 "chars"
+          R_PAREN@424..425 ")"
+        COLONCOLON@425..427 "::"
+        WHITESPACE@427..432 "\n    "
+        EXPR_LOCAL@432..578
+          LOCAL_KW@432..437 "local"
+          WHITESPACE@437..438 " "
+          BIND_DESTRUCT@438..459
+            DESTRUCT_FULL@438..441
+              NAME@438..441
+                IDENT@438..441 "len"
+            WHITESPACE@441..442 " "
+            ASSIGN@442..443 "="
+            WHITESPACE@443..444 " "
+            EXPR_APPLY@444..459
+              EXPR_INDEX@444..454
+                EXPR_VAR@444..447
+                  NAME@444..447
+                    IDENT@444..447 "std"
+                DOT@447..448 "."
+                NAME@448..454
+                  IDENT@448..454 "length"
+              ARGS_DESC@454..459
+                L_PAREN@454..455 "("
+                ARG@455..458
+                  EXPR_VAR@455..458
+                    NAME@455..458
+                      IDENT@455..458 "str"
+                R_PAREN@458..459 ")"
+          SEMI@459..460 ";"
+          WHITESPACE@460..465 "\n    "
+          EXPR_IF_THEN_ELSE@465..578
+            IF_KW@465..467 "if"
+            WHITESPACE@467..468 " "
+            EXPR_BINARY@468..510
+              LHS_EXPR@468..475
+                EXPR_BINARY@468..475
+                  LHS_EXPR@468..471
+                    EXPR_VAR@468..471
+                      NAME@468..471
+                        IDENT@468..471 "len"
+                  WHITESPACE@471..472 " "
+                  GT@472..473 ">"
+                  WHITESPACE@473..474 " "
+                  EXPR_NUMBER@474..475
+                    FLOAT@474..475 "0"
+              WHITESPACE@475..476 " "
+              AND@476..478 "&&"
+              WHITESPACE@478..479 " "
+              EXPR_APPLY@479..510
+                EXPR_INDEX@479..489
+                  EXPR_VAR@479..482
+                    NAME@479..482
+                      IDENT@479..482 "std"
+                  DOT@482..483 "."
+                  NAME@483..489
+                    IDENT@483..489 "member"
+                ARGS_DESC@489..510
+                  L_PAREN@489..490 "("
+                  ARG@490..495
+                    EXPR_VAR@490..495
+                      NAME@490..495
+                        IDENT@490..495 "chars"
+                  COMMA@495..496 ","
+                  WHITESPACE@496..497 " "
+                  ARG@497..509
+                    EXPR_INDEX_EXPR@497..509
+                      LHS_EXPR@497..500
+                        EXPR_VAR@497..500
+                          NAME@497..500
+                            IDENT@497..500 "str"
+                      L_BRACK@500..501 "["
+                      EXPR_BINARY@501..508
+                        LHS_EXPR@501..504
+                          EXPR_VAR@501..504
+                            NAME@501..504
+                              IDENT@501..504 "len"
+                        WHITESPACE@504..505 " "
+                        MINUS@505..506 "-"
+                        WHITESPACE@506..507 " "
+                        EXPR_NUMBER@507..508
+                          FLOAT@507..508 "1"
+                      R_BRACK@508..509 "]"
+                  R_PAREN@509..510 ")"
+            WHITESPACE@510..511 " "
+            THEN_KW@511..515 "then"
+            WHITESPACE@515..522 "\n      "
+            TRUE_EXPR@522..559
+              EXPR_APPLY@522..559
+                EXPR_INDEX@522..537
+                  EXPR_VAR@522..525
+                    NAME@522..525
+                      IDENT@522..525 "std"
+                  DOT@525..526 "."
+                  NAME@526..537
+                    IDENT@526..537 "rstripChars"
+                ARGS_DESC@537..559
+                  L_PAREN@537..538 "("
+                  ARG@538..551
+                    EXPR_SLICE@538..551
+                      EXPR_VAR@538..541
+                        NAME@538..541
+                          IDENT@538..541 "str"
+                      SLICE_DESC@541..551
+                        L_BRACK@541..542 "["
+                        COLON@542..543 ":"
+                        SLICE_DESC_END@543..550
+                          EXPR_BINARY@543..550
+                            LHS_EXPR@543..546
+                              EXPR_VAR@543..546
+                                NAME@543..546
+                                  IDENT@543..546 "len"
+                            WHITESPACE@546..547 " "
+                            MINUS@547..548 "-"
+                            WHITESPACE@548..549 " "
+                            EXPR_NUMBER@549..550
+                              FLOAT@549..550 "1"
+                        R_BRACK@550..551 "]"
+                  COMMA@551..552 ","
+                  WHITESPACE@552..553 " "
+                  ARG@553..558
+                    EXPR_VAR@553..558
+                      NAME@553..558
+                        IDENT@553..558 "chars"
+                  R_PAREN@558..559 ")"
+            WHITESPACE@559..564 "\n    "
+            ELSE_KW@564..568 "else"
+            WHITESPACE@568..575 "\n      "
+            FALSE_EXPR@575..578
+              EXPR_VAR@575..578
+                NAME@575..578
+                  IDENT@575..578 "str"
       COMMA@578..579 ","
       WHITESPACE@579..583 "\n\n  "
-      MEMBER_FIELD@583..663
-        FIELD_METHOD@583..663
-          FIELD_NAME_FIXED@583..593
-            NAME@583..593
-              IDENT@583..593 "stripChars"
-          PARAMS_DESC@593..605
-            L_PAREN@593..594 "("
-            PARAM@594..597
-              DESTRUCT_FULL@594..597
-                NAME@594..597
-                  IDENT@594..597 "str"
-            COMMA@597..598 ","
-            WHITESPACE@598..599 " "
-            PARAM@599..604
-              DESTRUCT_FULL@599..604
-                NAME@599..604
-                  IDENT@599..604 "chars"
-            R_PAREN@604..605 ")"
-          COLONCOLON@605..607 "::"
-          WHITESPACE@607..612 "\n    "
-          EXPR_APPLY@612..663
-            EXPR_INDEX@612..627
-              EXPR_VAR@612..615
-                NAME@612..615
-                  IDENT@612..615 "std"
-              DOT@615..616 "."
-              NAME@616..627
-                IDENT@616..627 "lstripChars"
-            ARGS_DESC@627..663
-              L_PAREN@627..628 "("
-              ARG@628..655
-                EXPR_APPLY@628..655
-                  EXPR_INDEX@628..643
-                    EXPR_VAR@628..631
-                      NAME@628..631
-                        IDENT@628..631 "std"
-                    DOT@631..632 "."
-                    NAME@632..643
-                      IDENT@632..643 "rstripChars"
-                  ARGS_DESC@643..655
-                    L_PAREN@643..644 "("
-                    ARG@644..647
-                      EXPR_VAR@644..647
-                        NAME@644..647
-                          IDENT@644..647 "str"
-                    COMMA@647..648 ","
-                    WHITESPACE@648..649 " "
-                    ARG@649..654
-                      EXPR_VAR@649..654
-                        NAME@649..654
-                          IDENT@649..654 "chars"
-                    R_PAREN@654..655 ")"
-              COMMA@655..656 ","
-              WHITESPACE@656..657 " "
-              ARG@657..662
-                EXPR_VAR@657..662
-                  NAME@657..662
-                    IDENT@657..662 "chars"
-              R_PAREN@662..663 ")"
+      MEMBER_FIELD_METHOD@583..663
+        FIELD_NAME_FIXED@583..593
+          NAME@583..593
+            IDENT@583..593 "stripChars"
+        PARAMS_DESC@593..605
+          L_PAREN@593..594 "("
+          PARAM@594..597
+            DESTRUCT_FULL@594..597
+              NAME@594..597
+                IDENT@594..597 "str"
+          COMMA@597..598 ","
+          WHITESPACE@598..599 " "
+          PARAM@599..604
+            DESTRUCT_FULL@599..604
+              NAME@599..604
+                IDENT@599..604 "chars"
+          R_PAREN@604..605 ")"
+        COLONCOLON@605..607 "::"
+        WHITESPACE@607..612 "\n    "
+        EXPR_APPLY@612..663
+          EXPR_INDEX@612..627
+            EXPR_VAR@612..615
+              NAME@612..615
+                IDENT@612..615 "std"
+            DOT@615..616 "."
+            NAME@616..627
+              IDENT@616..627 "lstripChars"
+          ARGS_DESC@627..663
+            L_PAREN@627..628 "("
+            ARG@628..655
+              EXPR_APPLY@628..655
+                EXPR_INDEX@628..643
+                  EXPR_VAR@628..631
+                    NAME@628..631
+                      IDENT@628..631 "std"
+                  DOT@631..632 "."
+                  NAME@632..643
+                    IDENT@632..643 "rstripChars"
+                ARGS_DESC@643..655
+                  L_PAREN@643..644 "("
+                  ARG@644..647
+                    EXPR_VAR@644..647
+                      NAME@644..647
+                        IDENT@644..647 "str"
+                  COMMA@647..648 ","
+                  WHITESPACE@648..649 " "
+                  ARG@649..654
+                    EXPR_VAR@649..654
+                      NAME@649..654
+                        IDENT@649..654 "chars"
+                  R_PAREN@654..655 ")"
+            COMMA@655..656 ","
+            WHITESPACE@656..657 " "
+            ARG@657..662
+              EXPR_VAR@657..662
+                NAME@657..662
+                  IDENT@657..662 "chars"
+            R_PAREN@662..663 ")"
       COMMA@663..664 ","
       WHITESPACE@664..668 "\n\n  "
-      MEMBER_FIELD@668..741
-        FIELD_METHOD@668..741
-          FIELD_NAME_FIXED@668..679
-            NAME@668..679
-              IDENT@668..679 "stringChars"
-          PARAMS_DESC@679..684
-            L_PAREN@679..680 "("
-            PARAM@680..683
-              DESTRUCT_FULL@680..683
-                NAME@680..683
-                  IDENT@680..683 "str"
-            R_PAREN@683..684 ")"
-          COLONCOLON@684..686 "::"
-          WHITESPACE@686..691 "\n    "
-          EXPR_APPLY@691..741
-            EXPR_INDEX@691..704
-              EXPR_VAR@691..694
-                NAME@691..694
-                  IDENT@691..694 "std"
-              DOT@694..695 "."
-              NAME@695..704
-                IDENT@695..704 "makeArray"
-            ARGS_DESC@704..741
-              L_PAREN@704..705 "("
-              ARG@705..720
-                EXPR_APPLY@705..720
-                  EXPR_INDEX@705..715
-                    EXPR_VAR@705..708
-                      NAME@705..708
-                        IDENT@705..708 "std"
-                    DOT@708..709 "."
-                    NAME@709..715
-                      IDENT@709..715 "length"
-                  ARGS_DESC@715..720
-                    L_PAREN@715..716 "("
-                    ARG@716..719
-                      EXPR_VAR@716..719
-                        NAME@716..719
-                          IDENT@716..719 "str"
-                    R_PAREN@719..720 ")"
-              COMMA@720..721 ","
-              WHITESPACE@721..722 " "
-              ARG@722..740
-                EXPR_FUNCTION@722..740
-                  FUNCTION_KW@722..730 "function"
-                  PARAMS_DESC@730..733
-                    L_PAREN@730..731 "("
-                    PARAM@731..732
-                      DESTRUCT_FULL@731..732
-                        NAME@731..732
-                          IDENT@731..732 "i"
-                    R_PAREN@732..733 ")"
-                  WHITESPACE@733..734 " "
-                  EXPR_INDEX_EXPR@734..740
-                    LHS_EXPR@734..737
-                      EXPR_VAR@734..737
-                        NAME@734..737
-                          IDENT@734..737 "str"
-                    L_BRACK@737..738 "["
-                    EXPR_VAR@738..739
-                      NAME@738..739
-                        IDENT@738..739 "i"
-                    R_BRACK@739..740 "]"
-              R_PAREN@740..741 ")"
+      MEMBER_FIELD_METHOD@668..741
+        FIELD_NAME_FIXED@668..679
+          NAME@668..679
+            IDENT@668..679 "stringChars"
+        PARAMS_DESC@679..684
+          L_PAREN@679..680 "("
+          PARAM@680..683
+            DESTRUCT_FULL@680..683
+              NAME@680..683
+                IDENT@680..683 "str"
+          R_PAREN@683..684 ")"
+        COLONCOLON@684..686 "::"
+        WHITESPACE@686..691 "\n    "
+        EXPR_APPLY@691..741
+          EXPR_INDEX@691..704
+            EXPR_VAR@691..694
+              NAME@691..694
+                IDENT@691..694 "std"
+            DOT@694..695 "."
+            NAME@695..704
+              IDENT@695..704 "makeArray"
+          ARGS_DESC@704..741
+            L_PAREN@704..705 "("
+            ARG@705..720
+              EXPR_APPLY@705..720
+                EXPR_INDEX@705..715
+                  EXPR_VAR@705..708
+                    NAME@705..708
+                      IDENT@705..708 "std"
+                  DOT@708..709 "."
+                  NAME@709..715
+                    IDENT@709..715 "length"
+                ARGS_DESC@715..720
+                  L_PAREN@715..716 "("
+                  ARG@716..719
+                    EXPR_VAR@716..719
+                      NAME@716..719
+                        IDENT@716..719 "str"
+                  R_PAREN@719..720 ")"
+            COMMA@720..721 ","
+            WHITESPACE@721..722 " "
+            ARG@722..740
+              EXPR_FUNCTION@722..740
+                FUNCTION_KW@722..730 "function"
+                PARAMS_DESC@730..733
+                  L_PAREN@730..731 "("
+                  PARAM@731..732
+                    DESTRUCT_FULL@731..732
+                      NAME@731..732
+                        IDENT@731..732 "i"
+                  R_PAREN@732..733 ")"
+                WHITESPACE@733..734 " "
+                EXPR_INDEX_EXPR@734..740
+                  LHS_EXPR@734..737
+                    EXPR_VAR@734..737
+                      NAME@734..737
+                        IDENT@734..737 "str"
+                  L_BRACK@737..738 "["
+                  EXPR_VAR@738..739
+                    NAME@738..739
+                      IDENT@738..739 "i"
+                  R_BRACK@739..740 "]"
+            R_PAREN@740..741 ")"
       COMMA@741..742 ","
       WHITESPACE@742..746 "\n\n  "
-      MEMBER_FIELD@746..1024
-        FIELD_METHOD@746..1024
-          FIELD_NAME_FIXED@746..757
-            NAME@746..757
-              IDENT@746..757 "splitLimitR"
-          PARAMS_DESC@757..776
-            L_PAREN@757..758 "("
-            PARAM@758..761
-              DESTRUCT_FULL@758..761
-                NAME@758..761
-                  IDENT@758..761 "str"
-            COMMA@761..762 ","
-            WHITESPACE@762..763 " "
-            PARAM@763..764
-              DESTRUCT_FULL@763..764
-                NAME@763..764
-                  IDENT@763..764 "c"
-            COMMA@764..765 ","
-            WHITESPACE@765..766 " "
-            PARAM@766..775
-              DESTRUCT_FULL@766..775
-                NAME@766..775
-                  IDENT@766..775 "maxsplits"
-            R_PAREN@775..776 ")"
-          COLONCOLON@776..778 "::"
-          WHITESPACE@778..783 "\n    "
-          EXPR_IF_THEN_ELSE@783..1024
-            IF_KW@783..785 "if"
-            WHITESPACE@785..786 " "
-            EXPR_BINARY@786..801
-              LHS_EXPR@786..795
-                EXPR_VAR@786..795
-                  NAME@786..795
-                    IDENT@786..795 "maxsplits"
-              WHITESPACE@795..796 " "
-              EQ@796..798 "=="
-              WHITESPACE@798..799 " "
-              EXPR_UNARY@799..801
-                MINUS@799..800 "-"
-                EXPR_NUMBER@800..801
-                  FLOAT@800..801 "1"
-            WHITESPACE@801..802 " "
-            THEN_KW@802..806 "then"
-            WHITESPACE@806..813 "\n      "
-            TRUE_EXPR@813..839
-              EXPR_APPLY@813..839
-                EXPR_INDEX@813..827
-                  EXPR_VAR@813..816
-                    NAME@813..816
-                      IDENT@813..816 "std"
-                  DOT@816..817 "."
-                  NAME@817..827
-                    IDENT@817..827 "splitLimit"
-                ARGS_DESC@827..839
-                  L_PAREN@827..828 "("
-                  ARG@828..831
-                    EXPR_VAR@828..831
-                      NAME@828..831
-                        IDENT@828..831 "str"
-                  COMMA@831..832 ","
-                  WHITESPACE@832..833 " "
-                  ARG@833..834
-                    EXPR_VAR@833..834
-                      NAME@833..834
-                        IDENT@833..834 "c"
-                  COMMA@834..835 ","
-                  WHITESPACE@835..836 " "
-                  ARG@836..838
-                    EXPR_UNARY@836..838
-                      MINUS@836..837 "-"
-                      EXPR_NUMBER@837..838
-                        FLOAT@837..838 "1"
-                  R_PAREN@838..839 ")"
-            WHITESPACE@839..844 "\n    "
-            ELSE_KW@844..848 "else"
-            WHITESPACE@848..855 "\n      "
-            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 ")"
+      MEMBER_FIELD_METHOD@746..1024
+        FIELD_NAME_FIXED@746..757
+          NAME@746..757
+            IDENT@746..757 "splitLimitR"
+        PARAMS_DESC@757..776
+          L_PAREN@757..758 "("
+          PARAM@758..761
+            DESTRUCT_FULL@758..761
+              NAME@758..761
+                IDENT@758..761 "str"
+          COMMA@761..762 ","
+          WHITESPACE@762..763 " "
+          PARAM@763..764
+            DESTRUCT_FULL@763..764
+              NAME@763..764
+                IDENT@763..764 "c"
+          COMMA@764..765 ","
+          WHITESPACE@765..766 " "
+          PARAM@766..775
+            DESTRUCT_FULL@766..775
+              NAME@766..775
+                IDENT@766..775 "maxsplits"
+          R_PAREN@775..776 ")"
+        COLONCOLON@776..778 "::"
+        WHITESPACE@778..783 "\n    "
+        EXPR_IF_THEN_ELSE@783..1024
+          IF_KW@783..785 "if"
+          WHITESPACE@785..786 " "
+          EXPR_BINARY@786..801
+            LHS_EXPR@786..795
+              EXPR_VAR@786..795
+                NAME@786..795
+                  IDENT@786..795 "maxsplits"
+            WHITESPACE@795..796 " "
+            EQ@796..798 "=="
+            WHITESPACE@798..799 " "
+            EXPR_UNARY@799..801
+              MINUS@799..800 "-"
+              EXPR_NUMBER@800..801
+                FLOAT@800..801 "1"
+          WHITESPACE@801..802 " "
+          THEN_KW@802..806 "then"
+          WHITESPACE@806..813 "\n      "
+          TRUE_EXPR@813..839
+            EXPR_APPLY@813..839
+              EXPR_INDEX@813..827
+                EXPR_VAR@813..816
+                  NAME@813..816
+                    IDENT@813..816 "std"
+                DOT@816..817 "."
+                NAME@817..827
+                  IDENT@817..827 "splitLimit"
+              ARGS_DESC@827..839
+                L_PAREN@827..828 "("
+                ARG@828..831
+                  EXPR_VAR@828..831
+                    NAME@828..831
+                      IDENT@828..831 "str"
+                COMMA@831..832 ","
+                WHITESPACE@832..833 " "
+                ARG@833..834
+                  EXPR_VAR@833..834
+                    NAME@833..834
+                      IDENT@833..834 "c"
+                COMMA@834..835 ","
+                WHITESPACE@835..836 " "
+                ARG@836..838
+                  EXPR_UNARY@836..838
+                    MINUS@836..837 "-"
+                    EXPR_NUMBER@837..838
+                      FLOAT@837..838 "1"
+                R_PAREN@838..839 ")"
+          WHITESPACE@839..844 "\n    "
+          ELSE_KW@844..848 "else"
+          WHITESPACE@848..855 "\n      "
+          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 ")"
       COMMA@1024..1025 ","
       WHITESPACE@1025..1029 "\n\n  "
-      MEMBER_FIELD@1029..1071
-        FIELD_METHOD@1029..1071
-          FIELD_NAME_FIXED@1029..1034
-            NAME@1029..1034
-              IDENT@1029..1034 "split"
-          PARAMS_DESC@1034..1042
-            L_PAREN@1034..1035 "("
-            PARAM@1035..1038
-              DESTRUCT_FULL@1035..1038
-                NAME@1035..1038
-                  IDENT@1035..1038 "str"
-            COMMA@1038..1039 ","
-            WHITESPACE@1039..1040 " "
-            PARAM@1040..1041
-              DESTRUCT_FULL@1040..1041
-                NAME@1040..1041
-                  IDENT@1040..1041 "c"
-            R_PAREN@1041..1042 ")"
-          COLONCOLON@1042..1044 "::"
-          WHITESPACE@1044..1045 " "
-          EXPR_APPLY@1045..1071
-            EXPR_INDEX@1045..1059
-              EXPR_VAR@1045..1048
-                NAME@1045..1048
-                  IDENT@1045..1048 "std"
-              DOT@1048..1049 "."
-              NAME@1049..1059
-                IDENT@1049..1059 "splitLimit"
-            ARGS_DESC@1059..1071
-              L_PAREN@1059..1060 "("
-              ARG@1060..1063
-                EXPR_VAR@1060..1063
-                  NAME@1060..1063
-                    IDENT@1060..1063 "str"
-              COMMA@1063..1064 ","
-              WHITESPACE@1064..1065 " "
-              ARG@1065..1066
-                EXPR_VAR@1065..1066
-                  NAME@1065..1066
-                    IDENT@1065..1066 "c"
-              COMMA@1066..1067 ","
-              WHITESPACE@1067..1068 " "
-              ARG@1068..1070
-                EXPR_UNARY@1068..1070
-                  MINUS@1068..1069 "-"
-                  EXPR_NUMBER@1069..1070
-                    FLOAT@1069..1070 "1"
-              R_PAREN@1070..1071 ")"
+      MEMBER_FIELD_METHOD@1029..1071
+        FIELD_NAME_FIXED@1029..1034
+          NAME@1029..1034
+            IDENT@1029..1034 "split"
+        PARAMS_DESC@1034..1042
+          L_PAREN@1034..1035 "("
+          PARAM@1035..1038
+            DESTRUCT_FULL@1035..1038
+              NAME@1035..1038
+                IDENT@1035..1038 "str"
+          COMMA@1038..1039 ","
+          WHITESPACE@1039..1040 " "
+          PARAM@1040..1041
+            DESTRUCT_FULL@1040..1041
+              NAME@1040..1041
+                IDENT@1040..1041 "c"
+          R_PAREN@1041..1042 ")"
+        COLONCOLON@1042..1044 "::"
+        WHITESPACE@1044..1045 " "
+        EXPR_APPLY@1045..1071
+          EXPR_INDEX@1045..1059
+            EXPR_VAR@1045..1048
+              NAME@1045..1048
+                IDENT@1045..1048 "std"
+            DOT@1048..1049 "."
+            NAME@1049..1059
+              IDENT@1049..1059 "splitLimit"
+          ARGS_DESC@1059..1071
+            L_PAREN@1059..1060 "("
+            ARG@1060..1063
+              EXPR_VAR@1060..1063
+                NAME@1060..1063
+                  IDENT@1060..1063 "str"
+            COMMA@1063..1064 ","
+            WHITESPACE@1064..1065 " "
+            ARG@1065..1066
+              EXPR_VAR@1065..1066
+                NAME@1065..1066
+                  IDENT@1065..1066 "c"
+            COMMA@1066..1067 ","
+            WHITESPACE@1067..1068 " "
+            ARG@1068..1070
+              EXPR_UNARY@1068..1070
+                MINUS@1068..1069 "-"
+                EXPR_NUMBER@1069..1070
+                  FLOAT@1069..1070 "1"
+            R_PAREN@1070..1071 ")"
       COMMA@1071..1072 ","
       WHITESPACE@1072..1076 "\n\n  "
-      MEMBER_FIELD@1076..1434
-        FIELD_METHOD@1076..1434
-          FIELD_NAME_FIXED@1076..1088
-            NAME@1076..1088
-              IDENT@1076..1088 "mapWithIndex"
-          PARAMS_DESC@1088..1099
-            L_PAREN@1088..1089 "("
-            PARAM@1089..1093
-              DESTRUCT_FULL@1089..1093
-                NAME@1089..1093
-                  IDENT@1089..1093 "func"
-            COMMA@1093..1094 ","
-            WHITESPACE@1094..1095 " "
-            PARAM@1095..1098
-              DESTRUCT_FULL@1095..1098
-                NAME@1095..1098
-                  IDENT@1095..1098 "arr"
-            R_PAREN@1098..1099 ")"
-          COLONCOLON@1099..1101 "::"
-          WHITESPACE@1101..1106 "\n    "
-          EXPR_IF_THEN_ELSE@1106..1434
-            IF_KW@1106..1108 "if"
-            WHITESPACE@1108..1109 " "
-            EXPR_UNARY@1109..1130
-              NOT@1109..1110 "!"
-              EXPR_APPLY@1110..1130
-                EXPR_INDEX@1110..1124
-                  EXPR_VAR@1110..1113
-                    NAME@1110..1113
-                      IDENT@1110..1113 "std"
-                  DOT@1113..1114 "."
-                  NAME@1114..1124
-                    IDENT@1114..1124 "isFunction"
-                ARGS_DESC@1124..1130
-                  L_PAREN@1124..1125 "("
-                  ARG@1125..1129
-                    EXPR_VAR@1125..1129
-                      NAME@1125..1129
-                        IDENT@1125..1129 "func"
-                  R_PAREN@1129..1130 ")"
-            WHITESPACE@1130..1131 " "
-            THEN_KW@1131..1135 "then"
-            WHITESPACE@1135..1142 "\n      "
-            TRUE_EXPR@1142..1220
-              EXPR_ERROR@1142..1220
-                ERROR_KW@1142..1147 "error"
-                WHITESPACE@1147..1148 " "
-                EXPR_PARENED@1148..1220
-                  L_PAREN@1148..1149 "("
-                  EXPR_BINARY@1149..1219
-                    LHS_EXPR@1149..1202
-                      EXPR_STRING@1149..1202
-                        STRING_SINGLE@1149..1202 "'std.mapWithIndex fir ..."
-                    WHITESPACE@1202..1203 " "
-                    PLUS@1203..1204 "+"
-                    WHITESPACE@1204..1205 " "
-                    EXPR_APPLY@1205..1219
-                      EXPR_INDEX@1205..1213
-                        EXPR_VAR@1205..1208
-                          NAME@1205..1208
-                            IDENT@1205..1208 "std"
-                        DOT@1208..1209 "."
-                        NAME@1209..1213
-                          IDENT@1209..1213 "type"
-                      ARGS_DESC@1213..1219
-                        L_PAREN@1213..1214 "("
-                        ARG@1214..1218
-                          EXPR_VAR@1214..1218
-                            NAME@1214..1218
-                              IDENT@1214..1218 "func"
-                        R_PAREN@1218..1219 ")"
-                  R_PAREN@1219..1220 ")"
-            WHITESPACE@1220..1225 "\n    "
-            ELSE_KW@1225..1229 "else"
-            WHITESPACE@1229..1230 " "
-            FALSE_EXPR@1230..1434
-              EXPR_IF_THEN_ELSE@1230..1434
-                IF_KW@1230..1232 "if"
-                WHITESPACE@1232..1233 " "
-                EXPR_BINARY@1233..1272
-                  LHS_EXPR@1233..1250
-                    EXPR_UNARY@1233..1250
-                      NOT@1233..1234 "!"
-                      EXPR_APPLY@1234..1250
-                        EXPR_INDEX@1234..1245
-                          EXPR_VAR@1234..1237
-                            NAME@1234..1237
-                              IDENT@1234..1237 "std"
-                          DOT@1237..1238 "."
-                          NAME@1238..1245
-                            IDENT@1238..1245 "isArray"
-                        ARGS_DESC@1245..1250
-                          L_PAREN@1245..1246 "("
-                          ARG@1246..1249
-                            EXPR_VAR@1246..1249
-                              NAME@1246..1249
-                                IDENT@1246..1249 "arr"
-                          R_PAREN@1249..1250 ")"
-                  WHITESPACE@1250..1251 " "
-                  AND@1251..1253 "&&"
-                  WHITESPACE@1253..1254 " "
-                  EXPR_UNARY@1254..1272
-                    NOT@1254..1255 "!"
-                    EXPR_APPLY@1255..1272
-                      EXPR_INDEX@1255..1267
-                        EXPR_VAR@1255..1258
-                          NAME@1255..1258
-                            IDENT@1255..1258 "std"
-                        DOT@1258..1259 "."
-                        NAME@1259..1267
-                          IDENT@1259..1267 "isString"
-                      ARGS_DESC@1267..1272
-                        L_PAREN@1267..1268 "("
-                        ARG@1268..1271
-                          EXPR_VAR@1268..1271
-                            NAME@1268..1271
-                              IDENT@1268..1271 "arr"
-                        R_PAREN@1271..1272 ")"
-                WHITESPACE@1272..1273 " "
-                THEN_KW@1273..1277 "then"
-                WHITESPACE@1277..1284 "\n      "
-                TRUE_EXPR@1284..1359
-                  EXPR_ERROR@1284..1359
-                    ERROR_KW@1284..1289 "error"
-                    WHITESPACE@1289..1290 " "
-                    EXPR_PARENED@1290..1359
-                      L_PAREN@1290..1291 "("
-                      EXPR_BINARY@1291..1358
-                        LHS_EXPR@1291..1342
-                          EXPR_STRING@1291..1342
-                            STRING_SINGLE@1291..1342 "'std.mapWithIndex sec ..."
-                        WHITESPACE@1342..1343 " "
-                        PLUS@1343..1344 "+"
-                        WHITESPACE@1344..1345 " "
-                        EXPR_APPLY@1345..1358
-                          EXPR_INDEX@1345..1353
-                            EXPR_VAR@1345..1348
-                              NAME@1345..1348
-                                IDENT@1345..1348 "std"
-                            DOT@1348..1349 "."
-                            NAME@1349..1353
-                              IDENT@1349..1353 "type"
-                          ARGS_DESC@1353..1358
-                            L_PAREN@1353..1354 "("
-                            ARG@1354..1357
-                              EXPR_VAR@1354..1357
-                                NAME@1354..1357
-                                  IDENT@1354..1357 "arr"
-                            R_PAREN@1357..1358 ")"
-                      R_PAREN@1358..1359 ")"
-                WHITESPACE@1359..1364 "\n    "
-                ELSE_KW@1364..1368 "else"
-                WHITESPACE@1368..1375 "\n      "
-                FALSE_EXPR@1375..1434
-                  EXPR_APPLY@1375..1434
-                    EXPR_INDEX@1375..1388
-                      EXPR_VAR@1375..1378
-                        NAME@1375..1378
-                          IDENT@1375..1378 "std"
-                      DOT@1378..1379 "."
-                      NAME@1379..1388
-                        IDENT@1379..1388 "makeArray"
-                    ARGS_DESC@1388..1434
-                      L_PAREN@1388..1389 "("
-                      ARG@1389..1404
-                        EXPR_APPLY@1389..1404
-                          EXPR_INDEX@1389..1399
-                            EXPR_VAR@1389..1392
-                              NAME@1389..1392
-                                IDENT@1389..1392 "std"
-                            DOT@1392..1393 "."
-                            NAME@1393..1399
-                              IDENT@1393..1399 "length"
-                          ARGS_DESC@1399..1404
-                            L_PAREN@1399..1400 "("
-                            ARG@1400..1403
-                              EXPR_VAR@1400..1403
-                                NAME@1400..1403
-                                  IDENT@1400..1403 "arr"
-                            R_PAREN@1403..1404 ")"
-                      COMMA@1404..1405 ","
-                      WHITESPACE@1405..1406 " "
-                      ARG@1406..1433
-                        EXPR_FUNCTION@1406..1433
-                          FUNCTION_KW@1406..1414 "function"
-                          PARAMS_DESC@1414..1417
-                            L_PAREN@1414..1415 "("
-                            PARAM@1415..1416
-                              DESTRUCT_FULL@1415..1416
-                                NAME@1415..1416
-                                  IDENT@1415..1416 "i"
-                            R_PAREN@1416..1417 ")"
-                          WHITESPACE@1417..1418 " "
-                          EXPR_APPLY@1418..1433
-                            EXPR_VAR@1418..1422
-                              NAME@1418..1422
-                                IDENT@1418..1422 "func"
-                            ARGS_DESC@1422..1433
-                              L_PAREN@1422..1423 "("
-                              ARG@1423..1424
-                                EXPR_VAR@1423..1424
-                                  NAME@1423..1424
-                                    IDENT@1423..1424 "i"
-                              COMMA@1424..1425 ","
-                              WHITESPACE@1425..1426 " "
-                              ARG@1426..1432
-                                EXPR_INDEX_EXPR@1426..1432
-                                  LHS_EXPR@1426..1429
-                                    EXPR_VAR@1426..1429
-                                      NAME@1426..1429
-                                        IDENT@1426..1429 "arr"
-                                  L_BRACK@1429..1430 "["
-                                  EXPR_VAR@1430..1431
-                                    NAME@1430..1431
-                                      IDENT@1430..1431 "i"
-                                  R_BRACK@1431..1432 "]"
-                              R_PAREN@1432..1433 ")"
-                      R_PAREN@1433..1434 ")"
+      MEMBER_FIELD_METHOD@1076..1434
+        FIELD_NAME_FIXED@1076..1088
+          NAME@1076..1088
+            IDENT@1076..1088 "mapWithIndex"
+        PARAMS_DESC@1088..1099
+          L_PAREN@1088..1089 "("
+          PARAM@1089..1093
+            DESTRUCT_FULL@1089..1093
+              NAME@1089..1093
+                IDENT@1089..1093 "func"
+          COMMA@1093..1094 ","
+          WHITESPACE@1094..1095 " "
+          PARAM@1095..1098
+            DESTRUCT_FULL@1095..1098
+              NAME@1095..1098
+                IDENT@1095..1098 "arr"
+          R_PAREN@1098..1099 ")"
+        COLONCOLON@1099..1101 "::"
+        WHITESPACE@1101..1106 "\n    "
+        EXPR_IF_THEN_ELSE@1106..1434
+          IF_KW@1106..1108 "if"
+          WHITESPACE@1108..1109 " "
+          EXPR_UNARY@1109..1130
+            NOT@1109..1110 "!"
+            EXPR_APPLY@1110..1130
+              EXPR_INDEX@1110..1124
+                EXPR_VAR@1110..1113
+                  NAME@1110..1113
+                    IDENT@1110..1113 "std"
+                DOT@1113..1114 "."
+                NAME@1114..1124
+                  IDENT@1114..1124 "isFunction"
+              ARGS_DESC@1124..1130
+                L_PAREN@1124..1125 "("
+                ARG@1125..1129
+                  EXPR_VAR@1125..1129
+                    NAME@1125..1129
+                      IDENT@1125..1129 "func"
+                R_PAREN@1129..1130 ")"
+          WHITESPACE@1130..1131 " "
+          THEN_KW@1131..1135 "then"
+          WHITESPACE@1135..1142 "\n      "
+          TRUE_EXPR@1142..1220
+            EXPR_ERROR@1142..1220
+              ERROR_KW@1142..1147 "error"
+              WHITESPACE@1147..1148 " "
+              EXPR_PARENED@1148..1220
+                L_PAREN@1148..1149 "("
+                EXPR_BINARY@1149..1219
+                  LHS_EXPR@1149..1202
+                    EXPR_STRING@1149..1202
+                      STRING_SINGLE@1149..1202 "'std.mapWithIndex fir ..."
+                  WHITESPACE@1202..1203 " "
+                  PLUS@1203..1204 "+"
+                  WHITESPACE@1204..1205 " "
+                  EXPR_APPLY@1205..1219
+                    EXPR_INDEX@1205..1213
+                      EXPR_VAR@1205..1208
+                        NAME@1205..1208
+                          IDENT@1205..1208 "std"
+                      DOT@1208..1209 "."
+                      NAME@1209..1213
+                        IDENT@1209..1213 "type"
+                    ARGS_DESC@1213..1219
+                      L_PAREN@1213..1214 "("
+                      ARG@1214..1218
+                        EXPR_VAR@1214..1218
+                          NAME@1214..1218
+                            IDENT@1214..1218 "func"
+                      R_PAREN@1218..1219 ")"
+                R_PAREN@1219..1220 ")"
+          WHITESPACE@1220..1225 "\n    "
+          ELSE_KW@1225..1229 "else"
+          WHITESPACE@1229..1230 " "
+          FALSE_EXPR@1230..1434
+            EXPR_IF_THEN_ELSE@1230..1434
+              IF_KW@1230..1232 "if"
+              WHITESPACE@1232..1233 " "
+              EXPR_BINARY@1233..1272
+                LHS_EXPR@1233..1250
+                  EXPR_UNARY@1233..1250
+                    NOT@1233..1234 "!"
+                    EXPR_APPLY@1234..1250
+                      EXPR_INDEX@1234..1245
+                        EXPR_VAR@1234..1237
+                          NAME@1234..1237
+                            IDENT@1234..1237 "std"
+                        DOT@1237..1238 "."
+                        NAME@1238..1245
+                          IDENT@1238..1245 "isArray"
+                      ARGS_DESC@1245..1250
+                        L_PAREN@1245..1246 "("
+                        ARG@1246..1249
+                          EXPR_VAR@1246..1249
+                            NAME@1246..1249
+                              IDENT@1246..1249 "arr"
+                        R_PAREN@1249..1250 ")"
+                WHITESPACE@1250..1251 " "
+                AND@1251..1253 "&&"
+                WHITESPACE@1253..1254 " "
+                EXPR_UNARY@1254..1272
+                  NOT@1254..1255 "!"
+                  EXPR_APPLY@1255..1272
+                    EXPR_INDEX@1255..1267
+                      EXPR_VAR@1255..1258
+                        NAME@1255..1258
+                          IDENT@1255..1258 "std"
+                      DOT@1258..1259 "."
+                      NAME@1259..1267
+                        IDENT@1259..1267 "isString"
+                    ARGS_DESC@1267..1272
+                      L_PAREN@1267..1268 "("
+                      ARG@1268..1271
+                        EXPR_VAR@1268..1271
+                          NAME@1268..1271
+                            IDENT@1268..1271 "arr"
+                      R_PAREN@1271..1272 ")"
+              WHITESPACE@1272..1273 " "
+              THEN_KW@1273..1277 "then"
+              WHITESPACE@1277..1284 "\n      "
+              TRUE_EXPR@1284..1359
+                EXPR_ERROR@1284..1359
+                  ERROR_KW@1284..1289 "error"
+                  WHITESPACE@1289..1290 " "
+                  EXPR_PARENED@1290..1359
+                    L_PAREN@1290..1291 "("
+                    EXPR_BINARY@1291..1358
+                      LHS_EXPR@1291..1342
+                        EXPR_STRING@1291..1342
+                          STRING_SINGLE@1291..1342 "'std.mapWithIndex sec ..."
+                      WHITESPACE@1342..1343 " "
+                      PLUS@1343..1344 "+"
+                      WHITESPACE@1344..1345 " "
+                      EXPR_APPLY@1345..1358
+                        EXPR_INDEX@1345..1353
+                          EXPR_VAR@1345..1348
+                            NAME@1345..1348
+                              IDENT@1345..1348 "std"
+                          DOT@1348..1349 "."
+                          NAME@1349..1353
+                            IDENT@1349..1353 "type"
+                        ARGS_DESC@1353..1358
+                          L_PAREN@1353..1354 "("
+                          ARG@1354..1357
+                            EXPR_VAR@1354..1357
+                              NAME@1354..1357
+                                IDENT@1354..1357 "arr"
+                          R_PAREN@1357..1358 ")"
+                    R_PAREN@1358..1359 ")"
+              WHITESPACE@1359..1364 "\n    "
+              ELSE_KW@1364..1368 "else"
+              WHITESPACE@1368..1375 "\n      "
+              FALSE_EXPR@1375..1434
+                EXPR_APPLY@1375..1434
+                  EXPR_INDEX@1375..1388
+                    EXPR_VAR@1375..1378
+                      NAME@1375..1378
+                        IDENT@1375..1378 "std"
+                    DOT@1378..1379 "."
+                    NAME@1379..1388
+                      IDENT@1379..1388 "makeArray"
+                  ARGS_DESC@1388..1434
+                    L_PAREN@1388..1389 "("
+                    ARG@1389..1404
+                      EXPR_APPLY@1389..1404
+                        EXPR_INDEX@1389..1399
+                          EXPR_VAR@1389..1392
+                            NAME@1389..1392
+                              IDENT@1389..1392 "std"
+                          DOT@1392..1393 "."
+                          NAME@1393..1399
+                            IDENT@1393..1399 "length"
+                        ARGS_DESC@1399..1404
+                          L_PAREN@1399..1400 "("
+                          ARG@1400..1403
+                            EXPR_VAR@1400..1403
+                              NAME@1400..1403
+                                IDENT@1400..1403 "arr"
+                          R_PAREN@1403..1404 ")"
+                    COMMA@1404..1405 ","
+                    WHITESPACE@1405..1406 " "
+                    ARG@1406..1433
+                      EXPR_FUNCTION@1406..1433
+                        FUNCTION_KW@1406..1414 "function"
+                        PARAMS_DESC@1414..1417
+                          L_PAREN@1414..1415 "("
+                          PARAM@1415..1416
+                            DESTRUCT_FULL@1415..1416
+                              NAME@1415..1416
+                                IDENT@1415..1416 "i"
+                          R_PAREN@1416..1417 ")"
+                        WHITESPACE@1417..1418 " "
+                        EXPR_APPLY@1418..1433
+                          EXPR_VAR@1418..1422
+                            NAME@1418..1422
+                              IDENT@1418..1422 "func"
+                          ARGS_DESC@1422..1433
+                            L_PAREN@1422..1423 "("
+                            ARG@1423..1424
+                              EXPR_VAR@1423..1424
+                                NAME@1423..1424
+                                  IDENT@1423..1424 "i"
+                            COMMA@1424..1425 ","
+                            WHITESPACE@1425..1426 " "
+                            ARG@1426..1432
+                              EXPR_INDEX_EXPR@1426..1432
+                                LHS_EXPR@1426..1429
+                                  EXPR_VAR@1426..1429
+                                    NAME@1426..1429
+                                      IDENT@1426..1429 "arr"
+                                L_BRACK@1429..1430 "["
+                                EXPR_VAR@1430..1431
+                                  NAME@1430..1431
+                                    IDENT@1430..1431 "i"
+                                R_BRACK@1431..1432 "]"
+                            R_PAREN@1432..1433 ")"
+                    R_PAREN@1433..1434 ")"
       COMMA@1434..1435 ","
       WHITESPACE@1435..1439 "\n\n  "
-      MEMBER_FIELD@1439..1767
-        FIELD_METHOD@1439..1767
-          FIELD_NAME_FIXED@1439..1449
-            NAME@1439..1449
-              IDENT@1439..1449 "mapWithKey"
-          PARAMS_DESC@1449..1460
-            L_PAREN@1449..1450 "("
-            PARAM@1450..1454
-              DESTRUCT_FULL@1450..1454
-                NAME@1450..1454
-                  IDENT@1450..1454 "func"
-            COMMA@1454..1455 ","
-            WHITESPACE@1455..1456 " "
-            PARAM@1456..1459
-              DESTRUCT_FULL@1456..1459
-                NAME@1456..1459
-                  IDENT@1456..1459 "obj"
-            R_PAREN@1459..1460 ")"
-          COLONCOLON@1460..1462 "::"
-          WHITESPACE@1462..1467 "\n    "
-          EXPR_IF_THEN_ELSE@1467..1767
-            IF_KW@1467..1469 "if"
-            WHITESPACE@1469..1470 " "
-            EXPR_UNARY@1470..1491
-              NOT@1470..1471 "!"
-              EXPR_APPLY@1471..1491
-                EXPR_INDEX@1471..1485
-                  EXPR_VAR@1471..1474
-                    NAME@1471..1474
-                      IDENT@1471..1474 "std"
-                  DOT@1474..1475 "."
-                  NAME@1475..1485
-                    IDENT@1475..1485 "isFunction"
-                ARGS_DESC@1485..1491
-                  L_PAREN@1485..1486 "("
-                  ARG@1486..1490
-                    EXPR_VAR@1486..1490
-                      NAME@1486..1490
-                        IDENT@1486..1490 "func"
-                  R_PAREN@1490..1491 ")"
-            WHITESPACE@1491..1492 " "
-            THEN_KW@1492..1496 "then"
-            WHITESPACE@1496..1503 "\n      "
-            TRUE_EXPR@1503..1579
-              EXPR_ERROR@1503..1579
-                ERROR_KW@1503..1508 "error"
-                WHITESPACE@1508..1509 " "
-                EXPR_PARENED@1509..1579
-                  L_PAREN@1509..1510 "("
-                  EXPR_BINARY@1510..1578
-                    LHS_EXPR@1510..1561
-                      EXPR_STRING@1510..1561
-                        STRING_SINGLE@1510..1561 "'std.mapWithKey first ..."
-                    WHITESPACE@1561..1562 " "
-                    PLUS@1562..1563 "+"
-                    WHITESPACE@1563..1564 " "
-                    EXPR_APPLY@1564..1578
-                      EXPR_INDEX@1564..1572
-                        EXPR_VAR@1564..1567
-                          NAME@1564..1567
-                            IDENT@1564..1567 "std"
-                        DOT@1567..1568 "."
-                        NAME@1568..1572
-                          IDENT@1568..1572 "type"
-                      ARGS_DESC@1572..1578
-                        L_PAREN@1572..1573 "("
-                        ARG@1573..1577
-                          EXPR_VAR@1573..1577
-                            NAME@1573..1577
-                              IDENT@1573..1577 "func"
-                        R_PAREN@1577..1578 ")"
-                  R_PAREN@1578..1579 ")"
-            WHITESPACE@1579..1584 "\n    "
-            ELSE_KW@1584..1588 "else"
-            WHITESPACE@1588..1589 " "
-            FALSE_EXPR@1589..1767
-              EXPR_IF_THEN_ELSE@1589..1767
-                IF_KW@1589..1591 "if"
-                WHITESPACE@1591..1592 " "
-                EXPR_UNARY@1592..1610
-                  NOT@1592..1593 "!"
-                  EXPR_APPLY@1593..1610
-                    EXPR_INDEX@1593..1605
-                      EXPR_VAR@1593..1596
-                        NAME@1593..1596
-                          IDENT@1593..1596 "std"
-                      DOT@1596..1597 "."
-                      NAME@1597..1605
-                        IDENT@1597..1605 "isObject"
-                    ARGS_DESC@1605..1610
-                      L_PAREN@1605..1606 "("
-                      ARG@1606..1609
-                        EXPR_VAR@1606..1609
-                          NAME@1606..1609
-                            IDENT@1606..1609 "obj"
-                      R_PAREN@1609..1610 ")"
-                WHITESPACE@1610..1611 " "
-                THEN_KW@1611..1615 "then"
-                WHITESPACE@1615..1622 "\n      "
-                TRUE_EXPR@1622..1696
-                  EXPR_ERROR@1622..1696
-                    ERROR_KW@1622..1627 "error"
-                    WHITESPACE@1627..1628 " "
-                    EXPR_PARENED@1628..1696
-                      L_PAREN@1628..1629 "("
-                      EXPR_BINARY@1629..1695
-                        LHS_EXPR@1629..1679
-                          EXPR_STRING@1629..1679
-                            STRING_SINGLE@1629..1679 "'std.mapWithKey secon ..."
-                        WHITESPACE@1679..1680 " "
-                        PLUS@1680..1681 "+"
-                        WHITESPACE@1681..1682 " "
-                        EXPR_APPLY@1682..1695
-                          EXPR_INDEX@1682..1690
-                            EXPR_VAR@1682..1685
-                              NAME@1682..1685
-                                IDENT@1682..1685 "std"
-                            DOT@1685..1686 "."
-                            NAME@1686..1690
-                              IDENT@1686..1690 "type"
-                          ARGS_DESC@1690..1695
-                            L_PAREN@1690..1691 "("
-                            ARG@1691..1694
-                              EXPR_VAR@1691..1694
-                                NAME@1691..1694
-                                  IDENT@1691..1694 "obj"
-                            R_PAREN@1694..1695 ")"
-                      R_PAREN@1695..1696 ")"
-                WHITESPACE@1696..1701 "\n    "
-                ELSE_KW@1701..1705 "else"
-                WHITESPACE@1705..1712 "\n      "
-                FALSE_EXPR@1712..1767
-                  EXPR_OBJECT@1712..1767
-                    OBJ_BODY_MEMBER_LIST@1712..1767
-                      L_BRACE@1712..1713 "{"
-                      WHITESPACE@1713..1714 " "
-                      MEMBER_FIELD@1714..1765
-                        FIELD_NORMAL@1714..1734
-                          FIELD_NAME_DYNAMIC@1714..1717
-                            L_BRACK@1714..1715 "["
-                            EXPR_VAR@1715..1716
-                              NAME@1715..1716
-                                IDENT@1715..1716 "k"
-                            R_BRACK@1716..1717 "]"
-                          COLON@1717..1718 ":"
-                          WHITESPACE@1718..1719 " "
-                          EXPR_APPLY@1719..1734
-                            EXPR_VAR@1719..1723
-                              NAME@1719..1723
-                                IDENT@1719..1723 "func"
-                            ARGS_DESC@1723..1734
-                              L_PAREN@1723..1724 "("
-                              ARG@1724..1725
-                                EXPR_VAR@1724..1725
-                                  NAME@1724..1725
-                                    IDENT@1724..1725 "k"
-                              COMMA@1725..1726 ","
-                              WHITESPACE@1726..1727 " "
-                              ARG@1727..1733
-                                EXPR_INDEX_EXPR@1727..1733
-                                  LHS_EXPR@1727..1730
-                                    EXPR_VAR@1727..1730
-                                      NAME@1727..1730
-                                        IDENT@1727..1730 "obj"
-                                  L_BRACK@1730..1731 "["
-                                  EXPR_VAR@1731..1732
-                                    NAME@1731..1732
-                                      IDENT@1731..1732 "k"
-                                  R_BRACK@1732..1733 "]"
-                              R_PAREN@1733..1734 ")"
-                        WHITESPACE@1734..1735 " "
-                        FOR_SPEC@1735..1765
-                          FOR_KW@1735..1738 "for"
-                          WHITESPACE@1738..1739 " "
-                          NAME@1739..1740
-                            IDENT@1739..1740 "k"
-                          WHITESPACE@1740..1741 " "
-                          IN_KW@1741..1743 "in"
-                          WHITESPACE@1743..1744 " "
-                          EXPR_APPLY@1744..1765
-                            EXPR_INDEX@1744..1760
-                              EXPR_VAR@1744..1747
-                                NAME@1744..1747
-                                  IDENT@1744..1747 "std"
-                              DOT@1747..1748 "."
-                              NAME@1748..1760
-                                IDENT@1748..1760 "objectFields"
-                            ARGS_DESC@1760..1765
-                              L_PAREN@1760..1761 "("
-                              ARG@1761..1764
-                                EXPR_VAR@1761..1764
-                                  NAME@1761..1764
-                                    IDENT@1761..1764 "obj"
-                              R_PAREN@1764..1765 ")"
-                      WHITESPACE@1765..1766 " "
-                      R_BRACE@1766..1767 "}"
+      MEMBER_FIELD_METHOD@1439..1767
+        FIELD_NAME_FIXED@1439..1449
+          NAME@1439..1449
+            IDENT@1439..1449 "mapWithKey"
+        PARAMS_DESC@1449..1460
+          L_PAREN@1449..1450 "("
+          PARAM@1450..1454
+            DESTRUCT_FULL@1450..1454
+              NAME@1450..1454
+                IDENT@1450..1454 "func"
+          COMMA@1454..1455 ","
+          WHITESPACE@1455..1456 " "
+          PARAM@1456..1459
+            DESTRUCT_FULL@1456..1459
+              NAME@1456..1459
+                IDENT@1456..1459 "obj"
+          R_PAREN@1459..1460 ")"
+        COLONCOLON@1460..1462 "::"
+        WHITESPACE@1462..1467 "\n    "
+        EXPR_IF_THEN_ELSE@1467..1767
+          IF_KW@1467..1469 "if"
+          WHITESPACE@1469..1470 " "
+          EXPR_UNARY@1470..1491
+            NOT@1470..1471 "!"
+            EXPR_APPLY@1471..1491
+              EXPR_INDEX@1471..1485
+                EXPR_VAR@1471..1474
+                  NAME@1471..1474
+                    IDENT@1471..1474 "std"
+                DOT@1474..1475 "."
+                NAME@1475..1485
+                  IDENT@1475..1485 "isFunction"
+              ARGS_DESC@1485..1491
+                L_PAREN@1485..1486 "("
+                ARG@1486..1490
+                  EXPR_VAR@1486..1490
+                    NAME@1486..1490
+                      IDENT@1486..1490 "func"
+                R_PAREN@1490..1491 ")"
+          WHITESPACE@1491..1492 " "
+          THEN_KW@1492..1496 "then"
+          WHITESPACE@1496..1503 "\n      "
+          TRUE_EXPR@1503..1579
+            EXPR_ERROR@1503..1579
+              ERROR_KW@1503..1508 "error"
+              WHITESPACE@1508..1509 " "
+              EXPR_PARENED@1509..1579
+                L_PAREN@1509..1510 "("
+                EXPR_BINARY@1510..1578
+                  LHS_EXPR@1510..1561
+                    EXPR_STRING@1510..1561
+                      STRING_SINGLE@1510..1561 "'std.mapWithKey first ..."
+                  WHITESPACE@1561..1562 " "
+                  PLUS@1562..1563 "+"
+                  WHITESPACE@1563..1564 " "
+                  EXPR_APPLY@1564..1578
+                    EXPR_INDEX@1564..1572
+                      EXPR_VAR@1564..1567
+                        NAME@1564..1567
+                          IDENT@1564..1567 "std"
+                      DOT@1567..1568 "."
+                      NAME@1568..1572
+                        IDENT@1568..1572 "type"
+                    ARGS_DESC@1572..1578
+                      L_PAREN@1572..1573 "("
+                      ARG@1573..1577
+                        EXPR_VAR@1573..1577
+                          NAME@1573..1577
+                            IDENT@1573..1577 "func"
+                      R_PAREN@1577..1578 ")"
+                R_PAREN@1578..1579 ")"
+          WHITESPACE@1579..1584 "\n    "
+          ELSE_KW@1584..1588 "else"
+          WHITESPACE@1588..1589 " "
+          FALSE_EXPR@1589..1767
+            EXPR_IF_THEN_ELSE@1589..1767
+              IF_KW@1589..1591 "if"
+              WHITESPACE@1591..1592 " "
+              EXPR_UNARY@1592..1610
+                NOT@1592..1593 "!"
+                EXPR_APPLY@1593..1610
+                  EXPR_INDEX@1593..1605
+                    EXPR_VAR@1593..1596
+                      NAME@1593..1596
+                        IDENT@1593..1596 "std"
+                    DOT@1596..1597 "."
+                    NAME@1597..1605
+                      IDENT@1597..1605 "isObject"
+                  ARGS_DESC@1605..1610
+                    L_PAREN@1605..1606 "("
+                    ARG@1606..1609
+                      EXPR_VAR@1606..1609
+                        NAME@1606..1609
+                          IDENT@1606..1609 "obj"
+                    R_PAREN@1609..1610 ")"
+              WHITESPACE@1610..1611 " "
+              THEN_KW@1611..1615 "then"
+              WHITESPACE@1615..1622 "\n      "
+              TRUE_EXPR@1622..1696
+                EXPR_ERROR@1622..1696
+                  ERROR_KW@1622..1627 "error"
+                  WHITESPACE@1627..1628 " "
+                  EXPR_PARENED@1628..1696
+                    L_PAREN@1628..1629 "("
+                    EXPR_BINARY@1629..1695
+                      LHS_EXPR@1629..1679
+                        EXPR_STRING@1629..1679
+                          STRING_SINGLE@1629..1679 "'std.mapWithKey secon ..."
+                      WHITESPACE@1679..1680 " "
+                      PLUS@1680..1681 "+"
+                      WHITESPACE@1681..1682 " "
+                      EXPR_APPLY@1682..1695
+                        EXPR_INDEX@1682..1690
+                          EXPR_VAR@1682..1685
+                            NAME@1682..1685
+                              IDENT@1682..1685 "std"
+                          DOT@1685..1686 "."
+                          NAME@1686..1690
+                            IDENT@1686..1690 "type"
+                        ARGS_DESC@1690..1695
+                          L_PAREN@1690..1691 "("
+                          ARG@1691..1694
+                            EXPR_VAR@1691..1694
+                              NAME@1691..1694
+                                IDENT@1691..1694 "obj"
+                          R_PAREN@1694..1695 ")"
+                    R_PAREN@1695..1696 ")"
+              WHITESPACE@1696..1701 "\n    "
+              ELSE_KW@1701..1705 "else"
+              WHITESPACE@1705..1712 "\n      "
+              FALSE_EXPR@1712..1767
+                EXPR_OBJECT@1712..1767
+                  OBJ_BODY_COMP@1712..1767
+                    L_BRACE@1712..1713 "{"
+                    WHITESPACE@1713..1714 " "
+                    MEMBER_FIELD_NORMAL@1714..1734
+                      FIELD_NAME_DYNAMIC@1714..1717
+                        L_BRACK@1714..1715 "["
+                        EXPR_VAR@1715..1716
+                          NAME@1715..1716
+                            IDENT@1715..1716 "k"
+                        R_BRACK@1716..1717 "]"
+                      COLON@1717..1718 ":"
+                      WHITESPACE@1718..1719 " "
+                      EXPR_APPLY@1719..1734
+                        EXPR_VAR@1719..1723
+                          NAME@1719..1723
+                            IDENT@1719..1723 "func"
+                        ARGS_DESC@1723..1734
+                          L_PAREN@1723..1724 "("
+                          ARG@1724..1725
+                            EXPR_VAR@1724..1725
+                              NAME@1724..1725
+                                IDENT@1724..1725 "k"
+                          COMMA@1725..1726 ","
+                          WHITESPACE@1726..1727 " "
+                          ARG@1727..1733
+                            EXPR_INDEX_EXPR@1727..1733
+                              LHS_EXPR@1727..1730
+                                EXPR_VAR@1727..1730
+                                  NAME@1727..1730
+                                    IDENT@1727..1730 "obj"
+                              L_BRACK@1730..1731 "["
+                              EXPR_VAR@1731..1732
+                                NAME@1731..1732
+                                  IDENT@1731..1732 "k"
+                              R_BRACK@1732..1733 "]"
+                          R_PAREN@1733..1734 ")"
+                    WHITESPACE@1734..1735 " "
+                    FOR_SPEC@1735..1765
+                      FOR_KW@1735..1738 "for"
+                      WHITESPACE@1738..1739 " "
+                      NAME@1739..1740
+                        IDENT@1739..1740 "k"
+                      WHITESPACE@1740..1741 " "
+                      IN_KW@1741..1743 "in"
+                      WHITESPACE@1743..1744 " "
+                      EXPR_APPLY@1744..1765
+                        EXPR_INDEX@1744..1760
+                          EXPR_VAR@1744..1747
+                            NAME@1744..1747
+                              IDENT@1744..1747 "std"
+                          DOT@1747..1748 "."
+                          NAME@1748..1760
+                            IDENT@1748..1760 "objectFields"
+                        ARGS_DESC@1760..1765
+                          L_PAREN@1760..1761 "("
+                          ARG@1761..1764
+                            EXPR_VAR@1761..1764
+                              NAME@1761..1764
+                                IDENT@1761..1764 "obj"
+                          R_PAREN@1764..1765 ")"
+                    WHITESPACE@1765..1766 " "
+                    R_BRACE@1766..1767 "}"
       COMMA@1767..1768 ","
       WHITESPACE@1768..1772 "\n\n  "
-      MEMBER_FIELD@1772..1815
-        FIELD_METHOD@1772..1815
-          FIELD_NAME_FIXED@1772..1777
-            NAME@1772..1777
-              IDENT@1772..1777 "lines"
-          PARAMS_DESC@1777..1782
-            L_PAREN@1777..1778 "("
-            PARAM@1778..1781
-              DESTRUCT_FULL@1778..1781
-                NAME@1778..1781
-                  IDENT@1778..1781 "arr"
-            R_PAREN@1781..1782 ")"
-          COLONCOLON@1782..1784 "::"
-          WHITESPACE@1784..1789 "\n    "
-          EXPR_APPLY@1789..1815
-            EXPR_INDEX@1789..1797
-              EXPR_VAR@1789..1792
-                NAME@1789..1792
-                  IDENT@1789..1792 "std"
-              DOT@1792..1793 "."
-              NAME@1793..1797
-                IDENT@1793..1797 "join"
-            ARGS_DESC@1797..1815
-              L_PAREN@1797..1798 "("
-              ARG@1798..1802
-                EXPR_STRING@1798..1802
-                  STRING_SINGLE@1798..1802 "'\\n'"
-              COMMA@1802..1803 ","
-              WHITESPACE@1803..1804 " "
-              ARG@1804..1814
-                EXPR_BINARY@1804..1814
-                  LHS_EXPR@1804..1807
-                    EXPR_VAR@1804..1807
-                      NAME@1804..1807
-                        IDENT@1804..1807 "arr"
-                  WHITESPACE@1807..1808 " "
-                  PLUS@1808..1809 "+"
-                  WHITESPACE@1809..1810 " "
-                  EXPR_ARRAY@1810..1814
-                    L_BRACK@1810..1811 "["
-                    EXPR_STRING@1811..1813
-                      STRING_SINGLE@1811..1813 "''"
-                    R_BRACK@1813..1814 "]"
-              R_PAREN@1814..1815 ")"
+      MEMBER_FIELD_METHOD@1772..1815
+        FIELD_NAME_FIXED@1772..1777
+          NAME@1772..1777
+            IDENT@1772..1777 "lines"
+        PARAMS_DESC@1777..1782
+          L_PAREN@1777..1778 "("
+          PARAM@1778..1781
+            DESTRUCT_FULL@1778..1781
+              NAME@1778..1781
+                IDENT@1778..1781 "arr"
+          R_PAREN@1781..1782 ")"
+        COLONCOLON@1782..1784 "::"
+        WHITESPACE@1784..1789 "\n    "
+        EXPR_APPLY@1789..1815
+          EXPR_INDEX@1789..1797
+            EXPR_VAR@1789..1792
+              NAME@1789..1792
+                IDENT@1789..1792 "std"
+            DOT@1792..1793 "."
+            NAME@1793..1797
+              IDENT@1793..1797 "join"
+          ARGS_DESC@1797..1815
+            L_PAREN@1797..1798 "("
+            ARG@1798..1802
+              EXPR_STRING@1798..1802
+                STRING_SINGLE@1798..1802 "'\\n'"
+            COMMA@1802..1803 ","
+            WHITESPACE@1803..1804 " "
+            ARG@1804..1814
+              EXPR_BINARY@1804..1814
+                LHS_EXPR@1804..1807
+                  EXPR_VAR@1804..1807
+                    NAME@1804..1807
+                      IDENT@1804..1807 "arr"
+                WHITESPACE@1807..1808 " "
+                PLUS@1808..1809 "+"
+                WHITESPACE@1809..1810 " "
+                EXPR_ARRAY@1810..1814
+                  L_BRACK@1810..1811 "["
+                  EXPR_STRING@1811..1813
+                    STRING_SINGLE@1811..1813 "''"
+                  R_BRACK@1813..1814 "]"
+            R_PAREN@1814..1815 ")"
       COMMA@1815..1816 ","
       WHITESPACE@1816..1820 "\n\n  "
-      MEMBER_FIELD@1820..2032
-        FIELD_METHOD@1820..2032
-          FIELD_NAME_FIXED@1820..1828
-            NAME@1820..1828
-              IDENT@1820..1828 "deepJoin"
-          PARAMS_DESC@1828..1833
-            L_PAREN@1828..1829 "("
-            PARAM@1829..1832
-              DESTRUCT_FULL@1829..1832
-                NAME@1829..1832
-                  IDENT@1829..1832 "arr"
-            R_PAREN@1832..1833 ")"
-          COLONCOLON@1833..1835 "::"
-          WHITESPACE@1835..1840 "\n    "
-          EXPR_IF_THEN_ELSE@1840..2032
-            IF_KW@1840..1842 "if"
-            WHITESPACE@1842..1843 " "
-            EXPR_APPLY@1843..1860
-              EXPR_INDEX@1843..1855
-                EXPR_VAR@1843..1846
-                  NAME@1843..1846
-                    IDENT@1843..1846 "std"
-                DOT@1846..1847 "."
-                NAME@1847..1855
-                  IDENT@1847..1855 "isString"
-              ARGS_DESC@1855..1860
-                L_PAREN@1855..1856 "("
-                ARG@1856..1859
-                  EXPR_VAR@1856..1859
-                    NAME@1856..1859
-                      IDENT@1856..1859 "arr"
-                R_PAREN@1859..1860 ")"
-            WHITESPACE@1860..1861 " "
-            THEN_KW@1861..1865 "then"
-            WHITESPACE@1865..1872 "\n      "
-            TRUE_EXPR@1872..1875
-              EXPR_VAR@1872..1875
-                NAME@1872..1875
-                  IDENT@1872..1875 "arr"
-            WHITESPACE@1875..1880 "\n    "
-            ELSE_KW@1880..1884 "else"
-            WHITESPACE@1884..1885 " "
-            FALSE_EXPR@1885..2032
-              EXPR_IF_THEN_ELSE@1885..2032
-                IF_KW@1885..1887 "if"
-                WHITESPACE@1887..1888 " "
-                EXPR_APPLY@1888..1904
-                  EXPR_INDEX@1888..1899
-                    EXPR_VAR@1888..1891
-                      NAME@1888..1891
-                        IDENT@1888..1891 "std"
-                    DOT@1891..1892 "."
-                    NAME@1892..1899
-                      IDENT@1892..1899 "isArray"
-                  ARGS_DESC@1899..1904
-                    L_PAREN@1899..1900 "("
-                    ARG@1900..1903
-                      EXPR_VAR@1900..1903
-                        NAME@1900..1903
-                          IDENT@1900..1903 "arr"
-                    R_PAREN@1903..1904 ")"
-                WHITESPACE@1904..1905 " "
-                THEN_KW@1905..1909 "then"
-                WHITESPACE@1909..1916 "\n      "
-                TRUE_EXPR@1916..1960
-                  EXPR_APPLY@1916..1960
-                    EXPR_INDEX@1916..1924
-                      EXPR_VAR@1916..1919
-                        NAME@1916..1919
-                          IDENT@1916..1919 "std"
-                      DOT@1919..1920 "."
-                      NAME@1920..1924
-                        IDENT@1920..1924 "join"
-                    ARGS_DESC@1924..1960
-                      L_PAREN@1924..1925 "("
-                      ARG@1925..1927
-                        EXPR_STRING@1925..1927
-                          STRING_SINGLE@1925..1927 "''"
-                      COMMA@1927..1928 ","
-                      WHITESPACE@1928..1929 " "
-                      ARG@1929..1959
-                        EXPR_ARRAY_COMP@1929..1959
-                          L_BRACK@1929..1930 "["
-                          EXPR_APPLY@1930..1945
-                            EXPR_INDEX@1930..1942
-                              EXPR_VAR@1930..1933
-                                NAME@1930..1933
-                                  IDENT@1930..1933 "std"
-                              DOT@1933..1934 "."
-                              NAME@1934..1942
-                                IDENT@1934..1942 "deepJoin"
-                            ARGS_DESC@1942..1945
-                              L_PAREN@1942..1943 "("
-                              ARG@1943..1944
-                                EXPR_VAR@1943..1944
-                                  NAME@1943..1944
-                                    IDENT@1943..1944 "x"
-                              R_PAREN@1944..1945 ")"
-                          WHITESPACE@1945..1946 " "
-                          FOR_SPEC@1946..1958
-                            FOR_KW@1946..1949 "for"
-                            WHITESPACE@1949..1950 " "
-                            NAME@1950..1951
-                              IDENT@1950..1951 "x"
-                            WHITESPACE@1951..1952 " "
-                            IN_KW@1952..1954 "in"
-                            WHITESPACE@1954..1955 " "
-                            EXPR_VAR@1955..1958
-                              NAME@1955..1958
-                                IDENT@1955..1958 "arr"
-                          R_BRACK@1958..1959 "]"
-                      R_PAREN@1959..1960 ")"
-                WHITESPACE@1960..1965 "\n    "
-                ELSE_KW@1965..1969 "else"
-                WHITESPACE@1969..1976 "\n      "
-                FALSE_EXPR@1976..2032
-                  EXPR_ERROR@1976..2032
-                    ERROR_KW@1976..1981 "error"
-                    WHITESPACE@1981..1982 " "
-                    EXPR_BINARY@1982..2032
-                      LHS_EXPR@1982..2016
-                        EXPR_STRING@1982..2016
-                          STRING_SINGLE@1982..2016 "'Expected string or a ..."
-                      WHITESPACE@2016..2017 " "
-                      MODULO@2017..2018 "%"
-                      WHITESPACE@2018..2019 " "
-                      EXPR_APPLY@2019..2032
-                        EXPR_INDEX@2019..2027
-                          EXPR_VAR@2019..2022
-                            NAME@2019..2022
-                              IDENT@2019..2022 "std"
-                          DOT@2022..2023 "."
-                          NAME@2023..2027
-                            IDENT@2023..2027 "type"
-                        ARGS_DESC@2027..2032
-                          L_PAREN@2027..2028 "("
-                          ARG@2028..2031
-                            EXPR_VAR@2028..2031
-                              NAME@2028..2031
-                                IDENT@2028..2031 "arr"
-                          R_PAREN@2031..2032 ")"
+      MEMBER_FIELD_METHOD@1820..2032
+        FIELD_NAME_FIXED@1820..1828
+          NAME@1820..1828
+            IDENT@1820..1828 "deepJoin"
+        PARAMS_DESC@1828..1833
+          L_PAREN@1828..1829 "("
+          PARAM@1829..1832
+            DESTRUCT_FULL@1829..1832
+              NAME@1829..1832
+                IDENT@1829..1832 "arr"
+          R_PAREN@1832..1833 ")"
+        COLONCOLON@1833..1835 "::"
+        WHITESPACE@1835..1840 "\n    "
+        EXPR_IF_THEN_ELSE@1840..2032
+          IF_KW@1840..1842 "if"
+          WHITESPACE@1842..1843 " "
+          EXPR_APPLY@1843..1860
+            EXPR_INDEX@1843..1855
+              EXPR_VAR@1843..1846
+                NAME@1843..1846
+                  IDENT@1843..1846 "std"
+              DOT@1846..1847 "."
+              NAME@1847..1855
+                IDENT@1847..1855 "isString"
+            ARGS_DESC@1855..1860
+              L_PAREN@1855..1856 "("
+              ARG@1856..1859
+                EXPR_VAR@1856..1859
+                  NAME@1856..1859
+                    IDENT@1856..1859 "arr"
+              R_PAREN@1859..1860 ")"
+          WHITESPACE@1860..1861 " "
+          THEN_KW@1861..1865 "then"
+          WHITESPACE@1865..1872 "\n      "
+          TRUE_EXPR@1872..1875
+            EXPR_VAR@1872..1875
+              NAME@1872..1875
+                IDENT@1872..1875 "arr"
+          WHITESPACE@1875..1880 "\n    "
+          ELSE_KW@1880..1884 "else"
+          WHITESPACE@1884..1885 " "
+          FALSE_EXPR@1885..2032
+            EXPR_IF_THEN_ELSE@1885..2032
+              IF_KW@1885..1887 "if"
+              WHITESPACE@1887..1888 " "
+              EXPR_APPLY@1888..1904
+                EXPR_INDEX@1888..1899
+                  EXPR_VAR@1888..1891
+                    NAME@1888..1891
+                      IDENT@1888..1891 "std"
+                  DOT@1891..1892 "."
+                  NAME@1892..1899
+                    IDENT@1892..1899 "isArray"
+                ARGS_DESC@1899..1904
+                  L_PAREN@1899..1900 "("
+                  ARG@1900..1903
+                    EXPR_VAR@1900..1903
+                      NAME@1900..1903
+                        IDENT@1900..1903 "arr"
+                  R_PAREN@1903..1904 ")"
+              WHITESPACE@1904..1905 " "
+              THEN_KW@1905..1909 "then"
+              WHITESPACE@1909..1916 "\n      "
+              TRUE_EXPR@1916..1960
+                EXPR_APPLY@1916..1960
+                  EXPR_INDEX@1916..1924
+                    EXPR_VAR@1916..1919
+                      NAME@1916..1919
+                        IDENT@1916..1919 "std"
+                    DOT@1919..1920 "."
+                    NAME@1920..1924
+                      IDENT@1920..1924 "join"
+                  ARGS_DESC@1924..1960
+                    L_PAREN@1924..1925 "("
+                    ARG@1925..1927
+                      EXPR_STRING@1925..1927
+                        STRING_SINGLE@1925..1927 "''"
+                    COMMA@1927..1928 ","
+                    WHITESPACE@1928..1929 " "
+                    ARG@1929..1959
+                      EXPR_ARRAY_COMP@1929..1959
+                        L_BRACK@1929..1930 "["
+                        EXPR_APPLY@1930..1945
+                          EXPR_INDEX@1930..1942
+                            EXPR_VAR@1930..1933
+                              NAME@1930..1933
+                                IDENT@1930..1933 "std"
+                            DOT@1933..1934 "."
+                            NAME@1934..1942
+                              IDENT@1934..1942 "deepJoin"
+                          ARGS_DESC@1942..1945
+                            L_PAREN@1942..1943 "("
+                            ARG@1943..1944
+                              EXPR_VAR@1943..1944
+                                NAME@1943..1944
+                                  IDENT@1943..1944 "x"
+                            R_PAREN@1944..1945 ")"
+                        WHITESPACE@1945..1946 " "
+                        FOR_SPEC@1946..1958
+                          FOR_KW@1946..1949 "for"
+                          WHITESPACE@1949..1950 " "
+                          NAME@1950..1951
+                            IDENT@1950..1951 "x"
+                          WHITESPACE@1951..1952 " "
+                          IN_KW@1952..1954 "in"
+                          WHITESPACE@1954..1955 " "
+                          EXPR_VAR@1955..1958
+                            NAME@1955..1958
+                              IDENT@1955..1958 "arr"
+                        R_BRACK@1958..1959 "]"
+                    R_PAREN@1959..1960 ")"
+              WHITESPACE@1960..1965 "\n    "
+              ELSE_KW@1965..1969 "else"
+              WHITESPACE@1969..1976 "\n      "
+              FALSE_EXPR@1976..2032
+                EXPR_ERROR@1976..2032
+                  ERROR_KW@1976..1981 "error"
+                  WHITESPACE@1981..1982 " "
+                  EXPR_BINARY@1982..2032
+                    LHS_EXPR@1982..2016
+                      EXPR_STRING@1982..2016
+                        STRING_SINGLE@1982..2016 "'Expected string or a ..."
+                    WHITESPACE@2016..2017 " "
+                    MODULO@2017..2018 "%"
+                    WHITESPACE@2018..2019 " "
+                    EXPR_APPLY@2019..2032
+                      EXPR_INDEX@2019..2027
+                        EXPR_VAR@2019..2022
+                          NAME@2019..2022
+                            IDENT@2019..2022 "std"
+                        DOT@2022..2023 "."
+                        NAME@2023..2027
+                          IDENT@2023..2027 "type"
+                      ARGS_DESC@2027..2032
+                        L_PAREN@2027..2028 "("
+                        ARG@2028..2031
+                          EXPR_VAR@2028..2031
+                            NAME@2028..2031
+                              IDENT@2028..2031 "arr"
+                        R_PAREN@2031..2032 ")"
       COMMA@2032..2033 ","
       WHITESPACE@2033..2037 "\n\n  "
-      MEMBER_FIELD@2037..2512
-        FIELD_METHOD@2037..2512
-          FIELD_NAME_FIXED@2037..2046
-            NAME@2037..2046
-              IDENT@2037..2046 "filterMap"
-          PARAMS_DESC@2046..2074
-            L_PAREN@2046..2047 "("
-            PARAM@2047..2058
-              DESTRUCT_FULL@2047..2058
-                NAME@2047..2058
-                  IDENT@2047..2058 "filter_func"
-            COMMA@2058..2059 ","
-            WHITESPACE@2059..2060 " "
-            PARAM@2060..2068
-              DESTRUCT_FULL@2060..2068
-                NAME@2060..2068
-                  IDENT@2060..2068 "map_func"
-            COMMA@2068..2069 ","
-            WHITESPACE@2069..2070 " "
-            PARAM@2070..2073
-              DESTRUCT_FULL@2070..2073
-                NAME@2070..2073
-                  IDENT@2070..2073 "arr"
-            R_PAREN@2073..2074 ")"
-          COLONCOLON@2074..2076 "::"
-          WHITESPACE@2076..2081 "\n    "
-          EXPR_IF_THEN_ELSE@2081..2512
-            IF_KW@2081..2083 "if"
-            WHITESPACE@2083..2084 " "
-            EXPR_UNARY@2084..2112
-              NOT@2084..2085 "!"
-              EXPR_APPLY@2085..2112
-                EXPR_INDEX@2085..2099
-                  EXPR_VAR@2085..2088
-                    NAME@2085..2088
-                      IDENT@2085..2088 "std"
-                  DOT@2088..2089 "."
-                  NAME@2089..2099
-                    IDENT@2089..2099 "isFunction"
-                ARGS_DESC@2099..2112
-                  L_PAREN@2099..2100 "("
-                  ARG@2100..2111
-                    EXPR_VAR@2100..2111
-                      NAME@2100..2111
-                        IDENT@2100..2111 "filter_func"
-                  R_PAREN@2111..2112 ")"
-            WHITESPACE@2112..2113 " "
-            THEN_KW@2113..2117 "then"
-            WHITESPACE@2117..2124 "\n      "
-            TRUE_EXPR@2124..2206
-              EXPR_ERROR@2124..2206
-                ERROR_KW@2124..2129 "error"
-                WHITESPACE@2129..2130 " "
-                EXPR_PARENED@2130..2206
-                  L_PAREN@2130..2131 "("
-                  EXPR_BINARY@2131..2205
-                    LHS_EXPR@2131..2181
-                      EXPR_STRING@2131..2181
-                        STRING_SINGLE@2131..2181 "'std.filterMap first  ..."
-                    WHITESPACE@2181..2182 " "
-                    PLUS@2182..2183 "+"
-                    WHITESPACE@2183..2184 " "
-                    EXPR_APPLY@2184..2205
-                      EXPR_INDEX@2184..2192
-                        EXPR_VAR@2184..2187
-                          NAME@2184..2187
-                            IDENT@2184..2187 "std"
-                        DOT@2187..2188 "."
-                        NAME@2188..2192
-                          IDENT@2188..2192 "type"
-                      ARGS_DESC@2192..2205
-                        L_PAREN@2192..2193 "("
-                        ARG@2193..2204
-                          EXPR_VAR@2193..2204
-                            NAME@2193..2204
-                              IDENT@2193..2204 "filter_func"
-                        R_PAREN@2204..2205 ")"
-                  R_PAREN@2205..2206 ")"
-            WHITESPACE@2206..2211 "\n    "
-            ELSE_KW@2211..2215 "else"
-            WHITESPACE@2215..2216 " "
-            FALSE_EXPR@2216..2512
-              EXPR_IF_THEN_ELSE@2216..2512
-                IF_KW@2216..2218 "if"
-                WHITESPACE@2218..2219 " "
-                EXPR_UNARY@2219..2244
-                  NOT@2219..2220 "!"
-                  EXPR_APPLY@2220..2244
-                    EXPR_INDEX@2220..2234
-                      EXPR_VAR@2220..2223
-                        NAME@2220..2223
-                          IDENT@2220..2223 "std"
-                      DOT@2223..2224 "."
-                      NAME@2224..2234
-                        IDENT@2224..2234 "isFunction"
-                    ARGS_DESC@2234..2244
-                      L_PAREN@2234..2235 "("
-                      ARG@2235..2243
-                        EXPR_VAR@2235..2243
-                          NAME@2235..2243
-                            IDENT@2235..2243 "map_func"
-                      R_PAREN@2243..2244 ")"
-                WHITESPACE@2244..2245 " "
-                THEN_KW@2245..2249 "then"
-                WHITESPACE@2249..2256 "\n      "
-                TRUE_EXPR@2256..2336
-                  EXPR_ERROR@2256..2336
-                    ERROR_KW@2256..2261 "error"
-                    WHITESPACE@2261..2262 " "
-                    EXPR_PARENED@2262..2336
-                      L_PAREN@2262..2263 "("
-                      EXPR_BINARY@2263..2335
-                        LHS_EXPR@2263..2314
-                          EXPR_STRING@2263..2314
-                            STRING_SINGLE@2263..2314 "'std.filterMap second ..."
-                        WHITESPACE@2314..2315 " "
-                        PLUS@2315..2316 "+"
-                        WHITESPACE@2316..2317 " "
-                        EXPR_APPLY@2317..2335
-                          EXPR_INDEX@2317..2325
-                            EXPR_VAR@2317..2320
-                              NAME@2317..2320
-                                IDENT@2317..2320 "std"
-                            DOT@2320..2321 "."
-                            NAME@2321..2325
-                              IDENT@2321..2325 "type"
-                          ARGS_DESC@2325..2335
-                            L_PAREN@2325..2326 "("
-                            ARG@2326..2334
-                              EXPR_VAR@2326..2334
-                                NAME@2326..2334
-                                  IDENT@2326..2334 "map_func"
-                            R_PAREN@2334..2335 ")"
-                      R_PAREN@2335..2336 ")"
-                WHITESPACE@2336..2341 "\n    "
-                ELSE_KW@2341..2345 "else"
-                WHITESPACE@2345..2346 " "
-                FALSE_EXPR@2346..2512
-                  EXPR_IF_THEN_ELSE@2346..2512
-                    IF_KW@2346..2348 "if"
-                    WHITESPACE@2348..2349 " "
-                    EXPR_UNARY@2349..2366
-                      NOT@2349..2350 "!"
-                      EXPR_APPLY@2350..2366
-                        EXPR_INDEX@2350..2361
-                          EXPR_VAR@2350..2353
-                            NAME@2350..2353
-                              IDENT@2350..2353 "std"
-                          DOT@2353..2354 "."
-                          NAME@2354..2361
-                            IDENT@2354..2361 "isArray"
-                        ARGS_DESC@2361..2366
-                          L_PAREN@2361..2362 "("
-                          ARG@2362..2365
-                            EXPR_VAR@2362..2365
-                              NAME@2362..2365
-                                IDENT@2362..2365 "arr"
-                          R_PAREN@2365..2366 ")"
-                    WHITESPACE@2366..2367 " "
-                    THEN_KW@2367..2371 "then"
-                    WHITESPACE@2371..2378 "\n      "
-                    TRUE_EXPR@2378..2449
-                      EXPR_ERROR@2378..2449
-                        ERROR_KW@2378..2383 "error"
-                        WHITESPACE@2383..2384 " "
-                        EXPR_PARENED@2384..2449
-                          L_PAREN@2384..2385 "("
-                          EXPR_BINARY@2385..2448
-                            LHS_EXPR@2385..2432
-                              EXPR_STRING@2385..2432
-                                STRING_SINGLE@2385..2432 "'std.filterMap third  ..."
-                            WHITESPACE@2432..2433 " "
-                            PLUS@2433..2434 "+"
-                            WHITESPACE@2434..2435 " "
-                            EXPR_APPLY@2435..2448
-                              EXPR_INDEX@2435..2443
-                                EXPR_VAR@2435..2438
-                                  NAME@2435..2438
-                                    IDENT@2435..2438 "std"
-                                DOT@2438..2439 "."
-                                NAME@2439..2443
-                                  IDENT@2439..2443 "type"
-                              ARGS_DESC@2443..2448
-                                L_PAREN@2443..2444 "("
-                                ARG@2444..2447
-                                  EXPR_VAR@2444..2447
-                                    NAME@2444..2447
-                                      IDENT@2444..2447 "arr"
-                                R_PAREN@2447..2448 ")"
-                          R_PAREN@2448..2449 ")"
-                    WHITESPACE@2449..2454 "\n    "
-                    ELSE_KW@2454..2458 "else"
-                    WHITESPACE@2458..2465 "\n      "
-                    FALSE_EXPR@2465..2512
-                      EXPR_APPLY@2465..2512
-                        EXPR_INDEX@2465..2472
-                          EXPR_VAR@2465..2468
-                            NAME@2465..2468
-                              IDENT@2465..2468 "std"
-                          DOT@2468..2469 "."
-                          NAME@2469..2472
-                            IDENT@2469..2472 "map"
-                        ARGS_DESC@2472..2512
-                          L_PAREN@2472..2473 "("
-                          ARG@2473..2481
-                            EXPR_VAR@2473..2481
-                              NAME@2473..2481
-                                IDENT@2473..2481 "map_func"
-                          COMMA@2481..2482 ","
-                          WHITESPACE@2482..2483 " "
-                          ARG@2483..2511
-                            EXPR_APPLY@2483..2511
-                              EXPR_INDEX@2483..2493
-                                EXPR_VAR@2483..2486
-                                  NAME@2483..2486
-                                    IDENT@2483..2486 "std"
-                                DOT@2486..2487 "."
-                                NAME@2487..2493
-                                  IDENT@2487..2493 "filter"
-                              ARGS_DESC@2493..2511
-                                L_PAREN@2493..2494 "("
-                                ARG@2494..2505
-                                  EXPR_VAR@2494..2505
-                                    NAME@2494..2505
-                                      IDENT@2494..2505 "filter_func"
-                                COMMA@2505..2506 ","
-                                WHITESPACE@2506..2507 " "
-                                ARG@2507..2510
-                                  EXPR_VAR@2507..2510
-                                    NAME@2507..2510
-                                      IDENT@2507..2510 "arr"
-                                R_PAREN@2510..2511 ")"
-                          R_PAREN@2511..2512 ")"
+      MEMBER_FIELD_METHOD@2037..2512
+        FIELD_NAME_FIXED@2037..2046
+          NAME@2037..2046
+            IDENT@2037..2046 "filterMap"
+        PARAMS_DESC@2046..2074
+          L_PAREN@2046..2047 "("
+          PARAM@2047..2058
+            DESTRUCT_FULL@2047..2058
+              NAME@2047..2058
+                IDENT@2047..2058 "filter_func"
+          COMMA@2058..2059 ","
+          WHITESPACE@2059..2060 " "
+          PARAM@2060..2068
+            DESTRUCT_FULL@2060..2068
+              NAME@2060..2068
+                IDENT@2060..2068 "map_func"
+          COMMA@2068..2069 ","
+          WHITESPACE@2069..2070 " "
+          PARAM@2070..2073
+            DESTRUCT_FULL@2070..2073
+              NAME@2070..2073
+                IDENT@2070..2073 "arr"
+          R_PAREN@2073..2074 ")"
+        COLONCOLON@2074..2076 "::"
+        WHITESPACE@2076..2081 "\n    "
+        EXPR_IF_THEN_ELSE@2081..2512
+          IF_KW@2081..2083 "if"
+          WHITESPACE@2083..2084 " "
+          EXPR_UNARY@2084..2112
+            NOT@2084..2085 "!"
+            EXPR_APPLY@2085..2112
+              EXPR_INDEX@2085..2099
+                EXPR_VAR@2085..2088
+                  NAME@2085..2088
+                    IDENT@2085..2088 "std"
+                DOT@2088..2089 "."
+                NAME@2089..2099
+                  IDENT@2089..2099 "isFunction"
+              ARGS_DESC@2099..2112
+                L_PAREN@2099..2100 "("
+                ARG@2100..2111
+                  EXPR_VAR@2100..2111
+                    NAME@2100..2111
+                      IDENT@2100..2111 "filter_func"
+                R_PAREN@2111..2112 ")"
+          WHITESPACE@2112..2113 " "
+          THEN_KW@2113..2117 "then"
+          WHITESPACE@2117..2124 "\n      "
+          TRUE_EXPR@2124..2206
+            EXPR_ERROR@2124..2206
+              ERROR_KW@2124..2129 "error"
+              WHITESPACE@2129..2130 " "
+              EXPR_PARENED@2130..2206
+                L_PAREN@2130..2131 "("
+                EXPR_BINARY@2131..2205
+                  LHS_EXPR@2131..2181
+                    EXPR_STRING@2131..2181
+                      STRING_SINGLE@2131..2181 "'std.filterMap first  ..."
+                  WHITESPACE@2181..2182 " "
+                  PLUS@2182..2183 "+"
+                  WHITESPACE@2183..2184 " "
+                  EXPR_APPLY@2184..2205
+                    EXPR_INDEX@2184..2192
+                      EXPR_VAR@2184..2187
+                        NAME@2184..2187
+                          IDENT@2184..2187 "std"
+                      DOT@2187..2188 "."
+                      NAME@2188..2192
+                        IDENT@2188..2192 "type"
+                    ARGS_DESC@2192..2205
+                      L_PAREN@2192..2193 "("
+                      ARG@2193..2204
+                        EXPR_VAR@2193..2204
+                          NAME@2193..2204
+                            IDENT@2193..2204 "filter_func"
+                      R_PAREN@2204..2205 ")"
+                R_PAREN@2205..2206 ")"
+          WHITESPACE@2206..2211 "\n    "
+          ELSE_KW@2211..2215 "else"
+          WHITESPACE@2215..2216 " "
+          FALSE_EXPR@2216..2512
+            EXPR_IF_THEN_ELSE@2216..2512
+              IF_KW@2216..2218 "if"
+              WHITESPACE@2218..2219 " "
+              EXPR_UNARY@2219..2244
+                NOT@2219..2220 "!"
+                EXPR_APPLY@2220..2244
+                  EXPR_INDEX@2220..2234
+                    EXPR_VAR@2220..2223
+                      NAME@2220..2223
+                        IDENT@2220..2223 "std"
+                    DOT@2223..2224 "."
+                    NAME@2224..2234
+                      IDENT@2224..2234 "isFunction"
+                  ARGS_DESC@2234..2244
+                    L_PAREN@2234..2235 "("
+                    ARG@2235..2243
+                      EXPR_VAR@2235..2243
+                        NAME@2235..2243
+                          IDENT@2235..2243 "map_func"
+                    R_PAREN@2243..2244 ")"
+              WHITESPACE@2244..2245 " "
+              THEN_KW@2245..2249 "then"
+              WHITESPACE@2249..2256 "\n      "
+              TRUE_EXPR@2256..2336
+                EXPR_ERROR@2256..2336
+                  ERROR_KW@2256..2261 "error"
+                  WHITESPACE@2261..2262 " "
+                  EXPR_PARENED@2262..2336
+                    L_PAREN@2262..2263 "("
+                    EXPR_BINARY@2263..2335
+                      LHS_EXPR@2263..2314
+                        EXPR_STRING@2263..2314
+                          STRING_SINGLE@2263..2314 "'std.filterMap second ..."
+                      WHITESPACE@2314..2315 " "
+                      PLUS@2315..2316 "+"
+                      WHITESPACE@2316..2317 " "
+                      EXPR_APPLY@2317..2335
+                        EXPR_INDEX@2317..2325
+                          EXPR_VAR@2317..2320
+                            NAME@2317..2320
+                              IDENT@2317..2320 "std"
+                          DOT@2320..2321 "."
+                          NAME@2321..2325
+                            IDENT@2321..2325 "type"
+                        ARGS_DESC@2325..2335
+                          L_PAREN@2325..2326 "("
+                          ARG@2326..2334
+                            EXPR_VAR@2326..2334
+                              NAME@2326..2334
+                                IDENT@2326..2334 "map_func"
+                          R_PAREN@2334..2335 ")"
+                    R_PAREN@2335..2336 ")"
+              WHITESPACE@2336..2341 "\n    "
+              ELSE_KW@2341..2345 "else"
+              WHITESPACE@2345..2346 " "
+              FALSE_EXPR@2346..2512
+                EXPR_IF_THEN_ELSE@2346..2512
+                  IF_KW@2346..2348 "if"
+                  WHITESPACE@2348..2349 " "
+                  EXPR_UNARY@2349..2366
+                    NOT@2349..2350 "!"
+                    EXPR_APPLY@2350..2366
+                      EXPR_INDEX@2350..2361
+                        EXPR_VAR@2350..2353
+                          NAME@2350..2353
+                            IDENT@2350..2353 "std"
+                        DOT@2353..2354 "."
+                        NAME@2354..2361
+                          IDENT@2354..2361 "isArray"
+                      ARGS_DESC@2361..2366
+                        L_PAREN@2361..2362 "("
+                        ARG@2362..2365
+                          EXPR_VAR@2362..2365
+                            NAME@2362..2365
+                              IDENT@2362..2365 "arr"
+                        R_PAREN@2365..2366 ")"
+                  WHITESPACE@2366..2367 " "
+                  THEN_KW@2367..2371 "then"
+                  WHITESPACE@2371..2378 "\n      "
+                  TRUE_EXPR@2378..2449
+                    EXPR_ERROR@2378..2449
+                      ERROR_KW@2378..2383 "error"
+                      WHITESPACE@2383..2384 " "
+                      EXPR_PARENED@2384..2449
+                        L_PAREN@2384..2385 "("
+                        EXPR_BINARY@2385..2448
+                          LHS_EXPR@2385..2432
+                            EXPR_STRING@2385..2432
+                              STRING_SINGLE@2385..2432 "'std.filterMap third  ..."
+                          WHITESPACE@2432..2433 " "
+                          PLUS@2433..2434 "+"
+                          WHITESPACE@2434..2435 " "
+                          EXPR_APPLY@2435..2448
+                            EXPR_INDEX@2435..2443
+                              EXPR_VAR@2435..2438
+                                NAME@2435..2438
+                                  IDENT@2435..2438 "std"
+                              DOT@2438..2439 "."
+                              NAME@2439..2443
+                                IDENT@2439..2443 "type"
+                            ARGS_DESC@2443..2448
+                              L_PAREN@2443..2444 "("
+                              ARG@2444..2447
+                                EXPR_VAR@2444..2447
+                                  NAME@2444..2447
+                                    IDENT@2444..2447 "arr"
+                              R_PAREN@2447..2448 ")"
+                        R_PAREN@2448..2449 ")"
+                  WHITESPACE@2449..2454 "\n    "
+                  ELSE_KW@2454..2458 "else"
+                  WHITESPACE@2458..2465 "\n      "
+                  FALSE_EXPR@2465..2512
+                    EXPR_APPLY@2465..2512
+                      EXPR_INDEX@2465..2472
+                        EXPR_VAR@2465..2468
+                          NAME@2465..2468
+                            IDENT@2465..2468 "std"
+                        DOT@2468..2469 "."
+                        NAME@2469..2472
+                          IDENT@2469..2472 "map"
+                      ARGS_DESC@2472..2512
+                        L_PAREN@2472..2473 "("
+                        ARG@2473..2481
+                          EXPR_VAR@2473..2481
+                            NAME@2473..2481
+                              IDENT@2473..2481 "map_func"
+                        COMMA@2481..2482 ","
+                        WHITESPACE@2482..2483 " "
+                        ARG@2483..2511
+                          EXPR_APPLY@2483..2511
+                            EXPR_INDEX@2483..2493
+                              EXPR_VAR@2483..2486
+                                NAME@2483..2486
+                                  IDENT@2483..2486 "std"
+                              DOT@2486..2487 "."
+                              NAME@2487..2493
+                                IDENT@2487..2493 "filter"
+                            ARGS_DESC@2493..2511
+                              L_PAREN@2493..2494 "("
+                              ARG@2494..2505
+                                EXPR_VAR@2494..2505
+                                  NAME@2494..2505
+                                    IDENT@2494..2505 "filter_func"
+                              COMMA@2505..2506 ","
+                              WHITESPACE@2506..2507 " "
+                              ARG@2507..2510
+                                EXPR_VAR@2507..2510
+                                  NAME@2507..2510
+                                    IDENT@2507..2510 "arr"
+                              R_PAREN@2510..2511 ")"
+                        R_PAREN@2511..2512 ")"
       COMMA@2512..2513 ","
       WHITESPACE@2513..2517 "\n\n  "
-      MEMBER_FIELD@2517..2625
-        FIELD_METHOD@2517..2625
-          FIELD_NAME_FIXED@2517..2528
-            NAME@2517..2528
-              IDENT@2517..2528 "assertEqual"
-          PARAMS_DESC@2528..2534
-            L_PAREN@2528..2529 "("
-            PARAM@2529..2530
-              DESTRUCT_FULL@2529..2530
-                NAME@2529..2530
-                  IDENT@2529..2530 "a"
-            COMMA@2530..2531 ","
-            WHITESPACE@2531..2532 " "
-            PARAM@2532..2533
-              DESTRUCT_FULL@2532..2533
-                NAME@2532..2533
-                  IDENT@2532..2533 "b"
-            R_PAREN@2533..2534 ")"
-          COLONCOLON@2534..2536 "::"
-          WHITESPACE@2536..2541 "\n    "
-          EXPR_IF_THEN_ELSE@2541..2625
-            IF_KW@2541..2543 "if"
-            WHITESPACE@2543..2544 " "
-            EXPR_BINARY@2544..2550
-              LHS_EXPR@2544..2545
-                EXPR_VAR@2544..2545
-                  NAME@2544..2545
-                    IDENT@2544..2545 "a"
-              WHITESPACE@2545..2546 " "
-              EQ@2546..2548 "=="
-              WHITESPACE@2548..2549 " "
-              EXPR_VAR@2549..2550
-                NAME@2549..2550
-                  IDENT@2549..2550 "b"
-            WHITESPACE@2550..2551 " "
-            THEN_KW@2551..2555 "then"
-            WHITESPACE@2555..2562 "\n      "
-            TRUE_EXPR@2562..2566
-              EXPR_LITERAL@2562..2566
-                TRUE_KW@2562..2566 "true"
-            WHITESPACE@2566..2571 "\n    "
-            ELSE_KW@2571..2575 "else"
-            WHITESPACE@2575..2582 "\n      "
-            FALSE_EXPR@2582..2625
-              EXPR_ERROR@2582..2625
-                ERROR_KW@2582..2587 "error"
-                WHITESPACE@2587..2588 " "
-                EXPR_BINARY@2588..2625
-                  LHS_EXPR@2588..2621
-                    EXPR_BINARY@2588..2621
-                      LHS_EXPR@2588..2612
-                        EXPR_BINARY@2588..2612
-                          LHS_EXPR@2588..2608
-                            EXPR_STRING@2588..2608
-                              STRING_SINGLE@2588..2608 "'Assertion failed. '"
-                          WHITESPACE@2608..2609 " "
-                          PLUS@2609..2610 "+"
-                          WHITESPACE@2610..2611 " "
-                          EXPR_VAR@2611..2612
-                            NAME@2611..2612
-                              IDENT@2611..2612 "a"
-                      WHITESPACE@2612..2613 " "
-                      PLUS@2613..2614 "+"
-                      WHITESPACE@2614..2615 " "
-                      EXPR_STRING@2615..2621
-                        STRING_SINGLE@2615..2621 "' != '"
-                  WHITESPACE@2621..2622 " "
-                  PLUS@2622..2623 "+"
-                  WHITESPACE@2623..2624 " "
-                  EXPR_VAR@2624..2625
-                    NAME@2624..2625
-                      IDENT@2624..2625 "b"
+      MEMBER_FIELD_METHOD@2517..2625
+        FIELD_NAME_FIXED@2517..2528
+          NAME@2517..2528
+            IDENT@2517..2528 "assertEqual"
+        PARAMS_DESC@2528..2534
+          L_PAREN@2528..2529 "("
+          PARAM@2529..2530
+            DESTRUCT_FULL@2529..2530
+              NAME@2529..2530
+                IDENT@2529..2530 "a"
+          COMMA@2530..2531 ","
+          WHITESPACE@2531..2532 " "
+          PARAM@2532..2533
+            DESTRUCT_FULL@2532..2533
+              NAME@2532..2533
+                IDENT@2532..2533 "b"
+          R_PAREN@2533..2534 ")"
+        COLONCOLON@2534..2536 "::"
+        WHITESPACE@2536..2541 "\n    "
+        EXPR_IF_THEN_ELSE@2541..2625
+          IF_KW@2541..2543 "if"
+          WHITESPACE@2543..2544 " "
+          EXPR_BINARY@2544..2550
+            LHS_EXPR@2544..2545
+              EXPR_VAR@2544..2545
+                NAME@2544..2545
+                  IDENT@2544..2545 "a"
+            WHITESPACE@2545..2546 " "
+            EQ@2546..2548 "=="
+            WHITESPACE@2548..2549 " "
+            EXPR_VAR@2549..2550
+              NAME@2549..2550
+                IDENT@2549..2550 "b"
+          WHITESPACE@2550..2551 " "
+          THEN_KW@2551..2555 "then"
+          WHITESPACE@2555..2562 "\n      "
+          TRUE_EXPR@2562..2566
+            EXPR_LITERAL@2562..2566
+              TRUE_KW@2562..2566 "true"
+          WHITESPACE@2566..2571 "\n    "
+          ELSE_KW@2571..2575 "else"
+          WHITESPACE@2575..2582 "\n      "
+          FALSE_EXPR@2582..2625
+            EXPR_ERROR@2582..2625
+              ERROR_KW@2582..2587 "error"
+              WHITESPACE@2587..2588 " "
+              EXPR_BINARY@2588..2625
+                LHS_EXPR@2588..2621
+                  EXPR_BINARY@2588..2621
+                    LHS_EXPR@2588..2612
+                      EXPR_BINARY@2588..2612
+                        LHS_EXPR@2588..2608
+                          EXPR_STRING@2588..2608
+                            STRING_SINGLE@2588..2608 "'Assertion failed. '"
+                        WHITESPACE@2608..2609 " "
+                        PLUS@2609..2610 "+"
+                        WHITESPACE@2610..2611 " "
+                        EXPR_VAR@2611..2612
+                          NAME@2611..2612
+                            IDENT@2611..2612 "a"
+                    WHITESPACE@2612..2613 " "
+                    PLUS@2613..2614 "+"
+                    WHITESPACE@2614..2615 " "
+                    EXPR_STRING@2615..2621
+                      STRING_SINGLE@2615..2621 "' != '"
+                WHITESPACE@2621..2622 " "
+                PLUS@2622..2623 "+"
+                WHITESPACE@2623..2624 " "
+                EXPR_VAR@2624..2625
+                  NAME@2624..2625
+                    IDENT@2624..2625 "b"
       COMMA@2625..2626 ","
       WHITESPACE@2626..2630 "\n\n  "
-      MEMBER_FIELD@2630..2732
-        FIELD_METHOD@2630..2732
-          FIELD_NAME_FIXED@2630..2635
-            NAME@2630..2635
-              IDENT@2630..2635 "clamp"
-          PARAMS_DESC@2635..2654
-            L_PAREN@2635..2636 "("
-            PARAM@2636..2637
-              DESTRUCT_FULL@2636..2637
-                NAME@2636..2637
-                  IDENT@2636..2637 "x"
-            COMMA@2637..2638 ","
-            WHITESPACE@2638..2639 " "
-            PARAM@2639..2645
-              DESTRUCT_FULL@2639..2645
-                NAME@2639..2645
-                  IDENT@2639..2645 "minVal"
-            COMMA@2645..2646 ","
-            WHITESPACE@2646..2647 " "
-            PARAM@2647..2653
-              DESTRUCT_FULL@2647..2653
-                NAME@2647..2653
-                  IDENT@2647..2653 "maxVal"
-            R_PAREN@2653..2654 ")"
-          COLONCOLON@2654..2656 "::"
-          WHITESPACE@2656..2661 "\n    "
-          EXPR_IF_THEN_ELSE@2661..2732
-            IF_KW@2661..2663 "if"
-            WHITESPACE@2663..2664 " "
-            EXPR_BINARY@2664..2674
-              LHS_EXPR@2664..2665
-                EXPR_VAR@2664..2665
-                  NAME@2664..2665
-                    IDENT@2664..2665 "x"
-              WHITESPACE@2665..2666 " "
-              LT@2666..2667 "<"
-              WHITESPACE@2667..2668 " "
-              EXPR_VAR@2668..2674
-                NAME@2668..2674
-                  IDENT@2668..2674 "minVal"
-            WHITESPACE@2674..2675 " "
-            THEN_KW@2675..2679 "then"
-            WHITESPACE@2679..2680 " "
-            TRUE_EXPR@2680..2686
-              EXPR_VAR@2680..2686
-                NAME@2680..2686
-                  IDENT@2680..2686 "minVal"
-            WHITESPACE@2686..2691 "\n    "
-            ELSE_KW@2691..2695 "else"
-            WHITESPACE@2695..2696 " "
-            FALSE_EXPR@2696..2732
-              EXPR_IF_THEN_ELSE@2696..2732
-                IF_KW@2696..2698 "if"
-                WHITESPACE@2698..2699 " "
-                EXPR_BINARY@2699..2709
-                  LHS_EXPR@2699..2700
-                    EXPR_VAR@2699..2700
-                      NAME@2699..2700
-                        IDENT@2699..2700 "x"
-                  WHITESPACE@2700..2701 " "
-                  GT@2701..2702 ">"
-                  WHITESPACE@2702..2703 " "
-                  EXPR_VAR@2703..2709
-                    NAME@2703..2709
-                      IDENT@2703..2709 "maxVal"
-                WHITESPACE@2709..2710 " "
-                THEN_KW@2710..2714 "then"
-                WHITESPACE@2714..2715 " "
-                TRUE_EXPR@2715..2721
-                  EXPR_VAR@2715..2721
-                    NAME@2715..2721
-                      IDENT@2715..2721 "maxVal"
-                WHITESPACE@2721..2726 "\n    "
-                ELSE_KW@2726..2730 "else"
-                WHITESPACE@2730..2731 " "
-                FALSE_EXPR@2731..2732
-                  EXPR_VAR@2731..2732
-                    NAME@2731..2732
-                      IDENT@2731..2732 "x"
+      MEMBER_FIELD_METHOD@2630..2732
+        FIELD_NAME_FIXED@2630..2635
+          NAME@2630..2635
+            IDENT@2630..2635 "clamp"
+        PARAMS_DESC@2635..2654
+          L_PAREN@2635..2636 "("
+          PARAM@2636..2637
+            DESTRUCT_FULL@2636..2637
+              NAME@2636..2637
+                IDENT@2636..2637 "x"
+          COMMA@2637..2638 ","
+          WHITESPACE@2638..2639 " "
+          PARAM@2639..2645
+            DESTRUCT_FULL@2639..2645
+              NAME@2639..2645
+                IDENT@2639..2645 "minVal"
+          COMMA@2645..2646 ","
+          WHITESPACE@2646..2647 " "
+          PARAM@2647..2653
+            DESTRUCT_FULL@2647..2653
+              NAME@2647..2653
+                IDENT@2647..2653 "maxVal"
+          R_PAREN@2653..2654 ")"
+        COLONCOLON@2654..2656 "::"
+        WHITESPACE@2656..2661 "\n    "
+        EXPR_IF_THEN_ELSE@2661..2732
+          IF_KW@2661..2663 "if"
+          WHITESPACE@2663..2664 " "
+          EXPR_BINARY@2664..2674
+            LHS_EXPR@2664..2665
+              EXPR_VAR@2664..2665
+                NAME@2664..2665
+                  IDENT@2664..2665 "x"
+            WHITESPACE@2665..2666 " "
+            LT@2666..2667 "<"
+            WHITESPACE@2667..2668 " "
+            EXPR_VAR@2668..2674
+              NAME@2668..2674
+                IDENT@2668..2674 "minVal"
+          WHITESPACE@2674..2675 " "
+          THEN_KW@2675..2679 "then"
+          WHITESPACE@2679..2680 " "
+          TRUE_EXPR@2680..2686
+            EXPR_VAR@2680..2686
+              NAME@2680..2686
+                IDENT@2680..2686 "minVal"
+          WHITESPACE@2686..2691 "\n    "
+          ELSE_KW@2691..2695 "else"
+          WHITESPACE@2695..2696 " "
+          FALSE_EXPR@2696..2732
+            EXPR_IF_THEN_ELSE@2696..2732
+              IF_KW@2696..2698 "if"
+              WHITESPACE@2698..2699 " "
+              EXPR_BINARY@2699..2709
+                LHS_EXPR@2699..2700
+                  EXPR_VAR@2699..2700
+                    NAME@2699..2700
+                      IDENT@2699..2700 "x"
+                WHITESPACE@2700..2701 " "
+                GT@2701..2702 ">"
+                WHITESPACE@2702..2703 " "
+                EXPR_VAR@2703..2709
+                  NAME@2703..2709
+                    IDENT@2703..2709 "maxVal"
+              WHITESPACE@2709..2710 " "
+              THEN_KW@2710..2714 "then"
+              WHITESPACE@2714..2715 " "
+              TRUE_EXPR@2715..2721
+                EXPR_VAR@2715..2721
+                  NAME@2715..2721
+                    IDENT@2715..2721 "maxVal"
+              WHITESPACE@2721..2726 "\n    "
+              ELSE_KW@2726..2730 "else"
+              WHITESPACE@2730..2731 " "
+              FALSE_EXPR@2731..2732
+                EXPR_VAR@2731..2732
+                  NAME@2731..2732
+                    IDENT@2731..2732 "x"
       COMMA@2732..2733 ","
       WHITESPACE@2733..2737 "\n\n  "
-      MEMBER_FIELD@2737..2804
-        FIELD_METHOD@2737..2804
-          FIELD_NAME_FIXED@2737..2750
-            NAME@2737..2750
-              IDENT@2737..2750 "flattenArrays"
-          PARAMS_DESC@2750..2756
-            L_PAREN@2750..2751 "("
-            PARAM@2751..2755
-              DESTRUCT_FULL@2751..2755
-                NAME@2751..2755
-                  IDENT@2751..2755 "arrs"
-            R_PAREN@2755..2756 ")"
-          COLONCOLON@2756..2758 "::"
-          WHITESPACE@2758..2763 "\n    "
-          EXPR_APPLY@2763..2804
-            EXPR_INDEX@2763..2772
-              EXPR_VAR@2763..2766
-                NAME@2763..2766
-                  IDENT@2763..2766 "std"
-              DOT@2766..2767 "."
-              NAME@2767..2772
-                IDENT@2767..2772 "foldl"
-            ARGS_DESC@2772..2804
-              L_PAREN@2772..2773 "("
-              ARG@2773..2793
-                EXPR_FUNCTION@2773..2793
-                  FUNCTION_KW@2773..2781 "function"
-                  PARAMS_DESC@2781..2787
-                    L_PAREN@2781..2782 "("
-                    PARAM@2782..2783
-                      DESTRUCT_FULL@2782..2783
-                        NAME@2782..2783
-                          IDENT@2782..2783 "a"
-                    COMMA@2783..2784 ","
-                    WHITESPACE@2784..2785 " "
-                    PARAM@2785..2786
-                      DESTRUCT_FULL@2785..2786
-                        NAME@2785..2786
-                          IDENT@2785..2786 "b"
-                    R_PAREN@2786..2787 ")"
-                  WHITESPACE@2787..2788 " "
-                  EXPR_BINARY@2788..2793
-                    LHS_EXPR@2788..2789
-                      EXPR_VAR@2788..2789
-                        NAME@2788..2789
-                          IDENT@2788..2789 "a"
-                    WHITESPACE@2789..2790 " "
-                    PLUS@2790..2791 "+"
-                    WHITESPACE@2791..2792 " "
-                    EXPR_VAR@2792..2793
-                      NAME@2792..2793
-                        IDENT@2792..2793 "b"
-              COMMA@2793..2794 ","
-              WHITESPACE@2794..2795 " "
-              ARG@2795..2799
-                EXPR_VAR@2795..2799
-                  NAME@2795..2799
-                    IDENT@2795..2799 "arrs"
-              COMMA@2799..2800 ","
-              WHITESPACE@2800..2801 " "
-              ARG@2801..2803
-                EXPR_ARRAY@2801..2803
-                  L_BRACK@2801..2802 "["
-                  R_BRACK@2802..2803 "]"
-              R_PAREN@2803..2804 ")"
+      MEMBER_FIELD_METHOD@2737..2804
+        FIELD_NAME_FIXED@2737..2750
+          NAME@2737..2750
+            IDENT@2737..2750 "flattenArrays"
+        PARAMS_DESC@2750..2756
+          L_PAREN@2750..2751 "("
+          PARAM@2751..2755
+            DESTRUCT_FULL@2751..2755
+              NAME@2751..2755
+                IDENT@2751..2755 "arrs"
+          R_PAREN@2755..2756 ")"
+        COLONCOLON@2756..2758 "::"
+        WHITESPACE@2758..2763 "\n    "
+        EXPR_APPLY@2763..2804
+          EXPR_INDEX@2763..2772
+            EXPR_VAR@2763..2766
+              NAME@2763..2766
+                IDENT@2763..2766 "std"
+            DOT@2766..2767 "."
+            NAME@2767..2772
+              IDENT@2767..2772 "foldl"
+          ARGS_DESC@2772..2804
+            L_PAREN@2772..2773 "("
+            ARG@2773..2793
+              EXPR_FUNCTION@2773..2793
+                FUNCTION_KW@2773..2781 "function"
+                PARAMS_DESC@2781..2787
+                  L_PAREN@2781..2782 "("
+                  PARAM@2782..2783
+                    DESTRUCT_FULL@2782..2783
+                      NAME@2782..2783
+                        IDENT@2782..2783 "a"
+                  COMMA@2783..2784 ","
+                  WHITESPACE@2784..2785 " "
+                  PARAM@2785..2786
+                    DESTRUCT_FULL@2785..2786
+                      NAME@2785..2786
+                        IDENT@2785..2786 "b"
+                  R_PAREN@2786..2787 ")"
+                WHITESPACE@2787..2788 " "
+                EXPR_BINARY@2788..2793
+                  LHS_EXPR@2788..2789
+                    EXPR_VAR@2788..2789
+                      NAME@2788..2789
+                        IDENT@2788..2789 "a"
+                  WHITESPACE@2789..2790 " "
+                  PLUS@2790..2791 "+"
+                  WHITESPACE@2791..2792 " "
+                  EXPR_VAR@2792..2793
+                    NAME@2792..2793
+                      IDENT@2792..2793 "b"
+            COMMA@2793..2794 ","
+            WHITESPACE@2794..2795 " "
+            ARG@2795..2799
+              EXPR_VAR@2795..2799
+                NAME@2795..2799
+                  IDENT@2795..2799 "arrs"
+            COMMA@2799..2800 ","
+            WHITESPACE@2800..2801 " "
+            ARG@2801..2803
+              EXPR_ARRAY@2801..2803
+                L_BRACK@2801..2802 "["
+                R_BRACK@2802..2803 "]"
+            R_PAREN@2803..2804 ")"
       COMMA@2804..2805 ","
       WHITESPACE@2805..2809 "\n\n  "
-      MEMBER_FIELD@2809..3495
-        FIELD_METHOD@2809..3495
-          FIELD_NAME_FIXED@2809..2820
-            NAME@2809..2820
-              IDENT@2809..2820 "manifestIni"
-          PARAMS_DESC@2820..2825
-            L_PAREN@2820..2821 "("
-            PARAM@2821..2824
-              DESTRUCT_FULL@2821..2824
-                NAME@2821..2824
-                  IDENT@2821..2824 "ini"
-            R_PAREN@2824..2825 ")"
-          COLONCOLON@2825..2827 "::"
-          WHITESPACE@2827..2832 "\n    "
-          EXPR_LOCAL@2832..3495
-            LOCAL_KW@2832..2837 "local"
-            WHITESPACE@2837..2838 " "
-            BIND_FUNCTION@2838..3135
-              NAME@2838..2848
-                IDENT@2838..2848 "body_lines"
-              PARAMS_DESC@2848..2854
-                L_PAREN@2848..2849 "("
-                PARAM@2849..2853
-                  DESTRUCT_FULL@2849..2853
-                    NAME@2849..2853
-                      IDENT@2849..2853 "body"
-                R_PAREN@2853..2854 ")"
-              WHITESPACE@2854..2855 " "
-              ASSIGN@2855..2856 "="
-              WHITESPACE@2856..2863 "\n      "
-              EXPR_APPLY@2863..3135
-                EXPR_INDEX@2863..2871
-                  EXPR_VAR@2863..2866
-                    NAME@2863..2866
-                      IDENT@2863..2866 "std"
-                  DOT@2866..2867 "."
-                  NAME@2867..2871
-                    IDENT@2867..2871 "join"
-                ARGS_DESC@2871..3135
-                  L_PAREN@2871..2872 "("
-                  ARG@2872..2874
-                    EXPR_ARRAY@2872..2874
-                      L_BRACK@2872..2873 "["
-                      R_BRACK@2873..2874 "]"
-                  COMMA@2874..2875 ","
-                  WHITESPACE@2875..2876 " "
-                  ARG@2876..3134
-                    EXPR_ARRAY_COMP@2876..3134
-                      L_BRACK@2876..2877 "["
-                      WHITESPACE@2877..2886 "\n        "
-                      EXPR_LOCAL@2886..3085
-                        LOCAL_KW@2886..2891 "local"
-                        WHITESPACE@2891..2892 " "
-                        BIND_DESTRUCT@2892..2917
-                          DESTRUCT_FULL@2892..2907
-                            NAME@2892..2907
-                              IDENT@2892..2907 "value_or_values"
-                          WHITESPACE@2907..2908 " "
-                          ASSIGN@2908..2909 "="
-                          WHITESPACE@2909..2910 " "
-                          EXPR_INDEX_EXPR@2910..2917
-                            LHS_EXPR@2910..2914
-                              EXPR_VAR@2910..2914
-                                NAME@2910..2914
-                                  IDENT@2910..2914 "body"
-                            L_BRACK@2914..2915 "["
-                            EXPR_VAR@2915..2916
-                              NAME@2915..2916
-                                IDENT@2915..2916 "k"
-                            R_BRACK@2916..2917 "]"
-                        SEMI@2917..2918 ";"
-                        WHITESPACE@2918..2927 "\n        "
-                        EXPR_IF_THEN_ELSE@2927..3085
-                          IF_KW@2927..2929 "if"
-                          WHITESPACE@2929..2930 " "
-                          EXPR_APPLY@2930..2958
-                            EXPR_INDEX@2930..2941
-                              EXPR_VAR@2930..2933
-                                NAME@2930..2933
-                                  IDENT@2930..2933 "std"
-                              DOT@2933..2934 "."
-                              NAME@2934..2941
-                                IDENT@2934..2941 "isArray"
-                            ARGS_DESC@2941..2958
-                              L_PAREN@2941..2942 "("
-                              ARG@2942..2957
-                                EXPR_VAR@2942..2957
-                                  NAME@2942..2957
-                                    IDENT@2942..2957 "value_or_values"
-                              R_PAREN@2957..2958 ")"
-                          WHITESPACE@2958..2959 " "
-                          THEN_KW@2959..2963 "then"
-                          WHITESPACE@2963..2974 "\n          "
-                          TRUE_EXPR@2974..3027
-                            EXPR_ARRAY_COMP@2974..3027
-                              L_BRACK@2974..2975 "["
-                              EXPR_BINARY@2975..2997
-                                LHS_EXPR@2975..2984
-                                  EXPR_STRING@2975..2984
-                                    STRING_SINGLE@2975..2984 "'%s = %s'"
-                                WHITESPACE@2984..2985 " "
-                                MODULO@2985..2986 "%"
-                                WHITESPACE@2986..2987 " "
-                                EXPR_ARRAY@2987..2997
-                                  L_BRACK@2987..2988 "["
-                                  EXPR_VAR@2988..2989
-                                    NAME@2988..2989
-                                      IDENT@2988..2989 "k"
-                                  COMMA@2989..2990 ","
-                                  WHITESPACE@2990..2991 " "
-                                  EXPR_VAR@2991..2996
-                                    NAME@2991..2996
-                                      IDENT@2991..2996 "value"
-                                  R_BRACK@2996..2997 "]"
-                              WHITESPACE@2997..2998 " "
-                              FOR_SPEC@2998..3026
-                                FOR_KW@2998..3001 "for"
-                                WHITESPACE@3001..3002 " "
-                                NAME@3002..3007
-                                  IDENT@3002..3007 "value"
-                                WHITESPACE@3007..3008 " "
-                                IN_KW@3008..3010 "in"
-                                WHITESPACE@3010..3011 " "
-                                EXPR_VAR@3011..3026
-                                  NAME@3011..3026
-                                    IDENT@3011..3026 "value_or_values"
-                              R_BRACK@3026..3027 "]"
-                          WHITESPACE@3027..3036 "\n        "
-                          ELSE_KW@3036..3040 "else"
-                          WHITESPACE@3040..3051 "\n          "
-                          FALSE_EXPR@3051..3085
-                            EXPR_ARRAY@3051..3085
-                              L_BRACK@3051..3052 "["
-                              EXPR_BINARY@3052..3084
-                                LHS_EXPR@3052..3061
-                                  EXPR_STRING@3052..3061
-                                    STRING_SINGLE@3052..3061 "'%s = %s'"
-                                WHITESPACE@3061..3062 " "
-                                MODULO@3062..3063 "%"
-                                WHITESPACE@3063..3064 " "
-                                EXPR_ARRAY@3064..3084
-                                  L_BRACK@3064..3065 "["
-                                  EXPR_VAR@3065..3066
-                                    NAME@3065..3066
-                                      IDENT@3065..3066 "k"
-                                  COMMA@3066..3067 ","
-                                  WHITESPACE@3067..3068 " "
-                                  EXPR_VAR@3068..3083
-                                    NAME@3068..3083
-                                      IDENT@3068..3083 "value_or_values"
-                                  R_BRACK@3083..3084 "]"
-                              R_BRACK@3084..3085 "]"
-                      WHITESPACE@3085..3095 "\n\n        "
-                      FOR_SPEC@3095..3126
-                        FOR_KW@3095..3098 "for"
-                        WHITESPACE@3098..3099 " "
-                        NAME@3099..3100
-                          IDENT@3099..3100 "k"
-                        WHITESPACE@3100..3101 " "
-                        IN_KW@3101..3103 "in"
-                        WHITESPACE@3103..3104 " "
-                        EXPR_APPLY@3104..3126
-                          EXPR_INDEX@3104..3120
-                            EXPR_VAR@3104..3107
-                              NAME@3104..3107
-                                IDENT@3104..3107 "std"
-                            DOT@3107..3108 "."
-                            NAME@3108..3120
-                              IDENT@3108..3120 "objectFields"
-                          ARGS_DESC@3120..3126
-                            L_PAREN@3120..3121 "("
-                            ARG@3121..3125
-                              EXPR_VAR@3121..3125
-                                NAME@3121..3125
-                                  IDENT@3121..3125 "body"
-                            R_PAREN@3125..3126 ")"
-                      WHITESPACE@3126..3133 "\n      "
-                      R_BRACK@3133..3134 "]"
-                  R_PAREN@3134..3135 ")"
-            SEMI@3135..3136 ";"
-            WHITESPACE@3136..3142 "\n\n    "
-            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 ")"
+      MEMBER_FIELD_METHOD@2809..3495
+        FIELD_NAME_FIXED@2809..2820
+          NAME@2809..2820
+            IDENT@2809..2820 "manifestIni"
+        PARAMS_DESC@2820..2825
+          L_PAREN@2820..2821 "("
+          PARAM@2821..2824
+            DESTRUCT_FULL@2821..2824
+              NAME@2821..2824
+                IDENT@2821..2824 "ini"
+          R_PAREN@2824..2825 ")"
+        COLONCOLON@2825..2827 "::"
+        WHITESPACE@2827..2832 "\n    "
+        EXPR_LOCAL@2832..3495
+          LOCAL_KW@2832..2837 "local"
+          WHITESPACE@2837..2838 " "
+          BIND_FUNCTION@2838..3135
+            NAME@2838..2848
+              IDENT@2838..2848 "body_lines"
+            PARAMS_DESC@2848..2854
+              L_PAREN@2848..2849 "("
+              PARAM@2849..2853
+                DESTRUCT_FULL@2849..2853
+                  NAME@2849..2853
+                    IDENT@2849..2853 "body"
+              R_PAREN@2853..2854 ")"
+            WHITESPACE@2854..2855 " "
+            ASSIGN@2855..2856 "="
+            WHITESPACE@2856..2863 "\n      "
+            EXPR_APPLY@2863..3135
+              EXPR_INDEX@2863..2871
+                EXPR_VAR@2863..2866
+                  NAME@2863..2866
+                    IDENT@2863..2866 "std"
+                DOT@2866..2867 "."
+                NAME@2867..2871
+                  IDENT@2867..2871 "join"
+              ARGS_DESC@2871..3135
+                L_PAREN@2871..2872 "("
+                ARG@2872..2874
+                  EXPR_ARRAY@2872..2874
+                    L_BRACK@2872..2873 "["
+                    R_BRACK@2873..2874 "]"
+                COMMA@2874..2875 ","
+                WHITESPACE@2875..2876 " "
+                ARG@2876..3134
+                  EXPR_ARRAY_COMP@2876..3134
+                    L_BRACK@2876..2877 "["
+                    WHITESPACE@2877..2886 "\n        "
+                    EXPR_LOCAL@2886..3085
+                      LOCAL_KW@2886..2891 "local"
+                      WHITESPACE@2891..2892 " "
+                      BIND_DESTRUCT@2892..2917
+                        DESTRUCT_FULL@2892..2907
+                          NAME@2892..2907
+                            IDENT@2892..2907 "value_or_values"
+                        WHITESPACE@2907..2908 " "
+                        ASSIGN@2908..2909 "="
+                        WHITESPACE@2909..2910 " "
+                        EXPR_INDEX_EXPR@2910..2917
+                          LHS_EXPR@2910..2914
+                            EXPR_VAR@2910..2914
+                              NAME@2910..2914
+                                IDENT@2910..2914 "body"
+                          L_BRACK@2914..2915 "["
+                          EXPR_VAR@2915..2916
+                            NAME@2915..2916
+                              IDENT@2915..2916 "k"
+                          R_BRACK@2916..2917 "]"
+                      SEMI@2917..2918 ";"
+                      WHITESPACE@2918..2927 "\n        "
+                      EXPR_IF_THEN_ELSE@2927..3085
+                        IF_KW@2927..2929 "if"
+                        WHITESPACE@2929..2930 " "
+                        EXPR_APPLY@2930..2958
+                          EXPR_INDEX@2930..2941
+                            EXPR_VAR@2930..2933
+                              NAME@2930..2933
+                                IDENT@2930..2933 "std"
+                            DOT@2933..2934 "."
+                            NAME@2934..2941
+                              IDENT@2934..2941 "isArray"
+                          ARGS_DESC@2941..2958
+                            L_PAREN@2941..2942 "("
+                            ARG@2942..2957
+                              EXPR_VAR@2942..2957
+                                NAME@2942..2957
+                                  IDENT@2942..2957 "value_or_values"
+                            R_PAREN@2957..2958 ")"
+                        WHITESPACE@2958..2959 " "
+                        THEN_KW@2959..2963 "then"
+                        WHITESPACE@2963..2974 "\n          "
+                        TRUE_EXPR@2974..3027
+                          EXPR_ARRAY_COMP@2974..3027
+                            L_BRACK@2974..2975 "["
+                            EXPR_BINARY@2975..2997
+                              LHS_EXPR@2975..2984
+                                EXPR_STRING@2975..2984
+                                  STRING_SINGLE@2975..2984 "'%s = %s'"
+                              WHITESPACE@2984..2985 " "
+                              MODULO@2985..2986 "%"
+                              WHITESPACE@2986..2987 " "
+                              EXPR_ARRAY@2987..2997
+                                L_BRACK@2987..2988 "["
+                                EXPR_VAR@2988..2989
+                                  NAME@2988..2989
+                                    IDENT@2988..2989 "k"
+                                COMMA@2989..2990 ","
+                                WHITESPACE@2990..2991 " "
+                                EXPR_VAR@2991..2996
+                                  NAME@2991..2996
+                                    IDENT@2991..2996 "value"
+                                R_BRACK@2996..2997 "]"
+                            WHITESPACE@2997..2998 " "
+                            FOR_SPEC@2998..3026
+                              FOR_KW@2998..3001 "for"
+                              WHITESPACE@3001..3002 " "
+                              NAME@3002..3007
+                                IDENT@3002..3007 "value"
+                              WHITESPACE@3007..3008 " "
+                              IN_KW@3008..3010 "in"
+                              WHITESPACE@3010..3011 " "
+                              EXPR_VAR@3011..3026
+                                NAME@3011..3026
+                                  IDENT@3011..3026 "value_or_values"
+                            R_BRACK@3026..3027 "]"
+                        WHITESPACE@3027..3036 "\n        "
+                        ELSE_KW@3036..3040 "else"
+                        WHITESPACE@3040..3051 "\n          "
+                        FALSE_EXPR@3051..3085
+                          EXPR_ARRAY@3051..3085
+                            L_BRACK@3051..3052 "["
+                            EXPR_BINARY@3052..3084
+                              LHS_EXPR@3052..3061
+                                EXPR_STRING@3052..3061
+                                  STRING_SINGLE@3052..3061 "'%s = %s'"
+                              WHITESPACE@3061..3062 " "
+                              MODULO@3062..3063 "%"
+                              WHITESPACE@3063..3064 " "
+                              EXPR_ARRAY@3064..3084
+                                L_BRACK@3064..3065 "["
+                                EXPR_VAR@3065..3066
+                                  NAME@3065..3066
+                                    IDENT@3065..3066 "k"
+                                COMMA@3066..3067 ","
+                                WHITESPACE@3067..3068 " "
+                                EXPR_VAR@3068..3083
+                                  NAME@3068..3083
+                                    IDENT@3068..3083 "value_or_values"
+                                R_BRACK@3083..3084 "]"
+                            R_BRACK@3084..3085 "]"
+                    WHITESPACE@3085..3095 "\n\n        "
+                    FOR_SPEC@3095..3126
+                      FOR_KW@3095..3098 "for"
+                      WHITESPACE@3098..3099 " "
+                      NAME@3099..3100
+                        IDENT@3099..3100 "k"
+                      WHITESPACE@3100..3101 " "
+                      IN_KW@3101..3103 "in"
+                      WHITESPACE@3103..3104 " "
+                      EXPR_APPLY@3104..3126
+                        EXPR_INDEX@3104..3120
+                          EXPR_VAR@3104..3107
+                            NAME@3104..3107
+                              IDENT@3104..3107 "std"
+                          DOT@3107..3108 "."
+                          NAME@3108..3120
+                            IDENT@3108..3120 "objectFields"
+                        ARGS_DESC@3120..3126
+                          L_PAREN@3120..3121 "("
+                          ARG@3121..3125
+                            EXPR_VAR@3121..3125
+                              NAME@3121..3125
+                                IDENT@3121..3125 "body"
+                          R_PAREN@3125..3126 ")"
+                    WHITESPACE@3126..3133 "\n      "
+                    R_BRACK@3133..3134 "]"
+                R_PAREN@3134..3135 ")"
+          SEMI@3135..3136 ";"
+          WHITESPACE@3136..3142 "\n\n    "
+          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 ")"
       COMMA@3495..3496 ","
       WHITESPACE@3496..3500 "\n\n  "
-      MEMBER_FIELD@3500..3553
-        FIELD_METHOD@3500..3553
-          FIELD_NAME_FIXED@3500..3512
-            NAME@3500..3512
-              IDENT@3500..3512 "manifestToml"
-          PARAMS_DESC@3512..3519
-            L_PAREN@3512..3513 "("
-            PARAM@3513..3518
-              DESTRUCT_FULL@3513..3518
-                NAME@3513..3518
-                  IDENT@3513..3518 "value"
-            R_PAREN@3518..3519 ")"
-          COLONCOLON@3519..3521 "::"
-          WHITESPACE@3521..3522 " "
-          EXPR_APPLY@3522..3553
-            EXPR_INDEX@3522..3540
-              EXPR_VAR@3522..3525
-                NAME@3522..3525
-                  IDENT@3522..3525 "std"
-              DOT@3525..3526 "."
-              NAME@3526..3540
-                IDENT@3526..3540 "manifestTomlEx"
-            ARGS_DESC@3540..3553
-              L_PAREN@3540..3541 "("
-              ARG@3541..3546
-                EXPR_VAR@3541..3546
-                  NAME@3541..3546
-                    IDENT@3541..3546 "value"
-              COMMA@3546..3547 ","
-              WHITESPACE@3547..3548 " "
-              ARG@3548..3552
-                EXPR_STRING@3548..3552
-                  STRING_SINGLE@3548..3552 "'  '"
-              R_PAREN@3552..3553 ")"
+      MEMBER_FIELD_METHOD@3500..3553
+        FIELD_NAME_FIXED@3500..3512
+          NAME@3500..3512
+            IDENT@3500..3512 "manifestToml"
+        PARAMS_DESC@3512..3519
+          L_PAREN@3512..3513 "("
+          PARAM@3513..3518
+            DESTRUCT_FULL@3513..3518
+              NAME@3513..3518
+                IDENT@3513..3518 "value"
+          R_PAREN@3518..3519 ")"
+        COLONCOLON@3519..3521 "::"
+        WHITESPACE@3521..3522 " "
+        EXPR_APPLY@3522..3553
+          EXPR_INDEX@3522..3540
+            EXPR_VAR@3522..3525
+              NAME@3522..3525
+                IDENT@3522..3525 "std"
+            DOT@3525..3526 "."
+            NAME@3526..3540
+              IDENT@3526..3540 "manifestTomlEx"
+          ARGS_DESC@3540..3553
+            L_PAREN@3540..3541 "("
+            ARG@3541..3546
+              EXPR_VAR@3541..3546
+                NAME@3541..3546
+                  IDENT@3541..3546 "value"
+            COMMA@3546..3547 ","
+            WHITESPACE@3547..3548 " "
+            ARG@3548..3552
+              EXPR_STRING@3548..3552
+                STRING_SINGLE@3548..3552 "'  '"
+            R_PAREN@3552..3553 ")"
       COMMA@3553..3554 ","
       WHITESPACE@3554..3558 "\n\n  "
-      MEMBER_FIELD@3558..3613
-        FIELD_METHOD@3558..3613
-          FIELD_NAME_FIXED@3558..3576
-            NAME@3558..3576
-              IDENT@3558..3576 "escapeStringPython"
-          PARAMS_DESC@3576..3581
-            L_PAREN@3576..3577 "("
-            PARAM@3577..3580
-              DESTRUCT_FULL@3577..3580
-                NAME@3577..3580
-                  IDENT@3577..3580 "str"
-            R_PAREN@3580..3581 ")"
-          COLONCOLON@3581..3583 "::"
-          WHITESPACE@3583..3588 "\n    "
-          EXPR_APPLY@3588..3613
-            EXPR_INDEX@3588..3608
-              EXPR_VAR@3588..3591
-                NAME@3588..3591
-                  IDENT@3588..3591 "std"
-              DOT@3591..3592 "."
-              NAME@3592..3608
-                IDENT@3592..3608 "escapeStringJson"
-            ARGS_DESC@3608..3613
-              L_PAREN@3608..3609 "("
-              ARG@3609..3612
-                EXPR_VAR@3609..3612
-                  NAME@3609..3612
-                    IDENT@3609..3612 "str"
-              R_PAREN@3612..3613 ")"
+      MEMBER_FIELD_METHOD@3558..3613
+        FIELD_NAME_FIXED@3558..3576
+          NAME@3558..3576
+            IDENT@3558..3576 "escapeStringPython"
+        PARAMS_DESC@3576..3581
+          L_PAREN@3576..3577 "("
+          PARAM@3577..3580
+            DESTRUCT_FULL@3577..3580
+              NAME@3577..3580
+                IDENT@3577..3580 "str"
+          R_PAREN@3580..3581 ")"
+        COLONCOLON@3581..3583 "::"
+        WHITESPACE@3583..3588 "\n    "
+        EXPR_APPLY@3588..3613
+          EXPR_INDEX@3588..3608
+            EXPR_VAR@3588..3591
+              NAME@3588..3591
+                IDENT@3588..3591 "std"
+            DOT@3591..3592 "."
+            NAME@3592..3608
+              IDENT@3592..3608 "escapeStringJson"
+          ARGS_DESC@3608..3613
+            L_PAREN@3608..3609 "("
+            ARG@3609..3612
+              EXPR_VAR@3609..3612
+                NAME@3609..3612
+                  IDENT@3609..3612 "str"
+            R_PAREN@3612..3613 ")"
       COMMA@3613..3614 ","
       WHITESPACE@3614..3618 "\n\n  "
-      MEMBER_FIELD@3618..3835
-        FIELD_METHOD@3618..3835
-          FIELD_NAME_FIXED@3618..3634
-            NAME@3618..3634
-              IDENT@3618..3634 "escapeStringBash"
-          PARAMS_DESC@3634..3640
-            L_PAREN@3634..3635 "("
-            PARAM@3635..3639
-              DESTRUCT_FULL@3635..3639
-                NAME@3635..3639
-                  IDENT@3635..3639 "str_"
-            R_PAREN@3639..3640 ")"
-          COLONCOLON@3640..3642 "::"
-          WHITESPACE@3642..3647 "\n    "
-          EXPR_LOCAL@3647..3835
-            LOCAL_KW@3647..3652 "local"
-            WHITESPACE@3652..3653 " "
-            BIND_DESTRUCT@3653..3677
-              DESTRUCT_FULL@3653..3656
-                NAME@3653..3656
-                  IDENT@3653..3656 "str"
-              WHITESPACE@3656..3657 " "
-              ASSIGN@3657..3658 "="
-              WHITESPACE@3658..3659 " "
-              EXPR_APPLY@3659..3677
-                EXPR_INDEX@3659..3671
-                  EXPR_VAR@3659..3662
-                    NAME@3659..3662
-                      IDENT@3659..3662 "std"
-                  DOT@3662..3663 "."
-                  NAME@3663..3671
-                    IDENT@3663..3671 "toString"
-                ARGS_DESC@3671..3677
-                  L_PAREN@3671..3672 "("
-                  ARG@3672..3676
-                    EXPR_VAR@3672..3676
-                      NAME@3672..3676
-                        IDENT@3672..3676 "str_"
-                  R_PAREN@3676..3677 ")"
-            SEMI@3677..3678 ";"
-            WHITESPACE@3678..3683 "\n    "
-            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 ")"
+      MEMBER_FIELD_METHOD@3618..3835
+        FIELD_NAME_FIXED@3618..3634
+          NAME@3618..3634
+            IDENT@3618..3634 "escapeStringBash"
+        PARAMS_DESC@3634..3640
+          L_PAREN@3634..3635 "("
+          PARAM@3635..3639
+            DESTRUCT_FULL@3635..3639
+              NAME@3635..3639
+                IDENT@3635..3639 "str_"
+          R_PAREN@3639..3640 ")"
+        COLONCOLON@3640..3642 "::"
+        WHITESPACE@3642..3647 "\n    "
+        EXPR_LOCAL@3647..3835
+          LOCAL_KW@3647..3652 "local"
+          WHITESPACE@3652..3653 " "
+          BIND_DESTRUCT@3653..3677
+            DESTRUCT_FULL@3653..3656
+              NAME@3653..3656
+                IDENT@3653..3656 "str"
+            WHITESPACE@3656..3657 " "
+            ASSIGN@3657..3658 "="
+            WHITESPACE@3658..3659 " "
+            EXPR_APPLY@3659..3677
+              EXPR_INDEX@3659..3671
+                EXPR_VAR@3659..3662
+                  NAME@3659..3662
+                    IDENT@3659..3662 "std"
+                DOT@3662..3663 "."
+                NAME@3663..3671
+                  IDENT@3663..3671 "toString"
+              ARGS_DESC@3671..3677
+                L_PAREN@3671..3672 "("
+                ARG@3672..3676
+                  EXPR_VAR@3672..3676
+                    NAME@3672..3676
+                      IDENT@3672..3676 "str_"
+                R_PAREN@3676..3677 ")"
+          SEMI@3677..3678 ";"
+          WHITESPACE@3678..3683 "\n    "
+          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 ")"
       COMMA@3835..3836 ","
       WHITESPACE@3836..3840 "\n\n  "
-      MEMBER_FIELD@3840..4054
-        FIELD_METHOD@3840..4054
-          FIELD_NAME_FIXED@3840..3859
-            NAME@3840..3859
-              IDENT@3840..3859 "escapeStringDollars"
-          PARAMS_DESC@3859..3865
-            L_PAREN@3859..3860 "("
-            PARAM@3860..3864
-              DESTRUCT_FULL@3860..3864
-                NAME@3860..3864
-                  IDENT@3860..3864 "str_"
-            R_PAREN@3864..3865 ")"
-          COLONCOLON@3865..3867 "::"
-          WHITESPACE@3867..3872 "\n    "
-          EXPR_LOCAL@3872..4054
-            LOCAL_KW@3872..3877 "local"
-            WHITESPACE@3877..3878 " "
-            BIND_DESTRUCT@3878..3902
-              DESTRUCT_FULL@3878..3881
-                NAME@3878..3881
-                  IDENT@3878..3881 "str"
-              WHITESPACE@3881..3882 " "
-              ASSIGN@3882..3883 "="
-              WHITESPACE@3883..3884 " "
-              EXPR_APPLY@3884..3902
-                EXPR_INDEX@3884..3896
-                  EXPR_VAR@3884..3887
-                    NAME@3884..3887
-                      IDENT@3884..3887 "std"
-                  DOT@3887..3888 "."
-                  NAME@3888..3896
-                    IDENT@3888..3896 "toString"
-                ARGS_DESC@3896..3902
-                  L_PAREN@3896..3897 "("
-                  ARG@3897..3901
-                    EXPR_VAR@3897..3901
-                      NAME@3897..3901
-                        IDENT@3897..3901 "str_"
-                  R_PAREN@3901..3902 ")"
-            SEMI@3902..3903 ";"
-            WHITESPACE@3903..3908 "\n    "
-            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 ")"
+      MEMBER_FIELD_METHOD@3840..4054
+        FIELD_NAME_FIXED@3840..3859
+          NAME@3840..3859
+            IDENT@3840..3859 "escapeStringDollars"
+        PARAMS_DESC@3859..3865
+          L_PAREN@3859..3860 "("
+          PARAM@3860..3864
+            DESTRUCT_FULL@3860..3864
+              NAME@3860..3864
+                IDENT@3860..3864 "str_"
+          R_PAREN@3864..3865 ")"
+        COLONCOLON@3865..3867 "::"
+        WHITESPACE@3867..3872 "\n    "
+        EXPR_LOCAL@3872..4054
+          LOCAL_KW@3872..3877 "local"
+          WHITESPACE@3877..3878 " "
+          BIND_DESTRUCT@3878..3902
+            DESTRUCT_FULL@3878..3881
+              NAME@3878..3881
+                IDENT@3878..3881 "str"
+            WHITESPACE@3881..3882 " "
+            ASSIGN@3882..3883 "="
+            WHITESPACE@3883..3884 " "
+            EXPR_APPLY@3884..3902
+              EXPR_INDEX@3884..3896
+                EXPR_VAR@3884..3887
+                  NAME@3884..3887
+                    IDENT@3884..3887 "std"
+                DOT@3887..3888 "."
+                NAME@3888..3896
+                  IDENT@3888..3896 "toString"
+              ARGS_DESC@3896..3902
+                L_PAREN@3896..3897 "("
+                ARG@3897..3901
+                  EXPR_VAR@3897..3901
+                    NAME@3897..3901
+                      IDENT@3897..3901 "str_"
+                R_PAREN@3901..3902 ")"
+          SEMI@3902..3903 ";"
+          WHITESPACE@3903..3908 "\n    "
+          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 ")"
       COMMA@4054..4055 ","
       WHITESPACE@4055..4059 "\n\n  "
       MEMBER_BIND_STMT@4059..4174
@@ -2628,4667 +2606,4636 @@
               OBJ_BODY_MEMBER_LIST@4079..4174
                 L_BRACE@4079..4080 "{"
                 WHITESPACE@4080..4085 "\n    "
-                MEMBER_FIELD@4085..4096
-                  FIELD_NORMAL@4085..4096
-                    FIELD_NAME_FIXED@4085..4088
-                      STRING_SINGLE@4085..4088 "'<'"
-                    COLON@4088..4089 ":"
-                    WHITESPACE@4089..4090 " "
-                    EXPR_STRING@4090..4096
-                      STRING_SINGLE@4090..4096 "'&lt;'"
+                MEMBER_FIELD_NORMAL@4085..4096
+                  FIELD_NAME_FIXED@4085..4088
+                    STRING_SINGLE@4085..4088 "'<'"
+                  COLON@4088..4089 ":"
+                  WHITESPACE@4089..4090 " "
+                  EXPR_STRING@4090..4096
+                    STRING_SINGLE@4090..4096 "'&lt;'"
                 COMMA@4096..4097 ","
                 WHITESPACE@4097..4102 "\n    "
-                MEMBER_FIELD@4102..4113
-                  FIELD_NORMAL@4102..4113
-                    FIELD_NAME_FIXED@4102..4105
-                      STRING_SINGLE@4102..4105 "'>'"
-                    COLON@4105..4106 ":"
-                    WHITESPACE@4106..4107 " "
-                    EXPR_STRING@4107..4113
-                      STRING_SINGLE@4107..4113 "'&gt;'"
+                MEMBER_FIELD_NORMAL@4102..4113
+                  FIELD_NAME_FIXED@4102..4105
+                    STRING_SINGLE@4102..4105 "'>'"
+                  COLON@4105..4106 ":"
+                  WHITESPACE@4106..4107 " "
+                  EXPR_STRING@4107..4113
+                    STRING_SINGLE@4107..4113 "'&gt;'"
                 COMMA@4113..4114 ","
                 WHITESPACE@4114..4119 "\n    "
-                MEMBER_FIELD@4119..4131
-                  FIELD_NORMAL@4119..4131
-                    FIELD_NAME_FIXED@4119..4122
-                      STRING_SINGLE@4119..4122 "'&'"
-                    COLON@4122..4123 ":"
-                    WHITESPACE@4123..4124 " "
-                    EXPR_STRING@4124..4131
-                      STRING_SINGLE@4124..4131 "'&amp;'"
+                MEMBER_FIELD_NORMAL@4119..4131
+                  FIELD_NAME_FIXED@4119..4122
+                    STRING_SINGLE@4119..4122 "'&'"
+                  COLON@4122..4123 ":"
+                  WHITESPACE@4123..4124 " "
+                  EXPR_STRING@4124..4131
+                    STRING_SINGLE@4124..4131 "'&amp;'"
                 COMMA@4131..4132 ","
                 WHITESPACE@4132..4137 "\n    "
-                MEMBER_FIELD@4137..4150
-                  FIELD_NORMAL@4137..4150
-                    FIELD_NAME_FIXED@4137..4140
-                      STRING_SINGLE@4137..4140 "'\"'"
-                    COLON@4140..4141 ":"
-                    WHITESPACE@4141..4142 " "
-                    EXPR_STRING@4142..4150
-                      STRING_SINGLE@4142..4150 "'&quot;'"
+                MEMBER_FIELD_NORMAL@4137..4150
+                  FIELD_NAME_FIXED@4137..4140
+                    STRING_SINGLE@4137..4140 "'\"'"
+                  COLON@4140..4141 ":"
+                  WHITESPACE@4141..4142 " "
+                  EXPR_STRING@4142..4150
+                    STRING_SINGLE@4142..4150 "'&quot;'"
                 COMMA@4150..4151 ","
                 WHITESPACE@4151..4156 "\n    "
-                MEMBER_FIELD@4156..4169
-                  FIELD_NORMAL@4156..4169
-                    FIELD_NAME_FIXED@4156..4159
-                      STRING_DOUBLE@4156..4159 "\"'\""
-                    COLON@4159..4160 ":"
-                    WHITESPACE@4160..4161 " "
-                    EXPR_STRING@4161..4169
-                      STRING_SINGLE@4161..4169 "'&apos;'"
+                MEMBER_FIELD_NORMAL@4156..4169
+                  FIELD_NAME_FIXED@4156..4159
+                    STRING_DOUBLE@4156..4159 "\"'\""
+                  COLON@4159..4160 ":"
+                  WHITESPACE@4160..4161 " "
+                  EXPR_STRING@4161..4169
+                    STRING_SINGLE@4161..4169 "'&apos;'"
                 COMMA@4169..4170 ","
                 WHITESPACE@4170..4173 "\n  "
                 R_BRACE@4173..4174 "}"
       COMMA@4174..4175 ","
       WHITESPACE@4175..4179 "\n\n  "
-      MEMBER_FIELD@4179..4318
-        FIELD_METHOD@4179..4318
-          FIELD_NAME_FIXED@4179..4194
-            NAME@4179..4194
-              IDENT@4179..4194 "escapeStringXML"
-          PARAMS_DESC@4194..4200
-            L_PAREN@4194..4195 "("
-            PARAM@4195..4199
-              DESTRUCT_FULL@4195..4199
-                NAME@4195..4199
-                  IDENT@4195..4199 "str_"
-            R_PAREN@4199..4200 ")"
-          COLONCOLON@4200..4202 "::"
-          WHITESPACE@4202..4207 "\n    "
-          EXPR_LOCAL@4207..4318
-            LOCAL_KW@4207..4212 "local"
-            WHITESPACE@4212..4213 " "
-            BIND_DESTRUCT@4213..4237
-              DESTRUCT_FULL@4213..4216
-                NAME@4213..4216
-                  IDENT@4213..4216 "str"
-              WHITESPACE@4216..4217 " "
-              ASSIGN@4217..4218 "="
-              WHITESPACE@4218..4219 " "
-              EXPR_APPLY@4219..4237
-                EXPR_INDEX@4219..4231
-                  EXPR_VAR@4219..4222
-                    NAME@4219..4222
-                      IDENT@4219..4222 "std"
-                  DOT@4222..4223 "."
-                  NAME@4223..4231
-                    IDENT@4223..4231 "toString"
-                ARGS_DESC@4231..4237
-                  L_PAREN@4231..4232 "("
-                  ARG@4232..4236
-                    EXPR_VAR@4232..4236
-                      NAME@4232..4236
-                        IDENT@4232..4236 "str_"
-                  R_PAREN@4236..4237 ")"
-            SEMI@4237..4238 ";"
-            WHITESPACE@4238..4243 "\n    "
-            EXPR_APPLY@4243..4318
-              EXPR_INDEX@4243..4251
-                EXPR_VAR@4243..4246
-                  NAME@4243..4246
-                    IDENT@4243..4246 "std"
-                DOT@4246..4247 "."
-                NAME@4247..4251
-                  IDENT@4247..4251 "join"
-              ARGS_DESC@4251..4318
-                L_PAREN@4251..4252 "("
-                ARG@4252..4254
-                  EXPR_STRING@4252..4254
-                    STRING_SINGLE@4252..4254 "''"
-                COMMA@4254..4255 ","
-                WHITESPACE@4255..4256 " "
-                ARG@4256..4317
-                  EXPR_ARRAY_COMP@4256..4317
-                    L_BRACK@4256..4257 "["
-                    EXPR_APPLY@4257..4285
-                      EXPR_INDEX@4257..4264
-                        EXPR_VAR@4257..4260
-                          NAME@4257..4260
-                            IDENT@4257..4260 "std"
-                        DOT@4260..4261 "."
-                        NAME@4261..4264
-                          IDENT@4261..4264 "get"
-                      ARGS_DESC@4264..4285
-                        L_PAREN@4264..4265 "("
-                        ARG@4265..4276
-                          EXPR_VAR@4265..4276
-                            NAME@4265..4276
-                              IDENT@4265..4276 "xml_escapes"
-                        COMMA@4276..4277 ","
-                        WHITESPACE@4277..4278 " "
-                        ARG@4278..4280
-                          EXPR_VAR@4278..4280
-                            NAME@4278..4280
-                              IDENT@4278..4280 "ch"
-                        COMMA@4280..4281 ","
-                        WHITESPACE@4281..4282 " "
-                        ARG@4282..4284
-                          EXPR_VAR@4282..4284
-                            NAME@4282..4284
-                              IDENT@4282..4284 "ch"
-                        R_PAREN@4284..4285 ")"
-                    WHITESPACE@4285..4286 " "
-                    FOR_SPEC@4286..4316
-                      FOR_KW@4286..4289 "for"
-                      WHITESPACE@4289..4290 " "
-                      NAME@4290..4292
-                        IDENT@4290..4292 "ch"
-                      WHITESPACE@4292..4293 " "
-                      IN_KW@4293..4295 "in"
-                      WHITESPACE@4295..4296 " "
-                      EXPR_APPLY@4296..4316
-                        EXPR_INDEX@4296..4311
-                          EXPR_VAR@4296..4299
-                            NAME@4296..4299
-                              IDENT@4296..4299 "std"
-                          DOT@4299..4300 "."
-                          NAME@4300..4311
-                            IDENT@4300..4311 "stringChars"
-                        ARGS_DESC@4311..4316
-                          L_PAREN@4311..4312 "("
-                          ARG@4312..4315
-                            EXPR_VAR@4312..4315
-                              NAME@4312..4315
-                                IDENT@4312..4315 "str"
-                          R_PAREN@4315..4316 ")"
-                    R_BRACK@4316..4317 "]"
-                R_PAREN@4317..4318 ")"
+      MEMBER_FIELD_METHOD@4179..4318
+        FIELD_NAME_FIXED@4179..4194
+          NAME@4179..4194
+            IDENT@4179..4194 "escapeStringXML"
+        PARAMS_DESC@4194..4200
+          L_PAREN@4194..4195 "("
+          PARAM@4195..4199
+            DESTRUCT_FULL@4195..4199
+              NAME@4195..4199
+                IDENT@4195..4199 "str_"
+          R_PAREN@4199..4200 ")"
+        COLONCOLON@4200..4202 "::"
+        WHITESPACE@4202..4207 "\n    "
+        EXPR_LOCAL@4207..4318
+          LOCAL_KW@4207..4212 "local"
+          WHITESPACE@4212..4213 " "
+          BIND_DESTRUCT@4213..4237
+            DESTRUCT_FULL@4213..4216
+              NAME@4213..4216
+                IDENT@4213..4216 "str"
+            WHITESPACE@4216..4217 " "
+            ASSIGN@4217..4218 "="
+            WHITESPACE@4218..4219 " "
+            EXPR_APPLY@4219..4237
+              EXPR_INDEX@4219..4231
+                EXPR_VAR@4219..4222
+                  NAME@4219..4222
+                    IDENT@4219..4222 "std"
+                DOT@4222..4223 "."
+                NAME@4223..4231
+                  IDENT@4223..4231 "toString"
+              ARGS_DESC@4231..4237
+                L_PAREN@4231..4232 "("
+                ARG@4232..4236
+                  EXPR_VAR@4232..4236
+                    NAME@4232..4236
+                      IDENT@4232..4236 "str_"
+                R_PAREN@4236..4237 ")"
+          SEMI@4237..4238 ";"
+          WHITESPACE@4238..4243 "\n    "
+          EXPR_APPLY@4243..4318
+            EXPR_INDEX@4243..4251
+              EXPR_VAR@4243..4246
+                NAME@4243..4246
+                  IDENT@4243..4246 "std"
+              DOT@4246..4247 "."
+              NAME@4247..4251
+                IDENT@4247..4251 "join"
+            ARGS_DESC@4251..4318
+              L_PAREN@4251..4252 "("
+              ARG@4252..4254
+                EXPR_STRING@4252..4254
+                  STRING_SINGLE@4252..4254 "''"
+              COMMA@4254..4255 ","
+              WHITESPACE@4255..4256 " "
+              ARG@4256..4317
+                EXPR_ARRAY_COMP@4256..4317
+                  L_BRACK@4256..4257 "["
+                  EXPR_APPLY@4257..4285
+                    EXPR_INDEX@4257..4264
+                      EXPR_VAR@4257..4260
+                        NAME@4257..4260
+                          IDENT@4257..4260 "std"
+                      DOT@4260..4261 "."
+                      NAME@4261..4264
+                        IDENT@4261..4264 "get"
+                    ARGS_DESC@4264..4285
+                      L_PAREN@4264..4265 "("
+                      ARG@4265..4276
+                        EXPR_VAR@4265..4276
+                          NAME@4265..4276
+                            IDENT@4265..4276 "xml_escapes"
+                      COMMA@4276..4277 ","
+                      WHITESPACE@4277..4278 " "
+                      ARG@4278..4280
+                        EXPR_VAR@4278..4280
+                          NAME@4278..4280
+                            IDENT@4278..4280 "ch"
+                      COMMA@4280..4281 ","
+                      WHITESPACE@4281..4282 " "
+                      ARG@4282..4284
+                        EXPR_VAR@4282..4284
+                          NAME@4282..4284
+                            IDENT@4282..4284 "ch"
+                      R_PAREN@4284..4285 ")"
+                  WHITESPACE@4285..4286 " "
+                  FOR_SPEC@4286..4316
+                    FOR_KW@4286..4289 "for"
+                    WHITESPACE@4289..4290 " "
+                    NAME@4290..4292
+                      IDENT@4290..4292 "ch"
+                    WHITESPACE@4292..4293 " "
+                    IN_KW@4293..4295 "in"
+                    WHITESPACE@4295..4296 " "
+                    EXPR_APPLY@4296..4316
+                      EXPR_INDEX@4296..4311
+                        EXPR_VAR@4296..4299
+                          NAME@4296..4299
+                            IDENT@4296..4299 "std"
+                        DOT@4299..4300 "."
+                        NAME@4300..4311
+                          IDENT@4300..4311 "stringChars"
+                      ARGS_DESC@4311..4316
+                        L_PAREN@4311..4312 "("
+                        ARG@4312..4315
+                          EXPR_VAR@4312..4315
+                            NAME@4312..4315
+                              IDENT@4312..4315 "str"
+                        R_PAREN@4315..4316 ")"
+                  R_BRACK@4316..4317 "]"
+              R_PAREN@4317..4318 ")"
       COMMA@4318..4319 ","
       WHITESPACE@4319..4323 "\n\n  "
-      MEMBER_FIELD@4323..4389
-        FIELD_METHOD@4323..4389
-          FIELD_NAME_FIXED@4323..4335
-            NAME@4323..4335
-              IDENT@4323..4335 "manifestJson"
-          PARAMS_DESC@4335..4342
-            L_PAREN@4335..4336 "("
-            PARAM@4336..4341
-              DESTRUCT_FULL@4336..4341
-                NAME@4336..4341
-                  IDENT@4336..4341 "value"
-            R_PAREN@4341..4342 ")"
-          COLONCOLON@4342..4344 "::"
-          WHITESPACE@4344..4345 " "
-          EXPR_APPLY@4345..4389
-            EXPR_INDEX@4345..4363
-              EXPR_VAR@4345..4348
-                NAME@4345..4348
-                  IDENT@4345..4348 "std"
-              DOT@4348..4349 "."
-              NAME@4349..4363
-                IDENT@4349..4363 "manifestJsonEx"
-            ARGS_DESC@4363..4389
-              L_PAREN@4363..4364 "("
-              ARG@4364..4369
-                EXPR_VAR@4364..4369
-                  NAME@4364..4369
-                    IDENT@4364..4369 "value"
-              COMMA@4369..4370 ","
-              WHITESPACE@4370..4371 " "
-              ARG@4371..4377
-                EXPR_STRING@4371..4377
-                  STRING_SINGLE@4371..4377 "'    '"
-              R_PAREN@4377..4378 ")"
-              WHITESPACE@4378..4379 " "
-              TAILSTRICT_KW@4379..4389 "tailstrict"
+      MEMBER_FIELD_METHOD@4323..4389
+        FIELD_NAME_FIXED@4323..4335
+          NAME@4323..4335
+            IDENT@4323..4335 "manifestJson"
+        PARAMS_DESC@4335..4342
+          L_PAREN@4335..4336 "("
+          PARAM@4336..4341
+            DESTRUCT_FULL@4336..4341
+              NAME@4336..4341
+                IDENT@4336..4341 "value"
+          R_PAREN@4341..4342 ")"
+        COLONCOLON@4342..4344 "::"
+        WHITESPACE@4344..4345 " "
+        EXPR_APPLY@4345..4389
+          EXPR_INDEX@4345..4363
+            EXPR_VAR@4345..4348
+              NAME@4345..4348
+                IDENT@4345..4348 "std"
+            DOT@4348..4349 "."
+            NAME@4349..4363
+              IDENT@4349..4363 "manifestJsonEx"
+          ARGS_DESC@4363..4389
+            L_PAREN@4363..4364 "("
+            ARG@4364..4369
+              EXPR_VAR@4364..4369
+                NAME@4364..4369
+                  IDENT@4364..4369 "value"
+            COMMA@4369..4370 ","
+            WHITESPACE@4370..4371 " "
+            ARG@4371..4377
+              EXPR_STRING@4371..4377
+                STRING_SINGLE@4371..4377 "'    '"
+            R_PAREN@4377..4378 ")"
+            WHITESPACE@4378..4379 " "
+            TAILSTRICT_KW@4379..4389 "tailstrict"
       COMMA@4389..4390 ","
       WHITESPACE@4390..4394 "\n\n  "
-      MEMBER_FIELD@4394..4462
-        FIELD_METHOD@4394..4462
-          FIELD_NAME_FIXED@4394..4414
-            NAME@4394..4414
-              IDENT@4394..4414 "manifestJsonMinified"
-          PARAMS_DESC@4414..4421
-            L_PAREN@4414..4415 "("
-            PARAM@4415..4420
-              DESTRUCT_FULL@4415..4420
-                NAME@4415..4420
-                  IDENT@4415..4420 "value"
-            R_PAREN@4420..4421 ")"
-          COLONCOLON@4421..4423 "::"
-          WHITESPACE@4423..4424 " "
-          EXPR_APPLY@4424..4462
-            EXPR_INDEX@4424..4442
-              EXPR_VAR@4424..4427
-                NAME@4424..4427
-                  IDENT@4424..4427 "std"
-              DOT@4427..4428 "."
-              NAME@4428..4442
-                IDENT@4428..4442 "manifestJsonEx"
-            ARGS_DESC@4442..4462
-              L_PAREN@4442..4443 "("
-              ARG@4443..4448
-                EXPR_VAR@4443..4448
-                  NAME@4443..4448
-                    IDENT@4443..4448 "value"
-              COMMA@4448..4449 ","
-              WHITESPACE@4449..4450 " "
-              ARG@4450..4452
-                EXPR_STRING@4450..4452
-                  STRING_SINGLE@4450..4452 "''"
-              COMMA@4452..4453 ","
-              WHITESPACE@4453..4454 " "
-              ARG@4454..4456
-                EXPR_STRING@4454..4456
-                  STRING_SINGLE@4454..4456 "''"
-              COMMA@4456..4457 ","
-              WHITESPACE@4457..4458 " "
-              ARG@4458..4461
-                EXPR_STRING@4458..4461
-                  STRING_SINGLE@4458..4461 "':'"
-              R_PAREN@4461..4462 ")"
+      MEMBER_FIELD_METHOD@4394..4462
+        FIELD_NAME_FIXED@4394..4414
+          NAME@4394..4414
+            IDENT@4394..4414 "manifestJsonMinified"
+        PARAMS_DESC@4414..4421
+          L_PAREN@4414..4415 "("
+          PARAM@4415..4420
+            DESTRUCT_FULL@4415..4420
+              NAME@4415..4420
+                IDENT@4415..4420 "value"
+          R_PAREN@4420..4421 ")"
+        COLONCOLON@4421..4423 "::"
+        WHITESPACE@4423..4424 " "
+        EXPR_APPLY@4424..4462
+          EXPR_INDEX@4424..4442
+            EXPR_VAR@4424..4427
+              NAME@4424..4427
+                IDENT@4424..4427 "std"
+            DOT@4427..4428 "."
+            NAME@4428..4442
+              IDENT@4428..4442 "manifestJsonEx"
+          ARGS_DESC@4442..4462
+            L_PAREN@4442..4443 "("
+            ARG@4443..4448
+              EXPR_VAR@4443..4448
+                NAME@4443..4448
+                  IDENT@4443..4448 "value"
+            COMMA@4448..4449 ","
+            WHITESPACE@4449..4450 " "
+            ARG@4450..4452
+              EXPR_STRING@4450..4452
+                STRING_SINGLE@4450..4452 "''"
+            COMMA@4452..4453 ","
+            WHITESPACE@4453..4454 " "
+            ARG@4454..4456
+              EXPR_STRING@4454..4456
+                STRING_SINGLE@4454..4456 "''"
+            COMMA@4456..4457 ","
+            WHITESPACE@4457..4458 " "
+            ARG@4458..4461
+              EXPR_STRING@4458..4461
+                STRING_SINGLE@4458..4461 "':'"
+            R_PAREN@4461..4462 ")"
       COMMA@4462..4463 ","
       WHITESPACE@4463..4467 "\n\n  "
-      MEMBER_FIELD@4467..4852
-        FIELD_METHOD@4467..4852
-          FIELD_NAME_FIXED@4467..4485
-            NAME@4467..4485
-              IDENT@4467..4485 "manifestYamlStream"
-          PARAMS_DESC@4485..4560
-            L_PAREN@4485..4486 "("
-            PARAM@4486..4491
-              DESTRUCT_FULL@4486..4491
-                NAME@4486..4491
-                  IDENT@4486..4491 "value"
-            COMMA@4491..4492 ","
-            WHITESPACE@4492..4493 " "
-            PARAM@4493..4521
-              DESTRUCT_FULL@4493..4515
-                NAME@4493..4515
-                  IDENT@4493..4515 "indent_array_in_object"
-              ASSIGN@4515..4516 "="
-              EXPR_LITERAL@4516..4521
-                FALSE_KW@4516..4521 "false"
-            COMMA@4521..4522 ","
-            WHITESPACE@4522..4523 " "
-            PARAM@4523..4542
-              DESTRUCT_FULL@4523..4537
-                NAME@4523..4537
-                  IDENT@4523..4537 "c_document_end"
-              ASSIGN@4537..4538 "="
-              EXPR_LITERAL@4538..4542
-                TRUE_KW@4538..4542 "true"
-            COMMA@4542..4543 ","
-            WHITESPACE@4543..4544 " "
-            PARAM@4544..4559
-              DESTRUCT_FULL@4544..4554
-                NAME@4544..4554
-                  IDENT@4544..4554 "quote_keys"
-              ASSIGN@4554..4555 "="
-              EXPR_LITERAL@4555..4559
-                TRUE_KW@4555..4559 "true"
-            R_PAREN@4559..4560 ")"
-          COLONCOLON@4560..4562 "::"
-          WHITESPACE@4562..4567 "\n    "
-          EXPR_IF_THEN_ELSE@4567..4852
-            IF_KW@4567..4569 "if"
-            WHITESPACE@4569..4570 " "
-            EXPR_UNARY@4570..4589
-              NOT@4570..4571 "!"
-              EXPR_APPLY@4571..4589
-                EXPR_INDEX@4571..4582
-                  EXPR_VAR@4571..4574
-                    NAME@4571..4574
-                      IDENT@4571..4574 "std"
-                  DOT@4574..4575 "."
-                  NAME@4575..4582
-                    IDENT@4575..4582 "isArray"
-                ARGS_DESC@4582..4589
-                  L_PAREN@4582..4583 "("
-                  ARG@4583..4588
-                    EXPR_VAR@4583..4588
-                      NAME@4583..4588
-                        IDENT@4583..4588 "value"
-                  R_PAREN@4588..4589 ")"
-            WHITESPACE@4589..4590 " "
-            THEN_KW@4590..4594 "then"
-            WHITESPACE@4594..4601 "\n      "
-            TRUE_EXPR@4601..4669
-              EXPR_ERROR@4601..4669
-                ERROR_KW@4601..4606 "error"
-                WHITESPACE@4606..4607 " "
-                EXPR_BINARY@4607..4669
-                  LHS_EXPR@4607..4651
-                    EXPR_STRING@4607..4651
-                      STRING_SINGLE@4607..4651 "'manifestYamlStream o ..."
-                  WHITESPACE@4651..4652 " "
-                  PLUS@4652..4653 "+"
-                  WHITESPACE@4653..4654 " "
-                  EXPR_APPLY@4654..4669
-                    EXPR_INDEX@4654..4662
-                      EXPR_VAR@4654..4657
-                        NAME@4654..4657
-                          IDENT@4654..4657 "std"
-                      DOT@4657..4658 "."
-                      NAME@4658..4662
-                        IDENT@4658..4662 "type"
-                    ARGS_DESC@4662..4669
-                      L_PAREN@4662..4663 "("
-                      ARG@4663..4668
-                        EXPR_VAR@4663..4668
-                          NAME@4663..4668
-                            IDENT@4663..4668 "value"
-                      R_PAREN@4668..4669 ")"
-            WHITESPACE@4669..4674 "\n    "
-            ELSE_KW@4674..4678 "else"
-            WHITESPACE@4678..4685 "\n      "
-            FALSE_EXPR@4685..4852
-              EXPR_BINARY@4685..4852
-                LHS_EXPR@4685..4807
-                  EXPR_BINARY@4685..4807
-                    LHS_EXPR@4685..4692
-                      EXPR_STRING@4685..4692
-                        STRING_SINGLE@4685..4692 "'---\\n'"
-                    WHITESPACE@4692..4693 " "
-                    PLUS@4693..4694 "+"
-                    WHITESPACE@4694..4695 " "
-                    EXPR_APPLY@4695..4807
-                      EXPR_INDEX@4695..4703
-                        EXPR_VAR@4695..4698
-                          NAME@4695..4698
-                            IDENT@4695..4698 "std"
-                        DOT@4698..4699 "."
-                        NAME@4699..4703
-                          IDENT@4699..4703 "join"
-                      ARGS_DESC@4703..4807
-                        L_PAREN@4703..4704 "("
-                        WHITESPACE@4704..4713 "\n        "
-                        ARG@4713..4722
-                          EXPR_STRING@4713..4722
-                            STRING_SINGLE@4713..4722 "'\\n---\\n'"
-                        COMMA@4722..4723 ","
-                        WHITESPACE@4723..4724 " "
-                        ARG@4724..4799
-                          EXPR_ARRAY_COMP@4724..4799
-                            L_BRACK@4724..4725 "["
-                            EXPR_APPLY@4725..4783
-                              EXPR_INDEX@4725..4744
-                                EXPR_VAR@4725..4728
-                                  NAME@4725..4728
-                                    IDENT@4725..4728 "std"
-                                DOT@4728..4729 "."
-                                NAME@4729..4744
-                                  IDENT@4729..4744 "manifestYamlDoc"
-                              ARGS_DESC@4744..4783
-                                L_PAREN@4744..4745 "("
-                                ARG@4745..4746
-                                  EXPR_VAR@4745..4746
-                                    NAME@4745..4746
-                                      IDENT@4745..4746 "e"
-                                COMMA@4746..4747 ","
-                                WHITESPACE@4747..4748 " "
-                                ARG@4748..4770
-                                  EXPR_VAR@4748..4770
-                                    NAME@4748..4770
-                                      IDENT@4748..4770 "indent_array_in_object"
-                                COMMA@4770..4771 ","
-                                WHITESPACE@4771..4772 " "
-                                ARG@4772..4782
-                                  EXPR_VAR@4772..4782
-                                    NAME@4772..4782
-                                      IDENT@4772..4782 "quote_keys"
-                                R_PAREN@4782..4783 ")"
-                            WHITESPACE@4783..4784 " "
-                            FOR_SPEC@4784..4798
-                              FOR_KW@4784..4787 "for"
-                              WHITESPACE@4787..4788 " "
-                              NAME@4788..4789
-                                IDENT@4788..4789 "e"
-                              WHITESPACE@4789..4790 " "
-                              IN_KW@4790..4792 "in"
-                              WHITESPACE@4792..4793 " "
-                              EXPR_VAR@4793..4798
-                                NAME@4793..4798
-                                  IDENT@4793..4798 "value"
-                            R_BRACK@4798..4799 "]"
-                        WHITESPACE@4799..4806 "\n      "
-                        R_PAREN@4806..4807 ")"
-                WHITESPACE@4807..4808 " "
-                PLUS@4808..4809 "+"
-                WHITESPACE@4809..4810 " "
-                EXPR_IF_THEN_ELSE@4810..4852
-                  IF_KW@4810..4812 "if"
-                  WHITESPACE@4812..4813 " "
-                  EXPR_VAR@4813..4827
-                    NAME@4813..4827
-                      IDENT@4813..4827 "c_document_end"
-                  WHITESPACE@4827..4828 " "
-                  THEN_KW@4828..4832 "then"
-                  WHITESPACE@4832..4833 " "
-                  TRUE_EXPR@4833..4842
-                    EXPR_STRING@4833..4842
-                      STRING_SINGLE@4833..4842 "'\\n...\\n'"
-                  WHITESPACE@4842..4843 " "
-                  ELSE_KW@4843..4847 "else"
-                  WHITESPACE@4847..4848 " "
-                  FALSE_EXPR@4848..4852
-                    EXPR_STRING@4848..4852
-                      STRING_SINGLE@4848..4852 "'\\n'"
+      MEMBER_FIELD_METHOD@4467..4852
+        FIELD_NAME_FIXED@4467..4485
+          NAME@4467..4485
+            IDENT@4467..4485 "manifestYamlStream"
+        PARAMS_DESC@4485..4560
+          L_PAREN@4485..4486 "("
+          PARAM@4486..4491
+            DESTRUCT_FULL@4486..4491
+              NAME@4486..4491
+                IDENT@4486..4491 "value"
+          COMMA@4491..4492 ","
+          WHITESPACE@4492..4493 " "
+          PARAM@4493..4521
+            DESTRUCT_FULL@4493..4515
+              NAME@4493..4515
+                IDENT@4493..4515 "indent_array_in_object"
+            ASSIGN@4515..4516 "="
+            EXPR_LITERAL@4516..4521
+              FALSE_KW@4516..4521 "false"
+          COMMA@4521..4522 ","
+          WHITESPACE@4522..4523 " "
+          PARAM@4523..4542
+            DESTRUCT_FULL@4523..4537
+              NAME@4523..4537
+                IDENT@4523..4537 "c_document_end"
+            ASSIGN@4537..4538 "="
+            EXPR_LITERAL@4538..4542
+              TRUE_KW@4538..4542 "true"
+          COMMA@4542..4543 ","
+          WHITESPACE@4543..4544 " "
+          PARAM@4544..4559
+            DESTRUCT_FULL@4544..4554
+              NAME@4544..4554
+                IDENT@4544..4554 "quote_keys"
+            ASSIGN@4554..4555 "="
+            EXPR_LITERAL@4555..4559
+              TRUE_KW@4555..4559 "true"
+          R_PAREN@4559..4560 ")"
+        COLONCOLON@4560..4562 "::"
+        WHITESPACE@4562..4567 "\n    "
+        EXPR_IF_THEN_ELSE@4567..4852
+          IF_KW@4567..4569 "if"
+          WHITESPACE@4569..4570 " "
+          EXPR_UNARY@4570..4589
+            NOT@4570..4571 "!"
+            EXPR_APPLY@4571..4589
+              EXPR_INDEX@4571..4582
+                EXPR_VAR@4571..4574
+                  NAME@4571..4574
+                    IDENT@4571..4574 "std"
+                DOT@4574..4575 "."
+                NAME@4575..4582
+                  IDENT@4575..4582 "isArray"
+              ARGS_DESC@4582..4589
+                L_PAREN@4582..4583 "("
+                ARG@4583..4588
+                  EXPR_VAR@4583..4588
+                    NAME@4583..4588
+                      IDENT@4583..4588 "value"
+                R_PAREN@4588..4589 ")"
+          WHITESPACE@4589..4590 " "
+          THEN_KW@4590..4594 "then"
+          WHITESPACE@4594..4601 "\n      "
+          TRUE_EXPR@4601..4669
+            EXPR_ERROR@4601..4669
+              ERROR_KW@4601..4606 "error"
+              WHITESPACE@4606..4607 " "
+              EXPR_BINARY@4607..4669
+                LHS_EXPR@4607..4651
+                  EXPR_STRING@4607..4651
+                    STRING_SINGLE@4607..4651 "'manifestYamlStream o ..."
+                WHITESPACE@4651..4652 " "
+                PLUS@4652..4653 "+"
+                WHITESPACE@4653..4654 " "
+                EXPR_APPLY@4654..4669
+                  EXPR_INDEX@4654..4662
+                    EXPR_VAR@4654..4657
+                      NAME@4654..4657
+                        IDENT@4654..4657 "std"
+                    DOT@4657..4658 "."
+                    NAME@4658..4662
+                      IDENT@4658..4662 "type"
+                  ARGS_DESC@4662..4669
+                    L_PAREN@4662..4663 "("
+                    ARG@4663..4668
+                      EXPR_VAR@4663..4668
+                        NAME@4663..4668
+                          IDENT@4663..4668 "value"
+                    R_PAREN@4668..4669 ")"
+          WHITESPACE@4669..4674 "\n    "
+          ELSE_KW@4674..4678 "else"
+          WHITESPACE@4678..4685 "\n      "
+          FALSE_EXPR@4685..4852
+            EXPR_BINARY@4685..4852
+              LHS_EXPR@4685..4807
+                EXPR_BINARY@4685..4807
+                  LHS_EXPR@4685..4692
+                    EXPR_STRING@4685..4692
+                      STRING_SINGLE@4685..4692 "'---\\n'"
+                  WHITESPACE@4692..4693 " "
+                  PLUS@4693..4694 "+"
+                  WHITESPACE@4694..4695 " "
+                  EXPR_APPLY@4695..4807
+                    EXPR_INDEX@4695..4703
+                      EXPR_VAR@4695..4698
+                        NAME@4695..4698
+                          IDENT@4695..4698 "std"
+                      DOT@4698..4699 "."
+                      NAME@4699..4703
+                        IDENT@4699..4703 "join"
+                    ARGS_DESC@4703..4807
+                      L_PAREN@4703..4704 "("
+                      WHITESPACE@4704..4713 "\n        "
+                      ARG@4713..4722
+                        EXPR_STRING@4713..4722
+                          STRING_SINGLE@4713..4722 "'\\n---\\n'"
+                      COMMA@4722..4723 ","
+                      WHITESPACE@4723..4724 " "
+                      ARG@4724..4799
+                        EXPR_ARRAY_COMP@4724..4799
+                          L_BRACK@4724..4725 "["
+                          EXPR_APPLY@4725..4783
+                            EXPR_INDEX@4725..4744
+                              EXPR_VAR@4725..4728
+                                NAME@4725..4728
+                                  IDENT@4725..4728 "std"
+                              DOT@4728..4729 "."
+                              NAME@4729..4744
+                                IDENT@4729..4744 "manifestYamlDoc"
+                            ARGS_DESC@4744..4783
+                              L_PAREN@4744..4745 "("
+                              ARG@4745..4746
+                                EXPR_VAR@4745..4746
+                                  NAME@4745..4746
+                                    IDENT@4745..4746 "e"
+                              COMMA@4746..4747 ","
+                              WHITESPACE@4747..4748 " "
+                              ARG@4748..4770
+                                EXPR_VAR@4748..4770
+                                  NAME@4748..4770
+                                    IDENT@4748..4770 "indent_array_in_object"
+                              COMMA@4770..4771 ","
+                              WHITESPACE@4771..4772 " "
+                              ARG@4772..4782
+                                EXPR_VAR@4772..4782
+                                  NAME@4772..4782
+                                    IDENT@4772..4782 "quote_keys"
+                              R_PAREN@4782..4783 ")"
+                          WHITESPACE@4783..4784 " "
+                          FOR_SPEC@4784..4798
+                            FOR_KW@4784..4787 "for"
+                            WHITESPACE@4787..4788 " "
+                            NAME@4788..4789
+                              IDENT@4788..4789 "e"
+                            WHITESPACE@4789..4790 " "
+                            IN_KW@4790..4792 "in"
+                            WHITESPACE@4792..4793 " "
+                            EXPR_VAR@4793..4798
+                              NAME@4793..4798
+                                IDENT@4793..4798 "value"
+                          R_BRACK@4798..4799 "]"
+                      WHITESPACE@4799..4806 "\n      "
+                      R_PAREN@4806..4807 ")"
+              WHITESPACE@4807..4808 " "
+              PLUS@4808..4809 "+"
+              WHITESPACE@4809..4810 " "
+              EXPR_IF_THEN_ELSE@4810..4852
+                IF_KW@4810..4812 "if"
+                WHITESPACE@4812..4813 " "
+                EXPR_VAR@4813..4827
+                  NAME@4813..4827
+                    IDENT@4813..4827 "c_document_end"
+                WHITESPACE@4827..4828 " "
+                THEN_KW@4828..4832 "then"
+                WHITESPACE@4832..4833 " "
+                TRUE_EXPR@4833..4842
+                  EXPR_STRING@4833..4842
+                    STRING_SINGLE@4833..4842 "'\\n...\\n'"
+                WHITESPACE@4842..4843 " "
+                ELSE_KW@4843..4847 "else"
+                WHITESPACE@4847..4848 " "
+                FALSE_EXPR@4848..4852
+                  EXPR_STRING@4848..4852
+                    STRING_SINGLE@4848..4852 "'\\n'"
       COMMA@4852..4853 ","
       WHITESPACE@4853..4857 "\n\n  "
-      MEMBER_FIELD@4857..5513
-        FIELD_METHOD@4857..5513
-          FIELD_NAME_FIXED@4857..4871
-            NAME@4857..4871
-              IDENT@4857..4871 "manifestPython"
-          PARAMS_DESC@4871..4874
-            L_PAREN@4871..4872 "("
-            PARAM@4872..4873
-              DESTRUCT_FULL@4872..4873
-                NAME@4872..4873
-                  IDENT@4872..4873 "v"
-            R_PAREN@4873..4874 ")"
-          COLONCOLON@4874..4876 "::"
-          WHITESPACE@4876..4881 "\n    "
-          EXPR_IF_THEN_ELSE@4881..5513
-            IF_KW@4881..4883 "if"
-            WHITESPACE@4883..4884 " "
-            EXPR_APPLY@4884..4899
-              EXPR_INDEX@4884..4896
-                EXPR_VAR@4884..4887
-                  NAME@4884..4887
-                    IDENT@4884..4887 "std"
-                DOT@4887..4888 "."
-                NAME@4888..4896
-                  IDENT@4888..4896 "isObject"
-              ARGS_DESC@4896..4899
-                L_PAREN@4896..4897 "("
-                ARG@4897..4898
-                  EXPR_VAR@4897..4898
-                    NAME@4897..4898
-                      IDENT@4897..4898 "v"
-                R_PAREN@4898..4899 ")"
-            WHITESPACE@4899..4900 " "
-            THEN_KW@4900..4904 "then"
-            WHITESPACE@4904..4911 "\n      "
-            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 "]"
-            WHITESPACE@5086..5091 "\n    "
-            ELSE_KW@5091..5095 "else"
-            WHITESPACE@5095..5096 " "
-            FALSE_EXPR@5096..5513
-              EXPR_IF_THEN_ELSE@5096..5513
-                IF_KW@5096..5098 "if"
-                WHITESPACE@5098..5099 " "
-                EXPR_APPLY@5099..5113
-                  EXPR_INDEX@5099..5110
-                    EXPR_VAR@5099..5102
-                      NAME@5099..5102
-                        IDENT@5099..5102 "std"
-                    DOT@5102..5103 "."
-                    NAME@5103..5110
-                      IDENT@5103..5110 "isArray"
-                  ARGS_DESC@5110..5113
-                    L_PAREN@5110..5111 "("
-                    ARG@5111..5112
-                      EXPR_VAR@5111..5112
-                        NAME@5111..5112
-                          IDENT@5111..5112 "v"
-                    R_PAREN@5112..5113 ")"
-                WHITESPACE@5113..5114 " "
-                THEN_KW@5114..5118 "then"
-                WHITESPACE@5118..5125 "\n      "
-                TRUE_EXPR@5125..5188
-                  EXPR_BINARY@5125..5188
-                    LHS_EXPR@5125..5131
-                      EXPR_STRING@5125..5131
-                        STRING_SINGLE@5125..5131 "'[%s]'"
-                    WHITESPACE@5131..5132 " "
-                    MODULO@5132..5133 "%"
-                    WHITESPACE@5133..5134 " "
-                    EXPR_ARRAY@5134..5188
-                      L_BRACK@5134..5135 "["
-                      EXPR_APPLY@5135..5187
-                        EXPR_INDEX@5135..5143
-                          EXPR_VAR@5135..5138
-                            NAME@5135..5138
-                              IDENT@5135..5138 "std"
-                          DOT@5138..5139 "."
-                          NAME@5139..5143
-                            IDENT@5139..5143 "join"
-                        ARGS_DESC@5143..5187
-                          L_PAREN@5143..5144 "("
-                          ARG@5144..5148
-                            EXPR_STRING@5144..5148
-                              STRING_SINGLE@5144..5148 "', '"
-                          COMMA@5148..5149 ","
-                          WHITESPACE@5149..5150 " "
-                          ARG@5150..5186
-                            EXPR_ARRAY_COMP@5150..5186
-                              L_BRACK@5150..5151 "["
-                              EXPR_APPLY@5151..5173
-                                EXPR_INDEX@5151..5169
-                                  EXPR_VAR@5151..5154
-                                    NAME@5151..5154
-                                      IDENT@5151..5154 "std"
-                                  DOT@5154..5155 "."
-                                  NAME@5155..5169
-                                    IDENT@5155..5169 "manifestPython"
-                                ARGS_DESC@5169..5173
-                                  L_PAREN@5169..5170 "("
-                                  ARG@5170..5172
-                                    EXPR_VAR@5170..5172
-                                      NAME@5170..5172
-                                        IDENT@5170..5172 "v2"
-                                  R_PAREN@5172..5173 ")"
-                              WHITESPACE@5173..5174 " "
-                              FOR_SPEC@5174..5185
-                                FOR_KW@5174..5177 "for"
-                                WHITESPACE@5177..5178 " "
-                                NAME@5178..5180
-                                  IDENT@5178..5180 "v2"
-                                WHITESPACE@5180..5181 " "
-                                IN_KW@5181..5183 "in"
-                                WHITESPACE@5183..5184 " "
-                                EXPR_VAR@5184..5185
-                                  NAME@5184..5185
-                                    IDENT@5184..5185 "v"
-                              R_BRACK@5185..5186 "]"
-                          R_PAREN@5186..5187 ")"
-                      R_BRACK@5187..5188 "]"
-                WHITESPACE@5188..5193 "\n    "
-                ELSE_KW@5193..5197 "else"
-                WHITESPACE@5197..5198 " "
-                FALSE_EXPR@5198..5513
-                  EXPR_IF_THEN_ELSE@5198..5513
-                    IF_KW@5198..5200 "if"
-                    WHITESPACE@5200..5201 " "
-                    EXPR_APPLY@5201..5216
-                      EXPR_INDEX@5201..5213
-                        EXPR_VAR@5201..5204
-                          NAME@5201..5204
-                            IDENT@5201..5204 "std"
-                        DOT@5204..5205 "."
-                        NAME@5205..5213
-                          IDENT@5205..5213 "isString"
-                      ARGS_DESC@5213..5216
-                        L_PAREN@5213..5214 "("
-                        ARG@5214..5215
-                          EXPR_VAR@5214..5215
-                            NAME@5214..5215
-                              IDENT@5214..5215 "v"
-                        R_PAREN@5215..5216 ")"
-                    WHITESPACE@5216..5217 " "
-                    THEN_KW@5217..5221 "then"
-                    WHITESPACE@5221..5228 "\n      "
-                    TRUE_EXPR@5228..5262
-                      EXPR_BINARY@5228..5262
-                        LHS_EXPR@5228..5232
-                          EXPR_STRING@5228..5232
-                            STRING_SINGLE@5228..5232 "'%s'"
-                        WHITESPACE@5232..5233 " "
-                        MODULO@5233..5234 "%"
-                        WHITESPACE@5234..5235 " "
-                        EXPR_ARRAY@5235..5262
-                          L_BRACK@5235..5236 "["
-                          EXPR_APPLY@5236..5261
-                            EXPR_INDEX@5236..5258
-                              EXPR_VAR@5236..5239
-                                NAME@5236..5239
-                                  IDENT@5236..5239 "std"
-                              DOT@5239..5240 "."
-                              NAME@5240..5258
-                                IDENT@5240..5258 "escapeStringPython"
-                            ARGS_DESC@5258..5261
-                              L_PAREN@5258..5259 "("
-                              ARG@5259..5260
-                                EXPR_VAR@5259..5260
-                                  NAME@5259..5260
-                                    IDENT@5259..5260 "v"
-                              R_PAREN@5260..5261 ")"
-                          R_BRACK@5261..5262 "]"
-                    WHITESPACE@5262..5267 "\n    "
-                    ELSE_KW@5267..5271 "else"
-                    WHITESPACE@5271..5272 " "
-                    FALSE_EXPR@5272..5513
-                      EXPR_IF_THEN_ELSE@5272..5513
-                        IF_KW@5272..5274 "if"
-                        WHITESPACE@5274..5275 " "
-                        EXPR_APPLY@5275..5292
-                          EXPR_INDEX@5275..5289
-                            EXPR_VAR@5275..5278
-                              NAME@5275..5278
-                                IDENT@5275..5278 "std"
-                            DOT@5278..5279 "."
-                            NAME@5279..5289
-                              IDENT@5279..5289 "isFunction"
-                          ARGS_DESC@5289..5292
-                            L_PAREN@5289..5290 "("
-                            ARG@5290..5291
-                              EXPR_VAR@5290..5291
-                                NAME@5290..5291
-                                  IDENT@5290..5291 "v"
-                            R_PAREN@5291..5292 ")"
-                        WHITESPACE@5292..5293 " "
-                        THEN_KW@5293..5297 "then"
-                        WHITESPACE@5297..5304 "\n      "
-                        TRUE_EXPR@5304..5336
-                          EXPR_ERROR@5304..5336
-                            ERROR_KW@5304..5309 "error"
-                            WHITESPACE@5309..5310 " "
-                            EXPR_STRING@5310..5336
-                              STRING_SINGLE@5310..5336 "'cannot manifest func ..."
-                        WHITESPACE@5336..5341 "\n    "
-                        ELSE_KW@5341..5345 "else"
-                        WHITESPACE@5345..5346 " "
-                        FALSE_EXPR@5346..5513
-                          EXPR_IF_THEN_ELSE@5346..5513
-                            IF_KW@5346..5348 "if"
-                            WHITESPACE@5348..5349 " "
-                            EXPR_APPLY@5349..5364
-                              EXPR_INDEX@5349..5361
-                                EXPR_VAR@5349..5352
-                                  NAME@5349..5352
-                                    IDENT@5349..5352 "std"
-                                DOT@5352..5353 "."
-                                NAME@5353..5361
-                                  IDENT@5353..5361 "isNumber"
-                              ARGS_DESC@5361..5364
-                                L_PAREN@5361..5362 "("
-                                ARG@5362..5363
-                                  EXPR_VAR@5362..5363
-                                    NAME@5362..5363
-                                      IDENT@5362..5363 "v"
-                                R_PAREN@5363..5364 ")"
-                            WHITESPACE@5364..5365 " "
-                            THEN_KW@5365..5369 "then"
-                            WHITESPACE@5369..5376 "\n      "
-                            TRUE_EXPR@5376..5391
-                              EXPR_APPLY@5376..5391
-                                EXPR_INDEX@5376..5388
-                                  EXPR_VAR@5376..5379
-                                    NAME@5376..5379
-                                      IDENT@5376..5379 "std"
-                                  DOT@5379..5380 "."
-                                  NAME@5380..5388
-                                    IDENT@5380..5388 "toString"
-                                ARGS_DESC@5388..5391
-                                  L_PAREN@5388..5389 "("
-                                  ARG@5389..5390
-                                    EXPR_VAR@5389..5390
-                                      NAME@5389..5390
-                                        IDENT@5389..5390 "v"
-                                  R_PAREN@5390..5391 ")"
-                            WHITESPACE@5391..5396 "\n    "
-                            ELSE_KW@5396..5400 "else"
-                            WHITESPACE@5400..5401 " "
-                            FALSE_EXPR@5401..5513
-                              EXPR_IF_THEN_ELSE@5401..5513
-                                IF_KW@5401..5403 "if"
-                                WHITESPACE@5403..5404 " "
-                                EXPR_BINARY@5404..5413
-                                  LHS_EXPR@5404..5405
-                                    EXPR_VAR@5404..5405
-                                      NAME@5404..5405
-                                        IDENT@5404..5405 "v"
-                                  WHITESPACE@5405..5406 " "
-                                  EQ@5406..5408 "=="
-                                  WHITESPACE@5408..5409 " "
-                                  EXPR_LITERAL@5409..5413
-                                    TRUE_KW@5409..5413 "true"
-                                WHITESPACE@5413..5414 " "
-                                THEN_KW@5414..5418 "then"
-                                WHITESPACE@5418..5425 "\n      "
-                                TRUE_EXPR@5425..5431
-                                  EXPR_STRING@5425..5431
-                                    STRING_SINGLE@5425..5431 "'True'"
-                                WHITESPACE@5431..5436 "\n    "
-                                ELSE_KW@5436..5440 "else"
-                                WHITESPACE@5440..5441 " "
-                                FALSE_EXPR@5441..5513
-                                  EXPR_IF_THEN_ELSE@5441..5513
-                                    IF_KW@5441..5443 "if"
-                                    WHITESPACE@5443..5444 " "
-                                    EXPR_BINARY@5444..5454
-                                      LHS_EXPR@5444..5445
-                                        EXPR_VAR@5444..5445
-                                          NAME@5444..5445
-                                            IDENT@5444..5445 "v"
-                                      WHITESPACE@5445..5446 " "
-                                      EQ@5446..5448 "=="
-                                      WHITESPACE@5448..5449 " "
-                                      EXPR_LITERAL@5449..5454
-                                        FALSE_KW@5449..5454 "false"
-                                    WHITESPACE@5454..5455 " "
-                                    THEN_KW@5455..5459 "then"
-                                    WHITESPACE@5459..5466 "\n      "
-                                    TRUE_EXPR@5466..5473
-                                      EXPR_STRING@5466..5473
-                                        STRING_SINGLE@5466..5473 "'False'"
-                                    WHITESPACE@5473..5478 "\n    "
-                                    ELSE_KW@5478..5482 "else"
-                                    WHITESPACE@5482..5483 " "
-                                    FALSE_EXPR@5483..5513
-                                      EXPR_IF_THEN_ELSE@5483..5513
-                                        IF_KW@5483..5485 "if"
-                                        WHITESPACE@5485..5486 " "
-                                        EXPR_BINARY@5486..5495
-                                          LHS_EXPR@5486..5487
-                                            EXPR_VAR@5486..5487
-                                              NAME@5486..5487
-                                                IDENT@5486..5487 "v"
-                                          WHITESPACE@5487..5488 " "
-                                          EQ@5488..5490 "=="
-                                          WHITESPACE@5490..5491 " "
-                                          EXPR_LITERAL@5491..5495
-                                            NULL_KW@5491..5495 "null"
-                                        WHITESPACE@5495..5496 " "
-                                        THEN_KW@5496..5500 "then"
-                                        WHITESPACE@5500..5507 "\n      "
-                                        TRUE_EXPR@5507..5513
-                                          EXPR_STRING@5507..5513
-                                            STRING_SINGLE@5507..5513 "'None'"
+      MEMBER_FIELD_METHOD@4857..5513
+        FIELD_NAME_FIXED@4857..4871
+          NAME@4857..4871
+            IDENT@4857..4871 "manifestPython"
+        PARAMS_DESC@4871..4874
+          L_PAREN@4871..4872 "("
+          PARAM@4872..4873
+            DESTRUCT_FULL@4872..4873
+              NAME@4872..4873
+                IDENT@4872..4873 "v"
+          R_PAREN@4873..4874 ")"
+        COLONCOLON@4874..4876 "::"
+        WHITESPACE@4876..4881 "\n    "
+        EXPR_IF_THEN_ELSE@4881..5513
+          IF_KW@4881..4883 "if"
+          WHITESPACE@4883..4884 " "
+          EXPR_APPLY@4884..4899
+            EXPR_INDEX@4884..4896
+              EXPR_VAR@4884..4887
+                NAME@4884..4887
+                  IDENT@4884..4887 "std"
+              DOT@4887..4888 "."
+              NAME@4888..4896
+                IDENT@4888..4896 "isObject"
+            ARGS_DESC@4896..4899
+              L_PAREN@4896..4897 "("
+              ARG@4897..4898
+                EXPR_VAR@4897..4898
+                  NAME@4897..4898
+                    IDENT@4897..4898 "v"
+              R_PAREN@4898..4899 ")"
+          WHITESPACE@4899..4900 " "
+          THEN_KW@4900..4904 "then"
+          WHITESPACE@4904..4911 "\n      "
+          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 "]"
+          WHITESPACE@5086..5091 "\n    "
+          ELSE_KW@5091..5095 "else"
+          WHITESPACE@5095..5096 " "
+          FALSE_EXPR@5096..5513
+            EXPR_IF_THEN_ELSE@5096..5513
+              IF_KW@5096..5098 "if"
+              WHITESPACE@5098..5099 " "
+              EXPR_APPLY@5099..5113
+                EXPR_INDEX@5099..5110
+                  EXPR_VAR@5099..5102
+                    NAME@5099..5102
+                      IDENT@5099..5102 "std"
+                  DOT@5102..5103 "."
+                  NAME@5103..5110
+                    IDENT@5103..5110 "isArray"
+                ARGS_DESC@5110..5113
+                  L_PAREN@5110..5111 "("
+                  ARG@5111..5112
+                    EXPR_VAR@5111..5112
+                      NAME@5111..5112
+                        IDENT@5111..5112 "v"
+                  R_PAREN@5112..5113 ")"
+              WHITESPACE@5113..5114 " "
+              THEN_KW@5114..5118 "then"
+              WHITESPACE@5118..5125 "\n      "
+              TRUE_EXPR@5125..5188
+                EXPR_BINARY@5125..5188
+                  LHS_EXPR@5125..5131
+                    EXPR_STRING@5125..5131
+                      STRING_SINGLE@5125..5131 "'[%s]'"
+                  WHITESPACE@5131..5132 " "
+                  MODULO@5132..5133 "%"
+                  WHITESPACE@5133..5134 " "
+                  EXPR_ARRAY@5134..5188
+                    L_BRACK@5134..5135 "["
+                    EXPR_APPLY@5135..5187
+                      EXPR_INDEX@5135..5143
+                        EXPR_VAR@5135..5138
+                          NAME@5135..5138
+                            IDENT@5135..5138 "std"
+                        DOT@5138..5139 "."
+                        NAME@5139..5143
+                          IDENT@5139..5143 "join"
+                      ARGS_DESC@5143..5187
+                        L_PAREN@5143..5144 "("
+                        ARG@5144..5148
+                          EXPR_STRING@5144..5148
+                            STRING_SINGLE@5144..5148 "', '"
+                        COMMA@5148..5149 ","
+                        WHITESPACE@5149..5150 " "
+                        ARG@5150..5186
+                          EXPR_ARRAY_COMP@5150..5186
+                            L_BRACK@5150..5151 "["
+                            EXPR_APPLY@5151..5173
+                              EXPR_INDEX@5151..5169
+                                EXPR_VAR@5151..5154
+                                  NAME@5151..5154
+                                    IDENT@5151..5154 "std"
+                                DOT@5154..5155 "."
+                                NAME@5155..5169
+                                  IDENT@5155..5169 "manifestPython"
+                              ARGS_DESC@5169..5173
+                                L_PAREN@5169..5170 "("
+                                ARG@5170..5172
+                                  EXPR_VAR@5170..5172
+                                    NAME@5170..5172
+                                      IDENT@5170..5172 "v2"
+                                R_PAREN@5172..5173 ")"
+                            WHITESPACE@5173..5174 " "
+                            FOR_SPEC@5174..5185
+                              FOR_KW@5174..5177 "for"
+                              WHITESPACE@5177..5178 " "
+                              NAME@5178..5180
+                                IDENT@5178..5180 "v2"
+                              WHITESPACE@5180..5181 " "
+                              IN_KW@5181..5183 "in"
+                              WHITESPACE@5183..5184 " "
+                              EXPR_VAR@5184..5185
+                                NAME@5184..5185
+                                  IDENT@5184..5185 "v"
+                            R_BRACK@5185..5186 "]"
+                        R_PAREN@5186..5187 ")"
+                    R_BRACK@5187..5188 "]"
+              WHITESPACE@5188..5193 "\n    "
+              ELSE_KW@5193..5197 "else"
+              WHITESPACE@5197..5198 " "
+              FALSE_EXPR@5198..5513
+                EXPR_IF_THEN_ELSE@5198..5513
+                  IF_KW@5198..5200 "if"
+                  WHITESPACE@5200..5201 " "
+                  EXPR_APPLY@5201..5216
+                    EXPR_INDEX@5201..5213
+                      EXPR_VAR@5201..5204
+                        NAME@5201..5204
+                          IDENT@5201..5204 "std"
+                      DOT@5204..5205 "."
+                      NAME@5205..5213
+                        IDENT@5205..5213 "isString"
+                    ARGS_DESC@5213..5216
+                      L_PAREN@5213..5214 "("
+                      ARG@5214..5215
+                        EXPR_VAR@5214..5215
+                          NAME@5214..5215
+                            IDENT@5214..5215 "v"
+                      R_PAREN@5215..5216 ")"
+                  WHITESPACE@5216..5217 " "
+                  THEN_KW@5217..5221 "then"
+                  WHITESPACE@5221..5228 "\n      "
+                  TRUE_EXPR@5228..5262
+                    EXPR_BINARY@5228..5262
+                      LHS_EXPR@5228..5232
+                        EXPR_STRING@5228..5232
+                          STRING_SINGLE@5228..5232 "'%s'"
+                      WHITESPACE@5232..5233 " "
+                      MODULO@5233..5234 "%"
+                      WHITESPACE@5234..5235 " "
+                      EXPR_ARRAY@5235..5262
+                        L_BRACK@5235..5236 "["
+                        EXPR_APPLY@5236..5261
+                          EXPR_INDEX@5236..5258
+                            EXPR_VAR@5236..5239
+                              NAME@5236..5239
+                                IDENT@5236..5239 "std"
+                            DOT@5239..5240 "."
+                            NAME@5240..5258
+                              IDENT@5240..5258 "escapeStringPython"
+                          ARGS_DESC@5258..5261
+                            L_PAREN@5258..5259 "("
+                            ARG@5259..5260
+                              EXPR_VAR@5259..5260
+                                NAME@5259..5260
+                                  IDENT@5259..5260 "v"
+                            R_PAREN@5260..5261 ")"
+                        R_BRACK@5261..5262 "]"
+                  WHITESPACE@5262..5267 "\n    "
+                  ELSE_KW@5267..5271 "else"
+                  WHITESPACE@5271..5272 " "
+                  FALSE_EXPR@5272..5513
+                    EXPR_IF_THEN_ELSE@5272..5513
+                      IF_KW@5272..5274 "if"
+                      WHITESPACE@5274..5275 " "
+                      EXPR_APPLY@5275..5292
+                        EXPR_INDEX@5275..5289
+                          EXPR_VAR@5275..5278
+                            NAME@5275..5278
+                              IDENT@5275..5278 "std"
+                          DOT@5278..5279 "."
+                          NAME@5279..5289
+                            IDENT@5279..5289 "isFunction"
+                        ARGS_DESC@5289..5292
+                          L_PAREN@5289..5290 "("
+                          ARG@5290..5291
+                            EXPR_VAR@5290..5291
+                              NAME@5290..5291
+                                IDENT@5290..5291 "v"
+                          R_PAREN@5291..5292 ")"
+                      WHITESPACE@5292..5293 " "
+                      THEN_KW@5293..5297 "then"
+                      WHITESPACE@5297..5304 "\n      "
+                      TRUE_EXPR@5304..5336
+                        EXPR_ERROR@5304..5336
+                          ERROR_KW@5304..5309 "error"
+                          WHITESPACE@5309..5310 " "
+                          EXPR_STRING@5310..5336
+                            STRING_SINGLE@5310..5336 "'cannot manifest func ..."
+                      WHITESPACE@5336..5341 "\n    "
+                      ELSE_KW@5341..5345 "else"
+                      WHITESPACE@5345..5346 " "
+                      FALSE_EXPR@5346..5513
+                        EXPR_IF_THEN_ELSE@5346..5513
+                          IF_KW@5346..5348 "if"
+                          WHITESPACE@5348..5349 " "
+                          EXPR_APPLY@5349..5364
+                            EXPR_INDEX@5349..5361
+                              EXPR_VAR@5349..5352
+                                NAME@5349..5352
+                                  IDENT@5349..5352 "std"
+                              DOT@5352..5353 "."
+                              NAME@5353..5361
+                                IDENT@5353..5361 "isNumber"
+                            ARGS_DESC@5361..5364
+                              L_PAREN@5361..5362 "("
+                              ARG@5362..5363
+                                EXPR_VAR@5362..5363
+                                  NAME@5362..5363
+                                    IDENT@5362..5363 "v"
+                              R_PAREN@5363..5364 ")"
+                          WHITESPACE@5364..5365 " "
+                          THEN_KW@5365..5369 "then"
+                          WHITESPACE@5369..5376 "\n      "
+                          TRUE_EXPR@5376..5391
+                            EXPR_APPLY@5376..5391
+                              EXPR_INDEX@5376..5388
+                                EXPR_VAR@5376..5379
+                                  NAME@5376..5379
+                                    IDENT@5376..5379 "std"
+                                DOT@5379..5380 "."
+                                NAME@5380..5388
+                                  IDENT@5380..5388 "toString"
+                              ARGS_DESC@5388..5391
+                                L_PAREN@5388..5389 "("
+                                ARG@5389..5390
+                                  EXPR_VAR@5389..5390
+                                    NAME@5389..5390
+                                      IDENT@5389..5390 "v"
+                                R_PAREN@5390..5391 ")"
+                          WHITESPACE@5391..5396 "\n    "
+                          ELSE_KW@5396..5400 "else"
+                          WHITESPACE@5400..5401 " "
+                          FALSE_EXPR@5401..5513
+                            EXPR_IF_THEN_ELSE@5401..5513
+                              IF_KW@5401..5403 "if"
+                              WHITESPACE@5403..5404 " "
+                              EXPR_BINARY@5404..5413
+                                LHS_EXPR@5404..5405
+                                  EXPR_VAR@5404..5405
+                                    NAME@5404..5405
+                                      IDENT@5404..5405 "v"
+                                WHITESPACE@5405..5406 " "
+                                EQ@5406..5408 "=="
+                                WHITESPACE@5408..5409 " "
+                                EXPR_LITERAL@5409..5413
+                                  TRUE_KW@5409..5413 "true"
+                              WHITESPACE@5413..5414 " "
+                              THEN_KW@5414..5418 "then"
+                              WHITESPACE@5418..5425 "\n      "
+                              TRUE_EXPR@5425..5431
+                                EXPR_STRING@5425..5431
+                                  STRING_SINGLE@5425..5431 "'True'"
+                              WHITESPACE@5431..5436 "\n    "
+                              ELSE_KW@5436..5440 "else"
+                              WHITESPACE@5440..5441 " "
+                              FALSE_EXPR@5441..5513
+                                EXPR_IF_THEN_ELSE@5441..5513
+                                  IF_KW@5441..5443 "if"
+                                  WHITESPACE@5443..5444 " "
+                                  EXPR_BINARY@5444..5454
+                                    LHS_EXPR@5444..5445
+                                      EXPR_VAR@5444..5445
+                                        NAME@5444..5445
+                                          IDENT@5444..5445 "v"
+                                    WHITESPACE@5445..5446 " "
+                                    EQ@5446..5448 "=="
+                                    WHITESPACE@5448..5449 " "
+                                    EXPR_LITERAL@5449..5454
+                                      FALSE_KW@5449..5454 "false"
+                                  WHITESPACE@5454..5455 " "
+                                  THEN_KW@5455..5459 "then"
+                                  WHITESPACE@5459..5466 "\n      "
+                                  TRUE_EXPR@5466..5473
+                                    EXPR_STRING@5466..5473
+                                      STRING_SINGLE@5466..5473 "'False'"
+                                  WHITESPACE@5473..5478 "\n    "
+                                  ELSE_KW@5478..5482 "else"
+                                  WHITESPACE@5482..5483 " "
+                                  FALSE_EXPR@5483..5513
+                                    EXPR_IF_THEN_ELSE@5483..5513
+                                      IF_KW@5483..5485 "if"
+                                      WHITESPACE@5485..5486 " "
+                                      EXPR_BINARY@5486..5495
+                                        LHS_EXPR@5486..5487
+                                          EXPR_VAR@5486..5487
+                                            NAME@5486..5487
+                                              IDENT@5486..5487 "v"
+                                        WHITESPACE@5487..5488 " "
+                                        EQ@5488..5490 "=="
+                                        WHITESPACE@5490..5491 " "
+                                        EXPR_LITERAL@5491..5495
+                                          NULL_KW@5491..5495 "null"
+                                      WHITESPACE@5495..5496 " "
+                                      THEN_KW@5496..5500 "then"
+                                      WHITESPACE@5500..5507 "\n      "
+                                      TRUE_EXPR@5507..5513
+                                        EXPR_STRING@5507..5513
+                                          STRING_SINGLE@5507..5513 "'None'"
       COMMA@5513..5514 ","
       WHITESPACE@5514..5518 "\n\n  "
-      MEMBER_FIELD@5518..5673
-        FIELD_METHOD@5518..5673
-          FIELD_NAME_FIXED@5518..5536
-            NAME@5518..5536
-              IDENT@5518..5536 "manifestPythonVars"
-          PARAMS_DESC@5536..5542
-            L_PAREN@5536..5537 "("
-            PARAM@5537..5541
-              DESTRUCT_FULL@5537..5541
-                NAME@5537..5541
-                  IDENT@5537..5541 "conf"
-            R_PAREN@5541..5542 ")"
-          COLONCOLON@5542..5544 "::"
-          WHITESPACE@5544..5549 "\n    "
-          EXPR_LOCAL@5549..5673
-            LOCAL_KW@5549..5554 "local"
-            WHITESPACE@5554..5555 " "
-            BIND_DESTRUCT@5555..5640
-              DESTRUCT_FULL@5555..5559
-                NAME@5555..5559
-                  IDENT@5555..5559 "vars"
-              WHITESPACE@5559..5560 " "
-              ASSIGN@5560..5561 "="
-              WHITESPACE@5561..5562 " "
-              EXPR_ARRAY_COMP@5562..5640
-                L_BRACK@5562..5563 "["
-                EXPR_BINARY@5563..5607
-                  LHS_EXPR@5563..5572
-                    EXPR_STRING@5563..5572
-                      STRING_SINGLE@5563..5572 "'%s = %s'"
-                  WHITESPACE@5572..5573 " "
-                  MODULO@5573..5574 "%"
-                  WHITESPACE@5574..5575 " "
-                  EXPR_ARRAY@5575..5607
-                    L_BRACK@5575..5576 "["
-                    EXPR_VAR@5576..5577
-                      NAME@5576..5577
-                        IDENT@5576..5577 "k"
-                    COMMA@5577..5578 ","
-                    WHITESPACE@5578..5579 " "
-                    EXPR_APPLY@5579..5606
-                      EXPR_INDEX@5579..5597
-                        EXPR_VAR@5579..5582
-                          NAME@5579..5582
-                            IDENT@5579..5582 "std"
-                        DOT@5582..5583 "."
-                        NAME@5583..5597
-                          IDENT@5583..5597 "manifestPython"
-                      ARGS_DESC@5597..5606
-                        L_PAREN@5597..5598 "("
-                        ARG@5598..5605
-                          EXPR_INDEX_EXPR@5598..5605
-                            LHS_EXPR@5598..5602
-                              EXPR_VAR@5598..5602
-                                NAME@5598..5602
-                                  IDENT@5598..5602 "conf"
-                            L_BRACK@5602..5603 "["
-                            EXPR_VAR@5603..5604
-                              NAME@5603..5604
-                                IDENT@5603..5604 "k"
-                            R_BRACK@5604..5605 "]"
-                        R_PAREN@5605..5606 ")"
-                    R_BRACK@5606..5607 "]"
-                WHITESPACE@5607..5608 " "
-                FOR_SPEC@5608..5639
-                  FOR_KW@5608..5611 "for"
-                  WHITESPACE@5611..5612 " "
-                  NAME@5612..5613
-                    IDENT@5612..5613 "k"
-                  WHITESPACE@5613..5614 " "
-                  IN_KW@5614..5616 "in"
-                  WHITESPACE@5616..5617 " "
-                  EXPR_APPLY@5617..5639
-                    EXPR_INDEX@5617..5633
-                      EXPR_VAR@5617..5620
-                        NAME@5617..5620
-                          IDENT@5617..5620 "std"
-                      DOT@5620..5621 "."
-                      NAME@5621..5633
-                        IDENT@5621..5633 "objectFields"
-                    ARGS_DESC@5633..5639
-                      L_PAREN@5633..5634 "("
-                      ARG@5634..5638
-                        EXPR_VAR@5634..5638
-                          NAME@5634..5638
-                            IDENT@5634..5638 "conf"
-                      R_PAREN@5638..5639 ")"
-                R_BRACK@5639..5640 "]"
-            SEMI@5640..5641 ";"
-            WHITESPACE@5641..5646 "\n    "
-            EXPR_APPLY@5646..5673
-              EXPR_INDEX@5646..5654
-                EXPR_VAR@5646..5649
-                  NAME@5646..5649
-                    IDENT@5646..5649 "std"
-                DOT@5649..5650 "."
-                NAME@5650..5654
-                  IDENT@5650..5654 "join"
-              ARGS_DESC@5654..5673
-                L_PAREN@5654..5655 "("
-                ARG@5655..5659
-                  EXPR_STRING@5655..5659
-                    STRING_SINGLE@5655..5659 "'\\n'"
-                COMMA@5659..5660 ","
-                WHITESPACE@5660..5661 " "
-                ARG@5661..5672
-                  EXPR_BINARY@5661..5672
-                    LHS_EXPR@5661..5665
-                      EXPR_VAR@5661..5665
-                        NAME@5661..5665
-                          IDENT@5661..5665 "vars"
-                    WHITESPACE@5665..5666 " "
-                    PLUS@5666..5667 "+"
-                    WHITESPACE@5667..5668 " "
-                    EXPR_ARRAY@5668..5672
-                      L_BRACK@5668..5669 "["
-                      EXPR_STRING@5669..5671
-                        STRING_SINGLE@5669..5671 "''"
-                      R_BRACK@5671..5672 "]"
-                R_PAREN@5672..5673 ")"
+      MEMBER_FIELD_METHOD@5518..5673
+        FIELD_NAME_FIXED@5518..5536
+          NAME@5518..5536
+            IDENT@5518..5536 "manifestPythonVars"
+        PARAMS_DESC@5536..5542
+          L_PAREN@5536..5537 "("
+          PARAM@5537..5541
+            DESTRUCT_FULL@5537..5541
+              NAME@5537..5541
+                IDENT@5537..5541 "conf"
+          R_PAREN@5541..5542 ")"
+        COLONCOLON@5542..5544 "::"
+        WHITESPACE@5544..5549 "\n    "
+        EXPR_LOCAL@5549..5673
+          LOCAL_KW@5549..5554 "local"
+          WHITESPACE@5554..5555 " "
+          BIND_DESTRUCT@5555..5640
+            DESTRUCT_FULL@5555..5559
+              NAME@5555..5559
+                IDENT@5555..5559 "vars"
+            WHITESPACE@5559..5560 " "
+            ASSIGN@5560..5561 "="
+            WHITESPACE@5561..5562 " "
+            EXPR_ARRAY_COMP@5562..5640
+              L_BRACK@5562..5563 "["
+              EXPR_BINARY@5563..5607
+                LHS_EXPR@5563..5572
+                  EXPR_STRING@5563..5572
+                    STRING_SINGLE@5563..5572 "'%s = %s'"
+                WHITESPACE@5572..5573 " "
+                MODULO@5573..5574 "%"
+                WHITESPACE@5574..5575 " "
+                EXPR_ARRAY@5575..5607
+                  L_BRACK@5575..5576 "["
+                  EXPR_VAR@5576..5577
+                    NAME@5576..5577
+                      IDENT@5576..5577 "k"
+                  COMMA@5577..5578 ","
+                  WHITESPACE@5578..5579 " "
+                  EXPR_APPLY@5579..5606
+                    EXPR_INDEX@5579..5597
+                      EXPR_VAR@5579..5582
+                        NAME@5579..5582
+                          IDENT@5579..5582 "std"
+                      DOT@5582..5583 "."
+                      NAME@5583..5597
+                        IDENT@5583..5597 "manifestPython"
+                    ARGS_DESC@5597..5606
+                      L_PAREN@5597..5598 "("
+                      ARG@5598..5605
+                        EXPR_INDEX_EXPR@5598..5605
+                          LHS_EXPR@5598..5602
+                            EXPR_VAR@5598..5602
+                              NAME@5598..5602
+                                IDENT@5598..5602 "conf"
+                          L_BRACK@5602..5603 "["
+                          EXPR_VAR@5603..5604
+                            NAME@5603..5604
+                              IDENT@5603..5604 "k"
+                          R_BRACK@5604..5605 "]"
+                      R_PAREN@5605..5606 ")"
+                  R_BRACK@5606..5607 "]"
+              WHITESPACE@5607..5608 " "
+              FOR_SPEC@5608..5639
+                FOR_KW@5608..5611 "for"
+                WHITESPACE@5611..5612 " "
+                NAME@5612..5613
+                  IDENT@5612..5613 "k"
+                WHITESPACE@5613..5614 " "
+                IN_KW@5614..5616 "in"
+                WHITESPACE@5616..5617 " "
+                EXPR_APPLY@5617..5639
+                  EXPR_INDEX@5617..5633
+                    EXPR_VAR@5617..5620
+                      NAME@5617..5620
+                        IDENT@5617..5620 "std"
+                    DOT@5620..5621 "."
+                    NAME@5621..5633
+                      IDENT@5621..5633 "objectFields"
+                  ARGS_DESC@5633..5639
+                    L_PAREN@5633..5634 "("
+                    ARG@5634..5638
+                      EXPR_VAR@5634..5638
+                        NAME@5634..5638
+                          IDENT@5634..5638 "conf"
+                    R_PAREN@5638..5639 ")"
+              R_BRACK@5639..5640 "]"
+          SEMI@5640..5641 ";"
+          WHITESPACE@5641..5646 "\n    "
+          EXPR_APPLY@5646..5673
+            EXPR_INDEX@5646..5654
+              EXPR_VAR@5646..5649
+                NAME@5646..5649
+                  IDENT@5646..5649 "std"
+              DOT@5649..5650 "."
+              NAME@5650..5654
+                IDENT@5650..5654 "join"
+            ARGS_DESC@5654..5673
+              L_PAREN@5654..5655 "("
+              ARG@5655..5659
+                EXPR_STRING@5655..5659
+                  STRING_SINGLE@5655..5659 "'\\n'"
+              COMMA@5659..5660 ","
+              WHITESPACE@5660..5661 " "
+              ARG@5661..5672
+                EXPR_BINARY@5661..5672
+                  LHS_EXPR@5661..5665
+                    EXPR_VAR@5661..5665
+                      NAME@5661..5665
+                        IDENT@5661..5665 "vars"
+                  WHITESPACE@5665..5666 " "
+                  PLUS@5666..5667 "+"
+                  WHITESPACE@5667..5668 " "
+                  EXPR_ARRAY@5668..5672
+                    L_BRACK@5668..5669 "["
+                    EXPR_STRING@5669..5671
+                      STRING_SINGLE@5669..5671 "''"
+                    R_BRACK@5671..5672 "]"
+              R_PAREN@5672..5673 ")"
       COMMA@5673..5674 ","
       WHITESPACE@5674..5678 "\n\n  "
-      MEMBER_FIELD@5678..6345
-        FIELD_METHOD@5678..6345
-          FIELD_NAME_FIXED@5678..5695
-            NAME@5678..5695
-              IDENT@5678..5695 "manifestXmlJsonml"
-          PARAMS_DESC@5695..5702
-            L_PAREN@5695..5696 "("
-            PARAM@5696..5701
-              DESTRUCT_FULL@5696..5701
-                NAME@5696..5701
-                  IDENT@5696..5701 "value"
-            R_PAREN@5701..5702 ")"
-          COLONCOLON@5702..5704 "::"
-          WHITESPACE@5704..5709 "\n    "
-          EXPR_IF_THEN_ELSE@5709..6345
-            IF_KW@5709..5711 "if"
-            WHITESPACE@5711..5712 " "
-            EXPR_UNARY@5712..5731
-              NOT@5712..5713 "!"
-              EXPR_APPLY@5713..5731
-                EXPR_INDEX@5713..5724
-                  EXPR_VAR@5713..5716
-                    NAME@5713..5716
-                      IDENT@5713..5716 "std"
-                  DOT@5716..5717 "."
-                  NAME@5717..5724
-                    IDENT@5717..5724 "isArray"
-                ARGS_DESC@5724..5731
-                  L_PAREN@5724..5725 "("
-                  ARG@5725..5730
-                    EXPR_VAR@5725..5730
-                      NAME@5725..5730
-                        IDENT@5725..5730 "value"
-                  R_PAREN@5730..5731 ")"
-            WHITESPACE@5731..5732 " "
-            THEN_KW@5732..5736 "then"
-            WHITESPACE@5736..5743 "\n      "
-            TRUE_EXPR@5743..5811
-              EXPR_ERROR@5743..5811
-                ERROR_KW@5743..5748 "error"
-                WHITESPACE@5748..5749 " "
-                EXPR_BINARY@5749..5811
-                  LHS_EXPR@5749..5793
-                    EXPR_STRING@5749..5793
-                      STRING_SINGLE@5749..5793 "'Expected a JSONML va ..."
-                  WHITESPACE@5793..5794 " "
-                  MODULO@5794..5795 "%"
-                  WHITESPACE@5795..5796 " "
-                  EXPR_APPLY@5796..5811
-                    EXPR_INDEX@5796..5804
-                      EXPR_VAR@5796..5799
-                        NAME@5796..5799
-                          IDENT@5796..5799 "std"
-                      DOT@5799..5800 "."
-                      NAME@5800..5804
-                        IDENT@5800..5804 "type"
-                    ARGS_DESC@5804..5811
-                      L_PAREN@5804..5805 "("
-                      ARG@5805..5810
-                        EXPR_VAR@5805..5810
-                          NAME@5805..5810
-                            IDENT@5805..5810 "value"
-                      R_PAREN@5810..5811 ")"
-            WHITESPACE@5811..5816 "\n    "
-            ELSE_KW@5816..5820 "else"
-            WHITESPACE@5820..5827 "\n      "
-            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 ")"
+      MEMBER_FIELD_METHOD@5678..6345
+        FIELD_NAME_FIXED@5678..5695
+          NAME@5678..5695
+            IDENT@5678..5695 "manifestXmlJsonml"
+        PARAMS_DESC@5695..5702
+          L_PAREN@5695..5696 "("
+          PARAM@5696..5701
+            DESTRUCT_FULL@5696..5701
+              NAME@5696..5701
+                IDENT@5696..5701 "value"
+          R_PAREN@5701..5702 ")"
+        COLONCOLON@5702..5704 "::"
+        WHITESPACE@5704..5709 "\n    "
+        EXPR_IF_THEN_ELSE@5709..6345
+          IF_KW@5709..5711 "if"
+          WHITESPACE@5711..5712 " "
+          EXPR_UNARY@5712..5731
+            NOT@5712..5713 "!"
+            EXPR_APPLY@5713..5731
+              EXPR_INDEX@5713..5724
+                EXPR_VAR@5713..5716
+                  NAME@5713..5716
+                    IDENT@5713..5716 "std"
+                DOT@5716..5717 "."
+                NAME@5717..5724
+                  IDENT@5717..5724 "isArray"
+              ARGS_DESC@5724..5731
+                L_PAREN@5724..5725 "("
+                ARG@5725..5730
+                  EXPR_VAR@5725..5730
+                    NAME@5725..5730
+                      IDENT@5725..5730 "value"
+                R_PAREN@5730..5731 ")"
+          WHITESPACE@5731..5732 " "
+          THEN_KW@5732..5736 "then"
+          WHITESPACE@5736..5743 "\n      "
+          TRUE_EXPR@5743..5811
+            EXPR_ERROR@5743..5811
+              ERROR_KW@5743..5748 "error"
+              WHITESPACE@5748..5749 " "
+              EXPR_BINARY@5749..5811
+                LHS_EXPR@5749..5793
+                  EXPR_STRING@5749..5793
+                    STRING_SINGLE@5749..5793 "'Expected a JSONML va ..."
+                WHITESPACE@5793..5794 " "
+                MODULO@5794..5795 "%"
+                WHITESPACE@5795..5796 " "
+                EXPR_APPLY@5796..5811
+                  EXPR_INDEX@5796..5804
+                    EXPR_VAR@5796..5799
+                      NAME@5796..5799
+                        IDENT@5796..5799 "std"
+                    DOT@5799..5800 "."
+                    NAME@5800..5804
+                      IDENT@5800..5804 "type"
+                  ARGS_DESC@5804..5811
+                    L_PAREN@5804..5805 "("
+                    ARG@5805..5810
+                      EXPR_VAR@5805..5810
+                        NAME@5805..5810
+                          IDENT@5805..5810 "value"
+                    R_PAREN@5810..5811 ")"
+          WHITESPACE@5811..5816 "\n    "
+          ELSE_KW@5816..5820 "else"
+          WHITESPACE@5820..5827 "\n      "
+          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 ")"
       COMMA@6345..6346 ","
       WHITESPACE@6346..6350 "\n\n  "
-      MEMBER_FIELD@6350..6556
-        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 ")"
+      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@6561..6620
-        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 ")"
+      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@6625..6760
-        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"
+      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@6765..7314
-        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 ")"
+      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@7319..7741
-        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"
+      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@7746..8203
-        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"
+      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@8208..8996
-        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"
-            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_MEMBER_LIST@8635..8975
-                          L_BRACE@8635..8636 "{"
-                          WHITESPACE@8636..8645 "\n        "
-                          MEMBER_FIELD@8645..8967
-                            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"
+      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"
+          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@9001..9107
-        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"
+      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@9112..9162
-        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 ")"
+      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@9167..9219
-        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 ")"
+      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@9224..9274
-        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 ")"
+      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@9279..9331
-        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 ")"
+      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@9336..9393
-        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 "]"
+      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@9398..9461
-        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 "]"
+      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@9466..9600
-        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 ","
-                  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 ")"
+      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 ","
+                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@9605..10058
-        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"
-            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_MEMBER_LIST@9942..10045
-                        L_BRACE@9942..9943 "{"
-                        WHITESPACE@9943..9950 "\n      "
-                        MEMBER_FIELD@9950..10039
-                          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"
+      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"
+          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@10063..10278
-        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 ")"
+      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 "}"
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__wrong_field_end.snapdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__wrong_field_end.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__wrong_field_end.snap
@@ -2,37 +2,47 @@
 source: crates/jrsonnet-rowan-parser/src/tests.rs
 expression: "{\n\ta: 1;\n\tb: 2;\n}\n"
 ---
-SOURCE_FILE@0..11
-  EXPR_OBJECT@0..8
-    OBJ_BODY_MEMBER_LIST@0..8
+SOURCE_FILE@0..18
+  EXPR_OBJECT@0..17
+    OBJ_BODY_MEMBER_LIST@0..17
       L_BRACE@0..1 "{"
       WHITESPACE@1..3 "\n\t"
-      MEMBER_FIELD@3..7
-        FIELD_NORMAL@3..7
-          FIELD_NAME_FIXED@3..4
-            NAME@3..4
-              IDENT@3..4 "a"
-          COLON@4..5 ":"
-          WHITESPACE@5..6 " "
-          EXPR_NUMBER@6..7
-            FLOAT@6..7 "1"
+      MEMBER_FIELD_NORMAL@3..7
+        FIELD_NAME_FIXED@3..4
+          NAME@3..4
+            IDENT@3..4 "a"
+        COLON@4..5 ":"
+        WHITESPACE@5..6 " "
+        EXPR_NUMBER@6..7
+          FLOAT@6..7 "1"
       ERROR_UNEXPECTED_TOKEN@7..8
         SEMI@7..8 ";"
-  WHITESPACE@8..10 "\n\t"
-  ERROR_UNEXPECTED_TOKEN@10..11
-    IDENT@10..11 "b"
+      WHITESPACE@8..10 "\n\t"
+      MEMBER_FIELD_NORMAL@10..14
+        FIELD_NAME_FIXED@10..11
+          NAME@10..11
+            IDENT@10..11 "b"
+        COLON@11..12 ":"
+        WHITESPACE@12..13 " "
+        EXPR_NUMBER@13..14
+          FLOAT@13..14 "2"
+      ERROR_UNEXPECTED_TOKEN@14..15
+        SEMI@14..15 ";"
+      WHITESPACE@15..16 "\n"
+      R_BRACE@16..17 "}"
+  WHITESPACE@17..18 "\n"
 ===
-LocatedSyntaxError { error: Unexpected { expected: Unnamed(R_BRACE), found: SEMI }, range: 7..8 }
-LocatedSyntaxError { error: Unexpected { expected: Unnamed(EOF), found: IDENT }, range: 10..11 }
+LocatedSyntaxError { error: Unexpected { expected: Named("comma"), found: SEMI }, range: 7..8 }
+LocatedSyntaxError { error: Unexpected { expected: Named("comma"), found: SEMI }, range: 14..15 }
 ===
   x syntax error
    ,-[1:1]
  1 | {
  2 |     a: 1;
    :         |
-   :         `-- expected R_BRACE, found SEMI
+   :         `-- expected comma, found SEMI
  3 |     b: 2;
-   :     |
-   :     `-- expected EOF, found IDENT
+   :         |
+   :         `-- expected comma, found SEMI
  4 | }
    `----
modifiedcrates/jrsonnet-rowan-parser/src/tests.rsdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/tests.rs
+++ b/crates/jrsonnet-rowan-parser/src/tests.rs
@@ -118,12 +118,6 @@
 		1
 	"#
 
-	array_comp => r#"
-		[a for a in [1, 2, 3]]
-	"#
-	array_comp_incompatible_with_multiple_elems => r#"
-		[a for a in [1, 2, 3], b]
-	"#
 
 	no_rhs => r#"
 		a +
@@ -186,6 +180,50 @@
 		local * = 1;
 		a
 	"
+	arr_compspec => r#"
+		[a for a in [1, 2, 3]]
+	"#
+	arr_compspec_comma => "
+		[a, for a in [1, 2, 3]]
+	"
+	arr_compspec_no_elems => "
+		[for a in [1, 2, 3]]
+	"
+	arr_compspec_incompatible_with_multiple_elems => r#"
+		[a for a in [1, 2, 3], b]
+	"#
+	arr_compspec_incompatible_with_multiple_elems_w => r#"
+		[a, b, for a in [1, 2, 3], c]
+	"#
+
+	obj_compspec => r#"
+		{a:1 for a in [1, 2, 3]}
+	"#
+	obj_compspec_comma => "
+		{a:1, for a in [1, 2, 3]}
+	"
+	obj_compspec_no_elems => "
+		{for a in [1, 2, 3]}
+	"
+	obj_compspec_incompatible_with_multiple_elems => r#"
+		{a:1 for a in [1, 2, 3], b:1}
+	"#
+	obj_compspec_incompatible_with_multiple_elems_w => r#"
+		{a:1, b:1, for a in [1, 2, 3], c:1}
+	"#
+
+	local_method => r#"
+		local
+			a(x) = x,
+			a = function(x) x,
+		; c
+	"#
+	obj_method => r#"
+		{
+			a(x): x,
+			a: function(x) x,
+		}
+	"#
 );
 
 #[test]
modifiedcrates/jrsonnet-rowan-parser/src/token_set.rsdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/token_set.rs
+++ b/crates/jrsonnet-rowan-parser/src/token_set.rs
@@ -1,3 +1,5 @@
+use std::fmt;
+
 use crate::SyntaxKind;
 
 #[derive(Clone, Copy, Default)]
@@ -21,11 +23,55 @@
 	pub const fn union(self, other: SyntaxKindSet) -> SyntaxKindSet {
 		SyntaxKindSet(self.0 | other.0)
 	}
+	pub const fn with(self, kind: SyntaxKind) -> SyntaxKindSet {
+		SyntaxKindSet(self.0 | mask(kind))
+	}
 
 	pub const fn contains(&self, kind: SyntaxKind) -> bool {
 		self.0 & mask(kind) != 0
 	}
 }
+impl fmt::Display for SyntaxKindSet {
+	fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+		let mut v = self.0;
+		let mut variants = <Vec<SyntaxKind>>::new();
+		for i in 0..128 {
+			if v & 1 == 1 {
+				variants.push(SyntaxKind::from_raw(i))
+			}
+			v >>= 1;
+			if v == 0 {
+				break;
+			}
+		}
+		for (i, v) in variants.iter().enumerate() {
+			if i == 0 {
+			} else if i == variants.len() - 1 {
+				write!(f, " or ")?;
+			} else {
+				write!(f, ", ")?;
+			}
+			write!(f, "{v:?}")?;
+		}
+		Ok(())
+	}
+}
+impl fmt::Debug for SyntaxKindSet {
+	fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+		let mut v = self.0;
+		let mut variants = <Vec<SyntaxKind>>::new();
+		for i in 0..128 {
+			if v & 1 == 1 {
+				variants.push(SyntaxKind::from_raw(i))
+			}
+			v >>= 1;
+			if v == 0 {
+				break;
+			}
+		}
+		f.debug_tuple("SyntaxKindSet").field(&variants).finish()
+	}
+}
 
 const fn mask(kind: SyntaxKind) -> u128 {
 	1u128 << (kind as u128)