difftreelog
refactor upgrade for new master
in: master
30 files changed
Cargo.tomldiffbeforeafterboth--- a/Cargo.toml
+++ b/Cargo.toml
@@ -9,6 +9,7 @@
jrsonnet-evaluator = { path = "./crates/jrsonnet-evaluator", version = "0.5.0-pre95" }
jrsonnet-macros = { path = "./crates/jrsonnet-macros", version = "0.5.0-pre95" }
jrsonnet-parser = { path = "./crates/jrsonnet-parser", version = "0.5.0-pre95" }
+jrsonnet-rowan-parser = { path = "./crates/jrsonnet-rowan-parser", version = "0.5.0-pre95" }
jrsonnet-interner = { path = "./crates/jrsonnet-interner", version = "0.5.0-pre95" }
jrsonnet-stdlib = { path = "./crates/jrsonnet-stdlib", version = "0.5.0-pre95" }
jrsonnet-cli = { path = "./crates/jrsonnet-cli", version = "0.5.0-pre95" }
cmds/jrsonnet-fmt/Cargo.tomldiffbeforeafterboth--- a/cmds/jrsonnet-fmt/Cargo.toml
+++ b/cmds/jrsonnet-fmt/Cargo.toml
@@ -1,10 +1,10 @@
[package]
name = "jrsonnet-fmt"
-version = "0.1.0"
+version.workspace = true
edition = "2021"
[dependencies]
-dprint-core = "0.58.2"
-jrsonnet-rowan-parser = { path = "../../crates/jrsonnet-rowan-parser" }
+dprint-core = "0.60.0"
+jrsonnet-rowan-parser.workspace = true
insta = "1.15"
indoc = "1.0"
cmds/jrsonnet-lsp/Cargo.tomldiffbeforeafterboth--- a/cmds/jrsonnet-lsp/Cargo.toml
+++ b/cmds/jrsonnet-lsp/Cargo.toml
@@ -1,12 +1,12 @@
[package]
name = "jrsonnet-lsp"
-version = "0.1.0"
+version.workspace = true
edition = "2021"
[dependencies]
anyhow = "1.0.48"
-jrsonnet-evaluator = { path = "../../crates/jrsonnet-evaluator" }
-jrsonnet-rowan-parser = { path = "../../crates/jrsonnet-rowan-parser" }
+jrsonnet-evaluator.workspace = true
+jrsonnet-rowan-parser.workspace = true
lsp-server = "0.6.0"
lsp-types = "0.93.0"
serde = "1.0.130"
crates/jrsonnet-rowan-parser/Cargo.tomldiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/Cargo.toml
+++ b/crates/jrsonnet-rowan-parser/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "jrsonnet-rowan-parser"
-version = "0.1.0"
+version.workspace = true
edition = "2021"
[dependencies]
@@ -9,7 +9,7 @@
drop_bomb = "0.1.5"
indoc = "1.0"
logos = "0.12"
-miette = { version = "4.2", features = ["fancy"] }
+miette = { version = "5.5.0", features = ["fancy"] }
rowan = "0.15"
text-size = "1.1"
thiserror = "1.0"
@@ -19,4 +19,3 @@
indoc = "1.0"
insta = "1.15"
anyhow = "1.0"
-jrsonnet-stdlib = { path = "../jrsonnet-stdlib" }
crates/jrsonnet-rowan-parser/jsonnet.ungramdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/jsonnet.ungram
+++ b/crates/jrsonnet-rowan-parser/jsonnet.ungram
@@ -370,3 +370,7 @@
| 'ERROR_COMMENT_UNTERMINATED!'
| 'LIT_SINGLE_LINE_HASH_COMMENT!'
| 'LIT_SINGLE_LINE_SLASH_COMMENT!'
+
+ParsingError =
+ 'ERROR_MISSING_TOKEN!'
+| 'ERROR_UNEXPECTED_TOKEN!'
crates/jrsonnet-rowan-parser/src/event.rsdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/event.rs
+++ b/crates/jrsonnet-rowan-parser/src/event.rs
@@ -1,11 +1,11 @@
use std::mem;
-use rowan::{GreenNodeBuilder, Language};
+use rowan::{GreenNodeBuilder, Language, TextRange, TextSize};
use crate::{
lex::Lexeme,
nodes::Trivia,
- parser::{Parse, SyntaxError},
+ parser::{LocatedSyntaxError, Parse, SyntaxError},
AstToken, JsonnetLanguage, SyntaxKind,
};
@@ -43,7 +43,7 @@
lexemes: &'i [Lexeme<'i>],
offset: usize,
events: Vec<Event>,
- pub errors: Vec<SyntaxError>,
+ pub errors: Vec<LocatedSyntaxError>,
}
impl<'i> Sink<'i> {
@@ -57,9 +57,24 @@
}
}
+ fn text_offset(&self) -> TextSize {
+ if self.offset == 0 {
+ return 0.into();
+ };
+ if let Some(lex) = self.lexemes.get(self.offset) {
+ lex.range.start()
+ } else if let Some(lex) = self.lexemes.get(self.offset - 1) {
+ lex.range.end()
+ } else {
+ panic!("hard oob")
+ }
+ }
+
pub(super) fn finish(mut self) -> Parse {
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 {
@@ -69,6 +84,7 @@
if depth != 0 {
self.skip_whitespace();
}
+ error_last_range = None;
let mut kinds = vec![kind];
let mut idx = idx;
@@ -98,6 +114,7 @@
if depth == 1 {
self.skip_whitespace();
}
+ error_starts_at.push(self.text_offset());
}
eat_start_whitespace = false;
@@ -106,6 +123,7 @@
if eat_start_whitespace {
self.skip_whitespace();
}
+ error_last_range = None;
self.token(kind);
eat_start_whitespace = true;
}
@@ -113,6 +131,7 @@
if eat_start_whitespace {
self.skip_whitespace();
}
+ error_last_range = None;
self.virtual_token(kind);
eat_start_whitespace = false;
}
@@ -120,6 +139,10 @@
if depth == 1 {
self.skip_whitespace();
}
+ error_last_range = Some((
+ error_starts_at.pop().expect("starts == finishes"),
+ self.text_offset(),
+ ));
self.builder.finish_node();
depth -= 1;
let mut idx = idx;
@@ -129,6 +152,10 @@
wrapper = if let Event::Finish { wrapper } =
mem::replace(&mut self.events[idx], Event::Noop)
{
+ error_last_range = Some((
+ error_starts_at.pop().expect("starts == finishes"),
+ self.text_offset(),
+ ));
if depth == 1 {
self.skip_whitespace();
}
@@ -143,8 +170,14 @@
}
Event::Pending => panic!("pending event should not appear in finished events"),
Event::Noop => {}
- Event::Error(e) => {
- self.errors.push(e);
+ 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),
+ });
}
}
}
crates/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
@@ -1123,6 +1123,18 @@
SingleLineHashComment,
SingleLineSlashComment,
}
+
+#[derive(Debug, Clone, PartialEq, Eq, Hash)]
+pub struct ParsingError {
+ syntax: SyntaxToken,
+ kind: ParsingErrorKind,
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+pub enum ParsingErrorKind {
+ ErrorMissingToken,
+ ErrorUnexpectedToken,
+}
impl AstNode for SourceFile {
fn can_cast(kind: SyntaxKind) -> bool {
kind == SOURCE_FILE
@@ -2887,6 +2899,44 @@
std::fmt::Display::fmt(self.syntax(), f)
}
}
+impl AstToken for ParsingError {
+ fn can_cast(kind: SyntaxKind) -> bool {
+ ParsingErrorKind::can_cast(kind)
+ }
+ fn cast(syntax: SyntaxToken) -> Option<Self> {
+ let kind = ParsingErrorKind::cast(syntax.kind())?;
+ Some(ParsingError { syntax, kind })
+ }
+ fn syntax(&self) -> &SyntaxToken {
+ &self.syntax
+ }
+}
+impl ParsingErrorKind {
+ fn can_cast(kind: SyntaxKind) -> bool {
+ match kind {
+ ERROR_MISSING_TOKEN | ERROR_UNEXPECTED_TOKEN => true,
+ _ => false,
+ }
+ }
+ pub fn cast(kind: SyntaxKind) -> Option<Self> {
+ let res = match kind {
+ ERROR_MISSING_TOKEN => Self::ErrorMissingToken,
+ ERROR_UNEXPECTED_TOKEN => Self::ErrorUnexpectedToken,
+ _ => return None,
+ };
+ Some(res)
+ }
+}
+impl ParsingError {
+ pub fn kind(&self) -> ParsingErrorKind {
+ self.kind
+ }
+}
+impl std::fmt::Display for ParsingError {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ std::fmt::Display::fmt(self.syntax(), f)
+ }
+}
impl std::fmt::Display for Expr {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
std::fmt::Display::fmt(self.syntax(), f)
crates/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
@@ -179,8 +179,11 @@
FOR_KW,
#[token("assert")]
ASSERT_KW,
+ ERROR_MISSING_TOKEN,
+ ERROR_UNEXPECTED_TOKEN,
+ #[doc = r" Also acts as __LAST_TOKEN"]
#[error]
- ERROR,
+ LEXING_ERROR,
SOURCE_FILE,
EXPR_BINARY,
LHS_EXPR,
@@ -258,6 +261,7 @@
IMPORT_KIND,
VISIBILITY,
TRIVIA,
+ PARSING_ERROR,
#[doc(hidden)]
__LAST,
}
@@ -279,7 +283,7 @@
match self {
EXPR | OBJ_BODY | COMP_SPEC | BIND | MEMBER | FIELD | FIELD_NAME | DESTRUCT
| DESTRUCT_ARRAY_PART | BINARY_OPERATOR | UNARY_OPERATOR | LITERAL | TEXT | NUMBER
- | IMPORT_KIND | VISIBILITY | TRIVIA => true,
+ | IMPORT_KIND | VISIBILITY | TRIVIA | PARSING_ERROR => true,
_ => false,
}
}
crates/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::{Parser, SyntaxError};
+use parser::{LocatedSyntaxError, Parser, SyntaxError};
pub use rowan;
mod ast;
@@ -23,7 +23,7 @@
pub use language::*;
pub use token_set::SyntaxKindSet;
-pub fn parse(input: &str) -> (SourceFile, Vec<SyntaxError>) {
+pub fn parse(input: &str) -> (SourceFile, Vec<LocatedSyntaxError>) {
let lexemes = lex(input);
let kinds = lexemes
.iter()
crates/jrsonnet-rowan-parser/src/parser.rsdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/parser.rs
+++ b/crates/jrsonnet-rowan-parser/src/parser.rs
@@ -16,7 +16,7 @@
pub struct Parse {
pub green_node: GreenNode,
- pub errors: Vec<SyntaxError>,
+ pub errors: Vec<LocatedSyntaxError>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
@@ -53,51 +53,41 @@
Unexpected {
expected: ExpectedSyntax,
found: SyntaxKind,
- range: TextRange,
},
Missing {
expected: ExpectedSyntax,
- offset: TextSize,
},
Custom {
error: String,
- range: TextRange,
},
Hint {
error: String,
- range: TextRange,
},
}
-impl From<SyntaxError> for LabeledSpan {
- fn from(val: SyntaxError) -> Self {
- match val {
- SyntaxError::Unexpected {
- expected,
- found,
- range,
- } => LabeledSpan::new_with_span(
+#[derive(Debug)]
+pub struct LocatedSyntaxError {
+ pub error: SyntaxError,
+ pub range: TextRange,
+}
+
+impl From<LocatedSyntaxError> for LabeledSpan {
+ fn from(val: LocatedSyntaxError) -> Self {
+ let span = SourceSpan::new(
+ SourceOffset::from(usize::from(val.range.start())),
+ SourceOffset::from(usize::from(val.range.end() - val.range.start())),
+ );
+ dbg!(&val);
+ match val.error {
+ SyntaxError::Unexpected { expected, found } => LabeledSpan::new_with_span(
Some(format!("expected {}, found {:?}", expected, found)),
- SourceSpan::new(
- SourceOffset::from(usize::from(range.start())),
- SourceOffset::from(usize::from(range.end() - range.start())),
- ),
- ),
- SyntaxError::Missing { expected, offset } => LabeledSpan::new_with_span(
- Some(format!("missing {}", expected)),
- SourceSpan::new(
- SourceOffset::from(usize::from(offset)),
- SourceOffset::from(0),
- ),
+ span,
),
- SyntaxError::Custom { error, range } | SyntaxError::Hint { error, range } => {
- LabeledSpan::new_with_span(
- Some(error),
- SourceSpan::new(
- SourceOffset::from(usize::from(range.start())),
- SourceOffset::from(usize::from(range.end() - range.start())),
- ),
- )
+ SyntaxError::Missing { expected } => {
+ LabeledSpan::new_with_span(Some(format!("missing {}", expected)), span)
+ }
+ SyntaxError::Custom { error } | SyntaxError::Hint { error } => {
+ LabeledSpan::new_with_span(Some(error), span)
}
}
}
@@ -180,17 +170,17 @@
pub(crate) fn error_with_recovery_set(
&mut self,
recovery_set: SyntaxKindSet,
- ) -> Option<CompletedMarker> {
+ ) -> CompletedMarker {
self.error_with_recovery_set_no_default(recovery_set.union(DEFAULT_RECOVERY_SET))
}
- pub fn error_with_no_skip(&mut self) -> Option<CompletedMarker> {
+ pub fn error_with_no_skip(&mut self) -> CompletedMarker {
self.error_with_recovery_set_no_default(SyntaxKindSet::ALL)
}
pub fn error_with_recovery_set_no_default(
&mut self,
recovery_set: SyntaxKindSet,
- ) -> Option<CompletedMarker> {
+ ) -> CompletedMarker {
let expected_syntax = self
.expected_syntax
.take()
@@ -200,30 +190,29 @@
if self.at_end() || self.at_ts(recovery_set) {
// let range = self
- // .previous_token()
- // .map(|t| t.range)
+ // .offset
// .unwrap_or_else(|| TextRange::at(TextSize::from(0), TextSize::from(0)));
-
- // self.events.push(Event::Error(SyntaxError::Missing {
- // expected: expected_syntax,
- // offset: range.end(),
- // }));
- return None;
+ let m = self.start();
+ let m = m.complete(self, ERROR_MISSING_TOKEN);
+ self.events.push(Event::Error(SyntaxError::Missing {
+ expected: expected_syntax,
+ }));
+ return m;
}
let current_token = self.current();
- // self.events.push(Event::Error(SyntaxError::Unexpected {
- // expected: expected_syntax,
- // found: current_token.kind,
- // range: current_token.range,
- // }));
- self.clear_expected_syntaxes();
self.last_error_token = self.offset;
let m = self.start();
self.bump();
- Some(m.complete(self, SyntaxKind::ERROR))
+ let m = m.complete(self, ERROR_UNEXPECTED_TOKEN);
+ self.events.push(Event::Error(SyntaxError::Unexpected {
+ expected: expected_syntax,
+ found: current_token,
+ }));
+ self.clear_expected_syntaxes();
+ m
}
fn bump_assert(&mut self, kind: SyntaxKind) {
assert!(self.at(kind), "expected {:?}", kind);
@@ -326,14 +315,20 @@
Unnamed,
}
-fn expr(p: &mut Parser) -> Option<CompletedMarker> {
- expr_binding_power(p, 0)
+fn expr(p: &mut Parser) -> CompletedMarker {
+ match expr_binding_power(p, 0) {
+ Ok(m) => m,
+ Err(m) => m,
+ }
}
-fn expr_binding_power(p: &mut Parser, minimum_binding_power: u8) -> Option<CompletedMarker> {
+fn expr_binding_power(
+ p: &mut Parser,
+ minimum_binding_power: u8,
+) -> Result<CompletedMarker, CompletedMarker> {
let mut lhs = lhs(p)?;
while let Some(op) = BinaryOperatorKind::cast(p.current())
- .or_else(|| p.at(T!['{']).then(|| BinaryOperatorKind::MetaObjectApply))
+ .or_else(|| p.at(T!['{']).then_some(BinaryOperatorKind::MetaObjectApply))
{
let (left_binding_power, right_binding_power) = op.binding_power();
if left_binding_power < minimum_binding_power {
@@ -346,7 +341,7 @@
}
let m = lhs.wrap(p, LHS_EXPR).precede(p);
- let parsed_rhs = expr_binding_power(p, right_binding_power).is_some();
+ let parsed_rhs = expr_binding_power(p, right_binding_power).is_ok();
lhs = m.complete(
p,
if op == BinaryOperatorKind::MetaObjectApply {
@@ -360,7 +355,7 @@
break;
}
}
- Some(lhs)
+ Ok(lhs)
}
fn compspec(p: &mut Parser) {
assert!(p.at(T![for]) || p.at(T![if]));
@@ -461,7 +456,7 @@
fn assertion(p: &mut Parser) {
let m = p.start();
p.bump_assert(T![assert]);
- expr(p).map(|c| c.wrap(p, LHS_EXPR));
+ expr(p).wrap(p, LHS_EXPR);
if p.at(T![:]) {
p.bump();
expr(p);
@@ -625,20 +620,20 @@
p.bump();
// End
if !p.at(T![']']) {
- expr(p).map(|c| c.wrap(p, SLICE_DESC_END));
+ expr(p).wrap(p, SLICE_DESC_END);
}
if p.at(T![:]) {
p.bump();
// Step
if !p.at(T![']']) {
- expr(p).map(|c| c.wrap(p, SLICE_DESC_STEP));
+ expr(p).wrap(p, SLICE_DESC_STEP);
}
}
} else if p.at(T![::]) {
p.bump();
// End
if !p.at(T![']']) {
- expr(p).map(|c| c.wrap(p, SLICE_DESC_END));
+ expr(p).wrap(p, SLICE_DESC_END);
}
} else {
// It was not a slice
@@ -650,7 +645,7 @@
m.complete(p, SLICE_DESC);
true
}
-fn lhs(p: &mut Parser) -> Option<CompletedMarker> {
+fn lhs(p: &mut Parser) -> Result<CompletedMarker, CompletedMarker> {
let mut lhs = lhs_basic(p)?;
loop {
@@ -677,7 +672,7 @@
}
}
- Some(lhs)
+ Ok(lhs)
}
fn name(p: &mut Parser) {
let m = p.start();
@@ -713,6 +708,7 @@
}
fn destruct(p: &mut Parser) -> CompletedMarker {
let m = p.start();
+ let _ex = p.expected_syntax_name("destruction specifier");
if p.at(T![?]) {
p.bump();
m.complete(p, DESTRUCT_SKIP)
@@ -773,7 +769,8 @@
name(p);
m.complete(p, DESTRUCT_FULL)
} else {
- m.complete(p, ERROR)
+ m.forget(p);
+ p.error_with_recovery_set(TS![; , '}', '(', :])
}
}
fn bind(p: &mut Parser) {
@@ -784,6 +781,13 @@
p.expect(T![=]);
expr(p);
m.complete(p, BIND_FUNCTION)
+ } else if p.at(IDENT) && p.nth_at(1, T![=]) && p.nth_at(2, T![function]) {
+ name(p);
+ p.expect(T![=]);
+ p.expect(T![function]);
+ params_desc(p);
+ expr(p);
+ m.complete(p, BIND_FUNCTION)
} else {
destruct(p);
p.expect(T![=]);
@@ -803,9 +807,9 @@
assert!(Literal::can_cast(p.current()));
p.bump();
}
-fn lhs_basic(p: &mut Parser) -> Option<CompletedMarker> {
- let _e = p.expected_syntax_name("value");
- Some(if Literal::can_cast(p.current()) {
+fn lhs_basic(p: &mut Parser) -> Result<CompletedMarker, CompletedMarker> {
+ let _e = p.expected_syntax_name("expression");
+ Ok(if Literal::can_cast(p.current()) {
let m = p.start();
literal(p);
m.complete(p, EXPR_LITERAL)
@@ -841,10 +845,10 @@
p.bump();
expr(p);
p.expect(T![then]);
- expr(p).map(|c| c.wrap(p, TRUE_EXPR));
+ expr(p).wrap(p, TRUE_EXPR);
if p.at(T![else]) {
p.bump();
- expr(p).map(|c| c.wrap(p, FALSE_EXPR));
+ expr(p).wrap(p, FALSE_EXPR);
}
m.complete(p, EXPR_IF_THEN_ELSE)
} else if p.at(T!['[']) {
@@ -897,7 +901,7 @@
let m = p.start();
p.bump();
- expr_binding_power(p, right_binding_power);
+ let _ = expr_binding_power(p, right_binding_power);
m.complete(p, EXPR_UNARY)
} else if p.at(T!['(']) {
let m = p.start();
@@ -906,8 +910,7 @@
p.expect(T![')']);
m.complete(p, EXPR_PARENED)
} else {
- p.error_with_recovery_set(TS![]);
- return None;
+ return Err(p.error_with_no_skip());
})
}
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__array_comp.snapdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__array_comp.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__array_comp.snap
@@ -2,7 +2,7 @@
source: crates/jrsonnet-rowan-parser/src/tests.rs
expression: "[a for a in [1, 2, 3]]\n"
---
-SOURCE_FILE@0..22
+SOURCE_FILE@0..23
EXPR_ARRAY_COMP@0..22
L_BRACK@0..1 "["
EXPR_VAR@1..2
@@ -31,4 +31,5 @@
FLOAT@19..20 "3"
R_BRACK@20..21 "]"
R_BRACK@21..22 "]"
+ WHITESPACE@22..23 "\n"
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__destruct.snapdiffbeforeafterboth--- /dev/null
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__destruct.snap
@@ -0,0 +1,255 @@
+---
+source: crates/jrsonnet-rowan-parser/src/tests.rs
+expression: "local [a, b, c] = arr;\nlocal [a, ...] = arr_rest;\nlocal [..., a] = rest_arr;\nlocal [...] = rest_in_arr;\nlocal [a, ...n] = arr_rest_n;\nlocal [...n, a] = rest_arr_n;\nlocal [...n] = rest_in_arr_n;\n\nlocal {a, b, c} = obj;\nlocal {a, b, c, ...} = obj_rest;\nlocal {a, b, c, ...n} = obj_rest_n;\n\nnull\n"
+---
+SOURCE_FILE@0..293
+ EXPR_LOCAL@0..292
+ LOCAL_KW@0..5 "local"
+ WHITESPACE@5..6 " "
+ BIND_DESTRUCT@6..21
+ DESTRUCT_ARRAY@6..15
+ L_BRACK@6..7 "["
+ DESTRUCT_FULL@7..8
+ NAME@7..8
+ IDENT@7..8 "a"
+ COMMA@8..9 ","
+ WHITESPACE@9..10 " "
+ DESTRUCT_FULL@10..11
+ NAME@10..11
+ IDENT@10..11 "b"
+ COMMA@11..12 ","
+ WHITESPACE@12..13 " "
+ DESTRUCT_FULL@13..14
+ NAME@13..14
+ IDENT@13..14 "c"
+ R_BRACK@14..15 "]"
+ WHITESPACE@15..16 " "
+ ASSIGN@16..17 "="
+ WHITESPACE@17..18 " "
+ EXPR_VAR@18..21
+ NAME@18..21
+ IDENT@18..21 "arr"
+ SEMI@21..22 ";"
+ WHITESPACE@22..23 "\n"
+ EXPR_LOCAL@23..292
+ LOCAL_KW@23..28 "local"
+ WHITESPACE@28..29 " "
+ BIND_DESTRUCT@29..48
+ DESTRUCT_ARRAY@29..37
+ L_BRACK@29..30 "["
+ DESTRUCT_FULL@30..31
+ NAME@30..31
+ IDENT@30..31 "a"
+ COMMA@31..32 ","
+ WHITESPACE@32..33 " "
+ DESTRUCT_REST@33..36
+ DOTDOTDOT@33..36 "..."
+ R_BRACK@36..37 "]"
+ WHITESPACE@37..38 " "
+ ASSIGN@38..39 "="
+ WHITESPACE@39..40 " "
+ EXPR_VAR@40..48
+ NAME@40..48
+ IDENT@40..48 "arr_rest"
+ SEMI@48..49 ";"
+ WHITESPACE@49..50 "\n"
+ EXPR_LOCAL@50..292
+ LOCAL_KW@50..55 "local"
+ WHITESPACE@55..56 " "
+ BIND_DESTRUCT@56..75
+ DESTRUCT_ARRAY@56..64
+ L_BRACK@56..57 "["
+ DESTRUCT_REST@57..60
+ DOTDOTDOT@57..60 "..."
+ COMMA@60..61 ","
+ WHITESPACE@61..62 " "
+ DESTRUCT_FULL@62..63
+ NAME@62..63
+ IDENT@62..63 "a"
+ R_BRACK@63..64 "]"
+ WHITESPACE@64..65 " "
+ ASSIGN@65..66 "="
+ WHITESPACE@66..67 " "
+ EXPR_VAR@67..75
+ NAME@67..75
+ IDENT@67..75 "rest_arr"
+ SEMI@75..76 ";"
+ WHITESPACE@76..77 "\n"
+ EXPR_LOCAL@77..292
+ LOCAL_KW@77..82 "local"
+ WHITESPACE@82..83 " "
+ BIND_DESTRUCT@83..102
+ DESTRUCT_ARRAY@83..88
+ L_BRACK@83..84 "["
+ DESTRUCT_REST@84..87
+ DOTDOTDOT@84..87 "..."
+ R_BRACK@87..88 "]"
+ WHITESPACE@88..89 " "
+ ASSIGN@89..90 "="
+ WHITESPACE@90..91 " "
+ EXPR_VAR@91..102
+ NAME@91..102
+ IDENT@91..102 "rest_in_arr"
+ SEMI@102..103 ";"
+ WHITESPACE@103..104 "\n"
+ EXPR_LOCAL@104..292
+ LOCAL_KW@104..109 "local"
+ WHITESPACE@109..110 " "
+ BIND_DESTRUCT@110..132
+ DESTRUCT_ARRAY@110..119
+ L_BRACK@110..111 "["
+ DESTRUCT_FULL@111..112
+ NAME@111..112
+ IDENT@111..112 "a"
+ COMMA@112..113 ","
+ WHITESPACE@113..114 " "
+ DESTRUCT_REST@114..118
+ DOTDOTDOT@114..117 "..."
+ IDENT@117..118 "n"
+ R_BRACK@118..119 "]"
+ WHITESPACE@119..120 " "
+ ASSIGN@120..121 "="
+ WHITESPACE@121..122 " "
+ EXPR_VAR@122..132
+ NAME@122..132
+ IDENT@122..132 "arr_rest_n"
+ SEMI@132..133 ";"
+ WHITESPACE@133..134 "\n"
+ EXPR_LOCAL@134..292
+ LOCAL_KW@134..139 "local"
+ WHITESPACE@139..140 " "
+ BIND_DESTRUCT@140..162
+ DESTRUCT_ARRAY@140..149
+ L_BRACK@140..141 "["
+ DESTRUCT_REST@141..145
+ DOTDOTDOT@141..144 "..."
+ IDENT@144..145 "n"
+ COMMA@145..146 ","
+ WHITESPACE@146..147 " "
+ DESTRUCT_FULL@147..148
+ NAME@147..148
+ IDENT@147..148 "a"
+ R_BRACK@148..149 "]"
+ WHITESPACE@149..150 " "
+ ASSIGN@150..151 "="
+ WHITESPACE@151..152 " "
+ EXPR_VAR@152..162
+ NAME@152..162
+ IDENT@152..162 "rest_arr_n"
+ SEMI@162..163 ";"
+ WHITESPACE@163..164 "\n"
+ EXPR_LOCAL@164..292
+ LOCAL_KW@164..169 "local"
+ WHITESPACE@169..170 " "
+ BIND_DESTRUCT@170..192
+ DESTRUCT_ARRAY@170..176
+ L_BRACK@170..171 "["
+ DESTRUCT_REST@171..175
+ DOTDOTDOT@171..174 "..."
+ IDENT@174..175 "n"
+ R_BRACK@175..176 "]"
+ WHITESPACE@176..177 " "
+ ASSIGN@177..178 "="
+ WHITESPACE@178..179 " "
+ EXPR_VAR@179..192
+ NAME@179..192
+ IDENT@179..192 "rest_in_arr_n"
+ SEMI@192..193 ";"
+ WHITESPACE@193..195 "\n\n"
+ EXPR_LOCAL@195..292
+ LOCAL_KW@195..200 "local"
+ WHITESPACE@200..201 " "
+ BIND_DESTRUCT@201..216
+ DESTRUCT_OBJECT@201..210
+ L_BRACE@201..202 "{"
+ DESTRUCT_OBJECT_FIELD@202..203
+ NAME@202..203
+ IDENT@202..203 "a"
+ COMMA@203..204 ","
+ WHITESPACE@204..205 " "
+ DESTRUCT_OBJECT_FIELD@205..206
+ NAME@205..206
+ IDENT@205..206 "b"
+ COMMA@206..207 ","
+ WHITESPACE@207..208 " "
+ DESTRUCT_OBJECT_FIELD@208..209
+ NAME@208..209
+ IDENT@208..209 "c"
+ R_BRACE@209..210 "}"
+ WHITESPACE@210..211 " "
+ ASSIGN@211..212 "="
+ WHITESPACE@212..213 " "
+ EXPR_VAR@213..216
+ NAME@213..216
+ IDENT@213..216 "obj"
+ SEMI@216..217 ";"
+ WHITESPACE@217..218 "\n"
+ EXPR_LOCAL@218..292
+ LOCAL_KW@218..223 "local"
+ WHITESPACE@223..224 " "
+ BIND_DESTRUCT@224..249
+ DESTRUCT_OBJECT@224..238
+ L_BRACE@224..225 "{"
+ DESTRUCT_OBJECT_FIELD@225..226
+ NAME@225..226
+ IDENT@225..226 "a"
+ COMMA@226..227 ","
+ WHITESPACE@227..228 " "
+ DESTRUCT_OBJECT_FIELD@228..229
+ NAME@228..229
+ IDENT@228..229 "b"
+ COMMA@229..230 ","
+ WHITESPACE@230..231 " "
+ DESTRUCT_OBJECT_FIELD@231..232
+ NAME@231..232
+ IDENT@231..232 "c"
+ COMMA@232..233 ","
+ WHITESPACE@233..234 " "
+ DESTRUCT_REST@234..237
+ DOTDOTDOT@234..237 "..."
+ R_BRACE@237..238 "}"
+ WHITESPACE@238..239 " "
+ ASSIGN@239..240 "="
+ WHITESPACE@240..241 " "
+ EXPR_VAR@241..249
+ NAME@241..249
+ IDENT@241..249 "obj_rest"
+ SEMI@249..250 ";"
+ WHITESPACE@250..251 "\n"
+ EXPR_LOCAL@251..292
+ LOCAL_KW@251..256 "local"
+ WHITESPACE@256..257 " "
+ BIND_DESTRUCT@257..285
+ DESTRUCT_OBJECT@257..272
+ L_BRACE@257..258 "{"
+ DESTRUCT_OBJECT_FIELD@258..259
+ NAME@258..259
+ IDENT@258..259 "a"
+ COMMA@259..260 ","
+ WHITESPACE@260..261 " "
+ DESTRUCT_OBJECT_FIELD@261..262
+ NAME@261..262
+ IDENT@261..262 "b"
+ COMMA@262..263 ","
+ WHITESPACE@263..264 " "
+ DESTRUCT_OBJECT_FIELD@264..265
+ NAME@264..265
+ IDENT@264..265 "c"
+ COMMA@265..266 ","
+ WHITESPACE@266..267 " "
+ DESTRUCT_REST@267..271
+ DOTDOTDOT@267..270 "..."
+ IDENT@270..271 "n"
+ R_BRACE@271..272 "}"
+ WHITESPACE@272..273 " "
+ ASSIGN@273..274 "="
+ WHITESPACE@274..275 " "
+ EXPR_VAR@275..285
+ NAME@275..285
+ IDENT@275..285 "obj_rest_n"
+ SEMI@285..286 ";"
+ WHITESPACE@286..288 "\n\n"
+ EXPR_LITERAL@288..292
+ NULL_KW@288..292 "null"
+ WHITESPACE@292..293 "\n"
+
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__empty.snapdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__empty.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__empty.snap
@@ -4,11 +4,13 @@
---
SOURCE_FILE@0..1
WHITESPACE@0..1 " "
+ ERROR_MISSING_TOKEN@1..1
===
-Missing { expected: Named("value"), offset: 1 }
+LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 1..1 }
===
x syntax error
,----
- 1 |
+ 1 |
+ : ^
+ : `-- missing expression
`----
-
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function.snapdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function.snap
@@ -2,7 +2,7 @@
source: crates/jrsonnet-rowan-parser/src/tests.rs
expression: "function(a, b = 1) a + b\n"
---
-SOURCE_FILE@0..24
+SOURCE_FILE@0..25
EXPR_FUNCTION@0..24
FUNCTION_KW@0..8 "function"
PARAMS_DESC@8..18
@@ -35,4 +35,5 @@
EXPR_VAR@23..24
NAME@23..24
IDENT@23..24 "b"
+ WHITESPACE@24..25 "\n"
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_body.snapdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_body.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_body.snap
@@ -2,8 +2,8 @@
source: crates/jrsonnet-rowan-parser/src/tests.rs
expression: "function(a, b)\n"
---
-SOURCE_FILE@0..14
- EXPR_FUNCTION@0..14
+SOURCE_FILE@0..15
+ EXPR_FUNCTION@0..15
FUNCTION_KW@0..8 "function"
PARAMS_DESC@8..14
L_PAREN@8..9 "("
@@ -18,13 +18,14 @@
NAME@12..13
IDENT@12..13 "b"
R_PAREN@13..14 ")"
+ WHITESPACE@14..15 "\n"
+ ERROR_MISSING_TOKEN@15..15
===
-Missing { expected: Named("value"), offset: 14 }
+LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 15..15 }
===
x syntax error
,----
1 | function(a, b)
- : ^
- : `-- missing value
+ : ^
+ : `-- missing expression
`----
-
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_no_value.snapdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_no_value.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_no_value.snap
@@ -3,37 +3,44 @@
expression: "function(a, b = ) a + b\n"
---
SOURCE_FILE@0..24
- EXPR_FUNCTION@0..24
+ EXPR_FUNCTION@0..23
FUNCTION_KW@0..8 "function"
- PARAMS_DESC@8..18
+ PARAMS_DESC@8..17
L_PAREN@8..9 "("
PARAM@9..10
- IDENT@9..10 "a"
+ DESTRUCT_FULL@9..10
+ NAME@9..10
+ IDENT@9..10 "a"
COMMA@10..11 ","
WHITESPACE@11..12 " "
PARAM@12..16
- IDENT@12..13 "b"
+ DESTRUCT_FULL@12..13
+ NAME@12..13
+ IDENT@12..13 "b"
WHITESPACE@13..14 " "
ASSIGN@14..15 "="
WHITESPACE@15..16 " "
+ ERROR_MISSING_TOKEN@16..16
R_PAREN@16..17 ")"
- WHITESPACE@17..18 " "
- EXPR_BINARY@18..24
- EXPR_VAR@18..20
- IDENT@18..19 "a"
- WHITESPACE@19..20 " "
+ WHITESPACE@17..18 " "
+ EXPR_BINARY@18..23
+ LHS_EXPR@18..19
+ EXPR_VAR@18..19
+ NAME@18..19
+ IDENT@18..19 "a"
+ WHITESPACE@19..20 " "
PLUS@20..21 "+"
WHITESPACE@21..22 " "
- EXPR_VAR@22..24
- IDENT@22..23 "b"
- WHITESPACE@23..24 "\n"
+ EXPR_VAR@22..23
+ NAME@22..23
+ IDENT@22..23 "b"
+ WHITESPACE@23..24 "\n"
===
-Missing { expected: Named("value"), offset: 15 }
+LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 16..16 }
===
x syntax error
,----
1 | function(a, b = ) a + b
- : ^
- : `-- missing value
+ : ^
+ : `-- missing expression
`----
-
crates/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
@@ -2,10 +2,10 @@
source: crates/jrsonnet-rowan-parser/src/tests.rs
expression: "function(a, b\n"
---
-SOURCE_FILE@0..13
- EXPR_FUNCTION@0..13
+SOURCE_FILE@0..14
+ EXPR_FUNCTION@0..14
FUNCTION_KW@0..8 "function"
- PARAMS_DESC@8..13
+ PARAMS_DESC@8..14
L_PAREN@8..9 "("
PARAM@9..10
DESTRUCT_FULL@9..10
@@ -17,15 +17,17 @@
DESTRUCT_FULL@12..13
NAME@12..13
IDENT@12..13 "b"
+ WHITESPACE@13..14 "\n"
+ ERROR_MISSING_TOKEN@14..14
+ ERROR_MISSING_TOKEN@14..14
===
-Missing { expected: Unnamed(R_PAREN), offset: 13 }
-Missing { expected: Named("value"), offset: 13 }
+LocatedSyntaxError { error: Missing { expected: Unnamed(R_PAREN) }, range: 14..14 }
+LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 14..14 }
===
x syntax error
,----
1 | function(a, b
- : ^
- : |`-- missing value
- : `-- missing R_PAREN
+ : ^^
+ : |`-- missing expression
+ : `-- missing R_PAREN
`----
-
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_no_value_recovery.snapdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_no_value_recovery.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_no_value_recovery.snap
@@ -3,37 +3,44 @@
expression: "local a =\nlocal b = 3;\n1\n"
---
SOURCE_FILE@0..25
- LOCAL_KW@0..25
+ EXPR_LOCAL@0..25
LOCAL_KW@0..5 "local"
WHITESPACE@5..6 " "
- IDENT@6..7 "a"
- WHITESPACE@7..8 " "
- ASSIGN@8..9 "="
- WHITESPACE@9..10 "\n"
- LOCAL_KW@10..25
- LOCAL_KW@10..15 "local"
- WHITESPACE@15..16 " "
- IDENT@16..17 "b"
- WHITESPACE@17..18 " "
- ASSIGN@18..19 "="
- WHITESPACE@19..20 " "
- EXPR_NUMBER@20..21
- NUMBER@20..21 "3"
- SEMI@21..22 ";"
- WHITESPACE@22..23 "\n"
- EXPR_NUMBER@23..25
- NUMBER@23..24 "1"
- WHITESPACE@24..25 "\n"
+ BIND_DESTRUCT@6..24
+ DESTRUCT_FULL@6..7
+ NAME@6..7
+ IDENT@6..7 "a"
+ WHITESPACE@7..8 " "
+ ASSIGN@8..9 "="
+ WHITESPACE@9..10 "\n"
+ EXPR_LOCAL@10..24
+ LOCAL_KW@10..15 "local"
+ WHITESPACE@15..16 " "
+ BIND_DESTRUCT@16..21
+ DESTRUCT_FULL@16..17
+ NAME@16..17
+ IDENT@16..17 "b"
+ WHITESPACE@17..18 " "
+ ASSIGN@18..19 "="
+ WHITESPACE@19..20 " "
+ EXPR_NUMBER@20..21
+ FLOAT@20..21 "3"
+ SEMI@21..22 ";"
+ WHITESPACE@22..23 "\n"
+ EXPR_NUMBER@23..24
+ FLOAT@23..24 "1"
+ WHITESPACE@24..25 "\n"
+ ERROR_MISSING_TOKEN@25..25
+ ERROR_MISSING_TOKEN@25..25
===
-Missing { expected: Unnamed(SEMI), offset: 24 }
-Missing { expected: Named("value"), offset: 24 }
+LocatedSyntaxError { error: Missing { expected: Unnamed(SEMI) }, range: 25..25 }
+LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 25..25 }
===
x syntax error
,-[2:1]
2 | local b = 3;
3 | 1
- : ^
- : |`-- missing value
- : `-- missing SEMI
+ : ^^
+ : |`-- missing expression
+ : `-- missing SEMI
`----
-
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_novalue.snapdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_novalue.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_novalue.snap
@@ -3,24 +3,29 @@
expression: "local a =\n"
---
SOURCE_FILE@0..10
- LOCAL_KW@0..10
+ EXPR_LOCAL@0..10
LOCAL_KW@0..5 "local"
WHITESPACE@5..6 " "
- IDENT@6..7 "a"
- WHITESPACE@7..8 " "
- ASSIGN@8..9 "="
- WHITESPACE@9..10 "\n"
+ BIND_DESTRUCT@6..10
+ DESTRUCT_FULL@6..7
+ NAME@6..7
+ IDENT@6..7 "a"
+ WHITESPACE@7..8 " "
+ ASSIGN@8..9 "="
+ WHITESPACE@9..10 "\n"
+ ERROR_MISSING_TOKEN@10..10
+ ERROR_MISSING_TOKEN@10..10
+ ERROR_MISSING_TOKEN@10..10
===
-Missing { expected: Named("value"), offset: 9 }
-Missing { expected: Unnamed(SEMI), offset: 9 }
-Missing { expected: Named("value"), offset: 9 }
+LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 10..10 }
+LocatedSyntaxError { error: Missing { expected: Unnamed(SEMI) }, range: 10..10 }
+LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 10..10 }
===
x syntax error
,----
1 | local a =
- : ^
- : `-- missing value
- : |`-- missing SEMI
- : `-- missing value
+ : ^^^
+ : `-- missing expression
+ : |`-- missing SEMI
+ : `-- missing expression
`----
-
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_lhs.snapdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_lhs.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_lhs.snap
@@ -3,17 +3,18 @@
expression: "+ 2\n"
---
SOURCE_FILE@0..2
- PLUS@0..1 "+"
+ ERROR_MISSING_TOKEN@0..0
+ ERROR_UNEXPECTED_TOKEN@0..1
+ PLUS@0..1 "+"
WHITESPACE@1..2 " "
===
-Missing { expected: Named("value"), offset: 0 }
-Custom { error: "unexpected input after expression", range: 0..1 }
+LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 0..0 }
+LocatedSyntaxError { error: Unexpected { expected: Unnamed(EOF), found: PLUS }, range: 0..1 }
===
x syntax error
,----
1 | + 2
- : ^
- : |`-- unexpected input after expression
- : `-- missing value
+ : ^|
+ : |`-- expected EOF, found PLUS
+ : `-- missing expression
`----
-
crates/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
@@ -2,14 +2,15 @@
source: crates/jrsonnet-rowan-parser/src/tests.rs
expression: "2 2\n"
---
-SOURCE_FILE@0..3
+SOURCE_FILE@0..4
EXPR_NUMBER@0..1
FLOAT@0..1 "2"
WHITESPACE@1..2 " "
- ERROR@2..3
+ ERROR_UNEXPECTED_TOKEN@2..3
FLOAT@2..3 "2"
+ WHITESPACE@3..4 "\n"
===
-Unexpected { expected: Unnamed(EOF), found: FLOAT, range: 2..3 }
+LocatedSyntaxError { error: Unexpected { expected: Unnamed(EOF), found: FLOAT }, range: 2..3 }
===
x syntax error
,----
@@ -17,4 +18,3 @@
: |
: `-- expected EOF, found FLOAT
`----
-
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_rhs.snapdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_rhs.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_rhs.snap
@@ -2,21 +2,22 @@
source: crates/jrsonnet-rowan-parser/src/tests.rs
expression: "a +\n"
---
-SOURCE_FILE@0..3
- EXPR_BINARY@0..3
+SOURCE_FILE@0..4
+ EXPR_BINARY@0..4
LHS_EXPR@0..1
EXPR_VAR@0..1
NAME@0..1
IDENT@0..1 "a"
WHITESPACE@1..2 " "
PLUS@2..3 "+"
+ WHITESPACE@3..4 "\n"
+ ERROR_MISSING_TOKEN@4..4
===
-Missing { expected: Named("value"), offset: 3 }
+LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 4..4 }
===
x syntax error
,----
1 | a +
- : ^
- : `-- missing value
+ : ^
+ : `-- missing expression
`----
-
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__plain_call.snapdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__plain_call.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__plain_call.snap
@@ -2,7 +2,7 @@
source: crates/jrsonnet-rowan-parser/src/tests.rs
expression: "std.substr(a, 0, std.length(b)) == b\n"
---
-SOURCE_FILE@0..36
+SOURCE_FILE@0..37
EXPR_BINARY@0..36
LHS_EXPR@0..31
EXPR_APPLY@0..31
@@ -49,4 +49,5 @@
EXPR_VAR@35..36
NAME@35..36
IDENT@35..36 "b"
+ WHITESPACE@36..37 "\n"
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__stdlib.snapdiffbeforeafterboth1---2source: crates/jrsonnet-rowan-parser/src/tests.rs3expression: "{\n local std = self,\n local id = std.id,\n\n thisFile:: error 'std.thisFile is deprecated, to enable its support in jrsonnet - recompile it with \"legacy-this-file\" support.\\nThis will slow down stdlib caching a bit, though',\n\n toString(a):: '' + a,\n\n lstripChars(str, chars)::\n if std.length(str) > 0 && std.member(chars, str[0]) then\n std.lstripChars(str[1:], chars)\n else\n str,\n\n rstripChars(str, chars)::\n local len = std.length(str);\n if len > 0 && std.member(chars, str[len - 1]) then\n std.rstripChars(str[:len - 1], chars)\n else\n str,\n\n stripChars(str, chars)::\n std.lstripChars(std.rstripChars(str, chars), chars),\n\n stringChars(str)::\n std.makeArray(std.length(str), function(i) str[i]),\n\n splitLimitR(str, c, maxsplits)::\n if maxsplits == -1 then\n std.splitLimit(str, c, -1)\n else\n local revStr(str) = std.join('', std.reverse(std.stringChars(str)));\n std.map(function(e) revStr(e), std.reverse(std.splitLimit(revStr(str), revStr(c), maxsplits))),\n\n split(str, c):: std.splitLimit(str, c, -1),\n\n mapWithIndex(func, arr)::\n if !std.isFunction(func) then\n error ('std.mapWithIndex first param must be function, got ' + std.type(func))\n else if !std.isArray(arr) && !std.isString(arr) then\n error ('std.mapWithIndex second param must be array, got ' + std.type(arr))\n else\n std.makeArray(std.length(arr), function(i) func(i, arr[i])),\n\n mapWithKey(func, obj)::\n if !std.isFunction(func) then\n error ('std.mapWithKey first param must be function, got ' + std.type(func))\n else if !std.isObject(obj) then\n error ('std.mapWithKey second param must be object, got ' + std.type(obj))\n else\n { [k]: func(k, obj[k]) for k in std.objectFields(obj) },\n\n lines(arr)::\n std.join('\\n', arr + ['']),\n\n deepJoin(arr)::\n if std.isString(arr) then\n arr\n else if std.isArray(arr) then\n std.join('', [std.deepJoin(x) for x in arr])\n else\n error 'Expected string or array, got %s' % std.type(arr),\n\n filterMap(filter_func, map_func, arr)::\n if !std.isFunction(filter_func) then\n error ('std.filterMap first param must be function, got ' + std.type(filter_func))\n else if !std.isFunction(map_func) then\n error ('std.filterMap second param must be function, got ' + std.type(map_func))\n else if !std.isArray(arr) then\n error ('std.filterMap third param must be array, got ' + std.type(arr))\n else\n std.map(map_func, std.filter(filter_func, arr)),\n\n assertEqual(a, b)::\n if a == b then\n true\n else\n error 'Assertion failed. ' + a + ' != ' + b,\n\n clamp(x, minVal, maxVal)::\n if x < minVal then minVal\n else if x > maxVal then maxVal\n else x,\n\n flattenArrays(arrs)::\n std.foldl(function(a, b) a + b, arrs, []),\n\n manifestIni(ini)::\n local body_lines(body) =\n std.join([], [\n local value_or_values = body[k];\n if std.isArray(value_or_values) then\n ['%s = %s' % [k, value] for value in value_or_values]\n else\n ['%s = %s' % [k, value_or_values]]\n\n for k in std.objectFields(body)\n ]);\n\n local section_lines(sname, sbody) = ['[%s]' % [sname]] + body_lines(sbody),\n main_body = if std.objectHas(ini, 'main') then body_lines(ini.main) else [],\n all_sections = [\n section_lines(k, ini.sections[k])\n for k in std.objectFields(ini.sections)\n ];\n std.join('\\n', main_body + std.flattenArrays(all_sections) + ['']),\n\n manifestToml(value):: std.manifestTomlEx(value, ' '),\n\n escapeStringPython(str)::\n std.escapeStringJson(str),\n\n escapeStringBash(str_)::\n local str = std.toString(str_);\n local trans(ch) =\n if ch == \"'\" then\n \"'\\\"'\\\"'\"\n else\n ch;\n \"'%s'\" % std.join('', [trans(ch) for ch in std.stringChars(str)]),\n\n escapeStringDollars(str_)::\n local str = std.toString(str_);\n local trans(ch) =\n if ch == '$' then\n '$$'\n else\n ch;\n std.foldl(function(a, b) a + trans(b), std.stringChars(str), ''),\n\n local xml_escapes = {\n '<': '<',\n '>': '>',\n '&': '&',\n '\"': '"',\n \"'\": ''',\n },\n\n escapeStringXML(str_)::\n local str = std.toString(str_);\n std.join('', [std.get(xml_escapes, ch, ch) for ch in std.stringChars(str)]),\n\n manifestJson(value):: std.manifestJsonEx(value, ' ') tailstrict,\n\n manifestJsonMinified(value):: std.manifestJsonEx(value, '', '', ':'),\n\n manifestYamlStream(value, indent_array_in_object=false, c_document_end=true, quote_keys=true)::\n if !std.isArray(value) then\n error 'manifestYamlStream only takes arrays, got ' + std.type(value)\n else\n '---\\n' + std.join(\n '\\n---\\n', [std.manifestYamlDoc(e, indent_array_in_object, quote_keys) for e in value]\n ) + if c_document_end then '\\n...\\n' else '\\n',\n\n manifestPython(v)::\n if std.isObject(v) then\n local fields = [\n '%s: %s' % [std.escapeStringPython(k), std.manifestPython(v[k])]\n for k in std.objectFields(v)\n ];\n '{%s}' % [std.join(', ', fields)]\n else if std.isArray(v) then\n '[%s]' % [std.join(', ', [std.manifestPython(v2) for v2 in v])]\n else if std.isString(v) then\n '%s' % [std.escapeStringPython(v)]\n else if std.isFunction(v) then\n error 'cannot manifest function'\n else if std.isNumber(v) then\n std.toString(v)\n else if v == true then\n 'True'\n else if v == false then\n 'False'\n else if v == null then\n 'None',\n\n manifestPythonVars(conf)::\n local vars = ['%s = %s' % [k, std.manifestPython(conf[k])] for k in std.objectFields(conf)];\n std.join('\\n', vars + ['']),\n\n manifestXmlJsonml(value)::\n if !std.isArray(value) then\n error 'Expected a JSONML value (an array), got %s' % std.type(value)\n else\n local aux(v) =\n if std.isString(v) then\n v\n else\n local tag = v[0];\n local has_attrs = std.length(v) > 1 && std.isObject(v[1]);\n local attrs = if has_attrs then v[1] else {};\n local children = if has_attrs then v[2:] else v[1:];\n local attrs_str =\n std.join('', [' %s=\"%s\"' % [k, attrs[k]] for k in std.objectFields(attrs)]);\n std.deepJoin(['<', tag, attrs_str, '>', [aux(x) for x in children], '</', tag, '>']);\n\n aux(value),\n\n uniq(arr, keyF=id)::\n local f(a, b) =\n if std.length(a) == 0 then\n [b]\n else if keyF(a[std.length(a) - 1]) == keyF(b) then\n a\n else\n a + [b];\n std.foldl(f, arr, []),\n\n set(arr, keyF=id)::\n std.uniq(std.sort(arr, keyF), keyF),\n\n setMember(x, arr, keyF=id)::\n // TODO(dcunnin): Binary chop for O(log n) complexity\n std.length(std.setInter([x], arr, keyF)) > 0,\n\n setUnion(a, b, keyF=id)::\n // NOTE: order matters, values in `a` win\n local aux(a, b, i, j, acc) =\n if i >= std.length(a) then\n acc + b[j:]\n else if j >= std.length(b) then\n acc + a[i:]\n else\n local ak = keyF(a[i]);\n local bk = keyF(b[j]);\n if ak == bk then\n aux(a, b, i + 1, j + 1, acc + [a[i]]) tailstrict\n else if ak < bk then\n aux(a, b, i + 1, j, acc + [a[i]]) tailstrict\n else\n aux(a, b, i, j + 1, acc + [b[j]]) tailstrict;\n aux(a, b, 0, 0, []),\n\n setInter(a, b, keyF=id)::\n local aux(a, b, i, j, acc) =\n if i >= std.length(a) || j >= std.length(b) then\n acc\n else\n if keyF(a[i]) == keyF(b[j]) then\n aux(a, b, i + 1, j + 1, acc + [a[i]]) tailstrict\n else if keyF(a[i]) < keyF(b[j]) then\n aux(a, b, i + 1, j, acc) tailstrict\n else\n aux(a, b, i, j + 1, acc) tailstrict;\n aux(a, b, 0, 0, []) tailstrict,\n\n setDiff(a, b, keyF=id)::\n local aux(a, b, i, j, acc) =\n if i >= std.length(a) then\n acc\n else if j >= std.length(b) then\n acc + a[i:]\n else\n if keyF(a[i]) == keyF(b[j]) then\n aux(a, b, i + 1, j + 1, acc) tailstrict\n else if keyF(a[i]) < keyF(b[j]) then\n aux(a, b, i + 1, j, acc + [a[i]]) tailstrict\n else\n aux(a, b, i, j + 1, acc) tailstrict;\n aux(a, b, 0, 0, []) tailstrict,\n\n mergePatch(target, patch)::\n if std.isObject(patch) then\n local target_object =\n if std.isObject(target) then target else {};\n\n local target_fields =\n if std.isObject(target_object) then std.objectFields(target_object) else [];\n\n local null_fields = [k for k in std.objectFields(patch) if patch[k] == null];\n local both_fields = std.setUnion(target_fields, std.objectFields(patch));\n\n {\n [k]:\n if !std.objectHas(patch, k) then\n target_object[k]\n else if !std.objectHas(target_object, k) then\n std.mergePatch(null, patch[k]) tailstrict\n else\n std.mergePatch(target_object[k], patch[k]) tailstrict\n for k in std.setDiff(both_fields, null_fields)\n }\n else\n patch,\n\n get(o, f, default=null, inc_hidden=true)::\n if std.objectHasEx(o, f, inc_hidden) then o[f] else default,\n\n objectFields(o)::\n std.objectFieldsEx(o, false),\n\n objectFieldsAll(o)::\n std.objectFieldsEx(o, true),\n\n objectHas(o, f)::\n std.objectHasEx(o, f, false),\n\n objectHasAll(o, f)::\n std.objectHasEx(o, f, true),\n\n objectValues(o)::\n [o[k] for k in std.objectFields(o)],\n\n objectValuesAll(o)::\n [o[k] for k in std.objectFieldsAll(o)],\n\n resolvePath(f, r)::\n local arr = std.split(f, '/');\n std.join('/', std.makeArray(std.length(arr) - 1, function(i) arr[i]) + [r]),\n\n prune(a)::\n local isContent(b) =\n if b == null then\n false\n else if std.isArray(b) then\n std.length(b) > 0\n else if std.isObject(b) then\n std.length(b) > 0\n else\n true;\n if std.isArray(a) then\n [std.prune(x) for x in a if isContent($.prune(x))]\n else if std.isObject(a) then {\n [x]: $.prune(a[x])\n for x in std.objectFields(a)\n if isContent(std.prune(a[x]))\n } else\n a,\n\n find(value, arr)::\n if !std.isArray(arr) then\n error 'find second parameter should be an array, got ' + std.type(arr)\n else\n std.filter(function(i) arr[i] == value, std.range(0, std.length(arr) - 1)),\n}\n"4---5SOURCE_FILE@0..102826 EXPR_OBJECT@0..102817 OBJ_BODY_MEMBER_LIST@0..102818 L_BRACE@0..1 "{"9 WHITESPACE@1..4 "\n "10 MEMBER_BIND_STMT@4..2011 OBJ_LOCAL@4..2012 LOCAL_KW@4..9 "local"13 WHITESPACE@9..10 " "14 BIND_DESTRUCT@10..2015 DESTRUCT_FULL@10..1316 NAME@10..1317 IDENT@10..13 "std"18 WHITESPACE@13..14 " "19 ASSIGN@14..15 "="20 WHITESPACE@15..16 " "21 EXPR_LITERAL@16..2022 SELF_KW@16..20 "self"23 COMMA@20..21 ","24 WHITESPACE@21..24 "\n "25 MEMBER_BIND_STMT@24..4126 OBJ_LOCAL@24..4127 LOCAL_KW@24..29 "local"28 WHITESPACE@29..30 " "29 BIND_DESTRUCT@30..4130 DESTRUCT_FULL@30..3231 NAME@30..3232 IDENT@30..32 "id"33 WHITESPACE@32..33 " "34 ASSIGN@33..34 "="35 WHITESPACE@34..35 " "36 EXPR_INDEX@35..4137 EXPR_VAR@35..3838 NAME@35..3839 IDENT@35..38 "std"40 DOT@38..39 "."41 NAME@39..4142 IDENT@39..41 "id"43 COMMA@41..42 ","44 WHITESPACE@42..46 "\n\n "45 MEMBER_FIELD@46..22446 FIELD_NORMAL@46..22447 FIELD_NAME_FIXED@46..5448 NAME@46..5449 IDENT@46..54 "thisFile"50 COLONCOLON@54..56 "::"51 WHITESPACE@56..57 " "52 EXPR_ERROR@57..22453 ERROR_KW@57..62 "error"54 WHITESPACE@62..63 " "55 EXPR_STRING@63..22456 STRING_SINGLE@63..224 "'std.thisFile is depr ..."57 COMMA@224..225 ","58 WHITESPACE@225..229 "\n\n "59 MEMBER_FIELD@229..24960 FIELD_METHOD@229..24961 FIELD_NAME_FIXED@229..23762 NAME@229..23763 IDENT@229..237 "toString"64 PARAMS_DESC@237..24065 L_PAREN@237..238 "("66 PARAM@238..23967 DESTRUCT_FULL@238..23968 NAME@238..23969 IDENT@238..239 "a"70 R_PAREN@239..240 ")"71 COLONCOLON@240..242 "::"72 WHITESPACE@242..243 " "73 EXPR_BINARY@243..24974 LHS_EXPR@243..24575 EXPR_STRING@243..24576 STRING_SINGLE@243..245 "''"77 WHITESPACE@245..246 " "78 PLUS@246..247 "+"79 WHITESPACE@247..248 " "80 EXPR_VAR@248..24981 NAME@248..24982 IDENT@248..249 "a"83 COMMA@249..250 ","84 WHITESPACE@250..254 "\n\n "85 MEMBER_FIELD@254..39786 FIELD_METHOD@254..39787 FIELD_NAME_FIXED@254..26588 NAME@254..26589 IDENT@254..265 "lstripChars"90 PARAMS_DESC@265..27791 L_PAREN@265..266 "("92 PARAM@266..26993 DESTRUCT_FULL@266..26994 NAME@266..26995 IDENT@266..269 "str"96 COMMA@269..270 ","97 WHITESPACE@270..271 " "98 PARAM@271..27699 DESTRUCT_FULL@271..276100 NAME@271..276101 IDENT@271..276 "chars"102 R_PAREN@276..277 ")"103 COLONCOLON@277..279 "::"104 WHITESPACE@279..284 "\n "105 EXPR_IF_THEN_ELSE@284..397106 IF_KW@284..286 "if"107 WHITESPACE@286..287 " "108 EXPR_BINARY@287..335109 LHS_EXPR@287..306110 EXPR_BINARY@287..306111 LHS_EXPR@287..302112 EXPR_APPLY@287..302113 EXPR_INDEX@287..297114 EXPR_VAR@287..290115 NAME@287..290116 IDENT@287..290 "std"117 DOT@290..291 "."118 NAME@291..297119 IDENT@291..297 "length"120 ARGS_DESC@297..302121 L_PAREN@297..298 "("122 ARG@298..301123 EXPR_VAR@298..301124 NAME@298..301125 IDENT@298..301 "str"126 R_PAREN@301..302 ")"127 WHITESPACE@302..303 " "128 GT@303..304 ">"129 WHITESPACE@304..305 " "130 EXPR_NUMBER@305..306131 FLOAT@305..306 "0"132 WHITESPACE@306..307 " "133 AND@307..309 "&&"134 WHITESPACE@309..310 " "135 EXPR_APPLY@310..335136 EXPR_INDEX@310..320137 EXPR_VAR@310..313138 NAME@310..313139 IDENT@310..313 "std"140 DOT@313..314 "."141 NAME@314..320142 IDENT@314..320 "member"143 ARGS_DESC@320..335144 L_PAREN@320..321 "("145 ARG@321..326146 EXPR_VAR@321..326147 NAME@321..326148 IDENT@321..326 "chars"149 COMMA@326..327 ","150 WHITESPACE@327..328 " "151 ARG@328..334152 EXPR_INDEX_EXPR@328..334153 LHS_EXPR@328..331154 EXPR_VAR@328..331155 NAME@328..331156 IDENT@328..331 "str"157 L_BRACK@331..332 "["158 EXPR_NUMBER@332..333159 FLOAT@332..333 "0"160 R_BRACK@333..334 "]"161 R_PAREN@334..335 ")"162 WHITESPACE@335..336 " "163 THEN_KW@336..340 "then"164 WHITESPACE@340..347 "\n "165 TRUE_EXPR@347..378166 EXPR_APPLY@347..378167 EXPR_INDEX@347..362168 EXPR_VAR@347..350169 NAME@347..350170 IDENT@347..350 "std"171 DOT@350..351 "."172 NAME@351..362173 IDENT@351..362 "lstripChars"174 ARGS_DESC@362..378175 L_PAREN@362..363 "("176 ARG@363..370177 EXPR_SLICE@363..370178 EXPR_VAR@363..366179 NAME@363..366180 IDENT@363..366 "str"181 SLICE_DESC@366..370182 L_BRACK@366..367 "["183 EXPR_NUMBER@367..368184 FLOAT@367..368 "1"185 COLON@368..369 ":"186 R_BRACK@369..370 "]"187 COMMA@370..371 ","188 WHITESPACE@371..372 " "189 ARG@372..377190 EXPR_VAR@372..377191 NAME@372..377192 IDENT@372..377 "chars"193 R_PAREN@377..378 ")"194 WHITESPACE@378..383 "\n "195 ELSE_KW@383..387 "else"196 WHITESPACE@387..394 "\n "197 FALSE_EXPR@394..397198 EXPR_VAR@394..397199 NAME@394..397200 IDENT@394..397 "str"201 COMMA@397..398 ","202 WHITESPACE@398..402 "\n\n "203 MEMBER_FIELD@402..578204 FIELD_METHOD@402..578205 FIELD_NAME_FIXED@402..413206 NAME@402..413207 IDENT@402..413 "rstripChars"208 PARAMS_DESC@413..425209 L_PAREN@413..414 "("210 PARAM@414..417211 DESTRUCT_FULL@414..417212 NAME@414..417213 IDENT@414..417 "str"214 COMMA@417..418 ","215 WHITESPACE@418..419 " "216 PARAM@419..424217 DESTRUCT_FULL@419..424218 NAME@419..424219 IDENT@419..424 "chars"220 R_PAREN@424..425 ")"221 COLONCOLON@425..427 "::"222 WHITESPACE@427..432 "\n "223 EXPR_LOCAL@432..578224 LOCAL_KW@432..437 "local"225 WHITESPACE@437..438 " "226 BIND_DESTRUCT@438..459227 DESTRUCT_FULL@438..441228 NAME@438..441229 IDENT@438..441 "len"230 WHITESPACE@441..442 " "231 ASSIGN@442..443 "="232 WHITESPACE@443..444 " "233 EXPR_APPLY@444..459234 EXPR_INDEX@444..454235 EXPR_VAR@444..447236 NAME@444..447237 IDENT@444..447 "std"238 DOT@447..448 "."239 NAME@448..454240 IDENT@448..454 "length"241 ARGS_DESC@454..459242 L_PAREN@454..455 "("243 ARG@455..458244 EXPR_VAR@455..458245 NAME@455..458246 IDENT@455..458 "str"247 R_PAREN@458..459 ")"248 SEMI@459..460 ";"249 WHITESPACE@460..465 "\n "250 EXPR_IF_THEN_ELSE@465..578251 IF_KW@465..467 "if"252 WHITESPACE@467..468 " "253 EXPR_BINARY@468..510254 LHS_EXPR@468..475255 EXPR_BINARY@468..475256 LHS_EXPR@468..471257 EXPR_VAR@468..471258 NAME@468..471259 IDENT@468..471 "len"260 WHITESPACE@471..472 " "261 GT@472..473 ">"262 WHITESPACE@473..474 " "263 EXPR_NUMBER@474..475264 FLOAT@474..475 "0"265 WHITESPACE@475..476 " "266 AND@476..478 "&&"267 WHITESPACE@478..479 " "268 EXPR_APPLY@479..510269 EXPR_INDEX@479..489270 EXPR_VAR@479..482271 NAME@479..482272 IDENT@479..482 "std"273 DOT@482..483 "."274 NAME@483..489275 IDENT@483..489 "member"276 ARGS_DESC@489..510277 L_PAREN@489..490 "("278 ARG@490..495279 EXPR_VAR@490..495280 NAME@490..495281 IDENT@490..495 "chars"282 COMMA@495..496 ","283 WHITESPACE@496..497 " "284 ARG@497..509285 EXPR_INDEX_EXPR@497..509286 LHS_EXPR@497..500287 EXPR_VAR@497..500288 NAME@497..500289 IDENT@497..500 "str"290 L_BRACK@500..501 "["291 EXPR_BINARY@501..508292 LHS_EXPR@501..504293 EXPR_VAR@501..504294 NAME@501..504295 IDENT@501..504 "len"296 WHITESPACE@504..505 " "297 MINUS@505..506 "-"298 WHITESPACE@506..507 " "299 EXPR_NUMBER@507..508300 FLOAT@507..508 "1"301 R_BRACK@508..509 "]"302 R_PAREN@509..510 ")"303 WHITESPACE@510..511 " "304 THEN_KW@511..515 "then"305 WHITESPACE@515..522 "\n "306 TRUE_EXPR@522..559307 EXPR_APPLY@522..559308 EXPR_INDEX@522..537309 EXPR_VAR@522..525310 NAME@522..525311 IDENT@522..525 "std"312 DOT@525..526 "."313 NAME@526..537314 IDENT@526..537 "rstripChars"315 ARGS_DESC@537..559316 L_PAREN@537..538 "("317 ARG@538..551318 EXPR_SLICE@538..551319 EXPR_VAR@538..541320 NAME@538..541321 IDENT@538..541 "str"322 SLICE_DESC@541..551323 L_BRACK@541..542 "["324 COLON@542..543 ":"325 SLICE_DESC_END@543..550326 EXPR_BINARY@543..550327 LHS_EXPR@543..546328 EXPR_VAR@543..546329 NAME@543..546330 IDENT@543..546 "len"331 WHITESPACE@546..547 " "332 MINUS@547..548 "-"333 WHITESPACE@548..549 " "334 EXPR_NUMBER@549..550335 FLOAT@549..550 "1"336 R_BRACK@550..551 "]"337 COMMA@551..552 ","338 WHITESPACE@552..553 " "339 ARG@553..558340 EXPR_VAR@553..558341 NAME@553..558342 IDENT@553..558 "chars"343 R_PAREN@558..559 ")"344 WHITESPACE@559..564 "\n "345 ELSE_KW@564..568 "else"346 WHITESPACE@568..575 "\n "347 FALSE_EXPR@575..578348 EXPR_VAR@575..578349 NAME@575..578350 IDENT@575..578 "str"351 COMMA@578..579 ","352 WHITESPACE@579..583 "\n\n "353 MEMBER_FIELD@583..663354 FIELD_METHOD@583..663355 FIELD_NAME_FIXED@583..593356 NAME@583..593357 IDENT@583..593 "stripChars"358 PARAMS_DESC@593..605359 L_PAREN@593..594 "("360 PARAM@594..597361 DESTRUCT_FULL@594..597362 NAME@594..597363 IDENT@594..597 "str"364 COMMA@597..598 ","365 WHITESPACE@598..599 " "366 PARAM@599..604367 DESTRUCT_FULL@599..604368 NAME@599..604369 IDENT@599..604 "chars"370 R_PAREN@604..605 ")"371 COLONCOLON@605..607 "::"372 WHITESPACE@607..612 "\n "373 EXPR_APPLY@612..663374 EXPR_INDEX@612..627375 EXPR_VAR@612..615376 NAME@612..615377 IDENT@612..615 "std"378 DOT@615..616 "."379 NAME@616..627380 IDENT@616..627 "lstripChars"381 ARGS_DESC@627..663382 L_PAREN@627..628 "("383 ARG@628..655384 EXPR_APPLY@628..655385 EXPR_INDEX@628..643386 EXPR_VAR@628..631387 NAME@628..631388 IDENT@628..631 "std"389 DOT@631..632 "."390 NAME@632..643391 IDENT@632..643 "rstripChars"392 ARGS_DESC@643..655393 L_PAREN@643..644 "("394 ARG@644..647395 EXPR_VAR@644..647396 NAME@644..647397 IDENT@644..647 "str"398 COMMA@647..648 ","399 WHITESPACE@648..649 " "400 ARG@649..654401 EXPR_VAR@649..654402 NAME@649..654403 IDENT@649..654 "chars"404 R_PAREN@654..655 ")"405 COMMA@655..656 ","406 WHITESPACE@656..657 " "407 ARG@657..662408 EXPR_VAR@657..662409 NAME@657..662410 IDENT@657..662 "chars"411 R_PAREN@662..663 ")"412 COMMA@663..664 ","413 WHITESPACE@664..668 "\n\n "414 MEMBER_FIELD@668..741415 FIELD_METHOD@668..741416 FIELD_NAME_FIXED@668..679417 NAME@668..679418 IDENT@668..679 "stringChars"419 PARAMS_DESC@679..684420 L_PAREN@679..680 "("421 PARAM@680..683422 DESTRUCT_FULL@680..683423 NAME@680..683424 IDENT@680..683 "str"425 R_PAREN@683..684 ")"426 COLONCOLON@684..686 "::"427 WHITESPACE@686..691 "\n "428 EXPR_APPLY@691..741429 EXPR_INDEX@691..704430 EXPR_VAR@691..694431 NAME@691..694432 IDENT@691..694 "std"433 DOT@694..695 "."434 NAME@695..704435 IDENT@695..704 "makeArray"436 ARGS_DESC@704..741437 L_PAREN@704..705 "("438 ARG@705..720439 EXPR_APPLY@705..720440 EXPR_INDEX@705..715441 EXPR_VAR@705..708442 NAME@705..708443 IDENT@705..708 "std"444 DOT@708..709 "."445 NAME@709..715446 IDENT@709..715 "length"447 ARGS_DESC@715..720448 L_PAREN@715..716 "("449 ARG@716..719450 EXPR_VAR@716..719451 NAME@716..719452 IDENT@716..719 "str"453 R_PAREN@719..720 ")"454 COMMA@720..721 ","455 WHITESPACE@721..722 " "456 ARG@722..740457 EXPR_FUNCTION@722..740458 FUNCTION_KW@722..730 "function"459 PARAMS_DESC@730..733460 L_PAREN@730..731 "("461 PARAM@731..732462 DESTRUCT_FULL@731..732463 NAME@731..732464 IDENT@731..732 "i"465 R_PAREN@732..733 ")"466 WHITESPACE@733..734 " "467 EXPR_INDEX_EXPR@734..740468 LHS_EXPR@734..737469 EXPR_VAR@734..737470 NAME@734..737471 IDENT@734..737 "str"472 L_BRACK@737..738 "["473 EXPR_VAR@738..739474 NAME@738..739475 IDENT@738..739 "i"476 R_BRACK@739..740 "]"477 R_PAREN@740..741 ")"478 COMMA@741..742 ","479 WHITESPACE@742..746 "\n\n "480 MEMBER_FIELD@746..1024481 FIELD_METHOD@746..1024482 FIELD_NAME_FIXED@746..757483 NAME@746..757484 IDENT@746..757 "splitLimitR"485 PARAMS_DESC@757..776486 L_PAREN@757..758 "("487 PARAM@758..761488 DESTRUCT_FULL@758..761489 NAME@758..761490 IDENT@758..761 "str"491 COMMA@761..762 ","492 WHITESPACE@762..763 " "493 PARAM@763..764494 DESTRUCT_FULL@763..764495 NAME@763..764496 IDENT@763..764 "c"497 COMMA@764..765 ","498 WHITESPACE@765..766 " "499 PARAM@766..775500 DESTRUCT_FULL@766..775501 NAME@766..775502 IDENT@766..775 "maxsplits"503 R_PAREN@775..776 ")"504 COLONCOLON@776..778 "::"505 WHITESPACE@778..783 "\n "506 EXPR_IF_THEN_ELSE@783..1024507 IF_KW@783..785 "if"508 WHITESPACE@785..786 " "509 EXPR_BINARY@786..801510 LHS_EXPR@786..795511 EXPR_VAR@786..795512 NAME@786..795513 IDENT@786..795 "maxsplits"514 WHITESPACE@795..796 " "515 EQ@796..798 "=="516 WHITESPACE@798..799 " "517 EXPR_UNARY@799..801518 MINUS@799..800 "-"519 EXPR_NUMBER@800..801520 FLOAT@800..801 "1"521 WHITESPACE@801..802 " "522 THEN_KW@802..806 "then"523 WHITESPACE@806..813 "\n "524 TRUE_EXPR@813..839525 EXPR_APPLY@813..839526 EXPR_INDEX@813..827527 EXPR_VAR@813..816528 NAME@813..816529 IDENT@813..816 "std"530 DOT@816..817 "."531 NAME@817..827532 IDENT@817..827 "splitLimit"533 ARGS_DESC@827..839534 L_PAREN@827..828 "("535 ARG@828..831536 EXPR_VAR@828..831537 NAME@828..831538 IDENT@828..831 "str"539 COMMA@831..832 ","540 WHITESPACE@832..833 " "541 ARG@833..834542 EXPR_VAR@833..834543 NAME@833..834544 IDENT@833..834 "c"545 COMMA@834..835 ","546 WHITESPACE@835..836 " "547 ARG@836..838548 EXPR_UNARY@836..838549 MINUS@836..837 "-"550 EXPR_NUMBER@837..838551 FLOAT@837..838 "1"552 R_PAREN@838..839 ")"553 WHITESPACE@839..844 "\n "554 ELSE_KW@844..848 "else"555 WHITESPACE@848..855 "\n "556 FALSE_EXPR@855..1024557 EXPR_LOCAL@855..1024558 LOCAL_KW@855..860 "local"559 WHITESPACE@860..861 " "560 BIND_FUNCTION@861..922561 NAME@861..867562 IDENT@861..867 "revStr"563 PARAMS_DESC@867..872564 L_PAREN@867..868 "("565 PARAM@868..871566 DESTRUCT_FULL@868..871567 NAME@868..871568 IDENT@868..871 "str"569 R_PAREN@871..872 ")"570 WHITESPACE@872..873 " "571 ASSIGN@873..874 "="572 WHITESPACE@874..875 " "573 EXPR_APPLY@875..922574 EXPR_INDEX@875..883575 EXPR_VAR@875..878576 NAME@875..878577 IDENT@875..878 "std"578 DOT@878..879 "."579 NAME@879..883580 IDENT@879..883 "join"581 ARGS_DESC@883..922582 L_PAREN@883..884 "("583 ARG@884..886584 EXPR_STRING@884..886585 STRING_SINGLE@884..886 "''"586 COMMA@886..887 ","587 WHITESPACE@887..888 " "588 ARG@888..921589 EXPR_APPLY@888..921590 EXPR_INDEX@888..899591 EXPR_VAR@888..891592 NAME@888..891593 IDENT@888..891 "std"594 DOT@891..892 "."595 NAME@892..899596 IDENT@892..899 "reverse"597 ARGS_DESC@899..921598 L_PAREN@899..900 "("599 ARG@900..920600 EXPR_APPLY@900..920601 EXPR_INDEX@900..915602 EXPR_VAR@900..903603 NAME@900..903604 IDENT@900..903 "std"605 DOT@903..904 "."606 NAME@904..915607 IDENT@904..915 "stringChars"608 ARGS_DESC@915..920609 L_PAREN@915..916 "("610 ARG@916..919611 EXPR_VAR@916..919612 NAME@916..919613 IDENT@916..919 "str"614 R_PAREN@919..920 ")"615 R_PAREN@920..921 ")"616 R_PAREN@921..922 ")"617 SEMI@922..923 ";"618 WHITESPACE@923..930 "\n "619 EXPR_APPLY@930..1024620 EXPR_INDEX@930..937621 EXPR_VAR@930..933622 NAME@930..933623 IDENT@930..933 "std"624 DOT@933..934 "."625 NAME@934..937626 IDENT@934..937 "map"627 ARGS_DESC@937..1024628 L_PAREN@937..938 "("629 ARG@938..959630 EXPR_FUNCTION@938..959631 FUNCTION_KW@938..946 "function"632 PARAMS_DESC@946..949633 L_PAREN@946..947 "("634 PARAM@947..948635 DESTRUCT_FULL@947..948636 NAME@947..948637 IDENT@947..948 "e"638 R_PAREN@948..949 ")"639 WHITESPACE@949..950 " "640 EXPR_APPLY@950..959641 EXPR_VAR@950..956642 NAME@950..956643 IDENT@950..956 "revStr"644 ARGS_DESC@956..959645 L_PAREN@956..957 "("646 ARG@957..958647 EXPR_VAR@957..958648 NAME@957..958649 IDENT@957..958 "e"650 R_PAREN@958..959 ")"651 COMMA@959..960 ","652 WHITESPACE@960..961 " "653 ARG@961..1023654 EXPR_APPLY@961..1023655 EXPR_INDEX@961..972656 EXPR_VAR@961..964657 NAME@961..964658 IDENT@961..964 "std"659 DOT@964..965 "."660 NAME@965..972661 IDENT@965..972 "reverse"662 ARGS_DESC@972..1023663 L_PAREN@972..973 "("664 ARG@973..1022665 EXPR_APPLY@973..1022666 EXPR_INDEX@973..987667 EXPR_VAR@973..976668 NAME@973..976669 IDENT@973..976 "std"670 DOT@976..977 "."671 NAME@977..987672 IDENT@977..987 "splitLimit"673 ARGS_DESC@987..1022674 L_PAREN@987..988 "("675 ARG@988..999676 EXPR_APPLY@988..999677 EXPR_VAR@988..994678 NAME@988..994679 IDENT@988..994 "revStr"680 ARGS_DESC@994..999681 L_PAREN@994..995 "("682 ARG@995..998683 EXPR_VAR@995..998684 NAME@995..998685 IDENT@995..998 "str"686 R_PAREN@998..999 ")"687 COMMA@999..1000 ","688 WHITESPACE@1000..1001 " "689 ARG@1001..1010690 EXPR_APPLY@1001..1010691 EXPR_VAR@1001..1007692 NAME@1001..1007693 IDENT@1001..1007 "revStr"694 ARGS_DESC@1007..1010695 L_PAREN@1007..1008 "("696 ARG@1008..1009697 EXPR_VAR@1008..1009698 NAME@1008..1009699 IDENT@1008..1009 "c"700 R_PAREN@1009..1010 ")"701 COMMA@1010..1011 ","702 WHITESPACE@1011..1012 " "703 ARG@1012..1021704 EXPR_VAR@1012..1021705 NAME@1012..1021706 IDENT@1012..1021 "maxsplits"707 R_PAREN@1021..1022 ")"708 R_PAREN@1022..1023 ")"709 R_PAREN@1023..1024 ")"710 COMMA@1024..1025 ","711 WHITESPACE@1025..1029 "\n\n "712 MEMBER_FIELD@1029..1071713 FIELD_METHOD@1029..1071714 FIELD_NAME_FIXED@1029..1034715 NAME@1029..1034716 IDENT@1029..1034 "split"717 PARAMS_DESC@1034..1042718 L_PAREN@1034..1035 "("719 PARAM@1035..1038720 DESTRUCT_FULL@1035..1038721 NAME@1035..1038722 IDENT@1035..1038 "str"723 COMMA@1038..1039 ","724 WHITESPACE@1039..1040 " "725 PARAM@1040..1041726 DESTRUCT_FULL@1040..1041727 NAME@1040..1041728 IDENT@1040..1041 "c"729 R_PAREN@1041..1042 ")"730 COLONCOLON@1042..1044 "::"731 WHITESPACE@1044..1045 " "732 EXPR_APPLY@1045..1071733 EXPR_INDEX@1045..1059734 EXPR_VAR@1045..1048735 NAME@1045..1048736 IDENT@1045..1048 "std"737 DOT@1048..1049 "."738 NAME@1049..1059739 IDENT@1049..1059 "splitLimit"740 ARGS_DESC@1059..1071741 L_PAREN@1059..1060 "("742 ARG@1060..1063743 EXPR_VAR@1060..1063744 NAME@1060..1063745 IDENT@1060..1063 "str"746 COMMA@1063..1064 ","747 WHITESPACE@1064..1065 " "748 ARG@1065..1066749 EXPR_VAR@1065..1066750 NAME@1065..1066751 IDENT@1065..1066 "c"752 COMMA@1066..1067 ","753 WHITESPACE@1067..1068 " "754 ARG@1068..1070755 EXPR_UNARY@1068..1070756 MINUS@1068..1069 "-"757 EXPR_NUMBER@1069..1070758 FLOAT@1069..1070 "1"759 R_PAREN@1070..1071 ")"760 COMMA@1071..1072 ","761 WHITESPACE@1072..1076 "\n\n "762 MEMBER_FIELD@1076..1434763 FIELD_METHOD@1076..1434764 FIELD_NAME_FIXED@1076..1088765 NAME@1076..1088766 IDENT@1076..1088 "mapWithIndex"767 PARAMS_DESC@1088..1099768 L_PAREN@1088..1089 "("769 PARAM@1089..1093770 DESTRUCT_FULL@1089..1093771 NAME@1089..1093772 IDENT@1089..1093 "func"773 COMMA@1093..1094 ","774 WHITESPACE@1094..1095 " "775 PARAM@1095..1098776 DESTRUCT_FULL@1095..1098777 NAME@1095..1098778 IDENT@1095..1098 "arr"779 R_PAREN@1098..1099 ")"780 COLONCOLON@1099..1101 "::"781 WHITESPACE@1101..1106 "\n "782 EXPR_IF_THEN_ELSE@1106..1434783 IF_KW@1106..1108 "if"784 WHITESPACE@1108..1109 " "785 EXPR_UNARY@1109..1130786 NOT@1109..1110 "!"787 EXPR_APPLY@1110..1130788 EXPR_INDEX@1110..1124789 EXPR_VAR@1110..1113790 NAME@1110..1113791 IDENT@1110..1113 "std"792 DOT@1113..1114 "."793 NAME@1114..1124794 IDENT@1114..1124 "isFunction"795 ARGS_DESC@1124..1130796 L_PAREN@1124..1125 "("797 ARG@1125..1129798 EXPR_VAR@1125..1129799 NAME@1125..1129800 IDENT@1125..1129 "func"801 R_PAREN@1129..1130 ")"802 WHITESPACE@1130..1131 " "803 THEN_KW@1131..1135 "then"804 WHITESPACE@1135..1142 "\n "805 TRUE_EXPR@1142..1220806 EXPR_ERROR@1142..1220807 ERROR_KW@1142..1147 "error"808 WHITESPACE@1147..1148 " "809 EXPR_PARENED@1148..1220810 L_PAREN@1148..1149 "("811 EXPR_BINARY@1149..1219812 LHS_EXPR@1149..1202813 EXPR_STRING@1149..1202814 STRING_SINGLE@1149..1202 "'std.mapWithIndex fir ..."815 WHITESPACE@1202..1203 " "816 PLUS@1203..1204 "+"817 WHITESPACE@1204..1205 " "818 EXPR_APPLY@1205..1219819 EXPR_INDEX@1205..1213820 EXPR_VAR@1205..1208821 NAME@1205..1208822 IDENT@1205..1208 "std"823 DOT@1208..1209 "."824 NAME@1209..1213825 IDENT@1209..1213 "type"826 ARGS_DESC@1213..1219827 L_PAREN@1213..1214 "("828 ARG@1214..1218829 EXPR_VAR@1214..1218830 NAME@1214..1218831 IDENT@1214..1218 "func"832 R_PAREN@1218..1219 ")"833 R_PAREN@1219..1220 ")"834 WHITESPACE@1220..1225 "\n "835 ELSE_KW@1225..1229 "else"836 WHITESPACE@1229..1230 " "837 FALSE_EXPR@1230..1434838 EXPR_IF_THEN_ELSE@1230..1434839 IF_KW@1230..1232 "if"840 WHITESPACE@1232..1233 " "841 EXPR_BINARY@1233..1272842 LHS_EXPR@1233..1250843 EXPR_UNARY@1233..1250844 NOT@1233..1234 "!"845 EXPR_APPLY@1234..1250846 EXPR_INDEX@1234..1245847 EXPR_VAR@1234..1237848 NAME@1234..1237849 IDENT@1234..1237 "std"850 DOT@1237..1238 "."851 NAME@1238..1245852 IDENT@1238..1245 "isArray"853 ARGS_DESC@1245..1250854 L_PAREN@1245..1246 "("855 ARG@1246..1249856 EXPR_VAR@1246..1249857 NAME@1246..1249858 IDENT@1246..1249 "arr"859 R_PAREN@1249..1250 ")"860 WHITESPACE@1250..1251 " "861 AND@1251..1253 "&&"862 WHITESPACE@1253..1254 " "863 EXPR_UNARY@1254..1272864 NOT@1254..1255 "!"865 EXPR_APPLY@1255..1272866 EXPR_INDEX@1255..1267867 EXPR_VAR@1255..1258868 NAME@1255..1258869 IDENT@1255..1258 "std"870 DOT@1258..1259 "."871 NAME@1259..1267872 IDENT@1259..1267 "isString"873 ARGS_DESC@1267..1272874 L_PAREN@1267..1268 "("875 ARG@1268..1271876 EXPR_VAR@1268..1271877 NAME@1268..1271878 IDENT@1268..1271 "arr"879 R_PAREN@1271..1272 ")"880 WHITESPACE@1272..1273 " "881 THEN_KW@1273..1277 "then"882 WHITESPACE@1277..1284 "\n "883 TRUE_EXPR@1284..1359884 EXPR_ERROR@1284..1359885 ERROR_KW@1284..1289 "error"886 WHITESPACE@1289..1290 " "887 EXPR_PARENED@1290..1359888 L_PAREN@1290..1291 "("889 EXPR_BINARY@1291..1358890 LHS_EXPR@1291..1342891 EXPR_STRING@1291..1342892 STRING_SINGLE@1291..1342 "'std.mapWithIndex sec ..."893 WHITESPACE@1342..1343 " "894 PLUS@1343..1344 "+"895 WHITESPACE@1344..1345 " "896 EXPR_APPLY@1345..1358897 EXPR_INDEX@1345..1353898 EXPR_VAR@1345..1348899 NAME@1345..1348900 IDENT@1345..1348 "std"901 DOT@1348..1349 "."902 NAME@1349..1353903 IDENT@1349..1353 "type"904 ARGS_DESC@1353..1358905 L_PAREN@1353..1354 "("906 ARG@1354..1357907 EXPR_VAR@1354..1357908 NAME@1354..1357909 IDENT@1354..1357 "arr"910 R_PAREN@1357..1358 ")"911 R_PAREN@1358..1359 ")"912 WHITESPACE@1359..1364 "\n "913 ELSE_KW@1364..1368 "else"914 WHITESPACE@1368..1375 "\n "915 FALSE_EXPR@1375..1434916 EXPR_APPLY@1375..1434917 EXPR_INDEX@1375..1388918 EXPR_VAR@1375..1378919 NAME@1375..1378920 IDENT@1375..1378 "std"921 DOT@1378..1379 "."922 NAME@1379..1388923 IDENT@1379..1388 "makeArray"924 ARGS_DESC@1388..1434925 L_PAREN@1388..1389 "("926 ARG@1389..1404927 EXPR_APPLY@1389..1404928 EXPR_INDEX@1389..1399929 EXPR_VAR@1389..1392930 NAME@1389..1392931 IDENT@1389..1392 "std"932 DOT@1392..1393 "."933 NAME@1393..1399934 IDENT@1393..1399 "length"935 ARGS_DESC@1399..1404936 L_PAREN@1399..1400 "("937 ARG@1400..1403938 EXPR_VAR@1400..1403939 NAME@1400..1403940 IDENT@1400..1403 "arr"941 R_PAREN@1403..1404 ")"942 COMMA@1404..1405 ","943 WHITESPACE@1405..1406 " "944 ARG@1406..1433945 EXPR_FUNCTION@1406..1433946 FUNCTION_KW@1406..1414 "function"947 PARAMS_DESC@1414..1417948 L_PAREN@1414..1415 "("949 PARAM@1415..1416950 DESTRUCT_FULL@1415..1416951 NAME@1415..1416952 IDENT@1415..1416 "i"953 R_PAREN@1416..1417 ")"954 WHITESPACE@1417..1418 " "955 EXPR_APPLY@1418..1433956 EXPR_VAR@1418..1422957 NAME@1418..1422958 IDENT@1418..1422 "func"959 ARGS_DESC@1422..1433960 L_PAREN@1422..1423 "("961 ARG@1423..1424962 EXPR_VAR@1423..1424963 NAME@1423..1424964 IDENT@1423..1424 "i"965 COMMA@1424..1425 ","966 WHITESPACE@1425..1426 " "967 ARG@1426..1432968 EXPR_INDEX_EXPR@1426..1432969 LHS_EXPR@1426..1429970 EXPR_VAR@1426..1429971 NAME@1426..1429972 IDENT@1426..1429 "arr"973 L_BRACK@1429..1430 "["974 EXPR_VAR@1430..1431975 NAME@1430..1431976 IDENT@1430..1431 "i"977 R_BRACK@1431..1432 "]"978 R_PAREN@1432..1433 ")"979 R_PAREN@1433..1434 ")"980 COMMA@1434..1435 ","981 WHITESPACE@1435..1439 "\n\n "982 MEMBER_FIELD@1439..1767983 FIELD_METHOD@1439..1767984 FIELD_NAME_FIXED@1439..1449985 NAME@1439..1449986 IDENT@1439..1449 "mapWithKey"987 PARAMS_DESC@1449..1460988 L_PAREN@1449..1450 "("989 PARAM@1450..1454990 DESTRUCT_FULL@1450..1454991 NAME@1450..1454992 IDENT@1450..1454 "func"993 COMMA@1454..1455 ","994 WHITESPACE@1455..1456 " "995 PARAM@1456..1459996 DESTRUCT_FULL@1456..1459997 NAME@1456..1459998 IDENT@1456..1459 "obj"999 R_PAREN@1459..1460 ")"1000 COLONCOLON@1460..1462 "::"1001 WHITESPACE@1462..1467 "\n "1002 EXPR_IF_THEN_ELSE@1467..17671003 IF_KW@1467..1469 "if"1004 WHITESPACE@1469..1470 " "1005 EXPR_UNARY@1470..14911006 NOT@1470..1471 "!"1007 EXPR_APPLY@1471..14911008 EXPR_INDEX@1471..14851009 EXPR_VAR@1471..14741010 NAME@1471..14741011 IDENT@1471..1474 "std"1012 DOT@1474..1475 "."1013 NAME@1475..14851014 IDENT@1475..1485 "isFunction"1015 ARGS_DESC@1485..14911016 L_PAREN@1485..1486 "("1017 ARG@1486..14901018 EXPR_VAR@1486..14901019 NAME@1486..14901020 IDENT@1486..1490 "func"1021 R_PAREN@1490..1491 ")"1022 WHITESPACE@1491..1492 " "1023 THEN_KW@1492..1496 "then"1024 WHITESPACE@1496..1503 "\n "1025 TRUE_EXPR@1503..15791026 EXPR_ERROR@1503..15791027 ERROR_KW@1503..1508 "error"1028 WHITESPACE@1508..1509 " "1029 EXPR_PARENED@1509..15791030 L_PAREN@1509..1510 "("1031 EXPR_BINARY@1510..15781032 LHS_EXPR@1510..15611033 EXPR_STRING@1510..15611034 STRING_SINGLE@1510..1561 "'std.mapWithKey first ..."1035 WHITESPACE@1561..1562 " "1036 PLUS@1562..1563 "+"1037 WHITESPACE@1563..1564 " "1038 EXPR_APPLY@1564..15781039 EXPR_INDEX@1564..15721040 EXPR_VAR@1564..15671041 NAME@1564..15671042 IDENT@1564..1567 "std"1043 DOT@1567..1568 "."1044 NAME@1568..15721045 IDENT@1568..1572 "type"1046 ARGS_DESC@1572..15781047 L_PAREN@1572..1573 "("1048 ARG@1573..15771049 EXPR_VAR@1573..15771050 NAME@1573..15771051 IDENT@1573..1577 "func"1052 R_PAREN@1577..1578 ")"1053 R_PAREN@1578..1579 ")"1054 WHITESPACE@1579..1584 "\n "1055 ELSE_KW@1584..1588 "else"1056 WHITESPACE@1588..1589 " "1057 FALSE_EXPR@1589..17671058 EXPR_IF_THEN_ELSE@1589..17671059 IF_KW@1589..1591 "if"1060 WHITESPACE@1591..1592 " "1061 EXPR_UNARY@1592..16101062 NOT@1592..1593 "!"1063 EXPR_APPLY@1593..16101064 EXPR_INDEX@1593..16051065 EXPR_VAR@1593..15961066 NAME@1593..15961067 IDENT@1593..1596 "std"1068 DOT@1596..1597 "."1069 NAME@1597..16051070 IDENT@1597..1605 "isObject"1071 ARGS_DESC@1605..16101072 L_PAREN@1605..1606 "("1073 ARG@1606..16091074 EXPR_VAR@1606..16091075 NAME@1606..16091076 IDENT@1606..1609 "obj"1077 R_PAREN@1609..1610 ")"1078 WHITESPACE@1610..1611 " "1079 THEN_KW@1611..1615 "then"1080 WHITESPACE@1615..1622 "\n "1081 TRUE_EXPR@1622..16961082 EXPR_ERROR@1622..16961083 ERROR_KW@1622..1627 "error"1084 WHITESPACE@1627..1628 " "1085 EXPR_PARENED@1628..16961086 L_PAREN@1628..1629 "("1087 EXPR_BINARY@1629..16951088 LHS_EXPR@1629..16791089 EXPR_STRING@1629..16791090 STRING_SINGLE@1629..1679 "'std.mapWithKey secon ..."1091 WHITESPACE@1679..1680 " "1092 PLUS@1680..1681 "+"1093 WHITESPACE@1681..1682 " "1094 EXPR_APPLY@1682..16951095 EXPR_INDEX@1682..16901096 EXPR_VAR@1682..16851097 NAME@1682..16851098 IDENT@1682..1685 "std"1099 DOT@1685..1686 "."1100 NAME@1686..16901101 IDENT@1686..1690 "type"1102 ARGS_DESC@1690..16951103 L_PAREN@1690..1691 "("1104 ARG@1691..16941105 EXPR_VAR@1691..16941106 NAME@1691..16941107 IDENT@1691..1694 "obj"1108 R_PAREN@1694..1695 ")"1109 R_PAREN@1695..1696 ")"1110 WHITESPACE@1696..1701 "\n "1111 ELSE_KW@1701..1705 "else"1112 WHITESPACE@1705..1712 "\n "1113 FALSE_EXPR@1712..17671114 EXPR_OBJECT@1712..17671115 OBJ_BODY_MEMBER_LIST@1712..17671116 L_BRACE@1712..1713 "{"1117 WHITESPACE@1713..1714 " "1118 MEMBER_FIELD@1714..17651119 FIELD_NORMAL@1714..17341120 FIELD_NAME_DYNAMIC@1714..17171121 L_BRACK@1714..1715 "["1122 EXPR_VAR@1715..17161123 NAME@1715..17161124 IDENT@1715..1716 "k"1125 R_BRACK@1716..1717 "]"1126 COLON@1717..1718 ":"1127 WHITESPACE@1718..1719 " "1128 EXPR_APPLY@1719..17341129 EXPR_VAR@1719..17231130 NAME@1719..17231131 IDENT@1719..1723 "func"1132 ARGS_DESC@1723..17341133 L_PAREN@1723..1724 "("1134 ARG@1724..17251135 EXPR_VAR@1724..17251136 NAME@1724..17251137 IDENT@1724..1725 "k"1138 COMMA@1725..1726 ","1139 WHITESPACE@1726..1727 " "1140 ARG@1727..17331141 EXPR_INDEX_EXPR@1727..17331142 LHS_EXPR@1727..17301143 EXPR_VAR@1727..17301144 NAME@1727..17301145 IDENT@1727..1730 "obj"1146 L_BRACK@1730..1731 "["1147 EXPR_VAR@1731..17321148 NAME@1731..17321149 IDENT@1731..1732 "k"1150 R_BRACK@1732..1733 "]"1151 R_PAREN@1733..1734 ")"1152 WHITESPACE@1734..1735 " "1153 FOR_SPEC@1735..17651154 FOR_KW@1735..1738 "for"1155 WHITESPACE@1738..1739 " "1156 NAME@1739..17401157 IDENT@1739..1740 "k"1158 WHITESPACE@1740..1741 " "1159 IN_KW@1741..1743 "in"1160 WHITESPACE@1743..1744 " "1161 EXPR_APPLY@1744..17651162 EXPR_INDEX@1744..17601163 EXPR_VAR@1744..17471164 NAME@1744..17471165 IDENT@1744..1747 "std"1166 DOT@1747..1748 "."1167 NAME@1748..17601168 IDENT@1748..1760 "objectFields"1169 ARGS_DESC@1760..17651170 L_PAREN@1760..1761 "("1171 ARG@1761..17641172 EXPR_VAR@1761..17641173 NAME@1761..17641174 IDENT@1761..1764 "obj"1175 R_PAREN@1764..1765 ")"1176 WHITESPACE@1765..1766 " "1177 R_BRACE@1766..1767 "}"1178 COMMA@1767..1768 ","1179 WHITESPACE@1768..1772 "\n\n "1180 MEMBER_FIELD@1772..18151181 FIELD_METHOD@1772..18151182 FIELD_NAME_FIXED@1772..17771183 NAME@1772..17771184 IDENT@1772..1777 "lines"1185 PARAMS_DESC@1777..17821186 L_PAREN@1777..1778 "("1187 PARAM@1778..17811188 DESTRUCT_FULL@1778..17811189 NAME@1778..17811190 IDENT@1778..1781 "arr"1191 R_PAREN@1781..1782 ")"1192 COLONCOLON@1782..1784 "::"1193 WHITESPACE@1784..1789 "\n "1194 EXPR_APPLY@1789..18151195 EXPR_INDEX@1789..17971196 EXPR_VAR@1789..17921197 NAME@1789..17921198 IDENT@1789..1792 "std"1199 DOT@1792..1793 "."1200 NAME@1793..17971201 IDENT@1793..1797 "join"1202 ARGS_DESC@1797..18151203 L_PAREN@1797..1798 "("1204 ARG@1798..18021205 EXPR_STRING@1798..18021206 STRING_SINGLE@1798..1802 "'\\n'"1207 COMMA@1802..1803 ","1208 WHITESPACE@1803..1804 " "1209 ARG@1804..18141210 EXPR_BINARY@1804..18141211 LHS_EXPR@1804..18071212 EXPR_VAR@1804..18071213 NAME@1804..18071214 IDENT@1804..1807 "arr"1215 WHITESPACE@1807..1808 " "1216 PLUS@1808..1809 "+"1217 WHITESPACE@1809..1810 " "1218 EXPR_ARRAY@1810..18141219 L_BRACK@1810..1811 "["1220 EXPR_STRING@1811..18131221 STRING_SINGLE@1811..1813 "''"1222 R_BRACK@1813..1814 "]"1223 R_PAREN@1814..1815 ")"1224 COMMA@1815..1816 ","1225 WHITESPACE@1816..1820 "\n\n "1226 MEMBER_FIELD@1820..20321227 FIELD_METHOD@1820..20321228 FIELD_NAME_FIXED@1820..18281229 NAME@1820..18281230 IDENT@1820..1828 "deepJoin"1231 PARAMS_DESC@1828..18331232 L_PAREN@1828..1829 "("1233 PARAM@1829..18321234 DESTRUCT_FULL@1829..18321235 NAME@1829..18321236 IDENT@1829..1832 "arr"1237 R_PAREN@1832..1833 ")"1238 COLONCOLON@1833..1835 "::"1239 WHITESPACE@1835..1840 "\n "1240 EXPR_IF_THEN_ELSE@1840..20321241 IF_KW@1840..1842 "if"1242 WHITESPACE@1842..1843 " "1243 EXPR_APPLY@1843..18601244 EXPR_INDEX@1843..18551245 EXPR_VAR@1843..18461246 NAME@1843..18461247 IDENT@1843..1846 "std"1248 DOT@1846..1847 "."1249 NAME@1847..18551250 IDENT@1847..1855 "isString"1251 ARGS_DESC@1855..18601252 L_PAREN@1855..1856 "("1253 ARG@1856..18591254 EXPR_VAR@1856..18591255 NAME@1856..18591256 IDENT@1856..1859 "arr"1257 R_PAREN@1859..1860 ")"1258 WHITESPACE@1860..1861 " "1259 THEN_KW@1861..1865 "then"1260 WHITESPACE@1865..1872 "\n "1261 TRUE_EXPR@1872..18751262 EXPR_VAR@1872..18751263 NAME@1872..18751264 IDENT@1872..1875 "arr"1265 WHITESPACE@1875..1880 "\n "1266 ELSE_KW@1880..1884 "else"1267 WHITESPACE@1884..1885 " "1268 FALSE_EXPR@1885..20321269 EXPR_IF_THEN_ELSE@1885..20321270 IF_KW@1885..1887 "if"1271 WHITESPACE@1887..1888 " "1272 EXPR_APPLY@1888..19041273 EXPR_INDEX@1888..18991274 EXPR_VAR@1888..18911275 NAME@1888..18911276 IDENT@1888..1891 "std"1277 DOT@1891..1892 "."1278 NAME@1892..18991279 IDENT@1892..1899 "isArray"1280 ARGS_DESC@1899..19041281 L_PAREN@1899..1900 "("1282 ARG@1900..19031283 EXPR_VAR@1900..19031284 NAME@1900..19031285 IDENT@1900..1903 "arr"1286 R_PAREN@1903..1904 ")"1287 WHITESPACE@1904..1905 " "1288 THEN_KW@1905..1909 "then"1289 WHITESPACE@1909..1916 "\n "1290 TRUE_EXPR@1916..19601291 EXPR_APPLY@1916..19601292 EXPR_INDEX@1916..19241293 EXPR_VAR@1916..19191294 NAME@1916..19191295 IDENT@1916..1919 "std"1296 DOT@1919..1920 "."1297 NAME@1920..19241298 IDENT@1920..1924 "join"1299 ARGS_DESC@1924..19601300 L_PAREN@1924..1925 "("1301 ARG@1925..19271302 EXPR_STRING@1925..19271303 STRING_SINGLE@1925..1927 "''"1304 COMMA@1927..1928 ","1305 WHITESPACE@1928..1929 " "1306 ARG@1929..19591307 EXPR_ARRAY_COMP@1929..19591308 L_BRACK@1929..1930 "["1309 EXPR_APPLY@1930..19451310 EXPR_INDEX@1930..19421311 EXPR_VAR@1930..19331312 NAME@1930..19331313 IDENT@1930..1933 "std"1314 DOT@1933..1934 "."1315 NAME@1934..19421316 IDENT@1934..1942 "deepJoin"1317 ARGS_DESC@1942..19451318 L_PAREN@1942..1943 "("1319 ARG@1943..19441320 EXPR_VAR@1943..19441321 NAME@1943..19441322 IDENT@1943..1944 "x"1323 R_PAREN@1944..1945 ")"1324 WHITESPACE@1945..1946 " "1325 FOR_SPEC@1946..19581326 FOR_KW@1946..1949 "for"1327 WHITESPACE@1949..1950 " "1328 NAME@1950..19511329 IDENT@1950..1951 "x"1330 WHITESPACE@1951..1952 " "1331 IN_KW@1952..1954 "in"1332 WHITESPACE@1954..1955 " "1333 EXPR_VAR@1955..19581334 NAME@1955..19581335 IDENT@1955..1958 "arr"1336 R_BRACK@1958..1959 "]"1337 R_PAREN@1959..1960 ")"1338 WHITESPACE@1960..1965 "\n "1339 ELSE_KW@1965..1969 "else"1340 WHITESPACE@1969..1976 "\n "1341 FALSE_EXPR@1976..20321342 EXPR_ERROR@1976..20321343 ERROR_KW@1976..1981 "error"1344 WHITESPACE@1981..1982 " "1345 EXPR_BINARY@1982..20321346 LHS_EXPR@1982..20161347 EXPR_STRING@1982..20161348 STRING_SINGLE@1982..2016 "'Expected string or a ..."1349 WHITESPACE@2016..2017 " "1350 MODULO@2017..2018 "%"1351 WHITESPACE@2018..2019 " "1352 EXPR_APPLY@2019..20321353 EXPR_INDEX@2019..20271354 EXPR_VAR@2019..20221355 NAME@2019..20221356 IDENT@2019..2022 "std"1357 DOT@2022..2023 "."1358 NAME@2023..20271359 IDENT@2023..2027 "type"1360 ARGS_DESC@2027..20321361 L_PAREN@2027..2028 "("1362 ARG@2028..20311363 EXPR_VAR@2028..20311364 NAME@2028..20311365 IDENT@2028..2031 "arr"1366 R_PAREN@2031..2032 ")"1367 COMMA@2032..2033 ","1368 WHITESPACE@2033..2037 "\n\n "1369 MEMBER_FIELD@2037..25121370 FIELD_METHOD@2037..25121371 FIELD_NAME_FIXED@2037..20461372 NAME@2037..20461373 IDENT@2037..2046 "filterMap"1374 PARAMS_DESC@2046..20741375 L_PAREN@2046..2047 "("1376 PARAM@2047..20581377 DESTRUCT_FULL@2047..20581378 NAME@2047..20581379 IDENT@2047..2058 "filter_func"1380 COMMA@2058..2059 ","1381 WHITESPACE@2059..2060 " "1382 PARAM@2060..20681383 DESTRUCT_FULL@2060..20681384 NAME@2060..20681385 IDENT@2060..2068 "map_func"1386 COMMA@2068..2069 ","1387 WHITESPACE@2069..2070 " "1388 PARAM@2070..20731389 DESTRUCT_FULL@2070..20731390 NAME@2070..20731391 IDENT@2070..2073 "arr"1392 R_PAREN@2073..2074 ")"1393 COLONCOLON@2074..2076 "::"1394 WHITESPACE@2076..2081 "\n "1395 EXPR_IF_THEN_ELSE@2081..25121396 IF_KW@2081..2083 "if"1397 WHITESPACE@2083..2084 " "1398 EXPR_UNARY@2084..21121399 NOT@2084..2085 "!"1400 EXPR_APPLY@2085..21121401 EXPR_INDEX@2085..20991402 EXPR_VAR@2085..20881403 NAME@2085..20881404 IDENT@2085..2088 "std"1405 DOT@2088..2089 "."1406 NAME@2089..20991407 IDENT@2089..2099 "isFunction"1408 ARGS_DESC@2099..21121409 L_PAREN@2099..2100 "("1410 ARG@2100..21111411 EXPR_VAR@2100..21111412 NAME@2100..21111413 IDENT@2100..2111 "filter_func"1414 R_PAREN@2111..2112 ")"1415 WHITESPACE@2112..2113 " "1416 THEN_KW@2113..2117 "then"1417 WHITESPACE@2117..2124 "\n "1418 TRUE_EXPR@2124..22061419 EXPR_ERROR@2124..22061420 ERROR_KW@2124..2129 "error"1421 WHITESPACE@2129..2130 " "1422 EXPR_PARENED@2130..22061423 L_PAREN@2130..2131 "("1424 EXPR_BINARY@2131..22051425 LHS_EXPR@2131..21811426 EXPR_STRING@2131..21811427 STRING_SINGLE@2131..2181 "'std.filterMap first ..."1428 WHITESPACE@2181..2182 " "1429 PLUS@2182..2183 "+"1430 WHITESPACE@2183..2184 " "1431 EXPR_APPLY@2184..22051432 EXPR_INDEX@2184..21921433 EXPR_VAR@2184..21871434 NAME@2184..21871435 IDENT@2184..2187 "std"1436 DOT@2187..2188 "."1437 NAME@2188..21921438 IDENT@2188..2192 "type"1439 ARGS_DESC@2192..22051440 L_PAREN@2192..2193 "("1441 ARG@2193..22041442 EXPR_VAR@2193..22041443 NAME@2193..22041444 IDENT@2193..2204 "filter_func"1445 R_PAREN@2204..2205 ")"1446 R_PAREN@2205..2206 ")"1447 WHITESPACE@2206..2211 "\n "1448 ELSE_KW@2211..2215 "else"1449 WHITESPACE@2215..2216 " "1450 FALSE_EXPR@2216..25121451 EXPR_IF_THEN_ELSE@2216..25121452 IF_KW@2216..2218 "if"1453 WHITESPACE@2218..2219 " "1454 EXPR_UNARY@2219..22441455 NOT@2219..2220 "!"1456 EXPR_APPLY@2220..22441457 EXPR_INDEX@2220..22341458 EXPR_VAR@2220..22231459 NAME@2220..22231460 IDENT@2220..2223 "std"1461 DOT@2223..2224 "."1462 NAME@2224..22341463 IDENT@2224..2234 "isFunction"1464 ARGS_DESC@2234..22441465 L_PAREN@2234..2235 "("1466 ARG@2235..22431467 EXPR_VAR@2235..22431468 NAME@2235..22431469 IDENT@2235..2243 "map_func"1470 R_PAREN@2243..2244 ")"1471 WHITESPACE@2244..2245 " "1472 THEN_KW@2245..2249 "then"1473 WHITESPACE@2249..2256 "\n "1474 TRUE_EXPR@2256..23361475 EXPR_ERROR@2256..23361476 ERROR_KW@2256..2261 "error"1477 WHITESPACE@2261..2262 " "1478 EXPR_PARENED@2262..23361479 L_PAREN@2262..2263 "("1480 EXPR_BINARY@2263..23351481 LHS_EXPR@2263..23141482 EXPR_STRING@2263..23141483 STRING_SINGLE@2263..2314 "'std.filterMap second ..."1484 WHITESPACE@2314..2315 " "1485 PLUS@2315..2316 "+"1486 WHITESPACE@2316..2317 " "1487 EXPR_APPLY@2317..23351488 EXPR_INDEX@2317..23251489 EXPR_VAR@2317..23201490 NAME@2317..23201491 IDENT@2317..2320 "std"1492 DOT@2320..2321 "."1493 NAME@2321..23251494 IDENT@2321..2325 "type"1495 ARGS_DESC@2325..23351496 L_PAREN@2325..2326 "("1497 ARG@2326..23341498 EXPR_VAR@2326..23341499 NAME@2326..23341500 IDENT@2326..2334 "map_func"1501 R_PAREN@2334..2335 ")"1502 R_PAREN@2335..2336 ")"1503 WHITESPACE@2336..2341 "\n "1504 ELSE_KW@2341..2345 "else"1505 WHITESPACE@2345..2346 " "1506 FALSE_EXPR@2346..25121507 EXPR_IF_THEN_ELSE@2346..25121508 IF_KW@2346..2348 "if"1509 WHITESPACE@2348..2349 " "1510 EXPR_UNARY@2349..23661511 NOT@2349..2350 "!"1512 EXPR_APPLY@2350..23661513 EXPR_INDEX@2350..23611514 EXPR_VAR@2350..23531515 NAME@2350..23531516 IDENT@2350..2353 "std"1517 DOT@2353..2354 "."1518 NAME@2354..23611519 IDENT@2354..2361 "isArray"1520 ARGS_DESC@2361..23661521 L_PAREN@2361..2362 "("1522 ARG@2362..23651523 EXPR_VAR@2362..23651524 NAME@2362..23651525 IDENT@2362..2365 "arr"1526 R_PAREN@2365..2366 ")"1527 WHITESPACE@2366..2367 " "1528 THEN_KW@2367..2371 "then"1529 WHITESPACE@2371..2378 "\n "1530 TRUE_EXPR@2378..24491531 EXPR_ERROR@2378..24491532 ERROR_KW@2378..2383 "error"1533 WHITESPACE@2383..2384 " "1534 EXPR_PARENED@2384..24491535 L_PAREN@2384..2385 "("1536 EXPR_BINARY@2385..24481537 LHS_EXPR@2385..24321538 EXPR_STRING@2385..24321539 STRING_SINGLE@2385..2432 "'std.filterMap third ..."1540 WHITESPACE@2432..2433 " "1541 PLUS@2433..2434 "+"1542 WHITESPACE@2434..2435 " "1543 EXPR_APPLY@2435..24481544 EXPR_INDEX@2435..24431545 EXPR_VAR@2435..24381546 NAME@2435..24381547 IDENT@2435..2438 "std"1548 DOT@2438..2439 "."1549 NAME@2439..24431550 IDENT@2439..2443 "type"1551 ARGS_DESC@2443..24481552 L_PAREN@2443..2444 "("1553 ARG@2444..24471554 EXPR_VAR@2444..24471555 NAME@2444..24471556 IDENT@2444..2447 "arr"1557 R_PAREN@2447..2448 ")"1558 R_PAREN@2448..2449 ")"1559 WHITESPACE@2449..2454 "\n "1560 ELSE_KW@2454..2458 "else"1561 WHITESPACE@2458..2465 "\n "1562 FALSE_EXPR@2465..25121563 EXPR_APPLY@2465..25121564 EXPR_INDEX@2465..24721565 EXPR_VAR@2465..24681566 NAME@2465..24681567 IDENT@2465..2468 "std"1568 DOT@2468..2469 "."1569 NAME@2469..24721570 IDENT@2469..2472 "map"1571 ARGS_DESC@2472..25121572 L_PAREN@2472..2473 "("1573 ARG@2473..24811574 EXPR_VAR@2473..24811575 NAME@2473..24811576 IDENT@2473..2481 "map_func"1577 COMMA@2481..2482 ","1578 WHITESPACE@2482..2483 " "1579 ARG@2483..25111580 EXPR_APPLY@2483..25111581 EXPR_INDEX@2483..24931582 EXPR_VAR@2483..24861583 NAME@2483..24861584 IDENT@2483..2486 "std"1585 DOT@2486..2487 "."1586 NAME@2487..24931587 IDENT@2487..2493 "filter"1588 ARGS_DESC@2493..25111589 L_PAREN@2493..2494 "("1590 ARG@2494..25051591 EXPR_VAR@2494..25051592 NAME@2494..25051593 IDENT@2494..2505 "filter_func"1594 COMMA@2505..2506 ","1595 WHITESPACE@2506..2507 " "1596 ARG@2507..25101597 EXPR_VAR@2507..25101598 NAME@2507..25101599 IDENT@2507..2510 "arr"1600 R_PAREN@2510..2511 ")"1601 R_PAREN@2511..2512 ")"1602 COMMA@2512..2513 ","1603 WHITESPACE@2513..2517 "\n\n "1604 MEMBER_FIELD@2517..26251605 FIELD_METHOD@2517..26251606 FIELD_NAME_FIXED@2517..25281607 NAME@2517..25281608 IDENT@2517..2528 "assertEqual"1609 PARAMS_DESC@2528..25341610 L_PAREN@2528..2529 "("1611 PARAM@2529..25301612 DESTRUCT_FULL@2529..25301613 NAME@2529..25301614 IDENT@2529..2530 "a"1615 COMMA@2530..2531 ","1616 WHITESPACE@2531..2532 " "1617 PARAM@2532..25331618 DESTRUCT_FULL@2532..25331619 NAME@2532..25331620 IDENT@2532..2533 "b"1621 R_PAREN@2533..2534 ")"1622 COLONCOLON@2534..2536 "::"1623 WHITESPACE@2536..2541 "\n "1624 EXPR_IF_THEN_ELSE@2541..26251625 IF_KW@2541..2543 "if"1626 WHITESPACE@2543..2544 " "1627 EXPR_BINARY@2544..25501628 LHS_EXPR@2544..25451629 EXPR_VAR@2544..25451630 NAME@2544..25451631 IDENT@2544..2545 "a"1632 WHITESPACE@2545..2546 " "1633 EQ@2546..2548 "=="1634 WHITESPACE@2548..2549 " "1635 EXPR_VAR@2549..25501636 NAME@2549..25501637 IDENT@2549..2550 "b"1638 WHITESPACE@2550..2551 " "1639 THEN_KW@2551..2555 "then"1640 WHITESPACE@2555..2562 "\n "1641 TRUE_EXPR@2562..25661642 EXPR_LITERAL@2562..25661643 TRUE_KW@2562..2566 "true"1644 WHITESPACE@2566..2571 "\n "1645 ELSE_KW@2571..2575 "else"1646 WHITESPACE@2575..2582 "\n "1647 FALSE_EXPR@2582..26251648 EXPR_ERROR@2582..26251649 ERROR_KW@2582..2587 "error"1650 WHITESPACE@2587..2588 " "1651 EXPR_BINARY@2588..26251652 LHS_EXPR@2588..26211653 EXPR_BINARY@2588..26211654 LHS_EXPR@2588..26121655 EXPR_BINARY@2588..26121656 LHS_EXPR@2588..26081657 EXPR_STRING@2588..26081658 STRING_SINGLE@2588..2608 "'Assertion failed. '"1659 WHITESPACE@2608..2609 " "1660 PLUS@2609..2610 "+"1661 WHITESPACE@2610..2611 " "1662 EXPR_VAR@2611..26121663 NAME@2611..26121664 IDENT@2611..2612 "a"1665 WHITESPACE@2612..2613 " "1666 PLUS@2613..2614 "+"1667 WHITESPACE@2614..2615 " "1668 EXPR_STRING@2615..26211669 STRING_SINGLE@2615..2621 "' != '"1670 WHITESPACE@2621..2622 " "1671 PLUS@2622..2623 "+"1672 WHITESPACE@2623..2624 " "1673 EXPR_VAR@2624..26251674 NAME@2624..26251675 IDENT@2624..2625 "b"1676 COMMA@2625..2626 ","1677 WHITESPACE@2626..2630 "\n\n "1678 MEMBER_FIELD@2630..27321679 FIELD_METHOD@2630..27321680 FIELD_NAME_FIXED@2630..26351681 NAME@2630..26351682 IDENT@2630..2635 "clamp"1683 PARAMS_DESC@2635..26541684 L_PAREN@2635..2636 "("1685 PARAM@2636..26371686 DESTRUCT_FULL@2636..26371687 NAME@2636..26371688 IDENT@2636..2637 "x"1689 COMMA@2637..2638 ","1690 WHITESPACE@2638..2639 " "1691 PARAM@2639..26451692 DESTRUCT_FULL@2639..26451693 NAME@2639..26451694 IDENT@2639..2645 "minVal"1695 COMMA@2645..2646 ","1696 WHITESPACE@2646..2647 " "1697 PARAM@2647..26531698 DESTRUCT_FULL@2647..26531699 NAME@2647..26531700 IDENT@2647..2653 "maxVal"1701 R_PAREN@2653..2654 ")"1702 COLONCOLON@2654..2656 "::"1703 WHITESPACE@2656..2661 "\n "1704 EXPR_IF_THEN_ELSE@2661..27321705 IF_KW@2661..2663 "if"1706 WHITESPACE@2663..2664 " "1707 EXPR_BINARY@2664..26741708 LHS_EXPR@2664..26651709 EXPR_VAR@2664..26651710 NAME@2664..26651711 IDENT@2664..2665 "x"1712 WHITESPACE@2665..2666 " "1713 LT@2666..2667 "<"1714 WHITESPACE@2667..2668 " "1715 EXPR_VAR@2668..26741716 NAME@2668..26741717 IDENT@2668..2674 "minVal"1718 WHITESPACE@2674..2675 " "1719 THEN_KW@2675..2679 "then"1720 WHITESPACE@2679..2680 " "1721 TRUE_EXPR@2680..26861722 EXPR_VAR@2680..26861723 NAME@2680..26861724 IDENT@2680..2686 "minVal"1725 WHITESPACE@2686..2691 "\n "1726 ELSE_KW@2691..2695 "else"1727 WHITESPACE@2695..2696 " "1728 FALSE_EXPR@2696..27321729 EXPR_IF_THEN_ELSE@2696..27321730 IF_KW@2696..2698 "if"1731 WHITESPACE@2698..2699 " "1732 EXPR_BINARY@2699..27091733 LHS_EXPR@2699..27001734 EXPR_VAR@2699..27001735 NAME@2699..27001736 IDENT@2699..2700 "x"1737 WHITESPACE@2700..2701 " "1738 GT@2701..2702 ">"1739 WHITESPACE@2702..2703 " "1740 EXPR_VAR@2703..27091741 NAME@2703..27091742 IDENT@2703..2709 "maxVal"1743 WHITESPACE@2709..2710 " "1744 THEN_KW@2710..2714 "then"1745 WHITESPACE@2714..2715 " "1746 TRUE_EXPR@2715..27211747 EXPR_VAR@2715..27211748 NAME@2715..27211749 IDENT@2715..2721 "maxVal"1750 WHITESPACE@2721..2726 "\n "1751 ELSE_KW@2726..2730 "else"1752 WHITESPACE@2730..2731 " "1753 FALSE_EXPR@2731..27321754 EXPR_VAR@2731..27321755 NAME@2731..27321756 IDENT@2731..2732 "x"1757 COMMA@2732..2733 ","1758 WHITESPACE@2733..2737 "\n\n "1759 MEMBER_FIELD@2737..28041760 FIELD_METHOD@2737..28041761 FIELD_NAME_FIXED@2737..27501762 NAME@2737..27501763 IDENT@2737..2750 "flattenArrays"1764 PARAMS_DESC@2750..27561765 L_PAREN@2750..2751 "("1766 PARAM@2751..27551767 DESTRUCT_FULL@2751..27551768 NAME@2751..27551769 IDENT@2751..2755 "arrs"1770 R_PAREN@2755..2756 ")"1771 COLONCOLON@2756..2758 "::"1772 WHITESPACE@2758..2763 "\n "1773 EXPR_APPLY@2763..28041774 EXPR_INDEX@2763..27721775 EXPR_VAR@2763..27661776 NAME@2763..27661777 IDENT@2763..2766 "std"1778 DOT@2766..2767 "."1779 NAME@2767..27721780 IDENT@2767..2772 "foldl"1781 ARGS_DESC@2772..28041782 L_PAREN@2772..2773 "("1783 ARG@2773..27931784 EXPR_FUNCTION@2773..27931785 FUNCTION_KW@2773..2781 "function"1786 PARAMS_DESC@2781..27871787 L_PAREN@2781..2782 "("1788 PARAM@2782..27831789 DESTRUCT_FULL@2782..27831790 NAME@2782..27831791 IDENT@2782..2783 "a"1792 COMMA@2783..2784 ","1793 WHITESPACE@2784..2785 " "1794 PARAM@2785..27861795 DESTRUCT_FULL@2785..27861796 NAME@2785..27861797 IDENT@2785..2786 "b"1798 R_PAREN@2786..2787 ")"1799 WHITESPACE@2787..2788 " "1800 EXPR_BINARY@2788..27931801 LHS_EXPR@2788..27891802 EXPR_VAR@2788..27891803 NAME@2788..27891804 IDENT@2788..2789 "a"1805 WHITESPACE@2789..2790 " "1806 PLUS@2790..2791 "+"1807 WHITESPACE@2791..2792 " "1808 EXPR_VAR@2792..27931809 NAME@2792..27931810 IDENT@2792..2793 "b"1811 COMMA@2793..2794 ","1812 WHITESPACE@2794..2795 " "1813 ARG@2795..27991814 EXPR_VAR@2795..27991815 NAME@2795..27991816 IDENT@2795..2799 "arrs"1817 COMMA@2799..2800 ","1818 WHITESPACE@2800..2801 " "1819 ARG@2801..28031820 EXPR_ARRAY@2801..28031821 L_BRACK@2801..2802 "["1822 R_BRACK@2802..2803 "]"1823 R_PAREN@2803..2804 ")"1824 COMMA@2804..2805 ","1825 WHITESPACE@2805..2809 "\n\n "1826 MEMBER_FIELD@2809..34951827 FIELD_METHOD@2809..34951828 FIELD_NAME_FIXED@2809..28201829 NAME@2809..28201830 IDENT@2809..2820 "manifestIni"1831 PARAMS_DESC@2820..28251832 L_PAREN@2820..2821 "("1833 PARAM@2821..28241834 DESTRUCT_FULL@2821..28241835 NAME@2821..28241836 IDENT@2821..2824 "ini"1837 R_PAREN@2824..2825 ")"1838 COLONCOLON@2825..2827 "::"1839 WHITESPACE@2827..2832 "\n "1840 EXPR_LOCAL@2832..34951841 LOCAL_KW@2832..2837 "local"1842 WHITESPACE@2837..2838 " "1843 BIND_FUNCTION@2838..31351844 NAME@2838..28481845 IDENT@2838..2848 "body_lines"1846 PARAMS_DESC@2848..28541847 L_PAREN@2848..2849 "("1848 PARAM@2849..28531849 DESTRUCT_FULL@2849..28531850 NAME@2849..28531851 IDENT@2849..2853 "body"1852 R_PAREN@2853..2854 ")"1853 WHITESPACE@2854..2855 " "1854 ASSIGN@2855..2856 "="1855 WHITESPACE@2856..2863 "\n "1856 EXPR_APPLY@2863..31351857 EXPR_INDEX@2863..28711858 EXPR_VAR@2863..28661859 NAME@2863..28661860 IDENT@2863..2866 "std"1861 DOT@2866..2867 "."1862 NAME@2867..28711863 IDENT@2867..2871 "join"1864 ARGS_DESC@2871..31351865 L_PAREN@2871..2872 "("1866 ARG@2872..28741867 EXPR_ARRAY@2872..28741868 L_BRACK@2872..2873 "["1869 R_BRACK@2873..2874 "]"1870 COMMA@2874..2875 ","1871 WHITESPACE@2875..2876 " "1872 ARG@2876..31341873 EXPR_ARRAY_COMP@2876..31341874 L_BRACK@2876..2877 "["1875 WHITESPACE@2877..2886 "\n "1876 EXPR_LOCAL@2886..30851877 LOCAL_KW@2886..2891 "local"1878 WHITESPACE@2891..2892 " "1879 BIND_DESTRUCT@2892..29171880 DESTRUCT_FULL@2892..29071881 NAME@2892..29071882 IDENT@2892..2907 "value_or_values"1883 WHITESPACE@2907..2908 " "1884 ASSIGN@2908..2909 "="1885 WHITESPACE@2909..2910 " "1886 EXPR_INDEX_EXPR@2910..29171887 LHS_EXPR@2910..29141888 EXPR_VAR@2910..29141889 NAME@2910..29141890 IDENT@2910..2914 "body"1891 L_BRACK@2914..2915 "["1892 EXPR_VAR@2915..29161893 NAME@2915..29161894 IDENT@2915..2916 "k"1895 R_BRACK@2916..2917 "]"1896 SEMI@2917..2918 ";"1897 WHITESPACE@2918..2927 "\n "1898 EXPR_IF_THEN_ELSE@2927..30851899 IF_KW@2927..2929 "if"1900 WHITESPACE@2929..2930 " "1901 EXPR_APPLY@2930..29581902 EXPR_INDEX@2930..29411903 EXPR_VAR@2930..29331904 NAME@2930..29331905 IDENT@2930..2933 "std"1906 DOT@2933..2934 "."1907 NAME@2934..29411908 IDENT@2934..2941 "isArray"1909 ARGS_DESC@2941..29581910 L_PAREN@2941..2942 "("1911 ARG@2942..29571912 EXPR_VAR@2942..29571913 NAME@2942..29571914 IDENT@2942..2957 "value_or_values"1915 R_PAREN@2957..2958 ")"1916 WHITESPACE@2958..2959 " "1917 THEN_KW@2959..2963 "then"1918 WHITESPACE@2963..2974 "\n "1919 TRUE_EXPR@2974..30271920 EXPR_ARRAY_COMP@2974..30271921 L_BRACK@2974..2975 "["1922 EXPR_BINARY@2975..29971923 LHS_EXPR@2975..29841924 EXPR_STRING@2975..29841925 STRING_SINGLE@2975..2984 "'%s = %s'"1926 WHITESPACE@2984..2985 " "1927 MODULO@2985..2986 "%"1928 WHITESPACE@2986..2987 " "1929 EXPR_ARRAY@2987..29971930 L_BRACK@2987..2988 "["1931 EXPR_VAR@2988..29891932 NAME@2988..29891933 IDENT@2988..2989 "k"1934 COMMA@2989..2990 ","1935 WHITESPACE@2990..2991 " "1936 EXPR_VAR@2991..29961937 NAME@2991..29961938 IDENT@2991..2996 "value"1939 R_BRACK@2996..2997 "]"1940 WHITESPACE@2997..2998 " "1941 FOR_SPEC@2998..30261942 FOR_KW@2998..3001 "for"1943 WHITESPACE@3001..3002 " "1944 NAME@3002..30071945 IDENT@3002..3007 "value"1946 WHITESPACE@3007..3008 " "1947 IN_KW@3008..3010 "in"1948 WHITESPACE@3010..3011 " "1949 EXPR_VAR@3011..30261950 NAME@3011..30261951 IDENT@3011..3026 "value_or_values"1952 R_BRACK@3026..3027 "]"1953 WHITESPACE@3027..3036 "\n "1954 ELSE_KW@3036..3040 "else"1955 WHITESPACE@3040..3051 "\n "1956 FALSE_EXPR@3051..30851957 EXPR_ARRAY@3051..30851958 L_BRACK@3051..3052 "["1959 EXPR_BINARY@3052..30841960 LHS_EXPR@3052..30611961 EXPR_STRING@3052..30611962 STRING_SINGLE@3052..3061 "'%s = %s'"1963 WHITESPACE@3061..3062 " "1964 MODULO@3062..3063 "%"1965 WHITESPACE@3063..3064 " "1966 EXPR_ARRAY@3064..30841967 L_BRACK@3064..3065 "["1968 EXPR_VAR@3065..30661969 NAME@3065..30661970 IDENT@3065..3066 "k"1971 COMMA@3066..3067 ","1972 WHITESPACE@3067..3068 " "1973 EXPR_VAR@3068..30831974 NAME@3068..30831975 IDENT@3068..3083 "value_or_values"1976 R_BRACK@3083..3084 "]"1977 R_BRACK@3084..3085 "]"1978 WHITESPACE@3085..3095 "\n\n "1979 FOR_SPEC@3095..31261980 FOR_KW@3095..3098 "for"1981 WHITESPACE@3098..3099 " "1982 NAME@3099..31001983 IDENT@3099..3100 "k"1984 WHITESPACE@3100..3101 " "1985 IN_KW@3101..3103 "in"1986 WHITESPACE@3103..3104 " "1987 EXPR_APPLY@3104..31261988 EXPR_INDEX@3104..31201989 EXPR_VAR@3104..31071990 NAME@3104..31071991 IDENT@3104..3107 "std"1992 DOT@3107..3108 "."1993 NAME@3108..31201994 IDENT@3108..3120 "objectFields"1995 ARGS_DESC@3120..31261996 L_PAREN@3120..3121 "("1997 ARG@3121..31251998 EXPR_VAR@3121..31251999 NAME@3121..31252000 IDENT@3121..3125 "body"2001 R_PAREN@3125..3126 ")"2002 WHITESPACE@3126..3133 "\n "2003 R_BRACK@3133..3134 "]"2004 R_PAREN@3134..3135 ")"2005 SEMI@3135..3136 ";"2006 WHITESPACE@3136..3142 "\n\n "2007 EXPR_LOCAL@3142..34952008 LOCAL_KW@3142..3147 "local"2009 WHITESPACE@3147..3148 " "2010 BIND_FUNCTION@3148..32162011 NAME@3148..31612012 IDENT@3148..3161 "section_lines"2013 PARAMS_DESC@3161..31752014 L_PAREN@3161..3162 "("2015 PARAM@3162..31672016 DESTRUCT_FULL@3162..31672017 NAME@3162..31672018 IDENT@3162..3167 "sname"2019 COMMA@3167..3168 ","2020 WHITESPACE@3168..3169 " "2021 PARAM@3169..31742022 DESTRUCT_FULL@3169..31742023 NAME@3169..31742024 IDENT@3169..3174 "sbody"2025 R_PAREN@3174..3175 ")"2026 WHITESPACE@3175..3176 " "2027 ASSIGN@3176..3177 "="2028 WHITESPACE@3177..3178 " "2029 EXPR_BINARY@3178..32162030 LHS_EXPR@3178..31962031 EXPR_ARRAY@3178..31962032 L_BRACK@3178..3179 "["2033 EXPR_BINARY@3179..31952034 LHS_EXPR@3179..31852035 EXPR_STRING@3179..31852036 STRING_SINGLE@3179..3185 "'[%s]'"2037 WHITESPACE@3185..3186 " "2038 MODULO@3186..3187 "%"2039 WHITESPACE@3187..3188 " "2040 EXPR_ARRAY@3188..31952041 L_BRACK@3188..3189 "["2042 EXPR_VAR@3189..31942043 NAME@3189..31942044 IDENT@3189..3194 "sname"2045 R_BRACK@3194..3195 "]"2046 R_BRACK@3195..3196 "]"2047 WHITESPACE@3196..3197 " "2048 PLUS@3197..3198 "+"2049 WHITESPACE@3198..3199 " "2050 EXPR_APPLY@3199..32162051 EXPR_VAR@3199..32092052 NAME@3199..32092053 IDENT@3199..3209 "body_lines"2054 ARGS_DESC@3209..32162055 L_PAREN@3209..3210 "("2056 ARG@3210..32152057 EXPR_VAR@3210..32152058 NAME@3210..32152059 IDENT@3210..3215 "sbody"2060 R_PAREN@3215..3216 ")"2061 COMMA@3216..3217 ","2062 WHITESPACE@3217..3228 "\n "2063 BIND_DESTRUCT@3228..33032064 DESTRUCT_FULL@3228..32372065 NAME@3228..32372066 IDENT@3228..3237 "main_body"2067 WHITESPACE@3237..3238 " "2068 ASSIGN@3238..3239 "="2069 WHITESPACE@3239..3240 " "2070 EXPR_IF_THEN_ELSE@3240..33032071 IF_KW@3240..3242 "if"2072 WHITESPACE@3242..3243 " "2073 EXPR_APPLY@3243..32692074 EXPR_INDEX@3243..32562075 EXPR_VAR@3243..32462076 NAME@3243..32462077 IDENT@3243..3246 "std"2078 DOT@3246..3247 "."2079 NAME@3247..32562080 IDENT@3247..3256 "objectHas"2081 ARGS_DESC@3256..32692082 L_PAREN@3256..3257 "("2083 ARG@3257..32602084 EXPR_VAR@3257..32602085 NAME@3257..32602086 IDENT@3257..3260 "ini"2087 COMMA@3260..3261 ","2088 WHITESPACE@3261..3262 " "2089 ARG@3262..32682090 EXPR_STRING@3262..32682091 STRING_SINGLE@3262..3268 "'main'"2092 R_PAREN@3268..3269 ")"2093 WHITESPACE@3269..3270 " "2094 THEN_KW@3270..3274 "then"2095 WHITESPACE@3274..3275 " "2096 TRUE_EXPR@3275..32952097 EXPR_APPLY@3275..32952098 EXPR_VAR@3275..32852099 NAME@3275..32852100 IDENT@3275..3285 "body_lines"2101 ARGS_DESC@3285..32952102 L_PAREN@3285..3286 "("2103 ARG@3286..32942104 EXPR_INDEX@3286..32942105 EXPR_VAR@3286..32892106 NAME@3286..32892107 IDENT@3286..3289 "ini"2108 DOT@3289..3290 "."2109 NAME@3290..32942110 IDENT@3290..3294 "main"2111 R_PAREN@3294..3295 ")"2112 WHITESPACE@3295..3296 " "2113 ELSE_KW@3296..3300 "else"2114 WHITESPACE@3300..3301 " "2115 FALSE_EXPR@3301..33032116 EXPR_ARRAY@3301..33032117 L_BRACK@3301..3302 "["2118 R_BRACK@3302..3303 "]"2119 COMMA@3303..3304 ","2120 WHITESPACE@3304..3315 "\n "2121 BIND_DESTRUCT@3315..34232122 DESTRUCT_FULL@3315..33272123 NAME@3315..33272124 IDENT@3315..3327 "all_sections"2125 WHITESPACE@3327..3328 " "2126 ASSIGN@3328..3329 "="2127 WHITESPACE@3329..3330 " "2128 EXPR_ARRAY_COMP@3330..34232129 L_BRACK@3330..3331 "["2130 WHITESPACE@3331..3338 "\n "2131 EXPR_APPLY@3338..33712132 EXPR_VAR@3338..33512133 NAME@3338..33512134 IDENT@3338..3351 "section_lines"2135 ARGS_DESC@3351..33712136 L_PAREN@3351..3352 "("2137 ARG@3352..33532138 EXPR_VAR@3352..33532139 NAME@3352..33532140 IDENT@3352..3353 "k"2141 COMMA@3353..3354 ","2142 WHITESPACE@3354..3355 " "2143 ARG@3355..33702144 EXPR_INDEX_EXPR@3355..33702145 LHS_EXPR@3355..33672146 EXPR_INDEX@3355..33672147 EXPR_VAR@3355..33582148 NAME@3355..33582149 IDENT@3355..3358 "ini"2150 DOT@3358..3359 "."2151 NAME@3359..33672152 IDENT@3359..3367 "sections"2153 L_BRACK@3367..3368 "["2154 EXPR_VAR@3368..33692155 NAME@3368..33692156 IDENT@3368..3369 "k"2157 R_BRACK@3369..3370 "]"2158 R_PAREN@3370..3371 ")"2159 WHITESPACE@3371..3378 "\n "2160 FOR_SPEC@3378..34172161 FOR_KW@3378..3381 "for"2162 WHITESPACE@3381..3382 " "2163 NAME@3382..33832164 IDENT@3382..3383 "k"2165 WHITESPACE@3383..3384 " "2166 IN_KW@3384..3386 "in"2167 WHITESPACE@3386..3387 " "2168 EXPR_APPLY@3387..34172169 EXPR_INDEX@3387..34032170 EXPR_VAR@3387..33902171 NAME@3387..33902172 IDENT@3387..3390 "std"2173 DOT@3390..3391 "."2174 NAME@3391..34032175 IDENT@3391..3403 "objectFields"2176 ARGS_DESC@3403..34172177 L_PAREN@3403..3404 "("2178 ARG@3404..34162179 EXPR_INDEX@3404..34162180 EXPR_VAR@3404..34072181 NAME@3404..34072182 IDENT@3404..3407 "ini"2183 DOT@3407..3408 "."2184 NAME@3408..34162185 IDENT@3408..3416 "sections"2186 R_PAREN@3416..3417 ")"2187 WHITESPACE@3417..3422 "\n "2188 R_BRACK@3422..3423 "]"2189 SEMI@3423..3424 ";"2190 WHITESPACE@3424..3429 "\n "2191 EXPR_APPLY@3429..34952192 EXPR_INDEX@3429..34372193 EXPR_VAR@3429..34322194 NAME@3429..34322195 IDENT@3429..3432 "std"2196 DOT@3432..3433 "."2197 NAME@3433..34372198 IDENT@3433..3437 "join"2199 ARGS_DESC@3437..34952200 L_PAREN@3437..3438 "("2201 ARG@3438..34422202 EXPR_STRING@3438..34422203 STRING_SINGLE@3438..3442 "'\\n'"2204 COMMA@3442..3443 ","2205 WHITESPACE@3443..3444 " "2206 ARG@3444..34942207 EXPR_BINARY@3444..34942208 LHS_EXPR@3444..34872209 EXPR_BINARY@3444..34872210 LHS_EXPR@3444..34532211 EXPR_VAR@3444..34532212 NAME@3444..34532213 IDENT@3444..3453 "main_body"2214 WHITESPACE@3453..3454 " "2215 PLUS@3454..3455 "+"2216 WHITESPACE@3455..3456 " "2217 EXPR_APPLY@3456..34872218 EXPR_INDEX@3456..34732219 EXPR_VAR@3456..34592220 NAME@3456..34592221 IDENT@3456..3459 "std"2222 DOT@3459..3460 "."2223 NAME@3460..34732224 IDENT@3460..3473 "flattenArrays"2225 ARGS_DESC@3473..34872226 L_PAREN@3473..3474 "("2227 ARG@3474..34862228 EXPR_VAR@3474..34862229 NAME@3474..34862230 IDENT@3474..3486 "all_sections"2231 R_PAREN@3486..3487 ")"2232 WHITESPACE@3487..3488 " "2233 PLUS@3488..3489 "+"2234 WHITESPACE@3489..3490 " "2235 EXPR_ARRAY@3490..34942236 L_BRACK@3490..3491 "["2237 EXPR_STRING@3491..34932238 STRING_SINGLE@3491..3493 "''"2239 R_BRACK@3493..3494 "]"2240 R_PAREN@3494..3495 ")"2241 COMMA@3495..3496 ","2242 WHITESPACE@3496..3500 "\n\n "2243 MEMBER_FIELD@3500..35532244 FIELD_METHOD@3500..35532245 FIELD_NAME_FIXED@3500..35122246 NAME@3500..35122247 IDENT@3500..3512 "manifestToml"2248 PARAMS_DESC@3512..35192249 L_PAREN@3512..3513 "("2250 PARAM@3513..35182251 DESTRUCT_FULL@3513..35182252 NAME@3513..35182253 IDENT@3513..3518 "value"2254 R_PAREN@3518..3519 ")"2255 COLONCOLON@3519..3521 "::"2256 WHITESPACE@3521..3522 " "2257 EXPR_APPLY@3522..35532258 EXPR_INDEX@3522..35402259 EXPR_VAR@3522..35252260 NAME@3522..35252261 IDENT@3522..3525 "std"2262 DOT@3525..3526 "."2263 NAME@3526..35402264 IDENT@3526..3540 "manifestTomlEx"2265 ARGS_DESC@3540..35532266 L_PAREN@3540..3541 "("2267 ARG@3541..35462268 EXPR_VAR@3541..35462269 NAME@3541..35462270 IDENT@3541..3546 "value"2271 COMMA@3546..3547 ","2272 WHITESPACE@3547..3548 " "2273 ARG@3548..35522274 EXPR_STRING@3548..35522275 STRING_SINGLE@3548..3552 "' '"2276 R_PAREN@3552..3553 ")"2277 COMMA@3553..3554 ","2278 WHITESPACE@3554..3558 "\n\n "2279 MEMBER_FIELD@3558..36132280 FIELD_METHOD@3558..36132281 FIELD_NAME_FIXED@3558..35762282 NAME@3558..35762283 IDENT@3558..3576 "escapeStringPython"2284 PARAMS_DESC@3576..35812285 L_PAREN@3576..3577 "("2286 PARAM@3577..35802287 DESTRUCT_FULL@3577..35802288 NAME@3577..35802289 IDENT@3577..3580 "str"2290 R_PAREN@3580..3581 ")"2291 COLONCOLON@3581..3583 "::"2292 WHITESPACE@3583..3588 "\n "2293 EXPR_APPLY@3588..36132294 EXPR_INDEX@3588..36082295 EXPR_VAR@3588..35912296 NAME@3588..35912297 IDENT@3588..3591 "std"2298 DOT@3591..3592 "."2299 NAME@3592..36082300 IDENT@3592..3608 "escapeStringJson"2301 ARGS_DESC@3608..36132302 L_PAREN@3608..3609 "("2303 ARG@3609..36122304 EXPR_VAR@3609..36122305 NAME@3609..36122306 IDENT@3609..3612 "str"2307 R_PAREN@3612..3613 ")"2308 COMMA@3613..3614 ","2309 WHITESPACE@3614..3618 "\n\n "2310 MEMBER_FIELD@3618..38352311 FIELD_METHOD@3618..38352312 FIELD_NAME_FIXED@3618..36342313 NAME@3618..36342314 IDENT@3618..3634 "escapeStringBash"2315 PARAMS_DESC@3634..36402316 L_PAREN@3634..3635 "("2317 PARAM@3635..36392318 DESTRUCT_FULL@3635..36392319 NAME@3635..36392320 IDENT@3635..3639 "str_"2321 R_PAREN@3639..3640 ")"2322 COLONCOLON@3640..3642 "::"2323 WHITESPACE@3642..3647 "\n "2324 EXPR_LOCAL@3647..38352325 LOCAL_KW@3647..3652 "local"2326 WHITESPACE@3652..3653 " "2327 BIND_DESTRUCT@3653..36772328 DESTRUCT_FULL@3653..36562329 NAME@3653..36562330 IDENT@3653..3656 "str"2331 WHITESPACE@3656..3657 " "2332 ASSIGN@3657..3658 "="2333 WHITESPACE@3658..3659 " "2334 EXPR_APPLY@3659..36772335 EXPR_INDEX@3659..36712336 EXPR_VAR@3659..36622337 NAME@3659..36622338 IDENT@3659..3662 "std"2339 DOT@3662..3663 "."2340 NAME@3663..36712341 IDENT@3663..3671 "toString"2342 ARGS_DESC@3671..36772343 L_PAREN@3671..3672 "("2344 ARG@3672..36762345 EXPR_VAR@3672..36762346 NAME@3672..36762347 IDENT@3672..3676 "str_"2348 R_PAREN@3676..3677 ")"2349 SEMI@3677..3678 ";"2350 WHITESPACE@3678..3683 "\n "2351 EXPR_LOCAL@3683..38352352 LOCAL_KW@3683..3688 "local"2353 WHITESPACE@3688..3689 " "2354 BIND_FUNCTION@3689..37642355 NAME@3689..36942356 IDENT@3689..3694 "trans"2357 PARAMS_DESC@3694..36982358 L_PAREN@3694..3695 "("2359 PARAM@3695..36972360 DESTRUCT_FULL@3695..36972361 NAME@3695..36972362 IDENT@3695..3697 "ch"2363 R_PAREN@3697..3698 ")"2364 WHITESPACE@3698..3699 " "2365 ASSIGN@3699..3700 "="2366 WHITESPACE@3700..3707 "\n "2367 EXPR_IF_THEN_ELSE@3707..37642368 IF_KW@3707..3709 "if"2369 WHITESPACE@3709..3710 " "2370 EXPR_BINARY@3710..37192371 LHS_EXPR@3710..37122372 EXPR_VAR@3710..37122373 NAME@3710..37122374 IDENT@3710..3712 "ch"2375 WHITESPACE@3712..3713 " "2376 EQ@3713..3715 "=="2377 WHITESPACE@3715..3716 " "2378 EXPR_STRING@3716..37192379 STRING_DOUBLE@3716..3719 "\"'\""2380 WHITESPACE@3719..3720 " "2381 THEN_KW@3720..3724 "then"2382 WHITESPACE@3724..3733 "\n "2383 TRUE_EXPR@3733..37422384 EXPR_STRING@3733..37422385 STRING_DOUBLE@3733..3742 "\"'\\\"'\\\"'\""2386 WHITESPACE@3742..3749 "\n "2387 ELSE_KW@3749..3753 "else"2388 WHITESPACE@3753..3762 "\n "2389 FALSE_EXPR@3762..37642390 EXPR_VAR@3762..37642391 NAME@3762..37642392 IDENT@3762..3764 "ch"2393 SEMI@3764..3765 ";"2394 WHITESPACE@3765..3770 "\n "2395 EXPR_BINARY@3770..38352396 LHS_EXPR@3770..37762397 EXPR_STRING@3770..37762398 STRING_DOUBLE@3770..3776 "\"'%s'\""2399 WHITESPACE@3776..3777 " "2400 MODULO@3777..3778 "%"2401 WHITESPACE@3778..3779 " "2402 EXPR_APPLY@3779..38352403 EXPR_INDEX@3779..37872404 EXPR_VAR@3779..37822405 NAME@3779..37822406 IDENT@3779..3782 "std"2407 DOT@3782..3783 "."2408 NAME@3783..37872409 IDENT@3783..3787 "join"2410 ARGS_DESC@3787..38352411 L_PAREN@3787..3788 "("2412 ARG@3788..37902413 EXPR_STRING@3788..37902414 STRING_SINGLE@3788..3790 "''"2415 COMMA@3790..3791 ","2416 WHITESPACE@3791..3792 " "2417 ARG@3792..38342418 EXPR_ARRAY_COMP@3792..38342419 L_BRACK@3792..3793 "["2420 EXPR_APPLY@3793..38022421 EXPR_VAR@3793..37982422 NAME@3793..37982423 IDENT@3793..3798 "trans"2424 ARGS_DESC@3798..38022425 L_PAREN@3798..3799 "("2426 ARG@3799..38012427 EXPR_VAR@3799..38012428 NAME@3799..38012429 IDENT@3799..3801 "ch"2430 R_PAREN@3801..3802 ")"2431 WHITESPACE@3802..3803 " "2432 FOR_SPEC@3803..38332433 FOR_KW@3803..3806 "for"2434 WHITESPACE@3806..3807 " "2435 NAME@3807..38092436 IDENT@3807..3809 "ch"2437 WHITESPACE@3809..3810 " "2438 IN_KW@3810..3812 "in"2439 WHITESPACE@3812..3813 " "2440 EXPR_APPLY@3813..38332441 EXPR_INDEX@3813..38282442 EXPR_VAR@3813..38162443 NAME@3813..38162444 IDENT@3813..3816 "std"2445 DOT@3816..3817 "."2446 NAME@3817..38282447 IDENT@3817..3828 "stringChars"2448 ARGS_DESC@3828..38332449 L_PAREN@3828..3829 "("2450 ARG@3829..38322451 EXPR_VAR@3829..38322452 NAME@3829..38322453 IDENT@3829..3832 "str"2454 R_PAREN@3832..3833 ")"2455 R_BRACK@3833..3834 "]"2456 R_PAREN@3834..3835 ")"2457 COMMA@3835..3836 ","2458 WHITESPACE@3836..3840 "\n\n "2459 MEMBER_FIELD@3840..40542460 FIELD_METHOD@3840..40542461 FIELD_NAME_FIXED@3840..38592462 NAME@3840..38592463 IDENT@3840..3859 "escapeStringDollars"2464 PARAMS_DESC@3859..38652465 L_PAREN@3859..3860 "("2466 PARAM@3860..38642467 DESTRUCT_FULL@3860..38642468 NAME@3860..38642469 IDENT@3860..3864 "str_"2470 R_PAREN@3864..3865 ")"2471 COLONCOLON@3865..3867 "::"2472 WHITESPACE@3867..3872 "\n "2473 EXPR_LOCAL@3872..40542474 LOCAL_KW@3872..3877 "local"2475 WHITESPACE@3877..3878 " "2476 BIND_DESTRUCT@3878..39022477 DESTRUCT_FULL@3878..38812478 NAME@3878..38812479 IDENT@3878..3881 "str"2480 WHITESPACE@3881..3882 " "2481 ASSIGN@3882..3883 "="2482 WHITESPACE@3883..3884 " "2483 EXPR_APPLY@3884..39022484 EXPR_INDEX@3884..38962485 EXPR_VAR@3884..38872486 NAME@3884..38872487 IDENT@3884..3887 "std"2488 DOT@3887..3888 "."2489 NAME@3888..38962490 IDENT@3888..3896 "toString"2491 ARGS_DESC@3896..39022492 L_PAREN@3896..3897 "("2493 ARG@3897..39012494 EXPR_VAR@3897..39012495 NAME@3897..39012496 IDENT@3897..3901 "str_"2497 R_PAREN@3901..3902 ")"2498 SEMI@3902..3903 ";"2499 WHITESPACE@3903..3908 "\n "2500 EXPR_LOCAL@3908..40542501 LOCAL_KW@3908..3913 "local"2502 WHITESPACE@3913..3914 " "2503 BIND_FUNCTION@3914..39842504 NAME@3914..39192505 IDENT@3914..3919 "trans"2506 PARAMS_DESC@3919..39232507 L_PAREN@3919..3920 "("2508 PARAM@3920..39222509 DESTRUCT_FULL@3920..39222510 NAME@3920..39222511 IDENT@3920..3922 "ch"2512 R_PAREN@3922..3923 ")"2513 WHITESPACE@3923..3924 " "2514 ASSIGN@3924..3925 "="2515 WHITESPACE@3925..3932 "\n "2516 EXPR_IF_THEN_ELSE@3932..39842517 IF_KW@3932..3934 "if"2518 WHITESPACE@3934..3935 " "2519 EXPR_BINARY@3935..39442520 LHS_EXPR@3935..39372521 EXPR_VAR@3935..39372522 NAME@3935..39372523 IDENT@3935..3937 "ch"2524 WHITESPACE@3937..3938 " "2525 EQ@3938..3940 "=="2526 WHITESPACE@3940..3941 " "2527 EXPR_STRING@3941..39442528 STRING_SINGLE@3941..3944 "'$'"2529 WHITESPACE@3944..3945 " "2530 THEN_KW@3945..3949 "then"2531 WHITESPACE@3949..3958 "\n "2532 TRUE_EXPR@3958..39622533 EXPR_STRING@3958..39622534 STRING_SINGLE@3958..3962 "'$$'"2535 WHITESPACE@3962..3969 "\n "2536 ELSE_KW@3969..3973 "else"2537 WHITESPACE@3973..3982 "\n "2538 FALSE_EXPR@3982..39842539 EXPR_VAR@3982..39842540 NAME@3982..39842541 IDENT@3982..3984 "ch"2542 SEMI@3984..3985 ";"2543 WHITESPACE@3985..3990 "\n "2544 EXPR_APPLY@3990..40542545 EXPR_INDEX@3990..39992546 EXPR_VAR@3990..39932547 NAME@3990..39932548 IDENT@3990..3993 "std"2549 DOT@3993..3994 "."2550 NAME@3994..39992551 IDENT@3994..3999 "foldl"2552 ARGS_DESC@3999..40542553 L_PAREN@3999..4000 "("2554 ARG@4000..40272555 EXPR_FUNCTION@4000..40272556 FUNCTION_KW@4000..4008 "function"2557 PARAMS_DESC@4008..40142558 L_PAREN@4008..4009 "("2559 PARAM@4009..40102560 DESTRUCT_FULL@4009..40102561 NAME@4009..40102562 IDENT@4009..4010 "a"2563 COMMA@4010..4011 ","2564 WHITESPACE@4011..4012 " "2565 PARAM@4012..40132566 DESTRUCT_FULL@4012..40132567 NAME@4012..40132568 IDENT@4012..4013 "b"2569 R_PAREN@4013..4014 ")"2570 WHITESPACE@4014..4015 " "2571 EXPR_BINARY@4015..40272572 LHS_EXPR@4015..40162573 EXPR_VAR@4015..40162574 NAME@4015..40162575 IDENT@4015..4016 "a"2576 WHITESPACE@4016..4017 " "2577 PLUS@4017..4018 "+"2578 WHITESPACE@4018..4019 " "2579 EXPR_APPLY@4019..40272580 EXPR_VAR@4019..40242581 NAME@4019..40242582 IDENT@4019..4024 "trans"2583 ARGS_DESC@4024..40272584 L_PAREN@4024..4025 "("2585 ARG@4025..40262586 EXPR_VAR@4025..40262587 NAME@4025..40262588 IDENT@4025..4026 "b"2589 R_PAREN@4026..4027 ")"2590 COMMA@4027..4028 ","2591 WHITESPACE@4028..4029 " "2592 ARG@4029..40492593 EXPR_APPLY@4029..40492594 EXPR_INDEX@4029..40442595 EXPR_VAR@4029..40322596 NAME@4029..40322597 IDENT@4029..4032 "std"2598 DOT@4032..4033 "."2599 NAME@4033..40442600 IDENT@4033..4044 "stringChars"2601 ARGS_DESC@4044..40492602 L_PAREN@4044..4045 "("2603 ARG@4045..40482604 EXPR_VAR@4045..40482605 NAME@4045..40482606 IDENT@4045..4048 "str"2607 R_PAREN@4048..4049 ")"2608 COMMA@4049..4050 ","2609 WHITESPACE@4050..4051 " "2610 ARG@4051..40532611 EXPR_STRING@4051..40532612 STRING_SINGLE@4051..4053 "''"2613 R_PAREN@4053..4054 ")"2614 COMMA@4054..4055 ","2615 WHITESPACE@4055..4059 "\n\n "2616 MEMBER_BIND_STMT@4059..41742617 OBJ_LOCAL@4059..41742618 LOCAL_KW@4059..4064 "local"2619 WHITESPACE@4064..4065 " "2620 BIND_DESTRUCT@4065..41742621 DESTRUCT_FULL@4065..40762622 NAME@4065..40762623 IDENT@4065..4076 "xml_escapes"2624 WHITESPACE@4076..4077 " "2625 ASSIGN@4077..4078 "="2626 WHITESPACE@4078..4079 " "2627 EXPR_OBJECT@4079..41742628 OBJ_BODY_MEMBER_LIST@4079..41742629 L_BRACE@4079..4080 "{"2630 WHITESPACE@4080..4085 "\n "2631 MEMBER_FIELD@4085..40962632 FIELD_NORMAL@4085..40962633 FIELD_NAME_FIXED@4085..40882634 STRING_SINGLE@4085..4088 "'<'"2635 COLON@4088..4089 ":"2636 WHITESPACE@4089..4090 " "2637 EXPR_STRING@4090..40962638 STRING_SINGLE@4090..4096 "'<'"2639 COMMA@4096..4097 ","2640 WHITESPACE@4097..4102 "\n "2641 MEMBER_FIELD@4102..41132642 FIELD_NORMAL@4102..41132643 FIELD_NAME_FIXED@4102..41052644 STRING_SINGLE@4102..4105 "'>'"2645 COLON@4105..4106 ":"2646 WHITESPACE@4106..4107 " "2647 EXPR_STRING@4107..41132648 STRING_SINGLE@4107..4113 "'>'"2649 COMMA@4113..4114 ","2650 WHITESPACE@4114..4119 "\n "2651 MEMBER_FIELD@4119..41312652 FIELD_NORMAL@4119..41312653 FIELD_NAME_FIXED@4119..41222654 STRING_SINGLE@4119..4122 "'&'"2655 COLON@4122..4123 ":"2656 WHITESPACE@4123..4124 " "2657 EXPR_STRING@4124..41312658 STRING_SINGLE@4124..4131 "'&'"2659 COMMA@4131..4132 ","2660 WHITESPACE@4132..4137 "\n "2661 MEMBER_FIELD@4137..41502662 FIELD_NORMAL@4137..41502663 FIELD_NAME_FIXED@4137..41402664 STRING_SINGLE@4137..4140 "'\"'"2665 COLON@4140..4141 ":"2666 WHITESPACE@4141..4142 " "2667 EXPR_STRING@4142..41502668 STRING_SINGLE@4142..4150 "'"'"2669 COMMA@4150..4151 ","2670 WHITESPACE@4151..4156 "\n "2671 MEMBER_FIELD@4156..41692672 FIELD_NORMAL@4156..41692673 FIELD_NAME_FIXED@4156..41592674 STRING_DOUBLE@4156..4159 "\"'\""2675 COLON@4159..4160 ":"2676 WHITESPACE@4160..4161 " "2677 EXPR_STRING@4161..41692678 STRING_SINGLE@4161..4169 "'''"2679 COMMA@4169..4170 ","2680 WHITESPACE@4170..4173 "\n "2681 R_BRACE@4173..4174 "}"2682 COMMA@4174..4175 ","2683 WHITESPACE@4175..4179 "\n\n "2684 MEMBER_FIELD@4179..43182685 FIELD_METHOD@4179..43182686 FIELD_NAME_FIXED@4179..41942687 NAME@4179..41942688 IDENT@4179..4194 "escapeStringXML"2689 PARAMS_DESC@4194..42002690 L_PAREN@4194..4195 "("2691 PARAM@4195..41992692 DESTRUCT_FULL@4195..41992693 NAME@4195..41992694 IDENT@4195..4199 "str_"2695 R_PAREN@4199..4200 ")"2696 COLONCOLON@4200..4202 "::"2697 WHITESPACE@4202..4207 "\n "2698 EXPR_LOCAL@4207..43182699 LOCAL_KW@4207..4212 "local"2700 WHITESPACE@4212..4213 " "2701 BIND_DESTRUCT@4213..42372702 DESTRUCT_FULL@4213..42162703 NAME@4213..42162704 IDENT@4213..4216 "str"2705 WHITESPACE@4216..4217 " "2706 ASSIGN@4217..4218 "="2707 WHITESPACE@4218..4219 " "2708 EXPR_APPLY@4219..42372709 EXPR_INDEX@4219..42312710 EXPR_VAR@4219..42222711 NAME@4219..42222712 IDENT@4219..4222 "std"2713 DOT@4222..4223 "."2714 NAME@4223..42312715 IDENT@4223..4231 "toString"2716 ARGS_DESC@4231..42372717 L_PAREN@4231..4232 "("2718 ARG@4232..42362719 EXPR_VAR@4232..42362720 NAME@4232..42362721 IDENT@4232..4236 "str_"2722 R_PAREN@4236..4237 ")"2723 SEMI@4237..4238 ";"2724 WHITESPACE@4238..4243 "\n "2725 EXPR_APPLY@4243..43182726 EXPR_INDEX@4243..42512727 EXPR_VAR@4243..42462728 NAME@4243..42462729 IDENT@4243..4246 "std"2730 DOT@4246..4247 "."2731 NAME@4247..42512732 IDENT@4247..4251 "join"2733 ARGS_DESC@4251..43182734 L_PAREN@4251..4252 "("2735 ARG@4252..42542736 EXPR_STRING@4252..42542737 STRING_SINGLE@4252..4254 "''"2738 COMMA@4254..4255 ","2739 WHITESPACE@4255..4256 " "2740 ARG@4256..43172741 EXPR_ARRAY_COMP@4256..43172742 L_BRACK@4256..4257 "["2743 EXPR_APPLY@4257..42852744 EXPR_INDEX@4257..42642745 EXPR_VAR@4257..42602746 NAME@4257..42602747 IDENT@4257..4260 "std"2748 DOT@4260..4261 "."2749 NAME@4261..42642750 IDENT@4261..4264 "get"2751 ARGS_DESC@4264..42852752 L_PAREN@4264..4265 "("2753 ARG@4265..42762754 EXPR_VAR@4265..42762755 NAME@4265..42762756 IDENT@4265..4276 "xml_escapes"2757 COMMA@4276..4277 ","2758 WHITESPACE@4277..4278 " "2759 ARG@4278..42802760 EXPR_VAR@4278..42802761 NAME@4278..42802762 IDENT@4278..4280 "ch"2763 COMMA@4280..4281 ","2764 WHITESPACE@4281..4282 " "2765 ARG@4282..42842766 EXPR_VAR@4282..42842767 NAME@4282..42842768 IDENT@4282..4284 "ch"2769 R_PAREN@4284..4285 ")"2770 WHITESPACE@4285..4286 " "2771 FOR_SPEC@4286..43162772 FOR_KW@4286..4289 "for"2773 WHITESPACE@4289..4290 " "2774 NAME@4290..42922775 IDENT@4290..4292 "ch"2776 WHITESPACE@4292..4293 " "2777 IN_KW@4293..4295 "in"2778 WHITESPACE@4295..4296 " "2779 EXPR_APPLY@4296..43162780 EXPR_INDEX@4296..43112781 EXPR_VAR@4296..42992782 NAME@4296..42992783 IDENT@4296..4299 "std"2784 DOT@4299..4300 "."2785 NAME@4300..43112786 IDENT@4300..4311 "stringChars"2787 ARGS_DESC@4311..43162788 L_PAREN@4311..4312 "("2789 ARG@4312..43152790 EXPR_VAR@4312..43152791 NAME@4312..43152792 IDENT@4312..4315 "str"2793 R_PAREN@4315..4316 ")"2794 R_BRACK@4316..4317 "]"2795 R_PAREN@4317..4318 ")"2796 COMMA@4318..4319 ","2797 WHITESPACE@4319..4323 "\n\n "2798 MEMBER_FIELD@4323..43892799 FIELD_METHOD@4323..43892800 FIELD_NAME_FIXED@4323..43352801 NAME@4323..43352802 IDENT@4323..4335 "manifestJson"2803 PARAMS_DESC@4335..43422804 L_PAREN@4335..4336 "("2805 PARAM@4336..43412806 DESTRUCT_FULL@4336..43412807 NAME@4336..43412808 IDENT@4336..4341 "value"2809 R_PAREN@4341..4342 ")"2810 COLONCOLON@4342..4344 "::"2811 WHITESPACE@4344..4345 " "2812 EXPR_APPLY@4345..43892813 EXPR_INDEX@4345..43632814 EXPR_VAR@4345..43482815 NAME@4345..43482816 IDENT@4345..4348 "std"2817 DOT@4348..4349 "."2818 NAME@4349..43632819 IDENT@4349..4363 "manifestJsonEx"2820 ARGS_DESC@4363..43892821 L_PAREN@4363..4364 "("2822 ARG@4364..43692823 EXPR_VAR@4364..43692824 NAME@4364..43692825 IDENT@4364..4369 "value"2826 COMMA@4369..4370 ","2827 WHITESPACE@4370..4371 " "2828 ARG@4371..43772829 EXPR_STRING@4371..43772830 STRING_SINGLE@4371..4377 "' '"2831 R_PAREN@4377..4378 ")"2832 WHITESPACE@4378..4379 " "2833 TAILSTRICT_KW@4379..4389 "tailstrict"2834 COMMA@4389..4390 ","2835 WHITESPACE@4390..4394 "\n\n "2836 MEMBER_FIELD@4394..44622837 FIELD_METHOD@4394..44622838 FIELD_NAME_FIXED@4394..44142839 NAME@4394..44142840 IDENT@4394..4414 "manifestJsonMinified"2841 PARAMS_DESC@4414..44212842 L_PAREN@4414..4415 "("2843 PARAM@4415..44202844 DESTRUCT_FULL@4415..44202845 NAME@4415..44202846 IDENT@4415..4420 "value"2847 R_PAREN@4420..4421 ")"2848 COLONCOLON@4421..4423 "::"2849 WHITESPACE@4423..4424 " "2850 EXPR_APPLY@4424..44622851 EXPR_INDEX@4424..44422852 EXPR_VAR@4424..44272853 NAME@4424..44272854 IDENT@4424..4427 "std"2855 DOT@4427..4428 "."2856 NAME@4428..44422857 IDENT@4428..4442 "manifestJsonEx"2858 ARGS_DESC@4442..44622859 L_PAREN@4442..4443 "("2860 ARG@4443..44482861 EXPR_VAR@4443..44482862 NAME@4443..44482863 IDENT@4443..4448 "value"2864 COMMA@4448..4449 ","2865 WHITESPACE@4449..4450 " "2866 ARG@4450..44522867 EXPR_STRING@4450..44522868 STRING_SINGLE@4450..4452 "''"2869 COMMA@4452..4453 ","2870 WHITESPACE@4453..4454 " "2871 ARG@4454..44562872 EXPR_STRING@4454..44562873 STRING_SINGLE@4454..4456 "''"2874 COMMA@4456..4457 ","2875 WHITESPACE@4457..4458 " "2876 ARG@4458..44612877 EXPR_STRING@4458..44612878 STRING_SINGLE@4458..4461 "':'"2879 R_PAREN@4461..4462 ")"2880 COMMA@4462..4463 ","2881 WHITESPACE@4463..4467 "\n\n "2882 MEMBER_FIELD@4467..48522883 FIELD_METHOD@4467..48522884 FIELD_NAME_FIXED@4467..44852885 NAME@4467..44852886 IDENT@4467..4485 "manifestYamlStream"2887 PARAMS_DESC@4485..45602888 L_PAREN@4485..4486 "("2889 PARAM@4486..44912890 DESTRUCT_FULL@4486..44912891 NAME@4486..44912892 IDENT@4486..4491 "value"2893 COMMA@4491..4492 ","2894 WHITESPACE@4492..4493 " "2895 PARAM@4493..45212896 DESTRUCT_FULL@4493..45152897 NAME@4493..45152898 IDENT@4493..4515 "indent_array_in_object"2899 ASSIGN@4515..4516 "="2900 EXPR_LITERAL@4516..45212901 FALSE_KW@4516..4521 "false"2902 COMMA@4521..4522 ","2903 WHITESPACE@4522..4523 " "2904 PARAM@4523..45422905 DESTRUCT_FULL@4523..45372906 NAME@4523..45372907 IDENT@4523..4537 "c_document_end"2908 ASSIGN@4537..4538 "="2909 EXPR_LITERAL@4538..45422910 TRUE_KW@4538..4542 "true"2911 COMMA@4542..4543 ","2912 WHITESPACE@4543..4544 " "2913 PARAM@4544..45592914 DESTRUCT_FULL@4544..45542915 NAME@4544..45542916 IDENT@4544..4554 "quote_keys"2917 ASSIGN@4554..4555 "="2918 EXPR_LITERAL@4555..45592919 TRUE_KW@4555..4559 "true"2920 R_PAREN@4559..4560 ")"2921 COLONCOLON@4560..4562 "::"2922 WHITESPACE@4562..4567 "\n "2923 EXPR_IF_THEN_ELSE@4567..48522924 IF_KW@4567..4569 "if"2925 WHITESPACE@4569..4570 " "2926 EXPR_UNARY@4570..45892927 NOT@4570..4571 "!"2928 EXPR_APPLY@4571..45892929 EXPR_INDEX@4571..45822930 EXPR_VAR@4571..45742931 NAME@4571..45742932 IDENT@4571..4574 "std"2933 DOT@4574..4575 "."2934 NAME@4575..45822935 IDENT@4575..4582 "isArray"2936 ARGS_DESC@4582..45892937 L_PAREN@4582..4583 "("2938 ARG@4583..45882939 EXPR_VAR@4583..45882940 NAME@4583..45882941 IDENT@4583..4588 "value"2942 R_PAREN@4588..4589 ")"2943 WHITESPACE@4589..4590 " "2944 THEN_KW@4590..4594 "then"2945 WHITESPACE@4594..4601 "\n "2946 TRUE_EXPR@4601..46692947 EXPR_ERROR@4601..46692948 ERROR_KW@4601..4606 "error"2949 WHITESPACE@4606..4607 " "2950 EXPR_BINARY@4607..46692951 LHS_EXPR@4607..46512952 EXPR_STRING@4607..46512953 STRING_SINGLE@4607..4651 "'manifestYamlStream o ..."2954 WHITESPACE@4651..4652 " "2955 PLUS@4652..4653 "+"2956 WHITESPACE@4653..4654 " "2957 EXPR_APPLY@4654..46692958 EXPR_INDEX@4654..46622959 EXPR_VAR@4654..46572960 NAME@4654..46572961 IDENT@4654..4657 "std"2962 DOT@4657..4658 "."2963 NAME@4658..46622964 IDENT@4658..4662 "type"2965 ARGS_DESC@4662..46692966 L_PAREN@4662..4663 "("2967 ARG@4663..46682968 EXPR_VAR@4663..46682969 NAME@4663..46682970 IDENT@4663..4668 "value"2971 R_PAREN@4668..4669 ")"2972 WHITESPACE@4669..4674 "\n "2973 ELSE_KW@4674..4678 "else"2974 WHITESPACE@4678..4685 "\n "2975 FALSE_EXPR@4685..48522976 EXPR_BINARY@4685..48522977 LHS_EXPR@4685..48072978 EXPR_BINARY@4685..48072979 LHS_EXPR@4685..46922980 EXPR_STRING@4685..46922981 STRING_SINGLE@4685..4692 "'---\\n'"2982 WHITESPACE@4692..4693 " "2983 PLUS@4693..4694 "+"2984 WHITESPACE@4694..4695 " "2985 EXPR_APPLY@4695..48072986 EXPR_INDEX@4695..47032987 EXPR_VAR@4695..46982988 NAME@4695..46982989 IDENT@4695..4698 "std"2990 DOT@4698..4699 "."2991 NAME@4699..47032992 IDENT@4699..4703 "join"2993 ARGS_DESC@4703..48072994 L_PAREN@4703..4704 "("2995 WHITESPACE@4704..4713 "\n "2996 ARG@4713..47222997 EXPR_STRING@4713..47222998 STRING_SINGLE@4713..4722 "'\\n---\\n'"2999 COMMA@4722..4723 ","3000 WHITESPACE@4723..4724 " "3001 ARG@4724..47993002 EXPR_ARRAY_COMP@4724..47993003 L_BRACK@4724..4725 "["3004 EXPR_APPLY@4725..47833005 EXPR_INDEX@4725..47443006 EXPR_VAR@4725..47283007 NAME@4725..47283008 IDENT@4725..4728 "std"3009 DOT@4728..4729 "."3010 NAME@4729..47443011 IDENT@4729..4744 "manifestYamlDoc"3012 ARGS_DESC@4744..47833013 L_PAREN@4744..4745 "("3014 ARG@4745..47463015 EXPR_VAR@4745..47463016 NAME@4745..47463017 IDENT@4745..4746 "e"3018 COMMA@4746..4747 ","3019 WHITESPACE@4747..4748 " "3020 ARG@4748..47703021 EXPR_VAR@4748..47703022 NAME@4748..47703023 IDENT@4748..4770 "indent_array_in_object"3024 COMMA@4770..4771 ","3025 WHITESPACE@4771..4772 " "3026 ARG@4772..47823027 EXPR_VAR@4772..47823028 NAME@4772..47823029 IDENT@4772..4782 "quote_keys"3030 R_PAREN@4782..4783 ")"3031 WHITESPACE@4783..4784 " "3032 FOR_SPEC@4784..47983033 FOR_KW@4784..4787 "for"3034 WHITESPACE@4787..4788 " "3035 NAME@4788..47893036 IDENT@4788..4789 "e"3037 WHITESPACE@4789..4790 " "3038 IN_KW@4790..4792 "in"3039 WHITESPACE@4792..4793 " "3040 EXPR_VAR@4793..47983041 NAME@4793..47983042 IDENT@4793..4798 "value"3043 R_BRACK@4798..4799 "]"3044 WHITESPACE@4799..4806 "\n "3045 R_PAREN@4806..4807 ")"3046 WHITESPACE@4807..4808 " "3047 PLUS@4808..4809 "+"3048 WHITESPACE@4809..4810 " "3049 EXPR_IF_THEN_ELSE@4810..48523050 IF_KW@4810..4812 "if"3051 WHITESPACE@4812..4813 " "3052 EXPR_VAR@4813..48273053 NAME@4813..48273054 IDENT@4813..4827 "c_document_end"3055 WHITESPACE@4827..4828 " "3056 THEN_KW@4828..4832 "then"3057 WHITESPACE@4832..4833 " "3058 TRUE_EXPR@4833..48423059 EXPR_STRING@4833..48423060 STRING_SINGLE@4833..4842 "'\\n...\\n'"3061 WHITESPACE@4842..4843 " "3062 ELSE_KW@4843..4847 "else"3063 WHITESPACE@4847..4848 " "3064 FALSE_EXPR@4848..48523065 EXPR_STRING@4848..48523066 STRING_SINGLE@4848..4852 "'\\n'"3067 COMMA@4852..4853 ","3068 WHITESPACE@4853..4857 "\n\n "3069 MEMBER_FIELD@4857..55133070 FIELD_METHOD@4857..55133071 FIELD_NAME_FIXED@4857..48713072 NAME@4857..48713073 IDENT@4857..4871 "manifestPython"3074 PARAMS_DESC@4871..48743075 L_PAREN@4871..4872 "("3076 PARAM@4872..48733077 DESTRUCT_FULL@4872..48733078 NAME@4872..48733079 IDENT@4872..4873 "v"3080 R_PAREN@4873..4874 ")"3081 COLONCOLON@4874..4876 "::"3082 WHITESPACE@4876..4881 "\n "3083 EXPR_IF_THEN_ELSE@4881..55133084 IF_KW@4881..4883 "if"3085 WHITESPACE@4883..4884 " "3086 EXPR_APPLY@4884..48993087 EXPR_INDEX@4884..48963088 EXPR_VAR@4884..48873089 NAME@4884..48873090 IDENT@4884..4887 "std"3091 DOT@4887..4888 "."3092 NAME@4888..48963093 IDENT@4888..4896 "isObject"3094 ARGS_DESC@4896..48993095 L_PAREN@4896..4897 "("3096 ARG@4897..48983097 EXPR_VAR@4897..48983098 NAME@4897..48983099 IDENT@4897..4898 "v"3100 R_PAREN@4898..4899 ")"3101 WHITESPACE@4899..4900 " "3102 THEN_KW@4900..4904 "then"3103 WHITESPACE@4904..4911 "\n "3104 TRUE_EXPR@4911..50863105 EXPR_LOCAL@4911..50863106 LOCAL_KW@4911..4916 "local"3107 WHITESPACE@4916..4917 " "3108 BIND_DESTRUCT@4917..50453109 DESTRUCT_FULL@4917..49233110 NAME@4917..49233111 IDENT@4917..4923 "fields"3112 WHITESPACE@4923..4924 " "3113 ASSIGN@4924..4925 "="3114 WHITESPACE@4925..4926 " "3115 EXPR_ARRAY_COMP@4926..50453116 L_BRACK@4926..4927 "["3117 WHITESPACE@4927..4936 "\n "3118 EXPR_BINARY@4936..50003119 LHS_EXPR@4936..49443120 EXPR_STRING@4936..49443121 STRING_SINGLE@4936..4944 "'%s: %s'"3122 WHITESPACE@4944..4945 " "3123 MODULO@4945..4946 "%"3124 WHITESPACE@4946..4947 " "3125 EXPR_ARRAY@4947..50003126 L_BRACK@4947..4948 "["3127 EXPR_APPLY@4948..49733128 EXPR_INDEX@4948..49703129 EXPR_VAR@4948..49513130 NAME@4948..49513131 IDENT@4948..4951 "std"3132 DOT@4951..4952 "."3133 NAME@4952..49703134 IDENT@4952..4970 "escapeStringPython"3135 ARGS_DESC@4970..49733136 L_PAREN@4970..4971 "("3137 ARG@4971..49723138 EXPR_VAR@4971..49723139 NAME@4971..49723140 IDENT@4971..4972 "k"3141 R_PAREN@4972..4973 ")"3142 COMMA@4973..4974 ","3143 WHITESPACE@4974..4975 " "3144 EXPR_APPLY@4975..49993145 EXPR_INDEX@4975..49933146 EXPR_VAR@4975..49783147 NAME@4975..49783148 IDENT@4975..4978 "std"3149 DOT@4978..4979 "."3150 NAME@4979..49933151 IDENT@4979..4993 "manifestPython"3152 ARGS_DESC@4993..49993153 L_PAREN@4993..4994 "("3154 ARG@4994..49983155 EXPR_INDEX_EXPR@4994..49983156 LHS_EXPR@4994..49953157 EXPR_VAR@4994..49953158 NAME@4994..49953159 IDENT@4994..4995 "v"3160 L_BRACK@4995..4996 "["3161 EXPR_VAR@4996..49973162 NAME@4996..49973163 IDENT@4996..4997 "k"3164 R_BRACK@4997..4998 "]"3165 R_PAREN@4998..4999 ")"3166 R_BRACK@4999..5000 "]"3167 WHITESPACE@5000..5009 "\n "3168 FOR_SPEC@5009..50373169 FOR_KW@5009..5012 "for"3170 WHITESPACE@5012..5013 " "3171 NAME@5013..50143172 IDENT@5013..5014 "k"3173 WHITESPACE@5014..5015 " "3174 IN_KW@5015..5017 "in"3175 WHITESPACE@5017..5018 " "3176 EXPR_APPLY@5018..50373177 EXPR_INDEX@5018..50343178 EXPR_VAR@5018..50213179 NAME@5018..50213180 IDENT@5018..5021 "std"3181 DOT@5021..5022 "."3182 NAME@5022..50343183 IDENT@5022..5034 "objectFields"3184 ARGS_DESC@5034..50373185 L_PAREN@5034..5035 "("3186 ARG@5035..50363187 EXPR_VAR@5035..50363188 NAME@5035..50363189 IDENT@5035..5036 "v"3190 R_PAREN@5036..5037 ")"3191 WHITESPACE@5037..5044 "\n "3192 R_BRACK@5044..5045 "]"3193 SEMI@5045..5046 ";"3194 WHITESPACE@5046..5053 "\n "3195 EXPR_BINARY@5053..50863196 LHS_EXPR@5053..50593197 EXPR_STRING@5053..50593198 STRING_SINGLE@5053..5059 "'{%s}'"3199 WHITESPACE@5059..5060 " "3200 MODULO@5060..5061 "%"3201 WHITESPACE@5061..5062 " "3202 EXPR_ARRAY@5062..50863203 L_BRACK@5062..5063 "["3204 EXPR_APPLY@5063..50853205 EXPR_INDEX@5063..50713206 EXPR_VAR@5063..50663207 NAME@5063..50663208 IDENT@5063..5066 "std"3209 DOT@5066..5067 "."3210 NAME@5067..50713211 IDENT@5067..5071 "join"3212 ARGS_DESC@5071..50853213 L_PAREN@5071..5072 "("3214 ARG@5072..50763215 EXPR_STRING@5072..50763216 STRING_SINGLE@5072..5076 "', '"3217 COMMA@5076..5077 ","3218 WHITESPACE@5077..5078 " "3219 ARG@5078..50843220 EXPR_VAR@5078..50843221 NAME@5078..50843222 IDENT@5078..5084 "fields"3223 R_PAREN@5084..5085 ")"3224 R_BRACK@5085..5086 "]"3225 WHITESPACE@5086..5091 "\n "3226 ELSE_KW@5091..5095 "else"3227 WHITESPACE@5095..5096 " "3228 FALSE_EXPR@5096..55133229 EXPR_IF_THEN_ELSE@5096..55133230 IF_KW@5096..5098 "if"3231 WHITESPACE@5098..5099 " "3232 EXPR_APPLY@5099..51133233 EXPR_INDEX@5099..51103234 EXPR_VAR@5099..51023235 NAME@5099..51023236 IDENT@5099..5102 "std"3237 DOT@5102..5103 "."3238 NAME@5103..51103239 IDENT@5103..5110 "isArray"3240 ARGS_DESC@5110..51133241 L_PAREN@5110..5111 "("3242 ARG@5111..51123243 EXPR_VAR@5111..51123244 NAME@5111..51123245 IDENT@5111..5112 "v"3246 R_PAREN@5112..5113 ")"3247 WHITESPACE@5113..5114 " "3248 THEN_KW@5114..5118 "then"3249 WHITESPACE@5118..5125 "\n "3250 TRUE_EXPR@5125..51883251 EXPR_BINARY@5125..51883252 LHS_EXPR@5125..51313253 EXPR_STRING@5125..51313254 STRING_SINGLE@5125..5131 "'[%s]'"3255 WHITESPACE@5131..5132 " "3256 MODULO@5132..5133 "%"3257 WHITESPACE@5133..5134 " "3258 EXPR_ARRAY@5134..51883259 L_BRACK@5134..5135 "["3260 EXPR_APPLY@5135..51873261 EXPR_INDEX@5135..51433262 EXPR_VAR@5135..51383263 NAME@5135..51383264 IDENT@5135..5138 "std"3265 DOT@5138..5139 "."3266 NAME@5139..51433267 IDENT@5139..5143 "join"3268 ARGS_DESC@5143..51873269 L_PAREN@5143..5144 "("3270 ARG@5144..51483271 EXPR_STRING@5144..51483272 STRING_SINGLE@5144..5148 "', '"3273 COMMA@5148..5149 ","3274 WHITESPACE@5149..5150 " "3275 ARG@5150..51863276 EXPR_ARRAY_COMP@5150..51863277 L_BRACK@5150..5151 "["3278 EXPR_APPLY@5151..51733279 EXPR_INDEX@5151..51693280 EXPR_VAR@5151..51543281 NAME@5151..51543282 IDENT@5151..5154 "std"3283 DOT@5154..5155 "."3284 NAME@5155..51693285 IDENT@5155..5169 "manifestPython"3286 ARGS_DESC@5169..51733287 L_PAREN@5169..5170 "("3288 ARG@5170..51723289 EXPR_VAR@5170..51723290 NAME@5170..51723291 IDENT@5170..5172 "v2"3292 R_PAREN@5172..5173 ")"3293 WHITESPACE@5173..5174 " "3294 FOR_SPEC@5174..51853295 FOR_KW@5174..5177 "for"3296 WHITESPACE@5177..5178 " "3297 NAME@5178..51803298 IDENT@5178..5180 "v2"3299 WHITESPACE@5180..5181 " "3300 IN_KW@5181..5183 "in"3301 WHITESPACE@5183..5184 " "3302 EXPR_VAR@5184..51853303 NAME@5184..51853304 IDENT@5184..5185 "v"3305 R_BRACK@5185..5186 "]"3306 R_PAREN@5186..5187 ")"3307 R_BRACK@5187..5188 "]"3308 WHITESPACE@5188..5193 "\n "3309 ELSE_KW@5193..5197 "else"3310 WHITESPACE@5197..5198 " "3311 FALSE_EXPR@5198..55133312 EXPR_IF_THEN_ELSE@5198..55133313 IF_KW@5198..5200 "if"3314 WHITESPACE@5200..5201 " "3315 EXPR_APPLY@5201..52163316 EXPR_INDEX@5201..52133317 EXPR_VAR@5201..52043318 NAME@5201..52043319 IDENT@5201..5204 "std"3320 DOT@5204..5205 "."3321 NAME@5205..52133322 IDENT@5205..5213 "isString"3323 ARGS_DESC@5213..52163324 L_PAREN@5213..5214 "("3325 ARG@5214..52153326 EXPR_VAR@5214..52153327 NAME@5214..52153328 IDENT@5214..5215 "v"3329 R_PAREN@5215..5216 ")"3330 WHITESPACE@5216..5217 " "3331 THEN_KW@5217..5221 "then"3332 WHITESPACE@5221..5228 "\n "3333 TRUE_EXPR@5228..52623334 EXPR_BINARY@5228..52623335 LHS_EXPR@5228..52323336 EXPR_STRING@5228..52323337 STRING_SINGLE@5228..5232 "'%s'"3338 WHITESPACE@5232..5233 " "3339 MODULO@5233..5234 "%"3340 WHITESPACE@5234..5235 " "3341 EXPR_ARRAY@5235..52623342 L_BRACK@5235..5236 "["3343 EXPR_APPLY@5236..52613344 EXPR_INDEX@5236..52583345 EXPR_VAR@5236..52393346 NAME@5236..52393347 IDENT@5236..5239 "std"3348 DOT@5239..5240 "."3349 NAME@5240..52583350 IDENT@5240..5258 "escapeStringPython"3351 ARGS_DESC@5258..52613352 L_PAREN@5258..5259 "("3353 ARG@5259..52603354 EXPR_VAR@5259..52603355 NAME@5259..52603356 IDENT@5259..5260 "v"3357 R_PAREN@5260..5261 ")"3358 R_BRACK@5261..5262 "]"3359 WHITESPACE@5262..5267 "\n "3360 ELSE_KW@5267..5271 "else"3361 WHITESPACE@5271..5272 " "3362 FALSE_EXPR@5272..55133363 EXPR_IF_THEN_ELSE@5272..55133364 IF_KW@5272..5274 "if"3365 WHITESPACE@5274..5275 " "3366 EXPR_APPLY@5275..52923367 EXPR_INDEX@5275..52893368 EXPR_VAR@5275..52783369 NAME@5275..52783370 IDENT@5275..5278 "std"3371 DOT@5278..5279 "."3372 NAME@5279..52893373 IDENT@5279..5289 "isFunction"3374 ARGS_DESC@5289..52923375 L_PAREN@5289..5290 "("3376 ARG@5290..52913377 EXPR_VAR@5290..52913378 NAME@5290..52913379 IDENT@5290..5291 "v"3380 R_PAREN@5291..5292 ")"3381 WHITESPACE@5292..5293 " "3382 THEN_KW@5293..5297 "then"3383 WHITESPACE@5297..5304 "\n "3384 TRUE_EXPR@5304..53363385 EXPR_ERROR@5304..53363386 ERROR_KW@5304..5309 "error"3387 WHITESPACE@5309..5310 " "3388 EXPR_STRING@5310..53363389 STRING_SINGLE@5310..5336 "'cannot manifest func ..."3390 WHITESPACE@5336..5341 "\n "3391 ELSE_KW@5341..5345 "else"3392 WHITESPACE@5345..5346 " "3393 FALSE_EXPR@5346..55133394 EXPR_IF_THEN_ELSE@5346..55133395 IF_KW@5346..5348 "if"3396 WHITESPACE@5348..5349 " "3397 EXPR_APPLY@5349..53643398 EXPR_INDEX@5349..53613399 EXPR_VAR@5349..53523400 NAME@5349..53523401 IDENT@5349..5352 "std"3402 DOT@5352..5353 "."3403 NAME@5353..53613404 IDENT@5353..5361 "isNumber"3405 ARGS_DESC@5361..53643406 L_PAREN@5361..5362 "("3407 ARG@5362..53633408 EXPR_VAR@5362..53633409 NAME@5362..53633410 IDENT@5362..5363 "v"3411 R_PAREN@5363..5364 ")"3412 WHITESPACE@5364..5365 " "3413 THEN_KW@5365..5369 "then"3414 WHITESPACE@5369..5376 "\n "3415 TRUE_EXPR@5376..53913416 EXPR_APPLY@5376..53913417 EXPR_INDEX@5376..53883418 EXPR_VAR@5376..53793419 NAME@5376..53793420 IDENT@5376..5379 "std"3421 DOT@5379..5380 "."3422 NAME@5380..53883423 IDENT@5380..5388 "toString"3424 ARGS_DESC@5388..53913425 L_PAREN@5388..5389 "("3426 ARG@5389..53903427 EXPR_VAR@5389..53903428 NAME@5389..53903429 IDENT@5389..5390 "v"3430 R_PAREN@5390..5391 ")"3431 WHITESPACE@5391..5396 "\n "3432 ELSE_KW@5396..5400 "else"3433 WHITESPACE@5400..5401 " "3434 FALSE_EXPR@5401..55133435 EXPR_IF_THEN_ELSE@5401..55133436 IF_KW@5401..5403 "if"3437 WHITESPACE@5403..5404 " "3438 EXPR_BINARY@5404..54133439 LHS_EXPR@5404..54053440 EXPR_VAR@5404..54053441 NAME@5404..54053442 IDENT@5404..5405 "v"3443 WHITESPACE@5405..5406 " "3444 EQ@5406..5408 "=="3445 WHITESPACE@5408..5409 " "3446 EXPR_LITERAL@5409..54133447 TRUE_KW@5409..5413 "true"3448 WHITESPACE@5413..5414 " "3449 THEN_KW@5414..5418 "then"3450 WHITESPACE@5418..5425 "\n "3451 TRUE_EXPR@5425..54313452 EXPR_STRING@5425..54313453 STRING_SINGLE@5425..5431 "'True'"3454 WHITESPACE@5431..5436 "\n "3455 ELSE_KW@5436..5440 "else"3456 WHITESPACE@5440..5441 " "3457 FALSE_EXPR@5441..55133458 EXPR_IF_THEN_ELSE@5441..55133459 IF_KW@5441..5443 "if"3460 WHITESPACE@5443..5444 " "3461 EXPR_BINARY@5444..54543462 LHS_EXPR@5444..54453463 EXPR_VAR@5444..54453464 NAME@5444..54453465 IDENT@5444..5445 "v"3466 WHITESPACE@5445..5446 " "3467 EQ@5446..5448 "=="3468 WHITESPACE@5448..5449 " "3469 EXPR_LITERAL@5449..54543470 FALSE_KW@5449..5454 "false"3471 WHITESPACE@5454..5455 " "3472 THEN_KW@5455..5459 "then"3473 WHITESPACE@5459..5466 "\n "3474 TRUE_EXPR@5466..54733475 EXPR_STRING@5466..54733476 STRING_SINGLE@5466..5473 "'False'"3477 WHITESPACE@5473..5478 "\n "3478 ELSE_KW@5478..5482 "else"3479 WHITESPACE@5482..5483 " "3480 FALSE_EXPR@5483..55133481 EXPR_IF_THEN_ELSE@5483..55133482 IF_KW@5483..5485 "if"3483 WHITESPACE@5485..5486 " "3484 EXPR_BINARY@5486..54953485 LHS_EXPR@5486..54873486 EXPR_VAR@5486..54873487 NAME@5486..54873488 IDENT@5486..5487 "v"3489 WHITESPACE@5487..5488 " "3490 EQ@5488..5490 "=="3491 WHITESPACE@5490..5491 " "3492 EXPR_LITERAL@5491..54953493 NULL_KW@5491..5495 "null"3494 WHITESPACE@5495..5496 " "3495 THEN_KW@5496..5500 "then"3496 WHITESPACE@5500..5507 "\n "3497 TRUE_EXPR@5507..55133498 EXPR_STRING@5507..55133499 STRING_SINGLE@5507..5513 "'None'"3500 COMMA@5513..5514 ","3501 WHITESPACE@5514..5518 "\n\n "3502 MEMBER_FIELD@5518..56733503 FIELD_METHOD@5518..56733504 FIELD_NAME_FIXED@5518..55363505 NAME@5518..55363506 IDENT@5518..5536 "manifestPythonVars"3507 PARAMS_DESC@5536..55423508 L_PAREN@5536..5537 "("3509 PARAM@5537..55413510 DESTRUCT_FULL@5537..55413511 NAME@5537..55413512 IDENT@5537..5541 "conf"3513 R_PAREN@5541..5542 ")"3514 COLONCOLON@5542..5544 "::"3515 WHITESPACE@5544..5549 "\n "3516 EXPR_LOCAL@5549..56733517 LOCAL_KW@5549..5554 "local"3518 WHITESPACE@5554..5555 " "3519 BIND_DESTRUCT@5555..56403520 DESTRUCT_FULL@5555..55593521 NAME@5555..55593522 IDENT@5555..5559 "vars"3523 WHITESPACE@5559..5560 " "3524 ASSIGN@5560..5561 "="3525 WHITESPACE@5561..5562 " "3526 EXPR_ARRAY_COMP@5562..56403527 L_BRACK@5562..5563 "["3528 EXPR_BINARY@5563..56073529 LHS_EXPR@5563..55723530 EXPR_STRING@5563..55723531 STRING_SINGLE@5563..5572 "'%s = %s'"3532 WHITESPACE@5572..5573 " "3533 MODULO@5573..5574 "%"3534 WHITESPACE@5574..5575 " "3535 EXPR_ARRAY@5575..56073536 L_BRACK@5575..5576 "["3537 EXPR_VAR@5576..55773538 NAME@5576..55773539 IDENT@5576..5577 "k"3540 COMMA@5577..5578 ","3541 WHITESPACE@5578..5579 " "3542 EXPR_APPLY@5579..56063543 EXPR_INDEX@5579..55973544 EXPR_VAR@5579..55823545 NAME@5579..55823546 IDENT@5579..5582 "std"3547 DOT@5582..5583 "."3548 NAME@5583..55973549 IDENT@5583..5597 "manifestPython"3550 ARGS_DESC@5597..56063551 L_PAREN@5597..5598 "("3552 ARG@5598..56053553 EXPR_INDEX_EXPR@5598..56053554 LHS_EXPR@5598..56023555 EXPR_VAR@5598..56023556 NAME@5598..56023557 IDENT@5598..5602 "conf"3558 L_BRACK@5602..5603 "["3559 EXPR_VAR@5603..56043560 NAME@5603..56043561 IDENT@5603..5604 "k"3562 R_BRACK@5604..5605 "]"3563 R_PAREN@5605..5606 ")"3564 R_BRACK@5606..5607 "]"3565 WHITESPACE@5607..5608 " "3566 FOR_SPEC@5608..56393567 FOR_KW@5608..5611 "for"3568 WHITESPACE@5611..5612 " "3569 NAME@5612..56133570 IDENT@5612..5613 "k"3571 WHITESPACE@5613..5614 " "3572 IN_KW@5614..5616 "in"3573 WHITESPACE@5616..5617 " "3574 EXPR_APPLY@5617..56393575 EXPR_INDEX@5617..56333576 EXPR_VAR@5617..56203577 NAME@5617..56203578 IDENT@5617..5620 "std"3579 DOT@5620..5621 "."3580 NAME@5621..56333581 IDENT@5621..5633 "objectFields"3582 ARGS_DESC@5633..56393583 L_PAREN@5633..5634 "("3584 ARG@5634..56383585 EXPR_VAR@5634..56383586 NAME@5634..56383587 IDENT@5634..5638 "conf"3588 R_PAREN@5638..5639 ")"3589 R_BRACK@5639..5640 "]"3590 SEMI@5640..5641 ";"3591 WHITESPACE@5641..5646 "\n "3592 EXPR_APPLY@5646..56733593 EXPR_INDEX@5646..56543594 EXPR_VAR@5646..56493595 NAME@5646..56493596 IDENT@5646..5649 "std"3597 DOT@5649..5650 "."3598 NAME@5650..56543599 IDENT@5650..5654 "join"3600 ARGS_DESC@5654..56733601 L_PAREN@5654..5655 "("3602 ARG@5655..56593603 EXPR_STRING@5655..56593604 STRING_SINGLE@5655..5659 "'\\n'"3605 COMMA@5659..5660 ","3606 WHITESPACE@5660..5661 " "3607 ARG@5661..56723608 EXPR_BINARY@5661..56723609 LHS_EXPR@5661..56653610 EXPR_VAR@5661..56653611 NAME@5661..56653612 IDENT@5661..5665 "vars"3613 WHITESPACE@5665..5666 " "3614 PLUS@5666..5667 "+"3615 WHITESPACE@5667..5668 " "3616 EXPR_ARRAY@5668..56723617 L_BRACK@5668..5669 "["3618 EXPR_STRING@5669..56713619 STRING_SINGLE@5669..5671 "''"3620 R_BRACK@5671..5672 "]"3621 R_PAREN@5672..5673 ")"3622 COMMA@5673..5674 ","3623 WHITESPACE@5674..5678 "\n\n "3624 MEMBER_FIELD@5678..63453625 FIELD_METHOD@5678..63453626 FIELD_NAME_FIXED@5678..56953627 NAME@5678..56953628 IDENT@5678..5695 "manifestXmlJsonml"3629 PARAMS_DESC@5695..57023630 L_PAREN@5695..5696 "("3631 PARAM@5696..57013632 DESTRUCT_FULL@5696..57013633 NAME@5696..57013634 IDENT@5696..5701 "value"3635 R_PAREN@5701..5702 ")"3636 COLONCOLON@5702..5704 "::"3637 WHITESPACE@5704..5709 "\n "3638 EXPR_IF_THEN_ELSE@5709..63453639 IF_KW@5709..5711 "if"3640 WHITESPACE@5711..5712 " "3641 EXPR_UNARY@5712..57313642 NOT@5712..5713 "!"3643 EXPR_APPLY@5713..57313644 EXPR_INDEX@5713..57243645 EXPR_VAR@5713..57163646 NAME@5713..57163647 IDENT@5713..5716 "std"3648 DOT@5716..5717 "."3649 NAME@5717..57243650 IDENT@5717..5724 "isArray"3651 ARGS_DESC@5724..57313652 L_PAREN@5724..5725 "("3653 ARG@5725..57303654 EXPR_VAR@5725..57303655 NAME@5725..57303656 IDENT@5725..5730 "value"3657 R_PAREN@5730..5731 ")"3658 WHITESPACE@5731..5732 " "3659 THEN_KW@5732..5736 "then"3660 WHITESPACE@5736..5743 "\n "3661 TRUE_EXPR@5743..58113662 EXPR_ERROR@5743..58113663 ERROR_KW@5743..5748 "error"3664 WHITESPACE@5748..5749 " "3665 EXPR_BINARY@5749..58113666 LHS_EXPR@5749..57933667 EXPR_STRING@5749..57933668 STRING_SINGLE@5749..5793 "'Expected a JSONML va ..."3669 WHITESPACE@5793..5794 " "3670 MODULO@5794..5795 "%"3671 WHITESPACE@5795..5796 " "3672 EXPR_APPLY@5796..58113673 EXPR_INDEX@5796..58043674 EXPR_VAR@5796..57993675 NAME@5796..57993676 IDENT@5796..5799 "std"3677 DOT@5799..5800 "."3678 NAME@5800..58043679 IDENT@5800..5804 "type"3680 ARGS_DESC@5804..58113681 L_PAREN@5804..5805 "("3682 ARG@5805..58103683 EXPR_VAR@5805..58103684 NAME@5805..58103685 IDENT@5805..5810 "value"3686 R_PAREN@5810..5811 ")"3687 WHITESPACE@5811..5816 "\n "3688 ELSE_KW@5816..5820 "else"3689 WHITESPACE@5820..5827 "\n "3690 FALSE_EXPR@5827..63453691 EXPR_LOCAL@5827..63453692 LOCAL_KW@5827..5832 "local"3693 WHITESPACE@5832..5833 " "3694 BIND_FUNCTION@5833..63263695 NAME@5833..58363696 IDENT@5833..5836 "aux"3697 PARAMS_DESC@5836..58393698 L_PAREN@5836..5837 "("3699 PARAM@5837..58383700 DESTRUCT_FULL@5837..58383701 NAME@5837..58383702 IDENT@5837..5838 "v"3703 R_PAREN@5838..5839 ")"3704 WHITESPACE@5839..5840 " "3705 ASSIGN@5840..5841 "="3706 WHITESPACE@5841..5850 "\n "3707 EXPR_IF_THEN_ELSE@5850..63263708 IF_KW@5850..5852 "if"3709 WHITESPACE@5852..5853 " "3710 EXPR_APPLY@5853..58683711 EXPR_INDEX@5853..58653712 EXPR_VAR@5853..58563713 NAME@5853..58563714 IDENT@5853..5856 "std"3715 DOT@5856..5857 "."3716 NAME@5857..58653717 IDENT@5857..5865 "isString"3718 ARGS_DESC@5865..58683719 L_PAREN@5865..5866 "("3720 ARG@5866..58673721 EXPR_VAR@5866..58673722 NAME@5866..58673723 IDENT@5866..5867 "v"3724 R_PAREN@5867..5868 ")"3725 WHITESPACE@5868..5869 " "3726 THEN_KW@5869..5873 "then"3727 WHITESPACE@5873..5884 "\n "3728 TRUE_EXPR@5884..58853729 EXPR_VAR@5884..58853730 NAME@5884..58853731 IDENT@5884..5885 "v"3732 WHITESPACE@5885..5894 "\n "3733 ELSE_KW@5894..5898 "else"3734 WHITESPACE@5898..5909 "\n "3735 FALSE_EXPR@5909..63263736 EXPR_LOCAL@5909..63263737 LOCAL_KW@5909..5914 "local"3738 WHITESPACE@5914..5915 " "3739 BIND_DESTRUCT@5915..59253740 DESTRUCT_FULL@5915..59183741 NAME@5915..59183742 IDENT@5915..5918 "tag"3743 WHITESPACE@5918..5919 " "3744 ASSIGN@5919..5920 "="3745 WHITESPACE@5920..5921 " "3746 EXPR_INDEX_EXPR@5921..59253747 LHS_EXPR@5921..59223748 EXPR_VAR@5921..59223749 NAME@5921..59223750 IDENT@5921..5922 "v"3751 L_BRACK@5922..5923 "["3752 EXPR_NUMBER@5923..59243753 FLOAT@5923..5924 "0"3754 R_BRACK@5924..5925 "]"3755 SEMI@5925..5926 ";"3756 WHITESPACE@5926..5937 "\n "3757 EXPR_LOCAL@5937..63263758 LOCAL_KW@5937..5942 "local"3759 WHITESPACE@5942..5943 " "3760 BIND_DESTRUCT@5943..59943761 DESTRUCT_FULL@5943..59523762 NAME@5943..59523763 IDENT@5943..5952 "has_attrs"3764 WHITESPACE@5952..5953 " "3765 ASSIGN@5953..5954 "="3766 WHITESPACE@5954..5955 " "3767 EXPR_BINARY@5955..59943768 LHS_EXPR@5955..59723769 EXPR_BINARY@5955..59723770 LHS_EXPR@5955..59683771 EXPR_APPLY@5955..59683772 EXPR_INDEX@5955..59653773 EXPR_VAR@5955..59583774 NAME@5955..59583775 IDENT@5955..5958 "std"3776 DOT@5958..5959 "."3777 NAME@5959..59653778 IDENT@5959..5965 "length"3779 ARGS_DESC@5965..59683780 L_PAREN@5965..5966 "("3781 ARG@5966..59673782 EXPR_VAR@5966..59673783 NAME@5966..59673784 IDENT@5966..5967 "v"3785 R_PAREN@5967..5968 ")"3786 WHITESPACE@5968..5969 " "3787 GT@5969..5970 ">"3788 WHITESPACE@5970..5971 " "3789 EXPR_NUMBER@5971..59723790 FLOAT@5971..5972 "1"3791 WHITESPACE@5972..5973 " "3792 AND@5973..5975 "&&"3793 WHITESPACE@5975..5976 " "3794 EXPR_APPLY@5976..59943795 EXPR_INDEX@5976..59883796 EXPR_VAR@5976..59793797 NAME@5976..59793798 IDENT@5976..5979 "std"3799 DOT@5979..5980 "."3800 NAME@5980..59883801 IDENT@5980..5988 "isObject"3802 ARGS_DESC@5988..59943803 L_PAREN@5988..5989 "("3804 ARG@5989..59933805 EXPR_INDEX_EXPR@5989..59933806 LHS_EXPR@5989..59903807 EXPR_VAR@5989..59903808 NAME@5989..59903809 IDENT@5989..5990 "v"3810 L_BRACK@5990..5991 "["3811 EXPR_NUMBER@5991..59923812 FLOAT@5991..5992 "1"3813 R_BRACK@5992..5993 "]"3814 R_PAREN@5993..5994 ")"3815 SEMI@5994..5995 ";"3816 WHITESPACE@5995..6006 "\n "3817 EXPR_LOCAL@6006..63263818 LOCAL_KW@6006..6011 "local"3819 WHITESPACE@6011..6012 " "3820 BIND_DESTRUCT@6012..60503821 DESTRUCT_FULL@6012..60173822 NAME@6012..60173823 IDENT@6012..6017 "attrs"3824 WHITESPACE@6017..6018 " "3825 ASSIGN@6018..6019 "="3826 WHITESPACE@6019..6020 " "3827 EXPR_IF_THEN_ELSE@6020..60503828 IF_KW@6020..6022 "if"3829 WHITESPACE@6022..6023 " "3830 EXPR_VAR@6023..60323831 NAME@6023..60323832 IDENT@6023..6032 "has_attrs"3833 WHITESPACE@6032..6033 " "3834 THEN_KW@6033..6037 "then"3835 WHITESPACE@6037..6038 " "3836 TRUE_EXPR@6038..60423837 EXPR_INDEX_EXPR@6038..60423838 LHS_EXPR@6038..60393839 EXPR_VAR@6038..60393840 NAME@6038..60393841 IDENT@6038..6039 "v"3842 L_BRACK@6039..6040 "["3843 EXPR_NUMBER@6040..60413844 FLOAT@6040..6041 "1"3845 R_BRACK@6041..6042 "]"3846 WHITESPACE@6042..6043 " "3847 ELSE_KW@6043..6047 "else"3848 WHITESPACE@6047..6048 " "3849 FALSE_EXPR@6048..60503850 EXPR_OBJECT@6048..60503851 OBJ_BODY_MEMBER_LIST@6048..60503852 L_BRACE@6048..6049 "{"3853 R_BRACE@6049..6050 "}"3854 SEMI@6050..6051 ";"3855 WHITESPACE@6051..6062 "\n "3856 EXPR_LOCAL@6062..63263857 LOCAL_KW@6062..6067 "local"3858 WHITESPACE@6067..6068 " "3859 BIND_DESTRUCT@6068..61133860 DESTRUCT_FULL@6068..60763861 NAME@6068..60763862 IDENT@6068..6076 "children"3863 WHITESPACE@6076..6077 " "3864 ASSIGN@6077..6078 "="3865 WHITESPACE@6078..6079 " "3866 EXPR_IF_THEN_ELSE@6079..61133867 IF_KW@6079..6081 "if"3868 WHITESPACE@6081..6082 " "3869 EXPR_VAR@6082..60913870 NAME@6082..60913871 IDENT@6082..6091 "has_attrs"3872 WHITESPACE@6091..6092 " "3873 THEN_KW@6092..6096 "then"3874 WHITESPACE@6096..6097 " "3875 TRUE_EXPR@6097..61023876 EXPR_SLICE@6097..61023877 EXPR_VAR@6097..60983878 NAME@6097..60983879 IDENT@6097..6098 "v"3880 SLICE_DESC@6098..61023881 L_BRACK@6098..6099 "["3882 EXPR_NUMBER@6099..61003883 FLOAT@6099..6100 "2"3884 COLON@6100..6101 ":"3885 R_BRACK@6101..6102 "]"3886 WHITESPACE@6102..6103 " "3887 ELSE_KW@6103..6107 "else"3888 WHITESPACE@6107..6108 " "3889 FALSE_EXPR@6108..61133890 EXPR_SLICE@6108..61133891 EXPR_VAR@6108..61093892 NAME@6108..61093893 IDENT@6108..6109 "v"3894 SLICE_DESC@6109..61133895 L_BRACK@6109..6110 "["3896 EXPR_NUMBER@6110..61113897 FLOAT@6110..6111 "1"3898 COLON@6111..6112 ":"3899 R_BRACK@6112..6113 "]"3900 SEMI@6113..6114 ";"3901 WHITESPACE@6114..6125 "\n "3902 EXPR_LOCAL@6125..63263903 LOCAL_KW@6125..6130 "local"3904 WHITESPACE@6130..6131 " "3905 BIND_DESTRUCT@6131..62303906 DESTRUCT_FULL@6131..61403907 NAME@6131..61403908 IDENT@6131..6140 "attrs_str"3909 WHITESPACE@6140..6141 " "3910 ASSIGN@6141..6142 "="3911 WHITESPACE@6142..6155 "\n "3912 EXPR_APPLY@6155..62303913 EXPR_INDEX@6155..61633914 EXPR_VAR@6155..61583915 NAME@6155..61583916 IDENT@6155..6158 "std"3917 DOT@6158..6159 "."3918 NAME@6159..61633919 IDENT@6159..6163 "join"3920 ARGS_DESC@6163..62303921 L_PAREN@6163..6164 "("3922 ARG@6164..61663923 EXPR_STRING@6164..61663924 STRING_SINGLE@6164..6166 "''"3925 COMMA@6166..6167 ","3926 WHITESPACE@6167..6168 " "3927 ARG@6168..62293928 EXPR_ARRAY_COMP@6168..62293929 L_BRACK@6168..6169 "["3930 EXPR_BINARY@6169..61953931 LHS_EXPR@6169..61793932 EXPR_STRING@6169..61793933 STRING_SINGLE@6169..6179 "' %s=\"%s\"'"3934 WHITESPACE@6179..6180 " "3935 MODULO@6180..6181 "%"3936 WHITESPACE@6181..6182 " "3937 EXPR_ARRAY@6182..61953938 L_BRACK@6182..6183 "["3939 EXPR_VAR@6183..61843940 NAME@6183..61843941 IDENT@6183..6184 "k"3942 COMMA@6184..6185 ","3943 WHITESPACE@6185..6186 " "3944 EXPR_INDEX_EXPR@6186..61943945 LHS_EXPR@6186..61913946 EXPR_VAR@6186..61913947 NAME@6186..61913948 IDENT@6186..6191 "attrs"3949 L_BRACK@6191..6192 "["3950 EXPR_VAR@6192..61933951 NAME@6192..61933952 IDENT@6192..6193 "k"3953 R_BRACK@6193..6194 "]"3954 R_BRACK@6194..6195 "]"3955 WHITESPACE@6195..6196 " "3956 FOR_SPEC@6196..62283957 FOR_KW@6196..6199 "for"3958 WHITESPACE@6199..6200 " "3959 NAME@6200..62013960 IDENT@6200..6201 "k"3961 WHITESPACE@6201..6202 " "3962 IN_KW@6202..6204 "in"3963 WHITESPACE@6204..6205 " "3964 EXPR_APPLY@6205..62283965 EXPR_INDEX@6205..62213966 EXPR_VAR@6205..62083967 NAME@6205..62083968 IDENT@6205..6208 "std"3969 DOT@6208..6209 "."3970 NAME@6209..62213971 IDENT@6209..6221 "objectFields"3972 ARGS_DESC@6221..62283973 L_PAREN@6221..6222 "("3974 ARG@6222..62273975 EXPR_VAR@6222..62273976 NAME@6222..62273977 IDENT@6222..6227 "attrs"3978 R_PAREN@6227..6228 ")"3979 R_BRACK@6228..6229 "]"3980 R_PAREN@6229..6230 ")"3981 SEMI@6230..6231 ";"3982 WHITESPACE@6231..6242 "\n "3983 EXPR_APPLY@6242..63263984 EXPR_INDEX@6242..62543985 EXPR_VAR@6242..62453986 NAME@6242..62453987 IDENT@6242..6245 "std"3988 DOT@6245..6246 "."3989 NAME@6246..62543990 IDENT@6246..6254 "deepJoin"3991 ARGS_DESC@6254..63263992 L_PAREN@6254..6255 "("3993 ARG@6255..63253994 EXPR_ARRAY@6255..63253995 L_BRACK@6255..6256 "["3996 EXPR_STRING@6256..62593997 STRING_SINGLE@6256..6259 "'<'"3998 COMMA@6259..6260 ","3999 WHITESPACE@6260..6261 " "4000 EXPR_VAR@6261..62644001 NAME@6261..62644002 IDENT@6261..6264 "tag"4003 COMMA@6264..6265 ","4004 WHITESPACE@6265..6266 " "4005 EXPR_VAR@6266..62754006 NAME@6266..62754007 IDENT@6266..6275 "attrs_str"4008 COMMA@6275..6276 ","4009 WHITESPACE@6276..6277 " "4010 EXPR_STRING@6277..62804011 STRING_SINGLE@6277..6280 "'>'"4012 COMMA@6280..6281 ","4013 WHITESPACE@6281..6282 " "4014 EXPR_ARRAY_COMP@6282..63084015 L_BRACK@6282..6283 "["4016 EXPR_APPLY@6283..62894017 EXPR_VAR@6283..62864018 NAME@6283..62864019 IDENT@6283..6286 "aux"4020 ARGS_DESC@6286..62894021 L_PAREN@6286..6287 "("4022 ARG@6287..62884023 EXPR_VAR@6287..62884024 NAME@6287..62884025 IDENT@6287..6288 "x"4026 R_PAREN@6288..6289 ")"4027 WHITESPACE@6289..6290 " "4028 FOR_SPEC@6290..63074029 FOR_KW@6290..6293 "for"4030 WHITESPACE@6293..6294 " "4031 NAME@6294..62954032 IDENT@6294..6295 "x"4033 WHITESPACE@6295..6296 " "4034 IN_KW@6296..6298 "in"4035 WHITESPACE@6298..6299 " "4036 EXPR_VAR@6299..63074037 NAME@6299..63074038 IDENT@6299..6307 "children"4039 R_BRACK@6307..6308 "]"4040 COMMA@6308..6309 ","4041 WHITESPACE@6309..6310 " "4042 EXPR_STRING@6310..63144043 STRING_SINGLE@6310..6314 "'</'"4044 COMMA@6314..6315 ","4045 WHITESPACE@6315..6316 " "4046 EXPR_VAR@6316..63194047 NAME@6316..63194048 IDENT@6316..6319 "tag"4049 COMMA@6319..6320 ","4050 WHITESPACE@6320..6321 " "4051 EXPR_STRING@6321..63244052 STRING_SINGLE@6321..6324 "'>'"4053 R_BRACK@6324..6325 "]"4054 R_PAREN@6325..6326 ")"4055 SEMI@6326..6327 ";"4056 WHITESPACE@6327..6335 "\n\n "4057 EXPR_APPLY@6335..63454058 EXPR_VAR@6335..63384059 NAME@6335..63384060 IDENT@6335..6338 "aux"4061 ARGS_DESC@6338..63454062 L_PAREN@6338..6339 "("4063 ARG@6339..63444064 EXPR_VAR@6339..63444065 NAME@6339..63444066 IDENT@6339..6344 "value"4067 R_PAREN@6344..6345 ")"4068 COMMA@6345..6346 ","4069 WHITESPACE@6346..6350 "\n\n "4070 MEMBER_FIELD@6350..65564071 FIELD_METHOD@6350..65564072 FIELD_NAME_FIXED@6350..63544073 NAME@6350..63544074 IDENT@6350..6354 "uniq"4075 PARAMS_DESC@6354..63684076 L_PAREN@6354..6355 "("4077 PARAM@6355..63584078 DESTRUCT_FULL@6355..63584079 NAME@6355..63584080 IDENT@6355..6358 "arr"4081 COMMA@6358..6359 ","4082 WHITESPACE@6359..6360 " "4083 PARAM@6360..63674084 DESTRUCT_FULL@6360..63644085 NAME@6360..63644086 IDENT@6360..6364 "keyF"4087 ASSIGN@6364..6365 "="4088 EXPR_VAR@6365..63674089 NAME@6365..63674090 IDENT@6365..6367 "id"4091 R_PAREN@6367..6368 ")"4092 COLONCOLON@6368..6370 "::"4093 WHITESPACE@6370..6375 "\n "4094 EXPR_LOCAL@6375..65564095 LOCAL_KW@6375..6380 "local"4096 WHITESPACE@6380..6381 " "4097 BIND_FUNCTION@6381..65294098 NAME@6381..63824099 IDENT@6381..6382 "f"4100 PARAMS_DESC@6382..63884101 L_PAREN@6382..6383 "("4102 PARAM@6383..63844103 DESTRUCT_FULL@6383..63844104 NAME@6383..63844105 IDENT@6383..6384 "a"4106 COMMA@6384..6385 ","4107 WHITESPACE@6385..6386 " "4108 PARAM@6386..63874109 DESTRUCT_FULL@6386..63874110 NAME@6386..63874111 IDENT@6386..6387 "b"4112 R_PAREN@6387..6388 ")"4113 WHITESPACE@6388..6389 " "4114 ASSIGN@6389..6390 "="4115 WHITESPACE@6390..6397 "\n "4116 EXPR_IF_THEN_ELSE@6397..65294117 IF_KW@6397..6399 "if"4118 WHITESPACE@6399..6400 " "4119 EXPR_BINARY@6400..64184120 LHS_EXPR@6400..64134121 EXPR_APPLY@6400..64134122 EXPR_INDEX@6400..64104123 EXPR_VAR@6400..64034124 NAME@6400..64034125 IDENT@6400..6403 "std"4126 DOT@6403..6404 "."4127 NAME@6404..64104128 IDENT@6404..6410 "length"4129 ARGS_DESC@6410..64134130 L_PAREN@6410..6411 "("4131 ARG@6411..64124132 EXPR_VAR@6411..64124133 NAME@6411..64124134 IDENT@6411..6412 "a"4135 R_PAREN@6412..6413 ")"4136 WHITESPACE@6413..6414 " "4137 EQ@6414..6416 "=="4138 WHITESPACE@6416..6417 " "4139 EXPR_NUMBER@6417..64184140 FLOAT@6417..6418 "0"4141 WHITESPACE@6418..6419 " "4142 THEN_KW@6419..6423 "then"4143 WHITESPACE@6423..6432 "\n "4144 TRUE_EXPR@6432..64354145 EXPR_ARRAY@6432..64354146 L_BRACK@6432..6433 "["4147 EXPR_VAR@6433..64344148 NAME@6433..64344149 IDENT@6433..6434 "b"4150 R_BRACK@6434..6435 "]"4151 WHITESPACE@6435..6442 "\n "4152 ELSE_KW@6442..6446 "else"4153 WHITESPACE@6446..6447 " "4154 FALSE_EXPR@6447..65294155 EXPR_IF_THEN_ELSE@6447..65294156 IF_KW@6447..6449 "if"4157 WHITESPACE@6449..6450 " "4158 EXPR_BINARY@6450..64874159 LHS_EXPR@6450..64764160 EXPR_APPLY@6450..64764161 EXPR_VAR@6450..64544162 NAME@6450..64544163 IDENT@6450..6454 "keyF"4164 ARGS_DESC@6454..64764165 L_PAREN@6454..6455 "("4166 ARG@6455..64754167 EXPR_INDEX_EXPR@6455..64754168 LHS_EXPR@6455..64564169 EXPR_VAR@6455..64564170 NAME@6455..64564171 IDENT@6455..6456 "a"4172 L_BRACK@6456..6457 "["4173 EXPR_BINARY@6457..64744174 LHS_EXPR@6457..64704175 EXPR_APPLY@6457..64704176 EXPR_INDEX@6457..64674177 EXPR_VAR@6457..64604178 NAME@6457..64604179 IDENT@6457..6460 "std"4180 DOT@6460..6461 "."4181 NAME@6461..64674182 IDENT@6461..6467 "length"4183 ARGS_DESC@6467..64704184 L_PAREN@6467..6468 "("4185 ARG@6468..64694186 EXPR_VAR@6468..64694187 NAME@6468..64694188 IDENT@6468..6469 "a"4189 R_PAREN@6469..6470 ")"4190 WHITESPACE@6470..6471 " "4191 MINUS@6471..6472 "-"4192 WHITESPACE@6472..6473 " "4193 EXPR_NUMBER@6473..64744194 FLOAT@6473..6474 "1"4195 R_BRACK@6474..6475 "]"4196 R_PAREN@6475..6476 ")"4197 WHITESPACE@6476..6477 " "4198 EQ@6477..6479 "=="4199 WHITESPACE@6479..6480 " "4200 EXPR_APPLY@6480..64874201 EXPR_VAR@6480..64844202 NAME@6480..64844203 IDENT@6480..6484 "keyF"4204 ARGS_DESC@6484..64874205 L_PAREN@6484..6485 "("4206 ARG@6485..64864207 EXPR_VAR@6485..64864208 NAME@6485..64864209 IDENT@6485..6486 "b"4210 R_PAREN@6486..6487 ")"4211 WHITESPACE@6487..6488 " "4212 THEN_KW@6488..6492 "then"4213 WHITESPACE@6492..6501 "\n "4214 TRUE_EXPR@6501..65024215 EXPR_VAR@6501..65024216 NAME@6501..65024217 IDENT@6501..6502 "a"4218 WHITESPACE@6502..6509 "\n "4219 ELSE_KW@6509..6513 "else"4220 WHITESPACE@6513..6522 "\n "4221 FALSE_EXPR@6522..65294222 EXPR_BINARY@6522..65294223 LHS_EXPR@6522..65234224 EXPR_VAR@6522..65234225 NAME@6522..65234226 IDENT@6522..6523 "a"4227 WHITESPACE@6523..6524 " "4228 PLUS@6524..6525 "+"4229 WHITESPACE@6525..6526 " "4230 EXPR_ARRAY@6526..65294231 L_BRACK@6526..6527 "["4232 EXPR_VAR@6527..65284233 NAME@6527..65284234 IDENT@6527..6528 "b"4235 R_BRACK@6528..6529 "]"4236 SEMI@6529..6530 ";"4237 WHITESPACE@6530..6535 "\n "4238 EXPR_APPLY@6535..65564239 EXPR_INDEX@6535..65444240 EXPR_VAR@6535..65384241 NAME@6535..65384242 IDENT@6535..6538 "std"4243 DOT@6538..6539 "."4244 NAME@6539..65444245 IDENT@6539..6544 "foldl"4246 ARGS_DESC@6544..65564247 L_PAREN@6544..6545 "("4248 ARG@6545..65464249 EXPR_VAR@6545..65464250 NAME@6545..65464251 IDENT@6545..6546 "f"4252 COMMA@6546..6547 ","4253 WHITESPACE@6547..6548 " "4254 ARG@6548..65514255 EXPR_VAR@6548..65514256 NAME@6548..65514257 IDENT@6548..6551 "arr"4258 COMMA@6551..6552 ","4259 WHITESPACE@6552..6553 " "4260 ARG@6553..65554261 EXPR_ARRAY@6553..65554262 L_BRACK@6553..6554 "["4263 R_BRACK@6554..6555 "]"4264 R_PAREN@6555..6556 ")"4265 COMMA@6556..6557 ","4266 WHITESPACE@6557..6561 "\n\n "4267 MEMBER_FIELD@6561..66204268 FIELD_METHOD@6561..66204269 FIELD_NAME_FIXED@6561..65644270 NAME@6561..65644271 IDENT@6561..6564 "set"4272 PARAMS_DESC@6564..65784273 L_PAREN@6564..6565 "("4274 PARAM@6565..65684275 DESTRUCT_FULL@6565..65684276 NAME@6565..65684277 IDENT@6565..6568 "arr"4278 COMMA@6568..6569 ","4279 WHITESPACE@6569..6570 " "4280 PARAM@6570..65774281 DESTRUCT_FULL@6570..65744282 NAME@6570..65744283 IDENT@6570..6574 "keyF"4284 ASSIGN@6574..6575 "="4285 EXPR_VAR@6575..65774286 NAME@6575..65774287 IDENT@6575..6577 "id"4288 R_PAREN@6577..6578 ")"4289 COLONCOLON@6578..6580 "::"4290 WHITESPACE@6580..6585 "\n "4291 EXPR_APPLY@6585..66204292 EXPR_INDEX@6585..65934293 EXPR_VAR@6585..65884294 NAME@6585..65884295 IDENT@6585..6588 "std"4296 DOT@6588..6589 "."4297 NAME@6589..65934298 IDENT@6589..6593 "uniq"4299 ARGS_DESC@6593..66204300 L_PAREN@6593..6594 "("4301 ARG@6594..66134302 EXPR_APPLY@6594..66134303 EXPR_INDEX@6594..66024304 EXPR_VAR@6594..65974305 NAME@6594..65974306 IDENT@6594..6597 "std"4307 DOT@6597..6598 "."4308 NAME@6598..66024309 IDENT@6598..6602 "sort"4310 ARGS_DESC@6602..66134311 L_PAREN@6602..6603 "("4312 ARG@6603..66064313 EXPR_VAR@6603..66064314 NAME@6603..66064315 IDENT@6603..6606 "arr"4316 COMMA@6606..6607 ","4317 WHITESPACE@6607..6608 " "4318 ARG@6608..66124319 EXPR_VAR@6608..66124320 NAME@6608..66124321 IDENT@6608..6612 "keyF"4322 R_PAREN@6612..6613 ")"4323 COMMA@6613..6614 ","4324 WHITESPACE@6614..6615 " "4325 ARG@6615..66194326 EXPR_VAR@6615..66194327 NAME@6615..66194328 IDENT@6615..6619 "keyF"4329 R_PAREN@6619..6620 ")"4330 COMMA@6620..6621 ","4331 WHITESPACE@6621..6625 "\n\n "4332 MEMBER_FIELD@6625..67604333 FIELD_METHOD@6625..67604334 FIELD_NAME_FIXED@6625..66344335 NAME@6625..66344336 IDENT@6625..6634 "setMember"4337 PARAMS_DESC@6634..66514338 L_PAREN@6634..6635 "("4339 PARAM@6635..66364340 DESTRUCT_FULL@6635..66364341 NAME@6635..66364342 IDENT@6635..6636 "x"4343 COMMA@6636..6637 ","4344 WHITESPACE@6637..6638 " "4345 PARAM@6638..66414346 DESTRUCT_FULL@6638..66414347 NAME@6638..66414348 IDENT@6638..6641 "arr"4349 COMMA@6641..6642 ","4350 WHITESPACE@6642..6643 " "4351 PARAM@6643..66504352 DESTRUCT_FULL@6643..66474353 NAME@6643..66474354 IDENT@6643..6647 "keyF"4355 ASSIGN@6647..6648 "="4356 EXPR_VAR@6648..66504357 NAME@6648..66504358 IDENT@6648..6650 "id"4359 R_PAREN@6650..6651 ")"4360 COLONCOLON@6651..6653 "::"4361 WHITESPACE@6653..6658 "\n "4362 SINGLE_LINE_SLASH_COMMENT@6658..6712 "// TODO(dcunnin): Bin ..."4363 WHITESPACE@6712..6716 " "4364 EXPR_BINARY@6716..67604365 LHS_EXPR@6716..67564366 EXPR_APPLY@6716..67564367 EXPR_INDEX@6716..67264368 EXPR_VAR@6716..67194369 NAME@6716..67194370 IDENT@6716..6719 "std"4371 DOT@6719..6720 "."4372 NAME@6720..67264373 IDENT@6720..6726 "length"4374 ARGS_DESC@6726..67564375 L_PAREN@6726..6727 "("4376 ARG@6727..67554377 EXPR_APPLY@6727..67554378 EXPR_INDEX@6727..67394379 EXPR_VAR@6727..67304380 NAME@6727..67304381 IDENT@6727..6730 "std"4382 DOT@6730..6731 "."4383 NAME@6731..67394384 IDENT@6731..6739 "setInter"4385 ARGS_DESC@6739..67554386 L_PAREN@6739..6740 "("4387 ARG@6740..67434388 EXPR_ARRAY@6740..67434389 L_BRACK@6740..6741 "["4390 EXPR_VAR@6741..67424391 NAME@6741..67424392 IDENT@6741..6742 "x"4393 R_BRACK@6742..6743 "]"4394 COMMA@6743..6744 ","4395 WHITESPACE@6744..6745 " "4396 ARG@6745..67484397 EXPR_VAR@6745..67484398 NAME@6745..67484399 IDENT@6745..6748 "arr"4400 COMMA@6748..6749 ","4401 WHITESPACE@6749..6750 " "4402 ARG@6750..67544403 EXPR_VAR@6750..67544404 NAME@6750..67544405 IDENT@6750..6754 "keyF"4406 R_PAREN@6754..6755 ")"4407 R_PAREN@6755..6756 ")"4408 WHITESPACE@6756..6757 " "4409 GT@6757..6758 ">"4410 WHITESPACE@6758..6759 " "4411 EXPR_NUMBER@6759..67604412 FLOAT@6759..6760 "0"4413 COMMA@6760..6761 ","4414 WHITESPACE@6761..6765 "\n\n "4415 MEMBER_FIELD@6765..73144416 FIELD_METHOD@6765..73144417 FIELD_NAME_FIXED@6765..67734418 NAME@6765..67734419 IDENT@6765..6773 "setUnion"4420 PARAMS_DESC@6773..67884421 L_PAREN@6773..6774 "("4422 PARAM@6774..67754423 DESTRUCT_FULL@6774..67754424 NAME@6774..67754425 IDENT@6774..6775 "a"4426 COMMA@6775..6776 ","4427 WHITESPACE@6776..6777 " "4428 PARAM@6777..67784429 DESTRUCT_FULL@6777..67784430 NAME@6777..67784431 IDENT@6777..6778 "b"4432 COMMA@6778..6779 ","4433 WHITESPACE@6779..6780 " "4434 PARAM@6780..67874435 DESTRUCT_FULL@6780..67844436 NAME@6780..67844437 IDENT@6780..6784 "keyF"4438 ASSIGN@6784..6785 "="4439 EXPR_VAR@6785..67874440 NAME@6785..67874441 IDENT@6785..6787 "id"4442 R_PAREN@6787..6788 ")"4443 COLONCOLON@6788..6790 "::"4444 WHITESPACE@6790..6795 "\n "4445 SINGLE_LINE_SLASH_COMMENT@6795..6837 "// NOTE: order matter ..."4446 WHITESPACE@6837..6841 " "4447 EXPR_LOCAL@6841..73144448 LOCAL_KW@6841..6846 "local"4449 WHITESPACE@6846..6847 " "4450 BIND_FUNCTION@6847..72894451 NAME@6847..68504452 IDENT@6847..6850 "aux"4453 PARAMS_DESC@6850..68674454 L_PAREN@6850..6851 "("4455 PARAM@6851..68524456 DESTRUCT_FULL@6851..68524457 NAME@6851..68524458 IDENT@6851..6852 "a"4459 COMMA@6852..6853 ","4460 WHITESPACE@6853..6854 " "4461 PARAM@6854..68554462 DESTRUCT_FULL@6854..68554463 NAME@6854..68554464 IDENT@6854..6855 "b"4465 COMMA@6855..6856 ","4466 WHITESPACE@6856..6857 " "4467 PARAM@6857..68584468 DESTRUCT_FULL@6857..68584469 NAME@6857..68584470 IDENT@6857..6858 "i"4471 COMMA@6858..6859 ","4472 WHITESPACE@6859..6860 " "4473 PARAM@6860..68614474 DESTRUCT_FULL@6860..68614475 NAME@6860..68614476 IDENT@6860..6861 "j"4477 COMMA@6861..6862 ","4478 WHITESPACE@6862..6863 " "4479 PARAM@6863..68664480 DESTRUCT_FULL@6863..68664481 NAME@6863..68664482 IDENT@6863..6866 "acc"4483 R_PAREN@6866..6867 ")"4484 WHITESPACE@6867..6868 " "4485 ASSIGN@6868..6869 "="4486 WHITESPACE@6869..6876 "\n "4487 EXPR_IF_THEN_ELSE@6876..72894488 IF_KW@6876..6878 "if"4489 WHITESPACE@6878..6879 " "4490 EXPR_BINARY@6879..68974491 LHS_EXPR@6879..68804492 EXPR_VAR@6879..68804493 NAME@6879..68804494 IDENT@6879..6880 "i"4495 WHITESPACE@6880..6881 " "4496 GE@6881..6883 ">="4497 WHITESPACE@6883..6884 " "4498 EXPR_APPLY@6884..68974499 EXPR_INDEX@6884..68944500 EXPR_VAR@6884..68874501 NAME@6884..68874502 IDENT@6884..6887 "std"4503 DOT@6887..6888 "."4504 NAME@6888..68944505 IDENT@6888..6894 "length"4506 ARGS_DESC@6894..68974507 L_PAREN@6894..6895 "("4508 ARG@6895..68964509 EXPR_VAR@6895..68964510 NAME@6895..68964511 IDENT@6895..6896 "a"4512 R_PAREN@6896..6897 ")"4513 WHITESPACE@6897..6898 " "4514 THEN_KW@6898..6902 "then"4515 WHITESPACE@6902..6911 "\n "4516 TRUE_EXPR@6911..69224517 EXPR_BINARY@6911..69224518 LHS_EXPR@6911..69144519 EXPR_VAR@6911..69144520 NAME@6911..69144521 IDENT@6911..6914 "acc"4522 WHITESPACE@6914..6915 " "4523 PLUS@6915..6916 "+"4524 WHITESPACE@6916..6917 " "4525 EXPR_SLICE@6917..69224526 EXPR_VAR@6917..69184527 NAME@6917..69184528 IDENT@6917..6918 "b"4529 SLICE_DESC@6918..69224530 L_BRACK@6918..6919 "["4531 EXPR_VAR@6919..69204532 NAME@6919..69204533 IDENT@6919..6920 "j"4534 COLON@6920..6921 ":"4535 R_BRACK@6921..6922 "]"4536 WHITESPACE@6922..6929 "\n "4537 ELSE_KW@6929..6933 "else"4538 WHITESPACE@6933..6934 " "4539 FALSE_EXPR@6934..72894540 EXPR_IF_THEN_ELSE@6934..72894541 IF_KW@6934..6936 "if"4542 WHITESPACE@6936..6937 " "4543 EXPR_BINARY@6937..69554544 LHS_EXPR@6937..69384545 EXPR_VAR@6937..69384546 NAME@6937..69384547 IDENT@6937..6938 "j"4548 WHITESPACE@6938..6939 " "4549 GE@6939..6941 ">="4550 WHITESPACE@6941..6942 " "4551 EXPR_APPLY@6942..69554552 EXPR_INDEX@6942..69524553 EXPR_VAR@6942..69454554 NAME@6942..69454555 IDENT@6942..6945 "std"4556 DOT@6945..6946 "."4557 NAME@6946..69524558 IDENT@6946..6952 "length"4559 ARGS_DESC@6952..69554560 L_PAREN@6952..6953 "("4561 ARG@6953..69544562 EXPR_VAR@6953..69544563 NAME@6953..69544564 IDENT@6953..6954 "b"4565 R_PAREN@6954..6955 ")"4566 WHITESPACE@6955..6956 " "4567 THEN_KW@6956..6960 "then"4568 WHITESPACE@6960..6969 "\n "4569 TRUE_EXPR@6969..69804570 EXPR_BINARY@6969..69804571 LHS_EXPR@6969..69724572 EXPR_VAR@6969..69724573 NAME@6969..69724574 IDENT@6969..6972 "acc"4575 WHITESPACE@6972..6973 " "4576 PLUS@6973..6974 "+"4577 WHITESPACE@6974..6975 " "4578 EXPR_SLICE@6975..69804579 EXPR_VAR@6975..69764580 NAME@6975..69764581 IDENT@6975..6976 "a"4582 SLICE_DESC@6976..69804583 L_BRACK@6976..6977 "["4584 EXPR_VAR@6977..69784585 NAME@6977..69784586 IDENT@6977..6978 "i"4587 COLON@6978..6979 ":"4588 R_BRACK@6979..6980 "]"4589 WHITESPACE@6980..6987 "\n "4590 ELSE_KW@6987..6991 "else"4591 WHITESPACE@6991..7000 "\n "4592 FALSE_EXPR@7000..72894593 EXPR_LOCAL@7000..72894594 LOCAL_KW@7000..7005 "local"4595 WHITESPACE@7005..7006 " "4596 BIND_DESTRUCT@7006..70214597 DESTRUCT_FULL@7006..70084598 NAME@7006..70084599 IDENT@7006..7008 "ak"4600 WHITESPACE@7008..7009 " "4601 ASSIGN@7009..7010 "="4602 WHITESPACE@7010..7011 " "4603 EXPR_APPLY@7011..70214604 EXPR_VAR@7011..70154605 NAME@7011..70154606 IDENT@7011..7015 "keyF"4607 ARGS_DESC@7015..70214608 L_PAREN@7015..7016 "("4609 ARG@7016..70204610 EXPR_INDEX_EXPR@7016..70204611 LHS_EXPR@7016..70174612 EXPR_VAR@7016..70174613 NAME@7016..70174614 IDENT@7016..7017 "a"4615 L_BRACK@7017..7018 "["4616 EXPR_VAR@7018..70194617 NAME@7018..70194618 IDENT@7018..7019 "i"4619 R_BRACK@7019..7020 "]"4620 R_PAREN@7020..7021 ")"4621 SEMI@7021..7022 ";"4622 WHITESPACE@7022..7031 "\n "4623 EXPR_LOCAL@7031..72894624 LOCAL_KW@7031..7036 "local"4625 WHITESPACE@7036..7037 " "4626 BIND_DESTRUCT@7037..70524627 DESTRUCT_FULL@7037..70394628 NAME@7037..70394629 IDENT@7037..7039 "bk"4630 WHITESPACE@7039..7040 " "4631 ASSIGN@7040..7041 "="4632 WHITESPACE@7041..7042 " "4633 EXPR_APPLY@7042..70524634 EXPR_VAR@7042..70464635 NAME@7042..70464636 IDENT@7042..7046 "keyF"4637 ARGS_DESC@7046..70524638 L_PAREN@7046..7047 "("4639 ARG@7047..70514640 EXPR_INDEX_EXPR@7047..70514641 LHS_EXPR@7047..70484642 EXPR_VAR@7047..70484643 NAME@7047..70484644 IDENT@7047..7048 "b"4645 L_BRACK@7048..7049 "["4646 EXPR_VAR@7049..70504647 NAME@7049..70504648 IDENT@7049..7050 "j"4649 R_BRACK@7050..7051 "]"4650 R_PAREN@7051..7052 ")"4651 SEMI@7052..7053 ";"4652 WHITESPACE@7053..7062 "\n "4653 EXPR_IF_THEN_ELSE@7062..72894654 IF_KW@7062..7064 "if"4655 WHITESPACE@7064..7065 " "4656 EXPR_BINARY@7065..70734657 LHS_EXPR@7065..70674658 EXPR_VAR@7065..70674659 NAME@7065..70674660 IDENT@7065..7067 "ak"4661 WHITESPACE@7067..7068 " "4662 EQ@7068..7070 "=="4663 WHITESPACE@7070..7071 " "4664 EXPR_VAR@7071..70734665 NAME@7071..70734666 IDENT@7071..7073 "bk"4667 WHITESPACE@7073..7074 " "4668 THEN_KW@7074..7078 "then"4669 WHITESPACE@7078..7089 "\n "4670 TRUE_EXPR@7089..71374671 EXPR_APPLY@7089..71374672 EXPR_VAR@7089..70924673 NAME@7089..70924674 IDENT@7089..7092 "aux"4675 ARGS_DESC@7092..71374676 L_PAREN@7092..7093 "("4677 ARG@7093..70944678 EXPR_VAR@7093..70944679 NAME@7093..70944680 IDENT@7093..7094 "a"4681 COMMA@7094..7095 ","4682 WHITESPACE@7095..7096 " "4683 ARG@7096..70974684 EXPR_VAR@7096..70974685 NAME@7096..70974686 IDENT@7096..7097 "b"4687 COMMA@7097..7098 ","4688 WHITESPACE@7098..7099 " "4689 ARG@7099..71044690 EXPR_BINARY@7099..71044691 LHS_EXPR@7099..71004692 EXPR_VAR@7099..71004693 NAME@7099..71004694 IDENT@7099..7100 "i"4695 WHITESPACE@7100..7101 " "4696 PLUS@7101..7102 "+"4697 WHITESPACE@7102..7103 " "4698 EXPR_NUMBER@7103..71044699 FLOAT@7103..7104 "1"4700 COMMA@7104..7105 ","4701 WHITESPACE@7105..7106 " "4702 ARG@7106..71114703 EXPR_BINARY@7106..71114704 LHS_EXPR@7106..71074705 EXPR_VAR@7106..71074706 NAME@7106..71074707 IDENT@7106..7107 "j"4708 WHITESPACE@7107..7108 " "4709 PLUS@7108..7109 "+"4710 WHITESPACE@7109..7110 " "4711 EXPR_NUMBER@7110..71114712 FLOAT@7110..7111 "1"4713 COMMA@7111..7112 ","4714 WHITESPACE@7112..7113 " "4715 ARG@7113..71254716 EXPR_BINARY@7113..71254717 LHS_EXPR@7113..71164718 EXPR_VAR@7113..71164719 NAME@7113..71164720 IDENT@7113..7116 "acc"4721 WHITESPACE@7116..7117 " "4722 PLUS@7117..7118 "+"4723 WHITESPACE@7118..7119 " "4724 EXPR_ARRAY@7119..71254725 L_BRACK@7119..7120 "["4726 EXPR_INDEX_EXPR@7120..71244727 LHS_EXPR@7120..71214728 EXPR_VAR@7120..71214729 NAME@7120..71214730 IDENT@7120..7121 "a"4731 L_BRACK@7121..7122 "["4732 EXPR_VAR@7122..71234733 NAME@7122..71234734 IDENT@7122..7123 "i"4735 R_BRACK@7123..7124 "]"4736 R_BRACK@7124..7125 "]"4737 R_PAREN@7125..7126 ")"4738 WHITESPACE@7126..7127 " "4739 TAILSTRICT_KW@7127..7137 "tailstrict"4740 WHITESPACE@7137..7146 "\n "4741 ELSE_KW@7146..7150 "else"4742 WHITESPACE@7150..7151 " "4743 FALSE_EXPR@7151..72894744 EXPR_IF_THEN_ELSE@7151..72894745 IF_KW@7151..7153 "if"4746 WHITESPACE@7153..7154 " "4747 EXPR_BINARY@7154..71614748 LHS_EXPR@7154..71564749 EXPR_VAR@7154..71564750 NAME@7154..71564751 IDENT@7154..7156 "ak"4752 WHITESPACE@7156..7157 " "4753 LT@7157..7158 "<"4754 WHITESPACE@7158..7159 " "4755 EXPR_VAR@7159..71614756 NAME@7159..71614757 IDENT@7159..7161 "bk"4758 WHITESPACE@7161..7162 " "4759 THEN_KW@7162..7166 "then"4760 WHITESPACE@7166..7177 "\n "4761 TRUE_EXPR@7177..72214762 EXPR_APPLY@7177..72214763 EXPR_VAR@7177..71804764 NAME@7177..71804765 IDENT@7177..7180 "aux"4766 ARGS_DESC@7180..72214767 L_PAREN@7180..7181 "("4768 ARG@7181..71824769 EXPR_VAR@7181..71824770 NAME@7181..71824771 IDENT@7181..7182 "a"4772 COMMA@7182..7183 ","4773 WHITESPACE@7183..7184 " "4774 ARG@7184..71854775 EXPR_VAR@7184..71854776 NAME@7184..71854777 IDENT@7184..7185 "b"4778 COMMA@7185..7186 ","4779 WHITESPACE@7186..7187 " "4780 ARG@7187..71924781 EXPR_BINARY@7187..71924782 LHS_EXPR@7187..71884783 EXPR_VAR@7187..71884784 NAME@7187..71884785 IDENT@7187..7188 "i"4786 WHITESPACE@7188..7189 " "4787 PLUS@7189..7190 "+"4788 WHITESPACE@7190..7191 " "4789 EXPR_NUMBER@7191..71924790 FLOAT@7191..7192 "1"4791 COMMA@7192..7193 ","4792 WHITESPACE@7193..7194 " "4793 ARG@7194..71954794 EXPR_VAR@7194..71954795 NAME@7194..71954796 IDENT@7194..7195 "j"4797 COMMA@7195..7196 ","4798 WHITESPACE@7196..7197 " "4799 ARG@7197..72094800 EXPR_BINARY@7197..72094801 LHS_EXPR@7197..72004802 EXPR_VAR@7197..72004803 NAME@7197..72004804 IDENT@7197..7200 "acc"4805 WHITESPACE@7200..7201 " "4806 PLUS@7201..7202 "+"4807 WHITESPACE@7202..7203 " "4808 EXPR_ARRAY@7203..72094809 L_BRACK@7203..7204 "["4810 EXPR_INDEX_EXPR@7204..72084811 LHS_EXPR@7204..72054812 EXPR_VAR@7204..72054813 NAME@7204..72054814 IDENT@7204..7205 "a"4815 L_BRACK@7205..7206 "["4816 EXPR_VAR@7206..72074817 NAME@7206..72074818 IDENT@7206..7207 "i"4819 R_BRACK@7207..7208 "]"4820 R_BRACK@7208..7209 "]"4821 R_PAREN@7209..7210 ")"4822 WHITESPACE@7210..7211 " "4823 TAILSTRICT_KW@7211..7221 "tailstrict"4824 WHITESPACE@7221..7230 "\n "4825 ELSE_KW@7230..7234 "else"4826 WHITESPACE@7234..7245 "\n "4827 FALSE_EXPR@7245..72894828 EXPR_APPLY@7245..72894829 EXPR_VAR@7245..72484830 NAME@7245..72484831 IDENT@7245..7248 "aux"4832 ARGS_DESC@7248..72894833 L_PAREN@7248..7249 "("4834 ARG@7249..72504835 EXPR_VAR@7249..72504836 NAME@7249..72504837 IDENT@7249..7250 "a"4838 COMMA@7250..7251 ","4839 WHITESPACE@7251..7252 " "4840 ARG@7252..72534841 EXPR_VAR@7252..72534842 NAME@7252..72534843 IDENT@7252..7253 "b"4844 COMMA@7253..7254 ","4845 WHITESPACE@7254..7255 " "4846 ARG@7255..72564847 EXPR_VAR@7255..72564848 NAME@7255..72564849 IDENT@7255..7256 "i"4850 COMMA@7256..7257 ","4851 WHITESPACE@7257..7258 " "4852 ARG@7258..72634853 EXPR_BINARY@7258..72634854 LHS_EXPR@7258..72594855 EXPR_VAR@7258..72594856 NAME@7258..72594857 IDENT@7258..7259 "j"4858 WHITESPACE@7259..7260 " "4859 PLUS@7260..7261 "+"4860 WHITESPACE@7261..7262 " "4861 EXPR_NUMBER@7262..72634862 FLOAT@7262..7263 "1"4863 COMMA@7263..7264 ","4864 WHITESPACE@7264..7265 " "4865 ARG@7265..72774866 EXPR_BINARY@7265..72774867 LHS_EXPR@7265..72684868 EXPR_VAR@7265..72684869 NAME@7265..72684870 IDENT@7265..7268 "acc"4871 WHITESPACE@7268..7269 " "4872 PLUS@7269..7270 "+"4873 WHITESPACE@7270..7271 " "4874 EXPR_ARRAY@7271..72774875 L_BRACK@7271..7272 "["4876 EXPR_INDEX_EXPR@7272..72764877 LHS_EXPR@7272..72734878 EXPR_VAR@7272..72734879 NAME@7272..72734880 IDENT@7272..7273 "b"4881 L_BRACK@7273..7274 "["4882 EXPR_VAR@7274..72754883 NAME@7274..72754884 IDENT@7274..7275 "j"4885 R_BRACK@7275..7276 "]"4886 R_BRACK@7276..7277 "]"4887 R_PAREN@7277..7278 ")"4888 WHITESPACE@7278..7279 " "4889 TAILSTRICT_KW@7279..7289 "tailstrict"4890 SEMI@7289..7290 ";"4891 WHITESPACE@7290..7295 "\n "4892 EXPR_APPLY@7295..73144893 EXPR_VAR@7295..72984894 NAME@7295..72984895 IDENT@7295..7298 "aux"4896 ARGS_DESC@7298..73144897 L_PAREN@7298..7299 "("4898 ARG@7299..73004899 EXPR_VAR@7299..73004900 NAME@7299..73004901 IDENT@7299..7300 "a"4902 COMMA@7300..7301 ","4903 WHITESPACE@7301..7302 " "4904 ARG@7302..73034905 EXPR_VAR@7302..73034906 NAME@7302..73034907 IDENT@7302..7303 "b"4908 COMMA@7303..7304 ","4909 WHITESPACE@7304..7305 " "4910 ARG@7305..73064911 EXPR_NUMBER@7305..73064912 FLOAT@7305..7306 "0"4913 COMMA@7306..7307 ","4914 WHITESPACE@7307..7308 " "4915 ARG@7308..73094916 EXPR_NUMBER@7308..73094917 FLOAT@7308..7309 "0"4918 COMMA@7309..7310 ","4919 WHITESPACE@7310..7311 " "4920 ARG@7311..73134921 EXPR_ARRAY@7311..73134922 L_BRACK@7311..7312 "["4923 R_BRACK@7312..7313 "]"4924 R_PAREN@7313..7314 ")"4925 COMMA@7314..7315 ","4926 WHITESPACE@7315..7319 "\n\n "4927 MEMBER_FIELD@7319..77414928 FIELD_METHOD@7319..77414929 FIELD_NAME_FIXED@7319..73274930 NAME@7319..73274931 IDENT@7319..7327 "setInter"4932 PARAMS_DESC@7327..73424933 L_PAREN@7327..7328 "("4934 PARAM@7328..73294935 DESTRUCT_FULL@7328..73294936 NAME@7328..73294937 IDENT@7328..7329 "a"4938 COMMA@7329..7330 ","4939 WHITESPACE@7330..7331 " "4940 PARAM@7331..73324941 DESTRUCT_FULL@7331..73324942 NAME@7331..73324943 IDENT@7331..7332 "b"4944 COMMA@7332..7333 ","4945 WHITESPACE@7333..7334 " "4946 PARAM@7334..73414947 DESTRUCT_FULL@7334..73384948 NAME@7334..73384949 IDENT@7334..7338 "keyF"4950 ASSIGN@7338..7339 "="4951 EXPR_VAR@7339..73414952 NAME@7339..73414953 IDENT@7339..7341 "id"4954 R_PAREN@7341..7342 ")"4955 COLONCOLON@7342..7344 "::"4956 WHITESPACE@7344..7349 "\n "4957 EXPR_LOCAL@7349..77414958 LOCAL_KW@7349..7354 "local"4959 WHITESPACE@7354..7355 " "4960 BIND_FUNCTION@7355..77054961 NAME@7355..73584962 IDENT@7355..7358 "aux"4963 PARAMS_DESC@7358..73754964 L_PAREN@7358..7359 "("4965 PARAM@7359..73604966 DESTRUCT_FULL@7359..73604967 NAME@7359..73604968 IDENT@7359..7360 "a"4969 COMMA@7360..7361 ","4970 WHITESPACE@7361..7362 " "4971 PARAM@7362..73634972 DESTRUCT_FULL@7362..73634973 NAME@7362..73634974 IDENT@7362..7363 "b"4975 COMMA@7363..7364 ","4976 WHITESPACE@7364..7365 " "4977 PARAM@7365..73664978 DESTRUCT_FULL@7365..73664979 NAME@7365..73664980 IDENT@7365..7366 "i"4981 COMMA@7366..7367 ","4982 WHITESPACE@7367..7368 " "4983 PARAM@7368..73694984 DESTRUCT_FULL@7368..73694985 NAME@7368..73694986 IDENT@7368..7369 "j"4987 COMMA@7369..7370 ","4988 WHITESPACE@7370..7371 " "4989 PARAM@7371..73744990 DESTRUCT_FULL@7371..73744991 NAME@7371..73744992 IDENT@7371..7374 "acc"4993 R_PAREN@7374..7375 ")"4994 WHITESPACE@7375..7376 " "4995 ASSIGN@7376..7377 "="4996 WHITESPACE@7377..7384 "\n "4997 EXPR_IF_THEN_ELSE@7384..77054998 IF_KW@7384..7386 "if"4999 WHITESPACE@7386..7387 " "5000 EXPR_BINARY@7387..74275001 LHS_EXPR@7387..74055002 EXPR_BINARY@7387..74055003 LHS_EXPR@7387..73885004 EXPR_VAR@7387..73885005 NAME@7387..73885006 IDENT@7387..7388 "i"5007 WHITESPACE@7388..7389 " "5008 GE@7389..7391 ">="5009 WHITESPACE@7391..7392 " "5010 EXPR_APPLY@7392..74055011 EXPR_INDEX@7392..74025012 EXPR_VAR@7392..73955013 NAME@7392..73955014 IDENT@7392..7395 "std"5015 DOT@7395..7396 "."5016 NAME@7396..74025017 IDENT@7396..7402 "length"5018 ARGS_DESC@7402..74055019 L_PAREN@7402..7403 "("5020 ARG@7403..74045021 EXPR_VAR@7403..74045022 NAME@7403..74045023 IDENT@7403..7404 "a"5024 R_PAREN@7404..7405 ")"5025 WHITESPACE@7405..7406 " "5026 OR@7406..7408 "||"5027 WHITESPACE@7408..7409 " "5028 EXPR_BINARY@7409..74275029 LHS_EXPR@7409..74105030 EXPR_VAR@7409..74105031 NAME@7409..74105032 IDENT@7409..7410 "j"5033 WHITESPACE@7410..7411 " "5034 GE@7411..7413 ">="5035 WHITESPACE@7413..7414 " "5036 EXPR_APPLY@7414..74275037 EXPR_INDEX@7414..74245038 EXPR_VAR@7414..74175039 NAME@7414..74175040 IDENT@7414..7417 "std"5041 DOT@7417..7418 "."5042 NAME@7418..74245043 IDENT@7418..7424 "length"5044 ARGS_DESC@7424..74275045 L_PAREN@7424..7425 "("5046 ARG@7425..74265047 EXPR_VAR@7425..74265048 NAME@7425..74265049 IDENT@7425..7426 "b"5050 R_PAREN@7426..7427 ")"5051 WHITESPACE@7427..7428 " "5052 THEN_KW@7428..7432 "then"5053 WHITESPACE@7432..7441 "\n "5054 TRUE_EXPR@7441..74445055 EXPR_VAR@7441..74445056 NAME@7441..74445057 IDENT@7441..7444 "acc"5058 WHITESPACE@7444..7451 "\n "5059 ELSE_KW@7451..7455 "else"5060 WHITESPACE@7455..7464 "\n "5061 FALSE_EXPR@7464..77055062 EXPR_IF_THEN_ELSE@7464..77055063 IF_KW@7464..7466 "if"5064 WHITESPACE@7466..7467 " "5065 EXPR_BINARY@7467..74915066 LHS_EXPR@7467..74775067 EXPR_APPLY@7467..74775068 EXPR_VAR@7467..74715069 NAME@7467..74715070 IDENT@7467..7471 "keyF"5071 ARGS_DESC@7471..74775072 L_PAREN@7471..7472 "("5073 ARG@7472..74765074 EXPR_INDEX_EXPR@7472..74765075 LHS_EXPR@7472..74735076 EXPR_VAR@7472..74735077 NAME@7472..74735078 IDENT@7472..7473 "a"5079 L_BRACK@7473..7474 "["5080 EXPR_VAR@7474..74755081 NAME@7474..74755082 IDENT@7474..7475 "i"5083 R_BRACK@7475..7476 "]"5084 R_PAREN@7476..7477 ")"5085 WHITESPACE@7477..7478 " "5086 EQ@7478..7480 "=="5087 WHITESPACE@7480..7481 " "5088 EXPR_APPLY@7481..74915089 EXPR_VAR@7481..74855090 NAME@7481..74855091 IDENT@7481..7485 "keyF"5092 ARGS_DESC@7485..74915093 L_PAREN@7485..7486 "("5094 ARG@7486..74905095 EXPR_INDEX_EXPR@7486..74905096 LHS_EXPR@7486..74875097 EXPR_VAR@7486..74875098 NAME@7486..74875099 IDENT@7486..7487 "b"5100 L_BRACK@7487..7488 "["5101 EXPR_VAR@7488..74895102 NAME@7488..74895103 IDENT@7488..7489 "j"5104 R_BRACK@7489..7490 "]"5105 R_PAREN@7490..7491 ")"5106 WHITESPACE@7491..7492 " "5107 THEN_KW@7492..7496 "then"5108 WHITESPACE@7496..7507 "\n "5109 TRUE_EXPR@7507..75555110 EXPR_APPLY@7507..75555111 EXPR_VAR@7507..75105112 NAME@7507..75105113 IDENT@7507..7510 "aux"5114 ARGS_DESC@7510..75555115 L_PAREN@7510..7511 "("5116 ARG@7511..75125117 EXPR_VAR@7511..75125118 NAME@7511..75125119 IDENT@7511..7512 "a"5120 COMMA@7512..7513 ","5121 WHITESPACE@7513..7514 " "5122 ARG@7514..75155123 EXPR_VAR@7514..75155124 NAME@7514..75155125 IDENT@7514..7515 "b"5126 COMMA@7515..7516 ","5127 WHITESPACE@7516..7517 " "5128 ARG@7517..75225129 EXPR_BINARY@7517..75225130 LHS_EXPR@7517..75185131 EXPR_VAR@7517..75185132 NAME@7517..75185133 IDENT@7517..7518 "i"5134 WHITESPACE@7518..7519 " "5135 PLUS@7519..7520 "+"5136 WHITESPACE@7520..7521 " "5137 EXPR_NUMBER@7521..75225138 FLOAT@7521..7522 "1"5139 COMMA@7522..7523 ","5140 WHITESPACE@7523..7524 " "5141 ARG@7524..75295142 EXPR_BINARY@7524..75295143 LHS_EXPR@7524..75255144 EXPR_VAR@7524..75255145 NAME@7524..75255146 IDENT@7524..7525 "j"5147 WHITESPACE@7525..7526 " "5148 PLUS@7526..7527 "+"5149 WHITESPACE@7527..7528 " "5150 EXPR_NUMBER@7528..75295151 FLOAT@7528..7529 "1"5152 COMMA@7529..7530 ","5153 WHITESPACE@7530..7531 " "5154 ARG@7531..75435155 EXPR_BINARY@7531..75435156 LHS_EXPR@7531..75345157 EXPR_VAR@7531..75345158 NAME@7531..75345159 IDENT@7531..7534 "acc"5160 WHITESPACE@7534..7535 " "5161 PLUS@7535..7536 "+"5162 WHITESPACE@7536..7537 " "5163 EXPR_ARRAY@7537..75435164 L_BRACK@7537..7538 "["5165 EXPR_INDEX_EXPR@7538..75425166 LHS_EXPR@7538..75395167 EXPR_VAR@7538..75395168 NAME@7538..75395169 IDENT@7538..7539 "a"5170 L_BRACK@7539..7540 "["5171 EXPR_VAR@7540..75415172 NAME@7540..75415173 IDENT@7540..7541 "i"5174 R_BRACK@7541..7542 "]"5175 R_BRACK@7542..7543 "]"5176 R_PAREN@7543..7544 ")"5177 WHITESPACE@7544..7545 " "5178 TAILSTRICT_KW@7545..7555 "tailstrict"5179 WHITESPACE@7555..7564 "\n "5180 ELSE_KW@7564..7568 "else"5181 WHITESPACE@7568..7569 " "5182 FALSE_EXPR@7569..77055183 EXPR_IF_THEN_ELSE@7569..77055184 IF_KW@7569..7571 "if"5185 WHITESPACE@7571..7572 " "5186 EXPR_BINARY@7572..75955187 LHS_EXPR@7572..75825188 EXPR_APPLY@7572..75825189 EXPR_VAR@7572..75765190 NAME@7572..75765191 IDENT@7572..7576 "keyF"5192 ARGS_DESC@7576..75825193 L_PAREN@7576..7577 "("5194 ARG@7577..75815195 EXPR_INDEX_EXPR@7577..75815196 LHS_EXPR@7577..75785197 EXPR_VAR@7577..75785198 NAME@7577..75785199 IDENT@7577..7578 "a"5200 L_BRACK@7578..7579 "["5201 EXPR_VAR@7579..75805202 NAME@7579..75805203 IDENT@7579..7580 "i"5204 R_BRACK@7580..7581 "]"5205 R_PAREN@7581..7582 ")"5206 WHITESPACE@7582..7583 " "5207 LT@7583..7584 "<"5208 WHITESPACE@7584..7585 " "5209 EXPR_APPLY@7585..75955210 EXPR_VAR@7585..75895211 NAME@7585..75895212 IDENT@7585..7589 "keyF"5213 ARGS_DESC@7589..75955214 L_PAREN@7589..7590 "("5215 ARG@7590..75945216 EXPR_INDEX_EXPR@7590..75945217 LHS_EXPR@7590..75915218 EXPR_VAR@7590..75915219 NAME@7590..75915220 IDENT@7590..7591 "b"5221 L_BRACK@7591..7592 "["5222 EXPR_VAR@7592..75935223 NAME@7592..75935224 IDENT@7592..7593 "j"5225 R_BRACK@7593..7594 "]"5226 R_PAREN@7594..7595 ")"5227 WHITESPACE@7595..7596 " "5228 THEN_KW@7596..7600 "then"5229 WHITESPACE@7600..7611 "\n "5230 TRUE_EXPR@7611..76465231 EXPR_APPLY@7611..76465232 EXPR_VAR@7611..76145233 NAME@7611..76145234 IDENT@7611..7614 "aux"5235 ARGS_DESC@7614..76465236 L_PAREN@7614..7615 "("5237 ARG@7615..76165238 EXPR_VAR@7615..76165239 NAME@7615..76165240 IDENT@7615..7616 "a"5241 COMMA@7616..7617 ","5242 WHITESPACE@7617..7618 " "5243 ARG@7618..76195244 EXPR_VAR@7618..76195245 NAME@7618..76195246 IDENT@7618..7619 "b"5247 COMMA@7619..7620 ","5248 WHITESPACE@7620..7621 " "5249 ARG@7621..76265250 EXPR_BINARY@7621..76265251 LHS_EXPR@7621..76225252 EXPR_VAR@7621..76225253 NAME@7621..76225254 IDENT@7621..7622 "i"5255 WHITESPACE@7622..7623 " "5256 PLUS@7623..7624 "+"5257 WHITESPACE@7624..7625 " "5258 EXPR_NUMBER@7625..76265259 FLOAT@7625..7626 "1"5260 COMMA@7626..7627 ","5261 WHITESPACE@7627..7628 " "5262 ARG@7628..76295263 EXPR_VAR@7628..76295264 NAME@7628..76295265 IDENT@7628..7629 "j"5266 COMMA@7629..7630 ","5267 WHITESPACE@7630..7631 " "5268 ARG@7631..76345269 EXPR_VAR@7631..76345270 NAME@7631..76345271 IDENT@7631..7634 "acc"5272 R_PAREN@7634..7635 ")"5273 WHITESPACE@7635..7636 " "5274 TAILSTRICT_KW@7636..7646 "tailstrict"5275 WHITESPACE@7646..7655 "\n "5276 ELSE_KW@7655..7659 "else"5277 WHITESPACE@7659..7670 "\n "5278 FALSE_EXPR@7670..77055279 EXPR_APPLY@7670..77055280 EXPR_VAR@7670..76735281 NAME@7670..76735282 IDENT@7670..7673 "aux"5283 ARGS_DESC@7673..77055284 L_PAREN@7673..7674 "("5285 ARG@7674..76755286 EXPR_VAR@7674..76755287 NAME@7674..76755288 IDENT@7674..7675 "a"5289 COMMA@7675..7676 ","5290 WHITESPACE@7676..7677 " "5291 ARG@7677..76785292 EXPR_VAR@7677..76785293 NAME@7677..76785294 IDENT@7677..7678 "b"5295 COMMA@7678..7679 ","5296 WHITESPACE@7679..7680 " "5297 ARG@7680..76815298 EXPR_VAR@7680..76815299 NAME@7680..76815300 IDENT@7680..7681 "i"5301 COMMA@7681..7682 ","5302 WHITESPACE@7682..7683 " "5303 ARG@7683..76885304 EXPR_BINARY@7683..76885305 LHS_EXPR@7683..76845306 EXPR_VAR@7683..76845307 NAME@7683..76845308 IDENT@7683..7684 "j"5309 WHITESPACE@7684..7685 " "5310 PLUS@7685..7686 "+"5311 WHITESPACE@7686..7687 " "5312 EXPR_NUMBER@7687..76885313 FLOAT@7687..7688 "1"5314 COMMA@7688..7689 ","5315 WHITESPACE@7689..7690 " "5316 ARG@7690..76935317 EXPR_VAR@7690..76935318 NAME@7690..76935319 IDENT@7690..7693 "acc"5320 R_PAREN@7693..7694 ")"5321 WHITESPACE@7694..7695 " "5322 TAILSTRICT_KW@7695..7705 "tailstrict"5323 SEMI@7705..7706 ";"5324 WHITESPACE@7706..7711 "\n "5325 EXPR_APPLY@7711..77415326 EXPR_VAR@7711..77145327 NAME@7711..77145328 IDENT@7711..7714 "aux"5329 ARGS_DESC@7714..77415330 L_PAREN@7714..7715 "("5331 ARG@7715..77165332 EXPR_VAR@7715..77165333 NAME@7715..77165334 IDENT@7715..7716 "a"5335 COMMA@7716..7717 ","5336 WHITESPACE@7717..7718 " "5337 ARG@7718..77195338 EXPR_VAR@7718..77195339 NAME@7718..77195340 IDENT@7718..7719 "b"5341 COMMA@7719..7720 ","5342 WHITESPACE@7720..7721 " "5343 ARG@7721..77225344 EXPR_NUMBER@7721..77225345 FLOAT@7721..7722 "0"5346 COMMA@7722..7723 ","5347 WHITESPACE@7723..7724 " "5348 ARG@7724..77255349 EXPR_NUMBER@7724..77255350 FLOAT@7724..7725 "0"5351 COMMA@7725..7726 ","5352 WHITESPACE@7726..7727 " "5353 ARG@7727..77295354 EXPR_ARRAY@7727..77295355 L_BRACK@7727..7728 "["5356 R_BRACK@7728..7729 "]"5357 R_PAREN@7729..7730 ")"5358 WHITESPACE@7730..7731 " "5359 TAILSTRICT_KW@7731..7741 "tailstrict"5360 COMMA@7741..7742 ","5361 WHITESPACE@7742..7746 "\n\n "5362 MEMBER_FIELD@7746..82035363 FIELD_METHOD@7746..82035364 FIELD_NAME_FIXED@7746..77535365 NAME@7746..77535366 IDENT@7746..7753 "setDiff"5367 PARAMS_DESC@7753..77685368 L_PAREN@7753..7754 "("5369 PARAM@7754..77555370 DESTRUCT_FULL@7754..77555371 NAME@7754..77555372 IDENT@7754..7755 "a"5373 COMMA@7755..7756 ","5374 WHITESPACE@7756..7757 " "5375 PARAM@7757..77585376 DESTRUCT_FULL@7757..77585377 NAME@7757..77585378 IDENT@7757..7758 "b"5379 COMMA@7758..7759 ","5380 WHITESPACE@7759..7760 " "5381 PARAM@7760..77675382 DESTRUCT_FULL@7760..77645383 NAME@7760..77645384 IDENT@7760..7764 "keyF"5385 ASSIGN@7764..7765 "="5386 EXPR_VAR@7765..77675387 NAME@7765..77675388 IDENT@7765..7767 "id"5389 R_PAREN@7767..7768 ")"5390 COLONCOLON@7768..7770 "::"5391 WHITESPACE@7770..7775 "\n "5392 EXPR_LOCAL@7775..82035393 LOCAL_KW@7775..7780 "local"5394 WHITESPACE@7780..7781 " "5395 BIND_FUNCTION@7781..81675396 NAME@7781..77845397 IDENT@7781..7784 "aux"5398 PARAMS_DESC@7784..78015399 L_PAREN@7784..7785 "("5400 PARAM@7785..77865401 DESTRUCT_FULL@7785..77865402 NAME@7785..77865403 IDENT@7785..7786 "a"5404 COMMA@7786..7787 ","5405 WHITESPACE@7787..7788 " "5406 PARAM@7788..77895407 DESTRUCT_FULL@7788..77895408 NAME@7788..77895409 IDENT@7788..7789 "b"5410 COMMA@7789..7790 ","5411 WHITESPACE@7790..7791 " "5412 PARAM@7791..77925413 DESTRUCT_FULL@7791..77925414 NAME@7791..77925415 IDENT@7791..7792 "i"5416 COMMA@7792..7793 ","5417 WHITESPACE@7793..7794 " "5418 PARAM@7794..77955419 DESTRUCT_FULL@7794..77955420 NAME@7794..77955421 IDENT@7794..7795 "j"5422 COMMA@7795..7796 ","5423 WHITESPACE@7796..7797 " "5424 PARAM@7797..78005425 DESTRUCT_FULL@7797..78005426 NAME@7797..78005427 IDENT@7797..7800 "acc"5428 R_PAREN@7800..7801 ")"5429 WHITESPACE@7801..7802 " "5430 ASSIGN@7802..7803 "="5431 WHITESPACE@7803..7810 "\n "5432 EXPR_IF_THEN_ELSE@7810..81675433 IF_KW@7810..7812 "if"5434 WHITESPACE@7812..7813 " "5435 EXPR_BINARY@7813..78315436 LHS_EXPR@7813..78145437 EXPR_VAR@7813..78145438 NAME@7813..78145439 IDENT@7813..7814 "i"5440 WHITESPACE@7814..7815 " "5441 GE@7815..7817 ">="5442 WHITESPACE@7817..7818 " "5443 EXPR_APPLY@7818..78315444 EXPR_INDEX@7818..78285445 EXPR_VAR@7818..78215446 NAME@7818..78215447 IDENT@7818..7821 "std"5448 DOT@7821..7822 "."5449 NAME@7822..78285450 IDENT@7822..7828 "length"5451 ARGS_DESC@7828..78315452 L_PAREN@7828..7829 "("5453 ARG@7829..78305454 EXPR_VAR@7829..78305455 NAME@7829..78305456 IDENT@7829..7830 "a"5457 R_PAREN@7830..7831 ")"5458 WHITESPACE@7831..7832 " "5459 THEN_KW@7832..7836 "then"5460 WHITESPACE@7836..7845 "\n "5461 TRUE_EXPR@7845..78485462 EXPR_VAR@7845..78485463 NAME@7845..78485464 IDENT@7845..7848 "acc"5465 WHITESPACE@7848..7855 "\n "5466 ELSE_KW@7855..7859 "else"5467 WHITESPACE@7859..7860 " "5468 FALSE_EXPR@7860..81675469 EXPR_IF_THEN_ELSE@7860..81675470 IF_KW@7860..7862 "if"5471 WHITESPACE@7862..7863 " "5472 EXPR_BINARY@7863..78815473 LHS_EXPR@7863..78645474 EXPR_VAR@7863..78645475 NAME@7863..78645476 IDENT@7863..7864 "j"5477 WHITESPACE@7864..7865 " "5478 GE@7865..7867 ">="5479 WHITESPACE@7867..7868 " "5480 EXPR_APPLY@7868..78815481 EXPR_INDEX@7868..78785482 EXPR_VAR@7868..78715483 NAME@7868..78715484 IDENT@7868..7871 "std"5485 DOT@7871..7872 "."5486 NAME@7872..78785487 IDENT@7872..7878 "length"5488 ARGS_DESC@7878..78815489 L_PAREN@7878..7879 "("5490 ARG@7879..78805491 EXPR_VAR@7879..78805492 NAME@7879..78805493 IDENT@7879..7880 "b"5494 R_PAREN@7880..7881 ")"5495 WHITESPACE@7881..7882 " "5496 THEN_KW@7882..7886 "then"5497 WHITESPACE@7886..7895 "\n "5498 TRUE_EXPR@7895..79065499 EXPR_BINARY@7895..79065500 LHS_EXPR@7895..78985501 EXPR_VAR@7895..78985502 NAME@7895..78985503 IDENT@7895..7898 "acc"5504 WHITESPACE@7898..7899 " "5505 PLUS@7899..7900 "+"5506 WHITESPACE@7900..7901 " "5507 EXPR_SLICE@7901..79065508 EXPR_VAR@7901..79025509 NAME@7901..79025510 IDENT@7901..7902 "a"5511 SLICE_DESC@7902..79065512 L_BRACK@7902..7903 "["5513 EXPR_VAR@7903..79045514 NAME@7903..79045515 IDENT@7903..7904 "i"5516 COLON@7904..7905 ":"5517 R_BRACK@7905..7906 "]"5518 WHITESPACE@7906..7913 "\n "5519 ELSE_KW@7913..7917 "else"5520 WHITESPACE@7917..7926 "\n "5521 FALSE_EXPR@7926..81675522 EXPR_IF_THEN_ELSE@7926..81675523 IF_KW@7926..7928 "if"5524 WHITESPACE@7928..7929 " "5525 EXPR_BINARY@7929..79535526 LHS_EXPR@7929..79395527 EXPR_APPLY@7929..79395528 EXPR_VAR@7929..79335529 NAME@7929..79335530 IDENT@7929..7933 "keyF"5531 ARGS_DESC@7933..79395532 L_PAREN@7933..7934 "("5533 ARG@7934..79385534 EXPR_INDEX_EXPR@7934..79385535 LHS_EXPR@7934..79355536 EXPR_VAR@7934..79355537 NAME@7934..79355538 IDENT@7934..7935 "a"5539 L_BRACK@7935..7936 "["5540 EXPR_VAR@7936..79375541 NAME@7936..79375542 IDENT@7936..7937 "i"5543 R_BRACK@7937..7938 "]"5544 R_PAREN@7938..7939 ")"5545 WHITESPACE@7939..7940 " "5546 EQ@7940..7942 "=="5547 WHITESPACE@7942..7943 " "5548 EXPR_APPLY@7943..79535549 EXPR_VAR@7943..79475550 NAME@7943..79475551 IDENT@7943..7947 "keyF"5552 ARGS_DESC@7947..79535553 L_PAREN@7947..7948 "("5554 ARG@7948..79525555 EXPR_INDEX_EXPR@7948..79525556 LHS_EXPR@7948..79495557 EXPR_VAR@7948..79495558 NAME@7948..79495559 IDENT@7948..7949 "b"5560 L_BRACK@7949..7950 "["5561 EXPR_VAR@7950..79515562 NAME@7950..79515563 IDENT@7950..7951 "j"5564 R_BRACK@7951..7952 "]"5565 R_PAREN@7952..7953 ")"5566 WHITESPACE@7953..7954 " "5567 THEN_KW@7954..7958 "then"5568 WHITESPACE@7958..7969 "\n "5569 TRUE_EXPR@7969..80085570 EXPR_APPLY@7969..80085571 EXPR_VAR@7969..79725572 NAME@7969..79725573 IDENT@7969..7972 "aux"5574 ARGS_DESC@7972..80085575 L_PAREN@7972..7973 "("5576 ARG@7973..79745577 EXPR_VAR@7973..79745578 NAME@7973..79745579 IDENT@7973..7974 "a"5580 COMMA@7974..7975 ","5581 WHITESPACE@7975..7976 " "5582 ARG@7976..79775583 EXPR_VAR@7976..79775584 NAME@7976..79775585 IDENT@7976..7977 "b"5586 COMMA@7977..7978 ","5587 WHITESPACE@7978..7979 " "5588 ARG@7979..79845589 EXPR_BINARY@7979..79845590 LHS_EXPR@7979..79805591 EXPR_VAR@7979..79805592 NAME@7979..79805593 IDENT@7979..7980 "i"5594 WHITESPACE@7980..7981 " "5595 PLUS@7981..7982 "+"5596 WHITESPACE@7982..7983 " "5597 EXPR_NUMBER@7983..79845598 FLOAT@7983..7984 "1"5599 COMMA@7984..7985 ","5600 WHITESPACE@7985..7986 " "5601 ARG@7986..79915602 EXPR_BINARY@7986..79915603 LHS_EXPR@7986..79875604 EXPR_VAR@7986..79875605 NAME@7986..79875606 IDENT@7986..7987 "j"5607 WHITESPACE@7987..7988 " "5608 PLUS@7988..7989 "+"5609 WHITESPACE@7989..7990 " "5610 EXPR_NUMBER@7990..79915611 FLOAT@7990..7991 "1"5612 COMMA@7991..7992 ","5613 WHITESPACE@7992..7993 " "5614 ARG@7993..79965615 EXPR_VAR@7993..79965616 NAME@7993..79965617 IDENT@7993..7996 "acc"5618 R_PAREN@7996..7997 ")"5619 WHITESPACE@7997..7998 " "5620 TAILSTRICT_KW@7998..8008 "tailstrict"5621 WHITESPACE@8008..8017 "\n "5622 ELSE_KW@8017..8021 "else"5623 WHITESPACE@8021..8022 " "5624 FALSE_EXPR@8022..81675625 EXPR_IF_THEN_ELSE@8022..81675626 IF_KW@8022..8024 "if"5627 WHITESPACE@8024..8025 " "5628 EXPR_BINARY@8025..80485629 LHS_EXPR@8025..80355630 EXPR_APPLY@8025..80355631 EXPR_VAR@8025..80295632 NAME@8025..80295633 IDENT@8025..8029 "keyF"5634 ARGS_DESC@8029..80355635 L_PAREN@8029..8030 "("5636 ARG@8030..80345637 EXPR_INDEX_EXPR@8030..80345638 LHS_EXPR@8030..80315639 EXPR_VAR@8030..80315640 NAME@8030..80315641 IDENT@8030..8031 "a"5642 L_BRACK@8031..8032 "["5643 EXPR_VAR@8032..80335644 NAME@8032..80335645 IDENT@8032..8033 "i"5646 R_BRACK@8033..8034 "]"5647 R_PAREN@8034..8035 ")"5648 WHITESPACE@8035..8036 " "5649 LT@8036..8037 "<"5650 WHITESPACE@8037..8038 " "5651 EXPR_APPLY@8038..80485652 EXPR_VAR@8038..80425653 NAME@8038..80425654 IDENT@8038..8042 "keyF"5655 ARGS_DESC@8042..80485656 L_PAREN@8042..8043 "("5657 ARG@8043..80475658 EXPR_INDEX_EXPR@8043..80475659 LHS_EXPR@8043..80445660 EXPR_VAR@8043..80445661 NAME@8043..80445662 IDENT@8043..8044 "b"5663 L_BRACK@8044..8045 "["5664 EXPR_VAR@8045..80465665 NAME@8045..80465666 IDENT@8045..8046 "j"5667 R_BRACK@8046..8047 "]"5668 R_PAREN@8047..8048 ")"5669 WHITESPACE@8048..8049 " "5670 THEN_KW@8049..8053 "then"5671 WHITESPACE@8053..8064 "\n "5672 TRUE_EXPR@8064..81085673 EXPR_APPLY@8064..81085674 EXPR_VAR@8064..80675675 NAME@8064..80675676 IDENT@8064..8067 "aux"5677 ARGS_DESC@8067..81085678 L_PAREN@8067..8068 "("5679 ARG@8068..80695680 EXPR_VAR@8068..80695681 NAME@8068..80695682 IDENT@8068..8069 "a"5683 COMMA@8069..8070 ","5684 WHITESPACE@8070..8071 " "5685 ARG@8071..80725686 EXPR_VAR@8071..80725687 NAME@8071..80725688 IDENT@8071..8072 "b"5689 COMMA@8072..8073 ","5690 WHITESPACE@8073..8074 " "5691 ARG@8074..80795692 EXPR_BINARY@8074..80795693 LHS_EXPR@8074..80755694 EXPR_VAR@8074..80755695 NAME@8074..80755696 IDENT@8074..8075 "i"5697 WHITESPACE@8075..8076 " "5698 PLUS@8076..8077 "+"5699 WHITESPACE@8077..8078 " "5700 EXPR_NUMBER@8078..80795701 FLOAT@8078..8079 "1"5702 COMMA@8079..8080 ","5703 WHITESPACE@8080..8081 " "5704 ARG@8081..80825705 EXPR_VAR@8081..80825706 NAME@8081..80825707 IDENT@8081..8082 "j"5708 COMMA@8082..8083 ","5709 WHITESPACE@8083..8084 " "5710 ARG@8084..80965711 EXPR_BINARY@8084..80965712 LHS_EXPR@8084..80875713 EXPR_VAR@8084..80875714 NAME@8084..80875715 IDENT@8084..8087 "acc"5716 WHITESPACE@8087..8088 " "5717 PLUS@8088..8089 "+"5718 WHITESPACE@8089..8090 " "5719 EXPR_ARRAY@8090..80965720 L_BRACK@8090..8091 "["5721 EXPR_INDEX_EXPR@8091..80955722 LHS_EXPR@8091..80925723 EXPR_VAR@8091..80925724 NAME@8091..80925725 IDENT@8091..8092 "a"5726 L_BRACK@8092..8093 "["5727 EXPR_VAR@8093..80945728 NAME@8093..80945729 IDENT@8093..8094 "i"5730 R_BRACK@8094..8095 "]"5731 R_BRACK@8095..8096 "]"5732 R_PAREN@8096..8097 ")"5733 WHITESPACE@8097..8098 " "5734 TAILSTRICT_KW@8098..8108 "tailstrict"5735 WHITESPACE@8108..8117 "\n "5736 ELSE_KW@8117..8121 "else"5737 WHITESPACE@8121..8132 "\n "5738 FALSE_EXPR@8132..81675739 EXPR_APPLY@8132..81675740 EXPR_VAR@8132..81355741 NAME@8132..81355742 IDENT@8132..8135 "aux"5743 ARGS_DESC@8135..81675744 L_PAREN@8135..8136 "("5745 ARG@8136..81375746 EXPR_VAR@8136..81375747 NAME@8136..81375748 IDENT@8136..8137 "a"5749 COMMA@8137..8138 ","5750 WHITESPACE@8138..8139 " "5751 ARG@8139..81405752 EXPR_VAR@8139..81405753 NAME@8139..81405754 IDENT@8139..8140 "b"5755 COMMA@8140..8141 ","5756 WHITESPACE@8141..8142 " "5757 ARG@8142..81435758 EXPR_VAR@8142..81435759 NAME@8142..81435760 IDENT@8142..8143 "i"5761 COMMA@8143..8144 ","5762 WHITESPACE@8144..8145 " "5763 ARG@8145..81505764 EXPR_BINARY@8145..81505765 LHS_EXPR@8145..81465766 EXPR_VAR@8145..81465767 NAME@8145..81465768 IDENT@8145..8146 "j"5769 WHITESPACE@8146..8147 " "5770 PLUS@8147..8148 "+"5771 WHITESPACE@8148..8149 " "5772 EXPR_NUMBER@8149..81505773 FLOAT@8149..8150 "1"5774 COMMA@8150..8151 ","5775 WHITESPACE@8151..8152 " "5776 ARG@8152..81555777 EXPR_VAR@8152..81555778 NAME@8152..81555779 IDENT@8152..8155 "acc"5780 R_PAREN@8155..8156 ")"5781 WHITESPACE@8156..8157 " "5782 TAILSTRICT_KW@8157..8167 "tailstrict"5783 SEMI@8167..8168 ";"5784 WHITESPACE@8168..8173 "\n "5785 EXPR_APPLY@8173..82035786 EXPR_VAR@8173..81765787 NAME@8173..81765788 IDENT@8173..8176 "aux"5789 ARGS_DESC@8176..82035790 L_PAREN@8176..8177 "("5791 ARG@8177..81785792 EXPR_VAR@8177..81785793 NAME@8177..81785794 IDENT@8177..8178 "a"5795 COMMA@8178..8179 ","5796 WHITESPACE@8179..8180 " "5797 ARG@8180..81815798 EXPR_VAR@8180..81815799 NAME@8180..81815800 IDENT@8180..8181 "b"5801 COMMA@8181..8182 ","5802 WHITESPACE@8182..8183 " "5803 ARG@8183..81845804 EXPR_NUMBER@8183..81845805 FLOAT@8183..8184 "0"5806 COMMA@8184..8185 ","5807 WHITESPACE@8185..8186 " "5808 ARG@8186..81875809 EXPR_NUMBER@8186..81875810 FLOAT@8186..8187 "0"5811 COMMA@8187..8188 ","5812 WHITESPACE@8188..8189 " "5813 ARG@8189..81915814 EXPR_ARRAY@8189..81915815 L_BRACK@8189..8190 "["5816 R_BRACK@8190..8191 "]"5817 R_PAREN@8191..8192 ")"5818 WHITESPACE@8192..8193 " "5819 TAILSTRICT_KW@8193..8203 "tailstrict"5820 COMMA@8203..8204 ","5821 WHITESPACE@8204..8208 "\n\n "5822 MEMBER_FIELD@8208..89965823 FIELD_METHOD@8208..89965824 FIELD_NAME_FIXED@8208..82185825 NAME@8208..82185826 IDENT@8208..8218 "mergePatch"5827 PARAMS_DESC@8218..82335828 L_PAREN@8218..8219 "("5829 PARAM@8219..82255830 DESTRUCT_FULL@8219..82255831 NAME@8219..82255832 IDENT@8219..8225 "target"5833 COMMA@8225..8226 ","5834 WHITESPACE@8226..8227 " "5835 PARAM@8227..82325836 DESTRUCT_FULL@8227..82325837 NAME@8227..82325838 IDENT@8227..8232 "patch"5839 R_PAREN@8232..8233 ")"5840 COLONCOLON@8233..8235 "::"5841 WHITESPACE@8235..8240 "\n "5842 EXPR_IF_THEN_ELSE@8240..89965843 IF_KW@8240..8242 "if"5844 WHITESPACE@8242..8243 " "5845 EXPR_APPLY@8243..82625846 EXPR_INDEX@8243..82555847 EXPR_VAR@8243..82465848 NAME@8243..82465849 IDENT@8243..8246 "std"5850 DOT@8246..8247 "."5851 NAME@8247..82555852 IDENT@8247..8255 "isObject"5853 ARGS_DESC@8255..82625854 L_PAREN@8255..8256 "("5855 ARG@8256..82615856 EXPR_VAR@8256..82615857 NAME@8256..82615858 IDENT@8256..8261 "patch"5859 R_PAREN@8261..8262 ")"5860 WHITESPACE@8262..8263 " "5861 THEN_KW@8263..8267 "then"5862 WHITESPACE@8267..8274 "\n "5863 TRUE_EXPR@8274..89755864 EXPR_LOCAL@8274..89755865 LOCAL_KW@8274..8279 "local"5866 WHITESPACE@8279..8280 " "5867 BIND_DESTRUCT@8280..83475868 DESTRUCT_FULL@8280..82935869 NAME@8280..82935870 IDENT@8280..8293 "target_object"5871 WHITESPACE@8293..8294 " "5872 ASSIGN@8294..8295 "="5873 WHITESPACE@8295..8304 "\n "5874 EXPR_IF_THEN_ELSE@8304..83475875 IF_KW@8304..8306 "if"5876 WHITESPACE@8306..8307 " "5877 EXPR_APPLY@8307..83275878 EXPR_INDEX@8307..83195879 EXPR_VAR@8307..83105880 NAME@8307..83105881 IDENT@8307..8310 "std"5882 DOT@8310..8311 "."5883 NAME@8311..83195884 IDENT@8311..8319 "isObject"5885 ARGS_DESC@8319..83275886 L_PAREN@8319..8320 "("5887 ARG@8320..83265888 EXPR_VAR@8320..83265889 NAME@8320..83265890 IDENT@8320..8326 "target"5891 R_PAREN@8326..8327 ")"5892 WHITESPACE@8327..8328 " "5893 THEN_KW@8328..8332 "then"5894 WHITESPACE@8332..8333 " "5895 TRUE_EXPR@8333..83395896 EXPR_VAR@8333..83395897 NAME@8333..83395898 IDENT@8333..8339 "target"5899 WHITESPACE@8339..8340 " "5900 ELSE_KW@8340..8344 "else"5901 WHITESPACE@8344..8345 " "5902 FALSE_EXPR@8345..83475903 EXPR_OBJECT@8345..83475904 OBJ_BODY_MEMBER_LIST@8345..83475905 L_BRACE@8345..8346 "{"5906 R_BRACE@8346..8347 "}"5907 SEMI@8347..8348 ";"5908 WHITESPACE@8348..8356 "\n\n "5909 EXPR_LOCAL@8356..89755910 LOCAL_KW@8356..8361 "local"5911 WHITESPACE@8361..8362 " "5912 BIND_DESTRUCT@8362..84615913 DESTRUCT_FULL@8362..83755914 NAME@8362..83755915 IDENT@8362..8375 "target_fields"5916 WHITESPACE@8375..8376 " "5917 ASSIGN@8376..8377 "="5918 WHITESPACE@8377..8386 "\n "5919 EXPR_IF_THEN_ELSE@8386..84615920 IF_KW@8386..8388 "if"5921 WHITESPACE@8388..8389 " "5922 EXPR_APPLY@8389..84165923 EXPR_INDEX@8389..84015924 EXPR_VAR@8389..83925925 NAME@8389..83925926 IDENT@8389..8392 "std"5927 DOT@8392..8393 "."5928 NAME@8393..84015929 IDENT@8393..8401 "isObject"5930 ARGS_DESC@8401..84165931 L_PAREN@8401..8402 "("5932 ARG@8402..84155933 EXPR_VAR@8402..84155934 NAME@8402..84155935 IDENT@8402..8415 "target_object"5936 R_PAREN@8415..8416 ")"5937 WHITESPACE@8416..8417 " "5938 THEN_KW@8417..8421 "then"5939 WHITESPACE@8421..8422 " "5940 TRUE_EXPR@8422..84535941 EXPR_APPLY@8422..84535942 EXPR_INDEX@8422..84385943 EXPR_VAR@8422..84255944 NAME@8422..84255945 IDENT@8422..8425 "std"5946 DOT@8425..8426 "."5947 NAME@8426..84385948 IDENT@8426..8438 "objectFields"5949 ARGS_DESC@8438..84535950 L_PAREN@8438..8439 "("5951 ARG@8439..84525952 EXPR_VAR@8439..84525953 NAME@8439..84525954 IDENT@8439..8452 "target_object"5955 R_PAREN@8452..8453 ")"5956 WHITESPACE@8453..8454 " "5957 ELSE_KW@8454..8458 "else"5958 WHITESPACE@8458..8459 " "5959 FALSE_EXPR@8459..84615960 EXPR_ARRAY@8459..84615961 L_BRACK@8459..8460 "["5962 R_BRACK@8460..8461 "]"5963 SEMI@8461..8462 ";"5964 WHITESPACE@8462..8470 "\n\n "5965 EXPR_LOCAL@8470..89755966 LOCAL_KW@8470..8475 "local"5967 WHITESPACE@8475..8476 " "5968 BIND_DESTRUCT@8476..85465969 DESTRUCT_FULL@8476..84875970 NAME@8476..84875971 IDENT@8476..8487 "null_fields"5972 WHITESPACE@8487..8488 " "5973 ASSIGN@8488..8489 "="5974 WHITESPACE@8489..8490 " "5975 EXPR_ARRAY_COMP@8490..85465976 L_BRACK@8490..8491 "["5977 EXPR_VAR@8491..84925978 NAME@8491..84925979 IDENT@8491..8492 "k"5980 WHITESPACE@8492..8493 " "5981 FOR_SPEC@8493..85255982 FOR_KW@8493..8496 "for"5983 WHITESPACE@8496..8497 " "5984 NAME@8497..84985985 IDENT@8497..8498 "k"5986 WHITESPACE@8498..8499 " "5987 IN_KW@8499..8501 "in"5988 WHITESPACE@8501..8502 " "5989 EXPR_APPLY@8502..85255990 EXPR_INDEX@8502..85185991 EXPR_VAR@8502..85055992 NAME@8502..85055993 IDENT@8502..8505 "std"5994 DOT@8505..8506 "."5995 NAME@8506..85185996 IDENT@8506..8518 "objectFields"5997 ARGS_DESC@8518..85255998 L_PAREN@8518..8519 "("5999 ARG@8519..85246000 EXPR_VAR@8519..85246001 NAME@8519..85246002 IDENT@8519..8524 "patch"6003 R_PAREN@8524..8525 ")"6004 WHITESPACE@8525..8526 " "6005 IF_SPEC@8526..85456006 IF_KW@8526..8528 "if"6007 WHITESPACE@8528..8529 " "6008 EXPR_BINARY@8529..85456009 LHS_EXPR@8529..85376010 EXPR_INDEX_EXPR@8529..85376011 LHS_EXPR@8529..85346012 EXPR_VAR@8529..85346013 NAME@8529..85346014 IDENT@8529..8534 "patch"6015 L_BRACK@8534..8535 "["6016 EXPR_VAR@8535..85366017 NAME@8535..85366018 IDENT@8535..8536 "k"6019 R_BRACK@8536..8537 "]"6020 WHITESPACE@8537..8538 " "6021 EQ@8538..8540 "=="6022 WHITESPACE@8540..8541 " "6023 EXPR_LITERAL@8541..85456024 NULL_KW@8541..8545 "null"6025 R_BRACK@8545..8546 "]"6026 SEMI@8546..8547 ";"6027 WHITESPACE@8547..8554 "\n "6028 EXPR_LOCAL@8554..89756029 LOCAL_KW@8554..8559 "local"6030 WHITESPACE@8559..8560 " "6031 BIND_DESTRUCT@8560..86266032 DESTRUCT_FULL@8560..85716033 NAME@8560..85716034 IDENT@8560..8571 "both_fields"6035 WHITESPACE@8571..8572 " "6036 ASSIGN@8572..8573 "="6037 WHITESPACE@8573..8574 " "6038 EXPR_APPLY@8574..86266039 EXPR_INDEX@8574..85866040 EXPR_VAR@8574..85776041 NAME@8574..85776042 IDENT@8574..8577 "std"6043 DOT@8577..8578 "."6044 NAME@8578..85866045 IDENT@8578..8586 "setUnion"6046 ARGS_DESC@8586..86266047 L_PAREN@8586..8587 "("6048 ARG@8587..86006049 EXPR_VAR@8587..86006050 NAME@8587..86006051 IDENT@8587..8600 "target_fields"6052 COMMA@8600..8601 ","6053 WHITESPACE@8601..8602 " "6054 ARG@8602..86256055 EXPR_APPLY@8602..86256056 EXPR_INDEX@8602..86186057 EXPR_VAR@8602..86056058 NAME@8602..86056059 IDENT@8602..8605 "std"6060 DOT@8605..8606 "."6061 NAME@8606..86186062 IDENT@8606..8618 "objectFields"6063 ARGS_DESC@8618..86256064 L_PAREN@8618..8619 "("6065 ARG@8619..86246066 EXPR_VAR@8619..86246067 NAME@8619..86246068 IDENT@8619..8624 "patch"6069 R_PAREN@8624..8625 ")"6070 R_PAREN@8625..8626 ")"6071 SEMI@8626..8627 ";"6072 WHITESPACE@8627..8635 "\n\n "6073 EXPR_OBJECT@8635..89756074 OBJ_BODY_MEMBER_LIST@8635..89756075 L_BRACE@8635..8636 "{"6076 WHITESPACE@8636..8645 "\n "6077 MEMBER_FIELD@8645..89676078 FIELD_NORMAL@8645..89126079 FIELD_NAME_DYNAMIC@8645..86486080 L_BRACK@8645..8646 "["6081 EXPR_VAR@8646..86476082 NAME@8646..86476083 IDENT@8646..8647 "k"6084 R_BRACK@8647..8648 "]"6085 COLON@8648..8649 ":"6086 WHITESPACE@8649..8660 "\n "6087 EXPR_IF_THEN_ELSE@8660..89126088 IF_KW@8660..8662 "if"6089 WHITESPACE@8662..8663 " "6090 EXPR_UNARY@8663..86876091 NOT@8663..8664 "!"6092 EXPR_APPLY@8664..86876093 EXPR_INDEX@8664..86776094 EXPR_VAR@8664..86676095 NAME@8664..86676096 IDENT@8664..8667 "std"6097 DOT@8667..8668 "."6098 NAME@8668..86776099 IDENT@8668..8677 "objectHas"6100 ARGS_DESC@8677..86876101 L_PAREN@8677..8678 "("6102 ARG@8678..86836103 EXPR_VAR@8678..86836104 NAME@8678..86836105 IDENT@8678..8683 "patch"6106 COMMA@8683..8684 ","6107 WHITESPACE@8684..8685 " "6108 ARG@8685..86866109 EXPR_VAR@8685..86866110 NAME@8685..86866111 IDENT@8685..8686 "k"6112 R_PAREN@8686..8687 ")"6113 WHITESPACE@8687..8688 " "6114 THEN_KW@8688..8692 "then"6115 WHITESPACE@8692..8705 "\n "6116 TRUE_EXPR@8705..87216117 EXPR_INDEX_EXPR@8705..87216118 LHS_EXPR@8705..87186119 EXPR_VAR@8705..87186120 NAME@8705..87186121 IDENT@8705..8718 "target_object"6122 L_BRACK@8718..8719 "["6123 EXPR_VAR@8719..87206124 NAME@8719..87206125 IDENT@8719..8720 "k"6126 R_BRACK@8720..8721 "]"6127 WHITESPACE@8721..8732 "\n "6128 ELSE_KW@8732..8736 "else"6129 WHITESPACE@8736..8737 " "6130 FALSE_EXPR@8737..89126131 EXPR_IF_THEN_ELSE@8737..89126132 IF_KW@8737..8739 "if"6133 WHITESPACE@8739..8740 " "6134 EXPR_UNARY@8740..87726135 NOT@8740..8741 "!"6136 EXPR_APPLY@8741..87726137 EXPR_INDEX@8741..87546138 EXPR_VAR@8741..87446139 NAME@8741..87446140 IDENT@8741..8744 "std"6141 DOT@8744..8745 "."6142 NAME@8745..87546143 IDENT@8745..8754 "objectHas"6144 ARGS_DESC@8754..87726145 L_PAREN@8754..8755 "("6146 ARG@8755..87686147 EXPR_VAR@8755..87686148 NAME@8755..87686149 IDENT@8755..8768 "target_object"6150 COMMA@8768..8769 ","6151 WHITESPACE@8769..8770 " "6152 ARG@8770..87716153 EXPR_VAR@8770..87716154 NAME@8770..87716155 IDENT@8770..8771 "k"6156 R_PAREN@8771..8772 ")"6157 WHITESPACE@8772..8773 " "6158 THEN_KW@8773..8777 "then"6159 WHITESPACE@8777..8790 "\n "6160 TRUE_EXPR@8790..88316161 EXPR_APPLY@8790..88316162 EXPR_INDEX@8790..88046163 EXPR_VAR@8790..87936164 NAME@8790..87936165 IDENT@8790..8793 "std"6166 DOT@8793..8794 "."6167 NAME@8794..88046168 IDENT@8794..8804 "mergePatch"6169 ARGS_DESC@8804..88316170 L_PAREN@8804..8805 "("6171 ARG@8805..88096172 EXPR_LITERAL@8805..88096173 NULL_KW@8805..8809 "null"6174 COMMA@8809..8810 ","6175 WHITESPACE@8810..8811 " "6176 ARG@8811..88196177 EXPR_INDEX_EXPR@8811..88196178 LHS_EXPR@8811..88166179 EXPR_VAR@8811..88166180 NAME@8811..88166181 IDENT@8811..8816 "patch"6182 L_BRACK@8816..8817 "["6183 EXPR_VAR@8817..88186184 NAME@8817..88186185 IDENT@8817..8818 "k"6186 R_BRACK@8818..8819 "]"6187 R_PAREN@8819..8820 ")"6188 WHITESPACE@8820..8821 " "6189 TAILSTRICT_KW@8821..8831 "tailstrict"6190 WHITESPACE@8831..8842 "\n "6191 ELSE_KW@8842..8846 "else"6192 WHITESPACE@8846..8859 "\n "6193 FALSE_EXPR@8859..89126194 EXPR_APPLY@8859..89126195 EXPR_INDEX@8859..88736196 EXPR_VAR@8859..88626197 NAME@8859..88626198 IDENT@8859..8862 "std"6199 DOT@8862..8863 "."6200 NAME@8863..88736201 IDENT@8863..8873 "mergePatch"6202 ARGS_DESC@8873..89126203 L_PAREN@8873..8874 "("6204 ARG@8874..88906205 EXPR_INDEX_EXPR@8874..88906206 LHS_EXPR@8874..88876207 EXPR_VAR@8874..88876208 NAME@8874..88876209 IDENT@8874..8887 "target_object"6210 L_BRACK@8887..8888 "["6211 EXPR_VAR@8888..88896212 NAME@8888..88896213 IDENT@8888..8889 "k"6214 R_BRACK@8889..8890 "]"6215 COMMA@8890..8891 ","6216 WHITESPACE@8891..8892 " "6217 ARG@8892..89006218 EXPR_INDEX_EXPR@8892..89006219 LHS_EXPR@8892..88976220 EXPR_VAR@8892..88976221 NAME@8892..88976222 IDENT@8892..8897 "patch"6223 L_BRACK@8897..8898 "["6224 EXPR_VAR@8898..88996225 NAME@8898..88996226 IDENT@8898..8899 "k"6227 R_BRACK@8899..8900 "]"6228 R_PAREN@8900..8901 ")"6229 WHITESPACE@8901..8902 " "6230 TAILSTRICT_KW@8902..8912 "tailstrict"6231 WHITESPACE@8912..8921 "\n "6232 FOR_SPEC@8921..89676233 FOR_KW@8921..8924 "for"6234 WHITESPACE@8924..8925 " "6235 NAME@8925..89266236 IDENT@8925..8926 "k"6237 WHITESPACE@8926..8927 " "6238 IN_KW@8927..8929 "in"6239 WHITESPACE@8929..8930 " "6240 EXPR_APPLY@8930..89676241 EXPR_INDEX@8930..89416242 EXPR_VAR@8930..89336243 NAME@8930..89336244 IDENT@8930..8933 "std"6245 DOT@8933..8934 "."6246 NAME@8934..89416247 IDENT@8934..8941 "setDiff"6248 ARGS_DESC@8941..89676249 L_PAREN@8941..8942 "("6250 ARG@8942..89536251 EXPR_VAR@8942..89536252 NAME@8942..89536253 IDENT@8942..8953 "both_fields"6254 COMMA@8953..8954 ","6255 WHITESPACE@8954..8955 " "6256 ARG@8955..89666257 EXPR_VAR@8955..89666258 NAME@8955..89666259 IDENT@8955..8966 "null_fields"6260 R_PAREN@8966..8967 ")"6261 WHITESPACE@8967..8974 "\n "6262 R_BRACE@8974..8975 "}"6263 WHITESPACE@8975..8980 "\n "6264 ELSE_KW@8980..8984 "else"6265 WHITESPACE@8984..8991 "\n "6266 FALSE_EXPR@8991..89966267 EXPR_VAR@8991..89966268 NAME@8991..89966269 IDENT@8991..8996 "patch"6270 COMMA@8996..8997 ","6271 WHITESPACE@8997..9001 "\n\n "6272 MEMBER_FIELD@9001..91076273 FIELD_METHOD@9001..91076274 FIELD_NAME_FIXED@9001..90046275 NAME@9001..90046276 IDENT@9001..9004 "get"6277 PARAMS_DESC@9004..90416278 L_PAREN@9004..9005 "("6279 PARAM@9005..90066280 DESTRUCT_FULL@9005..90066281 NAME@9005..90066282 IDENT@9005..9006 "o"6283 COMMA@9006..9007 ","6284 WHITESPACE@9007..9008 " "6285 PARAM@9008..90096286 DESTRUCT_FULL@9008..90096287 NAME@9008..90096288 IDENT@9008..9009 "f"6289 COMMA@9009..9010 ","6290 WHITESPACE@9010..9011 " "6291 PARAM@9011..90236292 DESTRUCT_FULL@9011..90186293 NAME@9011..90186294 IDENT@9011..9018 "default"6295 ASSIGN@9018..9019 "="6296 EXPR_LITERAL@9019..90236297 NULL_KW@9019..9023 "null"6298 COMMA@9023..9024 ","6299 WHITESPACE@9024..9025 " "6300 PARAM@9025..90406301 DESTRUCT_FULL@9025..90356302 NAME@9025..90356303 IDENT@9025..9035 "inc_hidden"6304 ASSIGN@9035..9036 "="6305 EXPR_LITERAL@9036..90406306 TRUE_KW@9036..9040 "true"6307 R_PAREN@9040..9041 ")"6308 COLONCOLON@9041..9043 "::"6309 WHITESPACE@9043..9048 "\n "6310 EXPR_IF_THEN_ELSE@9048..91076311 IF_KW@9048..9050 "if"6312 WHITESPACE@9050..9051 " "6313 EXPR_APPLY@9051..90846314 EXPR_INDEX@9051..90666315 EXPR_VAR@9051..90546316 NAME@9051..90546317 IDENT@9051..9054 "std"6318 DOT@9054..9055 "."6319 NAME@9055..90666320 IDENT@9055..9066 "objectHasEx"6321 ARGS_DESC@9066..90846322 L_PAREN@9066..9067 "("6323 ARG@9067..90686324 EXPR_VAR@9067..90686325 NAME@9067..90686326 IDENT@9067..9068 "o"6327 COMMA@9068..9069 ","6328 WHITESPACE@9069..9070 " "6329 ARG@9070..90716330 EXPR_VAR@9070..90716331 NAME@9070..90716332 IDENT@9070..9071 "f"6333 COMMA@9071..9072 ","6334 WHITESPACE@9072..9073 " "6335 ARG@9073..90836336 EXPR_VAR@9073..90836337 NAME@9073..90836338 IDENT@9073..9083 "inc_hidden"6339 R_PAREN@9083..9084 ")"6340 WHITESPACE@9084..9085 " "6341 THEN_KW@9085..9089 "then"6342 WHITESPACE@9089..9090 " "6343 TRUE_EXPR@9090..90946344 EXPR_INDEX_EXPR@9090..90946345 LHS_EXPR@9090..90916346 EXPR_VAR@9090..90916347 NAME@9090..90916348 IDENT@9090..9091 "o"6349 L_BRACK@9091..9092 "["6350 EXPR_VAR@9092..90936351 NAME@9092..90936352 IDENT@9092..9093 "f"6353 R_BRACK@9093..9094 "]"6354 WHITESPACE@9094..9095 " "6355 ELSE_KW@9095..9099 "else"6356 WHITESPACE@9099..9100 " "6357 FALSE_EXPR@9100..91076358 EXPR_VAR@9100..91076359 NAME@9100..91076360 IDENT@9100..9107 "default"6361 COMMA@9107..9108 ","6362 WHITESPACE@9108..9112 "\n\n "6363 MEMBER_FIELD@9112..91626364 FIELD_METHOD@9112..91626365 FIELD_NAME_FIXED@9112..91246366 NAME@9112..91246367 IDENT@9112..9124 "objectFields"6368 PARAMS_DESC@9124..91276369 L_PAREN@9124..9125 "("6370 PARAM@9125..91266371 DESTRUCT_FULL@9125..91266372 NAME@9125..91266373 IDENT@9125..9126 "o"6374 R_PAREN@9126..9127 ")"6375 COLONCOLON@9127..9129 "::"6376 WHITESPACE@9129..9134 "\n "6377 EXPR_APPLY@9134..91626378 EXPR_INDEX@9134..91526379 EXPR_VAR@9134..91376380 NAME@9134..91376381 IDENT@9134..9137 "std"6382 DOT@9137..9138 "."6383 NAME@9138..91526384 IDENT@9138..9152 "objectFieldsEx"6385 ARGS_DESC@9152..91626386 L_PAREN@9152..9153 "("6387 ARG@9153..91546388 EXPR_VAR@9153..91546389 NAME@9153..91546390 IDENT@9153..9154 "o"6391 COMMA@9154..9155 ","6392 WHITESPACE@9155..9156 " "6393 ARG@9156..91616394 EXPR_LITERAL@9156..91616395 FALSE_KW@9156..9161 "false"6396 R_PAREN@9161..9162 ")"6397 COMMA@9162..9163 ","6398 WHITESPACE@9163..9167 "\n\n "6399 MEMBER_FIELD@9167..92196400 FIELD_METHOD@9167..92196401 FIELD_NAME_FIXED@9167..91826402 NAME@9167..91826403 IDENT@9167..9182 "objectFieldsAll"6404 PARAMS_DESC@9182..91856405 L_PAREN@9182..9183 "("6406 PARAM@9183..91846407 DESTRUCT_FULL@9183..91846408 NAME@9183..91846409 IDENT@9183..9184 "o"6410 R_PAREN@9184..9185 ")"6411 COLONCOLON@9185..9187 "::"6412 WHITESPACE@9187..9192 "\n "6413 EXPR_APPLY@9192..92196414 EXPR_INDEX@9192..92106415 EXPR_VAR@9192..91956416 NAME@9192..91956417 IDENT@9192..9195 "std"6418 DOT@9195..9196 "."6419 NAME@9196..92106420 IDENT@9196..9210 "objectFieldsEx"6421 ARGS_DESC@9210..92196422 L_PAREN@9210..9211 "("6423 ARG@9211..92126424 EXPR_VAR@9211..92126425 NAME@9211..92126426 IDENT@9211..9212 "o"6427 COMMA@9212..9213 ","6428 WHITESPACE@9213..9214 " "6429 ARG@9214..92186430 EXPR_LITERAL@9214..92186431 TRUE_KW@9214..9218 "true"6432 R_PAREN@9218..9219 ")"6433 COMMA@9219..9220 ","6434 WHITESPACE@9220..9224 "\n\n "6435 MEMBER_FIELD@9224..92746436 FIELD_METHOD@9224..92746437 FIELD_NAME_FIXED@9224..92336438 NAME@9224..92336439 IDENT@9224..9233 "objectHas"6440 PARAMS_DESC@9233..92396441 L_PAREN@9233..9234 "("6442 PARAM@9234..92356443 DESTRUCT_FULL@9234..92356444 NAME@9234..92356445 IDENT@9234..9235 "o"6446 COMMA@9235..9236 ","6447 WHITESPACE@9236..9237 " "6448 PARAM@9237..92386449 DESTRUCT_FULL@9237..92386450 NAME@9237..92386451 IDENT@9237..9238 "f"6452 R_PAREN@9238..9239 ")"6453 COLONCOLON@9239..9241 "::"6454 WHITESPACE@9241..9246 "\n "6455 EXPR_APPLY@9246..92746456 EXPR_INDEX@9246..92616457 EXPR_VAR@9246..92496458 NAME@9246..92496459 IDENT@9246..9249 "std"6460 DOT@9249..9250 "."6461 NAME@9250..92616462 IDENT@9250..9261 "objectHasEx"6463 ARGS_DESC@9261..92746464 L_PAREN@9261..9262 "("6465 ARG@9262..92636466 EXPR_VAR@9262..92636467 NAME@9262..92636468 IDENT@9262..9263 "o"6469 COMMA@9263..9264 ","6470 WHITESPACE@9264..9265 " "6471 ARG@9265..92666472 EXPR_VAR@9265..92666473 NAME@9265..92666474 IDENT@9265..9266 "f"6475 COMMA@9266..9267 ","6476 WHITESPACE@9267..9268 " "6477 ARG@9268..92736478 EXPR_LITERAL@9268..92736479 FALSE_KW@9268..9273 "false"6480 R_PAREN@9273..9274 ")"6481 COMMA@9274..9275 ","6482 WHITESPACE@9275..9279 "\n\n "6483 MEMBER_FIELD@9279..93316484 FIELD_METHOD@9279..93316485 FIELD_NAME_FIXED@9279..92916486 NAME@9279..92916487 IDENT@9279..9291 "objectHasAll"6488 PARAMS_DESC@9291..92976489 L_PAREN@9291..9292 "("6490 PARAM@9292..92936491 DESTRUCT_FULL@9292..92936492 NAME@9292..92936493 IDENT@9292..9293 "o"6494 COMMA@9293..9294 ","6495 WHITESPACE@9294..9295 " "6496 PARAM@9295..92966497 DESTRUCT_FULL@9295..92966498 NAME@9295..92966499 IDENT@9295..9296 "f"6500 R_PAREN@9296..9297 ")"6501 COLONCOLON@9297..9299 "::"6502 WHITESPACE@9299..9304 "\n "6503 EXPR_APPLY@9304..93316504 EXPR_INDEX@9304..93196505 EXPR_VAR@9304..93076506 NAME@9304..93076507 IDENT@9304..9307 "std"6508 DOT@9307..9308 "."6509 NAME@9308..93196510 IDENT@9308..9319 "objectHasEx"6511 ARGS_DESC@9319..93316512 L_PAREN@9319..9320 "("6513 ARG@9320..93216514 EXPR_VAR@9320..93216515 NAME@9320..93216516 IDENT@9320..9321 "o"6517 COMMA@9321..9322 ","6518 WHITESPACE@9322..9323 " "6519 ARG@9323..93246520 EXPR_VAR@9323..93246521 NAME@9323..93246522 IDENT@9323..9324 "f"6523 COMMA@9324..9325 ","6524 WHITESPACE@9325..9326 " "6525 ARG@9326..93306526 EXPR_LITERAL@9326..93306527 TRUE_KW@9326..9330 "true"6528 R_PAREN@9330..9331 ")"6529 COMMA@9331..9332 ","6530 WHITESPACE@9332..9336 "\n\n "6531 MEMBER_FIELD@9336..93936532 FIELD_METHOD@9336..93936533 FIELD_NAME_FIXED@9336..93486534 NAME@9336..93486535 IDENT@9336..9348 "objectValues"6536 PARAMS_DESC@9348..93516537 L_PAREN@9348..9349 "("6538 PARAM@9349..93506539 DESTRUCT_FULL@9349..93506540 NAME@9349..93506541 IDENT@9349..9350 "o"6542 R_PAREN@9350..9351 ")"6543 COLONCOLON@9351..9353 "::"6544 WHITESPACE@9353..9358 "\n "6545 EXPR_ARRAY_COMP@9358..93936546 L_BRACK@9358..9359 "["6547 EXPR_INDEX_EXPR@9359..93636548 LHS_EXPR@9359..93606549 EXPR_VAR@9359..93606550 NAME@9359..93606551 IDENT@9359..9360 "o"6552 L_BRACK@9360..9361 "["6553 EXPR_VAR@9361..93626554 NAME@9361..93626555 IDENT@9361..9362 "k"6556 R_BRACK@9362..9363 "]"6557 WHITESPACE@9363..9364 " "6558 FOR_SPEC@9364..93926559 FOR_KW@9364..9367 "for"6560 WHITESPACE@9367..9368 " "6561 NAME@9368..93696562 IDENT@9368..9369 "k"6563 WHITESPACE@9369..9370 " "6564 IN_KW@9370..9372 "in"6565 WHITESPACE@9372..9373 " "6566 EXPR_APPLY@9373..93926567 EXPR_INDEX@9373..93896568 EXPR_VAR@9373..93766569 NAME@9373..93766570 IDENT@9373..9376 "std"6571 DOT@9376..9377 "."6572 NAME@9377..93896573 IDENT@9377..9389 "objectFields"6574 ARGS_DESC@9389..93926575 L_PAREN@9389..9390 "("6576 ARG@9390..93916577 EXPR_VAR@9390..93916578 NAME@9390..93916579 IDENT@9390..9391 "o"6580 R_PAREN@9391..9392 ")"6581 R_BRACK@9392..9393 "]"6582 COMMA@9393..9394 ","6583 WHITESPACE@9394..9398 "\n\n "6584 MEMBER_FIELD@9398..94616585 FIELD_METHOD@9398..94616586 FIELD_NAME_FIXED@9398..94136587 NAME@9398..94136588 IDENT@9398..9413 "objectValuesAll"6589 PARAMS_DESC@9413..94166590 L_PAREN@9413..9414 "("6591 PARAM@9414..94156592 DESTRUCT_FULL@9414..94156593 NAME@9414..94156594 IDENT@9414..9415 "o"6595 R_PAREN@9415..9416 ")"6596 COLONCOLON@9416..9418 "::"6597 WHITESPACE@9418..9423 "\n "6598 EXPR_ARRAY_COMP@9423..94616599 L_BRACK@9423..9424 "["6600 EXPR_INDEX_EXPR@9424..94286601 LHS_EXPR@9424..94256602 EXPR_VAR@9424..94256603 NAME@9424..94256604 IDENT@9424..9425 "o"6605 L_BRACK@9425..9426 "["6606 EXPR_VAR@9426..94276607 NAME@9426..94276608 IDENT@9426..9427 "k"6609 R_BRACK@9427..9428 "]"6610 WHITESPACE@9428..9429 " "6611 FOR_SPEC@9429..94606612 FOR_KW@9429..9432 "for"6613 WHITESPACE@9432..9433 " "6614 NAME@9433..94346615 IDENT@9433..9434 "k"6616 WHITESPACE@9434..9435 " "6617 IN_KW@9435..9437 "in"6618 WHITESPACE@9437..9438 " "6619 EXPR_APPLY@9438..94606620 EXPR_INDEX@9438..94576621 EXPR_VAR@9438..94416622 NAME@9438..94416623 IDENT@9438..9441 "std"6624 DOT@9441..9442 "."6625 NAME@9442..94576626 IDENT@9442..9457 "objectFieldsAll"6627 ARGS_DESC@9457..94606628 L_PAREN@9457..9458 "("6629 ARG@9458..94596630 EXPR_VAR@9458..94596631 NAME@9458..94596632 IDENT@9458..9459 "o"6633 R_PAREN@9459..9460 ")"6634 R_BRACK@9460..9461 "]"6635 COMMA@9461..9462 ","6636 WHITESPACE@9462..9466 "\n\n "6637 MEMBER_FIELD@9466..96006638 FIELD_METHOD@9466..96006639 FIELD_NAME_FIXED@9466..94776640 NAME@9466..94776641 IDENT@9466..9477 "resolvePath"6642 PARAMS_DESC@9477..94836643 L_PAREN@9477..9478 "("6644 PARAM@9478..94796645 DESTRUCT_FULL@9478..94796646 NAME@9478..94796647 IDENT@9478..9479 "f"6648 COMMA@9479..9480 ","6649 WHITESPACE@9480..9481 " "6650 PARAM@9481..94826651 DESTRUCT_FULL@9481..94826652 NAME@9481..94826653 IDENT@9481..9482 "r"6654 R_PAREN@9482..9483 ")"6655 COLONCOLON@9483..9485 "::"6656 WHITESPACE@9485..9490 "\n "6657 EXPR_LOCAL@9490..96006658 LOCAL_KW@9490..9495 "local"6659 WHITESPACE@9495..9496 " "6660 BIND_DESTRUCT@9496..95196661 DESTRUCT_FULL@9496..94996662 NAME@9496..94996663 IDENT@9496..9499 "arr"6664 WHITESPACE@9499..9500 " "6665 ASSIGN@9500..9501 "="6666 WHITESPACE@9501..9502 " "6667 EXPR_APPLY@9502..95196668 EXPR_INDEX@9502..95116669 EXPR_VAR@9502..95056670 NAME@9502..95056671 IDENT@9502..9505 "std"6672 DOT@9505..9506 "."6673 NAME@9506..95116674 IDENT@9506..9511 "split"6675 ARGS_DESC@9511..95196676 L_PAREN@9511..9512 "("6677 ARG@9512..95136678 EXPR_VAR@9512..95136679 NAME@9512..95136680 IDENT@9512..9513 "f"6681 COMMA@9513..9514 ","6682 WHITESPACE@9514..9515 " "6683 ARG@9515..95186684 EXPR_STRING@9515..95186685 STRING_SINGLE@9515..9518 "'/'"6686 R_PAREN@9518..9519 ")"6687 SEMI@9519..9520 ";"6688 WHITESPACE@9520..9525 "\n "6689 EXPR_APPLY@9525..96006690 EXPR_INDEX@9525..95336691 EXPR_VAR@9525..95286692 NAME@9525..95286693 IDENT@9525..9528 "std"6694 DOT@9528..9529 "."6695 NAME@9529..95336696 IDENT@9529..9533 "join"6697 ARGS_DESC@9533..96006698 L_PAREN@9533..9534 "("6699 ARG@9534..95376700 EXPR_STRING@9534..95376701 STRING_SINGLE@9534..9537 "'/'"6702 COMMA@9537..9538 ","6703 WHITESPACE@9538..9539 " "6704 ARG@9539..95996705 EXPR_BINARY@9539..95996706 LHS_EXPR@9539..95936707 EXPR_APPLY@9539..95936708 EXPR_INDEX@9539..95526709 EXPR_VAR@9539..95426710 NAME@9539..95426711 IDENT@9539..9542 "std"6712 DOT@9542..9543 "."6713 NAME@9543..95526714 IDENT@9543..9552 "makeArray"6715 ARGS_DESC@9552..95936716 L_PAREN@9552..9553 "("6717 ARG@9553..95726718 EXPR_BINARY@9553..95726719 LHS_EXPR@9553..95686720 EXPR_APPLY@9553..95686721 EXPR_INDEX@9553..95636722 EXPR_VAR@9553..95566723 NAME@9553..95566724 IDENT@9553..9556 "std"6725 DOT@9556..9557 "."6726 NAME@9557..95636727 IDENT@9557..9563 "length"6728 ARGS_DESC@9563..95686729 L_PAREN@9563..9564 "("6730 ARG@9564..95676731 EXPR_VAR@9564..95676732 NAME@9564..95676733 IDENT@9564..9567 "arr"6734 R_PAREN@9567..9568 ")"6735 WHITESPACE@9568..9569 " "6736 MINUS@9569..9570 "-"6737 WHITESPACE@9570..9571 " "6738 EXPR_NUMBER@9571..95726739 FLOAT@9571..9572 "1"6740 COMMA@9572..9573 ","6741 WHITESPACE@9573..9574 " "6742 ARG@9574..95926743 EXPR_FUNCTION@9574..95926744 FUNCTION_KW@9574..9582 "function"6745 PARAMS_DESC@9582..95856746 L_PAREN@9582..9583 "("6747 PARAM@9583..95846748 DESTRUCT_FULL@9583..95846749 NAME@9583..95846750 IDENT@9583..9584 "i"6751 R_PAREN@9584..9585 ")"6752 WHITESPACE@9585..9586 " "6753 EXPR_INDEX_EXPR@9586..95926754 LHS_EXPR@9586..95896755 EXPR_VAR@9586..95896756 NAME@9586..95896757 IDENT@9586..9589 "arr"6758 L_BRACK@9589..9590 "["6759 EXPR_VAR@9590..95916760 NAME@9590..95916761 IDENT@9590..9591 "i"6762 R_BRACK@9591..9592 "]"6763 R_PAREN@9592..9593 ")"6764 WHITESPACE@9593..9594 " "6765 PLUS@9594..9595 "+"6766 WHITESPACE@9595..9596 " "6767 EXPR_ARRAY@9596..95996768 L_BRACK@9596..9597 "["6769 EXPR_VAR@9597..95986770 NAME@9597..95986771 IDENT@9597..9598 "r"6772 R_BRACK@9598..9599 "]"6773 R_PAREN@9599..9600 ")"6774 COMMA@9600..9601 ","6775 WHITESPACE@9601..9605 "\n\n "6776 MEMBER_FIELD@9605..100586777 FIELD_METHOD@9605..100586778 FIELD_NAME_FIXED@9605..96106779 NAME@9605..96106780 IDENT@9605..9610 "prune"6781 PARAMS_DESC@9610..96136782 L_PAREN@9610..9611 "("6783 PARAM@9611..96126784 DESTRUCT_FULL@9611..96126785 NAME@9611..96126786 IDENT@9611..9612 "a"6787 R_PAREN@9612..9613 ")"6788 COLONCOLON@9613..9615 "::"6789 WHITESPACE@9615..9620 "\n "6790 EXPR_LOCAL@9620..100586791 LOCAL_KW@9620..9625 "local"6792 WHITESPACE@9625..9626 " "6793 BIND_FUNCTION@9626..98236794 NAME@9626..96356795 IDENT@9626..9635 "isContent"6796 PARAMS_DESC@9635..96386797 L_PAREN@9635..9636 "("6798 PARAM@9636..96376799 DESTRUCT_FULL@9636..96376800 NAME@9636..96376801 IDENT@9636..9637 "b"6802 R_PAREN@9637..9638 ")"6803 WHITESPACE@9638..9639 " "6804 ASSIGN@9639..9640 "="6805 WHITESPACE@9640..9647 "\n "6806 EXPR_IF_THEN_ELSE@9647..98236807 IF_KW@9647..9649 "if"6808 WHITESPACE@9649..9650 " "6809 EXPR_BINARY@9650..96596810 LHS_EXPR@9650..96516811 EXPR_VAR@9650..96516812 NAME@9650..96516813 IDENT@9650..9651 "b"6814 WHITESPACE@9651..9652 " "6815 EQ@9652..9654 "=="6816 WHITESPACE@9654..9655 " "6817 EXPR_LITERAL@9655..96596818 NULL_KW@9655..9659 "null"6819 WHITESPACE@9659..9660 " "6820 THEN_KW@9660..9664 "then"6821 WHITESPACE@9664..9673 "\n "6822 TRUE_EXPR@9673..96786823 EXPR_LITERAL@9673..96786824 FALSE_KW@9673..9678 "false"6825 WHITESPACE@9678..9685 "\n "6826 ELSE_KW@9685..9689 "else"6827 WHITESPACE@9689..9690 " "6828 FALSE_EXPR@9690..98236829 EXPR_IF_THEN_ELSE@9690..98236830 IF_KW@9690..9692 "if"6831 WHITESPACE@9692..9693 " "6832 EXPR_APPLY@9693..97076833 EXPR_INDEX@9693..97046834 EXPR_VAR@9693..96966835 NAME@9693..96966836 IDENT@9693..9696 "std"6837 DOT@9696..9697 "."6838 NAME@9697..97046839 IDENT@9697..9704 "isArray"6840 ARGS_DESC@9704..97076841 L_PAREN@9704..9705 "("6842 ARG@9705..97066843 EXPR_VAR@9705..97066844 NAME@9705..97066845 IDENT@9705..9706 "b"6846 R_PAREN@9706..9707 ")"6847 WHITESPACE@9707..9708 " "6848 THEN_KW@9708..9712 "then"6849 WHITESPACE@9712..9721 "\n "6850 TRUE_EXPR@9721..97386851 EXPR_BINARY@9721..97386852 LHS_EXPR@9721..97346853 EXPR_APPLY@9721..97346854 EXPR_INDEX@9721..97316855 EXPR_VAR@9721..97246856 NAME@9721..97246857 IDENT@9721..9724 "std"6858 DOT@9724..9725 "."6859 NAME@9725..97316860 IDENT@9725..9731 "length"6861 ARGS_DESC@9731..97346862 L_PAREN@9731..9732 "("6863 ARG@9732..97336864 EXPR_VAR@9732..97336865 NAME@9732..97336866 IDENT@9732..9733 "b"6867 R_PAREN@9733..9734 ")"6868 WHITESPACE@9734..9735 " "6869 GT@9735..9736 ">"6870 WHITESPACE@9736..9737 " "6871 EXPR_NUMBER@9737..97386872 FLOAT@9737..9738 "0"6873 WHITESPACE@9738..9745 "\n "6874 ELSE_KW@9745..9749 "else"6875 WHITESPACE@9749..9750 " "6876 FALSE_EXPR@9750..98236877 EXPR_IF_THEN_ELSE@9750..98236878 IF_KW@9750..9752 "if"6879 WHITESPACE@9752..9753 " "6880 EXPR_APPLY@9753..97686881 EXPR_INDEX@9753..97656882 EXPR_VAR@9753..97566883 NAME@9753..97566884 IDENT@9753..9756 "std"6885 DOT@9756..9757 "."6886 NAME@9757..97656887 IDENT@9757..9765 "isObject"6888 ARGS_DESC@9765..97686889 L_PAREN@9765..9766 "("6890 ARG@9766..97676891 EXPR_VAR@9766..97676892 NAME@9766..97676893 IDENT@9766..9767 "b"6894 R_PAREN@9767..9768 ")"6895 WHITESPACE@9768..9769 " "6896 THEN_KW@9769..9773 "then"6897 WHITESPACE@9773..9782 "\n "6898 TRUE_EXPR@9782..97996899 EXPR_BINARY@9782..97996900 LHS_EXPR@9782..97956901 EXPR_APPLY@9782..97956902 EXPR_INDEX@9782..97926903 EXPR_VAR@9782..97856904 NAME@9782..97856905 IDENT@9782..9785 "std"6906 DOT@9785..9786 "."6907 NAME@9786..97926908 IDENT@9786..9792 "length"6909 ARGS_DESC@9792..97956910 L_PAREN@9792..9793 "("6911 ARG@9793..97946912 EXPR_VAR@9793..97946913 NAME@9793..97946914 IDENT@9793..9794 "b"6915 R_PAREN@9794..9795 ")"6916 WHITESPACE@9795..9796 " "6917 GT@9796..9797 ">"6918 WHITESPACE@9797..9798 " "6919 EXPR_NUMBER@9798..97996920 FLOAT@9798..9799 "0"6921 WHITESPACE@9799..9806 "\n "6922 ELSE_KW@9806..9810 "else"6923 WHITESPACE@9810..9819 "\n "6924 FALSE_EXPR@9819..98236925 EXPR_LITERAL@9819..98236926 TRUE_KW@9819..9823 "true"6927 SEMI@9823..9824 ";"6928 WHITESPACE@9824..9829 "\n "6929 EXPR_IF_THEN_ELSE@9829..100586930 IF_KW@9829..9831 "if"6931 WHITESPACE@9831..9832 " "6932 EXPR_APPLY@9832..98466933 EXPR_INDEX@9832..98436934 EXPR_VAR@9832..98356935 NAME@9832..98356936 IDENT@9832..9835 "std"6937 DOT@9835..9836 "."6938 NAME@9836..98436939 IDENT@9836..9843 "isArray"6940 ARGS_DESC@9843..98466941 L_PAREN@9843..9844 "("6942 ARG@9844..98456943 EXPR_VAR@9844..98456944 NAME@9844..98456945 IDENT@9844..9845 "a"6946 R_PAREN@9845..9846 ")"6947 WHITESPACE@9846..9847 " "6948 THEN_KW@9847..9851 "then"6949 WHITESPACE@9851..9858 "\n "6950 TRUE_EXPR@9858..99086951 EXPR_ARRAY_COMP@9858..99086952 L_BRACK@9858..9859 "["6953 EXPR_APPLY@9859..98716954 EXPR_INDEX@9859..98686955 EXPR_VAR@9859..98626956 NAME@9859..98626957 IDENT@9859..9862 "std"6958 DOT@9862..9863 "."6959 NAME@9863..98686960 IDENT@9863..9868 "prune"6961 ARGS_DESC@9868..98716962 L_PAREN@9868..9869 "("6963 ARG@9869..98706964 EXPR_VAR@9869..98706965 NAME@9869..98706966 IDENT@9869..9870 "x"6967 R_PAREN@9870..9871 ")"6968 WHITESPACE@9871..9872 " "6969 FOR_SPEC@9872..98826970 FOR_KW@9872..9875 "for"6971 WHITESPACE@9875..9876 " "6972 NAME@9876..98776973 IDENT@9876..9877 "x"6974 WHITESPACE@9877..9878 " "6975 IN_KW@9878..9880 "in"6976 WHITESPACE@9880..9881 " "6977 EXPR_VAR@9881..98826978 NAME@9881..98826979 IDENT@9881..9882 "a"6980 WHITESPACE@9882..9883 " "6981 IF_SPEC@9883..99076982 IF_KW@9883..9885 "if"6983 WHITESPACE@9885..9886 " "6984 EXPR_APPLY@9886..99076985 EXPR_VAR@9886..98956986 NAME@9886..98956987 IDENT@9886..9895 "isContent"6988 ARGS_DESC@9895..99076989 L_PAREN@9895..9896 "("6990 ARG@9896..99066991 EXPR_APPLY@9896..99066992 EXPR_INDEX@9896..99036993 EXPR_LITERAL@9896..98976994 DOLLAR@9896..9897 "$"6995 DOT@9897..9898 "."6996 NAME@9898..99036997 IDENT@9898..9903 "prune"6998 ARGS_DESC@9903..99066999 L_PAREN@9903..9904 "("7000 ARG@9904..99057001 EXPR_VAR@9904..99057002 NAME@9904..99057003 IDENT@9904..9905 "x"7004 R_PAREN@9905..9906 ")"7005 R_PAREN@9906..9907 ")"7006 R_BRACK@9907..9908 "]"7007 WHITESPACE@9908..9913 "\n "7008 ELSE_KW@9913..9917 "else"7009 WHITESPACE@9917..9918 " "7010 FALSE_EXPR@9918..100587011 EXPR_IF_THEN_ELSE@9918..100587012 IF_KW@9918..9920 "if"7013 WHITESPACE@9920..9921 " "7014 EXPR_APPLY@9921..99367015 EXPR_INDEX@9921..99337016 EXPR_VAR@9921..99247017 NAME@9921..99247018 IDENT@9921..9924 "std"7019 DOT@9924..9925 "."7020 NAME@9925..99337021 IDENT@9925..9933 "isObject"7022 ARGS_DESC@9933..99367023 L_PAREN@9933..9934 "("7024 ARG@9934..99357025 EXPR_VAR@9934..99357026 NAME@9934..99357027 IDENT@9934..9935 "a"7028 R_PAREN@9935..9936 ")"7029 WHITESPACE@9936..9937 " "7030 THEN_KW@9937..9941 "then"7031 WHITESPACE@9941..9942 " "7032 TRUE_EXPR@9942..100457033 EXPR_OBJECT@9942..100457034 OBJ_BODY_MEMBER_LIST@9942..100457035 L_BRACE@9942..9943 "{"7036 WHITESPACE@9943..9950 "\n "7037 MEMBER_FIELD@9950..100397038 FIELD_NORMAL@9950..99687039 FIELD_NAME_DYNAMIC@9950..99537040 L_BRACK@9950..9951 "["7041 EXPR_VAR@9951..99527042 NAME@9951..99527043 IDENT@9951..9952 "x"7044 R_BRACK@9952..9953 "]"7045 COLON@9953..9954 ":"7046 WHITESPACE@9954..9955 " "7047 EXPR_APPLY@9955..99687048 EXPR_INDEX@9955..99627049 EXPR_LITERAL@9955..99567050 DOLLAR@9955..9956 "$"7051 DOT@9956..9957 "."7052 NAME@9957..99627053 IDENT@9957..9962 "prune"7054 ARGS_DESC@9962..99687055 L_PAREN@9962..9963 "("7056 ARG@9963..99677057 EXPR_INDEX_EXPR@9963..99677058 LHS_EXPR@9963..99647059 EXPR_VAR@9963..99647060 NAME@9963..99647061 IDENT@9963..9964 "a"7062 L_BRACK@9964..9965 "["7063 EXPR_VAR@9965..99667064 NAME@9965..99667065 IDENT@9965..9966 "x"7066 R_BRACK@9966..9967 "]"7067 R_PAREN@9967..9968 ")"7068 WHITESPACE@9968..9975 "\n "7069 FOR_SPEC@9975..100037070 FOR_KW@9975..9978 "for"7071 WHITESPACE@9978..9979 " "7072 NAME@9979..99807073 IDENT@9979..9980 "x"7074 WHITESPACE@9980..9981 " "7075 IN_KW@9981..9983 "in"7076 WHITESPACE@9983..9984 " "7077 EXPR_APPLY@9984..100037078 EXPR_INDEX@9984..100007079 EXPR_VAR@9984..99877080 NAME@9984..99877081 IDENT@9984..9987 "std"7082 DOT@9987..9988 "."7083 NAME@9988..100007084 IDENT@9988..10000 "objectFields"7085 ARGS_DESC@10000..100037086 L_PAREN@10000..10001 "("7087 ARG@10001..100027088 EXPR_VAR@10001..100027089 NAME@10001..100027090 IDENT@10001..10002 "a"7091 R_PAREN@10002..10003 ")"7092 WHITESPACE@10003..10010 "\n "7093 IF_SPEC@10010..100397094 IF_KW@10010..10012 "if"7095 WHITESPACE@10012..10013 " "7096 EXPR_APPLY@10013..100397097 EXPR_VAR@10013..100227098 NAME@10013..100227099 IDENT@10013..10022 "isContent"7100 ARGS_DESC@10022..100397101 L_PAREN@10022..10023 "("7102 ARG@10023..100387103 EXPR_APPLY@10023..100387104 EXPR_INDEX@10023..100327105 EXPR_VAR@10023..100267106 NAME@10023..100267107 IDENT@10023..10026 "std"7108 DOT@10026..10027 "."7109 NAME@10027..100327110 IDENT@10027..10032 "prune"7111 ARGS_DESC@10032..100387112 L_PAREN@10032..10033 "("7113 ARG@10033..100377114 EXPR_INDEX_EXPR@10033..100377115 LHS_EXPR@10033..100347116 EXPR_VAR@10033..100347117 NAME@10033..100347118 IDENT@10033..10034 "a"7119 L_BRACK@10034..10035 "["7120 EXPR_VAR@10035..100367121 NAME@10035..100367122 IDENT@10035..10036 "x"7123 R_BRACK@10036..10037 "]"7124 R_PAREN@10037..10038 ")"7125 R_PAREN@10038..10039 ")"7126 WHITESPACE@10039..10044 "\n "7127 R_BRACE@10044..10045 "}"7128 WHITESPACE@10045..10046 " "7129 ELSE_KW@10046..10050 "else"7130 WHITESPACE@10050..10057 "\n "7131 FALSE_EXPR@10057..100587132 EXPR_VAR@10057..100587133 NAME@10057..100587134 IDENT@10057..10058 "a"7135 COMMA@10058..10059 ","7136 WHITESPACE@10059..10063 "\n\n "7137 MEMBER_FIELD@10063..102787138 FIELD_METHOD@10063..102787139 FIELD_NAME_FIXED@10063..100677140 NAME@10063..100677141 IDENT@10063..10067 "find"7142 PARAMS_DESC@10067..100797143 L_PAREN@10067..10068 "("7144 PARAM@10068..100737145 DESTRUCT_FULL@10068..100737146 NAME@10068..100737147 IDENT@10068..10073 "value"7148 COMMA@10073..10074 ","7149 WHITESPACE@10074..10075 " "7150 PARAM@10075..100787151 DESTRUCT_FULL@10075..100787152 NAME@10075..100787153 IDENT@10075..10078 "arr"7154 R_PAREN@10078..10079 ")"7155 COLONCOLON@10079..10081 "::"7156 WHITESPACE@10081..10086 "\n "7157 EXPR_IF_THEN_ELSE@10086..102787158 IF_KW@10086..10088 "if"7159 WHITESPACE@10088..10089 " "7160 EXPR_UNARY@10089..101067161 NOT@10089..10090 "!"7162 EXPR_APPLY@10090..101067163 EXPR_INDEX@10090..101017164 EXPR_VAR@10090..100937165 NAME@10090..100937166 IDENT@10090..10093 "std"7167 DOT@10093..10094 "."7168 NAME@10094..101017169 IDENT@10094..10101 "isArray"7170 ARGS_DESC@10101..101067171 L_PAREN@10101..10102 "("7172 ARG@10102..101057173 EXPR_VAR@10102..101057174 NAME@10102..101057175 IDENT@10102..10105 "arr"7176 R_PAREN@10105..10106 ")"7177 WHITESPACE@10106..10107 " "7178 THEN_KW@10107..10111 "then"7179 WHITESPACE@10111..10118 "\n "7180 TRUE_EXPR@10118..101887181 EXPR_ERROR@10118..101887182 ERROR_KW@10118..10123 "error"7183 WHITESPACE@10123..10124 " "7184 EXPR_BINARY@10124..101887185 LHS_EXPR@10124..101727186 EXPR_STRING@10124..101727187 STRING_SINGLE@10124..10172 "'find second paramete ..."7188 WHITESPACE@10172..10173 " "7189 PLUS@10173..10174 "+"7190 WHITESPACE@10174..10175 " "7191 EXPR_APPLY@10175..101887192 EXPR_INDEX@10175..101837193 EXPR_VAR@10175..101787194 NAME@10175..101787195 IDENT@10175..10178 "std"7196 DOT@10178..10179 "."7197 NAME@10179..101837198 IDENT@10179..10183 "type"7199 ARGS_DESC@10183..101887200 L_PAREN@10183..10184 "("7201 ARG@10184..101877202 EXPR_VAR@10184..101877203 NAME@10184..101877204 IDENT@10184..10187 "arr"7205 R_PAREN@10187..10188 ")"7206 WHITESPACE@10188..10193 "\n "7207 ELSE_KW@10193..10197 "else"7208 WHITESPACE@10197..10204 "\n "7209 FALSE_EXPR@10204..102787210 EXPR_APPLY@10204..102787211 EXPR_INDEX@10204..102147212 EXPR_VAR@10204..102077213 NAME@10204..102077214 IDENT@10204..10207 "std"7215 DOT@10207..10208 "."7216 NAME@10208..102147217 IDENT@10208..10214 "filter"7218 ARGS_DESC@10214..102787219 L_PAREN@10214..10215 "("7220 ARG@10215..102427221 EXPR_FUNCTION@10215..102427222 FUNCTION_KW@10215..10223 "function"7223 PARAMS_DESC@10223..102267224 L_PAREN@10223..10224 "("7225 PARAM@10224..102257226 DESTRUCT_FULL@10224..102257227 NAME@10224..102257228 IDENT@10224..10225 "i"7229 R_PAREN@10225..10226 ")"7230 WHITESPACE@10226..10227 " "7231 EXPR_BINARY@10227..102427232 LHS_EXPR@10227..102337233 EXPR_INDEX_EXPR@10227..102337234 LHS_EXPR@10227..102307235 EXPR_VAR@10227..102307236 NAME@10227..102307237 IDENT@10227..10230 "arr"7238 L_BRACK@10230..10231 "["7239 EXPR_VAR@10231..102327240 NAME@10231..102327241 IDENT@10231..10232 "i"7242 R_BRACK@10232..10233 "]"7243 WHITESPACE@10233..10234 " "7244 EQ@10234..10236 "=="7245 WHITESPACE@10236..10237 " "7246 EXPR_VAR@10237..102427247 NAME@10237..102427248 IDENT@10237..10242 "value"7249 COMMA@10242..10243 ","7250 WHITESPACE@10243..10244 " "7251 ARG@10244..102777252 EXPR_APPLY@10244..102777253 EXPR_INDEX@10244..102537254 EXPR_VAR@10244..102477255 NAME@10244..102477256 IDENT@10244..10247 "std"7257 DOT@10247..10248 "."7258 NAME@10248..102537259 IDENT@10248..10253 "range"7260 ARGS_DESC@10253..102777261 L_PAREN@10253..10254 "("7262 ARG@10254..102557263 EXPR_NUMBER@10254..102557264 FLOAT@10254..10255 "0"7265 COMMA@10255..10256 ","7266 WHITESPACE@10256..10257 " "7267 ARG@10257..102767268 EXPR_BINARY@10257..102767269 LHS_EXPR@10257..102727270 EXPR_APPLY@10257..102727271 EXPR_INDEX@10257..102677272 EXPR_VAR@10257..102607273 NAME@10257..102607274 IDENT@10257..10260 "std"7275 DOT@10260..10261 "."7276 NAME@10261..102677277 IDENT@10261..10267 "length"7278 ARGS_DESC@10267..102727279 L_PAREN@10267..10268 "("7280 ARG@10268..102717281 EXPR_VAR@10268..102717282 NAME@10268..102717283 IDENT@10268..10271 "arr"7284 R_PAREN@10271..10272 ")"7285 WHITESPACE@10272..10273 " "7286 MINUS@10273..10274 "-"7287 WHITESPACE@10274..10275 " "7288 EXPR_NUMBER@10275..102767289 FLOAT@10275..10276 "1"7290 R_PAREN@10276..10277 ")"7291 R_PAREN@10277..10278 ")"7292 COMMA@10278..10279 ","7293 WHITESPACE@10279..10280 "\n"7294 R_BRACE@10280..10281 "}"7295 WHITESPACE@10281..10282 "\n"crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__unexpected_destruct.snapdiffbeforeafterboth--- /dev/null
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__unexpected_destruct.snap
@@ -0,0 +1,32 @@
+---
+source: crates/jrsonnet-rowan-parser/src/tests.rs
+expression: "local * = 1;\na\n"
+---
+SOURCE_FILE@0..15
+ EXPR_LOCAL@0..14
+ LOCAL_KW@0..5 "local"
+ WHITESPACE@5..6 " "
+ BIND_DESTRUCT@6..11
+ ERROR_UNEXPECTED_TOKEN@6..7
+ MUL@6..7 "*"
+ WHITESPACE@7..8 " "
+ ASSIGN@8..9 "="
+ WHITESPACE@9..10 " "
+ EXPR_NUMBER@10..11
+ FLOAT@10..11 "1"
+ SEMI@11..12 ";"
+ WHITESPACE@12..13 "\n"
+ EXPR_VAR@13..14
+ NAME@13..14
+ IDENT@13..14 "a"
+ WHITESPACE@14..15 "\n"
+===
+LocatedSyntaxError { error: Unexpected { expected: Named("destruction specifier"), found: MUL }, range: 6..7 }
+===
+ x syntax error
+ ,-[1:1]
+ 1 | local * = 1;
+ : |
+ : `-- expected destruction specifier, found MUL
+ 2 | a
+ `----
crates/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,29 +2,37 @@
source: crates/jrsonnet-rowan-parser/src/tests.rs
expression: "{\n\ta: 1;\n\tb: 2;\n}\n"
---
-SOURCE_FILE@0..10
- OBJ_BODY@0..7
- L_BRACE@0..1 "{"
- WHITESPACE@1..3 "\n\t"
- MEMBER@3..7
- IDENT@3..4 "a"
- COLON@4..5 ":"
- WHITESPACE@5..6 " "
- EXPR_NUMBER@6..7
- NUMBER@6..7 "1"
- SEMI@7..8 ";"
+SOURCE_FILE@0..11
+ EXPR_OBJECT@0..8
+ OBJ_BODY_MEMBER_LIST@0..8
+ 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"
+ ERROR_UNEXPECTED_TOKEN@7..8
+ SEMI@7..8 ";"
WHITESPACE@8..10 "\n\t"
+ ERROR_UNEXPECTED_TOKEN@10..11
+ IDENT@10..11 "b"
===
-Missing { expected: Unnamed(R_BRACE), offset: 7 }
-Custom { error: "unexpected input after expression", range: 7..8 }
+LocatedSyntaxError { error: Unexpected { expected: Unnamed(R_BRACE), found: SEMI }, range: 7..8 }
+LocatedSyntaxError { error: Unexpected { expected: Unnamed(EOF), found: IDENT }, range: 10..11 }
===
x syntax error
,-[1:1]
1 | {
- 2 | a: 1;
- : ^
- : |`-- unexpected input after expression
- : `-- missing R_BRACE
- 3 | b: 2;
+ 2 | a: 1;
+ : |
+ : `-- expected R_BRACE, found SEMI
+ 3 | b: 2;
+ : |
+ : `-- expected EOF, found IDENT
+ 4 | }
`----
-
crates/jrsonnet-rowan-parser/src/tests.rsdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/tests.rs
+++ b/crates/jrsonnet-rowan-parser/src/tests.rs
@@ -53,8 +53,17 @@
for err in &errors {
writeln!(out, "{:?}", err).unwrap();
}
+ let mut code = text.to_string();
+
+ // Prettier errors at EOF position
+ if code.ends_with('\n') {
+ code.truncate(code.len() - 1);
+ code += " ";
+ }
+ code += " ";
+
let diag = MyDiagnostic {
- code: text.to_string(),
+ code,
spans: errors.into_iter().map(|e| e.into()).collect(),
};
@@ -64,9 +73,16 @@
});
write!(out, "===").unwrap();
- handler.render_report(&mut out, &diag).unwrap();
+ handler
+ .render_report(&mut out, &diag)
+ .expect("fmt error?..");
}
- out
+ out.split('\n')
+ .map(|s| s.trim_end().to_string())
+ .collect::<Vec<String>>()
+ .join("\n")
+ .trim_end()
+ .to_string()
}
macro_rules! mk_test {
($($name:ident => $test:expr)+) => {$(
@@ -165,11 +181,16 @@
|||
hello
"
+
+ unexpected_destruct => "
+ local * = 1;
+ a
+ "
);
#[test]
fn stdlib() {
- let src = jrsonnet_stdlib::STDLIB_STR;
+ let src = include_str!("../../jrsonnet-stdlib/src/std.jsonnet");
let result = process(src);
insta::assert_snapshot!("stdlib", result, src);
}
crates/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
@@ -45,7 +45,7 @@
#[test]
fn sanity() {
assert!(
- (SyntaxKind::ERROR as u32) < 127,
+ (SyntaxKind::LEXING_ERROR as u32) < 127,
"can't keep KindSet as bitset"
);
}
flake.nixdiffbeforeafterboth--- a/flake.nix
+++ b/flake.nix
@@ -131,6 +131,7 @@
cargo-edit
cargo-asm
cargo-outdated
+ cargo-watch
lld
hyperfine
graphviz
xtask/src/sourcegen/mod.rsdiffbeforeafterboth--- a/xtask/src/sourcegen/mod.rs
+++ b/xtask/src/sourcegen/mod.rs
@@ -149,8 +149,9 @@
#[doc(hidden)]
EOF,
#(#token_kinds,)*
+ /// Also acts as __LAST_TOKEN
#[error]
- ERROR,
+ LEXING_ERROR,
#(#nodes,)*
#[doc(hidden)]
__LAST,