difftreelog
feat parse object comprehensions
in: master
29 files changed
crates/jrsonnet-rowan-parser/jsonnet.ungramdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/jsonnet.ungram
+++ b/crates/jrsonnet-rowan-parser/jsonnet.ungram
@@ -194,29 +194,25 @@
MemberBindStmt = ObjLocal
MemberAssertStmt = Assertion
-MemberField = Field
-Member =
- MemberBindStmt
-| MemberAssertStmt
-| MemberField
-
-ObjLocal =
- 'local'
- Bind
-
-FieldNormal =
+MemberFieldNormal =
FieldName
'+'?
Visibility
Expr
-FieldMethod =
+MemberFieldMethod =
FieldName
ParamsDesc
Visibility
Expr
-Field =
- FieldNormal
-| FieldMethod
+Member =
+ MemberBindStmt
+| MemberAssertStmt
+| MemberFieldNormal
+| MemberFieldMethod
+
+ObjLocal =
+ 'local'
+ Bind
FieldNameFixed =
id:Name
@@ -374,3 +370,4 @@
ParsingError =
'ERROR_MISSING_TOKEN!'
| 'ERROR_UNEXPECTED_TOKEN!'
+| 'ERROR_CUSTOM!'
crates/jrsonnet-rowan-parser/src/event.rsdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/event.rs
+++ b/crates/jrsonnet-rowan-parser/src/event.rs
@@ -1,4 +1,4 @@
-use std::mem;
+use std::{mem, num::NonZeroUsize};
use rowan::{GreenNodeBuilder, Language, TextRange, TextSize};
@@ -9,7 +9,7 @@
AstToken, JsonnetLanguage, SyntaxKind,
};
-#[derive(Clone, Debug, PartialEq, Eq)]
+#[derive(Clone, Debug)]
pub enum Event {
/// Used for unfinished markers
Pending,
@@ -18,22 +18,18 @@
kind: SyntaxKind,
/// If marker is preceded or wrapped - instead of reordering events, we
/// insert start event in the end of events Vec instead, and store relative offset to this event here
- forward_parent: Option<usize>,
+ forward_parent: Option<NonZeroUsize>,
},
/// Eat token
- Token {
- kind: SyntaxKind,
- },
+ Token { kind: SyntaxKind },
/// Push token, but do not eat anything,
- VirtualToken {
- kind: SyntaxKind,
- },
+ VirtualToken { kind: SyntaxKind },
/// Position of finished node
Finish {
/// Same as forward_parent of Start, but for wrapping
- wrapper: Option<usize>,
+ wrapper: Option<NonZeroUsize>,
+ error: Option<Box<SyntaxError>>,
},
- Error(SyntaxError),
/// Used for dropped markers and other things
Noop,
}
@@ -74,7 +70,6 @@
let mut eat_start_whitespace = false;
let mut depth = 0;
let mut error_starts_at = Vec::new();
- let mut error_last_range = None;
for idx in 0..self.events.len() {
match mem::replace(&mut self.events[idx], Event::Noop) {
Event::Start {
@@ -84,7 +79,6 @@
if depth != 0 {
self.skip_whitespace();
}
- error_last_range = None;
let mut kinds = vec![kind];
let mut idx = idx;
@@ -94,7 +88,7 @@
// of that, and of that, etc. until we reach a StartNode event without a forward
// parent.
while let Some(fp) = forward_parent {
- idx += fp;
+ idx += fp.get();
forward_parent = if let Event::Start {
kind,
@@ -123,7 +117,6 @@
if eat_start_whitespace {
self.skip_whitespace();
}
- error_last_range = None;
self.token(kind);
eat_start_whitespace = true;
}
@@ -131,31 +124,43 @@
if eat_start_whitespace {
self.skip_whitespace();
}
- error_last_range = None;
self.virtual_token(kind);
eat_start_whitespace = false;
}
- Event::Finish { wrapper } => {
+ Event::Finish { wrapper, error } => {
if depth == 1 {
self.skip_whitespace();
}
- error_last_range = Some((
+ let range = (
error_starts_at.pop().expect("starts == finishes"),
self.text_offset(),
- ));
+ );
+ if let Some(error) = error {
+ self.errors.push(LocatedSyntaxError {
+ error: *error,
+ range: TextRange::new(range.0, range.1),
+ })
+ }
self.builder.finish_node();
depth -= 1;
let mut idx = idx;
let mut wrapper = wrapper;
while let Some(w) = wrapper {
- idx += w;
- wrapper = if let Event::Finish { wrapper } =
+ idx += w.get();
+ wrapper = if let Event::Finish { wrapper, error } =
mem::replace(&mut self.events[idx], Event::Noop)
{
- error_last_range = Some((
+ let range = (
error_starts_at.pop().expect("starts == finishes"),
self.text_offset(),
- ));
+ );
+ if let Some(error) = error {
+ self.errors.push(LocatedSyntaxError {
+ error: *error,
+ range: TextRange::new(range.0, range.1),
+ })
+ }
+
if depth == 1 {
self.skip_whitespace();
}
@@ -170,15 +175,6 @@
}
Event::Pending => panic!("pending event should not appear in finished events"),
Event::Noop => {}
- Event::Error(error) => {
- let (start, end) = error_last_range
- .take()
- .expect("expected error event right after closed node");
- self.errors.push(LocatedSyntaxError {
- error,
- range: TextRange::new(start, end),
- });
- }
}
}
crates/jrsonnet-rowan-parser/src/generated/nodes.rsdiffbeforeafterboth1//! This is a generated file, please do not edit manually. Changes can be2//! made in codegeneration that lives in `xtask` top-level dir.34#![allow(non_snake_case, clippy::match_like_matches_macro)]5use crate::{6 ast::{support, AstChildren, AstNode, AstToken},7 SyntaxKind::{self, *},8 SyntaxNode, SyntaxToken, T,9};1011#[derive(Debug, Clone, PartialEq, Eq, Hash)]12pub struct SourceFile {13 pub(crate) syntax: SyntaxNode,14}15impl SourceFile {16 pub fn expr(&self) -> Option<Expr> {17 support::child(&self.syntax)18 }19}2021#[derive(Debug, Clone, PartialEq, Eq, Hash)]22pub struct ExprBinary {23 pub(crate) syntax: SyntaxNode,24}25impl ExprBinary {26 pub fn lhs(&self) -> Option<LhsExpr> {27 support::child(&self.syntax)28 }29 pub fn binary_operator(&self) -> Option<BinaryOperator> {30 support::token_child(&self.syntax)31 }32 pub fn rhs(&self) -> Option<Expr> {33 support::child(&self.syntax)34 }35}3637#[derive(Debug, Clone, PartialEq, Eq, Hash)]38pub struct LhsExpr {39 pub(crate) syntax: SyntaxNode,40}41impl LhsExpr {42 pub fn expr(&self) -> Option<Expr> {43 support::child(&self.syntax)44 }45}4647#[derive(Debug, Clone, PartialEq, Eq, Hash)]48pub struct ExprUnary {49 pub(crate) syntax: SyntaxNode,50}51impl ExprUnary {52 pub fn unary_operator(&self) -> Option<UnaryOperator> {53 support::token_child(&self.syntax)54 }55 pub fn rhs(&self) -> Option<Expr> {56 support::child(&self.syntax)57 }58}5960#[derive(Debug, Clone, PartialEq, Eq, Hash)]61pub struct ExprSlice {62 pub(crate) syntax: SyntaxNode,63}64impl ExprSlice {65 pub fn expr(&self) -> Option<Expr> {66 support::child(&self.syntax)67 }68 pub fn slice_desc(&self) -> Option<SliceDesc> {69 support::child(&self.syntax)70 }71}7273#[derive(Debug, Clone, PartialEq, Eq, Hash)]74pub struct SliceDesc {75 pub(crate) syntax: SyntaxNode,76}77impl SliceDesc {78 pub fn l_brack_token(&self) -> Option<SyntaxToken> {79 support::token(&self.syntax, T!['['])80 }81 pub fn from(&self) -> Option<Expr> {82 support::child(&self.syntax)83 }84 pub fn colon_token(&self) -> Option<SyntaxToken> {85 support::token(&self.syntax, T![:])86 }87 pub fn end(&self) -> Option<SliceDescEnd> {88 support::child(&self.syntax)89 }90 pub fn step(&self) -> Option<SliceDescStep> {91 support::child(&self.syntax)92 }93 pub fn r_brack_token(&self) -> Option<SyntaxToken> {94 support::token(&self.syntax, T![']'])95 }96}9798#[derive(Debug, Clone, PartialEq, Eq, Hash)]99pub struct ExprIndex {100 pub(crate) syntax: SyntaxNode,101}102impl ExprIndex {103 pub fn expr(&self) -> Option<Expr> {104 support::child(&self.syntax)105 }106 pub fn dot_token(&self) -> Option<SyntaxToken> {107 support::token(&self.syntax, T![.])108 }109 pub fn index(&self) -> Option<Name> {110 support::child(&self.syntax)111 }112}113114#[derive(Debug, Clone, PartialEq, Eq, Hash)]115pub struct Name {116 pub(crate) syntax: SyntaxNode,117}118impl Name {119 pub fn ident_lit(&self) -> Option<SyntaxToken> {120 support::token(&self.syntax, IDENT)121 }122}123124#[derive(Debug, Clone, PartialEq, Eq, Hash)]125pub struct ExprIndexExpr {126 pub(crate) syntax: SyntaxNode,127}128impl ExprIndexExpr {129 pub fn base(&self) -> Option<LhsExpr> {130 support::child(&self.syntax)131 }132 pub fn l_brack_token(&self) -> Option<SyntaxToken> {133 support::token(&self.syntax, T!['['])134 }135 pub fn index(&self) -> Option<Expr> {136 support::child(&self.syntax)137 }138 pub fn r_brack_token(&self) -> Option<SyntaxToken> {139 support::token(&self.syntax, T![']'])140 }141}142143#[derive(Debug, Clone, PartialEq, Eq, Hash)]144pub struct ExprApply {145 pub(crate) syntax: SyntaxNode,146}147impl ExprApply {148 pub fn expr(&self) -> Option<Expr> {149 support::child(&self.syntax)150 }151 pub fn args_desc(&self) -> Option<ArgsDesc> {152 support::child(&self.syntax)153 }154 pub fn tailstrict_kw_token(&self) -> Option<SyntaxToken> {155 support::token(&self.syntax, T![tailstrict])156 }157}158159#[derive(Debug, Clone, PartialEq, Eq, Hash)]160pub struct ArgsDesc {161 pub(crate) syntax: SyntaxNode,162}163impl ArgsDesc {164 pub fn l_paren_token(&self) -> Option<SyntaxToken> {165 support::token(&self.syntax, T!['('])166 }167 pub fn args(&self) -> AstChildren<Arg> {168 support::children(&self.syntax)169 }170 pub fn r_paren_token(&self) -> Option<SyntaxToken> {171 support::token(&self.syntax, T![')'])172 }173}174175#[derive(Debug, Clone, PartialEq, Eq, Hash)]176pub struct ExprObjExtend {177 pub(crate) syntax: SyntaxNode,178}179impl ExprObjExtend {180 pub fn lhs_expr(&self) -> Option<LhsExpr> {181 support::child(&self.syntax)182 }183 pub fn expr(&self) -> Option<Expr> {184 support::child(&self.syntax)185 }186}187188#[derive(Debug, Clone, PartialEq, Eq, Hash)]189pub struct ExprParened {190 pub(crate) syntax: SyntaxNode,191}192impl ExprParened {193 pub fn l_paren_token(&self) -> Option<SyntaxToken> {194 support::token(&self.syntax, T!['('])195 }196 pub fn expr(&self) -> Option<Expr> {197 support::child(&self.syntax)198 }199 pub fn r_paren_token(&self) -> Option<SyntaxToken> {200 support::token(&self.syntax, T![')'])201 }202}203204#[derive(Debug, Clone, PartialEq, Eq, Hash)]205pub struct ExprLiteral {206 pub(crate) syntax: SyntaxNode,207}208impl ExprLiteral {209 pub fn literal(&self) -> Option<Literal> {210 support::token_child(&self.syntax)211 }212}213214#[derive(Debug, Clone, PartialEq, Eq, Hash)]215pub struct ExprIntrinsicThisFile {216 pub(crate) syntax: SyntaxNode,217}218impl ExprIntrinsicThisFile {219 pub fn intrinsic_this_file_token(&self) -> Option<SyntaxToken> {220 support::token(&self.syntax, T!["$intrinsicThisFile"])221 }222}223224#[derive(Debug, Clone, PartialEq, Eq, Hash)]225pub struct ExprIntrinsicId {226 pub(crate) syntax: SyntaxNode,227}228impl ExprIntrinsicId {229 pub fn intrinsic_id_token(&self) -> Option<SyntaxToken> {230 support::token(&self.syntax, T!["$intrinsicId"])231 }232}233234#[derive(Debug, Clone, PartialEq, Eq, Hash)]235pub struct ExprIntrinsic {236 pub(crate) syntax: SyntaxNode,237}238impl ExprIntrinsic {239 pub fn intrinsic_token(&self) -> Option<SyntaxToken> {240 support::token(&self.syntax, T!["$intrinsic"])241 }242 pub fn l_paren_token(&self) -> Option<SyntaxToken> {243 support::token(&self.syntax, T!['('])244 }245 pub fn name(&self) -> Option<Name> {246 support::child(&self.syntax)247 }248 pub fn r_paren_token(&self) -> Option<SyntaxToken> {249 support::token(&self.syntax, T![')'])250 }251}252253#[derive(Debug, Clone, PartialEq, Eq, Hash)]254pub struct ExprString {255 pub(crate) syntax: SyntaxNode,256}257impl ExprString {258 pub fn text(&self) -> Option<Text> {259 support::token_child(&self.syntax)260 }261}262263#[derive(Debug, Clone, PartialEq, Eq, Hash)]264pub struct ExprNumber {265 pub(crate) syntax: SyntaxNode,266}267impl ExprNumber {268 pub fn number(&self) -> Option<Number> {269 support::token_child(&self.syntax)270 }271}272273#[derive(Debug, Clone, PartialEq, Eq, Hash)]274pub struct ExprArray {275 pub(crate) syntax: SyntaxNode,276}277impl ExprArray {278 pub fn l_brack_token(&self) -> Option<SyntaxToken> {279 support::token(&self.syntax, T!['['])280 }281 pub fn exprs(&self) -> AstChildren<Expr> {282 support::children(&self.syntax)283 }284 pub fn r_brack_token(&self) -> Option<SyntaxToken> {285 support::token(&self.syntax, T![']'])286 }287}288289#[derive(Debug, Clone, PartialEq, Eq, Hash)]290pub struct ExprObject {291 pub(crate) syntax: SyntaxNode,292}293impl ExprObject {294 pub fn obj_body(&self) -> Option<ObjBody> {295 support::child(&self.syntax)296 }297}298299#[derive(Debug, Clone, PartialEq, Eq, Hash)]300pub struct ExprArrayComp {301 pub(crate) syntax: SyntaxNode,302}303impl ExprArrayComp {304 pub fn l_brack_token(&self) -> Option<SyntaxToken> {305 support::token(&self.syntax, T!['['])306 }307 pub fn expr(&self) -> Option<Expr> {308 support::child(&self.syntax)309 }310 pub fn comma_token(&self) -> Option<SyntaxToken> {311 support::token(&self.syntax, T![,])312 }313 pub fn comp_specs(&self) -> AstChildren<CompSpec> {314 support::children(&self.syntax)315 }316 pub fn r_brack_token(&self) -> Option<SyntaxToken> {317 support::token(&self.syntax, T![']'])318 }319}320321#[derive(Debug, Clone, PartialEq, Eq, Hash)]322pub struct ExprImport {323 pub(crate) syntax: SyntaxNode,324}325impl ExprImport {326 pub fn import_kind(&self) -> Option<ImportKind> {327 support::token_child(&self.syntax)328 }329 pub fn text(&self) -> Option<Text> {330 support::token_child(&self.syntax)331 }332}333334#[derive(Debug, Clone, PartialEq, Eq, Hash)]335pub struct ExprVar {336 pub(crate) syntax: SyntaxNode,337}338impl ExprVar {339 pub fn name(&self) -> Option<Name> {340 support::child(&self.syntax)341 }342}343344#[derive(Debug, Clone, PartialEq, Eq, Hash)]345pub struct ExprLocal {346 pub(crate) syntax: SyntaxNode,347}348impl ExprLocal {349 pub fn local_kw_token(&self) -> Option<SyntaxToken> {350 support::token(&self.syntax, T![local])351 }352 pub fn binds(&self) -> AstChildren<Bind> {353 support::children(&self.syntax)354 }355 pub fn semi_token(&self) -> Option<SyntaxToken> {356 support::token(&self.syntax, T![;])357 }358 pub fn expr(&self) -> Option<Expr> {359 support::child(&self.syntax)360 }361}362363#[derive(Debug, Clone, PartialEq, Eq, Hash)]364pub struct ExprIfThenElse {365 pub(crate) syntax: SyntaxNode,366}367impl ExprIfThenElse {368 pub fn if_kw_token(&self) -> Option<SyntaxToken> {369 support::token(&self.syntax, T![if])370 }371 pub fn cond(&self) -> Option<Expr> {372 support::child(&self.syntax)373 }374 pub fn then_kw_token(&self) -> Option<SyntaxToken> {375 support::token(&self.syntax, T![then])376 }377 pub fn then(&self) -> Option<TrueExpr> {378 support::child(&self.syntax)379 }380 pub fn else_kw_token(&self) -> Option<SyntaxToken> {381 support::token(&self.syntax, T![else])382 }383 pub fn else_(&self) -> Option<FalseExpr> {384 support::child(&self.syntax)385 }386}387388#[derive(Debug, Clone, PartialEq, Eq, Hash)]389pub struct TrueExpr {390 pub(crate) syntax: SyntaxNode,391}392impl TrueExpr {393 pub fn expr(&self) -> Option<Expr> {394 support::child(&self.syntax)395 }396}397398#[derive(Debug, Clone, PartialEq, Eq, Hash)]399pub struct FalseExpr {400 pub(crate) syntax: SyntaxNode,401}402impl FalseExpr {403 pub fn expr(&self) -> Option<Expr> {404 support::child(&self.syntax)405 }406}407408#[derive(Debug, Clone, PartialEq, Eq, Hash)]409pub struct ExprFunction {410 pub(crate) syntax: SyntaxNode,411}412impl ExprFunction {413 pub fn function_kw_token(&self) -> Option<SyntaxToken> {414 support::token(&self.syntax, T![function])415 }416 pub fn l_paren_token(&self) -> Option<SyntaxToken> {417 support::token(&self.syntax, T!['('])418 }419 pub fn params_desc(&self) -> Option<ParamsDesc> {420 support::child(&self.syntax)421 }422 pub fn r_paren_token(&self) -> Option<SyntaxToken> {423 support::token(&self.syntax, T![')'])424 }425 pub fn expr(&self) -> Option<Expr> {426 support::child(&self.syntax)427 }428}429430#[derive(Debug, Clone, PartialEq, Eq, Hash)]431pub struct ParamsDesc {432 pub(crate) syntax: SyntaxNode,433}434impl ParamsDesc {435 pub fn l_paren_token(&self) -> Option<SyntaxToken> {436 support::token(&self.syntax, T!['('])437 }438 pub fn params(&self) -> AstChildren<Param> {439 support::children(&self.syntax)440 }441 pub fn r_paren_token(&self) -> Option<SyntaxToken> {442 support::token(&self.syntax, T![')'])443 }444}445446#[derive(Debug, Clone, PartialEq, Eq, Hash)]447pub struct ExprAssert {448 pub(crate) syntax: SyntaxNode,449}450impl ExprAssert {451 pub fn assertion(&self) -> Option<Assertion> {452 support::child(&self.syntax)453 }454 pub fn semi_token(&self) -> Option<SyntaxToken> {455 support::token(&self.syntax, T![;])456 }457 pub fn expr(&self) -> Option<Expr> {458 support::child(&self.syntax)459 }460}461462#[derive(Debug, Clone, PartialEq, Eq, Hash)]463pub struct Assertion {464 pub(crate) syntax: SyntaxNode,465}466impl Assertion {467 pub fn assert_kw_token(&self) -> Option<SyntaxToken> {468 support::token(&self.syntax, T![assert])469 }470 pub fn condition(&self) -> Option<LhsExpr> {471 support::child(&self.syntax)472 }473 pub fn colon_token(&self) -> Option<SyntaxToken> {474 support::token(&self.syntax, T![:])475 }476 pub fn message(&self) -> Option<Expr> {477 support::child(&self.syntax)478 }479}480481#[derive(Debug, Clone, PartialEq, Eq, Hash)]482pub struct ExprError {483 pub(crate) syntax: SyntaxNode,484}485impl ExprError {486 pub fn error_kw_token(&self) -> Option<SyntaxToken> {487 support::token(&self.syntax, T![error])488 }489 pub fn expr(&self) -> Option<Expr> {490 support::child(&self.syntax)491 }492}493494#[derive(Debug, Clone, PartialEq, Eq, Hash)]495pub struct SliceDescEnd {496 pub(crate) syntax: SyntaxNode,497}498impl SliceDescEnd {499 pub fn expr(&self) -> Option<Expr> {500 support::child(&self.syntax)501 }502}503504#[derive(Debug, Clone, PartialEq, Eq, Hash)]505pub struct SliceDescStep {506 pub(crate) syntax: SyntaxNode,507}508impl SliceDescStep {509 pub fn expr(&self) -> Option<Expr> {510 support::child(&self.syntax)511 }512}513514#[derive(Debug, Clone, PartialEq, Eq, Hash)]515pub struct Arg {516 pub(crate) syntax: SyntaxNode,517}518impl Arg {519 pub fn name(&self) -> Option<Name> {520 support::child(&self.syntax)521 }522 pub fn assign_token(&self) -> Option<SyntaxToken> {523 support::token(&self.syntax, T![=])524 }525 pub fn expr(&self) -> Option<Expr> {526 support::child(&self.syntax)527 }528}529530#[derive(Debug, Clone, PartialEq, Eq, Hash)]531pub struct ObjBodyComp {532 pub(crate) syntax: SyntaxNode,533}534impl ObjBodyComp {535 pub fn l_brace_token(&self) -> Option<SyntaxToken> {536 support::token(&self.syntax, T!['{'])537 }538 pub fn pre(&self) -> AstChildren<ObjLocalPostComma> {539 support::children(&self.syntax)540 }541 pub fn l_brack_token(&self) -> Option<SyntaxToken> {542 support::token(&self.syntax, T!['['])543 }544 pub fn key(&self) -> Option<LhsExpr> {545 support::child(&self.syntax)546 }547 pub fn r_brack_token(&self) -> Option<SyntaxToken> {548 support::token(&self.syntax, T![']'])549 }550 pub fn plus_token(&self) -> Option<SyntaxToken> {551 support::token(&self.syntax, T![+])552 }553 pub fn colon_token(&self) -> Option<SyntaxToken> {554 support::token(&self.syntax, T![:])555 }556 pub fn value(&self) -> Option<Expr> {557 support::child(&self.syntax)558 }559 pub fn post(&self) -> AstChildren<ObjLocalPreComma> {560 support::children(&self.syntax)561 }562 pub fn comp_specs(&self) -> AstChildren<CompSpec> {563 support::children(&self.syntax)564 }565 pub fn r_brace_token(&self) -> Option<SyntaxToken> {566 support::token(&self.syntax, T!['}'])567 }568}569570#[derive(Debug, Clone, PartialEq, Eq, Hash)]571pub struct ObjLocalPostComma {572 pub(crate) syntax: SyntaxNode,573}574impl ObjLocalPostComma {575 pub fn obj_local(&self) -> Option<ObjLocal> {576 support::child(&self.syntax)577 }578 pub fn comma_token(&self) -> Option<SyntaxToken> {579 support::token(&self.syntax, T![,])580 }581}582583#[derive(Debug, Clone, PartialEq, Eq, Hash)]584pub struct ObjLocalPreComma {585 pub(crate) syntax: SyntaxNode,586}587impl ObjLocalPreComma {588 pub fn comma_token(&self) -> Option<SyntaxToken> {589 support::token(&self.syntax, T![,])590 }591 pub fn obj_local(&self) -> Option<ObjLocal> {592 support::child(&self.syntax)593 }594}595596#[derive(Debug, Clone, PartialEq, Eq, Hash)]597pub struct ObjBodyMemberList {598 pub(crate) syntax: SyntaxNode,599}600impl ObjBodyMemberList {601 pub fn l_brace_token(&self) -> Option<SyntaxToken> {602 support::token(&self.syntax, T!['{'])603 }604 pub fn members(&self) -> AstChildren<Member> {605 support::children(&self.syntax)606 }607 pub fn r_brace_token(&self) -> Option<SyntaxToken> {608 support::token(&self.syntax, T!['}'])609 }610}611612#[derive(Debug, Clone, PartialEq, Eq, Hash)]613pub struct ObjLocal {614 pub(crate) syntax: SyntaxNode,615}616impl ObjLocal {617 pub fn local_kw_token(&self) -> Option<SyntaxToken> {618 support::token(&self.syntax, T![local])619 }620 pub fn bind(&self) -> Option<Bind> {621 support::child(&self.syntax)622 }623}624625#[derive(Debug, Clone, PartialEq, Eq, Hash)]626pub struct MemberBindStmt {627 pub(crate) syntax: SyntaxNode,628}629impl MemberBindStmt {630 pub fn obj_local(&self) -> Option<ObjLocal> {631 support::child(&self.syntax)632 }633}634635#[derive(Debug, Clone, PartialEq, Eq, Hash)]636pub struct MemberAssertStmt {637 pub(crate) syntax: SyntaxNode,638}639impl MemberAssertStmt {640 pub fn assertion(&self) -> Option<Assertion> {641 support::child(&self.syntax)642 }643}644645#[derive(Debug, Clone, PartialEq, Eq, Hash)]646pub struct MemberField {647 pub(crate) syntax: SyntaxNode,648}649impl MemberField {650 pub fn field(&self) -> Option<Field> {651 support::child(&self.syntax)652 }653}654655#[derive(Debug, Clone, PartialEq, Eq, Hash)]656pub struct FieldNormal {657 pub(crate) syntax: SyntaxNode,658}659impl FieldNormal {660 pub fn field_name(&self) -> Option<FieldName> {661 support::child(&self.syntax)662 }663 pub fn plus_token(&self) -> Option<SyntaxToken> {664 support::token(&self.syntax, T![+])665 }666 pub fn visibility(&self) -> Option<Visibility> {667 support::token_child(&self.syntax)668 }669 pub fn expr(&self) -> Option<Expr> {670 support::child(&self.syntax)671 }672}673674#[derive(Debug, Clone, PartialEq, Eq, Hash)]675pub struct FieldMethod {676 pub(crate) syntax: SyntaxNode,677}678impl FieldMethod {679 pub fn field_name(&self) -> Option<FieldName> {680 support::child(&self.syntax)681 }682 pub fn params_desc(&self) -> Option<ParamsDesc> {683 support::child(&self.syntax)684 }685 pub fn visibility(&self) -> Option<Visibility> {686 support::token_child(&self.syntax)687 }688 pub fn expr(&self) -> Option<Expr> {689 support::child(&self.syntax)690 }691}692693#[derive(Debug, Clone, PartialEq, Eq, Hash)]694pub struct FieldNameFixed {695 pub(crate) syntax: SyntaxNode,696}697impl FieldNameFixed {698 pub fn id(&self) -> Option<Name> {699 support::child(&self.syntax)700 }701 pub fn text(&self) -> Option<Text> {702 support::token_child(&self.syntax)703 }704}705706#[derive(Debug, Clone, PartialEq, Eq, Hash)]707pub struct FieldNameDynamic {708 pub(crate) syntax: SyntaxNode,709}710impl FieldNameDynamic {711 pub fn l_brack_token(&self) -> Option<SyntaxToken> {712 support::token(&self.syntax, T!['['])713 }714 pub fn expr(&self) -> Option<Expr> {715 support::child(&self.syntax)716 }717 pub fn r_brack_token(&self) -> Option<SyntaxToken> {718 support::token(&self.syntax, T![']'])719 }720}721722#[derive(Debug, Clone, PartialEq, Eq, Hash)]723pub struct ForSpec {724 pub(crate) syntax: SyntaxNode,725}726impl ForSpec {727 pub fn for_kw_token(&self) -> Option<SyntaxToken> {728 support::token(&self.syntax, T![for])729 }730 pub fn bind(&self) -> Option<Name> {731 support::child(&self.syntax)732 }733 pub fn in_kw_token(&self) -> Option<SyntaxToken> {734 support::token(&self.syntax, T![in])735 }736 pub fn expr(&self) -> Option<Expr> {737 support::child(&self.syntax)738 }739}740741#[derive(Debug, Clone, PartialEq, Eq, Hash)]742pub struct IfSpec {743 pub(crate) syntax: SyntaxNode,744}745impl IfSpec {746 pub fn if_kw_token(&self) -> Option<SyntaxToken> {747 support::token(&self.syntax, T![if])748 }749 pub fn expr(&self) -> Option<Expr> {750 support::child(&self.syntax)751 }752}753754#[derive(Debug, Clone, PartialEq, Eq, Hash)]755pub struct BindDestruct {756 pub(crate) syntax: SyntaxNode,757}758impl BindDestruct {759 pub fn into(&self) -> Option<Destruct> {760 support::child(&self.syntax)761 }762 pub fn assign_token(&self) -> Option<SyntaxToken> {763 support::token(&self.syntax, T![=])764 }765 pub fn value(&self) -> Option<Expr> {766 support::child(&self.syntax)767 }768}769770#[derive(Debug, Clone, PartialEq, Eq, Hash)]771pub struct BindFunction {772 pub(crate) syntax: SyntaxNode,773}774impl BindFunction {775 pub fn name(&self) -> Option<Name> {776 support::child(&self.syntax)777 }778 pub fn params(&self) -> Option<ParamsDesc> {779 support::child(&self.syntax)780 }781 pub fn assign_token(&self) -> Option<SyntaxToken> {782 support::token(&self.syntax, T![=])783 }784 pub fn value(&self) -> Option<Expr> {785 support::child(&self.syntax)786 }787}788789#[derive(Debug, Clone, PartialEq, Eq, Hash)]790pub struct Param {791 pub(crate) syntax: SyntaxNode,792}793impl Param {794 pub fn destruct(&self) -> Option<Destruct> {795 support::child(&self.syntax)796 }797 pub fn assign_token(&self) -> Option<SyntaxToken> {798 support::token(&self.syntax, T![=])799 }800 pub fn expr(&self) -> Option<Expr> {801 support::child(&self.syntax)802 }803}804805#[derive(Debug, Clone, PartialEq, Eq, Hash)]806pub struct DestructFull {807 pub(crate) syntax: SyntaxNode,808}809impl DestructFull {810 pub fn name(&self) -> Option<Name> {811 support::child(&self.syntax)812 }813}814815#[derive(Debug, Clone, PartialEq, Eq, Hash)]816pub struct DestructSkip {817 pub(crate) syntax: SyntaxNode,818}819impl DestructSkip {820 pub fn question_mark_token(&self) -> Option<SyntaxToken> {821 support::token(&self.syntax, T![?])822 }823}824825#[derive(Debug, Clone, PartialEq, Eq, Hash)]826pub struct DestructArray {827 pub(crate) syntax: SyntaxNode,828}829impl DestructArray {830 pub fn l_brack_token(&self) -> Option<SyntaxToken> {831 support::token(&self.syntax, T!['['])832 }833 pub fn destruct_array_parts(&self) -> AstChildren<DestructArrayPart> {834 support::children(&self.syntax)835 }836 pub fn r_brack_token(&self) -> Option<SyntaxToken> {837 support::token(&self.syntax, T![']'])838 }839}840841#[derive(Debug, Clone, PartialEq, Eq, Hash)]842pub struct DestructObject {843 pub(crate) syntax: SyntaxNode,844}845impl DestructObject {846 pub fn l_brace_token(&self) -> Option<SyntaxToken> {847 support::token(&self.syntax, T!['{'])848 }849 pub fn destruct_object_fields(&self) -> AstChildren<DestructObjectField> {850 support::children(&self.syntax)851 }852 pub fn destruct_rest(&self) -> Option<DestructRest> {853 support::child(&self.syntax)854 }855 pub fn comma_token(&self) -> Option<SyntaxToken> {856 support::token(&self.syntax, T![,])857 }858 pub fn r_brace_token(&self) -> Option<SyntaxToken> {859 support::token(&self.syntax, T!['}'])860 }861}862863#[derive(Debug, Clone, PartialEq, Eq, Hash)]864pub struct DestructObjectField {865 pub(crate) syntax: SyntaxNode,866}867impl DestructObjectField {868 pub fn field(&self) -> Option<Name> {869 support::child(&self.syntax)870 }871 pub fn colon_token(&self) -> Option<SyntaxToken> {872 support::token(&self.syntax, T![:])873 }874 pub fn destruct(&self) -> Option<Destruct> {875 support::child(&self.syntax)876 }877 pub fn assign_token(&self) -> Option<SyntaxToken> {878 support::token(&self.syntax, T![=])879 }880 pub fn expr(&self) -> Option<Expr> {881 support::child(&self.syntax)882 }883}884885#[derive(Debug, Clone, PartialEq, Eq, Hash)]886pub struct DestructRest {887 pub(crate) syntax: SyntaxNode,888}889impl DestructRest {890 pub fn dotdotdot_token(&self) -> Option<SyntaxToken> {891 support::token(&self.syntax, T![...])892 }893 pub fn into(&self) -> Option<Name> {894 support::child(&self.syntax)895 }896}897898#[derive(Debug, Clone, PartialEq, Eq, Hash)]899pub struct DestructArrayElement {900 pub(crate) syntax: SyntaxNode,901}902impl DestructArrayElement {903 pub fn destruct(&self) -> Option<Destruct> {904 support::child(&self.syntax)905 }906}907908#[derive(Debug, Clone, PartialEq, Eq, Hash)]909pub enum Expr {910 ExprBinary(ExprBinary),911 ExprUnary(ExprUnary),912 ExprSlice(ExprSlice),913 ExprIndex(ExprIndex),914 ExprIndexExpr(ExprIndexExpr),915 ExprApply(ExprApply),916 ExprObjExtend(ExprObjExtend),917 ExprParened(ExprParened),918 ExprIntrinsicThisFile(ExprIntrinsicThisFile),919 ExprIntrinsicId(ExprIntrinsicId),920 ExprIntrinsic(ExprIntrinsic),921 ExprString(ExprString),922 ExprNumber(ExprNumber),923 ExprLiteral(ExprLiteral),924 ExprArray(ExprArray),925 ExprObject(ExprObject),926 ExprArrayComp(ExprArrayComp),927 ExprImport(ExprImport),928 ExprVar(ExprVar),929 ExprLocal(ExprLocal),930 ExprIfThenElse(ExprIfThenElse),931 ExprFunction(ExprFunction),932 ExprAssert(ExprAssert),933 ExprError(ExprError),934}935936#[derive(Debug, Clone, PartialEq, Eq, Hash)]937pub enum ObjBody {938 ObjBodyComp(ObjBodyComp),939 ObjBodyMemberList(ObjBodyMemberList),940}941942#[derive(Debug, Clone, PartialEq, Eq, Hash)]943pub enum CompSpec {944 ForSpec(ForSpec),945 IfSpec(IfSpec),946}947948#[derive(Debug, Clone, PartialEq, Eq, Hash)]949pub enum Bind {950 BindDestruct(BindDestruct),951 BindFunction(BindFunction),952}953954#[derive(Debug, Clone, PartialEq, Eq, Hash)]955pub enum Member {956 MemberBindStmt(MemberBindStmt),957 MemberAssertStmt(MemberAssertStmt),958 MemberField(MemberField),959}960961#[derive(Debug, Clone, PartialEq, Eq, Hash)]962pub enum Field {963 FieldNormal(FieldNormal),964 FieldMethod(FieldMethod),965}966967#[derive(Debug, Clone, PartialEq, Eq, Hash)]968pub enum FieldName {969 FieldNameFixed(FieldNameFixed),970 FieldNameDynamic(FieldNameDynamic),971}972973#[derive(Debug, Clone, PartialEq, Eq, Hash)]974pub enum Destruct {975 DestructFull(DestructFull),976 DestructSkip(DestructSkip),977 DestructArray(DestructArray),978 DestructObject(DestructObject),979}980981#[derive(Debug, Clone, PartialEq, Eq, Hash)]982pub enum DestructArrayPart {983 DestructArrayElement(DestructArrayElement),984 DestructRest(DestructRest),985}986987#[derive(Debug, Clone, PartialEq, Eq, Hash)]988pub struct BinaryOperator {989 syntax: SyntaxToken,990 kind: BinaryOperatorKind,991}992993#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]994pub enum BinaryOperatorKind {995 Or,996 And,997 BitOr,998 BitXor,999 BitAnd,1000 Eq,1001 Ne,1002 Lt,1003 Gt,1004 Le,1005 Ge,1006 InKw,1007 Lhs,1008 Rhs,1009 Plus,1010 Minus,1011 Mul,1012 Div,1013 Modulo,1014 MetaObjectApply,1015 ErrorNoOperator,1016}10171018#[derive(Debug, Clone, PartialEq, Eq, Hash)]1019pub struct UnaryOperator {1020 syntax: SyntaxToken,1021 kind: UnaryOperatorKind,1022}10231024#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1025pub enum UnaryOperatorKind {1026 Minus,1027 Not,1028 BitNot,1029}10301031#[derive(Debug, Clone, PartialEq, Eq, Hash)]1032pub struct Literal {1033 syntax: SyntaxToken,1034 kind: LiteralKind,1035}10361037#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1038pub enum LiteralKind {1039 NullKw,1040 TrueKw,1041 FalseKw,1042 SelfKw,1043 Dollar,1044 SuperKw,1045}10461047#[derive(Debug, Clone, PartialEq, Eq, Hash)]1048pub struct Text {1049 syntax: SyntaxToken,1050 kind: TextKind,1051}10521053#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1054pub enum TextKind {1055 StringDouble,1056 ErrorStringDoubleUnterminated,1057 StringSingle,1058 ErrorStringSingleUnterminated,1059 StringDoubleVerbatim,1060 ErrorStringDoubleVerbatimUnterminated,1061 StringSingleVerbatim,1062 ErrorStringSingleVerbatimUnterminated,1063 ErrorStringVerbatimMissingQuotes,1064 StringBlock,1065 ErrorStringBlockUnexpectedEnd,1066 ErrorStringBlockMissingNewLine,1067 ErrorStringBlockMissingTermination,1068 ErrorStringBlockMissingIndent,1069}10701071#[derive(Debug, Clone, PartialEq, Eq, Hash)]1072pub struct Number {1073 syntax: SyntaxToken,1074 kind: NumberKind,1075}10761077#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1078pub enum NumberKind {1079 Float,1080 ErrorFloatJunkAfterPoint,1081 ErrorFloatJunkAfterExponent,1082 ErrorFloatJunkAfterExponentSign,1083}10841085#[derive(Debug, Clone, PartialEq, Eq, Hash)]1086pub struct ImportKind {1087 syntax: SyntaxToken,1088 kind: ImportKindKind,1089}10901091#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1092pub enum ImportKindKind {1093 ImportstrKw,1094 ImportbinKw,1095 ImportKw,1096}10971098#[derive(Debug, Clone, PartialEq, Eq, Hash)]1099pub struct Visibility {1100 syntax: SyntaxToken,1101 kind: VisibilityKind,1102}11031104#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1105pub enum VisibilityKind {1106 Coloncoloncolon,1107 Coloncolon,1108 Colon,1109}11101111#[derive(Debug, Clone, PartialEq, Eq, Hash)]1112pub struct Trivia {1113 syntax: SyntaxToken,1114 kind: TriviaKind,1115}11161117#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1118pub enum TriviaKind {1119 Whitespace,1120 MultiLineComment,1121 ErrorCommentTooShort,1122 ErrorCommentUnterminated,1123 SingleLineHashComment,1124 SingleLineSlashComment,1125}11261127#[derive(Debug, Clone, PartialEq, Eq, Hash)]1128pub struct ParsingError {1129 syntax: SyntaxToken,1130 kind: ParsingErrorKind,1131}11321133#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1134pub enum ParsingErrorKind {1135 ErrorMissingToken,1136 ErrorUnexpectedToken,1137}1138impl AstNode for SourceFile {1139 fn can_cast(kind: SyntaxKind) -> bool {1140 kind == SOURCE_FILE1141 }1142 fn cast(syntax: SyntaxNode) -> Option<Self> {1143 if Self::can_cast(syntax.kind()) {1144 Some(Self { syntax })1145 } else {1146 None1147 }1148 }1149 fn syntax(&self) -> &SyntaxNode {1150 &self.syntax1151 }1152}1153impl AstNode for ExprBinary {1154 fn can_cast(kind: SyntaxKind) -> bool {1155 kind == EXPR_BINARY1156 }1157 fn cast(syntax: SyntaxNode) -> Option<Self> {1158 if Self::can_cast(syntax.kind()) {1159 Some(Self { syntax })1160 } else {1161 None1162 }1163 }1164 fn syntax(&self) -> &SyntaxNode {1165 &self.syntax1166 }1167}1168impl AstNode for LhsExpr {1169 fn can_cast(kind: SyntaxKind) -> bool {1170 kind == LHS_EXPR1171 }1172 fn cast(syntax: SyntaxNode) -> Option<Self> {1173 if Self::can_cast(syntax.kind()) {1174 Some(Self { syntax })1175 } else {1176 None1177 }1178 }1179 fn syntax(&self) -> &SyntaxNode {1180 &self.syntax1181 }1182}1183impl AstNode for ExprUnary {1184 fn can_cast(kind: SyntaxKind) -> bool {1185 kind == EXPR_UNARY1186 }1187 fn cast(syntax: SyntaxNode) -> Option<Self> {1188 if Self::can_cast(syntax.kind()) {1189 Some(Self { syntax })1190 } else {1191 None1192 }1193 }1194 fn syntax(&self) -> &SyntaxNode {1195 &self.syntax1196 }1197}1198impl AstNode for ExprSlice {1199 fn can_cast(kind: SyntaxKind) -> bool {1200 kind == EXPR_SLICE1201 }1202 fn cast(syntax: SyntaxNode) -> Option<Self> {1203 if Self::can_cast(syntax.kind()) {1204 Some(Self { syntax })1205 } else {1206 None1207 }1208 }1209 fn syntax(&self) -> &SyntaxNode {1210 &self.syntax1211 }1212}1213impl AstNode for SliceDesc {1214 fn can_cast(kind: SyntaxKind) -> bool {1215 kind == SLICE_DESC1216 }1217 fn cast(syntax: SyntaxNode) -> Option<Self> {1218 if Self::can_cast(syntax.kind()) {1219 Some(Self { syntax })1220 } else {1221 None1222 }1223 }1224 fn syntax(&self) -> &SyntaxNode {1225 &self.syntax1226 }1227}1228impl AstNode for ExprIndex {1229 fn can_cast(kind: SyntaxKind) -> bool {1230 kind == EXPR_INDEX1231 }1232 fn cast(syntax: SyntaxNode) -> Option<Self> {1233 if Self::can_cast(syntax.kind()) {1234 Some(Self { syntax })1235 } else {1236 None1237 }1238 }1239 fn syntax(&self) -> &SyntaxNode {1240 &self.syntax1241 }1242}1243impl AstNode for Name {1244 fn can_cast(kind: SyntaxKind) -> bool {1245 kind == NAME1246 }1247 fn cast(syntax: SyntaxNode) -> Option<Self> {1248 if Self::can_cast(syntax.kind()) {1249 Some(Self { syntax })1250 } else {1251 None1252 }1253 }1254 fn syntax(&self) -> &SyntaxNode {1255 &self.syntax1256 }1257}1258impl AstNode for ExprIndexExpr {1259 fn can_cast(kind: SyntaxKind) -> bool {1260 kind == EXPR_INDEX_EXPR1261 }1262 fn cast(syntax: SyntaxNode) -> Option<Self> {1263 if Self::can_cast(syntax.kind()) {1264 Some(Self { syntax })1265 } else {1266 None1267 }1268 }1269 fn syntax(&self) -> &SyntaxNode {1270 &self.syntax1271 }1272}1273impl AstNode for ExprApply {1274 fn can_cast(kind: SyntaxKind) -> bool {1275 kind == EXPR_APPLY1276 }1277 fn cast(syntax: SyntaxNode) -> Option<Self> {1278 if Self::can_cast(syntax.kind()) {1279 Some(Self { syntax })1280 } else {1281 None1282 }1283 }1284 fn syntax(&self) -> &SyntaxNode {1285 &self.syntax1286 }1287}1288impl AstNode for ArgsDesc {1289 fn can_cast(kind: SyntaxKind) -> bool {1290 kind == ARGS_DESC1291 }1292 fn cast(syntax: SyntaxNode) -> Option<Self> {1293 if Self::can_cast(syntax.kind()) {1294 Some(Self { syntax })1295 } else {1296 None1297 }1298 }1299 fn syntax(&self) -> &SyntaxNode {1300 &self.syntax1301 }1302}1303impl AstNode for ExprObjExtend {1304 fn can_cast(kind: SyntaxKind) -> bool {1305 kind == EXPR_OBJ_EXTEND1306 }1307 fn cast(syntax: SyntaxNode) -> Option<Self> {1308 if Self::can_cast(syntax.kind()) {1309 Some(Self { syntax })1310 } else {1311 None1312 }1313 }1314 fn syntax(&self) -> &SyntaxNode {1315 &self.syntax1316 }1317}1318impl AstNode for ExprParened {1319 fn can_cast(kind: SyntaxKind) -> bool {1320 kind == EXPR_PARENED1321 }1322 fn cast(syntax: SyntaxNode) -> Option<Self> {1323 if Self::can_cast(syntax.kind()) {1324 Some(Self { syntax })1325 } else {1326 None1327 }1328 }1329 fn syntax(&self) -> &SyntaxNode {1330 &self.syntax1331 }1332}1333impl AstNode for ExprLiteral {1334 fn can_cast(kind: SyntaxKind) -> bool {1335 kind == EXPR_LITERAL1336 }1337 fn cast(syntax: SyntaxNode) -> Option<Self> {1338 if Self::can_cast(syntax.kind()) {1339 Some(Self { syntax })1340 } else {1341 None1342 }1343 }1344 fn syntax(&self) -> &SyntaxNode {1345 &self.syntax1346 }1347}1348impl AstNode for ExprIntrinsicThisFile {1349 fn can_cast(kind: SyntaxKind) -> bool {1350 kind == EXPR_INTRINSIC_THIS_FILE1351 }1352 fn cast(syntax: SyntaxNode) -> Option<Self> {1353 if Self::can_cast(syntax.kind()) {1354 Some(Self { syntax })1355 } else {1356 None1357 }1358 }1359 fn syntax(&self) -> &SyntaxNode {1360 &self.syntax1361 }1362}1363impl AstNode for ExprIntrinsicId {1364 fn can_cast(kind: SyntaxKind) -> bool {1365 kind == EXPR_INTRINSIC_ID1366 }1367 fn cast(syntax: SyntaxNode) -> Option<Self> {1368 if Self::can_cast(syntax.kind()) {1369 Some(Self { syntax })1370 } else {1371 None1372 }1373 }1374 fn syntax(&self) -> &SyntaxNode {1375 &self.syntax1376 }1377}1378impl AstNode for ExprIntrinsic {1379 fn can_cast(kind: SyntaxKind) -> bool {1380 kind == EXPR_INTRINSIC1381 }1382 fn cast(syntax: SyntaxNode) -> Option<Self> {1383 if Self::can_cast(syntax.kind()) {1384 Some(Self { syntax })1385 } else {1386 None1387 }1388 }1389 fn syntax(&self) -> &SyntaxNode {1390 &self.syntax1391 }1392}1393impl AstNode for ExprString {1394 fn can_cast(kind: SyntaxKind) -> bool {1395 kind == EXPR_STRING1396 }1397 fn cast(syntax: SyntaxNode) -> Option<Self> {1398 if Self::can_cast(syntax.kind()) {1399 Some(Self { syntax })1400 } else {1401 None1402 }1403 }1404 fn syntax(&self) -> &SyntaxNode {1405 &self.syntax1406 }1407}1408impl AstNode for ExprNumber {1409 fn can_cast(kind: SyntaxKind) -> bool {1410 kind == EXPR_NUMBER1411 }1412 fn cast(syntax: SyntaxNode) -> Option<Self> {1413 if Self::can_cast(syntax.kind()) {1414 Some(Self { syntax })1415 } else {1416 None1417 }1418 }1419 fn syntax(&self) -> &SyntaxNode {1420 &self.syntax1421 }1422}1423impl AstNode for ExprArray {1424 fn can_cast(kind: SyntaxKind) -> bool {1425 kind == EXPR_ARRAY1426 }1427 fn cast(syntax: SyntaxNode) -> Option<Self> {1428 if Self::can_cast(syntax.kind()) {1429 Some(Self { syntax })1430 } else {1431 None1432 }1433 }1434 fn syntax(&self) -> &SyntaxNode {1435 &self.syntax1436 }1437}1438impl AstNode for ExprObject {1439 fn can_cast(kind: SyntaxKind) -> bool {1440 kind == EXPR_OBJECT1441 }1442 fn cast(syntax: SyntaxNode) -> Option<Self> {1443 if Self::can_cast(syntax.kind()) {1444 Some(Self { syntax })1445 } else {1446 None1447 }1448 }1449 fn syntax(&self) -> &SyntaxNode {1450 &self.syntax1451 }1452}1453impl AstNode for ExprArrayComp {1454 fn can_cast(kind: SyntaxKind) -> bool {1455 kind == EXPR_ARRAY_COMP1456 }1457 fn cast(syntax: SyntaxNode) -> Option<Self> {1458 if Self::can_cast(syntax.kind()) {1459 Some(Self { syntax })1460 } else {1461 None1462 }1463 }1464 fn syntax(&self) -> &SyntaxNode {1465 &self.syntax1466 }1467}1468impl AstNode for ExprImport {1469 fn can_cast(kind: SyntaxKind) -> bool {1470 kind == EXPR_IMPORT1471 }1472 fn cast(syntax: SyntaxNode) -> Option<Self> {1473 if Self::can_cast(syntax.kind()) {1474 Some(Self { syntax })1475 } else {1476 None1477 }1478 }1479 fn syntax(&self) -> &SyntaxNode {1480 &self.syntax1481 }1482}1483impl AstNode for ExprVar {1484 fn can_cast(kind: SyntaxKind) -> bool {1485 kind == EXPR_VAR1486 }1487 fn cast(syntax: SyntaxNode) -> Option<Self> {1488 if Self::can_cast(syntax.kind()) {1489 Some(Self { syntax })1490 } else {1491 None1492 }1493 }1494 fn syntax(&self) -> &SyntaxNode {1495 &self.syntax1496 }1497}1498impl AstNode for ExprLocal {1499 fn can_cast(kind: SyntaxKind) -> bool {1500 kind == EXPR_LOCAL1501 }1502 fn cast(syntax: SyntaxNode) -> Option<Self> {1503 if Self::can_cast(syntax.kind()) {1504 Some(Self { syntax })1505 } else {1506 None1507 }1508 }1509 fn syntax(&self) -> &SyntaxNode {1510 &self.syntax1511 }1512}1513impl AstNode for ExprIfThenElse {1514 fn can_cast(kind: SyntaxKind) -> bool {1515 kind == EXPR_IF_THEN_ELSE1516 }1517 fn cast(syntax: SyntaxNode) -> Option<Self> {1518 if Self::can_cast(syntax.kind()) {1519 Some(Self { syntax })1520 } else {1521 None1522 }1523 }1524 fn syntax(&self) -> &SyntaxNode {1525 &self.syntax1526 }1527}1528impl AstNode for TrueExpr {1529 fn can_cast(kind: SyntaxKind) -> bool {1530 kind == TRUE_EXPR1531 }1532 fn cast(syntax: SyntaxNode) -> Option<Self> {1533 if Self::can_cast(syntax.kind()) {1534 Some(Self { syntax })1535 } else {1536 None1537 }1538 }1539 fn syntax(&self) -> &SyntaxNode {1540 &self.syntax1541 }1542}1543impl AstNode for FalseExpr {1544 fn can_cast(kind: SyntaxKind) -> bool {1545 kind == FALSE_EXPR1546 }1547 fn cast(syntax: SyntaxNode) -> Option<Self> {1548 if Self::can_cast(syntax.kind()) {1549 Some(Self { syntax })1550 } else {1551 None1552 }1553 }1554 fn syntax(&self) -> &SyntaxNode {1555 &self.syntax1556 }1557}1558impl AstNode for ExprFunction {1559 fn can_cast(kind: SyntaxKind) -> bool {1560 kind == EXPR_FUNCTION1561 }1562 fn cast(syntax: SyntaxNode) -> Option<Self> {1563 if Self::can_cast(syntax.kind()) {1564 Some(Self { syntax })1565 } else {1566 None1567 }1568 }1569 fn syntax(&self) -> &SyntaxNode {1570 &self.syntax1571 }1572}1573impl AstNode for ParamsDesc {1574 fn can_cast(kind: SyntaxKind) -> bool {1575 kind == PARAMS_DESC1576 }1577 fn cast(syntax: SyntaxNode) -> Option<Self> {1578 if Self::can_cast(syntax.kind()) {1579 Some(Self { syntax })1580 } else {1581 None1582 }1583 }1584 fn syntax(&self) -> &SyntaxNode {1585 &self.syntax1586 }1587}1588impl AstNode for ExprAssert {1589 fn can_cast(kind: SyntaxKind) -> bool {1590 kind == EXPR_ASSERT1591 }1592 fn cast(syntax: SyntaxNode) -> Option<Self> {1593 if Self::can_cast(syntax.kind()) {1594 Some(Self { syntax })1595 } else {1596 None1597 }1598 }1599 fn syntax(&self) -> &SyntaxNode {1600 &self.syntax1601 }1602}1603impl AstNode for Assertion {1604 fn can_cast(kind: SyntaxKind) -> bool {1605 kind == ASSERTION1606 }1607 fn cast(syntax: SyntaxNode) -> Option<Self> {1608 if Self::can_cast(syntax.kind()) {1609 Some(Self { syntax })1610 } else {1611 None1612 }1613 }1614 fn syntax(&self) -> &SyntaxNode {1615 &self.syntax1616 }1617}1618impl AstNode for ExprError {1619 fn can_cast(kind: SyntaxKind) -> bool {1620 kind == EXPR_ERROR1621 }1622 fn cast(syntax: SyntaxNode) -> Option<Self> {1623 if Self::can_cast(syntax.kind()) {1624 Some(Self { syntax })1625 } else {1626 None1627 }1628 }1629 fn syntax(&self) -> &SyntaxNode {1630 &self.syntax1631 }1632}1633impl AstNode for SliceDescEnd {1634 fn can_cast(kind: SyntaxKind) -> bool {1635 kind == SLICE_DESC_END1636 }1637 fn cast(syntax: SyntaxNode) -> Option<Self> {1638 if Self::can_cast(syntax.kind()) {1639 Some(Self { syntax })1640 } else {1641 None1642 }1643 }1644 fn syntax(&self) -> &SyntaxNode {1645 &self.syntax1646 }1647}1648impl AstNode for SliceDescStep {1649 fn can_cast(kind: SyntaxKind) -> bool {1650 kind == SLICE_DESC_STEP1651 }1652 fn cast(syntax: SyntaxNode) -> Option<Self> {1653 if Self::can_cast(syntax.kind()) {1654 Some(Self { syntax })1655 } else {1656 None1657 }1658 }1659 fn syntax(&self) -> &SyntaxNode {1660 &self.syntax1661 }1662}1663impl AstNode for Arg {1664 fn can_cast(kind: SyntaxKind) -> bool {1665 kind == ARG1666 }1667 fn cast(syntax: SyntaxNode) -> Option<Self> {1668 if Self::can_cast(syntax.kind()) {1669 Some(Self { syntax })1670 } else {1671 None1672 }1673 }1674 fn syntax(&self) -> &SyntaxNode {1675 &self.syntax1676 }1677}1678impl AstNode for ObjBodyComp {1679 fn can_cast(kind: SyntaxKind) -> bool {1680 kind == OBJ_BODY_COMP1681 }1682 fn cast(syntax: SyntaxNode) -> Option<Self> {1683 if Self::can_cast(syntax.kind()) {1684 Some(Self { syntax })1685 } else {1686 None1687 }1688 }1689 fn syntax(&self) -> &SyntaxNode {1690 &self.syntax1691 }1692}1693impl AstNode for ObjLocalPostComma {1694 fn can_cast(kind: SyntaxKind) -> bool {1695 kind == OBJ_LOCAL_POST_COMMA1696 }1697 fn cast(syntax: SyntaxNode) -> Option<Self> {1698 if Self::can_cast(syntax.kind()) {1699 Some(Self { syntax })1700 } else {1701 None1702 }1703 }1704 fn syntax(&self) -> &SyntaxNode {1705 &self.syntax1706 }1707}1708impl AstNode for ObjLocalPreComma {1709 fn can_cast(kind: SyntaxKind) -> bool {1710 kind == OBJ_LOCAL_PRE_COMMA1711 }1712 fn cast(syntax: SyntaxNode) -> Option<Self> {1713 if Self::can_cast(syntax.kind()) {1714 Some(Self { syntax })1715 } else {1716 None1717 }1718 }1719 fn syntax(&self) -> &SyntaxNode {1720 &self.syntax1721 }1722}1723impl AstNode for ObjBodyMemberList {1724 fn can_cast(kind: SyntaxKind) -> bool {1725 kind == OBJ_BODY_MEMBER_LIST1726 }1727 fn cast(syntax: SyntaxNode) -> Option<Self> {1728 if Self::can_cast(syntax.kind()) {1729 Some(Self { syntax })1730 } else {1731 None1732 }1733 }1734 fn syntax(&self) -> &SyntaxNode {1735 &self.syntax1736 }1737}1738impl AstNode for ObjLocal {1739 fn can_cast(kind: SyntaxKind) -> bool {1740 kind == OBJ_LOCAL1741 }1742 fn cast(syntax: SyntaxNode) -> Option<Self> {1743 if Self::can_cast(syntax.kind()) {1744 Some(Self { syntax })1745 } else {1746 None1747 }1748 }1749 fn syntax(&self) -> &SyntaxNode {1750 &self.syntax1751 }1752}1753impl AstNode for MemberBindStmt {1754 fn can_cast(kind: SyntaxKind) -> bool {1755 kind == MEMBER_BIND_STMT1756 }1757 fn cast(syntax: SyntaxNode) -> Option<Self> {1758 if Self::can_cast(syntax.kind()) {1759 Some(Self { syntax })1760 } else {1761 None1762 }1763 }1764 fn syntax(&self) -> &SyntaxNode {1765 &self.syntax1766 }1767}1768impl AstNode for MemberAssertStmt {1769 fn can_cast(kind: SyntaxKind) -> bool {1770 kind == MEMBER_ASSERT_STMT1771 }1772 fn cast(syntax: SyntaxNode) -> Option<Self> {1773 if Self::can_cast(syntax.kind()) {1774 Some(Self { syntax })1775 } else {1776 None1777 }1778 }1779 fn syntax(&self) -> &SyntaxNode {1780 &self.syntax1781 }1782}1783impl AstNode for MemberField {1784 fn can_cast(kind: SyntaxKind) -> bool {1785 kind == MEMBER_FIELD1786 }1787 fn cast(syntax: SyntaxNode) -> Option<Self> {1788 if Self::can_cast(syntax.kind()) {1789 Some(Self { syntax })1790 } else {1791 None1792 }1793 }1794 fn syntax(&self) -> &SyntaxNode {1795 &self.syntax1796 }1797}1798impl AstNode for FieldNormal {1799 fn can_cast(kind: SyntaxKind) -> bool {1800 kind == FIELD_NORMAL1801 }1802 fn cast(syntax: SyntaxNode) -> Option<Self> {1803 if Self::can_cast(syntax.kind()) {1804 Some(Self { syntax })1805 } else {1806 None1807 }1808 }1809 fn syntax(&self) -> &SyntaxNode {1810 &self.syntax1811 }1812}1813impl AstNode for FieldMethod {1814 fn can_cast(kind: SyntaxKind) -> bool {1815 kind == FIELD_METHOD1816 }1817 fn cast(syntax: SyntaxNode) -> Option<Self> {1818 if Self::can_cast(syntax.kind()) {1819 Some(Self { syntax })1820 } else {1821 None1822 }1823 }1824 fn syntax(&self) -> &SyntaxNode {1825 &self.syntax1826 }1827}1828impl AstNode for FieldNameFixed {1829 fn can_cast(kind: SyntaxKind) -> bool {1830 kind == FIELD_NAME_FIXED1831 }1832 fn cast(syntax: SyntaxNode) -> Option<Self> {1833 if Self::can_cast(syntax.kind()) {1834 Some(Self { syntax })1835 } else {1836 None1837 }1838 }1839 fn syntax(&self) -> &SyntaxNode {1840 &self.syntax1841 }1842}1843impl AstNode for FieldNameDynamic {1844 fn can_cast(kind: SyntaxKind) -> bool {1845 kind == FIELD_NAME_DYNAMIC1846 }1847 fn cast(syntax: SyntaxNode) -> Option<Self> {1848 if Self::can_cast(syntax.kind()) {1849 Some(Self { syntax })1850 } else {1851 None1852 }1853 }1854 fn syntax(&self) -> &SyntaxNode {1855 &self.syntax1856 }1857}1858impl AstNode for ForSpec {1859 fn can_cast(kind: SyntaxKind) -> bool {1860 kind == FOR_SPEC1861 }1862 fn cast(syntax: SyntaxNode) -> Option<Self> {1863 if Self::can_cast(syntax.kind()) {1864 Some(Self { syntax })1865 } else {1866 None1867 }1868 }1869 fn syntax(&self) -> &SyntaxNode {1870 &self.syntax1871 }1872}1873impl AstNode for IfSpec {1874 fn can_cast(kind: SyntaxKind) -> bool {1875 kind == IF_SPEC1876 }1877 fn cast(syntax: SyntaxNode) -> Option<Self> {1878 if Self::can_cast(syntax.kind()) {1879 Some(Self { syntax })1880 } else {1881 None1882 }1883 }1884 fn syntax(&self) -> &SyntaxNode {1885 &self.syntax1886 }1887}1888impl AstNode for BindDestruct {1889 fn can_cast(kind: SyntaxKind) -> bool {1890 kind == BIND_DESTRUCT1891 }1892 fn cast(syntax: SyntaxNode) -> Option<Self> {1893 if Self::can_cast(syntax.kind()) {1894 Some(Self { syntax })1895 } else {1896 None1897 }1898 }1899 fn syntax(&self) -> &SyntaxNode {1900 &self.syntax1901 }1902}1903impl AstNode for BindFunction {1904 fn can_cast(kind: SyntaxKind) -> bool {1905 kind == BIND_FUNCTION1906 }1907 fn cast(syntax: SyntaxNode) -> Option<Self> {1908 if Self::can_cast(syntax.kind()) {1909 Some(Self { syntax })1910 } else {1911 None1912 }1913 }1914 fn syntax(&self) -> &SyntaxNode {1915 &self.syntax1916 }1917}1918impl AstNode for Param {1919 fn can_cast(kind: SyntaxKind) -> bool {1920 kind == PARAM1921 }1922 fn cast(syntax: SyntaxNode) -> Option<Self> {1923 if Self::can_cast(syntax.kind()) {1924 Some(Self { syntax })1925 } else {1926 None1927 }1928 }1929 fn syntax(&self) -> &SyntaxNode {1930 &self.syntax1931 }1932}1933impl AstNode for DestructFull {1934 fn can_cast(kind: SyntaxKind) -> bool {1935 kind == DESTRUCT_FULL1936 }1937 fn cast(syntax: SyntaxNode) -> Option<Self> {1938 if Self::can_cast(syntax.kind()) {1939 Some(Self { syntax })1940 } else {1941 None1942 }1943 }1944 fn syntax(&self) -> &SyntaxNode {1945 &self.syntax1946 }1947}1948impl AstNode for DestructSkip {1949 fn can_cast(kind: SyntaxKind) -> bool {1950 kind == DESTRUCT_SKIP1951 }1952 fn cast(syntax: SyntaxNode) -> Option<Self> {1953 if Self::can_cast(syntax.kind()) {1954 Some(Self { syntax })1955 } else {1956 None1957 }1958 }1959 fn syntax(&self) -> &SyntaxNode {1960 &self.syntax1961 }1962}1963impl AstNode for DestructArray {1964 fn can_cast(kind: SyntaxKind) -> bool {1965 kind == DESTRUCT_ARRAY1966 }1967 fn cast(syntax: SyntaxNode) -> Option<Self> {1968 if Self::can_cast(syntax.kind()) {1969 Some(Self { syntax })1970 } else {1971 None1972 }1973 }1974 fn syntax(&self) -> &SyntaxNode {1975 &self.syntax1976 }1977}1978impl AstNode for DestructObject {1979 fn can_cast(kind: SyntaxKind) -> bool {1980 kind == DESTRUCT_OBJECT1981 }1982 fn cast(syntax: SyntaxNode) -> Option<Self> {1983 if Self::can_cast(syntax.kind()) {1984 Some(Self { syntax })1985 } else {1986 None1987 }1988 }1989 fn syntax(&self) -> &SyntaxNode {1990 &self.syntax1991 }1992}1993impl AstNode for DestructObjectField {1994 fn can_cast(kind: SyntaxKind) -> bool {1995 kind == DESTRUCT_OBJECT_FIELD1996 }1997 fn cast(syntax: SyntaxNode) -> Option<Self> {1998 if Self::can_cast(syntax.kind()) {1999 Some(Self { syntax })2000 } else {2001 None2002 }2003 }2004 fn syntax(&self) -> &SyntaxNode {2005 &self.syntax2006 }2007}2008impl AstNode for DestructRest {2009 fn can_cast(kind: SyntaxKind) -> bool {2010 kind == DESTRUCT_REST2011 }2012 fn cast(syntax: SyntaxNode) -> Option<Self> {2013 if Self::can_cast(syntax.kind()) {2014 Some(Self { syntax })2015 } else {2016 None2017 }2018 }2019 fn syntax(&self) -> &SyntaxNode {2020 &self.syntax2021 }2022}2023impl AstNode for DestructArrayElement {2024 fn can_cast(kind: SyntaxKind) -> bool {2025 kind == DESTRUCT_ARRAY_ELEMENT2026 }2027 fn cast(syntax: SyntaxNode) -> Option<Self> {2028 if Self::can_cast(syntax.kind()) {2029 Some(Self { syntax })2030 } else {2031 None2032 }2033 }2034 fn syntax(&self) -> &SyntaxNode {2035 &self.syntax2036 }2037}2038impl From<ExprBinary> for Expr {2039 fn from(node: ExprBinary) -> Expr {2040 Expr::ExprBinary(node)2041 }2042}2043impl From<ExprUnary> for Expr {2044 fn from(node: ExprUnary) -> Expr {2045 Expr::ExprUnary(node)2046 }2047}2048impl From<ExprSlice> for Expr {2049 fn from(node: ExprSlice) -> Expr {2050 Expr::ExprSlice(node)2051 }2052}2053impl From<ExprIndex> for Expr {2054 fn from(node: ExprIndex) -> Expr {2055 Expr::ExprIndex(node)2056 }2057}2058impl From<ExprIndexExpr> for Expr {2059 fn from(node: ExprIndexExpr) -> Expr {2060 Expr::ExprIndexExpr(node)2061 }2062}2063impl From<ExprApply> for Expr {2064 fn from(node: ExprApply) -> Expr {2065 Expr::ExprApply(node)2066 }2067}2068impl From<ExprObjExtend> for Expr {2069 fn from(node: ExprObjExtend) -> Expr {2070 Expr::ExprObjExtend(node)2071 }2072}2073impl From<ExprParened> for Expr {2074 fn from(node: ExprParened) -> Expr {2075 Expr::ExprParened(node)2076 }2077}2078impl From<ExprIntrinsicThisFile> for Expr {2079 fn from(node: ExprIntrinsicThisFile) -> Expr {2080 Expr::ExprIntrinsicThisFile(node)2081 }2082}2083impl From<ExprIntrinsicId> for Expr {2084 fn from(node: ExprIntrinsicId) -> Expr {2085 Expr::ExprIntrinsicId(node)2086 }2087}2088impl From<ExprIntrinsic> for Expr {2089 fn from(node: ExprIntrinsic) -> Expr {2090 Expr::ExprIntrinsic(node)2091 }2092}2093impl From<ExprString> for Expr {2094 fn from(node: ExprString) -> Expr {2095 Expr::ExprString(node)2096 }2097}2098impl From<ExprNumber> for Expr {2099 fn from(node: ExprNumber) -> Expr {2100 Expr::ExprNumber(node)2101 }2102}2103impl From<ExprLiteral> for Expr {2104 fn from(node: ExprLiteral) -> Expr {2105 Expr::ExprLiteral(node)2106 }2107}2108impl From<ExprArray> for Expr {2109 fn from(node: ExprArray) -> Expr {2110 Expr::ExprArray(node)2111 }2112}2113impl From<ExprObject> for Expr {2114 fn from(node: ExprObject) -> Expr {2115 Expr::ExprObject(node)2116 }2117}2118impl From<ExprArrayComp> for Expr {2119 fn from(node: ExprArrayComp) -> Expr {2120 Expr::ExprArrayComp(node)2121 }2122}2123impl From<ExprImport> for Expr {2124 fn from(node: ExprImport) -> Expr {2125 Expr::ExprImport(node)2126 }2127}2128impl From<ExprVar> for Expr {2129 fn from(node: ExprVar) -> Expr {2130 Expr::ExprVar(node)2131 }2132}2133impl From<ExprLocal> for Expr {2134 fn from(node: ExprLocal) -> Expr {2135 Expr::ExprLocal(node)2136 }2137}2138impl From<ExprIfThenElse> for Expr {2139 fn from(node: ExprIfThenElse) -> Expr {2140 Expr::ExprIfThenElse(node)2141 }2142}2143impl From<ExprFunction> for Expr {2144 fn from(node: ExprFunction) -> Expr {2145 Expr::ExprFunction(node)2146 }2147}2148impl From<ExprAssert> for Expr {2149 fn from(node: ExprAssert) -> Expr {2150 Expr::ExprAssert(node)2151 }2152}2153impl From<ExprError> for Expr {2154 fn from(node: ExprError) -> Expr {2155 Expr::ExprError(node)2156 }2157}2158impl AstNode for Expr {2159 fn can_cast(kind: SyntaxKind) -> bool {2160 match kind {2161 EXPR_BINARY2162 | EXPR_UNARY2163 | EXPR_SLICE2164 | EXPR_INDEX2165 | EXPR_INDEX_EXPR2166 | EXPR_APPLY2167 | EXPR_OBJ_EXTEND2168 | EXPR_PARENED2169 | EXPR_INTRINSIC_THIS_FILE2170 | EXPR_INTRINSIC_ID2171 | EXPR_INTRINSIC2172 | EXPR_STRING2173 | EXPR_NUMBER2174 | EXPR_LITERAL2175 | EXPR_ARRAY2176 | EXPR_OBJECT2177 | EXPR_ARRAY_COMP2178 | EXPR_IMPORT2179 | EXPR_VAR2180 | EXPR_LOCAL2181 | EXPR_IF_THEN_ELSE2182 | EXPR_FUNCTION2183 | EXPR_ASSERT2184 | EXPR_ERROR => true,2185 _ => false,2186 }2187 }2188 fn cast(syntax: SyntaxNode) -> Option<Self> {2189 let res = match syntax.kind() {2190 EXPR_BINARY => Expr::ExprBinary(ExprBinary { syntax }),2191 EXPR_UNARY => Expr::ExprUnary(ExprUnary { syntax }),2192 EXPR_SLICE => Expr::ExprSlice(ExprSlice { syntax }),2193 EXPR_INDEX => Expr::ExprIndex(ExprIndex { syntax }),2194 EXPR_INDEX_EXPR => Expr::ExprIndexExpr(ExprIndexExpr { syntax }),2195 EXPR_APPLY => Expr::ExprApply(ExprApply { syntax }),2196 EXPR_OBJ_EXTEND => Expr::ExprObjExtend(ExprObjExtend { syntax }),2197 EXPR_PARENED => Expr::ExprParened(ExprParened { syntax }),2198 EXPR_INTRINSIC_THIS_FILE => {2199 Expr::ExprIntrinsicThisFile(ExprIntrinsicThisFile { syntax })2200 }2201 EXPR_INTRINSIC_ID => Expr::ExprIntrinsicId(ExprIntrinsicId { syntax }),2202 EXPR_INTRINSIC => Expr::ExprIntrinsic(ExprIntrinsic { syntax }),2203 EXPR_STRING => Expr::ExprString(ExprString { syntax }),2204 EXPR_NUMBER => Expr::ExprNumber(ExprNumber { syntax }),2205 EXPR_LITERAL => Expr::ExprLiteral(ExprLiteral { syntax }),2206 EXPR_ARRAY => Expr::ExprArray(ExprArray { syntax }),2207 EXPR_OBJECT => Expr::ExprObject(ExprObject { syntax }),2208 EXPR_ARRAY_COMP => Expr::ExprArrayComp(ExprArrayComp { syntax }),2209 EXPR_IMPORT => Expr::ExprImport(ExprImport { syntax }),2210 EXPR_VAR => Expr::ExprVar(ExprVar { syntax }),2211 EXPR_LOCAL => Expr::ExprLocal(ExprLocal { syntax }),2212 EXPR_IF_THEN_ELSE => Expr::ExprIfThenElse(ExprIfThenElse { syntax }),2213 EXPR_FUNCTION => Expr::ExprFunction(ExprFunction { syntax }),2214 EXPR_ASSERT => Expr::ExprAssert(ExprAssert { syntax }),2215 EXPR_ERROR => Expr::ExprError(ExprError { syntax }),2216 _ => return None,2217 };2218 Some(res)2219 }2220 fn syntax(&self) -> &SyntaxNode {2221 match self {2222 Expr::ExprBinary(it) => &it.syntax,2223 Expr::ExprUnary(it) => &it.syntax,2224 Expr::ExprSlice(it) => &it.syntax,2225 Expr::ExprIndex(it) => &it.syntax,2226 Expr::ExprIndexExpr(it) => &it.syntax,2227 Expr::ExprApply(it) => &it.syntax,2228 Expr::ExprObjExtend(it) => &it.syntax,2229 Expr::ExprParened(it) => &it.syntax,2230 Expr::ExprIntrinsicThisFile(it) => &it.syntax,2231 Expr::ExprIntrinsicId(it) => &it.syntax,2232 Expr::ExprIntrinsic(it) => &it.syntax,2233 Expr::ExprString(it) => &it.syntax,2234 Expr::ExprNumber(it) => &it.syntax,2235 Expr::ExprLiteral(it) => &it.syntax,2236 Expr::ExprArray(it) => &it.syntax,2237 Expr::ExprObject(it) => &it.syntax,2238 Expr::ExprArrayComp(it) => &it.syntax,2239 Expr::ExprImport(it) => &it.syntax,2240 Expr::ExprVar(it) => &it.syntax,2241 Expr::ExprLocal(it) => &it.syntax,2242 Expr::ExprIfThenElse(it) => &it.syntax,2243 Expr::ExprFunction(it) => &it.syntax,2244 Expr::ExprAssert(it) => &it.syntax,2245 Expr::ExprError(it) => &it.syntax,2246 }2247 }2248}2249impl From<ObjBodyComp> for ObjBody {2250 fn from(node: ObjBodyComp) -> ObjBody {2251 ObjBody::ObjBodyComp(node)2252 }2253}2254impl From<ObjBodyMemberList> for ObjBody {2255 fn from(node: ObjBodyMemberList) -> ObjBody {2256 ObjBody::ObjBodyMemberList(node)2257 }2258}2259impl AstNode for ObjBody {2260 fn can_cast(kind: SyntaxKind) -> bool {2261 match kind {2262 OBJ_BODY_COMP | OBJ_BODY_MEMBER_LIST => true,2263 _ => false,2264 }2265 }2266 fn cast(syntax: SyntaxNode) -> Option<Self> {2267 let res = match syntax.kind() {2268 OBJ_BODY_COMP => ObjBody::ObjBodyComp(ObjBodyComp { syntax }),2269 OBJ_BODY_MEMBER_LIST => ObjBody::ObjBodyMemberList(ObjBodyMemberList { syntax }),2270 _ => return None,2271 };2272 Some(res)2273 }2274 fn syntax(&self) -> &SyntaxNode {2275 match self {2276 ObjBody::ObjBodyComp(it) => &it.syntax,2277 ObjBody::ObjBodyMemberList(it) => &it.syntax,2278 }2279 }2280}2281impl From<ForSpec> for CompSpec {2282 fn from(node: ForSpec) -> CompSpec {2283 CompSpec::ForSpec(node)2284 }2285}2286impl From<IfSpec> for CompSpec {2287 fn from(node: IfSpec) -> CompSpec {2288 CompSpec::IfSpec(node)2289 }2290}2291impl AstNode for CompSpec {2292 fn can_cast(kind: SyntaxKind) -> bool {2293 match kind {2294 FOR_SPEC | IF_SPEC => true,2295 _ => false,2296 }2297 }2298 fn cast(syntax: SyntaxNode) -> Option<Self> {2299 let res = match syntax.kind() {2300 FOR_SPEC => CompSpec::ForSpec(ForSpec { syntax }),2301 IF_SPEC => CompSpec::IfSpec(IfSpec { syntax }),2302 _ => return None,2303 };2304 Some(res)2305 }2306 fn syntax(&self) -> &SyntaxNode {2307 match self {2308 CompSpec::ForSpec(it) => &it.syntax,2309 CompSpec::IfSpec(it) => &it.syntax,2310 }2311 }2312}2313impl From<BindDestruct> for Bind {2314 fn from(node: BindDestruct) -> Bind {2315 Bind::BindDestruct(node)2316 }2317}2318impl From<BindFunction> for Bind {2319 fn from(node: BindFunction) -> Bind {2320 Bind::BindFunction(node)2321 }2322}2323impl AstNode for Bind {2324 fn can_cast(kind: SyntaxKind) -> bool {2325 match kind {2326 BIND_DESTRUCT | BIND_FUNCTION => true,2327 _ => false,2328 }2329 }2330 fn cast(syntax: SyntaxNode) -> Option<Self> {2331 let res = match syntax.kind() {2332 BIND_DESTRUCT => Bind::BindDestruct(BindDestruct { syntax }),2333 BIND_FUNCTION => Bind::BindFunction(BindFunction { syntax }),2334 _ => return None,2335 };2336 Some(res)2337 }2338 fn syntax(&self) -> &SyntaxNode {2339 match self {2340 Bind::BindDestruct(it) => &it.syntax,2341 Bind::BindFunction(it) => &it.syntax,2342 }2343 }2344}2345impl From<MemberBindStmt> for Member {2346 fn from(node: MemberBindStmt) -> Member {2347 Member::MemberBindStmt(node)2348 }2349}2350impl From<MemberAssertStmt> for Member {2351 fn from(node: MemberAssertStmt) -> Member {2352 Member::MemberAssertStmt(node)2353 }2354}2355impl From<MemberField> for Member {2356 fn from(node: MemberField) -> Member {2357 Member::MemberField(node)2358 }2359}2360impl AstNode for Member {2361 fn can_cast(kind: SyntaxKind) -> bool {2362 match kind {2363 MEMBER_BIND_STMT | MEMBER_ASSERT_STMT | MEMBER_FIELD => true,2364 _ => false,2365 }2366 }2367 fn cast(syntax: SyntaxNode) -> Option<Self> {2368 let res = match syntax.kind() {2369 MEMBER_BIND_STMT => Member::MemberBindStmt(MemberBindStmt { syntax }),2370 MEMBER_ASSERT_STMT => Member::MemberAssertStmt(MemberAssertStmt { syntax }),2371 MEMBER_FIELD => Member::MemberField(MemberField { syntax }),2372 _ => return None,2373 };2374 Some(res)2375 }2376 fn syntax(&self) -> &SyntaxNode {2377 match self {2378 Member::MemberBindStmt(it) => &it.syntax,2379 Member::MemberAssertStmt(it) => &it.syntax,2380 Member::MemberField(it) => &it.syntax,2381 }2382 }2383}2384impl From<FieldNormal> for Field {2385 fn from(node: FieldNormal) -> Field {2386 Field::FieldNormal(node)2387 }2388}2389impl From<FieldMethod> for Field {2390 fn from(node: FieldMethod) -> Field {2391 Field::FieldMethod(node)2392 }2393}2394impl AstNode for Field {2395 fn can_cast(kind: SyntaxKind) -> bool {2396 match kind {2397 FIELD_NORMAL | FIELD_METHOD => true,2398 _ => false,2399 }2400 }2401 fn cast(syntax: SyntaxNode) -> Option<Self> {2402 let res = match syntax.kind() {2403 FIELD_NORMAL => Field::FieldNormal(FieldNormal { syntax }),2404 FIELD_METHOD => Field::FieldMethod(FieldMethod { syntax }),2405 _ => return None,2406 };2407 Some(res)2408 }2409 fn syntax(&self) -> &SyntaxNode {2410 match self {2411 Field::FieldNormal(it) => &it.syntax,2412 Field::FieldMethod(it) => &it.syntax,2413 }2414 }2415}2416impl From<FieldNameFixed> for FieldName {2417 fn from(node: FieldNameFixed) -> FieldName {2418 FieldName::FieldNameFixed(node)2419 }2420}2421impl From<FieldNameDynamic> for FieldName {2422 fn from(node: FieldNameDynamic) -> FieldName {2423 FieldName::FieldNameDynamic(node)2424 }2425}2426impl AstNode for FieldName {2427 fn can_cast(kind: SyntaxKind) -> bool {2428 match kind {2429 FIELD_NAME_FIXED | FIELD_NAME_DYNAMIC => true,2430 _ => false,2431 }2432 }2433 fn cast(syntax: SyntaxNode) -> Option<Self> {2434 let res = match syntax.kind() {2435 FIELD_NAME_FIXED => FieldName::FieldNameFixed(FieldNameFixed { syntax }),2436 FIELD_NAME_DYNAMIC => FieldName::FieldNameDynamic(FieldNameDynamic { syntax }),2437 _ => return None,2438 };2439 Some(res)2440 }2441 fn syntax(&self) -> &SyntaxNode {2442 match self {2443 FieldName::FieldNameFixed(it) => &it.syntax,2444 FieldName::FieldNameDynamic(it) => &it.syntax,2445 }2446 }2447}2448impl From<DestructFull> for Destruct {2449 fn from(node: DestructFull) -> Destruct {2450 Destruct::DestructFull(node)2451 }2452}2453impl From<DestructSkip> for Destruct {2454 fn from(node: DestructSkip) -> Destruct {2455 Destruct::DestructSkip(node)2456 }2457}2458impl From<DestructArray> for Destruct {2459 fn from(node: DestructArray) -> Destruct {2460 Destruct::DestructArray(node)2461 }2462}2463impl From<DestructObject> for Destruct {2464 fn from(node: DestructObject) -> Destruct {2465 Destruct::DestructObject(node)2466 }2467}2468impl AstNode for Destruct {2469 fn can_cast(kind: SyntaxKind) -> bool {2470 match kind {2471 DESTRUCT_FULL | DESTRUCT_SKIP | DESTRUCT_ARRAY | DESTRUCT_OBJECT => true,2472 _ => false,2473 }2474 }2475 fn cast(syntax: SyntaxNode) -> Option<Self> {2476 let res = match syntax.kind() {2477 DESTRUCT_FULL => Destruct::DestructFull(DestructFull { syntax }),2478 DESTRUCT_SKIP => Destruct::DestructSkip(DestructSkip { syntax }),2479 DESTRUCT_ARRAY => Destruct::DestructArray(DestructArray { syntax }),2480 DESTRUCT_OBJECT => Destruct::DestructObject(DestructObject { syntax }),2481 _ => return None,2482 };2483 Some(res)2484 }2485 fn syntax(&self) -> &SyntaxNode {2486 match self {2487 Destruct::DestructFull(it) => &it.syntax,2488 Destruct::DestructSkip(it) => &it.syntax,2489 Destruct::DestructArray(it) => &it.syntax,2490 Destruct::DestructObject(it) => &it.syntax,2491 }2492 }2493}2494impl From<DestructArrayElement> for DestructArrayPart {2495 fn from(node: DestructArrayElement) -> DestructArrayPart {2496 DestructArrayPart::DestructArrayElement(node)2497 }2498}2499impl From<DestructRest> for DestructArrayPart {2500 fn from(node: DestructRest) -> DestructArrayPart {2501 DestructArrayPart::DestructRest(node)2502 }2503}2504impl AstNode for DestructArrayPart {2505 fn can_cast(kind: SyntaxKind) -> bool {2506 match kind {2507 DESTRUCT_ARRAY_ELEMENT | DESTRUCT_REST => true,2508 _ => false,2509 }2510 }2511 fn cast(syntax: SyntaxNode) -> Option<Self> {2512 let res = match syntax.kind() {2513 DESTRUCT_ARRAY_ELEMENT => {2514 DestructArrayPart::DestructArrayElement(DestructArrayElement { syntax })2515 }2516 DESTRUCT_REST => DestructArrayPart::DestructRest(DestructRest { syntax }),2517 _ => return None,2518 };2519 Some(res)2520 }2521 fn syntax(&self) -> &SyntaxNode {2522 match self {2523 DestructArrayPart::DestructArrayElement(it) => &it.syntax,2524 DestructArrayPart::DestructRest(it) => &it.syntax,2525 }2526 }2527}2528impl AstToken for BinaryOperator {2529 fn can_cast(kind: SyntaxKind) -> bool {2530 BinaryOperatorKind::can_cast(kind)2531 }2532 fn cast(syntax: SyntaxToken) -> Option<Self> {2533 let kind = BinaryOperatorKind::cast(syntax.kind())?;2534 Some(BinaryOperator { syntax, kind })2535 }2536 fn syntax(&self) -> &SyntaxToken {2537 &self.syntax2538 }2539}2540impl BinaryOperatorKind {2541 fn can_cast(kind: SyntaxKind) -> bool {2542 match kind {2543 OR | AND | BIT_OR | BIT_XOR | BIT_AND | EQ | NE | LT | GT | LE | GE | IN_KW | LHS2544 | RHS | PLUS | MINUS | MUL | DIV | MODULO | META_OBJECT_APPLY | ERROR_NO_OPERATOR => true,2545 _ => false,2546 }2547 }2548 pub fn cast(kind: SyntaxKind) -> Option<Self> {2549 let res = match kind {2550 OR => Self::Or,2551 AND => Self::And,2552 BIT_OR => Self::BitOr,2553 BIT_XOR => Self::BitXor,2554 BIT_AND => Self::BitAnd,2555 EQ => Self::Eq,2556 NE => Self::Ne,2557 LT => Self::Lt,2558 GT => Self::Gt,2559 LE => Self::Le,2560 GE => Self::Ge,2561 IN_KW => Self::InKw,2562 LHS => Self::Lhs,2563 RHS => Self::Rhs,2564 PLUS => Self::Plus,2565 MINUS => Self::Minus,2566 MUL => Self::Mul,2567 DIV => Self::Div,2568 MODULO => Self::Modulo,2569 META_OBJECT_APPLY => Self::MetaObjectApply,2570 ERROR_NO_OPERATOR => Self::ErrorNoOperator,2571 _ => return None,2572 };2573 Some(res)2574 }2575}2576impl BinaryOperator {2577 pub fn kind(&self) -> BinaryOperatorKind {2578 self.kind2579 }2580}2581impl std::fmt::Display for BinaryOperator {2582 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2583 std::fmt::Display::fmt(self.syntax(), f)2584 }2585}2586impl AstToken for UnaryOperator {2587 fn can_cast(kind: SyntaxKind) -> bool {2588 UnaryOperatorKind::can_cast(kind)2589 }2590 fn cast(syntax: SyntaxToken) -> Option<Self> {2591 let kind = UnaryOperatorKind::cast(syntax.kind())?;2592 Some(UnaryOperator { syntax, kind })2593 }2594 fn syntax(&self) -> &SyntaxToken {2595 &self.syntax2596 }2597}2598impl UnaryOperatorKind {2599 fn can_cast(kind: SyntaxKind) -> bool {2600 match kind {2601 MINUS | NOT | BIT_NOT => true,2602 _ => false,2603 }2604 }2605 pub fn cast(kind: SyntaxKind) -> Option<Self> {2606 let res = match kind {2607 MINUS => Self::Minus,2608 NOT => Self::Not,2609 BIT_NOT => Self::BitNot,2610 _ => return None,2611 };2612 Some(res)2613 }2614}2615impl UnaryOperator {2616 pub fn kind(&self) -> UnaryOperatorKind {2617 self.kind2618 }2619}2620impl std::fmt::Display for UnaryOperator {2621 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2622 std::fmt::Display::fmt(self.syntax(), f)2623 }2624}2625impl AstToken for Literal {2626 fn can_cast(kind: SyntaxKind) -> bool {2627 LiteralKind::can_cast(kind)2628 }2629 fn cast(syntax: SyntaxToken) -> Option<Self> {2630 let kind = LiteralKind::cast(syntax.kind())?;2631 Some(Literal { syntax, kind })2632 }2633 fn syntax(&self) -> &SyntaxToken {2634 &self.syntax2635 }2636}2637impl LiteralKind {2638 fn can_cast(kind: SyntaxKind) -> bool {2639 match kind {2640 NULL_KW | TRUE_KW | FALSE_KW | SELF_KW | DOLLAR | SUPER_KW => true,2641 _ => false,2642 }2643 }2644 pub fn cast(kind: SyntaxKind) -> Option<Self> {2645 let res = match kind {2646 NULL_KW => Self::NullKw,2647 TRUE_KW => Self::TrueKw,2648 FALSE_KW => Self::FalseKw,2649 SELF_KW => Self::SelfKw,2650 DOLLAR => Self::Dollar,2651 SUPER_KW => Self::SuperKw,2652 _ => return None,2653 };2654 Some(res)2655 }2656}2657impl Literal {2658 pub fn kind(&self) -> LiteralKind {2659 self.kind2660 }2661}2662impl std::fmt::Display for Literal {2663 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2664 std::fmt::Display::fmt(self.syntax(), f)2665 }2666}2667impl AstToken for Text {2668 fn can_cast(kind: SyntaxKind) -> bool {2669 TextKind::can_cast(kind)2670 }2671 fn cast(syntax: SyntaxToken) -> Option<Self> {2672 let kind = TextKind::cast(syntax.kind())?;2673 Some(Text { syntax, kind })2674 }2675 fn syntax(&self) -> &SyntaxToken {2676 &self.syntax2677 }2678}2679impl TextKind {2680 fn can_cast(kind: SyntaxKind) -> bool {2681 match kind {2682 STRING_DOUBLE2683 | ERROR_STRING_DOUBLE_UNTERMINATED2684 | STRING_SINGLE2685 | ERROR_STRING_SINGLE_UNTERMINATED2686 | STRING_DOUBLE_VERBATIM2687 | ERROR_STRING_DOUBLE_VERBATIM_UNTERMINATED2688 | STRING_SINGLE_VERBATIM2689 | ERROR_STRING_SINGLE_VERBATIM_UNTERMINATED2690 | ERROR_STRING_VERBATIM_MISSING_QUOTES2691 | STRING_BLOCK2692 | ERROR_STRING_BLOCK_UNEXPECTED_END2693 | ERROR_STRING_BLOCK_MISSING_NEW_LINE2694 | ERROR_STRING_BLOCK_MISSING_TERMINATION2695 | ERROR_STRING_BLOCK_MISSING_INDENT => true,2696 _ => false,2697 }2698 }2699 pub fn cast(kind: SyntaxKind) -> Option<Self> {2700 let res = match kind {2701 STRING_DOUBLE => Self::StringDouble,2702 ERROR_STRING_DOUBLE_UNTERMINATED => Self::ErrorStringDoubleUnterminated,2703 STRING_SINGLE => Self::StringSingle,2704 ERROR_STRING_SINGLE_UNTERMINATED => Self::ErrorStringSingleUnterminated,2705 STRING_DOUBLE_VERBATIM => Self::StringDoubleVerbatim,2706 ERROR_STRING_DOUBLE_VERBATIM_UNTERMINATED => {2707 Self::ErrorStringDoubleVerbatimUnterminated2708 }2709 STRING_SINGLE_VERBATIM => Self::StringSingleVerbatim,2710 ERROR_STRING_SINGLE_VERBATIM_UNTERMINATED => {2711 Self::ErrorStringSingleVerbatimUnterminated2712 }2713 ERROR_STRING_VERBATIM_MISSING_QUOTES => Self::ErrorStringVerbatimMissingQuotes,2714 STRING_BLOCK => Self::StringBlock,2715 ERROR_STRING_BLOCK_UNEXPECTED_END => Self::ErrorStringBlockUnexpectedEnd,2716 ERROR_STRING_BLOCK_MISSING_NEW_LINE => Self::ErrorStringBlockMissingNewLine,2717 ERROR_STRING_BLOCK_MISSING_TERMINATION => Self::ErrorStringBlockMissingTermination,2718 ERROR_STRING_BLOCK_MISSING_INDENT => Self::ErrorStringBlockMissingIndent,2719 _ => return None,2720 };2721 Some(res)2722 }2723}2724impl Text {2725 pub fn kind(&self) -> TextKind {2726 self.kind2727 }2728}2729impl std::fmt::Display for Text {2730 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2731 std::fmt::Display::fmt(self.syntax(), f)2732 }2733}2734impl AstToken for Number {2735 fn can_cast(kind: SyntaxKind) -> bool {2736 NumberKind::can_cast(kind)2737 }2738 fn cast(syntax: SyntaxToken) -> Option<Self> {2739 let kind = NumberKind::cast(syntax.kind())?;2740 Some(Number { syntax, kind })2741 }2742 fn syntax(&self) -> &SyntaxToken {2743 &self.syntax2744 }2745}2746impl NumberKind {2747 fn can_cast(kind: SyntaxKind) -> bool {2748 match kind {2749 FLOAT2750 | ERROR_FLOAT_JUNK_AFTER_POINT2751 | ERROR_FLOAT_JUNK_AFTER_EXPONENT2752 | ERROR_FLOAT_JUNK_AFTER_EXPONENT_SIGN => true,2753 _ => false,2754 }2755 }2756 pub fn cast(kind: SyntaxKind) -> Option<Self> {2757 let res = match kind {2758 FLOAT => Self::Float,2759 ERROR_FLOAT_JUNK_AFTER_POINT => Self::ErrorFloatJunkAfterPoint,2760 ERROR_FLOAT_JUNK_AFTER_EXPONENT => Self::ErrorFloatJunkAfterExponent,2761 ERROR_FLOAT_JUNK_AFTER_EXPONENT_SIGN => Self::ErrorFloatJunkAfterExponentSign,2762 _ => return None,2763 };2764 Some(res)2765 }2766}2767impl Number {2768 pub fn kind(&self) -> NumberKind {2769 self.kind2770 }2771}2772impl std::fmt::Display for Number {2773 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2774 std::fmt::Display::fmt(self.syntax(), f)2775 }2776}2777impl AstToken for ImportKind {2778 fn can_cast(kind: SyntaxKind) -> bool {2779 ImportKindKind::can_cast(kind)2780 }2781 fn cast(syntax: SyntaxToken) -> Option<Self> {2782 let kind = ImportKindKind::cast(syntax.kind())?;2783 Some(ImportKind { syntax, kind })2784 }2785 fn syntax(&self) -> &SyntaxToken {2786 &self.syntax2787 }2788}2789impl ImportKindKind {2790 fn can_cast(kind: SyntaxKind) -> bool {2791 match kind {2792 IMPORTSTR_KW | IMPORTBIN_KW | IMPORT_KW => true,2793 _ => false,2794 }2795 }2796 pub fn cast(kind: SyntaxKind) -> Option<Self> {2797 let res = match kind {2798 IMPORTSTR_KW => Self::ImportstrKw,2799 IMPORTBIN_KW => Self::ImportbinKw,2800 IMPORT_KW => Self::ImportKw,2801 _ => return None,2802 };2803 Some(res)2804 }2805}2806impl ImportKind {2807 pub fn kind(&self) -> ImportKindKind {2808 self.kind2809 }2810}2811impl std::fmt::Display for ImportKind {2812 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2813 std::fmt::Display::fmt(self.syntax(), f)2814 }2815}2816impl AstToken for Visibility {2817 fn can_cast(kind: SyntaxKind) -> bool {2818 VisibilityKind::can_cast(kind)2819 }2820 fn cast(syntax: SyntaxToken) -> Option<Self> {2821 let kind = VisibilityKind::cast(syntax.kind())?;2822 Some(Visibility { syntax, kind })2823 }2824 fn syntax(&self) -> &SyntaxToken {2825 &self.syntax2826 }2827}2828impl VisibilityKind {2829 fn can_cast(kind: SyntaxKind) -> bool {2830 match kind {2831 COLONCOLONCOLON | COLONCOLON | COLON => true,2832 _ => false,2833 }2834 }2835 pub fn cast(kind: SyntaxKind) -> Option<Self> {2836 let res = match kind {2837 COLONCOLONCOLON => Self::Coloncoloncolon,2838 COLONCOLON => Self::Coloncolon,2839 COLON => Self::Colon,2840 _ => return None,2841 };2842 Some(res)2843 }2844}2845impl Visibility {2846 pub fn kind(&self) -> VisibilityKind {2847 self.kind2848 }2849}2850impl std::fmt::Display for Visibility {2851 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2852 std::fmt::Display::fmt(self.syntax(), f)2853 }2854}2855impl AstToken for Trivia {2856 fn can_cast(kind: SyntaxKind) -> bool {2857 TriviaKind::can_cast(kind)2858 }2859 fn cast(syntax: SyntaxToken) -> Option<Self> {2860 let kind = TriviaKind::cast(syntax.kind())?;2861 Some(Trivia { syntax, kind })2862 }2863 fn syntax(&self) -> &SyntaxToken {2864 &self.syntax2865 }2866}2867impl TriviaKind {2868 fn can_cast(kind: SyntaxKind) -> bool {2869 match kind {2870 WHITESPACE2871 | MULTI_LINE_COMMENT2872 | ERROR_COMMENT_TOO_SHORT2873 | ERROR_COMMENT_UNTERMINATED2874 | SINGLE_LINE_HASH_COMMENT2875 | SINGLE_LINE_SLASH_COMMENT => true,2876 _ => false,2877 }2878 }2879 pub fn cast(kind: SyntaxKind) -> Option<Self> {2880 let res = match kind {2881 WHITESPACE => Self::Whitespace,2882 MULTI_LINE_COMMENT => Self::MultiLineComment,2883 ERROR_COMMENT_TOO_SHORT => Self::ErrorCommentTooShort,2884 ERROR_COMMENT_UNTERMINATED => Self::ErrorCommentUnterminated,2885 SINGLE_LINE_HASH_COMMENT => Self::SingleLineHashComment,2886 SINGLE_LINE_SLASH_COMMENT => Self::SingleLineSlashComment,2887 _ => return None,2888 };2889 Some(res)2890 }2891}2892impl Trivia {2893 pub fn kind(&self) -> TriviaKind {2894 self.kind2895 }2896}2897impl std::fmt::Display for Trivia {2898 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2899 std::fmt::Display::fmt(self.syntax(), f)2900 }2901}2902impl AstToken for ParsingError {2903 fn can_cast(kind: SyntaxKind) -> bool {2904 ParsingErrorKind::can_cast(kind)2905 }2906 fn cast(syntax: SyntaxToken) -> Option<Self> {2907 let kind = ParsingErrorKind::cast(syntax.kind())?;2908 Some(ParsingError { syntax, kind })2909 }2910 fn syntax(&self) -> &SyntaxToken {2911 &self.syntax2912 }2913}2914impl ParsingErrorKind {2915 fn can_cast(kind: SyntaxKind) -> bool {2916 match kind {2917 ERROR_MISSING_TOKEN | ERROR_UNEXPECTED_TOKEN => true,2918 _ => false,2919 }2920 }2921 pub fn cast(kind: SyntaxKind) -> Option<Self> {2922 let res = match kind {2923 ERROR_MISSING_TOKEN => Self::ErrorMissingToken,2924 ERROR_UNEXPECTED_TOKEN => Self::ErrorUnexpectedToken,2925 _ => return None,2926 };2927 Some(res)2928 }2929}2930impl ParsingError {2931 pub fn kind(&self) -> ParsingErrorKind {2932 self.kind2933 }2934}2935impl std::fmt::Display for ParsingError {2936 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2937 std::fmt::Display::fmt(self.syntax(), f)2938 }2939}2940impl std::fmt::Display for Expr {2941 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2942 std::fmt::Display::fmt(self.syntax(), f)2943 }2944}2945impl std::fmt::Display for ObjBody {2946 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2947 std::fmt::Display::fmt(self.syntax(), f)2948 }2949}2950impl std::fmt::Display for CompSpec {2951 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2952 std::fmt::Display::fmt(self.syntax(), f)2953 }2954}2955impl std::fmt::Display for Bind {2956 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2957 std::fmt::Display::fmt(self.syntax(), f)2958 }2959}2960impl std::fmt::Display for Member {2961 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2962 std::fmt::Display::fmt(self.syntax(), f)2963 }2964}2965impl std::fmt::Display for Field {2966 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2967 std::fmt::Display::fmt(self.syntax(), f)2968 }2969}2970impl std::fmt::Display for FieldName {2971 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2972 std::fmt::Display::fmt(self.syntax(), f)2973 }2974}2975impl std::fmt::Display for Destruct {2976 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2977 std::fmt::Display::fmt(self.syntax(), f)2978 }2979}2980impl std::fmt::Display for DestructArrayPart {2981 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2982 std::fmt::Display::fmt(self.syntax(), f)2983 }2984}2985impl std::fmt::Display for SourceFile {2986 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2987 std::fmt::Display::fmt(self.syntax(), f)2988 }2989}2990impl std::fmt::Display for ExprBinary {2991 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2992 std::fmt::Display::fmt(self.syntax(), f)2993 }2994}2995impl std::fmt::Display for LhsExpr {2996 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2997 std::fmt::Display::fmt(self.syntax(), f)2998 }2999}3000impl std::fmt::Display for ExprUnary {3001 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3002 std::fmt::Display::fmt(self.syntax(), f)3003 }3004}3005impl std::fmt::Display for ExprSlice {3006 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3007 std::fmt::Display::fmt(self.syntax(), f)3008 }3009}3010impl std::fmt::Display for SliceDesc {3011 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3012 std::fmt::Display::fmt(self.syntax(), f)3013 }3014}3015impl std::fmt::Display for ExprIndex {3016 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3017 std::fmt::Display::fmt(self.syntax(), f)3018 }3019}3020impl std::fmt::Display for Name {3021 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3022 std::fmt::Display::fmt(self.syntax(), f)3023 }3024}3025impl std::fmt::Display for ExprIndexExpr {3026 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3027 std::fmt::Display::fmt(self.syntax(), f)3028 }3029}3030impl std::fmt::Display for ExprApply {3031 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3032 std::fmt::Display::fmt(self.syntax(), f)3033 }3034}3035impl std::fmt::Display for ArgsDesc {3036 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3037 std::fmt::Display::fmt(self.syntax(), f)3038 }3039}3040impl std::fmt::Display for ExprObjExtend {3041 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3042 std::fmt::Display::fmt(self.syntax(), f)3043 }3044}3045impl std::fmt::Display for ExprParened {3046 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3047 std::fmt::Display::fmt(self.syntax(), f)3048 }3049}3050impl std::fmt::Display for ExprLiteral {3051 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3052 std::fmt::Display::fmt(self.syntax(), f)3053 }3054}3055impl std::fmt::Display for ExprIntrinsicThisFile {3056 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3057 std::fmt::Display::fmt(self.syntax(), f)3058 }3059}3060impl std::fmt::Display for ExprIntrinsicId {3061 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3062 std::fmt::Display::fmt(self.syntax(), f)3063 }3064}3065impl std::fmt::Display for ExprIntrinsic {3066 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3067 std::fmt::Display::fmt(self.syntax(), f)3068 }3069}3070impl std::fmt::Display for ExprString {3071 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3072 std::fmt::Display::fmt(self.syntax(), f)3073 }3074}3075impl std::fmt::Display for ExprNumber {3076 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3077 std::fmt::Display::fmt(self.syntax(), f)3078 }3079}3080impl std::fmt::Display for ExprArray {3081 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3082 std::fmt::Display::fmt(self.syntax(), f)3083 }3084}3085impl std::fmt::Display for ExprObject {3086 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3087 std::fmt::Display::fmt(self.syntax(), f)3088 }3089}3090impl std::fmt::Display for ExprArrayComp {3091 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3092 std::fmt::Display::fmt(self.syntax(), f)3093 }3094}3095impl std::fmt::Display for ExprImport {3096 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3097 std::fmt::Display::fmt(self.syntax(), f)3098 }3099}3100impl std::fmt::Display for ExprVar {3101 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3102 std::fmt::Display::fmt(self.syntax(), f)3103 }3104}3105impl std::fmt::Display for ExprLocal {3106 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3107 std::fmt::Display::fmt(self.syntax(), f)3108 }3109}3110impl std::fmt::Display for ExprIfThenElse {3111 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3112 std::fmt::Display::fmt(self.syntax(), f)3113 }3114}3115impl std::fmt::Display for TrueExpr {3116 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3117 std::fmt::Display::fmt(self.syntax(), f)3118 }3119}3120impl std::fmt::Display for FalseExpr {3121 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3122 std::fmt::Display::fmt(self.syntax(), f)3123 }3124}3125impl std::fmt::Display for ExprFunction {3126 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3127 std::fmt::Display::fmt(self.syntax(), f)3128 }3129}3130impl std::fmt::Display for ParamsDesc {3131 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3132 std::fmt::Display::fmt(self.syntax(), f)3133 }3134}3135impl std::fmt::Display for ExprAssert {3136 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3137 std::fmt::Display::fmt(self.syntax(), f)3138 }3139}3140impl std::fmt::Display for Assertion {3141 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3142 std::fmt::Display::fmt(self.syntax(), f)3143 }3144}3145impl std::fmt::Display for ExprError {3146 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3147 std::fmt::Display::fmt(self.syntax(), f)3148 }3149}3150impl std::fmt::Display for SliceDescEnd {3151 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3152 std::fmt::Display::fmt(self.syntax(), f)3153 }3154}3155impl std::fmt::Display for SliceDescStep {3156 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3157 std::fmt::Display::fmt(self.syntax(), f)3158 }3159}3160impl std::fmt::Display for Arg {3161 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3162 std::fmt::Display::fmt(self.syntax(), f)3163 }3164}3165impl std::fmt::Display for ObjBodyComp {3166 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3167 std::fmt::Display::fmt(self.syntax(), f)3168 }3169}3170impl std::fmt::Display for ObjLocalPostComma {3171 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3172 std::fmt::Display::fmt(self.syntax(), f)3173 }3174}3175impl std::fmt::Display for ObjLocalPreComma {3176 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3177 std::fmt::Display::fmt(self.syntax(), f)3178 }3179}3180impl std::fmt::Display for ObjBodyMemberList {3181 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3182 std::fmt::Display::fmt(self.syntax(), f)3183 }3184}3185impl std::fmt::Display for ObjLocal {3186 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3187 std::fmt::Display::fmt(self.syntax(), f)3188 }3189}3190impl std::fmt::Display for MemberBindStmt {3191 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3192 std::fmt::Display::fmt(self.syntax(), f)3193 }3194}3195impl std::fmt::Display for MemberAssertStmt {3196 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3197 std::fmt::Display::fmt(self.syntax(), f)3198 }3199}3200impl std::fmt::Display for MemberField {3201 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3202 std::fmt::Display::fmt(self.syntax(), f)3203 }3204}3205impl std::fmt::Display for FieldNormal {3206 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3207 std::fmt::Display::fmt(self.syntax(), f)3208 }3209}3210impl std::fmt::Display for FieldMethod {3211 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3212 std::fmt::Display::fmt(self.syntax(), f)3213 }3214}3215impl std::fmt::Display for FieldNameFixed {3216 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3217 std::fmt::Display::fmt(self.syntax(), f)3218 }3219}3220impl std::fmt::Display for FieldNameDynamic {3221 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3222 std::fmt::Display::fmt(self.syntax(), f)3223 }3224}3225impl std::fmt::Display for ForSpec {3226 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3227 std::fmt::Display::fmt(self.syntax(), f)3228 }3229}3230impl std::fmt::Display for IfSpec {3231 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3232 std::fmt::Display::fmt(self.syntax(), f)3233 }3234}3235impl std::fmt::Display for BindDestruct {3236 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3237 std::fmt::Display::fmt(self.syntax(), f)3238 }3239}3240impl std::fmt::Display for BindFunction {3241 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3242 std::fmt::Display::fmt(self.syntax(), f)3243 }3244}3245impl std::fmt::Display for Param {3246 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3247 std::fmt::Display::fmt(self.syntax(), f)3248 }3249}3250impl std::fmt::Display for DestructFull {3251 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3252 std::fmt::Display::fmt(self.syntax(), f)3253 }3254}3255impl std::fmt::Display for DestructSkip {3256 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3257 std::fmt::Display::fmt(self.syntax(), f)3258 }3259}3260impl std::fmt::Display for DestructArray {3261 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3262 std::fmt::Display::fmt(self.syntax(), f)3263 }3264}3265impl std::fmt::Display for DestructObject {3266 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3267 std::fmt::Display::fmt(self.syntax(), f)3268 }3269}3270impl std::fmt::Display for DestructObjectField {3271 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3272 std::fmt::Display::fmt(self.syntax(), f)3273 }3274}3275impl std::fmt::Display for DestructRest {3276 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3277 std::fmt::Display::fmt(self.syntax(), f)3278 }3279}3280impl std::fmt::Display for DestructArrayElement {3281 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3282 std::fmt::Display::fmt(self.syntax(), f)3283 }3284}1//! This is a generated file, please do not edit manually. Changes can be2//! made in codegeneration that lives in `xtask` top-level dir.34#![allow(non_snake_case, clippy::match_like_matches_macro)]5use crate::{6 ast::{support, AstChildren, AstNode, AstToken},7 SyntaxKind::{self, *},8 SyntaxNode, SyntaxToken, T,9};1011#[derive(Debug, Clone, PartialEq, Eq, Hash)]12pub struct SourceFile {13 pub(crate) syntax: SyntaxNode,14}15impl SourceFile {16 pub fn expr(&self) -> Option<Expr> {17 support::child(&self.syntax)18 }19}2021#[derive(Debug, Clone, PartialEq, Eq, Hash)]22pub struct ExprBinary {23 pub(crate) syntax: SyntaxNode,24}25impl ExprBinary {26 pub fn lhs(&self) -> Option<LhsExpr> {27 support::child(&self.syntax)28 }29 pub fn binary_operator(&self) -> Option<BinaryOperator> {30 support::token_child(&self.syntax)31 }32 pub fn rhs(&self) -> Option<Expr> {33 support::child(&self.syntax)34 }35}3637#[derive(Debug, Clone, PartialEq, Eq, Hash)]38pub struct LhsExpr {39 pub(crate) syntax: SyntaxNode,40}41impl LhsExpr {42 pub fn expr(&self) -> Option<Expr> {43 support::child(&self.syntax)44 }45}4647#[derive(Debug, Clone, PartialEq, Eq, Hash)]48pub struct ExprUnary {49 pub(crate) syntax: SyntaxNode,50}51impl ExprUnary {52 pub fn unary_operator(&self) -> Option<UnaryOperator> {53 support::token_child(&self.syntax)54 }55 pub fn rhs(&self) -> Option<Expr> {56 support::child(&self.syntax)57 }58}5960#[derive(Debug, Clone, PartialEq, Eq, Hash)]61pub struct ExprSlice {62 pub(crate) syntax: SyntaxNode,63}64impl ExprSlice {65 pub fn expr(&self) -> Option<Expr> {66 support::child(&self.syntax)67 }68 pub fn slice_desc(&self) -> Option<SliceDesc> {69 support::child(&self.syntax)70 }71}7273#[derive(Debug, Clone, PartialEq, Eq, Hash)]74pub struct SliceDesc {75 pub(crate) syntax: SyntaxNode,76}77impl SliceDesc {78 pub fn l_brack_token(&self) -> Option<SyntaxToken> {79 support::token(&self.syntax, T!['['])80 }81 pub fn from(&self) -> Option<Expr> {82 support::child(&self.syntax)83 }84 pub fn colon_token(&self) -> Option<SyntaxToken> {85 support::token(&self.syntax, T![:])86 }87 pub fn end(&self) -> Option<SliceDescEnd> {88 support::child(&self.syntax)89 }90 pub fn step(&self) -> Option<SliceDescStep> {91 support::child(&self.syntax)92 }93 pub fn r_brack_token(&self) -> Option<SyntaxToken> {94 support::token(&self.syntax, T![']'])95 }96}9798#[derive(Debug, Clone, PartialEq, Eq, Hash)]99pub struct ExprIndex {100 pub(crate) syntax: SyntaxNode,101}102impl ExprIndex {103 pub fn expr(&self) -> Option<Expr> {104 support::child(&self.syntax)105 }106 pub fn dot_token(&self) -> Option<SyntaxToken> {107 support::token(&self.syntax, T![.])108 }109 pub fn index(&self) -> Option<Name> {110 support::child(&self.syntax)111 }112}113114#[derive(Debug, Clone, PartialEq, Eq, Hash)]115pub struct Name {116 pub(crate) syntax: SyntaxNode,117}118impl Name {119 pub fn ident_lit(&self) -> Option<SyntaxToken> {120 support::token(&self.syntax, IDENT)121 }122}123124#[derive(Debug, Clone, PartialEq, Eq, Hash)]125pub struct ExprIndexExpr {126 pub(crate) syntax: SyntaxNode,127}128impl ExprIndexExpr {129 pub fn base(&self) -> Option<LhsExpr> {130 support::child(&self.syntax)131 }132 pub fn l_brack_token(&self) -> Option<SyntaxToken> {133 support::token(&self.syntax, T!['['])134 }135 pub fn index(&self) -> Option<Expr> {136 support::child(&self.syntax)137 }138 pub fn r_brack_token(&self) -> Option<SyntaxToken> {139 support::token(&self.syntax, T![']'])140 }141}142143#[derive(Debug, Clone, PartialEq, Eq, Hash)]144pub struct ExprApply {145 pub(crate) syntax: SyntaxNode,146}147impl ExprApply {148 pub fn expr(&self) -> Option<Expr> {149 support::child(&self.syntax)150 }151 pub fn args_desc(&self) -> Option<ArgsDesc> {152 support::child(&self.syntax)153 }154 pub fn tailstrict_kw_token(&self) -> Option<SyntaxToken> {155 support::token(&self.syntax, T![tailstrict])156 }157}158159#[derive(Debug, Clone, PartialEq, Eq, Hash)]160pub struct ArgsDesc {161 pub(crate) syntax: SyntaxNode,162}163impl ArgsDesc {164 pub fn l_paren_token(&self) -> Option<SyntaxToken> {165 support::token(&self.syntax, T!['('])166 }167 pub fn args(&self) -> AstChildren<Arg> {168 support::children(&self.syntax)169 }170 pub fn r_paren_token(&self) -> Option<SyntaxToken> {171 support::token(&self.syntax, T![')'])172 }173}174175#[derive(Debug, Clone, PartialEq, Eq, Hash)]176pub struct ExprObjExtend {177 pub(crate) syntax: SyntaxNode,178}179impl ExprObjExtend {180 pub fn lhs_expr(&self) -> Option<LhsExpr> {181 support::child(&self.syntax)182 }183 pub fn expr(&self) -> Option<Expr> {184 support::child(&self.syntax)185 }186}187188#[derive(Debug, Clone, PartialEq, Eq, Hash)]189pub struct ExprParened {190 pub(crate) syntax: SyntaxNode,191}192impl ExprParened {193 pub fn l_paren_token(&self) -> Option<SyntaxToken> {194 support::token(&self.syntax, T!['('])195 }196 pub fn expr(&self) -> Option<Expr> {197 support::child(&self.syntax)198 }199 pub fn r_paren_token(&self) -> Option<SyntaxToken> {200 support::token(&self.syntax, T![')'])201 }202}203204#[derive(Debug, Clone, PartialEq, Eq, Hash)]205pub struct ExprLiteral {206 pub(crate) syntax: SyntaxNode,207}208impl ExprLiteral {209 pub fn literal(&self) -> Option<Literal> {210 support::token_child(&self.syntax)211 }212}213214#[derive(Debug, Clone, PartialEq, Eq, Hash)]215pub struct ExprIntrinsicThisFile {216 pub(crate) syntax: SyntaxNode,217}218impl ExprIntrinsicThisFile {219 pub fn intrinsic_this_file_token(&self) -> Option<SyntaxToken> {220 support::token(&self.syntax, T!["$intrinsicThisFile"])221 }222}223224#[derive(Debug, Clone, PartialEq, Eq, Hash)]225pub struct ExprIntrinsicId {226 pub(crate) syntax: SyntaxNode,227}228impl ExprIntrinsicId {229 pub fn intrinsic_id_token(&self) -> Option<SyntaxToken> {230 support::token(&self.syntax, T!["$intrinsicId"])231 }232}233234#[derive(Debug, Clone, PartialEq, Eq, Hash)]235pub struct ExprIntrinsic {236 pub(crate) syntax: SyntaxNode,237}238impl ExprIntrinsic {239 pub fn intrinsic_token(&self) -> Option<SyntaxToken> {240 support::token(&self.syntax, T!["$intrinsic"])241 }242 pub fn l_paren_token(&self) -> Option<SyntaxToken> {243 support::token(&self.syntax, T!['('])244 }245 pub fn name(&self) -> Option<Name> {246 support::child(&self.syntax)247 }248 pub fn r_paren_token(&self) -> Option<SyntaxToken> {249 support::token(&self.syntax, T![')'])250 }251}252253#[derive(Debug, Clone, PartialEq, Eq, Hash)]254pub struct ExprString {255 pub(crate) syntax: SyntaxNode,256}257impl ExprString {258 pub fn text(&self) -> Option<Text> {259 support::token_child(&self.syntax)260 }261}262263#[derive(Debug, Clone, PartialEq, Eq, Hash)]264pub struct ExprNumber {265 pub(crate) syntax: SyntaxNode,266}267impl ExprNumber {268 pub fn number(&self) -> Option<Number> {269 support::token_child(&self.syntax)270 }271}272273#[derive(Debug, Clone, PartialEq, Eq, Hash)]274pub struct ExprArray {275 pub(crate) syntax: SyntaxNode,276}277impl ExprArray {278 pub fn l_brack_token(&self) -> Option<SyntaxToken> {279 support::token(&self.syntax, T!['['])280 }281 pub fn exprs(&self) -> AstChildren<Expr> {282 support::children(&self.syntax)283 }284 pub fn r_brack_token(&self) -> Option<SyntaxToken> {285 support::token(&self.syntax, T![']'])286 }287}288289#[derive(Debug, Clone, PartialEq, Eq, Hash)]290pub struct ExprObject {291 pub(crate) syntax: SyntaxNode,292}293impl ExprObject {294 pub fn obj_body(&self) -> Option<ObjBody> {295 support::child(&self.syntax)296 }297}298299#[derive(Debug, Clone, PartialEq, Eq, Hash)]300pub struct ExprArrayComp {301 pub(crate) syntax: SyntaxNode,302}303impl ExprArrayComp {304 pub fn l_brack_token(&self) -> Option<SyntaxToken> {305 support::token(&self.syntax, T!['['])306 }307 pub fn expr(&self) -> Option<Expr> {308 support::child(&self.syntax)309 }310 pub fn comma_token(&self) -> Option<SyntaxToken> {311 support::token(&self.syntax, T![,])312 }313 pub fn comp_specs(&self) -> AstChildren<CompSpec> {314 support::children(&self.syntax)315 }316 pub fn r_brack_token(&self) -> Option<SyntaxToken> {317 support::token(&self.syntax, T![']'])318 }319}320321#[derive(Debug, Clone, PartialEq, Eq, Hash)]322pub struct ExprImport {323 pub(crate) syntax: SyntaxNode,324}325impl ExprImport {326 pub fn import_kind(&self) -> Option<ImportKind> {327 support::token_child(&self.syntax)328 }329 pub fn text(&self) -> Option<Text> {330 support::token_child(&self.syntax)331 }332}333334#[derive(Debug, Clone, PartialEq, Eq, Hash)]335pub struct ExprVar {336 pub(crate) syntax: SyntaxNode,337}338impl ExprVar {339 pub fn name(&self) -> Option<Name> {340 support::child(&self.syntax)341 }342}343344#[derive(Debug, Clone, PartialEq, Eq, Hash)]345pub struct ExprLocal {346 pub(crate) syntax: SyntaxNode,347}348impl ExprLocal {349 pub fn local_kw_token(&self) -> Option<SyntaxToken> {350 support::token(&self.syntax, T![local])351 }352 pub fn binds(&self) -> AstChildren<Bind> {353 support::children(&self.syntax)354 }355 pub fn semi_token(&self) -> Option<SyntaxToken> {356 support::token(&self.syntax, T![;])357 }358 pub fn expr(&self) -> Option<Expr> {359 support::child(&self.syntax)360 }361}362363#[derive(Debug, Clone, PartialEq, Eq, Hash)]364pub struct ExprIfThenElse {365 pub(crate) syntax: SyntaxNode,366}367impl ExprIfThenElse {368 pub fn if_kw_token(&self) -> Option<SyntaxToken> {369 support::token(&self.syntax, T![if])370 }371 pub fn cond(&self) -> Option<Expr> {372 support::child(&self.syntax)373 }374 pub fn then_kw_token(&self) -> Option<SyntaxToken> {375 support::token(&self.syntax, T![then])376 }377 pub fn then(&self) -> Option<TrueExpr> {378 support::child(&self.syntax)379 }380 pub fn else_kw_token(&self) -> Option<SyntaxToken> {381 support::token(&self.syntax, T![else])382 }383 pub fn else_(&self) -> Option<FalseExpr> {384 support::child(&self.syntax)385 }386}387388#[derive(Debug, Clone, PartialEq, Eq, Hash)]389pub struct TrueExpr {390 pub(crate) syntax: SyntaxNode,391}392impl TrueExpr {393 pub fn expr(&self) -> Option<Expr> {394 support::child(&self.syntax)395 }396}397398#[derive(Debug, Clone, PartialEq, Eq, Hash)]399pub struct FalseExpr {400 pub(crate) syntax: SyntaxNode,401}402impl FalseExpr {403 pub fn expr(&self) -> Option<Expr> {404 support::child(&self.syntax)405 }406}407408#[derive(Debug, Clone, PartialEq, Eq, Hash)]409pub struct ExprFunction {410 pub(crate) syntax: SyntaxNode,411}412impl ExprFunction {413 pub fn function_kw_token(&self) -> Option<SyntaxToken> {414 support::token(&self.syntax, T![function])415 }416 pub fn l_paren_token(&self) -> Option<SyntaxToken> {417 support::token(&self.syntax, T!['('])418 }419 pub fn params_desc(&self) -> Option<ParamsDesc> {420 support::child(&self.syntax)421 }422 pub fn r_paren_token(&self) -> Option<SyntaxToken> {423 support::token(&self.syntax, T![')'])424 }425 pub fn expr(&self) -> Option<Expr> {426 support::child(&self.syntax)427 }428}429430#[derive(Debug, Clone, PartialEq, Eq, Hash)]431pub struct ParamsDesc {432 pub(crate) syntax: SyntaxNode,433}434impl ParamsDesc {435 pub fn l_paren_token(&self) -> Option<SyntaxToken> {436 support::token(&self.syntax, T!['('])437 }438 pub fn params(&self) -> AstChildren<Param> {439 support::children(&self.syntax)440 }441 pub fn r_paren_token(&self) -> Option<SyntaxToken> {442 support::token(&self.syntax, T![')'])443 }444}445446#[derive(Debug, Clone, PartialEq, Eq, Hash)]447pub struct ExprAssert {448 pub(crate) syntax: SyntaxNode,449}450impl ExprAssert {451 pub fn assertion(&self) -> Option<Assertion> {452 support::child(&self.syntax)453 }454 pub fn semi_token(&self) -> Option<SyntaxToken> {455 support::token(&self.syntax, T![;])456 }457 pub fn expr(&self) -> Option<Expr> {458 support::child(&self.syntax)459 }460}461462#[derive(Debug, Clone, PartialEq, Eq, Hash)]463pub struct Assertion {464 pub(crate) syntax: SyntaxNode,465}466impl Assertion {467 pub fn assert_kw_token(&self) -> Option<SyntaxToken> {468 support::token(&self.syntax, T![assert])469 }470 pub fn condition(&self) -> Option<LhsExpr> {471 support::child(&self.syntax)472 }473 pub fn colon_token(&self) -> Option<SyntaxToken> {474 support::token(&self.syntax, T![:])475 }476 pub fn message(&self) -> Option<Expr> {477 support::child(&self.syntax)478 }479}480481#[derive(Debug, Clone, PartialEq, Eq, Hash)]482pub struct ExprError {483 pub(crate) syntax: SyntaxNode,484}485impl ExprError {486 pub fn error_kw_token(&self) -> Option<SyntaxToken> {487 support::token(&self.syntax, T![error])488 }489 pub fn expr(&self) -> Option<Expr> {490 support::child(&self.syntax)491 }492}493494#[derive(Debug, Clone, PartialEq, Eq, Hash)]495pub struct SliceDescEnd {496 pub(crate) syntax: SyntaxNode,497}498impl SliceDescEnd {499 pub fn expr(&self) -> Option<Expr> {500 support::child(&self.syntax)501 }502}503504#[derive(Debug, Clone, PartialEq, Eq, Hash)]505pub struct SliceDescStep {506 pub(crate) syntax: SyntaxNode,507}508impl SliceDescStep {509 pub fn expr(&self) -> Option<Expr> {510 support::child(&self.syntax)511 }512}513514#[derive(Debug, Clone, PartialEq, Eq, Hash)]515pub struct Arg {516 pub(crate) syntax: SyntaxNode,517}518impl Arg {519 pub fn name(&self) -> Option<Name> {520 support::child(&self.syntax)521 }522 pub fn assign_token(&self) -> Option<SyntaxToken> {523 support::token(&self.syntax, T![=])524 }525 pub fn expr(&self) -> Option<Expr> {526 support::child(&self.syntax)527 }528}529530#[derive(Debug, Clone, PartialEq, Eq, Hash)]531pub struct ObjBodyComp {532 pub(crate) syntax: SyntaxNode,533}534impl ObjBodyComp {535 pub fn l_brace_token(&self) -> Option<SyntaxToken> {536 support::token(&self.syntax, T!['{'])537 }538 pub fn pre(&self) -> AstChildren<ObjLocalPostComma> {539 support::children(&self.syntax)540 }541 pub fn l_brack_token(&self) -> Option<SyntaxToken> {542 support::token(&self.syntax, T!['['])543 }544 pub fn key(&self) -> Option<LhsExpr> {545 support::child(&self.syntax)546 }547 pub fn r_brack_token(&self) -> Option<SyntaxToken> {548 support::token(&self.syntax, T![']'])549 }550 pub fn plus_token(&self) -> Option<SyntaxToken> {551 support::token(&self.syntax, T![+])552 }553 pub fn colon_token(&self) -> Option<SyntaxToken> {554 support::token(&self.syntax, T![:])555 }556 pub fn value(&self) -> Option<Expr> {557 support::child(&self.syntax)558 }559 pub fn post(&self) -> AstChildren<ObjLocalPreComma> {560 support::children(&self.syntax)561 }562 pub fn comp_specs(&self) -> AstChildren<CompSpec> {563 support::children(&self.syntax)564 }565 pub fn r_brace_token(&self) -> Option<SyntaxToken> {566 support::token(&self.syntax, T!['}'])567 }568}569570#[derive(Debug, Clone, PartialEq, Eq, Hash)]571pub struct ObjLocalPostComma {572 pub(crate) syntax: SyntaxNode,573}574impl ObjLocalPostComma {575 pub fn obj_local(&self) -> Option<ObjLocal> {576 support::child(&self.syntax)577 }578 pub fn comma_token(&self) -> Option<SyntaxToken> {579 support::token(&self.syntax, T![,])580 }581}582583#[derive(Debug, Clone, PartialEq, Eq, Hash)]584pub struct ObjLocalPreComma {585 pub(crate) syntax: SyntaxNode,586}587impl ObjLocalPreComma {588 pub fn comma_token(&self) -> Option<SyntaxToken> {589 support::token(&self.syntax, T![,])590 }591 pub fn obj_local(&self) -> Option<ObjLocal> {592 support::child(&self.syntax)593 }594}595596#[derive(Debug, Clone, PartialEq, Eq, Hash)]597pub struct ObjBodyMemberList {598 pub(crate) syntax: SyntaxNode,599}600impl ObjBodyMemberList {601 pub fn l_brace_token(&self) -> Option<SyntaxToken> {602 support::token(&self.syntax, T!['{'])603 }604 pub fn members(&self) -> AstChildren<Member> {605 support::children(&self.syntax)606 }607 pub fn r_brace_token(&self) -> Option<SyntaxToken> {608 support::token(&self.syntax, T!['}'])609 }610}611612#[derive(Debug, Clone, PartialEq, Eq, Hash)]613pub struct ObjLocal {614 pub(crate) syntax: SyntaxNode,615}616impl ObjLocal {617 pub fn local_kw_token(&self) -> Option<SyntaxToken> {618 support::token(&self.syntax, T![local])619 }620 pub fn bind(&self) -> Option<Bind> {621 support::child(&self.syntax)622 }623}624625#[derive(Debug, Clone, PartialEq, Eq, Hash)]626pub struct MemberBindStmt {627 pub(crate) syntax: SyntaxNode,628}629impl MemberBindStmt {630 pub fn obj_local(&self) -> Option<ObjLocal> {631 support::child(&self.syntax)632 }633}634635#[derive(Debug, Clone, PartialEq, Eq, Hash)]636pub struct MemberAssertStmt {637 pub(crate) syntax: SyntaxNode,638}639impl MemberAssertStmt {640 pub fn assertion(&self) -> Option<Assertion> {641 support::child(&self.syntax)642 }643}644645#[derive(Debug, Clone, PartialEq, Eq, Hash)]646pub struct MemberFieldNormal {647 pub(crate) syntax: SyntaxNode,648}649impl MemberFieldNormal {650 pub fn field_name(&self) -> Option<FieldName> {651 support::child(&self.syntax)652 }653 pub fn plus_token(&self) -> Option<SyntaxToken> {654 support::token(&self.syntax, T![+])655 }656 pub fn visibility(&self) -> Option<Visibility> {657 support::token_child(&self.syntax)658 }659 pub fn expr(&self) -> Option<Expr> {660 support::child(&self.syntax)661 }662}663664#[derive(Debug, Clone, PartialEq, Eq, Hash)]665pub struct MemberFieldMethod {666 pub(crate) syntax: SyntaxNode,667}668impl MemberFieldMethod {669 pub fn field_name(&self) -> Option<FieldName> {670 support::child(&self.syntax)671 }672 pub fn params_desc(&self) -> Option<ParamsDesc> {673 support::child(&self.syntax)674 }675 pub fn visibility(&self) -> Option<Visibility> {676 support::token_child(&self.syntax)677 }678 pub fn expr(&self) -> Option<Expr> {679 support::child(&self.syntax)680 }681}682683#[derive(Debug, Clone, PartialEq, Eq, Hash)]684pub struct FieldNameFixed {685 pub(crate) syntax: SyntaxNode,686}687impl FieldNameFixed {688 pub fn id(&self) -> Option<Name> {689 support::child(&self.syntax)690 }691 pub fn text(&self) -> Option<Text> {692 support::token_child(&self.syntax)693 }694}695696#[derive(Debug, Clone, PartialEq, Eq, Hash)]697pub struct FieldNameDynamic {698 pub(crate) syntax: SyntaxNode,699}700impl FieldNameDynamic {701 pub fn l_brack_token(&self) -> Option<SyntaxToken> {702 support::token(&self.syntax, T!['['])703 }704 pub fn expr(&self) -> Option<Expr> {705 support::child(&self.syntax)706 }707 pub fn r_brack_token(&self) -> Option<SyntaxToken> {708 support::token(&self.syntax, T![']'])709 }710}711712#[derive(Debug, Clone, PartialEq, Eq, Hash)]713pub struct ForSpec {714 pub(crate) syntax: SyntaxNode,715}716impl ForSpec {717 pub fn for_kw_token(&self) -> Option<SyntaxToken> {718 support::token(&self.syntax, T![for])719 }720 pub fn bind(&self) -> Option<Name> {721 support::child(&self.syntax)722 }723 pub fn in_kw_token(&self) -> Option<SyntaxToken> {724 support::token(&self.syntax, T![in])725 }726 pub fn expr(&self) -> Option<Expr> {727 support::child(&self.syntax)728 }729}730731#[derive(Debug, Clone, PartialEq, Eq, Hash)]732pub struct IfSpec {733 pub(crate) syntax: SyntaxNode,734}735impl IfSpec {736 pub fn if_kw_token(&self) -> Option<SyntaxToken> {737 support::token(&self.syntax, T![if])738 }739 pub fn expr(&self) -> Option<Expr> {740 support::child(&self.syntax)741 }742}743744#[derive(Debug, Clone, PartialEq, Eq, Hash)]745pub struct BindDestruct {746 pub(crate) syntax: SyntaxNode,747}748impl BindDestruct {749 pub fn into(&self) -> Option<Destruct> {750 support::child(&self.syntax)751 }752 pub fn assign_token(&self) -> Option<SyntaxToken> {753 support::token(&self.syntax, T![=])754 }755 pub fn value(&self) -> Option<Expr> {756 support::child(&self.syntax)757 }758}759760#[derive(Debug, Clone, PartialEq, Eq, Hash)]761pub struct BindFunction {762 pub(crate) syntax: SyntaxNode,763}764impl BindFunction {765 pub fn name(&self) -> Option<Name> {766 support::child(&self.syntax)767 }768 pub fn params(&self) -> Option<ParamsDesc> {769 support::child(&self.syntax)770 }771 pub fn assign_token(&self) -> Option<SyntaxToken> {772 support::token(&self.syntax, T![=])773 }774 pub fn value(&self) -> Option<Expr> {775 support::child(&self.syntax)776 }777}778779#[derive(Debug, Clone, PartialEq, Eq, Hash)]780pub struct Param {781 pub(crate) syntax: SyntaxNode,782}783impl Param {784 pub fn destruct(&self) -> Option<Destruct> {785 support::child(&self.syntax)786 }787 pub fn assign_token(&self) -> Option<SyntaxToken> {788 support::token(&self.syntax, T![=])789 }790 pub fn expr(&self) -> Option<Expr> {791 support::child(&self.syntax)792 }793}794795#[derive(Debug, Clone, PartialEq, Eq, Hash)]796pub struct DestructFull {797 pub(crate) syntax: SyntaxNode,798}799impl DestructFull {800 pub fn name(&self) -> Option<Name> {801 support::child(&self.syntax)802 }803}804805#[derive(Debug, Clone, PartialEq, Eq, Hash)]806pub struct DestructSkip {807 pub(crate) syntax: SyntaxNode,808}809impl DestructSkip {810 pub fn question_mark_token(&self) -> Option<SyntaxToken> {811 support::token(&self.syntax, T![?])812 }813}814815#[derive(Debug, Clone, PartialEq, Eq, Hash)]816pub struct DestructArray {817 pub(crate) syntax: SyntaxNode,818}819impl DestructArray {820 pub fn l_brack_token(&self) -> Option<SyntaxToken> {821 support::token(&self.syntax, T!['['])822 }823 pub fn destruct_array_parts(&self) -> AstChildren<DestructArrayPart> {824 support::children(&self.syntax)825 }826 pub fn r_brack_token(&self) -> Option<SyntaxToken> {827 support::token(&self.syntax, T![']'])828 }829}830831#[derive(Debug, Clone, PartialEq, Eq, Hash)]832pub struct DestructObject {833 pub(crate) syntax: SyntaxNode,834}835impl DestructObject {836 pub fn l_brace_token(&self) -> Option<SyntaxToken> {837 support::token(&self.syntax, T!['{'])838 }839 pub fn destruct_object_fields(&self) -> AstChildren<DestructObjectField> {840 support::children(&self.syntax)841 }842 pub fn destruct_rest(&self) -> Option<DestructRest> {843 support::child(&self.syntax)844 }845 pub fn comma_token(&self) -> Option<SyntaxToken> {846 support::token(&self.syntax, T![,])847 }848 pub fn r_brace_token(&self) -> Option<SyntaxToken> {849 support::token(&self.syntax, T!['}'])850 }851}852853#[derive(Debug, Clone, PartialEq, Eq, Hash)]854pub struct DestructObjectField {855 pub(crate) syntax: SyntaxNode,856}857impl DestructObjectField {858 pub fn field(&self) -> Option<Name> {859 support::child(&self.syntax)860 }861 pub fn colon_token(&self) -> Option<SyntaxToken> {862 support::token(&self.syntax, T![:])863 }864 pub fn destruct(&self) -> Option<Destruct> {865 support::child(&self.syntax)866 }867 pub fn assign_token(&self) -> Option<SyntaxToken> {868 support::token(&self.syntax, T![=])869 }870 pub fn expr(&self) -> Option<Expr> {871 support::child(&self.syntax)872 }873}874875#[derive(Debug, Clone, PartialEq, Eq, Hash)]876pub struct DestructRest {877 pub(crate) syntax: SyntaxNode,878}879impl DestructRest {880 pub fn dotdotdot_token(&self) -> Option<SyntaxToken> {881 support::token(&self.syntax, T![...])882 }883 pub fn into(&self) -> Option<Name> {884 support::child(&self.syntax)885 }886}887888#[derive(Debug, Clone, PartialEq, Eq, Hash)]889pub struct DestructArrayElement {890 pub(crate) syntax: SyntaxNode,891}892impl DestructArrayElement {893 pub fn destruct(&self) -> Option<Destruct> {894 support::child(&self.syntax)895 }896}897898#[derive(Debug, Clone, PartialEq, Eq, Hash)]899pub enum Expr {900 ExprBinary(ExprBinary),901 ExprUnary(ExprUnary),902 ExprSlice(ExprSlice),903 ExprIndex(ExprIndex),904 ExprIndexExpr(ExprIndexExpr),905 ExprApply(ExprApply),906 ExprObjExtend(ExprObjExtend),907 ExprParened(ExprParened),908 ExprIntrinsicThisFile(ExprIntrinsicThisFile),909 ExprIntrinsicId(ExprIntrinsicId),910 ExprIntrinsic(ExprIntrinsic),911 ExprString(ExprString),912 ExprNumber(ExprNumber),913 ExprLiteral(ExprLiteral),914 ExprArray(ExprArray),915 ExprObject(ExprObject),916 ExprArrayComp(ExprArrayComp),917 ExprImport(ExprImport),918 ExprVar(ExprVar),919 ExprLocal(ExprLocal),920 ExprIfThenElse(ExprIfThenElse),921 ExprFunction(ExprFunction),922 ExprAssert(ExprAssert),923 ExprError(ExprError),924}925926#[derive(Debug, Clone, PartialEq, Eq, Hash)]927pub enum ObjBody {928 ObjBodyComp(ObjBodyComp),929 ObjBodyMemberList(ObjBodyMemberList),930}931932#[derive(Debug, Clone, PartialEq, Eq, Hash)]933pub enum CompSpec {934 ForSpec(ForSpec),935 IfSpec(IfSpec),936}937938#[derive(Debug, Clone, PartialEq, Eq, Hash)]939pub enum Bind {940 BindDestruct(BindDestruct),941 BindFunction(BindFunction),942}943944#[derive(Debug, Clone, PartialEq, Eq, Hash)]945pub enum Member {946 MemberBindStmt(MemberBindStmt),947 MemberAssertStmt(MemberAssertStmt),948 MemberFieldNormal(MemberFieldNormal),949 MemberFieldMethod(MemberFieldMethod),950}951952#[derive(Debug, Clone, PartialEq, Eq, Hash)]953pub enum FieldName {954 FieldNameFixed(FieldNameFixed),955 FieldNameDynamic(FieldNameDynamic),956}957958#[derive(Debug, Clone, PartialEq, Eq, Hash)]959pub enum Destruct {960 DestructFull(DestructFull),961 DestructSkip(DestructSkip),962 DestructArray(DestructArray),963 DestructObject(DestructObject),964}965966#[derive(Debug, Clone, PartialEq, Eq, Hash)]967pub enum DestructArrayPart {968 DestructArrayElement(DestructArrayElement),969 DestructRest(DestructRest),970}971972#[derive(Debug, Clone, PartialEq, Eq, Hash)]973pub struct BinaryOperator {974 syntax: SyntaxToken,975 kind: BinaryOperatorKind,976}977978#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]979pub enum BinaryOperatorKind {980 Or,981 And,982 BitOr,983 BitXor,984 BitAnd,985 Eq,986 Ne,987 Lt,988 Gt,989 Le,990 Ge,991 InKw,992 Lhs,993 Rhs,994 Plus,995 Minus,996 Mul,997 Div,998 Modulo,999 MetaObjectApply,1000 ErrorNoOperator,1001}10021003#[derive(Debug, Clone, PartialEq, Eq, Hash)]1004pub struct UnaryOperator {1005 syntax: SyntaxToken,1006 kind: UnaryOperatorKind,1007}10081009#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1010pub enum UnaryOperatorKind {1011 Minus,1012 Not,1013 BitNot,1014}10151016#[derive(Debug, Clone, PartialEq, Eq, Hash)]1017pub struct Literal {1018 syntax: SyntaxToken,1019 kind: LiteralKind,1020}10211022#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1023pub enum LiteralKind {1024 NullKw,1025 TrueKw,1026 FalseKw,1027 SelfKw,1028 Dollar,1029 SuperKw,1030}10311032#[derive(Debug, Clone, PartialEq, Eq, Hash)]1033pub struct Text {1034 syntax: SyntaxToken,1035 kind: TextKind,1036}10371038#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1039pub enum TextKind {1040 StringDouble,1041 ErrorStringDoubleUnterminated,1042 StringSingle,1043 ErrorStringSingleUnterminated,1044 StringDoubleVerbatim,1045 ErrorStringDoubleVerbatimUnterminated,1046 StringSingleVerbatim,1047 ErrorStringSingleVerbatimUnterminated,1048 ErrorStringVerbatimMissingQuotes,1049 StringBlock,1050 ErrorStringBlockUnexpectedEnd,1051 ErrorStringBlockMissingNewLine,1052 ErrorStringBlockMissingTermination,1053 ErrorStringBlockMissingIndent,1054}10551056#[derive(Debug, Clone, PartialEq, Eq, Hash)]1057pub struct Number {1058 syntax: SyntaxToken,1059 kind: NumberKind,1060}10611062#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1063pub enum NumberKind {1064 Float,1065 ErrorFloatJunkAfterPoint,1066 ErrorFloatJunkAfterExponent,1067 ErrorFloatJunkAfterExponentSign,1068}10691070#[derive(Debug, Clone, PartialEq, Eq, Hash)]1071pub struct ImportKind {1072 syntax: SyntaxToken,1073 kind: ImportKindKind,1074}10751076#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1077pub enum ImportKindKind {1078 ImportstrKw,1079 ImportbinKw,1080 ImportKw,1081}10821083#[derive(Debug, Clone, PartialEq, Eq, Hash)]1084pub struct Visibility {1085 syntax: SyntaxToken,1086 kind: VisibilityKind,1087}10881089#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1090pub enum VisibilityKind {1091 Coloncoloncolon,1092 Coloncolon,1093 Colon,1094}10951096#[derive(Debug, Clone, PartialEq, Eq, Hash)]1097pub struct Trivia {1098 syntax: SyntaxToken,1099 kind: TriviaKind,1100}11011102#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1103pub enum TriviaKind {1104 Whitespace,1105 MultiLineComment,1106 ErrorCommentTooShort,1107 ErrorCommentUnterminated,1108 SingleLineHashComment,1109 SingleLineSlashComment,1110}11111112#[derive(Debug, Clone, PartialEq, Eq, Hash)]1113pub struct ParsingError {1114 syntax: SyntaxToken,1115 kind: ParsingErrorKind,1116}11171118#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1119pub enum ParsingErrorKind {1120 ErrorMissingToken,1121 ErrorUnexpectedToken,1122 ErrorCustom,1123}1124impl AstNode for SourceFile {1125 fn can_cast(kind: SyntaxKind) -> bool {1126 kind == SOURCE_FILE1127 }1128 fn cast(syntax: SyntaxNode) -> Option<Self> {1129 if Self::can_cast(syntax.kind()) {1130 Some(Self { syntax })1131 } else {1132 None1133 }1134 }1135 fn syntax(&self) -> &SyntaxNode {1136 &self.syntax1137 }1138}1139impl AstNode for ExprBinary {1140 fn can_cast(kind: SyntaxKind) -> bool {1141 kind == EXPR_BINARY1142 }1143 fn cast(syntax: SyntaxNode) -> Option<Self> {1144 if Self::can_cast(syntax.kind()) {1145 Some(Self { syntax })1146 } else {1147 None1148 }1149 }1150 fn syntax(&self) -> &SyntaxNode {1151 &self.syntax1152 }1153}1154impl AstNode for LhsExpr {1155 fn can_cast(kind: SyntaxKind) -> bool {1156 kind == LHS_EXPR1157 }1158 fn cast(syntax: SyntaxNode) -> Option<Self> {1159 if Self::can_cast(syntax.kind()) {1160 Some(Self { syntax })1161 } else {1162 None1163 }1164 }1165 fn syntax(&self) -> &SyntaxNode {1166 &self.syntax1167 }1168}1169impl AstNode for ExprUnary {1170 fn can_cast(kind: SyntaxKind) -> bool {1171 kind == EXPR_UNARY1172 }1173 fn cast(syntax: SyntaxNode) -> Option<Self> {1174 if Self::can_cast(syntax.kind()) {1175 Some(Self { syntax })1176 } else {1177 None1178 }1179 }1180 fn syntax(&self) -> &SyntaxNode {1181 &self.syntax1182 }1183}1184impl AstNode for ExprSlice {1185 fn can_cast(kind: SyntaxKind) -> bool {1186 kind == EXPR_SLICE1187 }1188 fn cast(syntax: SyntaxNode) -> Option<Self> {1189 if Self::can_cast(syntax.kind()) {1190 Some(Self { syntax })1191 } else {1192 None1193 }1194 }1195 fn syntax(&self) -> &SyntaxNode {1196 &self.syntax1197 }1198}1199impl AstNode for SliceDesc {1200 fn can_cast(kind: SyntaxKind) -> bool {1201 kind == SLICE_DESC1202 }1203 fn cast(syntax: SyntaxNode) -> Option<Self> {1204 if Self::can_cast(syntax.kind()) {1205 Some(Self { syntax })1206 } else {1207 None1208 }1209 }1210 fn syntax(&self) -> &SyntaxNode {1211 &self.syntax1212 }1213}1214impl AstNode for ExprIndex {1215 fn can_cast(kind: SyntaxKind) -> bool {1216 kind == EXPR_INDEX1217 }1218 fn cast(syntax: SyntaxNode) -> Option<Self> {1219 if Self::can_cast(syntax.kind()) {1220 Some(Self { syntax })1221 } else {1222 None1223 }1224 }1225 fn syntax(&self) -> &SyntaxNode {1226 &self.syntax1227 }1228}1229impl AstNode for Name {1230 fn can_cast(kind: SyntaxKind) -> bool {1231 kind == NAME1232 }1233 fn cast(syntax: SyntaxNode) -> Option<Self> {1234 if Self::can_cast(syntax.kind()) {1235 Some(Self { syntax })1236 } else {1237 None1238 }1239 }1240 fn syntax(&self) -> &SyntaxNode {1241 &self.syntax1242 }1243}1244impl AstNode for ExprIndexExpr {1245 fn can_cast(kind: SyntaxKind) -> bool {1246 kind == EXPR_INDEX_EXPR1247 }1248 fn cast(syntax: SyntaxNode) -> Option<Self> {1249 if Self::can_cast(syntax.kind()) {1250 Some(Self { syntax })1251 } else {1252 None1253 }1254 }1255 fn syntax(&self) -> &SyntaxNode {1256 &self.syntax1257 }1258}1259impl AstNode for ExprApply {1260 fn can_cast(kind: SyntaxKind) -> bool {1261 kind == EXPR_APPLY1262 }1263 fn cast(syntax: SyntaxNode) -> Option<Self> {1264 if Self::can_cast(syntax.kind()) {1265 Some(Self { syntax })1266 } else {1267 None1268 }1269 }1270 fn syntax(&self) -> &SyntaxNode {1271 &self.syntax1272 }1273}1274impl AstNode for ArgsDesc {1275 fn can_cast(kind: SyntaxKind) -> bool {1276 kind == ARGS_DESC1277 }1278 fn cast(syntax: SyntaxNode) -> Option<Self> {1279 if Self::can_cast(syntax.kind()) {1280 Some(Self { syntax })1281 } else {1282 None1283 }1284 }1285 fn syntax(&self) -> &SyntaxNode {1286 &self.syntax1287 }1288}1289impl AstNode for ExprObjExtend {1290 fn can_cast(kind: SyntaxKind) -> bool {1291 kind == EXPR_OBJ_EXTEND1292 }1293 fn cast(syntax: SyntaxNode) -> Option<Self> {1294 if Self::can_cast(syntax.kind()) {1295 Some(Self { syntax })1296 } else {1297 None1298 }1299 }1300 fn syntax(&self) -> &SyntaxNode {1301 &self.syntax1302 }1303}1304impl AstNode for ExprParened {1305 fn can_cast(kind: SyntaxKind) -> bool {1306 kind == EXPR_PARENED1307 }1308 fn cast(syntax: SyntaxNode) -> Option<Self> {1309 if Self::can_cast(syntax.kind()) {1310 Some(Self { syntax })1311 } else {1312 None1313 }1314 }1315 fn syntax(&self) -> &SyntaxNode {1316 &self.syntax1317 }1318}1319impl AstNode for ExprLiteral {1320 fn can_cast(kind: SyntaxKind) -> bool {1321 kind == EXPR_LITERAL1322 }1323 fn cast(syntax: SyntaxNode) -> Option<Self> {1324 if Self::can_cast(syntax.kind()) {1325 Some(Self { syntax })1326 } else {1327 None1328 }1329 }1330 fn syntax(&self) -> &SyntaxNode {1331 &self.syntax1332 }1333}1334impl AstNode for ExprIntrinsicThisFile {1335 fn can_cast(kind: SyntaxKind) -> bool {1336 kind == EXPR_INTRINSIC_THIS_FILE1337 }1338 fn cast(syntax: SyntaxNode) -> Option<Self> {1339 if Self::can_cast(syntax.kind()) {1340 Some(Self { syntax })1341 } else {1342 None1343 }1344 }1345 fn syntax(&self) -> &SyntaxNode {1346 &self.syntax1347 }1348}1349impl AstNode for ExprIntrinsicId {1350 fn can_cast(kind: SyntaxKind) -> bool {1351 kind == EXPR_INTRINSIC_ID1352 }1353 fn cast(syntax: SyntaxNode) -> Option<Self> {1354 if Self::can_cast(syntax.kind()) {1355 Some(Self { syntax })1356 } else {1357 None1358 }1359 }1360 fn syntax(&self) -> &SyntaxNode {1361 &self.syntax1362 }1363}1364impl AstNode for ExprIntrinsic {1365 fn can_cast(kind: SyntaxKind) -> bool {1366 kind == EXPR_INTRINSIC1367 }1368 fn cast(syntax: SyntaxNode) -> Option<Self> {1369 if Self::can_cast(syntax.kind()) {1370 Some(Self { syntax })1371 } else {1372 None1373 }1374 }1375 fn syntax(&self) -> &SyntaxNode {1376 &self.syntax1377 }1378}1379impl AstNode for ExprString {1380 fn can_cast(kind: SyntaxKind) -> bool {1381 kind == EXPR_STRING1382 }1383 fn cast(syntax: SyntaxNode) -> Option<Self> {1384 if Self::can_cast(syntax.kind()) {1385 Some(Self { syntax })1386 } else {1387 None1388 }1389 }1390 fn syntax(&self) -> &SyntaxNode {1391 &self.syntax1392 }1393}1394impl AstNode for ExprNumber {1395 fn can_cast(kind: SyntaxKind) -> bool {1396 kind == EXPR_NUMBER1397 }1398 fn cast(syntax: SyntaxNode) -> Option<Self> {1399 if Self::can_cast(syntax.kind()) {1400 Some(Self { syntax })1401 } else {1402 None1403 }1404 }1405 fn syntax(&self) -> &SyntaxNode {1406 &self.syntax1407 }1408}1409impl AstNode for ExprArray {1410 fn can_cast(kind: SyntaxKind) -> bool {1411 kind == EXPR_ARRAY1412 }1413 fn cast(syntax: SyntaxNode) -> Option<Self> {1414 if Self::can_cast(syntax.kind()) {1415 Some(Self { syntax })1416 } else {1417 None1418 }1419 }1420 fn syntax(&self) -> &SyntaxNode {1421 &self.syntax1422 }1423}1424impl AstNode for ExprObject {1425 fn can_cast(kind: SyntaxKind) -> bool {1426 kind == EXPR_OBJECT1427 }1428 fn cast(syntax: SyntaxNode) -> Option<Self> {1429 if Self::can_cast(syntax.kind()) {1430 Some(Self { syntax })1431 } else {1432 None1433 }1434 }1435 fn syntax(&self) -> &SyntaxNode {1436 &self.syntax1437 }1438}1439impl AstNode for ExprArrayComp {1440 fn can_cast(kind: SyntaxKind) -> bool {1441 kind == EXPR_ARRAY_COMP1442 }1443 fn cast(syntax: SyntaxNode) -> Option<Self> {1444 if Self::can_cast(syntax.kind()) {1445 Some(Self { syntax })1446 } else {1447 None1448 }1449 }1450 fn syntax(&self) -> &SyntaxNode {1451 &self.syntax1452 }1453}1454impl AstNode for ExprImport {1455 fn can_cast(kind: SyntaxKind) -> bool {1456 kind == EXPR_IMPORT1457 }1458 fn cast(syntax: SyntaxNode) -> Option<Self> {1459 if Self::can_cast(syntax.kind()) {1460 Some(Self { syntax })1461 } else {1462 None1463 }1464 }1465 fn syntax(&self) -> &SyntaxNode {1466 &self.syntax1467 }1468}1469impl AstNode for ExprVar {1470 fn can_cast(kind: SyntaxKind) -> bool {1471 kind == EXPR_VAR1472 }1473 fn cast(syntax: SyntaxNode) -> Option<Self> {1474 if Self::can_cast(syntax.kind()) {1475 Some(Self { syntax })1476 } else {1477 None1478 }1479 }1480 fn syntax(&self) -> &SyntaxNode {1481 &self.syntax1482 }1483}1484impl AstNode for ExprLocal {1485 fn can_cast(kind: SyntaxKind) -> bool {1486 kind == EXPR_LOCAL1487 }1488 fn cast(syntax: SyntaxNode) -> Option<Self> {1489 if Self::can_cast(syntax.kind()) {1490 Some(Self { syntax })1491 } else {1492 None1493 }1494 }1495 fn syntax(&self) -> &SyntaxNode {1496 &self.syntax1497 }1498}1499impl AstNode for ExprIfThenElse {1500 fn can_cast(kind: SyntaxKind) -> bool {1501 kind == EXPR_IF_THEN_ELSE1502 }1503 fn cast(syntax: SyntaxNode) -> Option<Self> {1504 if Self::can_cast(syntax.kind()) {1505 Some(Self { syntax })1506 } else {1507 None1508 }1509 }1510 fn syntax(&self) -> &SyntaxNode {1511 &self.syntax1512 }1513}1514impl AstNode for TrueExpr {1515 fn can_cast(kind: SyntaxKind) -> bool {1516 kind == TRUE_EXPR1517 }1518 fn cast(syntax: SyntaxNode) -> Option<Self> {1519 if Self::can_cast(syntax.kind()) {1520 Some(Self { syntax })1521 } else {1522 None1523 }1524 }1525 fn syntax(&self) -> &SyntaxNode {1526 &self.syntax1527 }1528}1529impl AstNode for FalseExpr {1530 fn can_cast(kind: SyntaxKind) -> bool {1531 kind == FALSE_EXPR1532 }1533 fn cast(syntax: SyntaxNode) -> Option<Self> {1534 if Self::can_cast(syntax.kind()) {1535 Some(Self { syntax })1536 } else {1537 None1538 }1539 }1540 fn syntax(&self) -> &SyntaxNode {1541 &self.syntax1542 }1543}1544impl AstNode for ExprFunction {1545 fn can_cast(kind: SyntaxKind) -> bool {1546 kind == EXPR_FUNCTION1547 }1548 fn cast(syntax: SyntaxNode) -> Option<Self> {1549 if Self::can_cast(syntax.kind()) {1550 Some(Self { syntax })1551 } else {1552 None1553 }1554 }1555 fn syntax(&self) -> &SyntaxNode {1556 &self.syntax1557 }1558}1559impl AstNode for ParamsDesc {1560 fn can_cast(kind: SyntaxKind) -> bool {1561 kind == PARAMS_DESC1562 }1563 fn cast(syntax: SyntaxNode) -> Option<Self> {1564 if Self::can_cast(syntax.kind()) {1565 Some(Self { syntax })1566 } else {1567 None1568 }1569 }1570 fn syntax(&self) -> &SyntaxNode {1571 &self.syntax1572 }1573}1574impl AstNode for ExprAssert {1575 fn can_cast(kind: SyntaxKind) -> bool {1576 kind == EXPR_ASSERT1577 }1578 fn cast(syntax: SyntaxNode) -> Option<Self> {1579 if Self::can_cast(syntax.kind()) {1580 Some(Self { syntax })1581 } else {1582 None1583 }1584 }1585 fn syntax(&self) -> &SyntaxNode {1586 &self.syntax1587 }1588}1589impl AstNode for Assertion {1590 fn can_cast(kind: SyntaxKind) -> bool {1591 kind == ASSERTION1592 }1593 fn cast(syntax: SyntaxNode) -> Option<Self> {1594 if Self::can_cast(syntax.kind()) {1595 Some(Self { syntax })1596 } else {1597 None1598 }1599 }1600 fn syntax(&self) -> &SyntaxNode {1601 &self.syntax1602 }1603}1604impl AstNode for ExprError {1605 fn can_cast(kind: SyntaxKind) -> bool {1606 kind == EXPR_ERROR1607 }1608 fn cast(syntax: SyntaxNode) -> Option<Self> {1609 if Self::can_cast(syntax.kind()) {1610 Some(Self { syntax })1611 } else {1612 None1613 }1614 }1615 fn syntax(&self) -> &SyntaxNode {1616 &self.syntax1617 }1618}1619impl AstNode for SliceDescEnd {1620 fn can_cast(kind: SyntaxKind) -> bool {1621 kind == SLICE_DESC_END1622 }1623 fn cast(syntax: SyntaxNode) -> Option<Self> {1624 if Self::can_cast(syntax.kind()) {1625 Some(Self { syntax })1626 } else {1627 None1628 }1629 }1630 fn syntax(&self) -> &SyntaxNode {1631 &self.syntax1632 }1633}1634impl AstNode for SliceDescStep {1635 fn can_cast(kind: SyntaxKind) -> bool {1636 kind == SLICE_DESC_STEP1637 }1638 fn cast(syntax: SyntaxNode) -> Option<Self> {1639 if Self::can_cast(syntax.kind()) {1640 Some(Self { syntax })1641 } else {1642 None1643 }1644 }1645 fn syntax(&self) -> &SyntaxNode {1646 &self.syntax1647 }1648}1649impl AstNode for Arg {1650 fn can_cast(kind: SyntaxKind) -> bool {1651 kind == ARG1652 }1653 fn cast(syntax: SyntaxNode) -> Option<Self> {1654 if Self::can_cast(syntax.kind()) {1655 Some(Self { syntax })1656 } else {1657 None1658 }1659 }1660 fn syntax(&self) -> &SyntaxNode {1661 &self.syntax1662 }1663}1664impl AstNode for ObjBodyComp {1665 fn can_cast(kind: SyntaxKind) -> bool {1666 kind == OBJ_BODY_COMP1667 }1668 fn cast(syntax: SyntaxNode) -> Option<Self> {1669 if Self::can_cast(syntax.kind()) {1670 Some(Self { syntax })1671 } else {1672 None1673 }1674 }1675 fn syntax(&self) -> &SyntaxNode {1676 &self.syntax1677 }1678}1679impl AstNode for ObjLocalPostComma {1680 fn can_cast(kind: SyntaxKind) -> bool {1681 kind == OBJ_LOCAL_POST_COMMA1682 }1683 fn cast(syntax: SyntaxNode) -> Option<Self> {1684 if Self::can_cast(syntax.kind()) {1685 Some(Self { syntax })1686 } else {1687 None1688 }1689 }1690 fn syntax(&self) -> &SyntaxNode {1691 &self.syntax1692 }1693}1694impl AstNode for ObjLocalPreComma {1695 fn can_cast(kind: SyntaxKind) -> bool {1696 kind == OBJ_LOCAL_PRE_COMMA1697 }1698 fn cast(syntax: SyntaxNode) -> Option<Self> {1699 if Self::can_cast(syntax.kind()) {1700 Some(Self { syntax })1701 } else {1702 None1703 }1704 }1705 fn syntax(&self) -> &SyntaxNode {1706 &self.syntax1707 }1708}1709impl AstNode for ObjBodyMemberList {1710 fn can_cast(kind: SyntaxKind) -> bool {1711 kind == OBJ_BODY_MEMBER_LIST1712 }1713 fn cast(syntax: SyntaxNode) -> Option<Self> {1714 if Self::can_cast(syntax.kind()) {1715 Some(Self { syntax })1716 } else {1717 None1718 }1719 }1720 fn syntax(&self) -> &SyntaxNode {1721 &self.syntax1722 }1723}1724impl AstNode for ObjLocal {1725 fn can_cast(kind: SyntaxKind) -> bool {1726 kind == OBJ_LOCAL1727 }1728 fn cast(syntax: SyntaxNode) -> Option<Self> {1729 if Self::can_cast(syntax.kind()) {1730 Some(Self { syntax })1731 } else {1732 None1733 }1734 }1735 fn syntax(&self) -> &SyntaxNode {1736 &self.syntax1737 }1738}1739impl AstNode for MemberBindStmt {1740 fn can_cast(kind: SyntaxKind) -> bool {1741 kind == MEMBER_BIND_STMT1742 }1743 fn cast(syntax: SyntaxNode) -> Option<Self> {1744 if Self::can_cast(syntax.kind()) {1745 Some(Self { syntax })1746 } else {1747 None1748 }1749 }1750 fn syntax(&self) -> &SyntaxNode {1751 &self.syntax1752 }1753}1754impl AstNode for MemberAssertStmt {1755 fn can_cast(kind: SyntaxKind) -> bool {1756 kind == MEMBER_ASSERT_STMT1757 }1758 fn cast(syntax: SyntaxNode) -> Option<Self> {1759 if Self::can_cast(syntax.kind()) {1760 Some(Self { syntax })1761 } else {1762 None1763 }1764 }1765 fn syntax(&self) -> &SyntaxNode {1766 &self.syntax1767 }1768}1769impl AstNode for MemberFieldNormal {1770 fn can_cast(kind: SyntaxKind) -> bool {1771 kind == MEMBER_FIELD_NORMAL1772 }1773 fn cast(syntax: SyntaxNode) -> Option<Self> {1774 if Self::can_cast(syntax.kind()) {1775 Some(Self { syntax })1776 } else {1777 None1778 }1779 }1780 fn syntax(&self) -> &SyntaxNode {1781 &self.syntax1782 }1783}1784impl AstNode for MemberFieldMethod {1785 fn can_cast(kind: SyntaxKind) -> bool {1786 kind == MEMBER_FIELD_METHOD1787 }1788 fn cast(syntax: SyntaxNode) -> Option<Self> {1789 if Self::can_cast(syntax.kind()) {1790 Some(Self { syntax })1791 } else {1792 None1793 }1794 }1795 fn syntax(&self) -> &SyntaxNode {1796 &self.syntax1797 }1798}1799impl AstNode for FieldNameFixed {1800 fn can_cast(kind: SyntaxKind) -> bool {1801 kind == FIELD_NAME_FIXED1802 }1803 fn cast(syntax: SyntaxNode) -> Option<Self> {1804 if Self::can_cast(syntax.kind()) {1805 Some(Self { syntax })1806 } else {1807 None1808 }1809 }1810 fn syntax(&self) -> &SyntaxNode {1811 &self.syntax1812 }1813}1814impl AstNode for FieldNameDynamic {1815 fn can_cast(kind: SyntaxKind) -> bool {1816 kind == FIELD_NAME_DYNAMIC1817 }1818 fn cast(syntax: SyntaxNode) -> Option<Self> {1819 if Self::can_cast(syntax.kind()) {1820 Some(Self { syntax })1821 } else {1822 None1823 }1824 }1825 fn syntax(&self) -> &SyntaxNode {1826 &self.syntax1827 }1828}1829impl AstNode for ForSpec {1830 fn can_cast(kind: SyntaxKind) -> bool {1831 kind == FOR_SPEC1832 }1833 fn cast(syntax: SyntaxNode) -> Option<Self> {1834 if Self::can_cast(syntax.kind()) {1835 Some(Self { syntax })1836 } else {1837 None1838 }1839 }1840 fn syntax(&self) -> &SyntaxNode {1841 &self.syntax1842 }1843}1844impl AstNode for IfSpec {1845 fn can_cast(kind: SyntaxKind) -> bool {1846 kind == IF_SPEC1847 }1848 fn cast(syntax: SyntaxNode) -> Option<Self> {1849 if Self::can_cast(syntax.kind()) {1850 Some(Self { syntax })1851 } else {1852 None1853 }1854 }1855 fn syntax(&self) -> &SyntaxNode {1856 &self.syntax1857 }1858}1859impl AstNode for BindDestruct {1860 fn can_cast(kind: SyntaxKind) -> bool {1861 kind == BIND_DESTRUCT1862 }1863 fn cast(syntax: SyntaxNode) -> Option<Self> {1864 if Self::can_cast(syntax.kind()) {1865 Some(Self { syntax })1866 } else {1867 None1868 }1869 }1870 fn syntax(&self) -> &SyntaxNode {1871 &self.syntax1872 }1873}1874impl AstNode for BindFunction {1875 fn can_cast(kind: SyntaxKind) -> bool {1876 kind == BIND_FUNCTION1877 }1878 fn cast(syntax: SyntaxNode) -> Option<Self> {1879 if Self::can_cast(syntax.kind()) {1880 Some(Self { syntax })1881 } else {1882 None1883 }1884 }1885 fn syntax(&self) -> &SyntaxNode {1886 &self.syntax1887 }1888}1889impl AstNode for Param {1890 fn can_cast(kind: SyntaxKind) -> bool {1891 kind == PARAM1892 }1893 fn cast(syntax: SyntaxNode) -> Option<Self> {1894 if Self::can_cast(syntax.kind()) {1895 Some(Self { syntax })1896 } else {1897 None1898 }1899 }1900 fn syntax(&self) -> &SyntaxNode {1901 &self.syntax1902 }1903}1904impl AstNode for DestructFull {1905 fn can_cast(kind: SyntaxKind) -> bool {1906 kind == DESTRUCT_FULL1907 }1908 fn cast(syntax: SyntaxNode) -> Option<Self> {1909 if Self::can_cast(syntax.kind()) {1910 Some(Self { syntax })1911 } else {1912 None1913 }1914 }1915 fn syntax(&self) -> &SyntaxNode {1916 &self.syntax1917 }1918}1919impl AstNode for DestructSkip {1920 fn can_cast(kind: SyntaxKind) -> bool {1921 kind == DESTRUCT_SKIP1922 }1923 fn cast(syntax: SyntaxNode) -> Option<Self> {1924 if Self::can_cast(syntax.kind()) {1925 Some(Self { syntax })1926 } else {1927 None1928 }1929 }1930 fn syntax(&self) -> &SyntaxNode {1931 &self.syntax1932 }1933}1934impl AstNode for DestructArray {1935 fn can_cast(kind: SyntaxKind) -> bool {1936 kind == DESTRUCT_ARRAY1937 }1938 fn cast(syntax: SyntaxNode) -> Option<Self> {1939 if Self::can_cast(syntax.kind()) {1940 Some(Self { syntax })1941 } else {1942 None1943 }1944 }1945 fn syntax(&self) -> &SyntaxNode {1946 &self.syntax1947 }1948}1949impl AstNode for DestructObject {1950 fn can_cast(kind: SyntaxKind) -> bool {1951 kind == DESTRUCT_OBJECT1952 }1953 fn cast(syntax: SyntaxNode) -> Option<Self> {1954 if Self::can_cast(syntax.kind()) {1955 Some(Self { syntax })1956 } else {1957 None1958 }1959 }1960 fn syntax(&self) -> &SyntaxNode {1961 &self.syntax1962 }1963}1964impl AstNode for DestructObjectField {1965 fn can_cast(kind: SyntaxKind) -> bool {1966 kind == DESTRUCT_OBJECT_FIELD1967 }1968 fn cast(syntax: SyntaxNode) -> Option<Self> {1969 if Self::can_cast(syntax.kind()) {1970 Some(Self { syntax })1971 } else {1972 None1973 }1974 }1975 fn syntax(&self) -> &SyntaxNode {1976 &self.syntax1977 }1978}1979impl AstNode for DestructRest {1980 fn can_cast(kind: SyntaxKind) -> bool {1981 kind == DESTRUCT_REST1982 }1983 fn cast(syntax: SyntaxNode) -> Option<Self> {1984 if Self::can_cast(syntax.kind()) {1985 Some(Self { syntax })1986 } else {1987 None1988 }1989 }1990 fn syntax(&self) -> &SyntaxNode {1991 &self.syntax1992 }1993}1994impl AstNode for DestructArrayElement {1995 fn can_cast(kind: SyntaxKind) -> bool {1996 kind == DESTRUCT_ARRAY_ELEMENT1997 }1998 fn cast(syntax: SyntaxNode) -> Option<Self> {1999 if Self::can_cast(syntax.kind()) {2000 Some(Self { syntax })2001 } else {2002 None2003 }2004 }2005 fn syntax(&self) -> &SyntaxNode {2006 &self.syntax2007 }2008}2009impl From<ExprBinary> for Expr {2010 fn from(node: ExprBinary) -> Expr {2011 Expr::ExprBinary(node)2012 }2013}2014impl From<ExprUnary> for Expr {2015 fn from(node: ExprUnary) -> Expr {2016 Expr::ExprUnary(node)2017 }2018}2019impl From<ExprSlice> for Expr {2020 fn from(node: ExprSlice) -> Expr {2021 Expr::ExprSlice(node)2022 }2023}2024impl From<ExprIndex> for Expr {2025 fn from(node: ExprIndex) -> Expr {2026 Expr::ExprIndex(node)2027 }2028}2029impl From<ExprIndexExpr> for Expr {2030 fn from(node: ExprIndexExpr) -> Expr {2031 Expr::ExprIndexExpr(node)2032 }2033}2034impl From<ExprApply> for Expr {2035 fn from(node: ExprApply) -> Expr {2036 Expr::ExprApply(node)2037 }2038}2039impl From<ExprObjExtend> for Expr {2040 fn from(node: ExprObjExtend) -> Expr {2041 Expr::ExprObjExtend(node)2042 }2043}2044impl From<ExprParened> for Expr {2045 fn from(node: ExprParened) -> Expr {2046 Expr::ExprParened(node)2047 }2048}2049impl From<ExprIntrinsicThisFile> for Expr {2050 fn from(node: ExprIntrinsicThisFile) -> Expr {2051 Expr::ExprIntrinsicThisFile(node)2052 }2053}2054impl From<ExprIntrinsicId> for Expr {2055 fn from(node: ExprIntrinsicId) -> Expr {2056 Expr::ExprIntrinsicId(node)2057 }2058}2059impl From<ExprIntrinsic> for Expr {2060 fn from(node: ExprIntrinsic) -> Expr {2061 Expr::ExprIntrinsic(node)2062 }2063}2064impl From<ExprString> for Expr {2065 fn from(node: ExprString) -> Expr {2066 Expr::ExprString(node)2067 }2068}2069impl From<ExprNumber> for Expr {2070 fn from(node: ExprNumber) -> Expr {2071 Expr::ExprNumber(node)2072 }2073}2074impl From<ExprLiteral> for Expr {2075 fn from(node: ExprLiteral) -> Expr {2076 Expr::ExprLiteral(node)2077 }2078}2079impl From<ExprArray> for Expr {2080 fn from(node: ExprArray) -> Expr {2081 Expr::ExprArray(node)2082 }2083}2084impl From<ExprObject> for Expr {2085 fn from(node: ExprObject) -> Expr {2086 Expr::ExprObject(node)2087 }2088}2089impl From<ExprArrayComp> for Expr {2090 fn from(node: ExprArrayComp) -> Expr {2091 Expr::ExprArrayComp(node)2092 }2093}2094impl From<ExprImport> for Expr {2095 fn from(node: ExprImport) -> Expr {2096 Expr::ExprImport(node)2097 }2098}2099impl From<ExprVar> for Expr {2100 fn from(node: ExprVar) -> Expr {2101 Expr::ExprVar(node)2102 }2103}2104impl From<ExprLocal> for Expr {2105 fn from(node: ExprLocal) -> Expr {2106 Expr::ExprLocal(node)2107 }2108}2109impl From<ExprIfThenElse> for Expr {2110 fn from(node: ExprIfThenElse) -> Expr {2111 Expr::ExprIfThenElse(node)2112 }2113}2114impl From<ExprFunction> for Expr {2115 fn from(node: ExprFunction) -> Expr {2116 Expr::ExprFunction(node)2117 }2118}2119impl From<ExprAssert> for Expr {2120 fn from(node: ExprAssert) -> Expr {2121 Expr::ExprAssert(node)2122 }2123}2124impl From<ExprError> for Expr {2125 fn from(node: ExprError) -> Expr {2126 Expr::ExprError(node)2127 }2128}2129impl AstNode for Expr {2130 fn can_cast(kind: SyntaxKind) -> bool {2131 match kind {2132 EXPR_BINARY2133 | EXPR_UNARY2134 | EXPR_SLICE2135 | EXPR_INDEX2136 | EXPR_INDEX_EXPR2137 | EXPR_APPLY2138 | EXPR_OBJ_EXTEND2139 | EXPR_PARENED2140 | EXPR_INTRINSIC_THIS_FILE2141 | EXPR_INTRINSIC_ID2142 | EXPR_INTRINSIC2143 | EXPR_STRING2144 | EXPR_NUMBER2145 | EXPR_LITERAL2146 | EXPR_ARRAY2147 | EXPR_OBJECT2148 | EXPR_ARRAY_COMP2149 | EXPR_IMPORT2150 | EXPR_VAR2151 | EXPR_LOCAL2152 | EXPR_IF_THEN_ELSE2153 | EXPR_FUNCTION2154 | EXPR_ASSERT2155 | EXPR_ERROR => true,2156 _ => false,2157 }2158 }2159 fn cast(syntax: SyntaxNode) -> Option<Self> {2160 let res = match syntax.kind() {2161 EXPR_BINARY => Expr::ExprBinary(ExprBinary { syntax }),2162 EXPR_UNARY => Expr::ExprUnary(ExprUnary { syntax }),2163 EXPR_SLICE => Expr::ExprSlice(ExprSlice { syntax }),2164 EXPR_INDEX => Expr::ExprIndex(ExprIndex { syntax }),2165 EXPR_INDEX_EXPR => Expr::ExprIndexExpr(ExprIndexExpr { syntax }),2166 EXPR_APPLY => Expr::ExprApply(ExprApply { syntax }),2167 EXPR_OBJ_EXTEND => Expr::ExprObjExtend(ExprObjExtend { syntax }),2168 EXPR_PARENED => Expr::ExprParened(ExprParened { syntax }),2169 EXPR_INTRINSIC_THIS_FILE => {2170 Expr::ExprIntrinsicThisFile(ExprIntrinsicThisFile { syntax })2171 }2172 EXPR_INTRINSIC_ID => Expr::ExprIntrinsicId(ExprIntrinsicId { syntax }),2173 EXPR_INTRINSIC => Expr::ExprIntrinsic(ExprIntrinsic { syntax }),2174 EXPR_STRING => Expr::ExprString(ExprString { syntax }),2175 EXPR_NUMBER => Expr::ExprNumber(ExprNumber { syntax }),2176 EXPR_LITERAL => Expr::ExprLiteral(ExprLiteral { syntax }),2177 EXPR_ARRAY => Expr::ExprArray(ExprArray { syntax }),2178 EXPR_OBJECT => Expr::ExprObject(ExprObject { syntax }),2179 EXPR_ARRAY_COMP => Expr::ExprArrayComp(ExprArrayComp { syntax }),2180 EXPR_IMPORT => Expr::ExprImport(ExprImport { syntax }),2181 EXPR_VAR => Expr::ExprVar(ExprVar { syntax }),2182 EXPR_LOCAL => Expr::ExprLocal(ExprLocal { syntax }),2183 EXPR_IF_THEN_ELSE => Expr::ExprIfThenElse(ExprIfThenElse { syntax }),2184 EXPR_FUNCTION => Expr::ExprFunction(ExprFunction { syntax }),2185 EXPR_ASSERT => Expr::ExprAssert(ExprAssert { syntax }),2186 EXPR_ERROR => Expr::ExprError(ExprError { syntax }),2187 _ => return None,2188 };2189 Some(res)2190 }2191 fn syntax(&self) -> &SyntaxNode {2192 match self {2193 Expr::ExprBinary(it) => &it.syntax,2194 Expr::ExprUnary(it) => &it.syntax,2195 Expr::ExprSlice(it) => &it.syntax,2196 Expr::ExprIndex(it) => &it.syntax,2197 Expr::ExprIndexExpr(it) => &it.syntax,2198 Expr::ExprApply(it) => &it.syntax,2199 Expr::ExprObjExtend(it) => &it.syntax,2200 Expr::ExprParened(it) => &it.syntax,2201 Expr::ExprIntrinsicThisFile(it) => &it.syntax,2202 Expr::ExprIntrinsicId(it) => &it.syntax,2203 Expr::ExprIntrinsic(it) => &it.syntax,2204 Expr::ExprString(it) => &it.syntax,2205 Expr::ExprNumber(it) => &it.syntax,2206 Expr::ExprLiteral(it) => &it.syntax,2207 Expr::ExprArray(it) => &it.syntax,2208 Expr::ExprObject(it) => &it.syntax,2209 Expr::ExprArrayComp(it) => &it.syntax,2210 Expr::ExprImport(it) => &it.syntax,2211 Expr::ExprVar(it) => &it.syntax,2212 Expr::ExprLocal(it) => &it.syntax,2213 Expr::ExprIfThenElse(it) => &it.syntax,2214 Expr::ExprFunction(it) => &it.syntax,2215 Expr::ExprAssert(it) => &it.syntax,2216 Expr::ExprError(it) => &it.syntax,2217 }2218 }2219}2220impl From<ObjBodyComp> for ObjBody {2221 fn from(node: ObjBodyComp) -> ObjBody {2222 ObjBody::ObjBodyComp(node)2223 }2224}2225impl From<ObjBodyMemberList> for ObjBody {2226 fn from(node: ObjBodyMemberList) -> ObjBody {2227 ObjBody::ObjBodyMemberList(node)2228 }2229}2230impl AstNode for ObjBody {2231 fn can_cast(kind: SyntaxKind) -> bool {2232 match kind {2233 OBJ_BODY_COMP | OBJ_BODY_MEMBER_LIST => true,2234 _ => false,2235 }2236 }2237 fn cast(syntax: SyntaxNode) -> Option<Self> {2238 let res = match syntax.kind() {2239 OBJ_BODY_COMP => ObjBody::ObjBodyComp(ObjBodyComp { syntax }),2240 OBJ_BODY_MEMBER_LIST => ObjBody::ObjBodyMemberList(ObjBodyMemberList { syntax }),2241 _ => return None,2242 };2243 Some(res)2244 }2245 fn syntax(&self) -> &SyntaxNode {2246 match self {2247 ObjBody::ObjBodyComp(it) => &it.syntax,2248 ObjBody::ObjBodyMemberList(it) => &it.syntax,2249 }2250 }2251}2252impl From<ForSpec> for CompSpec {2253 fn from(node: ForSpec) -> CompSpec {2254 CompSpec::ForSpec(node)2255 }2256}2257impl From<IfSpec> for CompSpec {2258 fn from(node: IfSpec) -> CompSpec {2259 CompSpec::IfSpec(node)2260 }2261}2262impl AstNode for CompSpec {2263 fn can_cast(kind: SyntaxKind) -> bool {2264 match kind {2265 FOR_SPEC | IF_SPEC => true,2266 _ => false,2267 }2268 }2269 fn cast(syntax: SyntaxNode) -> Option<Self> {2270 let res = match syntax.kind() {2271 FOR_SPEC => CompSpec::ForSpec(ForSpec { syntax }),2272 IF_SPEC => CompSpec::IfSpec(IfSpec { syntax }),2273 _ => return None,2274 };2275 Some(res)2276 }2277 fn syntax(&self) -> &SyntaxNode {2278 match self {2279 CompSpec::ForSpec(it) => &it.syntax,2280 CompSpec::IfSpec(it) => &it.syntax,2281 }2282 }2283}2284impl From<BindDestruct> for Bind {2285 fn from(node: BindDestruct) -> Bind {2286 Bind::BindDestruct(node)2287 }2288}2289impl From<BindFunction> for Bind {2290 fn from(node: BindFunction) -> Bind {2291 Bind::BindFunction(node)2292 }2293}2294impl AstNode for Bind {2295 fn can_cast(kind: SyntaxKind) -> bool {2296 match kind {2297 BIND_DESTRUCT | BIND_FUNCTION => true,2298 _ => false,2299 }2300 }2301 fn cast(syntax: SyntaxNode) -> Option<Self> {2302 let res = match syntax.kind() {2303 BIND_DESTRUCT => Bind::BindDestruct(BindDestruct { syntax }),2304 BIND_FUNCTION => Bind::BindFunction(BindFunction { syntax }),2305 _ => return None,2306 };2307 Some(res)2308 }2309 fn syntax(&self) -> &SyntaxNode {2310 match self {2311 Bind::BindDestruct(it) => &it.syntax,2312 Bind::BindFunction(it) => &it.syntax,2313 }2314 }2315}2316impl From<MemberBindStmt> for Member {2317 fn from(node: MemberBindStmt) -> Member {2318 Member::MemberBindStmt(node)2319 }2320}2321impl From<MemberAssertStmt> for Member {2322 fn from(node: MemberAssertStmt) -> Member {2323 Member::MemberAssertStmt(node)2324 }2325}2326impl From<MemberFieldNormal> for Member {2327 fn from(node: MemberFieldNormal) -> Member {2328 Member::MemberFieldNormal(node)2329 }2330}2331impl From<MemberFieldMethod> for Member {2332 fn from(node: MemberFieldMethod) -> Member {2333 Member::MemberFieldMethod(node)2334 }2335}2336impl AstNode for Member {2337 fn can_cast(kind: SyntaxKind) -> bool {2338 match kind {2339 MEMBER_BIND_STMT | MEMBER_ASSERT_STMT | MEMBER_FIELD_NORMAL | MEMBER_FIELD_METHOD => {2340 true2341 }2342 _ => false,2343 }2344 }2345 fn cast(syntax: SyntaxNode) -> Option<Self> {2346 let res = match syntax.kind() {2347 MEMBER_BIND_STMT => Member::MemberBindStmt(MemberBindStmt { syntax }),2348 MEMBER_ASSERT_STMT => Member::MemberAssertStmt(MemberAssertStmt { syntax }),2349 MEMBER_FIELD_NORMAL => Member::MemberFieldNormal(MemberFieldNormal { syntax }),2350 MEMBER_FIELD_METHOD => Member::MemberFieldMethod(MemberFieldMethod { syntax }),2351 _ => return None,2352 };2353 Some(res)2354 }2355 fn syntax(&self) -> &SyntaxNode {2356 match self {2357 Member::MemberBindStmt(it) => &it.syntax,2358 Member::MemberAssertStmt(it) => &it.syntax,2359 Member::MemberFieldNormal(it) => &it.syntax,2360 Member::MemberFieldMethod(it) => &it.syntax,2361 }2362 }2363}2364impl From<FieldNameFixed> for FieldName {2365 fn from(node: FieldNameFixed) -> FieldName {2366 FieldName::FieldNameFixed(node)2367 }2368}2369impl From<FieldNameDynamic> for FieldName {2370 fn from(node: FieldNameDynamic) -> FieldName {2371 FieldName::FieldNameDynamic(node)2372 }2373}2374impl AstNode for FieldName {2375 fn can_cast(kind: SyntaxKind) -> bool {2376 match kind {2377 FIELD_NAME_FIXED | FIELD_NAME_DYNAMIC => true,2378 _ => false,2379 }2380 }2381 fn cast(syntax: SyntaxNode) -> Option<Self> {2382 let res = match syntax.kind() {2383 FIELD_NAME_FIXED => FieldName::FieldNameFixed(FieldNameFixed { syntax }),2384 FIELD_NAME_DYNAMIC => FieldName::FieldNameDynamic(FieldNameDynamic { syntax }),2385 _ => return None,2386 };2387 Some(res)2388 }2389 fn syntax(&self) -> &SyntaxNode {2390 match self {2391 FieldName::FieldNameFixed(it) => &it.syntax,2392 FieldName::FieldNameDynamic(it) => &it.syntax,2393 }2394 }2395}2396impl From<DestructFull> for Destruct {2397 fn from(node: DestructFull) -> Destruct {2398 Destruct::DestructFull(node)2399 }2400}2401impl From<DestructSkip> for Destruct {2402 fn from(node: DestructSkip) -> Destruct {2403 Destruct::DestructSkip(node)2404 }2405}2406impl From<DestructArray> for Destruct {2407 fn from(node: DestructArray) -> Destruct {2408 Destruct::DestructArray(node)2409 }2410}2411impl From<DestructObject> for Destruct {2412 fn from(node: DestructObject) -> Destruct {2413 Destruct::DestructObject(node)2414 }2415}2416impl AstNode for Destruct {2417 fn can_cast(kind: SyntaxKind) -> bool {2418 match kind {2419 DESTRUCT_FULL | DESTRUCT_SKIP | DESTRUCT_ARRAY | DESTRUCT_OBJECT => true,2420 _ => false,2421 }2422 }2423 fn cast(syntax: SyntaxNode) -> Option<Self> {2424 let res = match syntax.kind() {2425 DESTRUCT_FULL => Destruct::DestructFull(DestructFull { syntax }),2426 DESTRUCT_SKIP => Destruct::DestructSkip(DestructSkip { syntax }),2427 DESTRUCT_ARRAY => Destruct::DestructArray(DestructArray { syntax }),2428 DESTRUCT_OBJECT => Destruct::DestructObject(DestructObject { syntax }),2429 _ => return None,2430 };2431 Some(res)2432 }2433 fn syntax(&self) -> &SyntaxNode {2434 match self {2435 Destruct::DestructFull(it) => &it.syntax,2436 Destruct::DestructSkip(it) => &it.syntax,2437 Destruct::DestructArray(it) => &it.syntax,2438 Destruct::DestructObject(it) => &it.syntax,2439 }2440 }2441}2442impl From<DestructArrayElement> for DestructArrayPart {2443 fn from(node: DestructArrayElement) -> DestructArrayPart {2444 DestructArrayPart::DestructArrayElement(node)2445 }2446}2447impl From<DestructRest> for DestructArrayPart {2448 fn from(node: DestructRest) -> DestructArrayPart {2449 DestructArrayPart::DestructRest(node)2450 }2451}2452impl AstNode for DestructArrayPart {2453 fn can_cast(kind: SyntaxKind) -> bool {2454 match kind {2455 DESTRUCT_ARRAY_ELEMENT | DESTRUCT_REST => true,2456 _ => false,2457 }2458 }2459 fn cast(syntax: SyntaxNode) -> Option<Self> {2460 let res = match syntax.kind() {2461 DESTRUCT_ARRAY_ELEMENT => {2462 DestructArrayPart::DestructArrayElement(DestructArrayElement { syntax })2463 }2464 DESTRUCT_REST => DestructArrayPart::DestructRest(DestructRest { syntax }),2465 _ => return None,2466 };2467 Some(res)2468 }2469 fn syntax(&self) -> &SyntaxNode {2470 match self {2471 DestructArrayPart::DestructArrayElement(it) => &it.syntax,2472 DestructArrayPart::DestructRest(it) => &it.syntax,2473 }2474 }2475}2476impl AstToken for BinaryOperator {2477 fn can_cast(kind: SyntaxKind) -> bool {2478 BinaryOperatorKind::can_cast(kind)2479 }2480 fn cast(syntax: SyntaxToken) -> Option<Self> {2481 let kind = BinaryOperatorKind::cast(syntax.kind())?;2482 Some(BinaryOperator { syntax, kind })2483 }2484 fn syntax(&self) -> &SyntaxToken {2485 &self.syntax2486 }2487}2488impl BinaryOperatorKind {2489 fn can_cast(kind: SyntaxKind) -> bool {2490 match kind {2491 OR | AND | BIT_OR | BIT_XOR | BIT_AND | EQ | NE | LT | GT | LE | GE | IN_KW | LHS2492 | RHS | PLUS | MINUS | MUL | DIV | MODULO | META_OBJECT_APPLY | ERROR_NO_OPERATOR => true,2493 _ => false,2494 }2495 }2496 pub fn cast(kind: SyntaxKind) -> Option<Self> {2497 let res = match kind {2498 OR => Self::Or,2499 AND => Self::And,2500 BIT_OR => Self::BitOr,2501 BIT_XOR => Self::BitXor,2502 BIT_AND => Self::BitAnd,2503 EQ => Self::Eq,2504 NE => Self::Ne,2505 LT => Self::Lt,2506 GT => Self::Gt,2507 LE => Self::Le,2508 GE => Self::Ge,2509 IN_KW => Self::InKw,2510 LHS => Self::Lhs,2511 RHS => Self::Rhs,2512 PLUS => Self::Plus,2513 MINUS => Self::Minus,2514 MUL => Self::Mul,2515 DIV => Self::Div,2516 MODULO => Self::Modulo,2517 META_OBJECT_APPLY => Self::MetaObjectApply,2518 ERROR_NO_OPERATOR => Self::ErrorNoOperator,2519 _ => return None,2520 };2521 Some(res)2522 }2523}2524impl BinaryOperator {2525 pub fn kind(&self) -> BinaryOperatorKind {2526 self.kind2527 }2528}2529impl std::fmt::Display for BinaryOperator {2530 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2531 std::fmt::Display::fmt(self.syntax(), f)2532 }2533}2534impl AstToken for UnaryOperator {2535 fn can_cast(kind: SyntaxKind) -> bool {2536 UnaryOperatorKind::can_cast(kind)2537 }2538 fn cast(syntax: SyntaxToken) -> Option<Self> {2539 let kind = UnaryOperatorKind::cast(syntax.kind())?;2540 Some(UnaryOperator { syntax, kind })2541 }2542 fn syntax(&self) -> &SyntaxToken {2543 &self.syntax2544 }2545}2546impl UnaryOperatorKind {2547 fn can_cast(kind: SyntaxKind) -> bool {2548 match kind {2549 MINUS | NOT | BIT_NOT => true,2550 _ => false,2551 }2552 }2553 pub fn cast(kind: SyntaxKind) -> Option<Self> {2554 let res = match kind {2555 MINUS => Self::Minus,2556 NOT => Self::Not,2557 BIT_NOT => Self::BitNot,2558 _ => return None,2559 };2560 Some(res)2561 }2562}2563impl UnaryOperator {2564 pub fn kind(&self) -> UnaryOperatorKind {2565 self.kind2566 }2567}2568impl std::fmt::Display for UnaryOperator {2569 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2570 std::fmt::Display::fmt(self.syntax(), f)2571 }2572}2573impl AstToken for Literal {2574 fn can_cast(kind: SyntaxKind) -> bool {2575 LiteralKind::can_cast(kind)2576 }2577 fn cast(syntax: SyntaxToken) -> Option<Self> {2578 let kind = LiteralKind::cast(syntax.kind())?;2579 Some(Literal { syntax, kind })2580 }2581 fn syntax(&self) -> &SyntaxToken {2582 &self.syntax2583 }2584}2585impl LiteralKind {2586 fn can_cast(kind: SyntaxKind) -> bool {2587 match kind {2588 NULL_KW | TRUE_KW | FALSE_KW | SELF_KW | DOLLAR | SUPER_KW => true,2589 _ => false,2590 }2591 }2592 pub fn cast(kind: SyntaxKind) -> Option<Self> {2593 let res = match kind {2594 NULL_KW => Self::NullKw,2595 TRUE_KW => Self::TrueKw,2596 FALSE_KW => Self::FalseKw,2597 SELF_KW => Self::SelfKw,2598 DOLLAR => Self::Dollar,2599 SUPER_KW => Self::SuperKw,2600 _ => return None,2601 };2602 Some(res)2603 }2604}2605impl Literal {2606 pub fn kind(&self) -> LiteralKind {2607 self.kind2608 }2609}2610impl std::fmt::Display for Literal {2611 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2612 std::fmt::Display::fmt(self.syntax(), f)2613 }2614}2615impl AstToken for Text {2616 fn can_cast(kind: SyntaxKind) -> bool {2617 TextKind::can_cast(kind)2618 }2619 fn cast(syntax: SyntaxToken) -> Option<Self> {2620 let kind = TextKind::cast(syntax.kind())?;2621 Some(Text { syntax, kind })2622 }2623 fn syntax(&self) -> &SyntaxToken {2624 &self.syntax2625 }2626}2627impl TextKind {2628 fn can_cast(kind: SyntaxKind) -> bool {2629 match kind {2630 STRING_DOUBLE2631 | ERROR_STRING_DOUBLE_UNTERMINATED2632 | STRING_SINGLE2633 | ERROR_STRING_SINGLE_UNTERMINATED2634 | STRING_DOUBLE_VERBATIM2635 | ERROR_STRING_DOUBLE_VERBATIM_UNTERMINATED2636 | STRING_SINGLE_VERBATIM2637 | ERROR_STRING_SINGLE_VERBATIM_UNTERMINATED2638 | ERROR_STRING_VERBATIM_MISSING_QUOTES2639 | STRING_BLOCK2640 | ERROR_STRING_BLOCK_UNEXPECTED_END2641 | ERROR_STRING_BLOCK_MISSING_NEW_LINE2642 | ERROR_STRING_BLOCK_MISSING_TERMINATION2643 | ERROR_STRING_BLOCK_MISSING_INDENT => true,2644 _ => false,2645 }2646 }2647 pub fn cast(kind: SyntaxKind) -> Option<Self> {2648 let res = match kind {2649 STRING_DOUBLE => Self::StringDouble,2650 ERROR_STRING_DOUBLE_UNTERMINATED => Self::ErrorStringDoubleUnterminated,2651 STRING_SINGLE => Self::StringSingle,2652 ERROR_STRING_SINGLE_UNTERMINATED => Self::ErrorStringSingleUnterminated,2653 STRING_DOUBLE_VERBATIM => Self::StringDoubleVerbatim,2654 ERROR_STRING_DOUBLE_VERBATIM_UNTERMINATED => {2655 Self::ErrorStringDoubleVerbatimUnterminated2656 }2657 STRING_SINGLE_VERBATIM => Self::StringSingleVerbatim,2658 ERROR_STRING_SINGLE_VERBATIM_UNTERMINATED => {2659 Self::ErrorStringSingleVerbatimUnterminated2660 }2661 ERROR_STRING_VERBATIM_MISSING_QUOTES => Self::ErrorStringVerbatimMissingQuotes,2662 STRING_BLOCK => Self::StringBlock,2663 ERROR_STRING_BLOCK_UNEXPECTED_END => Self::ErrorStringBlockUnexpectedEnd,2664 ERROR_STRING_BLOCK_MISSING_NEW_LINE => Self::ErrorStringBlockMissingNewLine,2665 ERROR_STRING_BLOCK_MISSING_TERMINATION => Self::ErrorStringBlockMissingTermination,2666 ERROR_STRING_BLOCK_MISSING_INDENT => Self::ErrorStringBlockMissingIndent,2667 _ => return None,2668 };2669 Some(res)2670 }2671}2672impl Text {2673 pub fn kind(&self) -> TextKind {2674 self.kind2675 }2676}2677impl std::fmt::Display for Text {2678 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2679 std::fmt::Display::fmt(self.syntax(), f)2680 }2681}2682impl AstToken for Number {2683 fn can_cast(kind: SyntaxKind) -> bool {2684 NumberKind::can_cast(kind)2685 }2686 fn cast(syntax: SyntaxToken) -> Option<Self> {2687 let kind = NumberKind::cast(syntax.kind())?;2688 Some(Number { syntax, kind })2689 }2690 fn syntax(&self) -> &SyntaxToken {2691 &self.syntax2692 }2693}2694impl NumberKind {2695 fn can_cast(kind: SyntaxKind) -> bool {2696 match kind {2697 FLOAT2698 | ERROR_FLOAT_JUNK_AFTER_POINT2699 | ERROR_FLOAT_JUNK_AFTER_EXPONENT2700 | ERROR_FLOAT_JUNK_AFTER_EXPONENT_SIGN => true,2701 _ => false,2702 }2703 }2704 pub fn cast(kind: SyntaxKind) -> Option<Self> {2705 let res = match kind {2706 FLOAT => Self::Float,2707 ERROR_FLOAT_JUNK_AFTER_POINT => Self::ErrorFloatJunkAfterPoint,2708 ERROR_FLOAT_JUNK_AFTER_EXPONENT => Self::ErrorFloatJunkAfterExponent,2709 ERROR_FLOAT_JUNK_AFTER_EXPONENT_SIGN => Self::ErrorFloatJunkAfterExponentSign,2710 _ => return None,2711 };2712 Some(res)2713 }2714}2715impl Number {2716 pub fn kind(&self) -> NumberKind {2717 self.kind2718 }2719}2720impl std::fmt::Display for Number {2721 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2722 std::fmt::Display::fmt(self.syntax(), f)2723 }2724}2725impl AstToken for ImportKind {2726 fn can_cast(kind: SyntaxKind) -> bool {2727 ImportKindKind::can_cast(kind)2728 }2729 fn cast(syntax: SyntaxToken) -> Option<Self> {2730 let kind = ImportKindKind::cast(syntax.kind())?;2731 Some(ImportKind { syntax, kind })2732 }2733 fn syntax(&self) -> &SyntaxToken {2734 &self.syntax2735 }2736}2737impl ImportKindKind {2738 fn can_cast(kind: SyntaxKind) -> bool {2739 match kind {2740 IMPORTSTR_KW | IMPORTBIN_KW | IMPORT_KW => true,2741 _ => false,2742 }2743 }2744 pub fn cast(kind: SyntaxKind) -> Option<Self> {2745 let res = match kind {2746 IMPORTSTR_KW => Self::ImportstrKw,2747 IMPORTBIN_KW => Self::ImportbinKw,2748 IMPORT_KW => Self::ImportKw,2749 _ => return None,2750 };2751 Some(res)2752 }2753}2754impl ImportKind {2755 pub fn kind(&self) -> ImportKindKind {2756 self.kind2757 }2758}2759impl std::fmt::Display for ImportKind {2760 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2761 std::fmt::Display::fmt(self.syntax(), f)2762 }2763}2764impl AstToken for Visibility {2765 fn can_cast(kind: SyntaxKind) -> bool {2766 VisibilityKind::can_cast(kind)2767 }2768 fn cast(syntax: SyntaxToken) -> Option<Self> {2769 let kind = VisibilityKind::cast(syntax.kind())?;2770 Some(Visibility { syntax, kind })2771 }2772 fn syntax(&self) -> &SyntaxToken {2773 &self.syntax2774 }2775}2776impl VisibilityKind {2777 fn can_cast(kind: SyntaxKind) -> bool {2778 match kind {2779 COLONCOLONCOLON | COLONCOLON | COLON => true,2780 _ => false,2781 }2782 }2783 pub fn cast(kind: SyntaxKind) -> Option<Self> {2784 let res = match kind {2785 COLONCOLONCOLON => Self::Coloncoloncolon,2786 COLONCOLON => Self::Coloncolon,2787 COLON => Self::Colon,2788 _ => return None,2789 };2790 Some(res)2791 }2792}2793impl Visibility {2794 pub fn kind(&self) -> VisibilityKind {2795 self.kind2796 }2797}2798impl std::fmt::Display for Visibility {2799 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2800 std::fmt::Display::fmt(self.syntax(), f)2801 }2802}2803impl AstToken for Trivia {2804 fn can_cast(kind: SyntaxKind) -> bool {2805 TriviaKind::can_cast(kind)2806 }2807 fn cast(syntax: SyntaxToken) -> Option<Self> {2808 let kind = TriviaKind::cast(syntax.kind())?;2809 Some(Trivia { syntax, kind })2810 }2811 fn syntax(&self) -> &SyntaxToken {2812 &self.syntax2813 }2814}2815impl TriviaKind {2816 fn can_cast(kind: SyntaxKind) -> bool {2817 match kind {2818 WHITESPACE2819 | MULTI_LINE_COMMENT2820 | ERROR_COMMENT_TOO_SHORT2821 | ERROR_COMMENT_UNTERMINATED2822 | SINGLE_LINE_HASH_COMMENT2823 | SINGLE_LINE_SLASH_COMMENT => true,2824 _ => false,2825 }2826 }2827 pub fn cast(kind: SyntaxKind) -> Option<Self> {2828 let res = match kind {2829 WHITESPACE => Self::Whitespace,2830 MULTI_LINE_COMMENT => Self::MultiLineComment,2831 ERROR_COMMENT_TOO_SHORT => Self::ErrorCommentTooShort,2832 ERROR_COMMENT_UNTERMINATED => Self::ErrorCommentUnterminated,2833 SINGLE_LINE_HASH_COMMENT => Self::SingleLineHashComment,2834 SINGLE_LINE_SLASH_COMMENT => Self::SingleLineSlashComment,2835 _ => return None,2836 };2837 Some(res)2838 }2839}2840impl Trivia {2841 pub fn kind(&self) -> TriviaKind {2842 self.kind2843 }2844}2845impl std::fmt::Display for Trivia {2846 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2847 std::fmt::Display::fmt(self.syntax(), f)2848 }2849}2850impl AstToken for ParsingError {2851 fn can_cast(kind: SyntaxKind) -> bool {2852 ParsingErrorKind::can_cast(kind)2853 }2854 fn cast(syntax: SyntaxToken) -> Option<Self> {2855 let kind = ParsingErrorKind::cast(syntax.kind())?;2856 Some(ParsingError { syntax, kind })2857 }2858 fn syntax(&self) -> &SyntaxToken {2859 &self.syntax2860 }2861}2862impl ParsingErrorKind {2863 fn can_cast(kind: SyntaxKind) -> bool {2864 match kind {2865 ERROR_MISSING_TOKEN | ERROR_UNEXPECTED_TOKEN | ERROR_CUSTOM => true,2866 _ => false,2867 }2868 }2869 pub fn cast(kind: SyntaxKind) -> Option<Self> {2870 let res = match kind {2871 ERROR_MISSING_TOKEN => Self::ErrorMissingToken,2872 ERROR_UNEXPECTED_TOKEN => Self::ErrorUnexpectedToken,2873 ERROR_CUSTOM => Self::ErrorCustom,2874 _ => return None,2875 };2876 Some(res)2877 }2878}2879impl ParsingError {2880 pub fn kind(&self) -> ParsingErrorKind {2881 self.kind2882 }2883}2884impl std::fmt::Display for ParsingError {2885 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2886 std::fmt::Display::fmt(self.syntax(), f)2887 }2888}2889impl std::fmt::Display for Expr {2890 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2891 std::fmt::Display::fmt(self.syntax(), f)2892 }2893}2894impl std::fmt::Display for ObjBody {2895 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2896 std::fmt::Display::fmt(self.syntax(), f)2897 }2898}2899impl std::fmt::Display for CompSpec {2900 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2901 std::fmt::Display::fmt(self.syntax(), f)2902 }2903}2904impl std::fmt::Display for Bind {2905 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2906 std::fmt::Display::fmt(self.syntax(), f)2907 }2908}2909impl std::fmt::Display for Member {2910 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2911 std::fmt::Display::fmt(self.syntax(), f)2912 }2913}2914impl std::fmt::Display for FieldName {2915 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2916 std::fmt::Display::fmt(self.syntax(), f)2917 }2918}2919impl std::fmt::Display for Destruct {2920 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2921 std::fmt::Display::fmt(self.syntax(), f)2922 }2923}2924impl std::fmt::Display for DestructArrayPart {2925 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2926 std::fmt::Display::fmt(self.syntax(), f)2927 }2928}2929impl std::fmt::Display for SourceFile {2930 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2931 std::fmt::Display::fmt(self.syntax(), f)2932 }2933}2934impl std::fmt::Display for ExprBinary {2935 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2936 std::fmt::Display::fmt(self.syntax(), f)2937 }2938}2939impl std::fmt::Display for LhsExpr {2940 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2941 std::fmt::Display::fmt(self.syntax(), f)2942 }2943}2944impl std::fmt::Display for ExprUnary {2945 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2946 std::fmt::Display::fmt(self.syntax(), f)2947 }2948}2949impl std::fmt::Display for ExprSlice {2950 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2951 std::fmt::Display::fmt(self.syntax(), f)2952 }2953}2954impl std::fmt::Display for SliceDesc {2955 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2956 std::fmt::Display::fmt(self.syntax(), f)2957 }2958}2959impl std::fmt::Display for ExprIndex {2960 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2961 std::fmt::Display::fmt(self.syntax(), f)2962 }2963}2964impl std::fmt::Display for Name {2965 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2966 std::fmt::Display::fmt(self.syntax(), f)2967 }2968}2969impl std::fmt::Display for ExprIndexExpr {2970 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2971 std::fmt::Display::fmt(self.syntax(), f)2972 }2973}2974impl std::fmt::Display for ExprApply {2975 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2976 std::fmt::Display::fmt(self.syntax(), f)2977 }2978}2979impl std::fmt::Display for ArgsDesc {2980 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2981 std::fmt::Display::fmt(self.syntax(), f)2982 }2983}2984impl std::fmt::Display for ExprObjExtend {2985 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2986 std::fmt::Display::fmt(self.syntax(), f)2987 }2988}2989impl std::fmt::Display for ExprParened {2990 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2991 std::fmt::Display::fmt(self.syntax(), f)2992 }2993}2994impl std::fmt::Display for ExprLiteral {2995 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2996 std::fmt::Display::fmt(self.syntax(), f)2997 }2998}2999impl std::fmt::Display for ExprIntrinsicThisFile {3000 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3001 std::fmt::Display::fmt(self.syntax(), f)3002 }3003}3004impl std::fmt::Display for ExprIntrinsicId {3005 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3006 std::fmt::Display::fmt(self.syntax(), f)3007 }3008}3009impl std::fmt::Display for ExprIntrinsic {3010 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3011 std::fmt::Display::fmt(self.syntax(), f)3012 }3013}3014impl std::fmt::Display for ExprString {3015 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3016 std::fmt::Display::fmt(self.syntax(), f)3017 }3018}3019impl std::fmt::Display for ExprNumber {3020 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3021 std::fmt::Display::fmt(self.syntax(), f)3022 }3023}3024impl std::fmt::Display for ExprArray {3025 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3026 std::fmt::Display::fmt(self.syntax(), f)3027 }3028}3029impl std::fmt::Display for ExprObject {3030 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3031 std::fmt::Display::fmt(self.syntax(), f)3032 }3033}3034impl std::fmt::Display for ExprArrayComp {3035 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3036 std::fmt::Display::fmt(self.syntax(), f)3037 }3038}3039impl std::fmt::Display for ExprImport {3040 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3041 std::fmt::Display::fmt(self.syntax(), f)3042 }3043}3044impl std::fmt::Display for ExprVar {3045 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3046 std::fmt::Display::fmt(self.syntax(), f)3047 }3048}3049impl std::fmt::Display for ExprLocal {3050 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3051 std::fmt::Display::fmt(self.syntax(), f)3052 }3053}3054impl std::fmt::Display for ExprIfThenElse {3055 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3056 std::fmt::Display::fmt(self.syntax(), f)3057 }3058}3059impl std::fmt::Display for TrueExpr {3060 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3061 std::fmt::Display::fmt(self.syntax(), f)3062 }3063}3064impl std::fmt::Display for FalseExpr {3065 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3066 std::fmt::Display::fmt(self.syntax(), f)3067 }3068}3069impl std::fmt::Display for ExprFunction {3070 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3071 std::fmt::Display::fmt(self.syntax(), f)3072 }3073}3074impl std::fmt::Display for ParamsDesc {3075 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3076 std::fmt::Display::fmt(self.syntax(), f)3077 }3078}3079impl std::fmt::Display for ExprAssert {3080 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3081 std::fmt::Display::fmt(self.syntax(), f)3082 }3083}3084impl std::fmt::Display for Assertion {3085 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3086 std::fmt::Display::fmt(self.syntax(), f)3087 }3088}3089impl std::fmt::Display for ExprError {3090 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3091 std::fmt::Display::fmt(self.syntax(), f)3092 }3093}3094impl std::fmt::Display for SliceDescEnd {3095 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3096 std::fmt::Display::fmt(self.syntax(), f)3097 }3098}3099impl std::fmt::Display for SliceDescStep {3100 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3101 std::fmt::Display::fmt(self.syntax(), f)3102 }3103}3104impl std::fmt::Display for Arg {3105 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3106 std::fmt::Display::fmt(self.syntax(), f)3107 }3108}3109impl std::fmt::Display for ObjBodyComp {3110 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3111 std::fmt::Display::fmt(self.syntax(), f)3112 }3113}3114impl std::fmt::Display for ObjLocalPostComma {3115 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3116 std::fmt::Display::fmt(self.syntax(), f)3117 }3118}3119impl std::fmt::Display for ObjLocalPreComma {3120 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3121 std::fmt::Display::fmt(self.syntax(), f)3122 }3123}3124impl std::fmt::Display for ObjBodyMemberList {3125 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3126 std::fmt::Display::fmt(self.syntax(), f)3127 }3128}3129impl std::fmt::Display for ObjLocal {3130 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3131 std::fmt::Display::fmt(self.syntax(), f)3132 }3133}3134impl std::fmt::Display for MemberBindStmt {3135 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3136 std::fmt::Display::fmt(self.syntax(), f)3137 }3138}3139impl std::fmt::Display for MemberAssertStmt {3140 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3141 std::fmt::Display::fmt(self.syntax(), f)3142 }3143}3144impl std::fmt::Display for MemberFieldNormal {3145 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3146 std::fmt::Display::fmt(self.syntax(), f)3147 }3148}3149impl std::fmt::Display for MemberFieldMethod {3150 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3151 std::fmt::Display::fmt(self.syntax(), f)3152 }3153}3154impl std::fmt::Display for FieldNameFixed {3155 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3156 std::fmt::Display::fmt(self.syntax(), f)3157 }3158}3159impl std::fmt::Display for FieldNameDynamic {3160 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3161 std::fmt::Display::fmt(self.syntax(), f)3162 }3163}3164impl std::fmt::Display for ForSpec {3165 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3166 std::fmt::Display::fmt(self.syntax(), f)3167 }3168}3169impl std::fmt::Display for IfSpec {3170 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3171 std::fmt::Display::fmt(self.syntax(), f)3172 }3173}3174impl std::fmt::Display for BindDestruct {3175 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3176 std::fmt::Display::fmt(self.syntax(), f)3177 }3178}3179impl std::fmt::Display for BindFunction {3180 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3181 std::fmt::Display::fmt(self.syntax(), f)3182 }3183}3184impl std::fmt::Display for Param {3185 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3186 std::fmt::Display::fmt(self.syntax(), f)3187 }3188}3189impl std::fmt::Display for DestructFull {3190 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3191 std::fmt::Display::fmt(self.syntax(), f)3192 }3193}3194impl std::fmt::Display for DestructSkip {3195 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3196 std::fmt::Display::fmt(self.syntax(), f)3197 }3198}3199impl std::fmt::Display for DestructArray {3200 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3201 std::fmt::Display::fmt(self.syntax(), f)3202 }3203}3204impl std::fmt::Display for DestructObject {3205 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3206 std::fmt::Display::fmt(self.syntax(), f)3207 }3208}3209impl std::fmt::Display for DestructObjectField {3210 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3211 std::fmt::Display::fmt(self.syntax(), f)3212 }3213}3214impl std::fmt::Display for DestructRest {3215 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3216 std::fmt::Display::fmt(self.syntax(), f)3217 }3218}3219impl std::fmt::Display for DestructArrayElement {3220 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3221 std::fmt::Display::fmt(self.syntax(), f)3222 }3223}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
@@ -181,6 +181,7 @@
ASSERT_KW,
ERROR_MISSING_TOKEN,
ERROR_UNEXPECTED_TOKEN,
+ ERROR_CUSTOM,
#[doc = r" Also acts as __LAST_TOKEN"]
#[error]
LEXING_ERROR,
@@ -227,9 +228,8 @@
OBJ_LOCAL,
MEMBER_BIND_STMT,
MEMBER_ASSERT_STMT,
- MEMBER_FIELD,
- FIELD_NORMAL,
- FIELD_METHOD,
+ MEMBER_FIELD_NORMAL,
+ MEMBER_FIELD_METHOD,
FIELD_NAME_FIXED,
FIELD_NAME_DYNAMIC,
FOR_SPEC,
@@ -249,7 +249,6 @@
COMP_SPEC,
BIND,
MEMBER,
- FIELD,
FIELD_NAME,
DESTRUCT,
DESTRUCT_ARRAY_PART,
@@ -281,7 +280,7 @@
}
pub fn is_enum(self) -> bool {
match self {
- EXPR | OBJ_BODY | COMP_SPEC | BIND | MEMBER | FIELD | FIELD_NAME | DESTRUCT
+ EXPR | OBJ_BODY | COMP_SPEC | BIND | MEMBER | FIELD_NAME | DESTRUCT
| DESTRUCT_ARRAY_PART | BINARY_OPERATOR | UNARY_OPERATOR | LITERAL | TEXT | NUMBER
| IMPORT_KIND | VISIBILITY | TRIVIA | PARSING_ERROR => true,
_ => false,
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::{LocatedSyntaxError, Parser, SyntaxError};
+use parser::{LocatedSyntaxError, Parser};
pub use rowan;
mod ast;
crates/jrsonnet-rowan-parser/src/marker.rsdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/marker.rs
+++ b/crates/jrsonnet-rowan-parser/src/marker.rs
@@ -1,7 +1,12 @@
+use std::num::NonZeroUsize;
+
use drop_bomb::DropBomb;
-use rowan::TextRange;
-use crate::{event::Event, parser::Parser, SyntaxKind};
+use crate::{
+ event::Event,
+ parser::{ExpectedSyntax, Parser, SyntaxError},
+ SyntaxKind,
+};
pub struct Ranger {
pub pos: usize,
@@ -38,7 +43,12 @@
bomb: DropBomb::new("marked dropped while not completed"),
}
}
- pub fn complete(mut self, p: &mut Parser, kind: SyntaxKind) -> CompletedMarker {
+ fn complete_raw(
+ mut self,
+ p: &mut Parser,
+ kind: SyntaxKind,
+ error: Option<SyntaxError>,
+ ) -> CompletedMarker {
self.bomb.defuse();
assert!(
!kind.is_enum(),
@@ -50,7 +60,7 @@
// "{kind:?} should be only emitted by lexer, not used directly"
// );
let event_at_pos = &mut p.events[self.start_event_idx];
- assert_eq!(*event_at_pos, Event::Pending);
+ assert!(matches!(event_at_pos, Event::Pending));
*event_at_pos = Event::Start {
kind,
@@ -58,7 +68,10 @@
};
let finish_event_idx = p.events.len();
- p.events.push(Event::Finish { wrapper: None });
+ p.events.push(Event::Finish {
+ wrapper: None,
+ error: error.map(Box::new),
+ });
p.entered -= 1;
p.clear_outdated_hints();
CompletedMarker {
@@ -66,10 +79,42 @@
finish_event_idx,
}
}
+ pub fn complete(mut self, p: &mut Parser, kind: SyntaxKind) -> CompletedMarker {
+ self.complete_raw(p, kind, None)
+ }
+ pub fn complete_error(mut self, p: &mut Parser, msg: impl AsRef<str>) -> CompletedMarker {
+ self.complete_raw(
+ p,
+ SyntaxKind::ERROR_CUSTOM,
+ Some(SyntaxError::Custom {
+ error: msg.as_ref().to_owned(),
+ }),
+ )
+ }
+ pub fn complete_missing(mut self, p: &mut Parser, expected: ExpectedSyntax) -> CompletedMarker {
+ self.complete_raw(
+ p,
+ SyntaxKind::ERROR_MISSING_TOKEN,
+ Some(SyntaxError::Missing { expected }),
+ )
+ }
+ pub fn complete_unexpected(
+ mut self,
+ p: &mut Parser,
+ expected: ExpectedSyntax,
+ found: SyntaxKind,
+ ) -> CompletedMarker {
+ self.complete_raw(
+ p,
+ SyntaxKind::ERROR_UNEXPECTED_TOKEN,
+ Some(SyntaxError::Unexpected { expected, found }),
+ )
+ }
+
pub fn forget(mut self, p: &mut Parser) {
self.bomb.defuse();
let event_at_pos = &mut p.events[self.start_event_idx];
- assert_eq!(*event_at_pos, Event::Pending);
+ assert!(matches!(event_at_pos, Event::Pending));
*event_at_pos = Event::Noop;
p.entered -= 1;
@@ -85,7 +130,9 @@
let new_m = p.start();
match &mut p.events[self.start_event_idx] {
Event::Start { forward_parent, .. } => {
- *forward_parent = Some(new_m.start_event_idx - self.start_event_idx);
+ *forward_parent = Some(
+ NonZeroUsize::new(new_m.start_event_idx - self.start_event_idx).expect("!= 0"),
+ );
}
_ => unreachable!(),
}
@@ -93,23 +140,48 @@
new_m
}
/// Create new node around existing marker, not counting anything that comes after it
- pub fn wrap(self, p: &mut Parser, kind: SyntaxKind) -> CompletedMarker {
+ fn wrap_raw(
+ self,
+ p: &mut Parser,
+ kind: SyntaxKind,
+ error: Option<SyntaxError>,
+ ) -> CompletedMarker {
let new_m = p.start();
match &mut p.events[self.start_event_idx] {
Event::Start { forward_parent, .. } => {
- *forward_parent = Some(new_m.start_event_idx - self.start_event_idx);
+ *forward_parent = Some(
+ NonZeroUsize::new(new_m.start_event_idx - self.start_event_idx).expect("!= 0"),
+ );
}
_ => unreachable!(),
}
- let completed = new_m.complete(p, kind);
+ let completed = new_m.complete_raw(p, kind, error);
match &mut p.events[self.finish_event_idx] {
- Event::Finish { wrapper } => {
- *wrapper = Some(completed.finish_event_idx - self.finish_event_idx);
+ Event::Finish {
+ wrapper,
+ error: _error,
+ } => {
+ *wrapper = Some(
+ NonZeroUsize::new(completed.finish_event_idx - self.finish_event_idx)
+ .expect("!= 0"),
+ );
}
_ => unreachable!(),
}
completed
}
+ pub fn wrap(self, p: &mut Parser, kind: SyntaxKind) -> CompletedMarker {
+ self.wrap_raw(p, kind, None)
+ }
+ pub fn wrap_error(self, p: &mut Parser, msg: impl AsRef<str>) -> CompletedMarker {
+ self.wrap_raw(
+ p,
+ SyntaxKind::ERROR_CUSTOM,
+ Some(SyntaxError::Custom {
+ error: msg.as_ref().to_owned(),
+ }),
+ )
+ }
}
crates/jrsonnet-rowan-parser/src/parser.rsdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/parser.rs
+++ b/crates/jrsonnet-rowan-parser/src/parser.rs
@@ -1,13 +1,12 @@
-use std::{cell::Cell, fmt::Display, rc::Rc};
+use std::{cell::Cell, fmt, rc::Rc};
use miette::{LabeledSpan, SourceOffset, SourceSpan};
-use rowan::{GreenNode, TextRange, TextSize};
+use rowan::{GreenNode, TextRange};
use crate::{
event::Event,
- lex::Lexeme,
marker::{CompletedMarker, Marker, Ranger},
- nodes::{BinaryOperatorKind, Literal, Number, Text, Trivia, UnaryOperatorKind},
+ nodes::{BinaryOperatorKind, Literal, Number, Text, UnaryOperatorKind},
token_set::SyntaxKindSet,
AstToken, SyntaxKind,
SyntaxKind::*,
@@ -17,20 +16,6 @@
pub struct Parse {
pub green_node: GreenNode,
pub errors: Vec<LocatedSyntaxError>,
-}
-
-#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
-pub enum ExpectedSyntax {
- Named(&'static str),
- Unnamed(SyntaxKind),
-}
-impl Display for ExpectedSyntax {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- match self {
- ExpectedSyntax::Named(n) => write!(f, "{}", n),
- ExpectedSyntax::Unnamed(u) => write!(f, "{:?}", u),
- }
- }
}
pub struct Parser {
@@ -41,14 +26,11 @@
pub entered: u32,
pub hints: Vec<(u32, TextRange, String)>,
pub last_error_token: usize,
- expected_syntax: Option<ExpectedSyntax>,
- expected_syntax_tracking_state: Rc<Cell<ExpectedSyntaxTrackingState>>,
+ expected_syntax_tracking_state: Rc<Cell<ExpectedSyntax>>,
steps: Cell<u64>,
}
-const DEFAULT_RECOVERY_SET: SyntaxKindSet = TS![];
-
-#[derive(Clone, Debug, PartialEq, Eq)]
+#[derive(Clone, Debug)]
pub enum SyntaxError {
Unexpected {
expected: ExpectedSyntax,
@@ -80,11 +62,11 @@
dbg!(&val);
match val.error {
SyntaxError::Unexpected { expected, found } => LabeledSpan::new_with_span(
- Some(format!("expected {}, found {:?}", expected, found)),
+ Some(format!("expected {expected}, found {found:?}")),
span,
),
SyntaxError::Missing { expected } => {
- LabeledSpan::new_with_span(Some(format!("missing {}", expected)), span)
+ LabeledSpan::new_with_span(Some(format!("missing {expected}")), span)
}
SyntaxError::Custom { error } | SyntaxError::Hint { error } => {
LabeledSpan::new_with_span(Some(error), span)
@@ -102,10 +84,7 @@
entered: 0,
last_error_token: 0,
hints: vec![],
- expected_syntax: None,
- expected_syntax_tracking_state: Rc::new(Cell::new(
- ExpectedSyntaxTrackingState::Unnamed,
- )),
+ expected_syntax_tracking_state: Rc::new(Cell::new(ExpectedSyntax::Unnamed(TS![]))),
steps: Cell::new(0),
}
}
@@ -119,9 +98,8 @@
self.hints.truncate(self.hints.len() - amount)
}
fn clear_expected_syntaxes(&mut self) {
- self.expected_syntax = None;
self.expected_syntax_tracking_state
- .set(ExpectedSyntaxTrackingState::Unnamed);
+ .set(ExpectedSyntax::Unnamed(TS![]));
}
pub fn start(&mut self) -> Marker {
let start_event_idx = self.events.len();
@@ -166,38 +144,19 @@
} else {
self.error_with_no_skip();
}
- }
- pub(crate) fn error_with_recovery_set(
- &mut self,
- recovery_set: SyntaxKindSet,
- ) -> CompletedMarker {
- self.error_with_recovery_set_no_default(recovery_set.union(DEFAULT_RECOVERY_SET))
}
pub fn error_with_no_skip(&mut self) -> CompletedMarker {
- self.error_with_recovery_set_no_default(SyntaxKindSet::ALL)
+ self.error_with_recovery_set(SyntaxKindSet::ALL)
}
- pub fn error_with_recovery_set_no_default(
- &mut self,
- recovery_set: SyntaxKindSet,
- ) -> CompletedMarker {
- let expected_syntax = self
- .expected_syntax
- .take()
- .unwrap_or(ExpectedSyntax::Named("unknown"));
+ pub fn error_with_recovery_set(&mut self, recovery_set: SyntaxKindSet) -> CompletedMarker {
+ let expected = self.expected_syntax_tracking_state.get();
self.expected_syntax_tracking_state
- .set(ExpectedSyntaxTrackingState::Unnamed);
+ .set(ExpectedSyntax::Unnamed(TS![]));
if self.at_end() || self.at_ts(recovery_set) {
- // let range = self
- // .offset
- // .unwrap_or_else(|| TextRange::at(TextSize::from(0), TextSize::from(0)));
let m = self.start();
- let m = m.complete(self, ERROR_MISSING_TOKEN);
- self.events.push(Event::Error(SyntaxError::Missing {
- expected: expected_syntax,
- }));
- return m;
+ return m.complete_missing(self, expected);
}
let current_token = self.current();
@@ -206,11 +165,7 @@
let m = self.start();
self.bump();
- let m = m.complete(self, ERROR_UNEXPECTED_TOKEN);
- self.events.push(Event::Error(SyntaxError::Unexpected {
- expected: expected_syntax,
- found: current_token,
- }));
+ let m = m.complete_unexpected(self, expected, current_token);
self.clear_expected_syntaxes();
m
}
@@ -269,8 +224,7 @@
#[must_use]
pub(crate) fn expected_syntax_name(&mut self, name: &'static str) -> ExpectedSyntaxGuard {
self.expected_syntax_tracking_state
- .set(ExpectedSyntaxTrackingState::Named);
- self.expected_syntax = Some(ExpectedSyntax::Named(name));
+ .set(ExpectedSyntax::Named(name));
ExpectedSyntaxGuard::new(Rc::clone(&self.expected_syntax_tracking_state))
}
@@ -278,12 +232,21 @@
self.nth_at(0, kind)
}
pub fn nth_at(&mut self, n: usize, kind: SyntaxKind) -> bool {
- if let ExpectedSyntaxTrackingState::Unnamed = self.expected_syntax_tracking_state.get() {
- self.expected_syntax = Some(ExpectedSyntax::Unnamed(kind));
+ if n == 0 {
+ if let ExpectedSyntax::Unnamed(kinds) = self.expected_syntax_tracking_state.get() {
+ let kinds = kinds.with(kind);
+ self.expected_syntax_tracking_state
+ .set(ExpectedSyntax::Unnamed(kinds))
+ }
}
self.nth(n) == kind
}
pub fn at_ts(&mut self, set: SyntaxKindSet) -> bool {
+ if let ExpectedSyntax::Unnamed(kinds) = self.expected_syntax_tracking_state.get() {
+ let kinds = kinds.union(set);
+ self.expected_syntax_tracking_state
+ .set(ExpectedSyntax::Unnamed(kinds))
+ }
set.contains(self.current())
}
pub fn at_end(&mut self) -> bool {
@@ -291,11 +254,11 @@
}
}
pub(crate) struct ExpectedSyntaxGuard {
- expected_syntax_tracking_state: Rc<Cell<ExpectedSyntaxTrackingState>>,
+ expected_syntax_tracking_state: Rc<Cell<ExpectedSyntax>>,
}
impl ExpectedSyntaxGuard {
- fn new(expected_syntax_tracking_state: Rc<Cell<ExpectedSyntaxTrackingState>>) -> Self {
+ fn new(expected_syntax_tracking_state: Rc<Cell<ExpectedSyntax>>) -> Self {
Self {
expected_syntax_tracking_state,
}
@@ -305,14 +268,22 @@
impl Drop for ExpectedSyntaxGuard {
fn drop(&mut self) {
self.expected_syntax_tracking_state
- .set(ExpectedSyntaxTrackingState::Unnamed);
+ .set(ExpectedSyntax::Unnamed(TS![]));
}
}
-#[derive(Debug, Clone, Copy)]
-enum ExpectedSyntaxTrackingState {
- Named,
- Unnamed,
+#[derive(Clone, Debug, Copy)]
+pub enum ExpectedSyntax {
+ Named(&'static str),
+ Unnamed(SyntaxKindSet),
+}
+impl fmt::Display for ExpectedSyntax {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ match self {
+ ExpectedSyntax::Named(name) => write!(f, "{name}"),
+ ExpectedSyntax::Unnamed(set) => write!(f, "{set}"),
+ }
+ }
}
fn expr(p: &mut Parser) -> CompletedMarker {
@@ -357,44 +328,43 @@
}
Ok(lhs)
}
-fn compspec(p: &mut Parser) {
- assert!(p.at(T![for]) || p.at(T![if]));
+
+const COMPSPEC: SyntaxKindSet = TS![for if];
+fn compspec(p: &mut Parser) -> CompletedMarker {
+ assert!(p.at_ts(COMPSPEC));
if p.at(T![for]) {
let m = p.start();
p.bump();
name(p);
p.expect(T![in]);
expr(p);
- m.complete(p, FOR_SPEC);
+ m.complete(p, FOR_SPEC)
} else if p.at(T![if]) {
let m = p.start();
p.bump();
expr(p);
- m.complete(p, IF_SPEC);
+ m.complete(p, IF_SPEC)
} else {
unreachable!()
}
}
+
fn comma(p: &mut Parser) -> bool {
- if p.at(T![,]) {
- p.bump();
- true
- } else {
- false
- }
+ comma_with_alternatives(p, TS![])
}
fn comma_with_alternatives(p: &mut Parser, set: SyntaxKindSet) -> bool {
if p.at(T![,]) {
p.bump();
true
} else if p.at_ts(set) {
- p.expect_with_no_skip(T![,]);
- p.bump();
+ let _ex = p.expected_syntax_name("comma");
+ p.expect_with_recovery_set(T![,], TS![]);
true
} else {
false
}
}
+
fn field_name(p: &mut Parser) {
let _e = p.expected_syntax_name("field name");
let m = p.start();
@@ -410,49 +380,17 @@
text(p);
m.complete(p, FIELD_NAME_FIXED);
} else {
- p.error_with_recovery_set(TS![;]);
+ m.forget(p);
+ p.error_with_recovery_set(TS![; : :: ::: '(']);
}
}
fn visibility(p: &mut Parser) {
if p.at_ts(TS![: :: :::]) {
p.bump()
} else {
- p.error_with_recovery_set(TS![]);
+ p.error_with_recovery_set(TS![=]);
}
}
-fn field(p: &mut Parser) {
- let m = p.start();
- field_name(p);
- let plus = if p.at(T![+]) {
- let r = p.start_ranger();
- p.bump();
- Some(r.finish(p))
- } else {
- None
- };
- let params = if p.at(T!['(']) {
- // if let Some(plus) = plus {
- // p.custom_error(plus, "can't extend with method");
- // }
- params_desc(p);
- // if p.at(T![+]) {
- // let r = p.start_ranger();
- // p.bump();
- // p.custom_error(r.finish(p), "can't extend with method");
- // }
- true
- } else {
- false
- };
- visibility(p);
- expr(p);
-
- if params {
- m.complete(p, FIELD_METHOD)
- } else {
- m.complete(p, FIELD_NORMAL)
- };
-}
fn assertion(p: &mut Parser) {
let m = p.start();
p.bump_assert(T![assert]);
@@ -468,11 +406,27 @@
let m = p.start();
p.bump_assert(T!['{']);
+ let mut elems = 0;
+ let mut compspecs = Vec::new();
loop {
if p.at(T!['}']) {
p.bump();
break;
}
+ if p.at_ts(COMPSPEC) {
+ if elems == 0 {
+ let m = p.start();
+ m.complete_missing(p, ExpectedSyntax::Named("field definition"));
+ }
+ while p.at_ts(COMPSPEC) {
+ compspecs.push(compspec(p));
+ }
+ if comma_with_alternatives(p, TS![;]) {
+ continue;
+ }
+ p.expect(R_BRACE);
+ break;
+ }
let m = p.start();
if p.at(T![local]) {
obj_local(p);
@@ -481,20 +435,57 @@
assertion(p);
m.complete(p, MEMBER_ASSERT_STMT)
} else {
- field(p);
- while p.at(T![for]) || p.at(T![if]) {
- compspec(p)
+ field_name(p);
+ if p.at(T![+]) {
+ p.bump();
+ }
+ let params = if p.at(T!['(']) {
+ params_desc(p);
+ visibility(p);
+ expr(p);
+ true
+ } else if p.at_ts(TS![: :: :::]) && p.nth_at(1, T![function]) {
+ visibility(p);
+ p.bump_assert(T![function]);
+ params_desc(p);
+ expr(p);
+ true
+ } else {
+ visibility(p);
+ expr(p);
+ false
+ };
+
+ if params {
+ m.complete(p, MEMBER_FIELD_METHOD)
+ } else {
+ m.complete(p, MEMBER_FIELD_NORMAL)
}
- m.complete(p, MEMBER_FIELD)
};
- if comma_with_alternatives(p, SyntaxKindSet::new(&[T![=]])) {
+ elems += 1;
+ while p.at_ts(COMPSPEC) {
+ compspecs.push(compspec(p));
+ }
+ if comma_with_alternatives(p, TS![;]) {
continue;
}
p.expect(R_BRACE);
break;
}
- m.complete(p, OBJ_BODY_MEMBER_LIST);
+ if elems > 1 && !compspecs.is_empty() {
+ for errored in compspecs {
+ errored.wrap_error(
+ p,
+ "compspec may only be used if there is only one array element",
+ );
+ }
+ m.complete(p, OBJ_BODY_MEMBER_LIST);
+ } else if !compspecs.is_empty() {
+ m.complete(p, OBJ_BODY_COMP);
+ } else {
+ m.complete(p, OBJ_BODY_MEMBER_LIST);
+ }
m_t.complete(p, EXPR_OBJECT)
}
fn param(p: &mut Parser) {
@@ -530,6 +521,7 @@
p.bump_assert(T!['(']);
let started_named = Cell::new(false);
+ let mut unnamed_after_named = Vec::new();
loop {
if p.at(T![')']) {
@@ -545,7 +537,10 @@
started_named.set(true);
} else {
expr(p);
- m.complete(p, ARG);
+ let arg = m.complete(p, ARG);
+ if started_named.get() {
+ unnamed_after_named.push(arg)
+ }
}
if comma(p) {
continue;
@@ -556,6 +551,11 @@
if p.at(T![tailstrict]) {
p.bump()
}
+
+ for errored in unnamed_after_named {
+ errored.wrap_error(p, "can't use positional arguments after named");
+ }
+
m.complete(p, ARGS_DESC);
}
@@ -564,8 +564,7 @@
let m = p.start();
p.bump_assert(T!['[']);
- // This vec will have at most one element in case of correct input
- let mut compspecs = Vec::with_capacity(1);
+ let mut compspecs = Vec::new();
let mut elems = 0;
loop {
@@ -573,16 +572,20 @@
p.bump();
break;
}
+ if elems != 0 && p.at_ts(COMPSPEC) {
+ while p.at_ts(COMPSPEC) {
+ compspecs.push(compspec(p));
+ }
+ if comma(p) {
+ continue;
+ }
+ p.expect(T![']']);
+ break;
+ }
elems += 1;
expr(p);
- let c = p.start_ranger();
- let mut had_spec = false;
- while p.at(T![for]) || p.at(T![if]) {
- had_spec = true;
- compspec(p)
- }
- if had_spec {
- compspecs.push(c.finish(p));
+ while p.at_ts(COMPSPEC) {
+ compspecs.push(compspec(p));
}
if comma(p) {
continue;
@@ -593,10 +596,10 @@
if elems > 1 && !compspecs.is_empty() {
for spec in compspecs {
- // p.custom_error(
- // spec,
- // "compspec may only be used if there is only one array element",
- // )
+ spec.wrap_error(
+ p,
+ "compspec may only be used if there is only one array element",
+ );
}
m.complete(p, EXPR_ARRAY)
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec.snapdiffbeforeafterboth--- /dev/null
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec.snap
@@ -0,0 +1,34 @@
+---
+source: crates/jrsonnet-rowan-parser/src/tests.rs
+expression: "[a for a in [1, 2, 3]]\n"
+---
+SOURCE_FILE@0..23
+ EXPR_ARRAY_COMP@0..22
+ L_BRACK@0..1 "["
+ EXPR_VAR@1..2
+ NAME@1..2
+ IDENT@1..2 "a"
+ WHITESPACE@2..3 " "
+ FOR_SPEC@3..21
+ FOR_KW@3..6 "for"
+ WHITESPACE@6..7 " "
+ NAME@7..8
+ IDENT@7..8 "a"
+ WHITESPACE@8..9 " "
+ IN_KW@9..11 "in"
+ WHITESPACE@11..12 " "
+ EXPR_ARRAY@12..21
+ L_BRACK@12..13 "["
+ EXPR_NUMBER@13..14
+ FLOAT@13..14 "1"
+ COMMA@14..15 ","
+ WHITESPACE@15..16 " "
+ EXPR_NUMBER@16..17
+ FLOAT@16..17 "2"
+ COMMA@17..18 ","
+ WHITESPACE@18..19 " "
+ EXPR_NUMBER@19..20
+ FLOAT@19..20 "3"
+ R_BRACK@20..21 "]"
+ R_BRACK@21..22 "]"
+ WHITESPACE@22..23 "\n"
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_comma.snapdiffbeforeafterboth--- /dev/null
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_comma.snap
@@ -0,0 +1,35 @@
+---
+source: crates/jrsonnet-rowan-parser/src/tests.rs
+expression: "[a, for a in [1, 2, 3]]\n"
+---
+SOURCE_FILE@0..24
+ EXPR_ARRAY_COMP@0..23
+ L_BRACK@0..1 "["
+ EXPR_VAR@1..2
+ NAME@1..2
+ IDENT@1..2 "a"
+ COMMA@2..3 ","
+ WHITESPACE@3..4 " "
+ FOR_SPEC@4..22
+ FOR_KW@4..7 "for"
+ WHITESPACE@7..8 " "
+ NAME@8..9
+ IDENT@8..9 "a"
+ WHITESPACE@9..10 " "
+ IN_KW@10..12 "in"
+ WHITESPACE@12..13 " "
+ EXPR_ARRAY@13..22
+ L_BRACK@13..14 "["
+ EXPR_NUMBER@14..15
+ FLOAT@14..15 "1"
+ COMMA@15..16 ","
+ WHITESPACE@16..17 " "
+ EXPR_NUMBER@17..18
+ FLOAT@17..18 "2"
+ COMMA@18..19 ","
+ WHITESPACE@19..20 " "
+ EXPR_NUMBER@20..21
+ FLOAT@20..21 "3"
+ R_BRACK@21..22 "]"
+ R_BRACK@22..23 "]"
+ WHITESPACE@23..24 "\n"
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_incompatible_with_multiple_elems.snapdiffbeforeafterboth--- /dev/null
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_incompatible_with_multiple_elems.snap
@@ -0,0 +1,49 @@
+---
+source: crates/jrsonnet-rowan-parser/src/tests.rs
+expression: "[a for a in [1, 2, 3], b]\n"
+---
+SOURCE_FILE@0..26
+ EXPR_ARRAY@0..25
+ L_BRACK@0..1 "["
+ EXPR_VAR@1..2
+ NAME@1..2
+ IDENT@1..2 "a"
+ WHITESPACE@2..3 " "
+ ERROR_CUSTOM@3..21
+ FOR_SPEC@3..21
+ FOR_KW@3..6 "for"
+ WHITESPACE@6..7 " "
+ NAME@7..8
+ IDENT@7..8 "a"
+ WHITESPACE@8..9 " "
+ IN_KW@9..11 "in"
+ WHITESPACE@11..12 " "
+ EXPR_ARRAY@12..21
+ L_BRACK@12..13 "["
+ EXPR_NUMBER@13..14
+ FLOAT@13..14 "1"
+ COMMA@14..15 ","
+ WHITESPACE@15..16 " "
+ EXPR_NUMBER@16..17
+ FLOAT@16..17 "2"
+ COMMA@17..18 ","
+ WHITESPACE@18..19 " "
+ EXPR_NUMBER@19..20
+ FLOAT@19..20 "3"
+ R_BRACK@20..21 "]"
+ COMMA@21..22 ","
+ WHITESPACE@22..23 " "
+ EXPR_VAR@23..24
+ NAME@23..24
+ IDENT@23..24 "b"
+ R_BRACK@24..25 "]"
+ WHITESPACE@25..26 "\n"
+===
+LocatedSyntaxError { error: Custom { error: "compspec may only be used if there is only one array element" }, range: 3..21 }
+===
+ x syntax error
+ ,----
+ 1 | [a for a in [1, 2, 3], b]
+ : ^^^^^^^^^|^^^^^^^^
+ : `-- compspec may only be used if there is only one array element
+ `----
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_incompatible_with_multiple_elems_w.snapdiffbeforeafterboth--- /dev/null
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_incompatible_with_multiple_elems_w.snap
@@ -0,0 +1,55 @@
+---
+source: crates/jrsonnet-rowan-parser/src/tests.rs
+expression: "[a, b, for a in [1, 2, 3], c]\n"
+---
+SOURCE_FILE@0..30
+ EXPR_ARRAY@0..29
+ L_BRACK@0..1 "["
+ EXPR_VAR@1..2
+ NAME@1..2
+ IDENT@1..2 "a"
+ COMMA@2..3 ","
+ WHITESPACE@3..4 " "
+ EXPR_VAR@4..5
+ NAME@4..5
+ IDENT@4..5 "b"
+ COMMA@5..6 ","
+ WHITESPACE@6..7 " "
+ ERROR_CUSTOM@7..25
+ FOR_SPEC@7..25
+ FOR_KW@7..10 "for"
+ WHITESPACE@10..11 " "
+ NAME@11..12
+ IDENT@11..12 "a"
+ WHITESPACE@12..13 " "
+ IN_KW@13..15 "in"
+ WHITESPACE@15..16 " "
+ EXPR_ARRAY@16..25
+ L_BRACK@16..17 "["
+ EXPR_NUMBER@17..18
+ FLOAT@17..18 "1"
+ COMMA@18..19 ","
+ WHITESPACE@19..20 " "
+ EXPR_NUMBER@20..21
+ FLOAT@20..21 "2"
+ COMMA@21..22 ","
+ WHITESPACE@22..23 " "
+ EXPR_NUMBER@23..24
+ FLOAT@23..24 "3"
+ R_BRACK@24..25 "]"
+ COMMA@25..26 ","
+ WHITESPACE@26..27 " "
+ EXPR_VAR@27..28
+ NAME@27..28
+ IDENT@27..28 "c"
+ R_BRACK@28..29 "]"
+ WHITESPACE@29..30 "\n"
+===
+LocatedSyntaxError { error: Custom { error: "compspec may only be used if there is only one array element" }, range: 7..25 }
+===
+ x syntax error
+ ,----
+ 1 | [a, b, for a in [1, 2, 3], c]
+ : ^^^^^^^^^|^^^^^^^^
+ : `-- compspec may only be used if there is only one array element
+ `----
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_no_elems.snapdiffbeforeafterboth--- /dev/null
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_no_elems.snap
@@ -0,0 +1,40 @@
+---
+source: crates/jrsonnet-rowan-parser/src/tests.rs
+expression: "[for a in [1, 2, 3]]\n"
+---
+SOURCE_FILE@0..21
+ EXPR_ARRAY_COMP@0..20
+ L_BRACK@0..1 "["
+ ERROR_MISSING_TOKEN@1..1
+ FOR_SPEC@1..19
+ FOR_KW@1..4 "for"
+ WHITESPACE@4..5 " "
+ NAME@5..6
+ IDENT@5..6 "a"
+ WHITESPACE@6..7 " "
+ IN_KW@7..9 "in"
+ WHITESPACE@9..10 " "
+ EXPR_ARRAY@10..19
+ L_BRACK@10..11 "["
+ EXPR_NUMBER@11..12
+ FLOAT@11..12 "1"
+ COMMA@12..13 ","
+ WHITESPACE@13..14 " "
+ EXPR_NUMBER@14..15
+ FLOAT@14..15 "2"
+ COMMA@15..16 ","
+ WHITESPACE@16..17 " "
+ EXPR_NUMBER@17..18
+ FLOAT@17..18 "3"
+ R_BRACK@18..19 "]"
+ R_BRACK@19..20 "]"
+ WHITESPACE@20..21 "\n"
+===
+LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 1..1 }
+===
+ x syntax error
+ ,----
+ 1 | [for a in [1, 2, 3]]
+ : ^
+ : `-- missing expression
+ `----
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
@@ -21,7 +21,7 @@
ERROR_MISSING_TOKEN@14..14
ERROR_MISSING_TOKEN@14..14
===
-LocatedSyntaxError { error: Missing { expected: Unnamed(R_PAREN) }, range: 14..14 }
+LocatedSyntaxError { error: Missing { expected: Unnamed(SyntaxKindSet([R_PAREN, COMMA, ASSIGN])) }, range: 14..14 }
LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 14..14 }
===
x syntax error
@@ -29,5 +29,5 @@
1 | function(a, b
: ^^
: |`-- missing expression
- : `-- missing R_PAREN
+ : `-- missing R_PAREN, COMMA or ASSIGN
`----
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_method.snapdiffbeforeafterboth--- /dev/null
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_method.snap
@@ -0,0 +1,52 @@
+---
+source: crates/jrsonnet-rowan-parser/src/tests.rs
+expression: "local\n\ta(x) = x,\n\ta = function(x) x,\n; c\n"
+---
+SOURCE_FILE@0..41
+ EXPR_LOCAL@0..40
+ LOCAL_KW@0..5 "local"
+ WHITESPACE@5..7 "\n\t"
+ BIND_FUNCTION@7..15
+ NAME@7..8
+ IDENT@7..8 "a"
+ PARAMS_DESC@8..11
+ L_PAREN@8..9 "("
+ PARAM@9..10
+ DESTRUCT_FULL@9..10
+ NAME@9..10
+ IDENT@9..10 "x"
+ R_PAREN@10..11 ")"
+ WHITESPACE@11..12 " "
+ ASSIGN@12..13 "="
+ WHITESPACE@13..14 " "
+ EXPR_VAR@14..15
+ NAME@14..15
+ IDENT@14..15 "x"
+ COMMA@15..16 ","
+ WHITESPACE@16..18 "\n\t"
+ BIND_FUNCTION@18..35
+ NAME@18..19
+ IDENT@18..19 "a"
+ WHITESPACE@19..20 " "
+ ASSIGN@20..21 "="
+ WHITESPACE@21..22 " "
+ FUNCTION_KW@22..30 "function"
+ PARAMS_DESC@30..33
+ L_PAREN@30..31 "("
+ PARAM@31..32
+ DESTRUCT_FULL@31..32
+ NAME@31..32
+ IDENT@31..32 "x"
+ R_PAREN@32..33 ")"
+ WHITESPACE@33..34 " "
+ EXPR_VAR@34..35
+ NAME@34..35
+ IDENT@34..35 "x"
+ COMMA@35..36 ","
+ WHITESPACE@36..37 "\n"
+ SEMI@37..38 ";"
+ WHITESPACE@38..39 " "
+ EXPR_VAR@39..40
+ NAME@39..40
+ IDENT@39..40 "c"
+ WHITESPACE@40..41 "\n"
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
@@ -33,7 +33,7 @@
ERROR_MISSING_TOKEN@25..25
ERROR_MISSING_TOKEN@25..25
===
-LocatedSyntaxError { error: Missing { expected: Unnamed(SEMI) }, range: 25..25 }
+LocatedSyntaxError { error: Missing { expected: Unnamed(SyntaxKindSet([L_BRACK, L_PAREN, L_BRACE, SEMI, DOT, COMMA])) }, range: 25..25 }
LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 25..25 }
===
x syntax error
@@ -42,5 +42,5 @@
3 | 1
: ^^
: |`-- missing expression
- : `-- missing SEMI
+ : `-- missing L_BRACK, L_PAREN, L_BRACE, SEMI, DOT or COMMA
`----
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
@@ -18,7 +18,7 @@
ERROR_MISSING_TOKEN@10..10
===
LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 10..10 }
-LocatedSyntaxError { error: Missing { expected: Unnamed(SEMI) }, range: 10..10 }
+LocatedSyntaxError { error: Missing { expected: Unnamed(SyntaxKindSet([SEMI, COMMA])) }, range: 10..10 }
LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 10..10 }
===
x syntax error
@@ -26,6 +26,6 @@
1 | local a =
: ^^^
: `-- missing expression
- : |`-- missing SEMI
+ : |`-- missing SEMI or COMMA
: `-- missing expression
`----
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__named_before_positional.snapdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__named_before_positional.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__named_before_positional.snap
@@ -3,59 +3,68 @@
expression: "a(1, 2, b=4, 3, 5, k = 12, 6)\n"
---
SOURCE_FILE@0..30
- EXPR_APPLY@0..30
+ EXPR_APPLY@0..29
EXPR_VAR@0..1
- IDENT@0..1 "a"
- L_PAREN@1..2 "("
- ARG@2..3
- EXPR_NUMBER@2..3
- NUMBER@2..3 "1"
- COMMA@3..4 ","
- WHITESPACE@4..5 " "
- ARG@5..6
- EXPR_NUMBER@5..6
- NUMBER@5..6 "2"
- COMMA@6..7 ","
- WHITESPACE@7..8 " "
- ARG@8..11
- IDENT@8..9 "b"
- ASSIGN@9..10 "="
- EXPR_NUMBER@10..11
- NUMBER@10..11 "4"
- COMMA@11..12 ","
- WHITESPACE@12..13 " "
- ERROR@13..28
- ARG@13..14
- EXPR_NUMBER@13..14
- NUMBER@13..14 "3"
+ NAME@0..1
+ IDENT@0..1 "a"
+ ARGS_DESC@1..29
+ L_PAREN@1..2 "("
+ ARG@2..3
+ EXPR_NUMBER@2..3
+ FLOAT@2..3 "1"
+ COMMA@3..4 ","
+ WHITESPACE@4..5 " "
+ ARG@5..6
+ EXPR_NUMBER@5..6
+ FLOAT@5..6 "2"
+ COMMA@6..7 ","
+ WHITESPACE@7..8 " "
+ ARG@8..11
+ NAME@8..9
+ IDENT@8..9 "b"
+ ASSIGN@9..10 "="
+ EXPR_NUMBER@10..11
+ FLOAT@10..11 "4"
+ COMMA@11..12 ","
+ WHITESPACE@12..13 " "
+ ERROR_CUSTOM@13..14
+ ARG@13..14
+ EXPR_NUMBER@13..14
+ FLOAT@13..14 "3"
COMMA@14..15 ","
WHITESPACE@15..16 " "
- ARG@16..17
- EXPR_NUMBER@16..17
- NUMBER@16..17 "5"
+ ERROR_CUSTOM@16..17
+ ARG@16..17
+ EXPR_NUMBER@16..17
+ FLOAT@16..17 "5"
COMMA@17..18 ","
WHITESPACE@18..19 " "
ARG@19..25
- IDENT@19..20 "k"
+ NAME@19..20
+ IDENT@19..20 "k"
WHITESPACE@20..21 " "
ASSIGN@21..22 "="
WHITESPACE@22..23 " "
EXPR_NUMBER@23..25
- NUMBER@23..25 "12"
+ FLOAT@23..25 "12"
COMMA@25..26 ","
WHITESPACE@26..27 " "
- ARG@27..28
- EXPR_NUMBER@27..28
- NUMBER@27..28 "6"
- R_PAREN@28..29 ")"
- WHITESPACE@29..30 "\n"
+ ERROR_CUSTOM@27..28
+ ARG@27..28
+ EXPR_NUMBER@27..28
+ FLOAT@27..28 "6"
+ R_PAREN@28..29 ")"
+ WHITESPACE@29..30 "\n"
===
-Custom { error: "positional arguments can't be placed after named", range: 13..28 }
+LocatedSyntaxError { error: Custom { error: "can't use positional arguments after named" }, range: 13..14 }
+LocatedSyntaxError { error: Custom { error: "can't use positional arguments after named" }, range: 16..17 }
+LocatedSyntaxError { error: Custom { error: "can't use positional arguments after named" }, range: 27..28 }
===
x syntax error
,----
1 | a(1, 2, b=4, 3, 5, k = 12, 6)
- : ^^^^^^^|^^^^^^^
- : `-- positional arguments can't be placed after named
+ : | | |
+ : | | `-- can't use positional arguments after named
+ : | `-- can't use positional arguments after named
+ : `-- can't use positional arguments after named
`----
-
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
@@ -9,7 +9,7 @@
WHITESPACE@1..2 " "
===
LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 0..0 }
-LocatedSyntaxError { error: Unexpected { expected: Unnamed(EOF), found: PLUS }, range: 0..1 }
+LocatedSyntaxError { error: Unexpected { expected: Unnamed(SyntaxKindSet([EOF])), found: PLUS }, range: 0..1 }
===
x syntax error
,----
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
@@ -10,11 +10,11 @@
FLOAT@2..3 "2"
WHITESPACE@3..4 "\n"
===
-LocatedSyntaxError { error: Unexpected { expected: Unnamed(EOF), found: FLOAT }, range: 2..3 }
+LocatedSyntaxError { error: Unexpected { expected: Unnamed(SyntaxKindSet([EOF, L_BRACK, L_PAREN, L_BRACE, DOT])), found: FLOAT }, range: 2..3 }
===
x syntax error
,----
1 | 2 2
: |
- : `-- expected EOF, found FLOAT
+ : `-- expected EOF, L_BRACK, L_PAREN, L_BRACE or DOT, found FLOAT
`----
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec.snapdiffbeforeafterboth--- /dev/null
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec.snap
@@ -0,0 +1,39 @@
+---
+source: crates/jrsonnet-rowan-parser/src/tests.rs
+expression: "{a:1 for a in [1, 2, 3]}\n"
+---
+SOURCE_FILE@0..25
+ EXPR_OBJECT@0..24
+ OBJ_BODY_COMP@0..24
+ L_BRACE@0..1 "{"
+ MEMBER_FIELD_NORMAL@1..4
+ FIELD_NAME_FIXED@1..2
+ NAME@1..2
+ IDENT@1..2 "a"
+ COLON@2..3 ":"
+ EXPR_NUMBER@3..4
+ FLOAT@3..4 "1"
+ WHITESPACE@4..5 " "
+ FOR_SPEC@5..23
+ FOR_KW@5..8 "for"
+ WHITESPACE@8..9 " "
+ NAME@9..10
+ IDENT@9..10 "a"
+ WHITESPACE@10..11 " "
+ IN_KW@11..13 "in"
+ WHITESPACE@13..14 " "
+ EXPR_ARRAY@14..23
+ L_BRACK@14..15 "["
+ EXPR_NUMBER@15..16
+ FLOAT@15..16 "1"
+ COMMA@16..17 ","
+ WHITESPACE@17..18 " "
+ EXPR_NUMBER@18..19
+ FLOAT@18..19 "2"
+ COMMA@19..20 ","
+ WHITESPACE@20..21 " "
+ EXPR_NUMBER@21..22
+ FLOAT@21..22 "3"
+ R_BRACK@22..23 "]"
+ R_BRACE@23..24 "}"
+ WHITESPACE@24..25 "\n"
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_comma.snapdiffbeforeafterboth--- /dev/null
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_comma.snap
@@ -0,0 +1,40 @@
+---
+source: crates/jrsonnet-rowan-parser/src/tests.rs
+expression: "{a:1, for a in [1, 2, 3]}\n"
+---
+SOURCE_FILE@0..26
+ EXPR_OBJECT@0..25
+ OBJ_BODY_COMP@0..25
+ L_BRACE@0..1 "{"
+ MEMBER_FIELD_NORMAL@1..4
+ FIELD_NAME_FIXED@1..2
+ NAME@1..2
+ IDENT@1..2 "a"
+ COLON@2..3 ":"
+ EXPR_NUMBER@3..4
+ FLOAT@3..4 "1"
+ COMMA@4..5 ","
+ WHITESPACE@5..6 " "
+ FOR_SPEC@6..24
+ FOR_KW@6..9 "for"
+ WHITESPACE@9..10 " "
+ NAME@10..11
+ IDENT@10..11 "a"
+ WHITESPACE@11..12 " "
+ IN_KW@12..14 "in"
+ WHITESPACE@14..15 " "
+ EXPR_ARRAY@15..24
+ L_BRACK@15..16 "["
+ EXPR_NUMBER@16..17
+ FLOAT@16..17 "1"
+ COMMA@17..18 ","
+ WHITESPACE@18..19 " "
+ EXPR_NUMBER@19..20
+ FLOAT@19..20 "2"
+ COMMA@20..21 ","
+ WHITESPACE@21..22 " "
+ EXPR_NUMBER@22..23
+ FLOAT@22..23 "3"
+ R_BRACK@23..24 "]"
+ R_BRACE@24..25 "}"
+ WHITESPACE@25..26 "\n"
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_multiple_elems.snapdiffbeforeafterboth--- /dev/null
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_multiple_elems.snap
@@ -0,0 +1,58 @@
+---
+source: crates/jrsonnet-rowan-parser/src/tests.rs
+expression: "{a:1 for a in [1, 2, 3], b:1}\n"
+---
+SOURCE_FILE@0..30
+ EXPR_OBJECT@0..29
+ OBJ_BODY_MEMBER_LIST@0..29
+ L_BRACE@0..1 "{"
+ MEMBER_FIELD_NORMAL@1..4
+ FIELD_NAME_FIXED@1..2
+ NAME@1..2
+ IDENT@1..2 "a"
+ COLON@2..3 ":"
+ EXPR_NUMBER@3..4
+ FLOAT@3..4 "1"
+ WHITESPACE@4..5 " "
+ ERROR_CUSTOM@5..23
+ FOR_SPEC@5..23
+ FOR_KW@5..8 "for"
+ WHITESPACE@8..9 " "
+ NAME@9..10
+ IDENT@9..10 "a"
+ WHITESPACE@10..11 " "
+ IN_KW@11..13 "in"
+ WHITESPACE@13..14 " "
+ EXPR_ARRAY@14..23
+ L_BRACK@14..15 "["
+ EXPR_NUMBER@15..16
+ FLOAT@15..16 "1"
+ COMMA@16..17 ","
+ WHITESPACE@17..18 " "
+ EXPR_NUMBER@18..19
+ FLOAT@18..19 "2"
+ COMMA@19..20 ","
+ WHITESPACE@20..21 " "
+ EXPR_NUMBER@21..22
+ FLOAT@21..22 "3"
+ R_BRACK@22..23 "]"
+ COMMA@23..24 ","
+ WHITESPACE@24..25 " "
+ MEMBER_FIELD_NORMAL@25..28
+ FIELD_NAME_FIXED@25..26
+ NAME@25..26
+ IDENT@25..26 "b"
+ COLON@26..27 ":"
+ EXPR_NUMBER@27..28
+ FLOAT@27..28 "1"
+ R_BRACE@28..29 "}"
+ WHITESPACE@29..30 "\n"
+===
+LocatedSyntaxError { error: Custom { error: "compspec may only be used if there is only one array element" }, range: 5..23 }
+===
+ x syntax error
+ ,----
+ 1 | {a:1 for a in [1, 2, 3], b:1}
+ : ^^^^^^^^^|^^^^^^^^
+ : `-- compspec may only be used if there is only one array element
+ `----
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_multiple_elems_w.snapdiffbeforeafterboth--- /dev/null
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_multiple_elems_w.snap
@@ -0,0 +1,68 @@
+---
+source: crates/jrsonnet-rowan-parser/src/tests.rs
+expression: "{a:1, b:1, for a in [1, 2, 3], c:1}\n"
+---
+SOURCE_FILE@0..36
+ EXPR_OBJECT@0..35
+ OBJ_BODY_MEMBER_LIST@0..35
+ L_BRACE@0..1 "{"
+ MEMBER_FIELD_NORMAL@1..4
+ FIELD_NAME_FIXED@1..2
+ NAME@1..2
+ IDENT@1..2 "a"
+ COLON@2..3 ":"
+ EXPR_NUMBER@3..4
+ FLOAT@3..4 "1"
+ COMMA@4..5 ","
+ WHITESPACE@5..6 " "
+ MEMBER_FIELD_NORMAL@6..9
+ FIELD_NAME_FIXED@6..7
+ NAME@6..7
+ IDENT@6..7 "b"
+ COLON@7..8 ":"
+ EXPR_NUMBER@8..9
+ FLOAT@8..9 "1"
+ COMMA@9..10 ","
+ WHITESPACE@10..11 " "
+ ERROR_CUSTOM@11..29
+ FOR_SPEC@11..29
+ FOR_KW@11..14 "for"
+ WHITESPACE@14..15 " "
+ NAME@15..16
+ IDENT@15..16 "a"
+ WHITESPACE@16..17 " "
+ IN_KW@17..19 "in"
+ WHITESPACE@19..20 " "
+ EXPR_ARRAY@20..29
+ L_BRACK@20..21 "["
+ EXPR_NUMBER@21..22
+ FLOAT@21..22 "1"
+ COMMA@22..23 ","
+ WHITESPACE@23..24 " "
+ EXPR_NUMBER@24..25
+ FLOAT@24..25 "2"
+ COMMA@25..26 ","
+ WHITESPACE@26..27 " "
+ EXPR_NUMBER@27..28
+ FLOAT@27..28 "3"
+ R_BRACK@28..29 "]"
+ COMMA@29..30 ","
+ WHITESPACE@30..31 " "
+ MEMBER_FIELD_NORMAL@31..34
+ FIELD_NAME_FIXED@31..32
+ NAME@31..32
+ IDENT@31..32 "c"
+ COLON@32..33 ":"
+ EXPR_NUMBER@33..34
+ FLOAT@33..34 "1"
+ R_BRACE@34..35 "}"
+ WHITESPACE@35..36 "\n"
+===
+LocatedSyntaxError { error: Custom { error: "compspec may only be used if there is only one array element" }, range: 11..29 }
+===
+ x syntax error
+ ,----
+ 1 | {a:1, b:1, for a in [1, 2, 3], c:1}
+ : ^^^^^^^^^|^^^^^^^^
+ : `-- compspec may only be used if there is only one array element
+ `----
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_no_elems.snapdiffbeforeafterboth--- /dev/null
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_no_elems.snap
@@ -0,0 +1,41 @@
+---
+source: crates/jrsonnet-rowan-parser/src/tests.rs
+expression: "{for a in [1, 2, 3]}\n"
+---
+SOURCE_FILE@0..21
+ EXPR_OBJECT@0..20
+ OBJ_BODY_COMP@0..20
+ L_BRACE@0..1 "{"
+ ERROR_MISSING_TOKEN@1..1
+ FOR_SPEC@1..19
+ FOR_KW@1..4 "for"
+ WHITESPACE@4..5 " "
+ NAME@5..6
+ IDENT@5..6 "a"
+ WHITESPACE@6..7 " "
+ IN_KW@7..9 "in"
+ WHITESPACE@9..10 " "
+ EXPR_ARRAY@10..19
+ L_BRACK@10..11 "["
+ EXPR_NUMBER@11..12
+ FLOAT@11..12 "1"
+ COMMA@12..13 ","
+ WHITESPACE@13..14 " "
+ EXPR_NUMBER@14..15
+ FLOAT@14..15 "2"
+ COMMA@15..16 ","
+ WHITESPACE@16..17 " "
+ EXPR_NUMBER@17..18
+ FLOAT@17..18 "3"
+ R_BRACK@18..19 "]"
+ R_BRACE@19..20 "}"
+ WHITESPACE@20..21 "\n"
+===
+LocatedSyntaxError { error: Missing { expected: Named("field definition") }, range: 1..1 }
+===
+ x syntax error
+ ,----
+ 1 | {for a in [1, 2, 3]}
+ : ^
+ : `-- missing field definition
+ `----
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_method.snapdiffbeforeafterboth--- /dev/null
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_method.snap
@@ -0,0 +1,49 @@
+---
+source: crates/jrsonnet-rowan-parser/src/tests.rs
+expression: "{\n\ta(x): x,\n\ta: function(x) x,\n}\n"
+---
+SOURCE_FILE@0..33
+ EXPR_OBJECT@0..32
+ OBJ_BODY_MEMBER_LIST@0..32
+ L_BRACE@0..1 "{"
+ WHITESPACE@1..3 "\n\t"
+ MEMBER_FIELD_METHOD@3..10
+ FIELD_NAME_FIXED@3..4
+ NAME@3..4
+ IDENT@3..4 "a"
+ PARAMS_DESC@4..7
+ L_PAREN@4..5 "("
+ PARAM@5..6
+ DESTRUCT_FULL@5..6
+ NAME@5..6
+ IDENT@5..6 "x"
+ R_PAREN@6..7 ")"
+ COLON@7..8 ":"
+ WHITESPACE@8..9 " "
+ EXPR_VAR@9..10
+ NAME@9..10
+ IDENT@9..10 "x"
+ COMMA@10..11 ","
+ WHITESPACE@11..13 "\n\t"
+ MEMBER_FIELD_METHOD@13..29
+ FIELD_NAME_FIXED@13..14
+ NAME@13..14
+ IDENT@13..14 "a"
+ COLON@14..15 ":"
+ WHITESPACE@15..16 " "
+ FUNCTION_KW@16..24 "function"
+ PARAMS_DESC@24..27
+ L_PAREN@24..25 "("
+ PARAM@25..26
+ DESTRUCT_FULL@25..26
+ NAME@25..26
+ IDENT@25..26 "x"
+ R_PAREN@26..27 ")"
+ WHITESPACE@27..28 " "
+ EXPR_VAR@28..29
+ NAME@28..29
+ IDENT@28..29 "x"
+ COMMA@29..30 ","
+ WHITESPACE@30..31 "\n"
+ R_BRACE@31..32 "}"
+ WHITESPACE@32..33 "\n"
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__stdlib.snapdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__stdlib.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__stdlib.snap
@@ -42,2575 +42,2553 @@
IDENT@39..41 "id"
COMMA@41..42 ","
WHITESPACE@42..46 "\n\n "
- MEMBER_FIELD@46..224
- FIELD_NORMAL@46..224
- FIELD_NAME_FIXED@46..54
- NAME@46..54
- IDENT@46..54 "thisFile"
- COLONCOLON@54..56 "::"
- WHITESPACE@56..57 " "
- EXPR_ERROR@57..224
- ERROR_KW@57..62 "error"
- WHITESPACE@62..63 " "
- EXPR_STRING@63..224
- STRING_SINGLE@63..224 "'std.thisFile is depr ..."
+ MEMBER_FIELD_NORMAL@46..224
+ FIELD_NAME_FIXED@46..54
+ NAME@46..54
+ IDENT@46..54 "thisFile"
+ COLONCOLON@54..56 "::"
+ WHITESPACE@56..57 " "
+ EXPR_ERROR@57..224
+ ERROR_KW@57..62 "error"
+ WHITESPACE@62..63 " "
+ EXPR_STRING@63..224
+ STRING_SINGLE@63..224 "'std.thisFile is depr ..."
COMMA@224..225 ","
WHITESPACE@225..229 "\n\n "
- MEMBER_FIELD@229..249
- FIELD_METHOD@229..249
- FIELD_NAME_FIXED@229..237
- NAME@229..237
- IDENT@229..237 "toString"
- PARAMS_DESC@237..240
- L_PAREN@237..238 "("
- PARAM@238..239
- DESTRUCT_FULL@238..239
- NAME@238..239
- IDENT@238..239 "a"
- R_PAREN@239..240 ")"
- COLONCOLON@240..242 "::"
- WHITESPACE@242..243 " "
- EXPR_BINARY@243..249
- LHS_EXPR@243..245
- EXPR_STRING@243..245
- STRING_SINGLE@243..245 "''"
- WHITESPACE@245..246 " "
- PLUS@246..247 "+"
- WHITESPACE@247..248 " "
- EXPR_VAR@248..249
- NAME@248..249
- IDENT@248..249 "a"
+ MEMBER_FIELD_METHOD@229..249
+ FIELD_NAME_FIXED@229..237
+ NAME@229..237
+ IDENT@229..237 "toString"
+ PARAMS_DESC@237..240
+ L_PAREN@237..238 "("
+ PARAM@238..239
+ DESTRUCT_FULL@238..239
+ NAME@238..239
+ IDENT@238..239 "a"
+ R_PAREN@239..240 ")"
+ COLONCOLON@240..242 "::"
+ WHITESPACE@242..243 " "
+ EXPR_BINARY@243..249
+ LHS_EXPR@243..245
+ EXPR_STRING@243..245
+ STRING_SINGLE@243..245 "''"
+ WHITESPACE@245..246 " "
+ PLUS@246..247 "+"
+ WHITESPACE@247..248 " "
+ EXPR_VAR@248..249
+ NAME@248..249
+ IDENT@248..249 "a"
COMMA@249..250 ","
WHITESPACE@250..254 "\n\n "
- MEMBER_FIELD@254..397
- FIELD_METHOD@254..397
- FIELD_NAME_FIXED@254..265
- NAME@254..265
- IDENT@254..265 "lstripChars"
- PARAMS_DESC@265..277
- L_PAREN@265..266 "("
- PARAM@266..269
- DESTRUCT_FULL@266..269
- NAME@266..269
- IDENT@266..269 "str"
- COMMA@269..270 ","
- WHITESPACE@270..271 " "
- PARAM@271..276
- DESTRUCT_FULL@271..276
- NAME@271..276
- IDENT@271..276 "chars"
- R_PAREN@276..277 ")"
- COLONCOLON@277..279 "::"
- WHITESPACE@279..284 "\n "
- EXPR_IF_THEN_ELSE@284..397
- IF_KW@284..286 "if"
- WHITESPACE@286..287 " "
- EXPR_BINARY@287..335
- LHS_EXPR@287..306
- EXPR_BINARY@287..306
- LHS_EXPR@287..302
- EXPR_APPLY@287..302
- EXPR_INDEX@287..297
- EXPR_VAR@287..290
- NAME@287..290
- IDENT@287..290 "std"
- DOT@290..291 "."
- NAME@291..297
- IDENT@291..297 "length"
- ARGS_DESC@297..302
- L_PAREN@297..298 "("
- ARG@298..301
- EXPR_VAR@298..301
- NAME@298..301
- IDENT@298..301 "str"
- R_PAREN@301..302 ")"
- WHITESPACE@302..303 " "
- GT@303..304 ">"
- WHITESPACE@304..305 " "
- EXPR_NUMBER@305..306
- FLOAT@305..306 "0"
- WHITESPACE@306..307 " "
- AND@307..309 "&&"
- WHITESPACE@309..310 " "
- EXPR_APPLY@310..335
- EXPR_INDEX@310..320
- EXPR_VAR@310..313
- NAME@310..313
- IDENT@310..313 "std"
- DOT@313..314 "."
- NAME@314..320
- IDENT@314..320 "member"
- ARGS_DESC@320..335
- L_PAREN@320..321 "("
- ARG@321..326
- EXPR_VAR@321..326
- NAME@321..326
- IDENT@321..326 "chars"
- COMMA@326..327 ","
- WHITESPACE@327..328 " "
- ARG@328..334
- EXPR_INDEX_EXPR@328..334
- LHS_EXPR@328..331
- EXPR_VAR@328..331
- NAME@328..331
- IDENT@328..331 "str"
- L_BRACK@331..332 "["
- EXPR_NUMBER@332..333
- FLOAT@332..333 "0"
- R_BRACK@333..334 "]"
- R_PAREN@334..335 ")"
- WHITESPACE@335..336 " "
- THEN_KW@336..340 "then"
- WHITESPACE@340..347 "\n "
- TRUE_EXPR@347..378
- EXPR_APPLY@347..378
- EXPR_INDEX@347..362
- EXPR_VAR@347..350
- NAME@347..350
- IDENT@347..350 "std"
- DOT@350..351 "."
- NAME@351..362
- IDENT@351..362 "lstripChars"
- ARGS_DESC@362..378
- L_PAREN@362..363 "("
- ARG@363..370
- EXPR_SLICE@363..370
- EXPR_VAR@363..366
- NAME@363..366
- IDENT@363..366 "str"
- SLICE_DESC@366..370
- L_BRACK@366..367 "["
- EXPR_NUMBER@367..368
- FLOAT@367..368 "1"
- COLON@368..369 ":"
- R_BRACK@369..370 "]"
- COMMA@370..371 ","
- WHITESPACE@371..372 " "
- ARG@372..377
- EXPR_VAR@372..377
- NAME@372..377
- IDENT@372..377 "chars"
- R_PAREN@377..378 ")"
- WHITESPACE@378..383 "\n "
- ELSE_KW@383..387 "else"
- WHITESPACE@387..394 "\n "
- FALSE_EXPR@394..397
- EXPR_VAR@394..397
- NAME@394..397
- IDENT@394..397 "str"
+ MEMBER_FIELD_METHOD@254..397
+ FIELD_NAME_FIXED@254..265
+ NAME@254..265
+ IDENT@254..265 "lstripChars"
+ PARAMS_DESC@265..277
+ L_PAREN@265..266 "("
+ PARAM@266..269
+ DESTRUCT_FULL@266..269
+ NAME@266..269
+ IDENT@266..269 "str"
+ COMMA@269..270 ","
+ WHITESPACE@270..271 " "
+ PARAM@271..276
+ DESTRUCT_FULL@271..276
+ NAME@271..276
+ IDENT@271..276 "chars"
+ R_PAREN@276..277 ")"
+ COLONCOLON@277..279 "::"
+ WHITESPACE@279..284 "\n "
+ EXPR_IF_THEN_ELSE@284..397
+ IF_KW@284..286 "if"
+ WHITESPACE@286..287 " "
+ EXPR_BINARY@287..335
+ LHS_EXPR@287..306
+ EXPR_BINARY@287..306
+ LHS_EXPR@287..302
+ EXPR_APPLY@287..302
+ EXPR_INDEX@287..297
+ EXPR_VAR@287..290
+ NAME@287..290
+ IDENT@287..290 "std"
+ DOT@290..291 "."
+ NAME@291..297
+ IDENT@291..297 "length"
+ ARGS_DESC@297..302
+ L_PAREN@297..298 "("
+ ARG@298..301
+ EXPR_VAR@298..301
+ NAME@298..301
+ IDENT@298..301 "str"
+ R_PAREN@301..302 ")"
+ WHITESPACE@302..303 " "
+ GT@303..304 ">"
+ WHITESPACE@304..305 " "
+ EXPR_NUMBER@305..306
+ FLOAT@305..306 "0"
+ WHITESPACE@306..307 " "
+ AND@307..309 "&&"
+ WHITESPACE@309..310 " "
+ EXPR_APPLY@310..335
+ EXPR_INDEX@310..320
+ EXPR_VAR@310..313
+ NAME@310..313
+ IDENT@310..313 "std"
+ DOT@313..314 "."
+ NAME@314..320
+ IDENT@314..320 "member"
+ ARGS_DESC@320..335
+ L_PAREN@320..321 "("
+ ARG@321..326
+ EXPR_VAR@321..326
+ NAME@321..326
+ IDENT@321..326 "chars"
+ COMMA@326..327 ","
+ WHITESPACE@327..328 " "
+ ARG@328..334
+ EXPR_INDEX_EXPR@328..334
+ LHS_EXPR@328..331
+ EXPR_VAR@328..331
+ NAME@328..331
+ IDENT@328..331 "str"
+ L_BRACK@331..332 "["
+ EXPR_NUMBER@332..333
+ FLOAT@332..333 "0"
+ R_BRACK@333..334 "]"
+ R_PAREN@334..335 ")"
+ WHITESPACE@335..336 " "
+ THEN_KW@336..340 "then"
+ WHITESPACE@340..347 "\n "
+ TRUE_EXPR@347..378
+ EXPR_APPLY@347..378
+ EXPR_INDEX@347..362
+ EXPR_VAR@347..350
+ NAME@347..350
+ IDENT@347..350 "std"
+ DOT@350..351 "."
+ NAME@351..362
+ IDENT@351..362 "lstripChars"
+ ARGS_DESC@362..378
+ L_PAREN@362..363 "("
+ ARG@363..370
+ EXPR_SLICE@363..370
+ EXPR_VAR@363..366
+ NAME@363..366
+ IDENT@363..366 "str"
+ SLICE_DESC@366..370
+ L_BRACK@366..367 "["
+ EXPR_NUMBER@367..368
+ FLOAT@367..368 "1"
+ COLON@368..369 ":"
+ R_BRACK@369..370 "]"
+ COMMA@370..371 ","
+ WHITESPACE@371..372 " "
+ ARG@372..377
+ EXPR_VAR@372..377
+ NAME@372..377
+ IDENT@372..377 "chars"
+ R_PAREN@377..378 ")"
+ WHITESPACE@378..383 "\n "
+ ELSE_KW@383..387 "else"
+ WHITESPACE@387..394 "\n "
+ FALSE_EXPR@394..397
+ EXPR_VAR@394..397
+ NAME@394..397
+ IDENT@394..397 "str"
COMMA@397..398 ","
WHITESPACE@398..402 "\n\n "
- MEMBER_FIELD@402..578
- FIELD_METHOD@402..578
- FIELD_NAME_FIXED@402..413
- NAME@402..413
- IDENT@402..413 "rstripChars"
- PARAMS_DESC@413..425
- L_PAREN@413..414 "("
- PARAM@414..417
- DESTRUCT_FULL@414..417
- NAME@414..417
- IDENT@414..417 "str"
- COMMA@417..418 ","
- WHITESPACE@418..419 " "
- PARAM@419..424
- DESTRUCT_FULL@419..424
- NAME@419..424
- IDENT@419..424 "chars"
- R_PAREN@424..425 ")"
- COLONCOLON@425..427 "::"
- WHITESPACE@427..432 "\n "
- EXPR_LOCAL@432..578
- LOCAL_KW@432..437 "local"
- WHITESPACE@437..438 " "
- BIND_DESTRUCT@438..459
- DESTRUCT_FULL@438..441
- NAME@438..441
- IDENT@438..441 "len"
- WHITESPACE@441..442 " "
- ASSIGN@442..443 "="
- WHITESPACE@443..444 " "
- EXPR_APPLY@444..459
- EXPR_INDEX@444..454
- EXPR_VAR@444..447
- NAME@444..447
- IDENT@444..447 "std"
- DOT@447..448 "."
- NAME@448..454
- IDENT@448..454 "length"
- ARGS_DESC@454..459
- L_PAREN@454..455 "("
- ARG@455..458
- EXPR_VAR@455..458
- NAME@455..458
- IDENT@455..458 "str"
- R_PAREN@458..459 ")"
- SEMI@459..460 ";"
- WHITESPACE@460..465 "\n "
- EXPR_IF_THEN_ELSE@465..578
- IF_KW@465..467 "if"
- WHITESPACE@467..468 " "
- EXPR_BINARY@468..510
- LHS_EXPR@468..475
- EXPR_BINARY@468..475
- LHS_EXPR@468..471
- EXPR_VAR@468..471
- NAME@468..471
- IDENT@468..471 "len"
- WHITESPACE@471..472 " "
- GT@472..473 ">"
- WHITESPACE@473..474 " "
- EXPR_NUMBER@474..475
- FLOAT@474..475 "0"
- WHITESPACE@475..476 " "
- AND@476..478 "&&"
- WHITESPACE@478..479 " "
- EXPR_APPLY@479..510
- EXPR_INDEX@479..489
- EXPR_VAR@479..482
- NAME@479..482
- IDENT@479..482 "std"
- DOT@482..483 "."
- NAME@483..489
- IDENT@483..489 "member"
- ARGS_DESC@489..510
- L_PAREN@489..490 "("
- ARG@490..495
- EXPR_VAR@490..495
- NAME@490..495
- IDENT@490..495 "chars"
- COMMA@495..496 ","
- WHITESPACE@496..497 " "
- ARG@497..509
- EXPR_INDEX_EXPR@497..509
- LHS_EXPR@497..500
- EXPR_VAR@497..500
- NAME@497..500
- IDENT@497..500 "str"
- L_BRACK@500..501 "["
- EXPR_BINARY@501..508
- LHS_EXPR@501..504
- EXPR_VAR@501..504
- NAME@501..504
- IDENT@501..504 "len"
- WHITESPACE@504..505 " "
- MINUS@505..506 "-"
- WHITESPACE@506..507 " "
- EXPR_NUMBER@507..508
- FLOAT@507..508 "1"
- R_BRACK@508..509 "]"
- R_PAREN@509..510 ")"
- WHITESPACE@510..511 " "
- THEN_KW@511..515 "then"
- WHITESPACE@515..522 "\n "
- TRUE_EXPR@522..559
- EXPR_APPLY@522..559
- EXPR_INDEX@522..537
- EXPR_VAR@522..525
- NAME@522..525
- IDENT@522..525 "std"
- DOT@525..526 "."
- NAME@526..537
- IDENT@526..537 "rstripChars"
- ARGS_DESC@537..559
- L_PAREN@537..538 "("
- ARG@538..551
- EXPR_SLICE@538..551
- EXPR_VAR@538..541
- NAME@538..541
- IDENT@538..541 "str"
- SLICE_DESC@541..551
- L_BRACK@541..542 "["
- COLON@542..543 ":"
- SLICE_DESC_END@543..550
- EXPR_BINARY@543..550
- LHS_EXPR@543..546
- EXPR_VAR@543..546
- NAME@543..546
- IDENT@543..546 "len"
- WHITESPACE@546..547 " "
- MINUS@547..548 "-"
- WHITESPACE@548..549 " "
- EXPR_NUMBER@549..550
- FLOAT@549..550 "1"
- R_BRACK@550..551 "]"
- COMMA@551..552 ","
- WHITESPACE@552..553 " "
- ARG@553..558
- EXPR_VAR@553..558
- NAME@553..558
- IDENT@553..558 "chars"
- R_PAREN@558..559 ")"
- WHITESPACE@559..564 "\n "
- ELSE_KW@564..568 "else"
- WHITESPACE@568..575 "\n "
- FALSE_EXPR@575..578
- EXPR_VAR@575..578
- NAME@575..578
- IDENT@575..578 "str"
+ MEMBER_FIELD_METHOD@402..578
+ FIELD_NAME_FIXED@402..413
+ NAME@402..413
+ IDENT@402..413 "rstripChars"
+ PARAMS_DESC@413..425
+ L_PAREN@413..414 "("
+ PARAM@414..417
+ DESTRUCT_FULL@414..417
+ NAME@414..417
+ IDENT@414..417 "str"
+ COMMA@417..418 ","
+ WHITESPACE@418..419 " "
+ PARAM@419..424
+ DESTRUCT_FULL@419..424
+ NAME@419..424
+ IDENT@419..424 "chars"
+ R_PAREN@424..425 ")"
+ COLONCOLON@425..427 "::"
+ WHITESPACE@427..432 "\n "
+ EXPR_LOCAL@432..578
+ LOCAL_KW@432..437 "local"
+ WHITESPACE@437..438 " "
+ BIND_DESTRUCT@438..459
+ DESTRUCT_FULL@438..441
+ NAME@438..441
+ IDENT@438..441 "len"
+ WHITESPACE@441..442 " "
+ ASSIGN@442..443 "="
+ WHITESPACE@443..444 " "
+ EXPR_APPLY@444..459
+ EXPR_INDEX@444..454
+ EXPR_VAR@444..447
+ NAME@444..447
+ IDENT@444..447 "std"
+ DOT@447..448 "."
+ NAME@448..454
+ IDENT@448..454 "length"
+ ARGS_DESC@454..459
+ L_PAREN@454..455 "("
+ ARG@455..458
+ EXPR_VAR@455..458
+ NAME@455..458
+ IDENT@455..458 "str"
+ R_PAREN@458..459 ")"
+ SEMI@459..460 ";"
+ WHITESPACE@460..465 "\n "
+ EXPR_IF_THEN_ELSE@465..578
+ IF_KW@465..467 "if"
+ WHITESPACE@467..468 " "
+ EXPR_BINARY@468..510
+ LHS_EXPR@468..475
+ EXPR_BINARY@468..475
+ LHS_EXPR@468..471
+ EXPR_VAR@468..471
+ NAME@468..471
+ IDENT@468..471 "len"
+ WHITESPACE@471..472 " "
+ GT@472..473 ">"
+ WHITESPACE@473..474 " "
+ EXPR_NUMBER@474..475
+ FLOAT@474..475 "0"
+ WHITESPACE@475..476 " "
+ AND@476..478 "&&"
+ WHITESPACE@478..479 " "
+ EXPR_APPLY@479..510
+ EXPR_INDEX@479..489
+ EXPR_VAR@479..482
+ NAME@479..482
+ IDENT@479..482 "std"
+ DOT@482..483 "."
+ NAME@483..489
+ IDENT@483..489 "member"
+ ARGS_DESC@489..510
+ L_PAREN@489..490 "("
+ ARG@490..495
+ EXPR_VAR@490..495
+ NAME@490..495
+ IDENT@490..495 "chars"
+ COMMA@495..496 ","
+ WHITESPACE@496..497 " "
+ ARG@497..509
+ EXPR_INDEX_EXPR@497..509
+ LHS_EXPR@497..500
+ EXPR_VAR@497..500
+ NAME@497..500
+ IDENT@497..500 "str"
+ L_BRACK@500..501 "["
+ EXPR_BINARY@501..508
+ LHS_EXPR@501..504
+ EXPR_VAR@501..504
+ NAME@501..504
+ IDENT@501..504 "len"
+ WHITESPACE@504..505 " "
+ MINUS@505..506 "-"
+ WHITESPACE@506..507 " "
+ EXPR_NUMBER@507..508
+ FLOAT@507..508 "1"
+ R_BRACK@508..509 "]"
+ R_PAREN@509..510 ")"
+ WHITESPACE@510..511 " "
+ THEN_KW@511..515 "then"
+ WHITESPACE@515..522 "\n "
+ TRUE_EXPR@522..559
+ EXPR_APPLY@522..559
+ EXPR_INDEX@522..537
+ EXPR_VAR@522..525
+ NAME@522..525
+ IDENT@522..525 "std"
+ DOT@525..526 "."
+ NAME@526..537
+ IDENT@526..537 "rstripChars"
+ ARGS_DESC@537..559
+ L_PAREN@537..538 "("
+ ARG@538..551
+ EXPR_SLICE@538..551
+ EXPR_VAR@538..541
+ NAME@538..541
+ IDENT@538..541 "str"
+ SLICE_DESC@541..551
+ L_BRACK@541..542 "["
+ COLON@542..543 ":"
+ SLICE_DESC_END@543..550
+ EXPR_BINARY@543..550
+ LHS_EXPR@543..546
+ EXPR_VAR@543..546
+ NAME@543..546
+ IDENT@543..546 "len"
+ WHITESPACE@546..547 " "
+ MINUS@547..548 "-"
+ WHITESPACE@548..549 " "
+ EXPR_NUMBER@549..550
+ FLOAT@549..550 "1"
+ R_BRACK@550..551 "]"
+ COMMA@551..552 ","
+ WHITESPACE@552..553 " "
+ ARG@553..558
+ EXPR_VAR@553..558
+ NAME@553..558
+ IDENT@553..558 "chars"
+ R_PAREN@558..559 ")"
+ WHITESPACE@559..564 "\n "
+ ELSE_KW@564..568 "else"
+ WHITESPACE@568..575 "\n "
+ FALSE_EXPR@575..578
+ EXPR_VAR@575..578
+ NAME@575..578
+ IDENT@575..578 "str"
COMMA@578..579 ","
WHITESPACE@579..583 "\n\n "
- MEMBER_FIELD@583..663
- FIELD_METHOD@583..663
- FIELD_NAME_FIXED@583..593
- NAME@583..593
- IDENT@583..593 "stripChars"
- PARAMS_DESC@593..605
- L_PAREN@593..594 "("
- PARAM@594..597
- DESTRUCT_FULL@594..597
- NAME@594..597
- IDENT@594..597 "str"
- COMMA@597..598 ","
- WHITESPACE@598..599 " "
- PARAM@599..604
- DESTRUCT_FULL@599..604
- NAME@599..604
- IDENT@599..604 "chars"
- R_PAREN@604..605 ")"
- COLONCOLON@605..607 "::"
- WHITESPACE@607..612 "\n "
- EXPR_APPLY@612..663
- EXPR_INDEX@612..627
- EXPR_VAR@612..615
- NAME@612..615
- IDENT@612..615 "std"
- DOT@615..616 "."
- NAME@616..627
- IDENT@616..627 "lstripChars"
- ARGS_DESC@627..663
- L_PAREN@627..628 "("
- ARG@628..655
- EXPR_APPLY@628..655
- EXPR_INDEX@628..643
- EXPR_VAR@628..631
- NAME@628..631
- IDENT@628..631 "std"
- DOT@631..632 "."
- NAME@632..643
- IDENT@632..643 "rstripChars"
- ARGS_DESC@643..655
- L_PAREN@643..644 "("
- ARG@644..647
- EXPR_VAR@644..647
- NAME@644..647
- IDENT@644..647 "str"
- COMMA@647..648 ","
- WHITESPACE@648..649 " "
- ARG@649..654
- EXPR_VAR@649..654
- NAME@649..654
- IDENT@649..654 "chars"
- R_PAREN@654..655 ")"
- COMMA@655..656 ","
- WHITESPACE@656..657 " "
- ARG@657..662
- EXPR_VAR@657..662
- NAME@657..662
- IDENT@657..662 "chars"
- R_PAREN@662..663 ")"
+ MEMBER_FIELD_METHOD@583..663
+ FIELD_NAME_FIXED@583..593
+ NAME@583..593
+ IDENT@583..593 "stripChars"
+ PARAMS_DESC@593..605
+ L_PAREN@593..594 "("
+ PARAM@594..597
+ DESTRUCT_FULL@594..597
+ NAME@594..597
+ IDENT@594..597 "str"
+ COMMA@597..598 ","
+ WHITESPACE@598..599 " "
+ PARAM@599..604
+ DESTRUCT_FULL@599..604
+ NAME@599..604
+ IDENT@599..604 "chars"
+ R_PAREN@604..605 ")"
+ COLONCOLON@605..607 "::"
+ WHITESPACE@607..612 "\n "
+ EXPR_APPLY@612..663
+ EXPR_INDEX@612..627
+ EXPR_VAR@612..615
+ NAME@612..615
+ IDENT@612..615 "std"
+ DOT@615..616 "."
+ NAME@616..627
+ IDENT@616..627 "lstripChars"
+ ARGS_DESC@627..663
+ L_PAREN@627..628 "("
+ ARG@628..655
+ EXPR_APPLY@628..655
+ EXPR_INDEX@628..643
+ EXPR_VAR@628..631
+ NAME@628..631
+ IDENT@628..631 "std"
+ DOT@631..632 "."
+ NAME@632..643
+ IDENT@632..643 "rstripChars"
+ ARGS_DESC@643..655
+ L_PAREN@643..644 "("
+ ARG@644..647
+ EXPR_VAR@644..647
+ NAME@644..647
+ IDENT@644..647 "str"
+ COMMA@647..648 ","
+ WHITESPACE@648..649 " "
+ ARG@649..654
+ EXPR_VAR@649..654
+ NAME@649..654
+ IDENT@649..654 "chars"
+ R_PAREN@654..655 ")"
+ COMMA@655..656 ","
+ WHITESPACE@656..657 " "
+ ARG@657..662
+ EXPR_VAR@657..662
+ NAME@657..662
+ IDENT@657..662 "chars"
+ R_PAREN@662..663 ")"
COMMA@663..664 ","
WHITESPACE@664..668 "\n\n "
- MEMBER_FIELD@668..741
- FIELD_METHOD@668..741
- FIELD_NAME_FIXED@668..679
- NAME@668..679
- IDENT@668..679 "stringChars"
- PARAMS_DESC@679..684
- L_PAREN@679..680 "("
- PARAM@680..683
- DESTRUCT_FULL@680..683
- NAME@680..683
- IDENT@680..683 "str"
- R_PAREN@683..684 ")"
- COLONCOLON@684..686 "::"
- WHITESPACE@686..691 "\n "
- EXPR_APPLY@691..741
- EXPR_INDEX@691..704
- EXPR_VAR@691..694
- NAME@691..694
- IDENT@691..694 "std"
- DOT@694..695 "."
- NAME@695..704
- IDENT@695..704 "makeArray"
- ARGS_DESC@704..741
- L_PAREN@704..705 "("
- ARG@705..720
- EXPR_APPLY@705..720
- EXPR_INDEX@705..715
- EXPR_VAR@705..708
- NAME@705..708
- IDENT@705..708 "std"
- DOT@708..709 "."
- NAME@709..715
- IDENT@709..715 "length"
- ARGS_DESC@715..720
- L_PAREN@715..716 "("
- ARG@716..719
- EXPR_VAR@716..719
- NAME@716..719
- IDENT@716..719 "str"
- R_PAREN@719..720 ")"
- COMMA@720..721 ","
- WHITESPACE@721..722 " "
- ARG@722..740
- EXPR_FUNCTION@722..740
- FUNCTION_KW@722..730 "function"
- PARAMS_DESC@730..733
- L_PAREN@730..731 "("
- PARAM@731..732
- DESTRUCT_FULL@731..732
- NAME@731..732
- IDENT@731..732 "i"
- R_PAREN@732..733 ")"
- WHITESPACE@733..734 " "
- EXPR_INDEX_EXPR@734..740
- LHS_EXPR@734..737
- EXPR_VAR@734..737
- NAME@734..737
- IDENT@734..737 "str"
- L_BRACK@737..738 "["
- EXPR_VAR@738..739
- NAME@738..739
- IDENT@738..739 "i"
- R_BRACK@739..740 "]"
- R_PAREN@740..741 ")"
+ MEMBER_FIELD_METHOD@668..741
+ FIELD_NAME_FIXED@668..679
+ NAME@668..679
+ IDENT@668..679 "stringChars"
+ PARAMS_DESC@679..684
+ L_PAREN@679..680 "("
+ PARAM@680..683
+ DESTRUCT_FULL@680..683
+ NAME@680..683
+ IDENT@680..683 "str"
+ R_PAREN@683..684 ")"
+ COLONCOLON@684..686 "::"
+ WHITESPACE@686..691 "\n "
+ EXPR_APPLY@691..741
+ EXPR_INDEX@691..704
+ EXPR_VAR@691..694
+ NAME@691..694
+ IDENT@691..694 "std"
+ DOT@694..695 "."
+ NAME@695..704
+ IDENT@695..704 "makeArray"
+ ARGS_DESC@704..741
+ L_PAREN@704..705 "("
+ ARG@705..720
+ EXPR_APPLY@705..720
+ EXPR_INDEX@705..715
+ EXPR_VAR@705..708
+ NAME@705..708
+ IDENT@705..708 "std"
+ DOT@708..709 "."
+ NAME@709..715
+ IDENT@709..715 "length"
+ ARGS_DESC@715..720
+ L_PAREN@715..716 "("
+ ARG@716..719
+ EXPR_VAR@716..719
+ NAME@716..719
+ IDENT@716..719 "str"
+ R_PAREN@719..720 ")"
+ COMMA@720..721 ","
+ WHITESPACE@721..722 " "
+ ARG@722..740
+ EXPR_FUNCTION@722..740
+ FUNCTION_KW@722..730 "function"
+ PARAMS_DESC@730..733
+ L_PAREN@730..731 "("
+ PARAM@731..732
+ DESTRUCT_FULL@731..732
+ NAME@731..732
+ IDENT@731..732 "i"
+ R_PAREN@732..733 ")"
+ WHITESPACE@733..734 " "
+ EXPR_INDEX_EXPR@734..740
+ LHS_EXPR@734..737
+ EXPR_VAR@734..737
+ NAME@734..737
+ IDENT@734..737 "str"
+ L_BRACK@737..738 "["
+ EXPR_VAR@738..739
+ NAME@738..739
+ IDENT@738..739 "i"
+ R_BRACK@739..740 "]"
+ R_PAREN@740..741 ")"
COMMA@741..742 ","
WHITESPACE@742..746 "\n\n "
- MEMBER_FIELD@746..1024
- FIELD_METHOD@746..1024
- FIELD_NAME_FIXED@746..757
- NAME@746..757
- IDENT@746..757 "splitLimitR"
- PARAMS_DESC@757..776
- L_PAREN@757..758 "("
- PARAM@758..761
- DESTRUCT_FULL@758..761
- NAME@758..761
- IDENT@758..761 "str"
- COMMA@761..762 ","
- WHITESPACE@762..763 " "
- PARAM@763..764
- DESTRUCT_FULL@763..764
- NAME@763..764
- IDENT@763..764 "c"
- COMMA@764..765 ","
- WHITESPACE@765..766 " "
- PARAM@766..775
- DESTRUCT_FULL@766..775
- NAME@766..775
- IDENT@766..775 "maxsplits"
- R_PAREN@775..776 ")"
- COLONCOLON@776..778 "::"
- WHITESPACE@778..783 "\n "
- EXPR_IF_THEN_ELSE@783..1024
- IF_KW@783..785 "if"
- WHITESPACE@785..786 " "
- EXPR_BINARY@786..801
- LHS_EXPR@786..795
- EXPR_VAR@786..795
- NAME@786..795
- IDENT@786..795 "maxsplits"
- WHITESPACE@795..796 " "
- EQ@796..798 "=="
- WHITESPACE@798..799 " "
- EXPR_UNARY@799..801
- MINUS@799..800 "-"
- EXPR_NUMBER@800..801
- FLOAT@800..801 "1"
- WHITESPACE@801..802 " "
- THEN_KW@802..806 "then"
- WHITESPACE@806..813 "\n "
- TRUE_EXPR@813..839
- EXPR_APPLY@813..839
- EXPR_INDEX@813..827
- EXPR_VAR@813..816
- NAME@813..816
- IDENT@813..816 "std"
- DOT@816..817 "."
- NAME@817..827
- IDENT@817..827 "splitLimit"
- ARGS_DESC@827..839
- L_PAREN@827..828 "("
- ARG@828..831
- EXPR_VAR@828..831
- NAME@828..831
- IDENT@828..831 "str"
- COMMA@831..832 ","
- WHITESPACE@832..833 " "
- ARG@833..834
- EXPR_VAR@833..834
- NAME@833..834
- IDENT@833..834 "c"
- COMMA@834..835 ","
- WHITESPACE@835..836 " "
- ARG@836..838
- EXPR_UNARY@836..838
- MINUS@836..837 "-"
- EXPR_NUMBER@837..838
- FLOAT@837..838 "1"
- R_PAREN@838..839 ")"
- WHITESPACE@839..844 "\n "
- ELSE_KW@844..848 "else"
- WHITESPACE@848..855 "\n "
- FALSE_EXPR@855..1024
- EXPR_LOCAL@855..1024
- LOCAL_KW@855..860 "local"
- WHITESPACE@860..861 " "
- BIND_FUNCTION@861..922
- NAME@861..867
- IDENT@861..867 "revStr"
- PARAMS_DESC@867..872
- L_PAREN@867..868 "("
- PARAM@868..871
- DESTRUCT_FULL@868..871
- NAME@868..871
- IDENT@868..871 "str"
- R_PAREN@871..872 ")"
- WHITESPACE@872..873 " "
- ASSIGN@873..874 "="
- WHITESPACE@874..875 " "
- EXPR_APPLY@875..922
- EXPR_INDEX@875..883
- EXPR_VAR@875..878
- NAME@875..878
- IDENT@875..878 "std"
- DOT@878..879 "."
- NAME@879..883
- IDENT@879..883 "join"
- ARGS_DESC@883..922
- L_PAREN@883..884 "("
- ARG@884..886
- EXPR_STRING@884..886
- STRING_SINGLE@884..886 "''"
- COMMA@886..887 ","
- WHITESPACE@887..888 " "
- ARG@888..921
- EXPR_APPLY@888..921
- EXPR_INDEX@888..899
- EXPR_VAR@888..891
- NAME@888..891
- IDENT@888..891 "std"
- DOT@891..892 "."
- NAME@892..899
- IDENT@892..899 "reverse"
- ARGS_DESC@899..921
- L_PAREN@899..900 "("
- ARG@900..920
- EXPR_APPLY@900..920
- EXPR_INDEX@900..915
- EXPR_VAR@900..903
- NAME@900..903
- IDENT@900..903 "std"
- DOT@903..904 "."
- NAME@904..915
- IDENT@904..915 "stringChars"
- ARGS_DESC@915..920
- L_PAREN@915..916 "("
- ARG@916..919
- EXPR_VAR@916..919
- NAME@916..919
- IDENT@916..919 "str"
- R_PAREN@919..920 ")"
- R_PAREN@920..921 ")"
- R_PAREN@921..922 ")"
- SEMI@922..923 ";"
- WHITESPACE@923..930 "\n "
- EXPR_APPLY@930..1024
- EXPR_INDEX@930..937
- EXPR_VAR@930..933
- NAME@930..933
- IDENT@930..933 "std"
- DOT@933..934 "."
- NAME@934..937
- IDENT@934..937 "map"
- ARGS_DESC@937..1024
- L_PAREN@937..938 "("
- ARG@938..959
- EXPR_FUNCTION@938..959
- FUNCTION_KW@938..946 "function"
- PARAMS_DESC@946..949
- L_PAREN@946..947 "("
- PARAM@947..948
- DESTRUCT_FULL@947..948
- NAME@947..948
- IDENT@947..948 "e"
- R_PAREN@948..949 ")"
- WHITESPACE@949..950 " "
- EXPR_APPLY@950..959
- EXPR_VAR@950..956
- NAME@950..956
- IDENT@950..956 "revStr"
- ARGS_DESC@956..959
- L_PAREN@956..957 "("
- ARG@957..958
- EXPR_VAR@957..958
- NAME@957..958
- IDENT@957..958 "e"
- R_PAREN@958..959 ")"
- COMMA@959..960 ","
- WHITESPACE@960..961 " "
- ARG@961..1023
- EXPR_APPLY@961..1023
- EXPR_INDEX@961..972
- EXPR_VAR@961..964
- NAME@961..964
- IDENT@961..964 "std"
- DOT@964..965 "."
- NAME@965..972
- IDENT@965..972 "reverse"
- ARGS_DESC@972..1023
- L_PAREN@972..973 "("
- ARG@973..1022
- EXPR_APPLY@973..1022
- EXPR_INDEX@973..987
- EXPR_VAR@973..976
- NAME@973..976
- IDENT@973..976 "std"
- DOT@976..977 "."
- NAME@977..987
- IDENT@977..987 "splitLimit"
- ARGS_DESC@987..1022
- L_PAREN@987..988 "("
- ARG@988..999
- EXPR_APPLY@988..999
- EXPR_VAR@988..994
- NAME@988..994
- IDENT@988..994 "revStr"
- ARGS_DESC@994..999
- L_PAREN@994..995 "("
- ARG@995..998
- EXPR_VAR@995..998
- NAME@995..998
- IDENT@995..998 "str"
- R_PAREN@998..999 ")"
- COMMA@999..1000 ","
- WHITESPACE@1000..1001 " "
- ARG@1001..1010
- EXPR_APPLY@1001..1010
- EXPR_VAR@1001..1007
- NAME@1001..1007
- IDENT@1001..1007 "revStr"
- ARGS_DESC@1007..1010
- L_PAREN@1007..1008 "("
- ARG@1008..1009
- EXPR_VAR@1008..1009
- NAME@1008..1009
- IDENT@1008..1009 "c"
- R_PAREN@1009..1010 ")"
- COMMA@1010..1011 ","
- WHITESPACE@1011..1012 " "
- ARG@1012..1021
- EXPR_VAR@1012..1021
- NAME@1012..1021
- IDENT@1012..1021 "maxsplits"
- R_PAREN@1021..1022 ")"
- R_PAREN@1022..1023 ")"
- R_PAREN@1023..1024 ")"
+ MEMBER_FIELD_METHOD@746..1024
+ FIELD_NAME_FIXED@746..757
+ NAME@746..757
+ IDENT@746..757 "splitLimitR"
+ PARAMS_DESC@757..776
+ L_PAREN@757..758 "("
+ PARAM@758..761
+ DESTRUCT_FULL@758..761
+ NAME@758..761
+ IDENT@758..761 "str"
+ COMMA@761..762 ","
+ WHITESPACE@762..763 " "
+ PARAM@763..764
+ DESTRUCT_FULL@763..764
+ NAME@763..764
+ IDENT@763..764 "c"
+ COMMA@764..765 ","
+ WHITESPACE@765..766 " "
+ PARAM@766..775
+ DESTRUCT_FULL@766..775
+ NAME@766..775
+ IDENT@766..775 "maxsplits"
+ R_PAREN@775..776 ")"
+ COLONCOLON@776..778 "::"
+ WHITESPACE@778..783 "\n "
+ EXPR_IF_THEN_ELSE@783..1024
+ IF_KW@783..785 "if"
+ WHITESPACE@785..786 " "
+ EXPR_BINARY@786..801
+ LHS_EXPR@786..795
+ EXPR_VAR@786..795
+ NAME@786..795
+ IDENT@786..795 "maxsplits"
+ WHITESPACE@795..796 " "
+ EQ@796..798 "=="
+ WHITESPACE@798..799 " "
+ EXPR_UNARY@799..801
+ MINUS@799..800 "-"
+ EXPR_NUMBER@800..801
+ FLOAT@800..801 "1"
+ WHITESPACE@801..802 " "
+ THEN_KW@802..806 "then"
+ WHITESPACE@806..813 "\n "
+ TRUE_EXPR@813..839
+ EXPR_APPLY@813..839
+ EXPR_INDEX@813..827
+ EXPR_VAR@813..816
+ NAME@813..816
+ IDENT@813..816 "std"
+ DOT@816..817 "."
+ NAME@817..827
+ IDENT@817..827 "splitLimit"
+ ARGS_DESC@827..839
+ L_PAREN@827..828 "("
+ ARG@828..831
+ EXPR_VAR@828..831
+ NAME@828..831
+ IDENT@828..831 "str"
+ COMMA@831..832 ","
+ WHITESPACE@832..833 " "
+ ARG@833..834
+ EXPR_VAR@833..834
+ NAME@833..834
+ IDENT@833..834 "c"
+ COMMA@834..835 ","
+ WHITESPACE@835..836 " "
+ ARG@836..838
+ EXPR_UNARY@836..838
+ MINUS@836..837 "-"
+ EXPR_NUMBER@837..838
+ FLOAT@837..838 "1"
+ R_PAREN@838..839 ")"
+ WHITESPACE@839..844 "\n "
+ ELSE_KW@844..848 "else"
+ WHITESPACE@848..855 "\n "
+ FALSE_EXPR@855..1024
+ EXPR_LOCAL@855..1024
+ LOCAL_KW@855..860 "local"
+ WHITESPACE@860..861 " "
+ BIND_FUNCTION@861..922
+ NAME@861..867
+ IDENT@861..867 "revStr"
+ PARAMS_DESC@867..872
+ L_PAREN@867..868 "("
+ PARAM@868..871
+ DESTRUCT_FULL@868..871
+ NAME@868..871
+ IDENT@868..871 "str"
+ R_PAREN@871..872 ")"
+ WHITESPACE@872..873 " "
+ ASSIGN@873..874 "="
+ WHITESPACE@874..875 " "
+ EXPR_APPLY@875..922
+ EXPR_INDEX@875..883
+ EXPR_VAR@875..878
+ NAME@875..878
+ IDENT@875..878 "std"
+ DOT@878..879 "."
+ NAME@879..883
+ IDENT@879..883 "join"
+ ARGS_DESC@883..922
+ L_PAREN@883..884 "("
+ ARG@884..886
+ EXPR_STRING@884..886
+ STRING_SINGLE@884..886 "''"
+ COMMA@886..887 ","
+ WHITESPACE@887..888 " "
+ ARG@888..921
+ EXPR_APPLY@888..921
+ EXPR_INDEX@888..899
+ EXPR_VAR@888..891
+ NAME@888..891
+ IDENT@888..891 "std"
+ DOT@891..892 "."
+ NAME@892..899
+ IDENT@892..899 "reverse"
+ ARGS_DESC@899..921
+ L_PAREN@899..900 "("
+ ARG@900..920
+ EXPR_APPLY@900..920
+ EXPR_INDEX@900..915
+ EXPR_VAR@900..903
+ NAME@900..903
+ IDENT@900..903 "std"
+ DOT@903..904 "."
+ NAME@904..915
+ IDENT@904..915 "stringChars"
+ ARGS_DESC@915..920
+ L_PAREN@915..916 "("
+ ARG@916..919
+ EXPR_VAR@916..919
+ NAME@916..919
+ IDENT@916..919 "str"
+ R_PAREN@919..920 ")"
+ R_PAREN@920..921 ")"
+ R_PAREN@921..922 ")"
+ SEMI@922..923 ";"
+ WHITESPACE@923..930 "\n "
+ EXPR_APPLY@930..1024
+ EXPR_INDEX@930..937
+ EXPR_VAR@930..933
+ NAME@930..933
+ IDENT@930..933 "std"
+ DOT@933..934 "."
+ NAME@934..937
+ IDENT@934..937 "map"
+ ARGS_DESC@937..1024
+ L_PAREN@937..938 "("
+ ARG@938..959
+ EXPR_FUNCTION@938..959
+ FUNCTION_KW@938..946 "function"
+ PARAMS_DESC@946..949
+ L_PAREN@946..947 "("
+ PARAM@947..948
+ DESTRUCT_FULL@947..948
+ NAME@947..948
+ IDENT@947..948 "e"
+ R_PAREN@948..949 ")"
+ WHITESPACE@949..950 " "
+ EXPR_APPLY@950..959
+ EXPR_VAR@950..956
+ NAME@950..956
+ IDENT@950..956 "revStr"
+ ARGS_DESC@956..959
+ L_PAREN@956..957 "("
+ ARG@957..958
+ EXPR_VAR@957..958
+ NAME@957..958
+ IDENT@957..958 "e"
+ R_PAREN@958..959 ")"
+ COMMA@959..960 ","
+ WHITESPACE@960..961 " "
+ ARG@961..1023
+ EXPR_APPLY@961..1023
+ EXPR_INDEX@961..972
+ EXPR_VAR@961..964
+ NAME@961..964
+ IDENT@961..964 "std"
+ DOT@964..965 "."
+ NAME@965..972
+ IDENT@965..972 "reverse"
+ ARGS_DESC@972..1023
+ L_PAREN@972..973 "("
+ ARG@973..1022
+ EXPR_APPLY@973..1022
+ EXPR_INDEX@973..987
+ EXPR_VAR@973..976
+ NAME@973..976
+ IDENT@973..976 "std"
+ DOT@976..977 "."
+ NAME@977..987
+ IDENT@977..987 "splitLimit"
+ ARGS_DESC@987..1022
+ L_PAREN@987..988 "("
+ ARG@988..999
+ EXPR_APPLY@988..999
+ EXPR_VAR@988..994
+ NAME@988..994
+ IDENT@988..994 "revStr"
+ ARGS_DESC@994..999
+ L_PAREN@994..995 "("
+ ARG@995..998
+ EXPR_VAR@995..998
+ NAME@995..998
+ IDENT@995..998 "str"
+ R_PAREN@998..999 ")"
+ COMMA@999..1000 ","
+ WHITESPACE@1000..1001 " "
+ ARG@1001..1010
+ EXPR_APPLY@1001..1010
+ EXPR_VAR@1001..1007
+ NAME@1001..1007
+ IDENT@1001..1007 "revStr"
+ ARGS_DESC@1007..1010
+ L_PAREN@1007..1008 "("
+ ARG@1008..1009
+ EXPR_VAR@1008..1009
+ NAME@1008..1009
+ IDENT@1008..1009 "c"
+ R_PAREN@1009..1010 ")"
+ COMMA@1010..1011 ","
+ WHITESPACE@1011..1012 " "
+ ARG@1012..1021
+ EXPR_VAR@1012..1021
+ NAME@1012..1021
+ IDENT@1012..1021 "maxsplits"
+ R_PAREN@1021..1022 ")"
+ R_PAREN@1022..1023 ")"
+ R_PAREN@1023..1024 ")"
COMMA@1024..1025 ","
WHITESPACE@1025..1029 "\n\n "
- MEMBER_FIELD@1029..1071
- FIELD_METHOD@1029..1071
- FIELD_NAME_FIXED@1029..1034
- NAME@1029..1034
- IDENT@1029..1034 "split"
- PARAMS_DESC@1034..1042
- L_PAREN@1034..1035 "("
- PARAM@1035..1038
- DESTRUCT_FULL@1035..1038
- NAME@1035..1038
- IDENT@1035..1038 "str"
- COMMA@1038..1039 ","
- WHITESPACE@1039..1040 " "
- PARAM@1040..1041
- DESTRUCT_FULL@1040..1041
- NAME@1040..1041
- IDENT@1040..1041 "c"
- R_PAREN@1041..1042 ")"
- COLONCOLON@1042..1044 "::"
- WHITESPACE@1044..1045 " "
- EXPR_APPLY@1045..1071
- EXPR_INDEX@1045..1059
- EXPR_VAR@1045..1048
- NAME@1045..1048
- IDENT@1045..1048 "std"
- DOT@1048..1049 "."
- NAME@1049..1059
- IDENT@1049..1059 "splitLimit"
- ARGS_DESC@1059..1071
- L_PAREN@1059..1060 "("
- ARG@1060..1063
- EXPR_VAR@1060..1063
- NAME@1060..1063
- IDENT@1060..1063 "str"
- COMMA@1063..1064 ","
- WHITESPACE@1064..1065 " "
- ARG@1065..1066
- EXPR_VAR@1065..1066
- NAME@1065..1066
- IDENT@1065..1066 "c"
- COMMA@1066..1067 ","
- WHITESPACE@1067..1068 " "
- ARG@1068..1070
- EXPR_UNARY@1068..1070
- MINUS@1068..1069 "-"
- EXPR_NUMBER@1069..1070
- FLOAT@1069..1070 "1"
- R_PAREN@1070..1071 ")"
+ MEMBER_FIELD_METHOD@1029..1071
+ FIELD_NAME_FIXED@1029..1034
+ NAME@1029..1034
+ IDENT@1029..1034 "split"
+ PARAMS_DESC@1034..1042
+ L_PAREN@1034..1035 "("
+ PARAM@1035..1038
+ DESTRUCT_FULL@1035..1038
+ NAME@1035..1038
+ IDENT@1035..1038 "str"
+ COMMA@1038..1039 ","
+ WHITESPACE@1039..1040 " "
+ PARAM@1040..1041
+ DESTRUCT_FULL@1040..1041
+ NAME@1040..1041
+ IDENT@1040..1041 "c"
+ R_PAREN@1041..1042 ")"
+ COLONCOLON@1042..1044 "::"
+ WHITESPACE@1044..1045 " "
+ EXPR_APPLY@1045..1071
+ EXPR_INDEX@1045..1059
+ EXPR_VAR@1045..1048
+ NAME@1045..1048
+ IDENT@1045..1048 "std"
+ DOT@1048..1049 "."
+ NAME@1049..1059
+ IDENT@1049..1059 "splitLimit"
+ ARGS_DESC@1059..1071
+ L_PAREN@1059..1060 "("
+ ARG@1060..1063
+ EXPR_VAR@1060..1063
+ NAME@1060..1063
+ IDENT@1060..1063 "str"
+ COMMA@1063..1064 ","
+ WHITESPACE@1064..1065 " "
+ ARG@1065..1066
+ EXPR_VAR@1065..1066
+ NAME@1065..1066
+ IDENT@1065..1066 "c"
+ COMMA@1066..1067 ","
+ WHITESPACE@1067..1068 " "
+ ARG@1068..1070
+ EXPR_UNARY@1068..1070
+ MINUS@1068..1069 "-"
+ EXPR_NUMBER@1069..1070
+ FLOAT@1069..1070 "1"
+ R_PAREN@1070..1071 ")"
COMMA@1071..1072 ","
WHITESPACE@1072..1076 "\n\n "
- MEMBER_FIELD@1076..1434
- FIELD_METHOD@1076..1434
- FIELD_NAME_FIXED@1076..1088
- NAME@1076..1088
- IDENT@1076..1088 "mapWithIndex"
- PARAMS_DESC@1088..1099
- L_PAREN@1088..1089 "("
- PARAM@1089..1093
- DESTRUCT_FULL@1089..1093
- NAME@1089..1093
- IDENT@1089..1093 "func"
- COMMA@1093..1094 ","
- WHITESPACE@1094..1095 " "
- PARAM@1095..1098
- DESTRUCT_FULL@1095..1098
- NAME@1095..1098
- IDENT@1095..1098 "arr"
- R_PAREN@1098..1099 ")"
- COLONCOLON@1099..1101 "::"
- WHITESPACE@1101..1106 "\n "
- EXPR_IF_THEN_ELSE@1106..1434
- IF_KW@1106..1108 "if"
- WHITESPACE@1108..1109 " "
- EXPR_UNARY@1109..1130
- NOT@1109..1110 "!"
- EXPR_APPLY@1110..1130
- EXPR_INDEX@1110..1124
- EXPR_VAR@1110..1113
- NAME@1110..1113
- IDENT@1110..1113 "std"
- DOT@1113..1114 "."
- NAME@1114..1124
- IDENT@1114..1124 "isFunction"
- ARGS_DESC@1124..1130
- L_PAREN@1124..1125 "("
- ARG@1125..1129
- EXPR_VAR@1125..1129
- NAME@1125..1129
- IDENT@1125..1129 "func"
- R_PAREN@1129..1130 ")"
- WHITESPACE@1130..1131 " "
- THEN_KW@1131..1135 "then"
- WHITESPACE@1135..1142 "\n "
- TRUE_EXPR@1142..1220
- EXPR_ERROR@1142..1220
- ERROR_KW@1142..1147 "error"
- WHITESPACE@1147..1148 " "
- EXPR_PARENED@1148..1220
- L_PAREN@1148..1149 "("
- EXPR_BINARY@1149..1219
- LHS_EXPR@1149..1202
- EXPR_STRING@1149..1202
- STRING_SINGLE@1149..1202 "'std.mapWithIndex fir ..."
- WHITESPACE@1202..1203 " "
- PLUS@1203..1204 "+"
- WHITESPACE@1204..1205 " "
- EXPR_APPLY@1205..1219
- EXPR_INDEX@1205..1213
- EXPR_VAR@1205..1208
- NAME@1205..1208
- IDENT@1205..1208 "std"
- DOT@1208..1209 "."
- NAME@1209..1213
- IDENT@1209..1213 "type"
- ARGS_DESC@1213..1219
- L_PAREN@1213..1214 "("
- ARG@1214..1218
- EXPR_VAR@1214..1218
- NAME@1214..1218
- IDENT@1214..1218 "func"
- R_PAREN@1218..1219 ")"
- R_PAREN@1219..1220 ")"
- WHITESPACE@1220..1225 "\n "
- ELSE_KW@1225..1229 "else"
- WHITESPACE@1229..1230 " "
- FALSE_EXPR@1230..1434
- EXPR_IF_THEN_ELSE@1230..1434
- IF_KW@1230..1232 "if"
- WHITESPACE@1232..1233 " "
- EXPR_BINARY@1233..1272
- LHS_EXPR@1233..1250
- EXPR_UNARY@1233..1250
- NOT@1233..1234 "!"
- EXPR_APPLY@1234..1250
- EXPR_INDEX@1234..1245
- EXPR_VAR@1234..1237
- NAME@1234..1237
- IDENT@1234..1237 "std"
- DOT@1237..1238 "."
- NAME@1238..1245
- IDENT@1238..1245 "isArray"
- ARGS_DESC@1245..1250
- L_PAREN@1245..1246 "("
- ARG@1246..1249
- EXPR_VAR@1246..1249
- NAME@1246..1249
- IDENT@1246..1249 "arr"
- R_PAREN@1249..1250 ")"
- WHITESPACE@1250..1251 " "
- AND@1251..1253 "&&"
- WHITESPACE@1253..1254 " "
- EXPR_UNARY@1254..1272
- NOT@1254..1255 "!"
- EXPR_APPLY@1255..1272
- EXPR_INDEX@1255..1267
- EXPR_VAR@1255..1258
- NAME@1255..1258
- IDENT@1255..1258 "std"
- DOT@1258..1259 "."
- NAME@1259..1267
- IDENT@1259..1267 "isString"
- ARGS_DESC@1267..1272
- L_PAREN@1267..1268 "("
- ARG@1268..1271
- EXPR_VAR@1268..1271
- NAME@1268..1271
- IDENT@1268..1271 "arr"
- R_PAREN@1271..1272 ")"
- WHITESPACE@1272..1273 " "
- THEN_KW@1273..1277 "then"
- WHITESPACE@1277..1284 "\n "
- TRUE_EXPR@1284..1359
- EXPR_ERROR@1284..1359
- ERROR_KW@1284..1289 "error"
- WHITESPACE@1289..1290 " "
- EXPR_PARENED@1290..1359
- L_PAREN@1290..1291 "("
- EXPR_BINARY@1291..1358
- LHS_EXPR@1291..1342
- EXPR_STRING@1291..1342
- STRING_SINGLE@1291..1342 "'std.mapWithIndex sec ..."
- WHITESPACE@1342..1343 " "
- PLUS@1343..1344 "+"
- WHITESPACE@1344..1345 " "
- EXPR_APPLY@1345..1358
- EXPR_INDEX@1345..1353
- EXPR_VAR@1345..1348
- NAME@1345..1348
- IDENT@1345..1348 "std"
- DOT@1348..1349 "."
- NAME@1349..1353
- IDENT@1349..1353 "type"
- ARGS_DESC@1353..1358
- L_PAREN@1353..1354 "("
- ARG@1354..1357
- EXPR_VAR@1354..1357
- NAME@1354..1357
- IDENT@1354..1357 "arr"
- R_PAREN@1357..1358 ")"
- R_PAREN@1358..1359 ")"
- WHITESPACE@1359..1364 "\n "
- ELSE_KW@1364..1368 "else"
- WHITESPACE@1368..1375 "\n "
- FALSE_EXPR@1375..1434
- EXPR_APPLY@1375..1434
- EXPR_INDEX@1375..1388
- EXPR_VAR@1375..1378
- NAME@1375..1378
- IDENT@1375..1378 "std"
- DOT@1378..1379 "."
- NAME@1379..1388
- IDENT@1379..1388 "makeArray"
- ARGS_DESC@1388..1434
- L_PAREN@1388..1389 "("
- ARG@1389..1404
- EXPR_APPLY@1389..1404
- EXPR_INDEX@1389..1399
- EXPR_VAR@1389..1392
- NAME@1389..1392
- IDENT@1389..1392 "std"
- DOT@1392..1393 "."
- NAME@1393..1399
- IDENT@1393..1399 "length"
- ARGS_DESC@1399..1404
- L_PAREN@1399..1400 "("
- ARG@1400..1403
- EXPR_VAR@1400..1403
- NAME@1400..1403
- IDENT@1400..1403 "arr"
- R_PAREN@1403..1404 ")"
- COMMA@1404..1405 ","
- WHITESPACE@1405..1406 " "
- ARG@1406..1433
- EXPR_FUNCTION@1406..1433
- FUNCTION_KW@1406..1414 "function"
- PARAMS_DESC@1414..1417
- L_PAREN@1414..1415 "("
- PARAM@1415..1416
- DESTRUCT_FULL@1415..1416
- NAME@1415..1416
- IDENT@1415..1416 "i"
- R_PAREN@1416..1417 ")"
- WHITESPACE@1417..1418 " "
- EXPR_APPLY@1418..1433
- EXPR_VAR@1418..1422
- NAME@1418..1422
- IDENT@1418..1422 "func"
- ARGS_DESC@1422..1433
- L_PAREN@1422..1423 "("
- ARG@1423..1424
- EXPR_VAR@1423..1424
- NAME@1423..1424
- IDENT@1423..1424 "i"
- COMMA@1424..1425 ","
- WHITESPACE@1425..1426 " "
- ARG@1426..1432
- EXPR_INDEX_EXPR@1426..1432
- LHS_EXPR@1426..1429
- EXPR_VAR@1426..1429
- NAME@1426..1429
- IDENT@1426..1429 "arr"
- L_BRACK@1429..1430 "["
- EXPR_VAR@1430..1431
- NAME@1430..1431
- IDENT@1430..1431 "i"
- R_BRACK@1431..1432 "]"
- R_PAREN@1432..1433 ")"
- R_PAREN@1433..1434 ")"
+ MEMBER_FIELD_METHOD@1076..1434
+ FIELD_NAME_FIXED@1076..1088
+ NAME@1076..1088
+ IDENT@1076..1088 "mapWithIndex"
+ PARAMS_DESC@1088..1099
+ L_PAREN@1088..1089 "("
+ PARAM@1089..1093
+ DESTRUCT_FULL@1089..1093
+ NAME@1089..1093
+ IDENT@1089..1093 "func"
+ COMMA@1093..1094 ","
+ WHITESPACE@1094..1095 " "
+ PARAM@1095..1098
+ DESTRUCT_FULL@1095..1098
+ NAME@1095..1098
+ IDENT@1095..1098 "arr"
+ R_PAREN@1098..1099 ")"
+ COLONCOLON@1099..1101 "::"
+ WHITESPACE@1101..1106 "\n "
+ EXPR_IF_THEN_ELSE@1106..1434
+ IF_KW@1106..1108 "if"
+ WHITESPACE@1108..1109 " "
+ EXPR_UNARY@1109..1130
+ NOT@1109..1110 "!"
+ EXPR_APPLY@1110..1130
+ EXPR_INDEX@1110..1124
+ EXPR_VAR@1110..1113
+ NAME@1110..1113
+ IDENT@1110..1113 "std"
+ DOT@1113..1114 "."
+ NAME@1114..1124
+ IDENT@1114..1124 "isFunction"
+ ARGS_DESC@1124..1130
+ L_PAREN@1124..1125 "("
+ ARG@1125..1129
+ EXPR_VAR@1125..1129
+ NAME@1125..1129
+ IDENT@1125..1129 "func"
+ R_PAREN@1129..1130 ")"
+ WHITESPACE@1130..1131 " "
+ THEN_KW@1131..1135 "then"
+ WHITESPACE@1135..1142 "\n "
+ TRUE_EXPR@1142..1220
+ EXPR_ERROR@1142..1220
+ ERROR_KW@1142..1147 "error"
+ WHITESPACE@1147..1148 " "
+ EXPR_PARENED@1148..1220
+ L_PAREN@1148..1149 "("
+ EXPR_BINARY@1149..1219
+ LHS_EXPR@1149..1202
+ EXPR_STRING@1149..1202
+ STRING_SINGLE@1149..1202 "'std.mapWithIndex fir ..."
+ WHITESPACE@1202..1203 " "
+ PLUS@1203..1204 "+"
+ WHITESPACE@1204..1205 " "
+ EXPR_APPLY@1205..1219
+ EXPR_INDEX@1205..1213
+ EXPR_VAR@1205..1208
+ NAME@1205..1208
+ IDENT@1205..1208 "std"
+ DOT@1208..1209 "."
+ NAME@1209..1213
+ IDENT@1209..1213 "type"
+ ARGS_DESC@1213..1219
+ L_PAREN@1213..1214 "("
+ ARG@1214..1218
+ EXPR_VAR@1214..1218
+ NAME@1214..1218
+ IDENT@1214..1218 "func"
+ R_PAREN@1218..1219 ")"
+ R_PAREN@1219..1220 ")"
+ WHITESPACE@1220..1225 "\n "
+ ELSE_KW@1225..1229 "else"
+ WHITESPACE@1229..1230 " "
+ FALSE_EXPR@1230..1434
+ EXPR_IF_THEN_ELSE@1230..1434
+ IF_KW@1230..1232 "if"
+ WHITESPACE@1232..1233 " "
+ EXPR_BINARY@1233..1272
+ LHS_EXPR@1233..1250
+ EXPR_UNARY@1233..1250
+ NOT@1233..1234 "!"
+ EXPR_APPLY@1234..1250
+ EXPR_INDEX@1234..1245
+ EXPR_VAR@1234..1237
+ NAME@1234..1237
+ IDENT@1234..1237 "std"
+ DOT@1237..1238 "."
+ NAME@1238..1245
+ IDENT@1238..1245 "isArray"
+ ARGS_DESC@1245..1250
+ L_PAREN@1245..1246 "("
+ ARG@1246..1249
+ EXPR_VAR@1246..1249
+ NAME@1246..1249
+ IDENT@1246..1249 "arr"
+ R_PAREN@1249..1250 ")"
+ WHITESPACE@1250..1251 " "
+ AND@1251..1253 "&&"
+ WHITESPACE@1253..1254 " "
+ EXPR_UNARY@1254..1272
+ NOT@1254..1255 "!"
+ EXPR_APPLY@1255..1272
+ EXPR_INDEX@1255..1267
+ EXPR_VAR@1255..1258
+ NAME@1255..1258
+ IDENT@1255..1258 "std"
+ DOT@1258..1259 "."
+ NAME@1259..1267
+ IDENT@1259..1267 "isString"
+ ARGS_DESC@1267..1272
+ L_PAREN@1267..1268 "("
+ ARG@1268..1271
+ EXPR_VAR@1268..1271
+ NAME@1268..1271
+ IDENT@1268..1271 "arr"
+ R_PAREN@1271..1272 ")"
+ WHITESPACE@1272..1273 " "
+ THEN_KW@1273..1277 "then"
+ WHITESPACE@1277..1284 "\n "
+ TRUE_EXPR@1284..1359
+ EXPR_ERROR@1284..1359
+ ERROR_KW@1284..1289 "error"
+ WHITESPACE@1289..1290 " "
+ EXPR_PARENED@1290..1359
+ L_PAREN@1290..1291 "("
+ EXPR_BINARY@1291..1358
+ LHS_EXPR@1291..1342
+ EXPR_STRING@1291..1342
+ STRING_SINGLE@1291..1342 "'std.mapWithIndex sec ..."
+ WHITESPACE@1342..1343 " "
+ PLUS@1343..1344 "+"
+ WHITESPACE@1344..1345 " "
+ EXPR_APPLY@1345..1358
+ EXPR_INDEX@1345..1353
+ EXPR_VAR@1345..1348
+ NAME@1345..1348
+ IDENT@1345..1348 "std"
+ DOT@1348..1349 "."
+ NAME@1349..1353
+ IDENT@1349..1353 "type"
+ ARGS_DESC@1353..1358
+ L_PAREN@1353..1354 "("
+ ARG@1354..1357
+ EXPR_VAR@1354..1357
+ NAME@1354..1357
+ IDENT@1354..1357 "arr"
+ R_PAREN@1357..1358 ")"
+ R_PAREN@1358..1359 ")"
+ WHITESPACE@1359..1364 "\n "
+ ELSE_KW@1364..1368 "else"
+ WHITESPACE@1368..1375 "\n "
+ FALSE_EXPR@1375..1434
+ EXPR_APPLY@1375..1434
+ EXPR_INDEX@1375..1388
+ EXPR_VAR@1375..1378
+ NAME@1375..1378
+ IDENT@1375..1378 "std"
+ DOT@1378..1379 "."
+ NAME@1379..1388
+ IDENT@1379..1388 "makeArray"
+ ARGS_DESC@1388..1434
+ L_PAREN@1388..1389 "("
+ ARG@1389..1404
+ EXPR_APPLY@1389..1404
+ EXPR_INDEX@1389..1399
+ EXPR_VAR@1389..1392
+ NAME@1389..1392
+ IDENT@1389..1392 "std"
+ DOT@1392..1393 "."
+ NAME@1393..1399
+ IDENT@1393..1399 "length"
+ ARGS_DESC@1399..1404
+ L_PAREN@1399..1400 "("
+ ARG@1400..1403
+ EXPR_VAR@1400..1403
+ NAME@1400..1403
+ IDENT@1400..1403 "arr"
+ R_PAREN@1403..1404 ")"
+ COMMA@1404..1405 ","
+ WHITESPACE@1405..1406 " "
+ ARG@1406..1433
+ EXPR_FUNCTION@1406..1433
+ FUNCTION_KW@1406..1414 "function"
+ PARAMS_DESC@1414..1417
+ L_PAREN@1414..1415 "("
+ PARAM@1415..1416
+ DESTRUCT_FULL@1415..1416
+ NAME@1415..1416
+ IDENT@1415..1416 "i"
+ R_PAREN@1416..1417 ")"
+ WHITESPACE@1417..1418 " "
+ EXPR_APPLY@1418..1433
+ EXPR_VAR@1418..1422
+ NAME@1418..1422
+ IDENT@1418..1422 "func"
+ ARGS_DESC@1422..1433
+ L_PAREN@1422..1423 "("
+ ARG@1423..1424
+ EXPR_VAR@1423..1424
+ NAME@1423..1424
+ IDENT@1423..1424 "i"
+ COMMA@1424..1425 ","
+ WHITESPACE@1425..1426 " "
+ ARG@1426..1432
+ EXPR_INDEX_EXPR@1426..1432
+ LHS_EXPR@1426..1429
+ EXPR_VAR@1426..1429
+ NAME@1426..1429
+ IDENT@1426..1429 "arr"
+ L_BRACK@1429..1430 "["
+ EXPR_VAR@1430..1431
+ NAME@1430..1431
+ IDENT@1430..1431 "i"
+ R_BRACK@1431..1432 "]"
+ R_PAREN@1432..1433 ")"
+ R_PAREN@1433..1434 ")"
COMMA@1434..1435 ","
WHITESPACE@1435..1439 "\n\n "
- MEMBER_FIELD@1439..1767
- FIELD_METHOD@1439..1767
- FIELD_NAME_FIXED@1439..1449
- NAME@1439..1449
- IDENT@1439..1449 "mapWithKey"
- PARAMS_DESC@1449..1460
- L_PAREN@1449..1450 "("
- PARAM@1450..1454
- DESTRUCT_FULL@1450..1454
- NAME@1450..1454
- IDENT@1450..1454 "func"
- COMMA@1454..1455 ","
- WHITESPACE@1455..1456 " "
- PARAM@1456..1459
- DESTRUCT_FULL@1456..1459
- NAME@1456..1459
- IDENT@1456..1459 "obj"
- R_PAREN@1459..1460 ")"
- COLONCOLON@1460..1462 "::"
- WHITESPACE@1462..1467 "\n "
- EXPR_IF_THEN_ELSE@1467..1767
- IF_KW@1467..1469 "if"
- WHITESPACE@1469..1470 " "
- EXPR_UNARY@1470..1491
- NOT@1470..1471 "!"
- EXPR_APPLY@1471..1491
- EXPR_INDEX@1471..1485
- EXPR_VAR@1471..1474
- NAME@1471..1474
- IDENT@1471..1474 "std"
- DOT@1474..1475 "."
- NAME@1475..1485
- IDENT@1475..1485 "isFunction"
- ARGS_DESC@1485..1491
- L_PAREN@1485..1486 "("
- ARG@1486..1490
- EXPR_VAR@1486..1490
- NAME@1486..1490
- IDENT@1486..1490 "func"
- R_PAREN@1490..1491 ")"
- WHITESPACE@1491..1492 " "
- THEN_KW@1492..1496 "then"
- WHITESPACE@1496..1503 "\n "
- TRUE_EXPR@1503..1579
- EXPR_ERROR@1503..1579
- ERROR_KW@1503..1508 "error"
- WHITESPACE@1508..1509 " "
- EXPR_PARENED@1509..1579
- L_PAREN@1509..1510 "("
- EXPR_BINARY@1510..1578
- LHS_EXPR@1510..1561
- EXPR_STRING@1510..1561
- STRING_SINGLE@1510..1561 "'std.mapWithKey first ..."
- WHITESPACE@1561..1562 " "
- PLUS@1562..1563 "+"
- WHITESPACE@1563..1564 " "
- EXPR_APPLY@1564..1578
- EXPR_INDEX@1564..1572
- EXPR_VAR@1564..1567
- NAME@1564..1567
- IDENT@1564..1567 "std"
- DOT@1567..1568 "."
- NAME@1568..1572
- IDENT@1568..1572 "type"
- ARGS_DESC@1572..1578
- L_PAREN@1572..1573 "("
- ARG@1573..1577
- EXPR_VAR@1573..1577
- NAME@1573..1577
- IDENT@1573..1577 "func"
- R_PAREN@1577..1578 ")"
- R_PAREN@1578..1579 ")"
- WHITESPACE@1579..1584 "\n "
- ELSE_KW@1584..1588 "else"
- WHITESPACE@1588..1589 " "
- FALSE_EXPR@1589..1767
- EXPR_IF_THEN_ELSE@1589..1767
- IF_KW@1589..1591 "if"
- WHITESPACE@1591..1592 " "
- EXPR_UNARY@1592..1610
- NOT@1592..1593 "!"
- EXPR_APPLY@1593..1610
- EXPR_INDEX@1593..1605
- EXPR_VAR@1593..1596
- NAME@1593..1596
- IDENT@1593..1596 "std"
- DOT@1596..1597 "."
- NAME@1597..1605
- IDENT@1597..1605 "isObject"
- ARGS_DESC@1605..1610
- L_PAREN@1605..1606 "("
- ARG@1606..1609
- EXPR_VAR@1606..1609
- NAME@1606..1609
- IDENT@1606..1609 "obj"
- R_PAREN@1609..1610 ")"
- WHITESPACE@1610..1611 " "
- THEN_KW@1611..1615 "then"
- WHITESPACE@1615..1622 "\n "
- TRUE_EXPR@1622..1696
- EXPR_ERROR@1622..1696
- ERROR_KW@1622..1627 "error"
- WHITESPACE@1627..1628 " "
- EXPR_PARENED@1628..1696
- L_PAREN@1628..1629 "("
- EXPR_BINARY@1629..1695
- LHS_EXPR@1629..1679
- EXPR_STRING@1629..1679
- STRING_SINGLE@1629..1679 "'std.mapWithKey secon ..."
- WHITESPACE@1679..1680 " "
- PLUS@1680..1681 "+"
- WHITESPACE@1681..1682 " "
- EXPR_APPLY@1682..1695
- EXPR_INDEX@1682..1690
- EXPR_VAR@1682..1685
- NAME@1682..1685
- IDENT@1682..1685 "std"
- DOT@1685..1686 "."
- NAME@1686..1690
- IDENT@1686..1690 "type"
- ARGS_DESC@1690..1695
- L_PAREN@1690..1691 "("
- ARG@1691..1694
- EXPR_VAR@1691..1694
- NAME@1691..1694
- IDENT@1691..1694 "obj"
- R_PAREN@1694..1695 ")"
- R_PAREN@1695..1696 ")"
- WHITESPACE@1696..1701 "\n "
- ELSE_KW@1701..1705 "else"
- WHITESPACE@1705..1712 "\n "
- FALSE_EXPR@1712..1767
- EXPR_OBJECT@1712..1767
- OBJ_BODY_MEMBER_LIST@1712..1767
- L_BRACE@1712..1713 "{"
- WHITESPACE@1713..1714 " "
- MEMBER_FIELD@1714..1765
- FIELD_NORMAL@1714..1734
- FIELD_NAME_DYNAMIC@1714..1717
- L_BRACK@1714..1715 "["
- EXPR_VAR@1715..1716
- NAME@1715..1716
- IDENT@1715..1716 "k"
- R_BRACK@1716..1717 "]"
- COLON@1717..1718 ":"
- WHITESPACE@1718..1719 " "
- EXPR_APPLY@1719..1734
- EXPR_VAR@1719..1723
- NAME@1719..1723
- IDENT@1719..1723 "func"
- ARGS_DESC@1723..1734
- L_PAREN@1723..1724 "("
- ARG@1724..1725
- EXPR_VAR@1724..1725
- NAME@1724..1725
- IDENT@1724..1725 "k"
- COMMA@1725..1726 ","
- WHITESPACE@1726..1727 " "
- ARG@1727..1733
- EXPR_INDEX_EXPR@1727..1733
- LHS_EXPR@1727..1730
- EXPR_VAR@1727..1730
- NAME@1727..1730
- IDENT@1727..1730 "obj"
- L_BRACK@1730..1731 "["
- EXPR_VAR@1731..1732
- NAME@1731..1732
- IDENT@1731..1732 "k"
- R_BRACK@1732..1733 "]"
- R_PAREN@1733..1734 ")"
- WHITESPACE@1734..1735 " "
- FOR_SPEC@1735..1765
- FOR_KW@1735..1738 "for"
- WHITESPACE@1738..1739 " "
- NAME@1739..1740
- IDENT@1739..1740 "k"
- WHITESPACE@1740..1741 " "
- IN_KW@1741..1743 "in"
- WHITESPACE@1743..1744 " "
- EXPR_APPLY@1744..1765
- EXPR_INDEX@1744..1760
- EXPR_VAR@1744..1747
- NAME@1744..1747
- IDENT@1744..1747 "std"
- DOT@1747..1748 "."
- NAME@1748..1760
- IDENT@1748..1760 "objectFields"
- ARGS_DESC@1760..1765
- L_PAREN@1760..1761 "("
- ARG@1761..1764
- EXPR_VAR@1761..1764
- NAME@1761..1764
- IDENT@1761..1764 "obj"
- R_PAREN@1764..1765 ")"
- WHITESPACE@1765..1766 " "
- R_BRACE@1766..1767 "}"
+ MEMBER_FIELD_METHOD@1439..1767
+ FIELD_NAME_FIXED@1439..1449
+ NAME@1439..1449
+ IDENT@1439..1449 "mapWithKey"
+ PARAMS_DESC@1449..1460
+ L_PAREN@1449..1450 "("
+ PARAM@1450..1454
+ DESTRUCT_FULL@1450..1454
+ NAME@1450..1454
+ IDENT@1450..1454 "func"
+ COMMA@1454..1455 ","
+ WHITESPACE@1455..1456 " "
+ PARAM@1456..1459
+ DESTRUCT_FULL@1456..1459
+ NAME@1456..1459
+ IDENT@1456..1459 "obj"
+ R_PAREN@1459..1460 ")"
+ COLONCOLON@1460..1462 "::"
+ WHITESPACE@1462..1467 "\n "
+ EXPR_IF_THEN_ELSE@1467..1767
+ IF_KW@1467..1469 "if"
+ WHITESPACE@1469..1470 " "
+ EXPR_UNARY@1470..1491
+ NOT@1470..1471 "!"
+ EXPR_APPLY@1471..1491
+ EXPR_INDEX@1471..1485
+ EXPR_VAR@1471..1474
+ NAME@1471..1474
+ IDENT@1471..1474 "std"
+ DOT@1474..1475 "."
+ NAME@1475..1485
+ IDENT@1475..1485 "isFunction"
+ ARGS_DESC@1485..1491
+ L_PAREN@1485..1486 "("
+ ARG@1486..1490
+ EXPR_VAR@1486..1490
+ NAME@1486..1490
+ IDENT@1486..1490 "func"
+ R_PAREN@1490..1491 ")"
+ WHITESPACE@1491..1492 " "
+ THEN_KW@1492..1496 "then"
+ WHITESPACE@1496..1503 "\n "
+ TRUE_EXPR@1503..1579
+ EXPR_ERROR@1503..1579
+ ERROR_KW@1503..1508 "error"
+ WHITESPACE@1508..1509 " "
+ EXPR_PARENED@1509..1579
+ L_PAREN@1509..1510 "("
+ EXPR_BINARY@1510..1578
+ LHS_EXPR@1510..1561
+ EXPR_STRING@1510..1561
+ STRING_SINGLE@1510..1561 "'std.mapWithKey first ..."
+ WHITESPACE@1561..1562 " "
+ PLUS@1562..1563 "+"
+ WHITESPACE@1563..1564 " "
+ EXPR_APPLY@1564..1578
+ EXPR_INDEX@1564..1572
+ EXPR_VAR@1564..1567
+ NAME@1564..1567
+ IDENT@1564..1567 "std"
+ DOT@1567..1568 "."
+ NAME@1568..1572
+ IDENT@1568..1572 "type"
+ ARGS_DESC@1572..1578
+ L_PAREN@1572..1573 "("
+ ARG@1573..1577
+ EXPR_VAR@1573..1577
+ NAME@1573..1577
+ IDENT@1573..1577 "func"
+ R_PAREN@1577..1578 ")"
+ R_PAREN@1578..1579 ")"
+ WHITESPACE@1579..1584 "\n "
+ ELSE_KW@1584..1588 "else"
+ WHITESPACE@1588..1589 " "
+ FALSE_EXPR@1589..1767
+ EXPR_IF_THEN_ELSE@1589..1767
+ IF_KW@1589..1591 "if"
+ WHITESPACE@1591..1592 " "
+ EXPR_UNARY@1592..1610
+ NOT@1592..1593 "!"
+ EXPR_APPLY@1593..1610
+ EXPR_INDEX@1593..1605
+ EXPR_VAR@1593..1596
+ NAME@1593..1596
+ IDENT@1593..1596 "std"
+ DOT@1596..1597 "."
+ NAME@1597..1605
+ IDENT@1597..1605 "isObject"
+ ARGS_DESC@1605..1610
+ L_PAREN@1605..1606 "("
+ ARG@1606..1609
+ EXPR_VAR@1606..1609
+ NAME@1606..1609
+ IDENT@1606..1609 "obj"
+ R_PAREN@1609..1610 ")"
+ WHITESPACE@1610..1611 " "
+ THEN_KW@1611..1615 "then"
+ WHITESPACE@1615..1622 "\n "
+ TRUE_EXPR@1622..1696
+ EXPR_ERROR@1622..1696
+ ERROR_KW@1622..1627 "error"
+ WHITESPACE@1627..1628 " "
+ EXPR_PARENED@1628..1696
+ L_PAREN@1628..1629 "("
+ EXPR_BINARY@1629..1695
+ LHS_EXPR@1629..1679
+ EXPR_STRING@1629..1679
+ STRING_SINGLE@1629..1679 "'std.mapWithKey secon ..."
+ WHITESPACE@1679..1680 " "
+ PLUS@1680..1681 "+"
+ WHITESPACE@1681..1682 " "
+ EXPR_APPLY@1682..1695
+ EXPR_INDEX@1682..1690
+ EXPR_VAR@1682..1685
+ NAME@1682..1685
+ IDENT@1682..1685 "std"
+ DOT@1685..1686 "."
+ NAME@1686..1690
+ IDENT@1686..1690 "type"
+ ARGS_DESC@1690..1695
+ L_PAREN@1690..1691 "("
+ ARG@1691..1694
+ EXPR_VAR@1691..1694
+ NAME@1691..1694
+ IDENT@1691..1694 "obj"
+ R_PAREN@1694..1695 ")"
+ R_PAREN@1695..1696 ")"
+ WHITESPACE@1696..1701 "\n "
+ ELSE_KW@1701..1705 "else"
+ WHITESPACE@1705..1712 "\n "
+ FALSE_EXPR@1712..1767
+ EXPR_OBJECT@1712..1767
+ OBJ_BODY_COMP@1712..1767
+ L_BRACE@1712..1713 "{"
+ WHITESPACE@1713..1714 " "
+ MEMBER_FIELD_NORMAL@1714..1734
+ FIELD_NAME_DYNAMIC@1714..1717
+ L_BRACK@1714..1715 "["
+ EXPR_VAR@1715..1716
+ NAME@1715..1716
+ IDENT@1715..1716 "k"
+ R_BRACK@1716..1717 "]"
+ COLON@1717..1718 ":"
+ WHITESPACE@1718..1719 " "
+ EXPR_APPLY@1719..1734
+ EXPR_VAR@1719..1723
+ NAME@1719..1723
+ IDENT@1719..1723 "func"
+ ARGS_DESC@1723..1734
+ L_PAREN@1723..1724 "("
+ ARG@1724..1725
+ EXPR_VAR@1724..1725
+ NAME@1724..1725
+ IDENT@1724..1725 "k"
+ COMMA@1725..1726 ","
+ WHITESPACE@1726..1727 " "
+ ARG@1727..1733
+ EXPR_INDEX_EXPR@1727..1733
+ LHS_EXPR@1727..1730
+ EXPR_VAR@1727..1730
+ NAME@1727..1730
+ IDENT@1727..1730 "obj"
+ L_BRACK@1730..1731 "["
+ EXPR_VAR@1731..1732
+ NAME@1731..1732
+ IDENT@1731..1732 "k"
+ R_BRACK@1732..1733 "]"
+ R_PAREN@1733..1734 ")"
+ WHITESPACE@1734..1735 " "
+ FOR_SPEC@1735..1765
+ FOR_KW@1735..1738 "for"
+ WHITESPACE@1738..1739 " "
+ NAME@1739..1740
+ IDENT@1739..1740 "k"
+ WHITESPACE@1740..1741 " "
+ IN_KW@1741..1743 "in"
+ WHITESPACE@1743..1744 " "
+ EXPR_APPLY@1744..1765
+ EXPR_INDEX@1744..1760
+ EXPR_VAR@1744..1747
+ NAME@1744..1747
+ IDENT@1744..1747 "std"
+ DOT@1747..1748 "."
+ NAME@1748..1760
+ IDENT@1748..1760 "objectFields"
+ ARGS_DESC@1760..1765
+ L_PAREN@1760..1761 "("
+ ARG@1761..1764
+ EXPR_VAR@1761..1764
+ NAME@1761..1764
+ IDENT@1761..1764 "obj"
+ R_PAREN@1764..1765 ")"
+ WHITESPACE@1765..1766 " "
+ R_BRACE@1766..1767 "}"
COMMA@1767..1768 ","
WHITESPACE@1768..1772 "\n\n "
- MEMBER_FIELD@1772..1815
- FIELD_METHOD@1772..1815
- FIELD_NAME_FIXED@1772..1777
- NAME@1772..1777
- IDENT@1772..1777 "lines"
- PARAMS_DESC@1777..1782
- L_PAREN@1777..1778 "("
- PARAM@1778..1781
- DESTRUCT_FULL@1778..1781
- NAME@1778..1781
- IDENT@1778..1781 "arr"
- R_PAREN@1781..1782 ")"
- COLONCOLON@1782..1784 "::"
- WHITESPACE@1784..1789 "\n "
- EXPR_APPLY@1789..1815
- EXPR_INDEX@1789..1797
- EXPR_VAR@1789..1792
- NAME@1789..1792
- IDENT@1789..1792 "std"
- DOT@1792..1793 "."
- NAME@1793..1797
- IDENT@1793..1797 "join"
- ARGS_DESC@1797..1815
- L_PAREN@1797..1798 "("
- ARG@1798..1802
- EXPR_STRING@1798..1802
- STRING_SINGLE@1798..1802 "'\\n'"
- COMMA@1802..1803 ","
- WHITESPACE@1803..1804 " "
- ARG@1804..1814
- EXPR_BINARY@1804..1814
- LHS_EXPR@1804..1807
- EXPR_VAR@1804..1807
- NAME@1804..1807
- IDENT@1804..1807 "arr"
- WHITESPACE@1807..1808 " "
- PLUS@1808..1809 "+"
- WHITESPACE@1809..1810 " "
- EXPR_ARRAY@1810..1814
- L_BRACK@1810..1811 "["
- EXPR_STRING@1811..1813
- STRING_SINGLE@1811..1813 "''"
- R_BRACK@1813..1814 "]"
- R_PAREN@1814..1815 ")"
+ MEMBER_FIELD_METHOD@1772..1815
+ FIELD_NAME_FIXED@1772..1777
+ NAME@1772..1777
+ IDENT@1772..1777 "lines"
+ PARAMS_DESC@1777..1782
+ L_PAREN@1777..1778 "("
+ PARAM@1778..1781
+ DESTRUCT_FULL@1778..1781
+ NAME@1778..1781
+ IDENT@1778..1781 "arr"
+ R_PAREN@1781..1782 ")"
+ COLONCOLON@1782..1784 "::"
+ WHITESPACE@1784..1789 "\n "
+ EXPR_APPLY@1789..1815
+ EXPR_INDEX@1789..1797
+ EXPR_VAR@1789..1792
+ NAME@1789..1792
+ IDENT@1789..1792 "std"
+ DOT@1792..1793 "."
+ NAME@1793..1797
+ IDENT@1793..1797 "join"
+ ARGS_DESC@1797..1815
+ L_PAREN@1797..1798 "("
+ ARG@1798..1802
+ EXPR_STRING@1798..1802
+ STRING_SINGLE@1798..1802 "'\\n'"
+ COMMA@1802..1803 ","
+ WHITESPACE@1803..1804 " "
+ ARG@1804..1814
+ EXPR_BINARY@1804..1814
+ LHS_EXPR@1804..1807
+ EXPR_VAR@1804..1807
+ NAME@1804..1807
+ IDENT@1804..1807 "arr"
+ WHITESPACE@1807..1808 " "
+ PLUS@1808..1809 "+"
+ WHITESPACE@1809..1810 " "
+ EXPR_ARRAY@1810..1814
+ L_BRACK@1810..1811 "["
+ EXPR_STRING@1811..1813
+ STRING_SINGLE@1811..1813 "''"
+ R_BRACK@1813..1814 "]"
+ R_PAREN@1814..1815 ")"
COMMA@1815..1816 ","
WHITESPACE@1816..1820 "\n\n "
- MEMBER_FIELD@1820..2032
- FIELD_METHOD@1820..2032
- FIELD_NAME_FIXED@1820..1828
- NAME@1820..1828
- IDENT@1820..1828 "deepJoin"
- PARAMS_DESC@1828..1833
- L_PAREN@1828..1829 "("
- PARAM@1829..1832
- DESTRUCT_FULL@1829..1832
- NAME@1829..1832
- IDENT@1829..1832 "arr"
- R_PAREN@1832..1833 ")"
- COLONCOLON@1833..1835 "::"
- WHITESPACE@1835..1840 "\n "
- EXPR_IF_THEN_ELSE@1840..2032
- IF_KW@1840..1842 "if"
- WHITESPACE@1842..1843 " "
- EXPR_APPLY@1843..1860
- EXPR_INDEX@1843..1855
- EXPR_VAR@1843..1846
- NAME@1843..1846
- IDENT@1843..1846 "std"
- DOT@1846..1847 "."
- NAME@1847..1855
- IDENT@1847..1855 "isString"
- ARGS_DESC@1855..1860
- L_PAREN@1855..1856 "("
- ARG@1856..1859
- EXPR_VAR@1856..1859
- NAME@1856..1859
- IDENT@1856..1859 "arr"
- R_PAREN@1859..1860 ")"
- WHITESPACE@1860..1861 " "
- THEN_KW@1861..1865 "then"
- WHITESPACE@1865..1872 "\n "
- TRUE_EXPR@1872..1875
- EXPR_VAR@1872..1875
- NAME@1872..1875
- IDENT@1872..1875 "arr"
- WHITESPACE@1875..1880 "\n "
- ELSE_KW@1880..1884 "else"
- WHITESPACE@1884..1885 " "
- FALSE_EXPR@1885..2032
- EXPR_IF_THEN_ELSE@1885..2032
- IF_KW@1885..1887 "if"
- WHITESPACE@1887..1888 " "
- EXPR_APPLY@1888..1904
- EXPR_INDEX@1888..1899
- EXPR_VAR@1888..1891
- NAME@1888..1891
- IDENT@1888..1891 "std"
- DOT@1891..1892 "."
- NAME@1892..1899
- IDENT@1892..1899 "isArray"
- ARGS_DESC@1899..1904
- L_PAREN@1899..1900 "("
- ARG@1900..1903
- EXPR_VAR@1900..1903
- NAME@1900..1903
- IDENT@1900..1903 "arr"
- R_PAREN@1903..1904 ")"
- WHITESPACE@1904..1905 " "
- THEN_KW@1905..1909 "then"
- WHITESPACE@1909..1916 "\n "
- TRUE_EXPR@1916..1960
- EXPR_APPLY@1916..1960
- EXPR_INDEX@1916..1924
- EXPR_VAR@1916..1919
- NAME@1916..1919
- IDENT@1916..1919 "std"
- DOT@1919..1920 "."
- NAME@1920..1924
- IDENT@1920..1924 "join"
- ARGS_DESC@1924..1960
- L_PAREN@1924..1925 "("
- ARG@1925..1927
- EXPR_STRING@1925..1927
- STRING_SINGLE@1925..1927 "''"
- COMMA@1927..1928 ","
- WHITESPACE@1928..1929 " "
- ARG@1929..1959
- EXPR_ARRAY_COMP@1929..1959
- L_BRACK@1929..1930 "["
- EXPR_APPLY@1930..1945
- EXPR_INDEX@1930..1942
- EXPR_VAR@1930..1933
- NAME@1930..1933
- IDENT@1930..1933 "std"
- DOT@1933..1934 "."
- NAME@1934..1942
- IDENT@1934..1942 "deepJoin"
- ARGS_DESC@1942..1945
- L_PAREN@1942..1943 "("
- ARG@1943..1944
- EXPR_VAR@1943..1944
- NAME@1943..1944
- IDENT@1943..1944 "x"
- R_PAREN@1944..1945 ")"
- WHITESPACE@1945..1946 " "
- FOR_SPEC@1946..1958
- FOR_KW@1946..1949 "for"
- WHITESPACE@1949..1950 " "
- NAME@1950..1951
- IDENT@1950..1951 "x"
- WHITESPACE@1951..1952 " "
- IN_KW@1952..1954 "in"
- WHITESPACE@1954..1955 " "
- EXPR_VAR@1955..1958
- NAME@1955..1958
- IDENT@1955..1958 "arr"
- R_BRACK@1958..1959 "]"
- R_PAREN@1959..1960 ")"
- WHITESPACE@1960..1965 "\n "
- ELSE_KW@1965..1969 "else"
- WHITESPACE@1969..1976 "\n "
- FALSE_EXPR@1976..2032
- EXPR_ERROR@1976..2032
- ERROR_KW@1976..1981 "error"
- WHITESPACE@1981..1982 " "
- EXPR_BINARY@1982..2032
- LHS_EXPR@1982..2016
- EXPR_STRING@1982..2016
- STRING_SINGLE@1982..2016 "'Expected string or a ..."
- WHITESPACE@2016..2017 " "
- MODULO@2017..2018 "%"
- WHITESPACE@2018..2019 " "
- EXPR_APPLY@2019..2032
- EXPR_INDEX@2019..2027
- EXPR_VAR@2019..2022
- NAME@2019..2022
- IDENT@2019..2022 "std"
- DOT@2022..2023 "."
- NAME@2023..2027
- IDENT@2023..2027 "type"
- ARGS_DESC@2027..2032
- L_PAREN@2027..2028 "("
- ARG@2028..2031
- EXPR_VAR@2028..2031
- NAME@2028..2031
- IDENT@2028..2031 "arr"
- R_PAREN@2031..2032 ")"
+ MEMBER_FIELD_METHOD@1820..2032
+ FIELD_NAME_FIXED@1820..1828
+ NAME@1820..1828
+ IDENT@1820..1828 "deepJoin"
+ PARAMS_DESC@1828..1833
+ L_PAREN@1828..1829 "("
+ PARAM@1829..1832
+ DESTRUCT_FULL@1829..1832
+ NAME@1829..1832
+ IDENT@1829..1832 "arr"
+ R_PAREN@1832..1833 ")"
+ COLONCOLON@1833..1835 "::"
+ WHITESPACE@1835..1840 "\n "
+ EXPR_IF_THEN_ELSE@1840..2032
+ IF_KW@1840..1842 "if"
+ WHITESPACE@1842..1843 " "
+ EXPR_APPLY@1843..1860
+ EXPR_INDEX@1843..1855
+ EXPR_VAR@1843..1846
+ NAME@1843..1846
+ IDENT@1843..1846 "std"
+ DOT@1846..1847 "."
+ NAME@1847..1855
+ IDENT@1847..1855 "isString"
+ ARGS_DESC@1855..1860
+ L_PAREN@1855..1856 "("
+ ARG@1856..1859
+ EXPR_VAR@1856..1859
+ NAME@1856..1859
+ IDENT@1856..1859 "arr"
+ R_PAREN@1859..1860 ")"
+ WHITESPACE@1860..1861 " "
+ THEN_KW@1861..1865 "then"
+ WHITESPACE@1865..1872 "\n "
+ TRUE_EXPR@1872..1875
+ EXPR_VAR@1872..1875
+ NAME@1872..1875
+ IDENT@1872..1875 "arr"
+ WHITESPACE@1875..1880 "\n "
+ ELSE_KW@1880..1884 "else"
+ WHITESPACE@1884..1885 " "
+ FALSE_EXPR@1885..2032
+ EXPR_IF_THEN_ELSE@1885..2032
+ IF_KW@1885..1887 "if"
+ WHITESPACE@1887..1888 " "
+ EXPR_APPLY@1888..1904
+ EXPR_INDEX@1888..1899
+ EXPR_VAR@1888..1891
+ NAME@1888..1891
+ IDENT@1888..1891 "std"
+ DOT@1891..1892 "."
+ NAME@1892..1899
+ IDENT@1892..1899 "isArray"
+ ARGS_DESC@1899..1904
+ L_PAREN@1899..1900 "("
+ ARG@1900..1903
+ EXPR_VAR@1900..1903
+ NAME@1900..1903
+ IDENT@1900..1903 "arr"
+ R_PAREN@1903..1904 ")"
+ WHITESPACE@1904..1905 " "
+ THEN_KW@1905..1909 "then"
+ WHITESPACE@1909..1916 "\n "
+ TRUE_EXPR@1916..1960
+ EXPR_APPLY@1916..1960
+ EXPR_INDEX@1916..1924
+ EXPR_VAR@1916..1919
+ NAME@1916..1919
+ IDENT@1916..1919 "std"
+ DOT@1919..1920 "."
+ NAME@1920..1924
+ IDENT@1920..1924 "join"
+ ARGS_DESC@1924..1960
+ L_PAREN@1924..1925 "("
+ ARG@1925..1927
+ EXPR_STRING@1925..1927
+ STRING_SINGLE@1925..1927 "''"
+ COMMA@1927..1928 ","
+ WHITESPACE@1928..1929 " "
+ ARG@1929..1959
+ EXPR_ARRAY_COMP@1929..1959
+ L_BRACK@1929..1930 "["
+ EXPR_APPLY@1930..1945
+ EXPR_INDEX@1930..1942
+ EXPR_VAR@1930..1933
+ NAME@1930..1933
+ IDENT@1930..1933 "std"
+ DOT@1933..1934 "."
+ NAME@1934..1942
+ IDENT@1934..1942 "deepJoin"
+ ARGS_DESC@1942..1945
+ L_PAREN@1942..1943 "("
+ ARG@1943..1944
+ EXPR_VAR@1943..1944
+ NAME@1943..1944
+ IDENT@1943..1944 "x"
+ R_PAREN@1944..1945 ")"
+ WHITESPACE@1945..1946 " "
+ FOR_SPEC@1946..1958
+ FOR_KW@1946..1949 "for"
+ WHITESPACE@1949..1950 " "
+ NAME@1950..1951
+ IDENT@1950..1951 "x"
+ WHITESPACE@1951..1952 " "
+ IN_KW@1952..1954 "in"
+ WHITESPACE@1954..1955 " "
+ EXPR_VAR@1955..1958
+ NAME@1955..1958
+ IDENT@1955..1958 "arr"
+ R_BRACK@1958..1959 "]"
+ R_PAREN@1959..1960 ")"
+ WHITESPACE@1960..1965 "\n "
+ ELSE_KW@1965..1969 "else"
+ WHITESPACE@1969..1976 "\n "
+ FALSE_EXPR@1976..2032
+ EXPR_ERROR@1976..2032
+ ERROR_KW@1976..1981 "error"
+ WHITESPACE@1981..1982 " "
+ EXPR_BINARY@1982..2032
+ LHS_EXPR@1982..2016
+ EXPR_STRING@1982..2016
+ STRING_SINGLE@1982..2016 "'Expected string or a ..."
+ WHITESPACE@2016..2017 " "
+ MODULO@2017..2018 "%"
+ WHITESPACE@2018..2019 " "
+ EXPR_APPLY@2019..2032
+ EXPR_INDEX@2019..2027
+ EXPR_VAR@2019..2022
+ NAME@2019..2022
+ IDENT@2019..2022 "std"
+ DOT@2022..2023 "."
+ NAME@2023..2027
+ IDENT@2023..2027 "type"
+ ARGS_DESC@2027..2032
+ L_PAREN@2027..2028 "("
+ ARG@2028..2031
+ EXPR_VAR@2028..2031
+ NAME@2028..2031
+ IDENT@2028..2031 "arr"
+ R_PAREN@2031..2032 ")"
COMMA@2032..2033 ","
WHITESPACE@2033..2037 "\n\n "
- MEMBER_FIELD@2037..2512
- FIELD_METHOD@2037..2512
- FIELD_NAME_FIXED@2037..2046
- NAME@2037..2046
- IDENT@2037..2046 "filterMap"
- PARAMS_DESC@2046..2074
- L_PAREN@2046..2047 "("
- PARAM@2047..2058
- DESTRUCT_FULL@2047..2058
- NAME@2047..2058
- IDENT@2047..2058 "filter_func"
- COMMA@2058..2059 ","
- WHITESPACE@2059..2060 " "
- PARAM@2060..2068
- DESTRUCT_FULL@2060..2068
- NAME@2060..2068
- IDENT@2060..2068 "map_func"
- COMMA@2068..2069 ","
- WHITESPACE@2069..2070 " "
- PARAM@2070..2073
- DESTRUCT_FULL@2070..2073
- NAME@2070..2073
- IDENT@2070..2073 "arr"
- R_PAREN@2073..2074 ")"
- COLONCOLON@2074..2076 "::"
- WHITESPACE@2076..2081 "\n "
- EXPR_IF_THEN_ELSE@2081..2512
- IF_KW@2081..2083 "if"
- WHITESPACE@2083..2084 " "
- EXPR_UNARY@2084..2112
- NOT@2084..2085 "!"
- EXPR_APPLY@2085..2112
- EXPR_INDEX@2085..2099
- EXPR_VAR@2085..2088
- NAME@2085..2088
- IDENT@2085..2088 "std"
- DOT@2088..2089 "."
- NAME@2089..2099
- IDENT@2089..2099 "isFunction"
- ARGS_DESC@2099..2112
- L_PAREN@2099..2100 "("
- ARG@2100..2111
- EXPR_VAR@2100..2111
- NAME@2100..2111
- IDENT@2100..2111 "filter_func"
- R_PAREN@2111..2112 ")"
- WHITESPACE@2112..2113 " "
- THEN_KW@2113..2117 "then"
- WHITESPACE@2117..2124 "\n "
- TRUE_EXPR@2124..2206
- EXPR_ERROR@2124..2206
- ERROR_KW@2124..2129 "error"
- WHITESPACE@2129..2130 " "
- EXPR_PARENED@2130..2206
- L_PAREN@2130..2131 "("
- EXPR_BINARY@2131..2205
- LHS_EXPR@2131..2181
- EXPR_STRING@2131..2181
- STRING_SINGLE@2131..2181 "'std.filterMap first ..."
- WHITESPACE@2181..2182 " "
- PLUS@2182..2183 "+"
- WHITESPACE@2183..2184 " "
- EXPR_APPLY@2184..2205
- EXPR_INDEX@2184..2192
- EXPR_VAR@2184..2187
- NAME@2184..2187
- IDENT@2184..2187 "std"
- DOT@2187..2188 "."
- NAME@2188..2192
- IDENT@2188..2192 "type"
- ARGS_DESC@2192..2205
- L_PAREN@2192..2193 "("
- ARG@2193..2204
- EXPR_VAR@2193..2204
- NAME@2193..2204
- IDENT@2193..2204 "filter_func"
- R_PAREN@2204..2205 ")"
- R_PAREN@2205..2206 ")"
- WHITESPACE@2206..2211 "\n "
- ELSE_KW@2211..2215 "else"
- WHITESPACE@2215..2216 " "
- FALSE_EXPR@2216..2512
- EXPR_IF_THEN_ELSE@2216..2512
- IF_KW@2216..2218 "if"
- WHITESPACE@2218..2219 " "
- EXPR_UNARY@2219..2244
- NOT@2219..2220 "!"
- EXPR_APPLY@2220..2244
- EXPR_INDEX@2220..2234
- EXPR_VAR@2220..2223
- NAME@2220..2223
- IDENT@2220..2223 "std"
- DOT@2223..2224 "."
- NAME@2224..2234
- IDENT@2224..2234 "isFunction"
- ARGS_DESC@2234..2244
- L_PAREN@2234..2235 "("
- ARG@2235..2243
- EXPR_VAR@2235..2243
- NAME@2235..2243
- IDENT@2235..2243 "map_func"
- R_PAREN@2243..2244 ")"
- WHITESPACE@2244..2245 " "
- THEN_KW@2245..2249 "then"
- WHITESPACE@2249..2256 "\n "
- TRUE_EXPR@2256..2336
- EXPR_ERROR@2256..2336
- ERROR_KW@2256..2261 "error"
- WHITESPACE@2261..2262 " "
- EXPR_PARENED@2262..2336
- L_PAREN@2262..2263 "("
- EXPR_BINARY@2263..2335
- LHS_EXPR@2263..2314
- EXPR_STRING@2263..2314
- STRING_SINGLE@2263..2314 "'std.filterMap second ..."
- WHITESPACE@2314..2315 " "
- PLUS@2315..2316 "+"
- WHITESPACE@2316..2317 " "
- EXPR_APPLY@2317..2335
- EXPR_INDEX@2317..2325
- EXPR_VAR@2317..2320
- NAME@2317..2320
- IDENT@2317..2320 "std"
- DOT@2320..2321 "."
- NAME@2321..2325
- IDENT@2321..2325 "type"
- ARGS_DESC@2325..2335
- L_PAREN@2325..2326 "("
- ARG@2326..2334
- EXPR_VAR@2326..2334
- NAME@2326..2334
- IDENT@2326..2334 "map_func"
- R_PAREN@2334..2335 ")"
- R_PAREN@2335..2336 ")"
- WHITESPACE@2336..2341 "\n "
- ELSE_KW@2341..2345 "else"
- WHITESPACE@2345..2346 " "
- FALSE_EXPR@2346..2512
- EXPR_IF_THEN_ELSE@2346..2512
- IF_KW@2346..2348 "if"
- WHITESPACE@2348..2349 " "
- EXPR_UNARY@2349..2366
- NOT@2349..2350 "!"
- EXPR_APPLY@2350..2366
- EXPR_INDEX@2350..2361
- EXPR_VAR@2350..2353
- NAME@2350..2353
- IDENT@2350..2353 "std"
- DOT@2353..2354 "."
- NAME@2354..2361
- IDENT@2354..2361 "isArray"
- ARGS_DESC@2361..2366
- L_PAREN@2361..2362 "("
- ARG@2362..2365
- EXPR_VAR@2362..2365
- NAME@2362..2365
- IDENT@2362..2365 "arr"
- R_PAREN@2365..2366 ")"
- WHITESPACE@2366..2367 " "
- THEN_KW@2367..2371 "then"
- WHITESPACE@2371..2378 "\n "
- TRUE_EXPR@2378..2449
- EXPR_ERROR@2378..2449
- ERROR_KW@2378..2383 "error"
- WHITESPACE@2383..2384 " "
- EXPR_PARENED@2384..2449
- L_PAREN@2384..2385 "("
- EXPR_BINARY@2385..2448
- LHS_EXPR@2385..2432
- EXPR_STRING@2385..2432
- STRING_SINGLE@2385..2432 "'std.filterMap third ..."
- WHITESPACE@2432..2433 " "
- PLUS@2433..2434 "+"
- WHITESPACE@2434..2435 " "
- EXPR_APPLY@2435..2448
- EXPR_INDEX@2435..2443
- EXPR_VAR@2435..2438
- NAME@2435..2438
- IDENT@2435..2438 "std"
- DOT@2438..2439 "."
- NAME@2439..2443
- IDENT@2439..2443 "type"
- ARGS_DESC@2443..2448
- L_PAREN@2443..2444 "("
- ARG@2444..2447
- EXPR_VAR@2444..2447
- NAME@2444..2447
- IDENT@2444..2447 "arr"
- R_PAREN@2447..2448 ")"
- R_PAREN@2448..2449 ")"
- WHITESPACE@2449..2454 "\n "
- ELSE_KW@2454..2458 "else"
- WHITESPACE@2458..2465 "\n "
- FALSE_EXPR@2465..2512
- EXPR_APPLY@2465..2512
- EXPR_INDEX@2465..2472
- EXPR_VAR@2465..2468
- NAME@2465..2468
- IDENT@2465..2468 "std"
- DOT@2468..2469 "."
- NAME@2469..2472
- IDENT@2469..2472 "map"
- ARGS_DESC@2472..2512
- L_PAREN@2472..2473 "("
- ARG@2473..2481
- EXPR_VAR@2473..2481
- NAME@2473..2481
- IDENT@2473..2481 "map_func"
- COMMA@2481..2482 ","
- WHITESPACE@2482..2483 " "
- ARG@2483..2511
- EXPR_APPLY@2483..2511
- EXPR_INDEX@2483..2493
- EXPR_VAR@2483..2486
- NAME@2483..2486
- IDENT@2483..2486 "std"
- DOT@2486..2487 "."
- NAME@2487..2493
- IDENT@2487..2493 "filter"
- ARGS_DESC@2493..2511
- L_PAREN@2493..2494 "("
- ARG@2494..2505
- EXPR_VAR@2494..2505
- NAME@2494..2505
- IDENT@2494..2505 "filter_func"
- COMMA@2505..2506 ","
- WHITESPACE@2506..2507 " "
- ARG@2507..2510
- EXPR_VAR@2507..2510
- NAME@2507..2510
- IDENT@2507..2510 "arr"
- R_PAREN@2510..2511 ")"
- R_PAREN@2511..2512 ")"
+ MEMBER_FIELD_METHOD@2037..2512
+ FIELD_NAME_FIXED@2037..2046
+ NAME@2037..2046
+ IDENT@2037..2046 "filterMap"
+ PARAMS_DESC@2046..2074
+ L_PAREN@2046..2047 "("
+ PARAM@2047..2058
+ DESTRUCT_FULL@2047..2058
+ NAME@2047..2058
+ IDENT@2047..2058 "filter_func"
+ COMMA@2058..2059 ","
+ WHITESPACE@2059..2060 " "
+ PARAM@2060..2068
+ DESTRUCT_FULL@2060..2068
+ NAME@2060..2068
+ IDENT@2060..2068 "map_func"
+ COMMA@2068..2069 ","
+ WHITESPACE@2069..2070 " "
+ PARAM@2070..2073
+ DESTRUCT_FULL@2070..2073
+ NAME@2070..2073
+ IDENT@2070..2073 "arr"
+ R_PAREN@2073..2074 ")"
+ COLONCOLON@2074..2076 "::"
+ WHITESPACE@2076..2081 "\n "
+ EXPR_IF_THEN_ELSE@2081..2512
+ IF_KW@2081..2083 "if"
+ WHITESPACE@2083..2084 " "
+ EXPR_UNARY@2084..2112
+ NOT@2084..2085 "!"
+ EXPR_APPLY@2085..2112
+ EXPR_INDEX@2085..2099
+ EXPR_VAR@2085..2088
+ NAME@2085..2088
+ IDENT@2085..2088 "std"
+ DOT@2088..2089 "."
+ NAME@2089..2099
+ IDENT@2089..2099 "isFunction"
+ ARGS_DESC@2099..2112
+ L_PAREN@2099..2100 "("
+ ARG@2100..2111
+ EXPR_VAR@2100..2111
+ NAME@2100..2111
+ IDENT@2100..2111 "filter_func"
+ R_PAREN@2111..2112 ")"
+ WHITESPACE@2112..2113 " "
+ THEN_KW@2113..2117 "then"
+ WHITESPACE@2117..2124 "\n "
+ TRUE_EXPR@2124..2206
+ EXPR_ERROR@2124..2206
+ ERROR_KW@2124..2129 "error"
+ WHITESPACE@2129..2130 " "
+ EXPR_PARENED@2130..2206
+ L_PAREN@2130..2131 "("
+ EXPR_BINARY@2131..2205
+ LHS_EXPR@2131..2181
+ EXPR_STRING@2131..2181
+ STRING_SINGLE@2131..2181 "'std.filterMap first ..."
+ WHITESPACE@2181..2182 " "
+ PLUS@2182..2183 "+"
+ WHITESPACE@2183..2184 " "
+ EXPR_APPLY@2184..2205
+ EXPR_INDEX@2184..2192
+ EXPR_VAR@2184..2187
+ NAME@2184..2187
+ IDENT@2184..2187 "std"
+ DOT@2187..2188 "."
+ NAME@2188..2192
+ IDENT@2188..2192 "type"
+ ARGS_DESC@2192..2205
+ L_PAREN@2192..2193 "("
+ ARG@2193..2204
+ EXPR_VAR@2193..2204
+ NAME@2193..2204
+ IDENT@2193..2204 "filter_func"
+ R_PAREN@2204..2205 ")"
+ R_PAREN@2205..2206 ")"
+ WHITESPACE@2206..2211 "\n "
+ ELSE_KW@2211..2215 "else"
+ WHITESPACE@2215..2216 " "
+ FALSE_EXPR@2216..2512
+ EXPR_IF_THEN_ELSE@2216..2512
+ IF_KW@2216..2218 "if"
+ WHITESPACE@2218..2219 " "
+ EXPR_UNARY@2219..2244
+ NOT@2219..2220 "!"
+ EXPR_APPLY@2220..2244
+ EXPR_INDEX@2220..2234
+ EXPR_VAR@2220..2223
+ NAME@2220..2223
+ IDENT@2220..2223 "std"
+ DOT@2223..2224 "."
+ NAME@2224..2234
+ IDENT@2224..2234 "isFunction"
+ ARGS_DESC@2234..2244
+ L_PAREN@2234..2235 "("
+ ARG@2235..2243
+ EXPR_VAR@2235..2243
+ NAME@2235..2243
+ IDENT@2235..2243 "map_func"
+ R_PAREN@2243..2244 ")"
+ WHITESPACE@2244..2245 " "
+ THEN_KW@2245..2249 "then"
+ WHITESPACE@2249..2256 "\n "
+ TRUE_EXPR@2256..2336
+ EXPR_ERROR@2256..2336
+ ERROR_KW@2256..2261 "error"
+ WHITESPACE@2261..2262 " "
+ EXPR_PARENED@2262..2336
+ L_PAREN@2262..2263 "("
+ EXPR_BINARY@2263..2335
+ LHS_EXPR@2263..2314
+ EXPR_STRING@2263..2314
+ STRING_SINGLE@2263..2314 "'std.filterMap second ..."
+ WHITESPACE@2314..2315 " "
+ PLUS@2315..2316 "+"
+ WHITESPACE@2316..2317 " "
+ EXPR_APPLY@2317..2335
+ EXPR_INDEX@2317..2325
+ EXPR_VAR@2317..2320
+ NAME@2317..2320
+ IDENT@2317..2320 "std"
+ DOT@2320..2321 "."
+ NAME@2321..2325
+ IDENT@2321..2325 "type"
+ ARGS_DESC@2325..2335
+ L_PAREN@2325..2326 "("
+ ARG@2326..2334
+ EXPR_VAR@2326..2334
+ NAME@2326..2334
+ IDENT@2326..2334 "map_func"
+ R_PAREN@2334..2335 ")"
+ R_PAREN@2335..2336 ")"
+ WHITESPACE@2336..2341 "\n "
+ ELSE_KW@2341..2345 "else"
+ WHITESPACE@2345..2346 " "
+ FALSE_EXPR@2346..2512
+ EXPR_IF_THEN_ELSE@2346..2512
+ IF_KW@2346..2348 "if"
+ WHITESPACE@2348..2349 " "
+ EXPR_UNARY@2349..2366
+ NOT@2349..2350 "!"
+ EXPR_APPLY@2350..2366
+ EXPR_INDEX@2350..2361
+ EXPR_VAR@2350..2353
+ NAME@2350..2353
+ IDENT@2350..2353 "std"
+ DOT@2353..2354 "."
+ NAME@2354..2361
+ IDENT@2354..2361 "isArray"
+ ARGS_DESC@2361..2366
+ L_PAREN@2361..2362 "("
+ ARG@2362..2365
+ EXPR_VAR@2362..2365
+ NAME@2362..2365
+ IDENT@2362..2365 "arr"
+ R_PAREN@2365..2366 ")"
+ WHITESPACE@2366..2367 " "
+ THEN_KW@2367..2371 "then"
+ WHITESPACE@2371..2378 "\n "
+ TRUE_EXPR@2378..2449
+ EXPR_ERROR@2378..2449
+ ERROR_KW@2378..2383 "error"
+ WHITESPACE@2383..2384 " "
+ EXPR_PARENED@2384..2449
+ L_PAREN@2384..2385 "("
+ EXPR_BINARY@2385..2448
+ LHS_EXPR@2385..2432
+ EXPR_STRING@2385..2432
+ STRING_SINGLE@2385..2432 "'std.filterMap third ..."
+ WHITESPACE@2432..2433 " "
+ PLUS@2433..2434 "+"
+ WHITESPACE@2434..2435 " "
+ EXPR_APPLY@2435..2448
+ EXPR_INDEX@2435..2443
+ EXPR_VAR@2435..2438
+ NAME@2435..2438
+ IDENT@2435..2438 "std"
+ DOT@2438..2439 "."
+ NAME@2439..2443
+ IDENT@2439..2443 "type"
+ ARGS_DESC@2443..2448
+ L_PAREN@2443..2444 "("
+ ARG@2444..2447
+ EXPR_VAR@2444..2447
+ NAME@2444..2447
+ IDENT@2444..2447 "arr"
+ R_PAREN@2447..2448 ")"
+ R_PAREN@2448..2449 ")"
+ WHITESPACE@2449..2454 "\n "
+ ELSE_KW@2454..2458 "else"
+ WHITESPACE@2458..2465 "\n "
+ FALSE_EXPR@2465..2512
+ EXPR_APPLY@2465..2512
+ EXPR_INDEX@2465..2472
+ EXPR_VAR@2465..2468
+ NAME@2465..2468
+ IDENT@2465..2468 "std"
+ DOT@2468..2469 "."
+ NAME@2469..2472
+ IDENT@2469..2472 "map"
+ ARGS_DESC@2472..2512
+ L_PAREN@2472..2473 "("
+ ARG@2473..2481
+ EXPR_VAR@2473..2481
+ NAME@2473..2481
+ IDENT@2473..2481 "map_func"
+ COMMA@2481..2482 ","
+ WHITESPACE@2482..2483 " "
+ ARG@2483..2511
+ EXPR_APPLY@2483..2511
+ EXPR_INDEX@2483..2493
+ EXPR_VAR@2483..2486
+ NAME@2483..2486
+ IDENT@2483..2486 "std"
+ DOT@2486..2487 "."
+ NAME@2487..2493
+ IDENT@2487..2493 "filter"
+ ARGS_DESC@2493..2511
+ L_PAREN@2493..2494 "("
+ ARG@2494..2505
+ EXPR_VAR@2494..2505
+ NAME@2494..2505
+ IDENT@2494..2505 "filter_func"
+ COMMA@2505..2506 ","
+ WHITESPACE@2506..2507 " "
+ ARG@2507..2510
+ EXPR_VAR@2507..2510
+ NAME@2507..2510
+ IDENT@2507..2510 "arr"
+ R_PAREN@2510..2511 ")"
+ R_PAREN@2511..2512 ")"
COMMA@2512..2513 ","
WHITESPACE@2513..2517 "\n\n "
- MEMBER_FIELD@2517..2625
- FIELD_METHOD@2517..2625
- FIELD_NAME_FIXED@2517..2528
- NAME@2517..2528
- IDENT@2517..2528 "assertEqual"
- PARAMS_DESC@2528..2534
- L_PAREN@2528..2529 "("
- PARAM@2529..2530
- DESTRUCT_FULL@2529..2530
- NAME@2529..2530
- IDENT@2529..2530 "a"
- COMMA@2530..2531 ","
- WHITESPACE@2531..2532 " "
- PARAM@2532..2533
- DESTRUCT_FULL@2532..2533
- NAME@2532..2533
- IDENT@2532..2533 "b"
- R_PAREN@2533..2534 ")"
- COLONCOLON@2534..2536 "::"
- WHITESPACE@2536..2541 "\n "
- EXPR_IF_THEN_ELSE@2541..2625
- IF_KW@2541..2543 "if"
- WHITESPACE@2543..2544 " "
- EXPR_BINARY@2544..2550
- LHS_EXPR@2544..2545
- EXPR_VAR@2544..2545
- NAME@2544..2545
- IDENT@2544..2545 "a"
- WHITESPACE@2545..2546 " "
- EQ@2546..2548 "=="
- WHITESPACE@2548..2549 " "
- EXPR_VAR@2549..2550
- NAME@2549..2550
- IDENT@2549..2550 "b"
- WHITESPACE@2550..2551 " "
- THEN_KW@2551..2555 "then"
- WHITESPACE@2555..2562 "\n "
- TRUE_EXPR@2562..2566
- EXPR_LITERAL@2562..2566
- TRUE_KW@2562..2566 "true"
- WHITESPACE@2566..2571 "\n "
- ELSE_KW@2571..2575 "else"
- WHITESPACE@2575..2582 "\n "
- FALSE_EXPR@2582..2625
- EXPR_ERROR@2582..2625
- ERROR_KW@2582..2587 "error"
- WHITESPACE@2587..2588 " "
- EXPR_BINARY@2588..2625
- LHS_EXPR@2588..2621
- EXPR_BINARY@2588..2621
- LHS_EXPR@2588..2612
- EXPR_BINARY@2588..2612
- LHS_EXPR@2588..2608
- EXPR_STRING@2588..2608
- STRING_SINGLE@2588..2608 "'Assertion failed. '"
- WHITESPACE@2608..2609 " "
- PLUS@2609..2610 "+"
- WHITESPACE@2610..2611 " "
- EXPR_VAR@2611..2612
- NAME@2611..2612
- IDENT@2611..2612 "a"
- WHITESPACE@2612..2613 " "
- PLUS@2613..2614 "+"
- WHITESPACE@2614..2615 " "
- EXPR_STRING@2615..2621
- STRING_SINGLE@2615..2621 "' != '"
- WHITESPACE@2621..2622 " "
- PLUS@2622..2623 "+"
- WHITESPACE@2623..2624 " "
- EXPR_VAR@2624..2625
- NAME@2624..2625
- IDENT@2624..2625 "b"
+ MEMBER_FIELD_METHOD@2517..2625
+ FIELD_NAME_FIXED@2517..2528
+ NAME@2517..2528
+ IDENT@2517..2528 "assertEqual"
+ PARAMS_DESC@2528..2534
+ L_PAREN@2528..2529 "("
+ PARAM@2529..2530
+ DESTRUCT_FULL@2529..2530
+ NAME@2529..2530
+ IDENT@2529..2530 "a"
+ COMMA@2530..2531 ","
+ WHITESPACE@2531..2532 " "
+ PARAM@2532..2533
+ DESTRUCT_FULL@2532..2533
+ NAME@2532..2533
+ IDENT@2532..2533 "b"
+ R_PAREN@2533..2534 ")"
+ COLONCOLON@2534..2536 "::"
+ WHITESPACE@2536..2541 "\n "
+ EXPR_IF_THEN_ELSE@2541..2625
+ IF_KW@2541..2543 "if"
+ WHITESPACE@2543..2544 " "
+ EXPR_BINARY@2544..2550
+ LHS_EXPR@2544..2545
+ EXPR_VAR@2544..2545
+ NAME@2544..2545
+ IDENT@2544..2545 "a"
+ WHITESPACE@2545..2546 " "
+ EQ@2546..2548 "=="
+ WHITESPACE@2548..2549 " "
+ EXPR_VAR@2549..2550
+ NAME@2549..2550
+ IDENT@2549..2550 "b"
+ WHITESPACE@2550..2551 " "
+ THEN_KW@2551..2555 "then"
+ WHITESPACE@2555..2562 "\n "
+ TRUE_EXPR@2562..2566
+ EXPR_LITERAL@2562..2566
+ TRUE_KW@2562..2566 "true"
+ WHITESPACE@2566..2571 "\n "
+ ELSE_KW@2571..2575 "else"
+ WHITESPACE@2575..2582 "\n "
+ FALSE_EXPR@2582..2625
+ EXPR_ERROR@2582..2625
+ ERROR_KW@2582..2587 "error"
+ WHITESPACE@2587..2588 " "
+ EXPR_BINARY@2588..2625
+ LHS_EXPR@2588..2621
+ EXPR_BINARY@2588..2621
+ LHS_EXPR@2588..2612
+ EXPR_BINARY@2588..2612
+ LHS_EXPR@2588..2608
+ EXPR_STRING@2588..2608
+ STRING_SINGLE@2588..2608 "'Assertion failed. '"
+ WHITESPACE@2608..2609 " "
+ PLUS@2609..2610 "+"
+ WHITESPACE@2610..2611 " "
+ EXPR_VAR@2611..2612
+ NAME@2611..2612
+ IDENT@2611..2612 "a"
+ WHITESPACE@2612..2613 " "
+ PLUS@2613..2614 "+"
+ WHITESPACE@2614..2615 " "
+ EXPR_STRING@2615..2621
+ STRING_SINGLE@2615..2621 "' != '"
+ WHITESPACE@2621..2622 " "
+ PLUS@2622..2623 "+"
+ WHITESPACE@2623..2624 " "
+ EXPR_VAR@2624..2625
+ NAME@2624..2625
+ IDENT@2624..2625 "b"
COMMA@2625..2626 ","
WHITESPACE@2626..2630 "\n\n "
- MEMBER_FIELD@2630..2732
- FIELD_METHOD@2630..2732
- FIELD_NAME_FIXED@2630..2635
- NAME@2630..2635
- IDENT@2630..2635 "clamp"
- PARAMS_DESC@2635..2654
- L_PAREN@2635..2636 "("
- PARAM@2636..2637
- DESTRUCT_FULL@2636..2637
- NAME@2636..2637
- IDENT@2636..2637 "x"
- COMMA@2637..2638 ","
- WHITESPACE@2638..2639 " "
- PARAM@2639..2645
- DESTRUCT_FULL@2639..2645
- NAME@2639..2645
- IDENT@2639..2645 "minVal"
- COMMA@2645..2646 ","
- WHITESPACE@2646..2647 " "
- PARAM@2647..2653
- DESTRUCT_FULL@2647..2653
- NAME@2647..2653
- IDENT@2647..2653 "maxVal"
- R_PAREN@2653..2654 ")"
- COLONCOLON@2654..2656 "::"
- WHITESPACE@2656..2661 "\n "
- EXPR_IF_THEN_ELSE@2661..2732
- IF_KW@2661..2663 "if"
- WHITESPACE@2663..2664 " "
- EXPR_BINARY@2664..2674
- LHS_EXPR@2664..2665
- EXPR_VAR@2664..2665
- NAME@2664..2665
- IDENT@2664..2665 "x"
- WHITESPACE@2665..2666 " "
- LT@2666..2667 "<"
- WHITESPACE@2667..2668 " "
- EXPR_VAR@2668..2674
- NAME@2668..2674
- IDENT@2668..2674 "minVal"
- WHITESPACE@2674..2675 " "
- THEN_KW@2675..2679 "then"
- WHITESPACE@2679..2680 " "
- TRUE_EXPR@2680..2686
- EXPR_VAR@2680..2686
- NAME@2680..2686
- IDENT@2680..2686 "minVal"
- WHITESPACE@2686..2691 "\n "
- ELSE_KW@2691..2695 "else"
- WHITESPACE@2695..2696 " "
- FALSE_EXPR@2696..2732
- EXPR_IF_THEN_ELSE@2696..2732
- IF_KW@2696..2698 "if"
- WHITESPACE@2698..2699 " "
- EXPR_BINARY@2699..2709
- LHS_EXPR@2699..2700
- EXPR_VAR@2699..2700
- NAME@2699..2700
- IDENT@2699..2700 "x"
- WHITESPACE@2700..2701 " "
- GT@2701..2702 ">"
- WHITESPACE@2702..2703 " "
- EXPR_VAR@2703..2709
- NAME@2703..2709
- IDENT@2703..2709 "maxVal"
- WHITESPACE@2709..2710 " "
- THEN_KW@2710..2714 "then"
- WHITESPACE@2714..2715 " "
- TRUE_EXPR@2715..2721
- EXPR_VAR@2715..2721
- NAME@2715..2721
- IDENT@2715..2721 "maxVal"
- WHITESPACE@2721..2726 "\n "
- ELSE_KW@2726..2730 "else"
- WHITESPACE@2730..2731 " "
- FALSE_EXPR@2731..2732
- EXPR_VAR@2731..2732
- NAME@2731..2732
- IDENT@2731..2732 "x"
+ MEMBER_FIELD_METHOD@2630..2732
+ FIELD_NAME_FIXED@2630..2635
+ NAME@2630..2635
+ IDENT@2630..2635 "clamp"
+ PARAMS_DESC@2635..2654
+ L_PAREN@2635..2636 "("
+ PARAM@2636..2637
+ DESTRUCT_FULL@2636..2637
+ NAME@2636..2637
+ IDENT@2636..2637 "x"
+ COMMA@2637..2638 ","
+ WHITESPACE@2638..2639 " "
+ PARAM@2639..2645
+ DESTRUCT_FULL@2639..2645
+ NAME@2639..2645
+ IDENT@2639..2645 "minVal"
+ COMMA@2645..2646 ","
+ WHITESPACE@2646..2647 " "
+ PARAM@2647..2653
+ DESTRUCT_FULL@2647..2653
+ NAME@2647..2653
+ IDENT@2647..2653 "maxVal"
+ R_PAREN@2653..2654 ")"
+ COLONCOLON@2654..2656 "::"
+ WHITESPACE@2656..2661 "\n "
+ EXPR_IF_THEN_ELSE@2661..2732
+ IF_KW@2661..2663 "if"
+ WHITESPACE@2663..2664 " "
+ EXPR_BINARY@2664..2674
+ LHS_EXPR@2664..2665
+ EXPR_VAR@2664..2665
+ NAME@2664..2665
+ IDENT@2664..2665 "x"
+ WHITESPACE@2665..2666 " "
+ LT@2666..2667 "<"
+ WHITESPACE@2667..2668 " "
+ EXPR_VAR@2668..2674
+ NAME@2668..2674
+ IDENT@2668..2674 "minVal"
+ WHITESPACE@2674..2675 " "
+ THEN_KW@2675..2679 "then"
+ WHITESPACE@2679..2680 " "
+ TRUE_EXPR@2680..2686
+ EXPR_VAR@2680..2686
+ NAME@2680..2686
+ IDENT@2680..2686 "minVal"
+ WHITESPACE@2686..2691 "\n "
+ ELSE_KW@2691..2695 "else"
+ WHITESPACE@2695..2696 " "
+ FALSE_EXPR@2696..2732
+ EXPR_IF_THEN_ELSE@2696..2732
+ IF_KW@2696..2698 "if"
+ WHITESPACE@2698..2699 " "
+ EXPR_BINARY@2699..2709
+ LHS_EXPR@2699..2700
+ EXPR_VAR@2699..2700
+ NAME@2699..2700
+ IDENT@2699..2700 "x"
+ WHITESPACE@2700..2701 " "
+ GT@2701..2702 ">"
+ WHITESPACE@2702..2703 " "
+ EXPR_VAR@2703..2709
+ NAME@2703..2709
+ IDENT@2703..2709 "maxVal"
+ WHITESPACE@2709..2710 " "
+ THEN_KW@2710..2714 "then"
+ WHITESPACE@2714..2715 " "
+ TRUE_EXPR@2715..2721
+ EXPR_VAR@2715..2721
+ NAME@2715..2721
+ IDENT@2715..2721 "maxVal"
+ WHITESPACE@2721..2726 "\n "
+ ELSE_KW@2726..2730 "else"
+ WHITESPACE@2730..2731 " "
+ FALSE_EXPR@2731..2732
+ EXPR_VAR@2731..2732
+ NAME@2731..2732
+ IDENT@2731..2732 "x"
COMMA@2732..2733 ","
WHITESPACE@2733..2737 "\n\n "
- MEMBER_FIELD@2737..2804
- FIELD_METHOD@2737..2804
- FIELD_NAME_FIXED@2737..2750
- NAME@2737..2750
- IDENT@2737..2750 "flattenArrays"
- PARAMS_DESC@2750..2756
- L_PAREN@2750..2751 "("
- PARAM@2751..2755
- DESTRUCT_FULL@2751..2755
- NAME@2751..2755
- IDENT@2751..2755 "arrs"
- R_PAREN@2755..2756 ")"
- COLONCOLON@2756..2758 "::"
- WHITESPACE@2758..2763 "\n "
- EXPR_APPLY@2763..2804
- EXPR_INDEX@2763..2772
- EXPR_VAR@2763..2766
- NAME@2763..2766
- IDENT@2763..2766 "std"
- DOT@2766..2767 "."
- NAME@2767..2772
- IDENT@2767..2772 "foldl"
- ARGS_DESC@2772..2804
- L_PAREN@2772..2773 "("
- ARG@2773..2793
- EXPR_FUNCTION@2773..2793
- FUNCTION_KW@2773..2781 "function"
- PARAMS_DESC@2781..2787
- L_PAREN@2781..2782 "("
- PARAM@2782..2783
- DESTRUCT_FULL@2782..2783
- NAME@2782..2783
- IDENT@2782..2783 "a"
- COMMA@2783..2784 ","
- WHITESPACE@2784..2785 " "
- PARAM@2785..2786
- DESTRUCT_FULL@2785..2786
- NAME@2785..2786
- IDENT@2785..2786 "b"
- R_PAREN@2786..2787 ")"
- WHITESPACE@2787..2788 " "
- EXPR_BINARY@2788..2793
- LHS_EXPR@2788..2789
- EXPR_VAR@2788..2789
- NAME@2788..2789
- IDENT@2788..2789 "a"
- WHITESPACE@2789..2790 " "
- PLUS@2790..2791 "+"
- WHITESPACE@2791..2792 " "
- EXPR_VAR@2792..2793
- NAME@2792..2793
- IDENT@2792..2793 "b"
- COMMA@2793..2794 ","
- WHITESPACE@2794..2795 " "
- ARG@2795..2799
- EXPR_VAR@2795..2799
- NAME@2795..2799
- IDENT@2795..2799 "arrs"
- COMMA@2799..2800 ","
- WHITESPACE@2800..2801 " "
- ARG@2801..2803
- EXPR_ARRAY@2801..2803
- L_BRACK@2801..2802 "["
- R_BRACK@2802..2803 "]"
- R_PAREN@2803..2804 ")"
+ MEMBER_FIELD_METHOD@2737..2804
+ FIELD_NAME_FIXED@2737..2750
+ NAME@2737..2750
+ IDENT@2737..2750 "flattenArrays"
+ PARAMS_DESC@2750..2756
+ L_PAREN@2750..2751 "("
+ PARAM@2751..2755
+ DESTRUCT_FULL@2751..2755
+ NAME@2751..2755
+ IDENT@2751..2755 "arrs"
+ R_PAREN@2755..2756 ")"
+ COLONCOLON@2756..2758 "::"
+ WHITESPACE@2758..2763 "\n "
+ EXPR_APPLY@2763..2804
+ EXPR_INDEX@2763..2772
+ EXPR_VAR@2763..2766
+ NAME@2763..2766
+ IDENT@2763..2766 "std"
+ DOT@2766..2767 "."
+ NAME@2767..2772
+ IDENT@2767..2772 "foldl"
+ ARGS_DESC@2772..2804
+ L_PAREN@2772..2773 "("
+ ARG@2773..2793
+ EXPR_FUNCTION@2773..2793
+ FUNCTION_KW@2773..2781 "function"
+ PARAMS_DESC@2781..2787
+ L_PAREN@2781..2782 "("
+ PARAM@2782..2783
+ DESTRUCT_FULL@2782..2783
+ NAME@2782..2783
+ IDENT@2782..2783 "a"
+ COMMA@2783..2784 ","
+ WHITESPACE@2784..2785 " "
+ PARAM@2785..2786
+ DESTRUCT_FULL@2785..2786
+ NAME@2785..2786
+ IDENT@2785..2786 "b"
+ R_PAREN@2786..2787 ")"
+ WHITESPACE@2787..2788 " "
+ EXPR_BINARY@2788..2793
+ LHS_EXPR@2788..2789
+ EXPR_VAR@2788..2789
+ NAME@2788..2789
+ IDENT@2788..2789 "a"
+ WHITESPACE@2789..2790 " "
+ PLUS@2790..2791 "+"
+ WHITESPACE@2791..2792 " "
+ EXPR_VAR@2792..2793
+ NAME@2792..2793
+ IDENT@2792..2793 "b"
+ COMMA@2793..2794 ","
+ WHITESPACE@2794..2795 " "
+ ARG@2795..2799
+ EXPR_VAR@2795..2799
+ NAME@2795..2799
+ IDENT@2795..2799 "arrs"
+ COMMA@2799..2800 ","
+ WHITESPACE@2800..2801 " "
+ ARG@2801..2803
+ EXPR_ARRAY@2801..2803
+ L_BRACK@2801..2802 "["
+ R_BRACK@2802..2803 "]"
+ R_PAREN@2803..2804 ")"
COMMA@2804..2805 ","
WHITESPACE@2805..2809 "\n\n "
- MEMBER_FIELD@2809..3495
- FIELD_METHOD@2809..3495
- FIELD_NAME_FIXED@2809..2820
- NAME@2809..2820
- IDENT@2809..2820 "manifestIni"
- PARAMS_DESC@2820..2825
- L_PAREN@2820..2821 "("
- PARAM@2821..2824
- DESTRUCT_FULL@2821..2824
- NAME@2821..2824
- IDENT@2821..2824 "ini"
- R_PAREN@2824..2825 ")"
- COLONCOLON@2825..2827 "::"
- WHITESPACE@2827..2832 "\n "
- EXPR_LOCAL@2832..3495
- LOCAL_KW@2832..2837 "local"
- WHITESPACE@2837..2838 " "
- BIND_FUNCTION@2838..3135
- NAME@2838..2848
- IDENT@2838..2848 "body_lines"
- PARAMS_DESC@2848..2854
- L_PAREN@2848..2849 "("
- PARAM@2849..2853
- DESTRUCT_FULL@2849..2853
- NAME@2849..2853
- IDENT@2849..2853 "body"
- R_PAREN@2853..2854 ")"
- WHITESPACE@2854..2855 " "
- ASSIGN@2855..2856 "="
- WHITESPACE@2856..2863 "\n "
- EXPR_APPLY@2863..3135
- EXPR_INDEX@2863..2871
- EXPR_VAR@2863..2866
- NAME@2863..2866
- IDENT@2863..2866 "std"
- DOT@2866..2867 "."
- NAME@2867..2871
- IDENT@2867..2871 "join"
- ARGS_DESC@2871..3135
- L_PAREN@2871..2872 "("
- ARG@2872..2874
- EXPR_ARRAY@2872..2874
- L_BRACK@2872..2873 "["
- R_BRACK@2873..2874 "]"
- COMMA@2874..2875 ","
- WHITESPACE@2875..2876 " "
- ARG@2876..3134
- EXPR_ARRAY_COMP@2876..3134
- L_BRACK@2876..2877 "["
- WHITESPACE@2877..2886 "\n "
- EXPR_LOCAL@2886..3085
- LOCAL_KW@2886..2891 "local"
- WHITESPACE@2891..2892 " "
- BIND_DESTRUCT@2892..2917
- DESTRUCT_FULL@2892..2907
- NAME@2892..2907
- IDENT@2892..2907 "value_or_values"
- WHITESPACE@2907..2908 " "
- ASSIGN@2908..2909 "="
- WHITESPACE@2909..2910 " "
- EXPR_INDEX_EXPR@2910..2917
- LHS_EXPR@2910..2914
- EXPR_VAR@2910..2914
- NAME@2910..2914
- IDENT@2910..2914 "body"
- L_BRACK@2914..2915 "["
- EXPR_VAR@2915..2916
- NAME@2915..2916
- IDENT@2915..2916 "k"
- R_BRACK@2916..2917 "]"
- SEMI@2917..2918 ";"
- WHITESPACE@2918..2927 "\n "
- EXPR_IF_THEN_ELSE@2927..3085
- IF_KW@2927..2929 "if"
- WHITESPACE@2929..2930 " "
- EXPR_APPLY@2930..2958
- EXPR_INDEX@2930..2941
- EXPR_VAR@2930..2933
- NAME@2930..2933
- IDENT@2930..2933 "std"
- DOT@2933..2934 "."
- NAME@2934..2941
- IDENT@2934..2941 "isArray"
- ARGS_DESC@2941..2958
- L_PAREN@2941..2942 "("
- ARG@2942..2957
- EXPR_VAR@2942..2957
- NAME@2942..2957
- IDENT@2942..2957 "value_or_values"
- R_PAREN@2957..2958 ")"
- WHITESPACE@2958..2959 " "
- THEN_KW@2959..2963 "then"
- WHITESPACE@2963..2974 "\n "
- TRUE_EXPR@2974..3027
- EXPR_ARRAY_COMP@2974..3027
- L_BRACK@2974..2975 "["
- EXPR_BINARY@2975..2997
- LHS_EXPR@2975..2984
- EXPR_STRING@2975..2984
- STRING_SINGLE@2975..2984 "'%s = %s'"
- WHITESPACE@2984..2985 " "
- MODULO@2985..2986 "%"
- WHITESPACE@2986..2987 " "
- EXPR_ARRAY@2987..2997
- L_BRACK@2987..2988 "["
- EXPR_VAR@2988..2989
- NAME@2988..2989
- IDENT@2988..2989 "k"
- COMMA@2989..2990 ","
- WHITESPACE@2990..2991 " "
- EXPR_VAR@2991..2996
- NAME@2991..2996
- IDENT@2991..2996 "value"
- R_BRACK@2996..2997 "]"
- WHITESPACE@2997..2998 " "
- FOR_SPEC@2998..3026
- FOR_KW@2998..3001 "for"
- WHITESPACE@3001..3002 " "
- NAME@3002..3007
- IDENT@3002..3007 "value"
- WHITESPACE@3007..3008 " "
- IN_KW@3008..3010 "in"
- WHITESPACE@3010..3011 " "
- EXPR_VAR@3011..3026
- NAME@3011..3026
- IDENT@3011..3026 "value_or_values"
- R_BRACK@3026..3027 "]"
- WHITESPACE@3027..3036 "\n "
- ELSE_KW@3036..3040 "else"
- WHITESPACE@3040..3051 "\n "
- FALSE_EXPR@3051..3085
- EXPR_ARRAY@3051..3085
- L_BRACK@3051..3052 "["
- EXPR_BINARY@3052..3084
- LHS_EXPR@3052..3061
- EXPR_STRING@3052..3061
- STRING_SINGLE@3052..3061 "'%s = %s'"
- WHITESPACE@3061..3062 " "
- MODULO@3062..3063 "%"
- WHITESPACE@3063..3064 " "
- EXPR_ARRAY@3064..3084
- L_BRACK@3064..3065 "["
- EXPR_VAR@3065..3066
- NAME@3065..3066
- IDENT@3065..3066 "k"
- COMMA@3066..3067 ","
- WHITESPACE@3067..3068 " "
- EXPR_VAR@3068..3083
- NAME@3068..3083
- IDENT@3068..3083 "value_or_values"
- R_BRACK@3083..3084 "]"
- R_BRACK@3084..3085 "]"
- WHITESPACE@3085..3095 "\n\n "
- FOR_SPEC@3095..3126
- FOR_KW@3095..3098 "for"
- WHITESPACE@3098..3099 " "
- NAME@3099..3100
- IDENT@3099..3100 "k"
- WHITESPACE@3100..3101 " "
- IN_KW@3101..3103 "in"
- WHITESPACE@3103..3104 " "
- EXPR_APPLY@3104..3126
- EXPR_INDEX@3104..3120
- EXPR_VAR@3104..3107
- NAME@3104..3107
- IDENT@3104..3107 "std"
- DOT@3107..3108 "."
- NAME@3108..3120
- IDENT@3108..3120 "objectFields"
- ARGS_DESC@3120..3126
- L_PAREN@3120..3121 "("
- ARG@3121..3125
- EXPR_VAR@3121..3125
- NAME@3121..3125
- IDENT@3121..3125 "body"
- R_PAREN@3125..3126 ")"
- WHITESPACE@3126..3133 "\n "
- R_BRACK@3133..3134 "]"
- R_PAREN@3134..3135 ")"
- SEMI@3135..3136 ";"
- WHITESPACE@3136..3142 "\n\n "
- EXPR_LOCAL@3142..3495
- LOCAL_KW@3142..3147 "local"
- WHITESPACE@3147..3148 " "
- BIND_FUNCTION@3148..3216
- NAME@3148..3161
- IDENT@3148..3161 "section_lines"
- PARAMS_DESC@3161..3175
- L_PAREN@3161..3162 "("
- PARAM@3162..3167
- DESTRUCT_FULL@3162..3167
- NAME@3162..3167
- IDENT@3162..3167 "sname"
- COMMA@3167..3168 ","
- WHITESPACE@3168..3169 " "
- PARAM@3169..3174
- DESTRUCT_FULL@3169..3174
- NAME@3169..3174
- IDENT@3169..3174 "sbody"
- R_PAREN@3174..3175 ")"
- WHITESPACE@3175..3176 " "
- ASSIGN@3176..3177 "="
- WHITESPACE@3177..3178 " "
- EXPR_BINARY@3178..3216
- LHS_EXPR@3178..3196
- EXPR_ARRAY@3178..3196
- L_BRACK@3178..3179 "["
- EXPR_BINARY@3179..3195
- LHS_EXPR@3179..3185
- EXPR_STRING@3179..3185
- STRING_SINGLE@3179..3185 "'[%s]'"
- WHITESPACE@3185..3186 " "
- MODULO@3186..3187 "%"
- WHITESPACE@3187..3188 " "
- EXPR_ARRAY@3188..3195
- L_BRACK@3188..3189 "["
- EXPR_VAR@3189..3194
- NAME@3189..3194
- IDENT@3189..3194 "sname"
- R_BRACK@3194..3195 "]"
- R_BRACK@3195..3196 "]"
- WHITESPACE@3196..3197 " "
- PLUS@3197..3198 "+"
- WHITESPACE@3198..3199 " "
- EXPR_APPLY@3199..3216
- EXPR_VAR@3199..3209
- NAME@3199..3209
- IDENT@3199..3209 "body_lines"
- ARGS_DESC@3209..3216
- L_PAREN@3209..3210 "("
- ARG@3210..3215
- EXPR_VAR@3210..3215
- NAME@3210..3215
- IDENT@3210..3215 "sbody"
- R_PAREN@3215..3216 ")"
- COMMA@3216..3217 ","
- WHITESPACE@3217..3228 "\n "
- BIND_DESTRUCT@3228..3303
- DESTRUCT_FULL@3228..3237
- NAME@3228..3237
- IDENT@3228..3237 "main_body"
- WHITESPACE@3237..3238 " "
- ASSIGN@3238..3239 "="
- WHITESPACE@3239..3240 " "
- EXPR_IF_THEN_ELSE@3240..3303
- IF_KW@3240..3242 "if"
- WHITESPACE@3242..3243 " "
- EXPR_APPLY@3243..3269
- EXPR_INDEX@3243..3256
- EXPR_VAR@3243..3246
- NAME@3243..3246
- IDENT@3243..3246 "std"
- DOT@3246..3247 "."
- NAME@3247..3256
- IDENT@3247..3256 "objectHas"
- ARGS_DESC@3256..3269
- L_PAREN@3256..3257 "("
- ARG@3257..3260
- EXPR_VAR@3257..3260
- NAME@3257..3260
- IDENT@3257..3260 "ini"
- COMMA@3260..3261 ","
- WHITESPACE@3261..3262 " "
- ARG@3262..3268
- EXPR_STRING@3262..3268
- STRING_SINGLE@3262..3268 "'main'"
- R_PAREN@3268..3269 ")"
- WHITESPACE@3269..3270 " "
- THEN_KW@3270..3274 "then"
- WHITESPACE@3274..3275 " "
- TRUE_EXPR@3275..3295
- EXPR_APPLY@3275..3295
- EXPR_VAR@3275..3285
- NAME@3275..3285
- IDENT@3275..3285 "body_lines"
- ARGS_DESC@3285..3295
- L_PAREN@3285..3286 "("
- ARG@3286..3294
- EXPR_INDEX@3286..3294
- EXPR_VAR@3286..3289
- NAME@3286..3289
- IDENT@3286..3289 "ini"
- DOT@3289..3290 "."
- NAME@3290..3294
- IDENT@3290..3294 "main"
- R_PAREN@3294..3295 ")"
- WHITESPACE@3295..3296 " "
- ELSE_KW@3296..3300 "else"
- WHITESPACE@3300..3301 " "
- FALSE_EXPR@3301..3303
- EXPR_ARRAY@3301..3303
- L_BRACK@3301..3302 "["
- R_BRACK@3302..3303 "]"
- COMMA@3303..3304 ","
- WHITESPACE@3304..3315 "\n "
- BIND_DESTRUCT@3315..3423
- DESTRUCT_FULL@3315..3327
- NAME@3315..3327
- IDENT@3315..3327 "all_sections"
- WHITESPACE@3327..3328 " "
- ASSIGN@3328..3329 "="
- WHITESPACE@3329..3330 " "
- EXPR_ARRAY_COMP@3330..3423
- L_BRACK@3330..3331 "["
- WHITESPACE@3331..3338 "\n "
- EXPR_APPLY@3338..3371
- EXPR_VAR@3338..3351
- NAME@3338..3351
- IDENT@3338..3351 "section_lines"
- ARGS_DESC@3351..3371
- L_PAREN@3351..3352 "("
- ARG@3352..3353
- EXPR_VAR@3352..3353
- NAME@3352..3353
- IDENT@3352..3353 "k"
- COMMA@3353..3354 ","
- WHITESPACE@3354..3355 " "
- ARG@3355..3370
- EXPR_INDEX_EXPR@3355..3370
- LHS_EXPR@3355..3367
- EXPR_INDEX@3355..3367
- EXPR_VAR@3355..3358
- NAME@3355..3358
- IDENT@3355..3358 "ini"
- DOT@3358..3359 "."
- NAME@3359..3367
- IDENT@3359..3367 "sections"
- L_BRACK@3367..3368 "["
- EXPR_VAR@3368..3369
- NAME@3368..3369
- IDENT@3368..3369 "k"
- R_BRACK@3369..3370 "]"
- R_PAREN@3370..3371 ")"
- WHITESPACE@3371..3378 "\n "
- FOR_SPEC@3378..3417
- FOR_KW@3378..3381 "for"
- WHITESPACE@3381..3382 " "
- NAME@3382..3383
- IDENT@3382..3383 "k"
- WHITESPACE@3383..3384 " "
- IN_KW@3384..3386 "in"
- WHITESPACE@3386..3387 " "
- EXPR_APPLY@3387..3417
- EXPR_INDEX@3387..3403
- EXPR_VAR@3387..3390
- NAME@3387..3390
- IDENT@3387..3390 "std"
- DOT@3390..3391 "."
- NAME@3391..3403
- IDENT@3391..3403 "objectFields"
- ARGS_DESC@3403..3417
- L_PAREN@3403..3404 "("
- ARG@3404..3416
- EXPR_INDEX@3404..3416
- EXPR_VAR@3404..3407
- NAME@3404..3407
- IDENT@3404..3407 "ini"
- DOT@3407..3408 "."
- NAME@3408..3416
- IDENT@3408..3416 "sections"
- R_PAREN@3416..3417 ")"
- WHITESPACE@3417..3422 "\n "
- R_BRACK@3422..3423 "]"
- SEMI@3423..3424 ";"
- WHITESPACE@3424..3429 "\n "
- EXPR_APPLY@3429..3495
- EXPR_INDEX@3429..3437
- EXPR_VAR@3429..3432
- NAME@3429..3432
- IDENT@3429..3432 "std"
- DOT@3432..3433 "."
- NAME@3433..3437
- IDENT@3433..3437 "join"
- ARGS_DESC@3437..3495
- L_PAREN@3437..3438 "("
- ARG@3438..3442
- EXPR_STRING@3438..3442
- STRING_SINGLE@3438..3442 "'\\n'"
- COMMA@3442..3443 ","
- WHITESPACE@3443..3444 " "
- ARG@3444..3494
- EXPR_BINARY@3444..3494
- LHS_EXPR@3444..3487
- EXPR_BINARY@3444..3487
- LHS_EXPR@3444..3453
- EXPR_VAR@3444..3453
- NAME@3444..3453
- IDENT@3444..3453 "main_body"
- WHITESPACE@3453..3454 " "
- PLUS@3454..3455 "+"
- WHITESPACE@3455..3456 " "
- EXPR_APPLY@3456..3487
- EXPR_INDEX@3456..3473
- EXPR_VAR@3456..3459
- NAME@3456..3459
- IDENT@3456..3459 "std"
- DOT@3459..3460 "."
- NAME@3460..3473
- IDENT@3460..3473 "flattenArrays"
- ARGS_DESC@3473..3487
- L_PAREN@3473..3474 "("
- ARG@3474..3486
- EXPR_VAR@3474..3486
- NAME@3474..3486
- IDENT@3474..3486 "all_sections"
- R_PAREN@3486..3487 ")"
- WHITESPACE@3487..3488 " "
- PLUS@3488..3489 "+"
- WHITESPACE@3489..3490 " "
- EXPR_ARRAY@3490..3494
- L_BRACK@3490..3491 "["
- EXPR_STRING@3491..3493
- STRING_SINGLE@3491..3493 "''"
- R_BRACK@3493..3494 "]"
- R_PAREN@3494..3495 ")"
+ MEMBER_FIELD_METHOD@2809..3495
+ FIELD_NAME_FIXED@2809..2820
+ NAME@2809..2820
+ IDENT@2809..2820 "manifestIni"
+ PARAMS_DESC@2820..2825
+ L_PAREN@2820..2821 "("
+ PARAM@2821..2824
+ DESTRUCT_FULL@2821..2824
+ NAME@2821..2824
+ IDENT@2821..2824 "ini"
+ R_PAREN@2824..2825 ")"
+ COLONCOLON@2825..2827 "::"
+ WHITESPACE@2827..2832 "\n "
+ EXPR_LOCAL@2832..3495
+ LOCAL_KW@2832..2837 "local"
+ WHITESPACE@2837..2838 " "
+ BIND_FUNCTION@2838..3135
+ NAME@2838..2848
+ IDENT@2838..2848 "body_lines"
+ PARAMS_DESC@2848..2854
+ L_PAREN@2848..2849 "("
+ PARAM@2849..2853
+ DESTRUCT_FULL@2849..2853
+ NAME@2849..2853
+ IDENT@2849..2853 "body"
+ R_PAREN@2853..2854 ")"
+ WHITESPACE@2854..2855 " "
+ ASSIGN@2855..2856 "="
+ WHITESPACE@2856..2863 "\n "
+ EXPR_APPLY@2863..3135
+ EXPR_INDEX@2863..2871
+ EXPR_VAR@2863..2866
+ NAME@2863..2866
+ IDENT@2863..2866 "std"
+ DOT@2866..2867 "."
+ NAME@2867..2871
+ IDENT@2867..2871 "join"
+ ARGS_DESC@2871..3135
+ L_PAREN@2871..2872 "("
+ ARG@2872..2874
+ EXPR_ARRAY@2872..2874
+ L_BRACK@2872..2873 "["
+ R_BRACK@2873..2874 "]"
+ COMMA@2874..2875 ","
+ WHITESPACE@2875..2876 " "
+ ARG@2876..3134
+ EXPR_ARRAY_COMP@2876..3134
+ L_BRACK@2876..2877 "["
+ WHITESPACE@2877..2886 "\n "
+ EXPR_LOCAL@2886..3085
+ LOCAL_KW@2886..2891 "local"
+ WHITESPACE@2891..2892 " "
+ BIND_DESTRUCT@2892..2917
+ DESTRUCT_FULL@2892..2907
+ NAME@2892..2907
+ IDENT@2892..2907 "value_or_values"
+ WHITESPACE@2907..2908 " "
+ ASSIGN@2908..2909 "="
+ WHITESPACE@2909..2910 " "
+ EXPR_INDEX_EXPR@2910..2917
+ LHS_EXPR@2910..2914
+ EXPR_VAR@2910..2914
+ NAME@2910..2914
+ IDENT@2910..2914 "body"
+ L_BRACK@2914..2915 "["
+ EXPR_VAR@2915..2916
+ NAME@2915..2916
+ IDENT@2915..2916 "k"
+ R_BRACK@2916..2917 "]"
+ SEMI@2917..2918 ";"
+ WHITESPACE@2918..2927 "\n "
+ EXPR_IF_THEN_ELSE@2927..3085
+ IF_KW@2927..2929 "if"
+ WHITESPACE@2929..2930 " "
+ EXPR_APPLY@2930..2958
+ EXPR_INDEX@2930..2941
+ EXPR_VAR@2930..2933
+ NAME@2930..2933
+ IDENT@2930..2933 "std"
+ DOT@2933..2934 "."
+ NAME@2934..2941
+ IDENT@2934..2941 "isArray"
+ ARGS_DESC@2941..2958
+ L_PAREN@2941..2942 "("
+ ARG@2942..2957
+ EXPR_VAR@2942..2957
+ NAME@2942..2957
+ IDENT@2942..2957 "value_or_values"
+ R_PAREN@2957..2958 ")"
+ WHITESPACE@2958..2959 " "
+ THEN_KW@2959..2963 "then"
+ WHITESPACE@2963..2974 "\n "
+ TRUE_EXPR@2974..3027
+ EXPR_ARRAY_COMP@2974..3027
+ L_BRACK@2974..2975 "["
+ EXPR_BINARY@2975..2997
+ LHS_EXPR@2975..2984
+ EXPR_STRING@2975..2984
+ STRING_SINGLE@2975..2984 "'%s = %s'"
+ WHITESPACE@2984..2985 " "
+ MODULO@2985..2986 "%"
+ WHITESPACE@2986..2987 " "
+ EXPR_ARRAY@2987..2997
+ L_BRACK@2987..2988 "["
+ EXPR_VAR@2988..2989
+ NAME@2988..2989
+ IDENT@2988..2989 "k"
+ COMMA@2989..2990 ","
+ WHITESPACE@2990..2991 " "
+ EXPR_VAR@2991..2996
+ NAME@2991..2996
+ IDENT@2991..2996 "value"
+ R_BRACK@2996..2997 "]"
+ WHITESPACE@2997..2998 " "
+ FOR_SPEC@2998..3026
+ FOR_KW@2998..3001 "for"
+ WHITESPACE@3001..3002 " "
+ NAME@3002..3007
+ IDENT@3002..3007 "value"
+ WHITESPACE@3007..3008 " "
+ IN_KW@3008..3010 "in"
+ WHITESPACE@3010..3011 " "
+ EXPR_VAR@3011..3026
+ NAME@3011..3026
+ IDENT@3011..3026 "value_or_values"
+ R_BRACK@3026..3027 "]"
+ WHITESPACE@3027..3036 "\n "
+ ELSE_KW@3036..3040 "else"
+ WHITESPACE@3040..3051 "\n "
+ FALSE_EXPR@3051..3085
+ EXPR_ARRAY@3051..3085
+ L_BRACK@3051..3052 "["
+ EXPR_BINARY@3052..3084
+ LHS_EXPR@3052..3061
+ EXPR_STRING@3052..3061
+ STRING_SINGLE@3052..3061 "'%s = %s'"
+ WHITESPACE@3061..3062 " "
+ MODULO@3062..3063 "%"
+ WHITESPACE@3063..3064 " "
+ EXPR_ARRAY@3064..3084
+ L_BRACK@3064..3065 "["
+ EXPR_VAR@3065..3066
+ NAME@3065..3066
+ IDENT@3065..3066 "k"
+ COMMA@3066..3067 ","
+ WHITESPACE@3067..3068 " "
+ EXPR_VAR@3068..3083
+ NAME@3068..3083
+ IDENT@3068..3083 "value_or_values"
+ R_BRACK@3083..3084 "]"
+ R_BRACK@3084..3085 "]"
+ WHITESPACE@3085..3095 "\n\n "
+ FOR_SPEC@3095..3126
+ FOR_KW@3095..3098 "for"
+ WHITESPACE@3098..3099 " "
+ NAME@3099..3100
+ IDENT@3099..3100 "k"
+ WHITESPACE@3100..3101 " "
+ IN_KW@3101..3103 "in"
+ WHITESPACE@3103..3104 " "
+ EXPR_APPLY@3104..3126
+ EXPR_INDEX@3104..3120
+ EXPR_VAR@3104..3107
+ NAME@3104..3107
+ IDENT@3104..3107 "std"
+ DOT@3107..3108 "."
+ NAME@3108..3120
+ IDENT@3108..3120 "objectFields"
+ ARGS_DESC@3120..3126
+ L_PAREN@3120..3121 "("
+ ARG@3121..3125
+ EXPR_VAR@3121..3125
+ NAME@3121..3125
+ IDENT@3121..3125 "body"
+ R_PAREN@3125..3126 ")"
+ WHITESPACE@3126..3133 "\n "
+ R_BRACK@3133..3134 "]"
+ R_PAREN@3134..3135 ")"
+ SEMI@3135..3136 ";"
+ WHITESPACE@3136..3142 "\n\n "
+ EXPR_LOCAL@3142..3495
+ LOCAL_KW@3142..3147 "local"
+ WHITESPACE@3147..3148 " "
+ BIND_FUNCTION@3148..3216
+ NAME@3148..3161
+ IDENT@3148..3161 "section_lines"
+ PARAMS_DESC@3161..3175
+ L_PAREN@3161..3162 "("
+ PARAM@3162..3167
+ DESTRUCT_FULL@3162..3167
+ NAME@3162..3167
+ IDENT@3162..3167 "sname"
+ COMMA@3167..3168 ","
+ WHITESPACE@3168..3169 " "
+ PARAM@3169..3174
+ DESTRUCT_FULL@3169..3174
+ NAME@3169..3174
+ IDENT@3169..3174 "sbody"
+ R_PAREN@3174..3175 ")"
+ WHITESPACE@3175..3176 " "
+ ASSIGN@3176..3177 "="
+ WHITESPACE@3177..3178 " "
+ EXPR_BINARY@3178..3216
+ LHS_EXPR@3178..3196
+ EXPR_ARRAY@3178..3196
+ L_BRACK@3178..3179 "["
+ EXPR_BINARY@3179..3195
+ LHS_EXPR@3179..3185
+ EXPR_STRING@3179..3185
+ STRING_SINGLE@3179..3185 "'[%s]'"
+ WHITESPACE@3185..3186 " "
+ MODULO@3186..3187 "%"
+ WHITESPACE@3187..3188 " "
+ EXPR_ARRAY@3188..3195
+ L_BRACK@3188..3189 "["
+ EXPR_VAR@3189..3194
+ NAME@3189..3194
+ IDENT@3189..3194 "sname"
+ R_BRACK@3194..3195 "]"
+ R_BRACK@3195..3196 "]"
+ WHITESPACE@3196..3197 " "
+ PLUS@3197..3198 "+"
+ WHITESPACE@3198..3199 " "
+ EXPR_APPLY@3199..3216
+ EXPR_VAR@3199..3209
+ NAME@3199..3209
+ IDENT@3199..3209 "body_lines"
+ ARGS_DESC@3209..3216
+ L_PAREN@3209..3210 "("
+ ARG@3210..3215
+ EXPR_VAR@3210..3215
+ NAME@3210..3215
+ IDENT@3210..3215 "sbody"
+ R_PAREN@3215..3216 ")"
+ COMMA@3216..3217 ","
+ WHITESPACE@3217..3228 "\n "
+ BIND_DESTRUCT@3228..3303
+ DESTRUCT_FULL@3228..3237
+ NAME@3228..3237
+ IDENT@3228..3237 "main_body"
+ WHITESPACE@3237..3238 " "
+ ASSIGN@3238..3239 "="
+ WHITESPACE@3239..3240 " "
+ EXPR_IF_THEN_ELSE@3240..3303
+ IF_KW@3240..3242 "if"
+ WHITESPACE@3242..3243 " "
+ EXPR_APPLY@3243..3269
+ EXPR_INDEX@3243..3256
+ EXPR_VAR@3243..3246
+ NAME@3243..3246
+ IDENT@3243..3246 "std"
+ DOT@3246..3247 "."
+ NAME@3247..3256
+ IDENT@3247..3256 "objectHas"
+ ARGS_DESC@3256..3269
+ L_PAREN@3256..3257 "("
+ ARG@3257..3260
+ EXPR_VAR@3257..3260
+ NAME@3257..3260
+ IDENT@3257..3260 "ini"
+ COMMA@3260..3261 ","
+ WHITESPACE@3261..3262 " "
+ ARG@3262..3268
+ EXPR_STRING@3262..3268
+ STRING_SINGLE@3262..3268 "'main'"
+ R_PAREN@3268..3269 ")"
+ WHITESPACE@3269..3270 " "
+ THEN_KW@3270..3274 "then"
+ WHITESPACE@3274..3275 " "
+ TRUE_EXPR@3275..3295
+ EXPR_APPLY@3275..3295
+ EXPR_VAR@3275..3285
+ NAME@3275..3285
+ IDENT@3275..3285 "body_lines"
+ ARGS_DESC@3285..3295
+ L_PAREN@3285..3286 "("
+ ARG@3286..3294
+ EXPR_INDEX@3286..3294
+ EXPR_VAR@3286..3289
+ NAME@3286..3289
+ IDENT@3286..3289 "ini"
+ DOT@3289..3290 "."
+ NAME@3290..3294
+ IDENT@3290..3294 "main"
+ R_PAREN@3294..3295 ")"
+ WHITESPACE@3295..3296 " "
+ ELSE_KW@3296..3300 "else"
+ WHITESPACE@3300..3301 " "
+ FALSE_EXPR@3301..3303
+ EXPR_ARRAY@3301..3303
+ L_BRACK@3301..3302 "["
+ R_BRACK@3302..3303 "]"
+ COMMA@3303..3304 ","
+ WHITESPACE@3304..3315 "\n "
+ BIND_DESTRUCT@3315..3423
+ DESTRUCT_FULL@3315..3327
+ NAME@3315..3327
+ IDENT@3315..3327 "all_sections"
+ WHITESPACE@3327..3328 " "
+ ASSIGN@3328..3329 "="
+ WHITESPACE@3329..3330 " "
+ EXPR_ARRAY_COMP@3330..3423
+ L_BRACK@3330..3331 "["
+ WHITESPACE@3331..3338 "\n "
+ EXPR_APPLY@3338..3371
+ EXPR_VAR@3338..3351
+ NAME@3338..3351
+ IDENT@3338..3351 "section_lines"
+ ARGS_DESC@3351..3371
+ L_PAREN@3351..3352 "("
+ ARG@3352..3353
+ EXPR_VAR@3352..3353
+ NAME@3352..3353
+ IDENT@3352..3353 "k"
+ COMMA@3353..3354 ","
+ WHITESPACE@3354..3355 " "
+ ARG@3355..3370
+ EXPR_INDEX_EXPR@3355..3370
+ LHS_EXPR@3355..3367
+ EXPR_INDEX@3355..3367
+ EXPR_VAR@3355..3358
+ NAME@3355..3358
+ IDENT@3355..3358 "ini"
+ DOT@3358..3359 "."
+ NAME@3359..3367
+ IDENT@3359..3367 "sections"
+ L_BRACK@3367..3368 "["
+ EXPR_VAR@3368..3369
+ NAME@3368..3369
+ IDENT@3368..3369 "k"
+ R_BRACK@3369..3370 "]"
+ R_PAREN@3370..3371 ")"
+ WHITESPACE@3371..3378 "\n "
+ FOR_SPEC@3378..3417
+ FOR_KW@3378..3381 "for"
+ WHITESPACE@3381..3382 " "
+ NAME@3382..3383
+ IDENT@3382..3383 "k"
+ WHITESPACE@3383..3384 " "
+ IN_KW@3384..3386 "in"
+ WHITESPACE@3386..3387 " "
+ EXPR_APPLY@3387..3417
+ EXPR_INDEX@3387..3403
+ EXPR_VAR@3387..3390
+ NAME@3387..3390
+ IDENT@3387..3390 "std"
+ DOT@3390..3391 "."
+ NAME@3391..3403
+ IDENT@3391..3403 "objectFields"
+ ARGS_DESC@3403..3417
+ L_PAREN@3403..3404 "("
+ ARG@3404..3416
+ EXPR_INDEX@3404..3416
+ EXPR_VAR@3404..3407
+ NAME@3404..3407
+ IDENT@3404..3407 "ini"
+ DOT@3407..3408 "."
+ NAME@3408..3416
+ IDENT@3408..3416 "sections"
+ R_PAREN@3416..3417 ")"
+ WHITESPACE@3417..3422 "\n "
+ R_BRACK@3422..3423 "]"
+ SEMI@3423..3424 ";"
+ WHITESPACE@3424..3429 "\n "
+ EXPR_APPLY@3429..3495
+ EXPR_INDEX@3429..3437
+ EXPR_VAR@3429..3432
+ NAME@3429..3432
+ IDENT@3429..3432 "std"
+ DOT@3432..3433 "."
+ NAME@3433..3437
+ IDENT@3433..3437 "join"
+ ARGS_DESC@3437..3495
+ L_PAREN@3437..3438 "("
+ ARG@3438..3442
+ EXPR_STRING@3438..3442
+ STRING_SINGLE@3438..3442 "'\\n'"
+ COMMA@3442..3443 ","
+ WHITESPACE@3443..3444 " "
+ ARG@3444..3494
+ EXPR_BINARY@3444..3494
+ LHS_EXPR@3444..3487
+ EXPR_BINARY@3444..3487
+ LHS_EXPR@3444..3453
+ EXPR_VAR@3444..3453
+ NAME@3444..3453
+ IDENT@3444..3453 "main_body"
+ WHITESPACE@3453..3454 " "
+ PLUS@3454..3455 "+"
+ WHITESPACE@3455..3456 " "
+ EXPR_APPLY@3456..3487
+ EXPR_INDEX@3456..3473
+ EXPR_VAR@3456..3459
+ NAME@3456..3459
+ IDENT@3456..3459 "std"
+ DOT@3459..3460 "."
+ NAME@3460..3473
+ IDENT@3460..3473 "flattenArrays"
+ ARGS_DESC@3473..3487
+ L_PAREN@3473..3474 "("
+ ARG@3474..3486
+ EXPR_VAR@3474..3486
+ NAME@3474..3486
+ IDENT@3474..3486 "all_sections"
+ R_PAREN@3486..3487 ")"
+ WHITESPACE@3487..3488 " "
+ PLUS@3488..3489 "+"
+ WHITESPACE@3489..3490 " "
+ EXPR_ARRAY@3490..3494
+ L_BRACK@3490..3491 "["
+ EXPR_STRING@3491..3493
+ STRING_SINGLE@3491..3493 "''"
+ R_BRACK@3493..3494 "]"
+ R_PAREN@3494..3495 ")"
COMMA@3495..3496 ","
WHITESPACE@3496..3500 "\n\n "
- MEMBER_FIELD@3500..3553
- FIELD_METHOD@3500..3553
- FIELD_NAME_FIXED@3500..3512
- NAME@3500..3512
- IDENT@3500..3512 "manifestToml"
- PARAMS_DESC@3512..3519
- L_PAREN@3512..3513 "("
- PARAM@3513..3518
- DESTRUCT_FULL@3513..3518
- NAME@3513..3518
- IDENT@3513..3518 "value"
- R_PAREN@3518..3519 ")"
- COLONCOLON@3519..3521 "::"
- WHITESPACE@3521..3522 " "
- EXPR_APPLY@3522..3553
- EXPR_INDEX@3522..3540
- EXPR_VAR@3522..3525
- NAME@3522..3525
- IDENT@3522..3525 "std"
- DOT@3525..3526 "."
- NAME@3526..3540
- IDENT@3526..3540 "manifestTomlEx"
- ARGS_DESC@3540..3553
- L_PAREN@3540..3541 "("
- ARG@3541..3546
- EXPR_VAR@3541..3546
- NAME@3541..3546
- IDENT@3541..3546 "value"
- COMMA@3546..3547 ","
- WHITESPACE@3547..3548 " "
- ARG@3548..3552
- EXPR_STRING@3548..3552
- STRING_SINGLE@3548..3552 "' '"
- R_PAREN@3552..3553 ")"
+ MEMBER_FIELD_METHOD@3500..3553
+ FIELD_NAME_FIXED@3500..3512
+ NAME@3500..3512
+ IDENT@3500..3512 "manifestToml"
+ PARAMS_DESC@3512..3519
+ L_PAREN@3512..3513 "("
+ PARAM@3513..3518
+ DESTRUCT_FULL@3513..3518
+ NAME@3513..3518
+ IDENT@3513..3518 "value"
+ R_PAREN@3518..3519 ")"
+ COLONCOLON@3519..3521 "::"
+ WHITESPACE@3521..3522 " "
+ EXPR_APPLY@3522..3553
+ EXPR_INDEX@3522..3540
+ EXPR_VAR@3522..3525
+ NAME@3522..3525
+ IDENT@3522..3525 "std"
+ DOT@3525..3526 "."
+ NAME@3526..3540
+ IDENT@3526..3540 "manifestTomlEx"
+ ARGS_DESC@3540..3553
+ L_PAREN@3540..3541 "("
+ ARG@3541..3546
+ EXPR_VAR@3541..3546
+ NAME@3541..3546
+ IDENT@3541..3546 "value"
+ COMMA@3546..3547 ","
+ WHITESPACE@3547..3548 " "
+ ARG@3548..3552
+ EXPR_STRING@3548..3552
+ STRING_SINGLE@3548..3552 "' '"
+ R_PAREN@3552..3553 ")"
COMMA@3553..3554 ","
WHITESPACE@3554..3558 "\n\n "
- MEMBER_FIELD@3558..3613
- FIELD_METHOD@3558..3613
- FIELD_NAME_FIXED@3558..3576
- NAME@3558..3576
- IDENT@3558..3576 "escapeStringPython"
- PARAMS_DESC@3576..3581
- L_PAREN@3576..3577 "("
- PARAM@3577..3580
- DESTRUCT_FULL@3577..3580
- NAME@3577..3580
- IDENT@3577..3580 "str"
- R_PAREN@3580..3581 ")"
- COLONCOLON@3581..3583 "::"
- WHITESPACE@3583..3588 "\n "
- EXPR_APPLY@3588..3613
- EXPR_INDEX@3588..3608
- EXPR_VAR@3588..3591
- NAME@3588..3591
- IDENT@3588..3591 "std"
- DOT@3591..3592 "."
- NAME@3592..3608
- IDENT@3592..3608 "escapeStringJson"
- ARGS_DESC@3608..3613
- L_PAREN@3608..3609 "("
- ARG@3609..3612
- EXPR_VAR@3609..3612
- NAME@3609..3612
- IDENT@3609..3612 "str"
- R_PAREN@3612..3613 ")"
+ MEMBER_FIELD_METHOD@3558..3613
+ FIELD_NAME_FIXED@3558..3576
+ NAME@3558..3576
+ IDENT@3558..3576 "escapeStringPython"
+ PARAMS_DESC@3576..3581
+ L_PAREN@3576..3577 "("
+ PARAM@3577..3580
+ DESTRUCT_FULL@3577..3580
+ NAME@3577..3580
+ IDENT@3577..3580 "str"
+ R_PAREN@3580..3581 ")"
+ COLONCOLON@3581..3583 "::"
+ WHITESPACE@3583..3588 "\n "
+ EXPR_APPLY@3588..3613
+ EXPR_INDEX@3588..3608
+ EXPR_VAR@3588..3591
+ NAME@3588..3591
+ IDENT@3588..3591 "std"
+ DOT@3591..3592 "."
+ NAME@3592..3608
+ IDENT@3592..3608 "escapeStringJson"
+ ARGS_DESC@3608..3613
+ L_PAREN@3608..3609 "("
+ ARG@3609..3612
+ EXPR_VAR@3609..3612
+ NAME@3609..3612
+ IDENT@3609..3612 "str"
+ R_PAREN@3612..3613 ")"
COMMA@3613..3614 ","
WHITESPACE@3614..3618 "\n\n "
- MEMBER_FIELD@3618..3835
- FIELD_METHOD@3618..3835
- FIELD_NAME_FIXED@3618..3634
- NAME@3618..3634
- IDENT@3618..3634 "escapeStringBash"
- PARAMS_DESC@3634..3640
- L_PAREN@3634..3635 "("
- PARAM@3635..3639
- DESTRUCT_FULL@3635..3639
- NAME@3635..3639
- IDENT@3635..3639 "str_"
- R_PAREN@3639..3640 ")"
- COLONCOLON@3640..3642 "::"
- WHITESPACE@3642..3647 "\n "
- EXPR_LOCAL@3647..3835
- LOCAL_KW@3647..3652 "local"
- WHITESPACE@3652..3653 " "
- BIND_DESTRUCT@3653..3677
- DESTRUCT_FULL@3653..3656
- NAME@3653..3656
- IDENT@3653..3656 "str"
- WHITESPACE@3656..3657 " "
- ASSIGN@3657..3658 "="
- WHITESPACE@3658..3659 " "
- EXPR_APPLY@3659..3677
- EXPR_INDEX@3659..3671
- EXPR_VAR@3659..3662
- NAME@3659..3662
- IDENT@3659..3662 "std"
- DOT@3662..3663 "."
- NAME@3663..3671
- IDENT@3663..3671 "toString"
- ARGS_DESC@3671..3677
- L_PAREN@3671..3672 "("
- ARG@3672..3676
- EXPR_VAR@3672..3676
- NAME@3672..3676
- IDENT@3672..3676 "str_"
- R_PAREN@3676..3677 ")"
- SEMI@3677..3678 ";"
- WHITESPACE@3678..3683 "\n "
- EXPR_LOCAL@3683..3835
- LOCAL_KW@3683..3688 "local"
- WHITESPACE@3688..3689 " "
- BIND_FUNCTION@3689..3764
- NAME@3689..3694
- IDENT@3689..3694 "trans"
- PARAMS_DESC@3694..3698
- L_PAREN@3694..3695 "("
- PARAM@3695..3697
- DESTRUCT_FULL@3695..3697
- NAME@3695..3697
- IDENT@3695..3697 "ch"
- R_PAREN@3697..3698 ")"
- WHITESPACE@3698..3699 " "
- ASSIGN@3699..3700 "="
- WHITESPACE@3700..3707 "\n "
- EXPR_IF_THEN_ELSE@3707..3764
- IF_KW@3707..3709 "if"
- WHITESPACE@3709..3710 " "
- EXPR_BINARY@3710..3719
- LHS_EXPR@3710..3712
- EXPR_VAR@3710..3712
- NAME@3710..3712
- IDENT@3710..3712 "ch"
- WHITESPACE@3712..3713 " "
- EQ@3713..3715 "=="
- WHITESPACE@3715..3716 " "
- EXPR_STRING@3716..3719
- STRING_DOUBLE@3716..3719 "\"'\""
- WHITESPACE@3719..3720 " "
- THEN_KW@3720..3724 "then"
- WHITESPACE@3724..3733 "\n "
- TRUE_EXPR@3733..3742
- EXPR_STRING@3733..3742
- STRING_DOUBLE@3733..3742 "\"'\\\"'\\\"'\""
- WHITESPACE@3742..3749 "\n "
- ELSE_KW@3749..3753 "else"
- WHITESPACE@3753..3762 "\n "
- FALSE_EXPR@3762..3764
- EXPR_VAR@3762..3764
- NAME@3762..3764
- IDENT@3762..3764 "ch"
- SEMI@3764..3765 ";"
- WHITESPACE@3765..3770 "\n "
- EXPR_BINARY@3770..3835
- LHS_EXPR@3770..3776
- EXPR_STRING@3770..3776
- STRING_DOUBLE@3770..3776 "\"'%s'\""
- WHITESPACE@3776..3777 " "
- MODULO@3777..3778 "%"
- WHITESPACE@3778..3779 " "
- EXPR_APPLY@3779..3835
- EXPR_INDEX@3779..3787
- EXPR_VAR@3779..3782
- NAME@3779..3782
- IDENT@3779..3782 "std"
- DOT@3782..3783 "."
- NAME@3783..3787
- IDENT@3783..3787 "join"
- ARGS_DESC@3787..3835
- L_PAREN@3787..3788 "("
- ARG@3788..3790
- EXPR_STRING@3788..3790
- STRING_SINGLE@3788..3790 "''"
- COMMA@3790..3791 ","
- WHITESPACE@3791..3792 " "
- ARG@3792..3834
- EXPR_ARRAY_COMP@3792..3834
- L_BRACK@3792..3793 "["
- EXPR_APPLY@3793..3802
- EXPR_VAR@3793..3798
- NAME@3793..3798
- IDENT@3793..3798 "trans"
- ARGS_DESC@3798..3802
- L_PAREN@3798..3799 "("
- ARG@3799..3801
- EXPR_VAR@3799..3801
- NAME@3799..3801
- IDENT@3799..3801 "ch"
- R_PAREN@3801..3802 ")"
- WHITESPACE@3802..3803 " "
- FOR_SPEC@3803..3833
- FOR_KW@3803..3806 "for"
- WHITESPACE@3806..3807 " "
- NAME@3807..3809
- IDENT@3807..3809 "ch"
- WHITESPACE@3809..3810 " "
- IN_KW@3810..3812 "in"
- WHITESPACE@3812..3813 " "
- EXPR_APPLY@3813..3833
- EXPR_INDEX@3813..3828
- EXPR_VAR@3813..3816
- NAME@3813..3816
- IDENT@3813..3816 "std"
- DOT@3816..3817 "."
- NAME@3817..3828
- IDENT@3817..3828 "stringChars"
- ARGS_DESC@3828..3833
- L_PAREN@3828..3829 "("
- ARG@3829..3832
- EXPR_VAR@3829..3832
- NAME@3829..3832
- IDENT@3829..3832 "str"
- R_PAREN@3832..3833 ")"
- R_BRACK@3833..3834 "]"
- R_PAREN@3834..3835 ")"
+ MEMBER_FIELD_METHOD@3618..3835
+ FIELD_NAME_FIXED@3618..3634
+ NAME@3618..3634
+ IDENT@3618..3634 "escapeStringBash"
+ PARAMS_DESC@3634..3640
+ L_PAREN@3634..3635 "("
+ PARAM@3635..3639
+ DESTRUCT_FULL@3635..3639
+ NAME@3635..3639
+ IDENT@3635..3639 "str_"
+ R_PAREN@3639..3640 ")"
+ COLONCOLON@3640..3642 "::"
+ WHITESPACE@3642..3647 "\n "
+ EXPR_LOCAL@3647..3835
+ LOCAL_KW@3647..3652 "local"
+ WHITESPACE@3652..3653 " "
+ BIND_DESTRUCT@3653..3677
+ DESTRUCT_FULL@3653..3656
+ NAME@3653..3656
+ IDENT@3653..3656 "str"
+ WHITESPACE@3656..3657 " "
+ ASSIGN@3657..3658 "="
+ WHITESPACE@3658..3659 " "
+ EXPR_APPLY@3659..3677
+ EXPR_INDEX@3659..3671
+ EXPR_VAR@3659..3662
+ NAME@3659..3662
+ IDENT@3659..3662 "std"
+ DOT@3662..3663 "."
+ NAME@3663..3671
+ IDENT@3663..3671 "toString"
+ ARGS_DESC@3671..3677
+ L_PAREN@3671..3672 "("
+ ARG@3672..3676
+ EXPR_VAR@3672..3676
+ NAME@3672..3676
+ IDENT@3672..3676 "str_"
+ R_PAREN@3676..3677 ")"
+ SEMI@3677..3678 ";"
+ WHITESPACE@3678..3683 "\n "
+ EXPR_LOCAL@3683..3835
+ LOCAL_KW@3683..3688 "local"
+ WHITESPACE@3688..3689 " "
+ BIND_FUNCTION@3689..3764
+ NAME@3689..3694
+ IDENT@3689..3694 "trans"
+ PARAMS_DESC@3694..3698
+ L_PAREN@3694..3695 "("
+ PARAM@3695..3697
+ DESTRUCT_FULL@3695..3697
+ NAME@3695..3697
+ IDENT@3695..3697 "ch"
+ R_PAREN@3697..3698 ")"
+ WHITESPACE@3698..3699 " "
+ ASSIGN@3699..3700 "="
+ WHITESPACE@3700..3707 "\n "
+ EXPR_IF_THEN_ELSE@3707..3764
+ IF_KW@3707..3709 "if"
+ WHITESPACE@3709..3710 " "
+ EXPR_BINARY@3710..3719
+ LHS_EXPR@3710..3712
+ EXPR_VAR@3710..3712
+ NAME@3710..3712
+ IDENT@3710..3712 "ch"
+ WHITESPACE@3712..3713 " "
+ EQ@3713..3715 "=="
+ WHITESPACE@3715..3716 " "
+ EXPR_STRING@3716..3719
+ STRING_DOUBLE@3716..3719 "\"'\""
+ WHITESPACE@3719..3720 " "
+ THEN_KW@3720..3724 "then"
+ WHITESPACE@3724..3733 "\n "
+ TRUE_EXPR@3733..3742
+ EXPR_STRING@3733..3742
+ STRING_DOUBLE@3733..3742 "\"'\\\"'\\\"'\""
+ WHITESPACE@3742..3749 "\n "
+ ELSE_KW@3749..3753 "else"
+ WHITESPACE@3753..3762 "\n "
+ FALSE_EXPR@3762..3764
+ EXPR_VAR@3762..3764
+ NAME@3762..3764
+ IDENT@3762..3764 "ch"
+ SEMI@3764..3765 ";"
+ WHITESPACE@3765..3770 "\n "
+ EXPR_BINARY@3770..3835
+ LHS_EXPR@3770..3776
+ EXPR_STRING@3770..3776
+ STRING_DOUBLE@3770..3776 "\"'%s'\""
+ WHITESPACE@3776..3777 " "
+ MODULO@3777..3778 "%"
+ WHITESPACE@3778..3779 " "
+ EXPR_APPLY@3779..3835
+ EXPR_INDEX@3779..3787
+ EXPR_VAR@3779..3782
+ NAME@3779..3782
+ IDENT@3779..3782 "std"
+ DOT@3782..3783 "."
+ NAME@3783..3787
+ IDENT@3783..3787 "join"
+ ARGS_DESC@3787..3835
+ L_PAREN@3787..3788 "("
+ ARG@3788..3790
+ EXPR_STRING@3788..3790
+ STRING_SINGLE@3788..3790 "''"
+ COMMA@3790..3791 ","
+ WHITESPACE@3791..3792 " "
+ ARG@3792..3834
+ EXPR_ARRAY_COMP@3792..3834
+ L_BRACK@3792..3793 "["
+ EXPR_APPLY@3793..3802
+ EXPR_VAR@3793..3798
+ NAME@3793..3798
+ IDENT@3793..3798 "trans"
+ ARGS_DESC@3798..3802
+ L_PAREN@3798..3799 "("
+ ARG@3799..3801
+ EXPR_VAR@3799..3801
+ NAME@3799..3801
+ IDENT@3799..3801 "ch"
+ R_PAREN@3801..3802 ")"
+ WHITESPACE@3802..3803 " "
+ FOR_SPEC@3803..3833
+ FOR_KW@3803..3806 "for"
+ WHITESPACE@3806..3807 " "
+ NAME@3807..3809
+ IDENT@3807..3809 "ch"
+ WHITESPACE@3809..3810 " "
+ IN_KW@3810..3812 "in"
+ WHITESPACE@3812..3813 " "
+ EXPR_APPLY@3813..3833
+ EXPR_INDEX@3813..3828
+ EXPR_VAR@3813..3816
+ NAME@3813..3816
+ IDENT@3813..3816 "std"
+ DOT@3816..3817 "."
+ NAME@3817..3828
+ IDENT@3817..3828 "stringChars"
+ ARGS_DESC@3828..3833
+ L_PAREN@3828..3829 "("
+ ARG@3829..3832
+ EXPR_VAR@3829..3832
+ NAME@3829..3832
+ IDENT@3829..3832 "str"
+ R_PAREN@3832..3833 ")"
+ R_BRACK@3833..3834 "]"
+ R_PAREN@3834..3835 ")"
COMMA@3835..3836 ","
WHITESPACE@3836..3840 "\n\n "
- MEMBER_FIELD@3840..4054
- FIELD_METHOD@3840..4054
- FIELD_NAME_FIXED@3840..3859
- NAME@3840..3859
- IDENT@3840..3859 "escapeStringDollars"
- PARAMS_DESC@3859..3865
- L_PAREN@3859..3860 "("
- PARAM@3860..3864
- DESTRUCT_FULL@3860..3864
- NAME@3860..3864
- IDENT@3860..3864 "str_"
- R_PAREN@3864..3865 ")"
- COLONCOLON@3865..3867 "::"
- WHITESPACE@3867..3872 "\n "
- EXPR_LOCAL@3872..4054
- LOCAL_KW@3872..3877 "local"
- WHITESPACE@3877..3878 " "
- BIND_DESTRUCT@3878..3902
- DESTRUCT_FULL@3878..3881
- NAME@3878..3881
- IDENT@3878..3881 "str"
- WHITESPACE@3881..3882 " "
- ASSIGN@3882..3883 "="
- WHITESPACE@3883..3884 " "
- EXPR_APPLY@3884..3902
- EXPR_INDEX@3884..3896
- EXPR_VAR@3884..3887
- NAME@3884..3887
- IDENT@3884..3887 "std"
- DOT@3887..3888 "."
- NAME@3888..3896
- IDENT@3888..3896 "toString"
- ARGS_DESC@3896..3902
- L_PAREN@3896..3897 "("
- ARG@3897..3901
- EXPR_VAR@3897..3901
- NAME@3897..3901
- IDENT@3897..3901 "str_"
- R_PAREN@3901..3902 ")"
- SEMI@3902..3903 ";"
- WHITESPACE@3903..3908 "\n "
- EXPR_LOCAL@3908..4054
- LOCAL_KW@3908..3913 "local"
- WHITESPACE@3913..3914 " "
- BIND_FUNCTION@3914..3984
- NAME@3914..3919
- IDENT@3914..3919 "trans"
- PARAMS_DESC@3919..3923
- L_PAREN@3919..3920 "("
- PARAM@3920..3922
- DESTRUCT_FULL@3920..3922
- NAME@3920..3922
- IDENT@3920..3922 "ch"
- R_PAREN@3922..3923 ")"
- WHITESPACE@3923..3924 " "
- ASSIGN@3924..3925 "="
- WHITESPACE@3925..3932 "\n "
- EXPR_IF_THEN_ELSE@3932..3984
- IF_KW@3932..3934 "if"
- WHITESPACE@3934..3935 " "
- EXPR_BINARY@3935..3944
- LHS_EXPR@3935..3937
- EXPR_VAR@3935..3937
- NAME@3935..3937
- IDENT@3935..3937 "ch"
- WHITESPACE@3937..3938 " "
- EQ@3938..3940 "=="
- WHITESPACE@3940..3941 " "
- EXPR_STRING@3941..3944
- STRING_SINGLE@3941..3944 "'$'"
- WHITESPACE@3944..3945 " "
- THEN_KW@3945..3949 "then"
- WHITESPACE@3949..3958 "\n "
- TRUE_EXPR@3958..3962
- EXPR_STRING@3958..3962
- STRING_SINGLE@3958..3962 "'$$'"
- WHITESPACE@3962..3969 "\n "
- ELSE_KW@3969..3973 "else"
- WHITESPACE@3973..3982 "\n "
- FALSE_EXPR@3982..3984
- EXPR_VAR@3982..3984
- NAME@3982..3984
- IDENT@3982..3984 "ch"
- SEMI@3984..3985 ";"
- WHITESPACE@3985..3990 "\n "
- EXPR_APPLY@3990..4054
- EXPR_INDEX@3990..3999
- EXPR_VAR@3990..3993
- NAME@3990..3993
- IDENT@3990..3993 "std"
- DOT@3993..3994 "."
- NAME@3994..3999
- IDENT@3994..3999 "foldl"
- ARGS_DESC@3999..4054
- L_PAREN@3999..4000 "("
- ARG@4000..4027
- EXPR_FUNCTION@4000..4027
- FUNCTION_KW@4000..4008 "function"
- PARAMS_DESC@4008..4014
- L_PAREN@4008..4009 "("
- PARAM@4009..4010
- DESTRUCT_FULL@4009..4010
- NAME@4009..4010
- IDENT@4009..4010 "a"
- COMMA@4010..4011 ","
- WHITESPACE@4011..4012 " "
- PARAM@4012..4013
- DESTRUCT_FULL@4012..4013
- NAME@4012..4013
- IDENT@4012..4013 "b"
- R_PAREN@4013..4014 ")"
- WHITESPACE@4014..4015 " "
- EXPR_BINARY@4015..4027
- LHS_EXPR@4015..4016
- EXPR_VAR@4015..4016
- NAME@4015..4016
- IDENT@4015..4016 "a"
- WHITESPACE@4016..4017 " "
- PLUS@4017..4018 "+"
- WHITESPACE@4018..4019 " "
- EXPR_APPLY@4019..4027
- EXPR_VAR@4019..4024
- NAME@4019..4024
- IDENT@4019..4024 "trans"
- ARGS_DESC@4024..4027
- L_PAREN@4024..4025 "("
- ARG@4025..4026
- EXPR_VAR@4025..4026
- NAME@4025..4026
- IDENT@4025..4026 "b"
- R_PAREN@4026..4027 ")"
- COMMA@4027..4028 ","
- WHITESPACE@4028..4029 " "
- ARG@4029..4049
- EXPR_APPLY@4029..4049
- EXPR_INDEX@4029..4044
- EXPR_VAR@4029..4032
- NAME@4029..4032
- IDENT@4029..4032 "std"
- DOT@4032..4033 "."
- NAME@4033..4044
- IDENT@4033..4044 "stringChars"
- ARGS_DESC@4044..4049
- L_PAREN@4044..4045 "("
- ARG@4045..4048
- EXPR_VAR@4045..4048
- NAME@4045..4048
- IDENT@4045..4048 "str"
- R_PAREN@4048..4049 ")"
- COMMA@4049..4050 ","
- WHITESPACE@4050..4051 " "
- ARG@4051..4053
- EXPR_STRING@4051..4053
- STRING_SINGLE@4051..4053 "''"
- R_PAREN@4053..4054 ")"
+ MEMBER_FIELD_METHOD@3840..4054
+ FIELD_NAME_FIXED@3840..3859
+ NAME@3840..3859
+ IDENT@3840..3859 "escapeStringDollars"
+ PARAMS_DESC@3859..3865
+ L_PAREN@3859..3860 "("
+ PARAM@3860..3864
+ DESTRUCT_FULL@3860..3864
+ NAME@3860..3864
+ IDENT@3860..3864 "str_"
+ R_PAREN@3864..3865 ")"
+ COLONCOLON@3865..3867 "::"
+ WHITESPACE@3867..3872 "\n "
+ EXPR_LOCAL@3872..4054
+ LOCAL_KW@3872..3877 "local"
+ WHITESPACE@3877..3878 " "
+ BIND_DESTRUCT@3878..3902
+ DESTRUCT_FULL@3878..3881
+ NAME@3878..3881
+ IDENT@3878..3881 "str"
+ WHITESPACE@3881..3882 " "
+ ASSIGN@3882..3883 "="
+ WHITESPACE@3883..3884 " "
+ EXPR_APPLY@3884..3902
+ EXPR_INDEX@3884..3896
+ EXPR_VAR@3884..3887
+ NAME@3884..3887
+ IDENT@3884..3887 "std"
+ DOT@3887..3888 "."
+ NAME@3888..3896
+ IDENT@3888..3896 "toString"
+ ARGS_DESC@3896..3902
+ L_PAREN@3896..3897 "("
+ ARG@3897..3901
+ EXPR_VAR@3897..3901
+ NAME@3897..3901
+ IDENT@3897..3901 "str_"
+ R_PAREN@3901..3902 ")"
+ SEMI@3902..3903 ";"
+ WHITESPACE@3903..3908 "\n "
+ EXPR_LOCAL@3908..4054
+ LOCAL_KW@3908..3913 "local"
+ WHITESPACE@3913..3914 " "
+ BIND_FUNCTION@3914..3984
+ NAME@3914..3919
+ IDENT@3914..3919 "trans"
+ PARAMS_DESC@3919..3923
+ L_PAREN@3919..3920 "("
+ PARAM@3920..3922
+ DESTRUCT_FULL@3920..3922
+ NAME@3920..3922
+ IDENT@3920..3922 "ch"
+ R_PAREN@3922..3923 ")"
+ WHITESPACE@3923..3924 " "
+ ASSIGN@3924..3925 "="
+ WHITESPACE@3925..3932 "\n "
+ EXPR_IF_THEN_ELSE@3932..3984
+ IF_KW@3932..3934 "if"
+ WHITESPACE@3934..3935 " "
+ EXPR_BINARY@3935..3944
+ LHS_EXPR@3935..3937
+ EXPR_VAR@3935..3937
+ NAME@3935..3937
+ IDENT@3935..3937 "ch"
+ WHITESPACE@3937..3938 " "
+ EQ@3938..3940 "=="
+ WHITESPACE@3940..3941 " "
+ EXPR_STRING@3941..3944
+ STRING_SINGLE@3941..3944 "'$'"
+ WHITESPACE@3944..3945 " "
+ THEN_KW@3945..3949 "then"
+ WHITESPACE@3949..3958 "\n "
+ TRUE_EXPR@3958..3962
+ EXPR_STRING@3958..3962
+ STRING_SINGLE@3958..3962 "'$$'"
+ WHITESPACE@3962..3969 "\n "
+ ELSE_KW@3969..3973 "else"
+ WHITESPACE@3973..3982 "\n "
+ FALSE_EXPR@3982..3984
+ EXPR_VAR@3982..3984
+ NAME@3982..3984
+ IDENT@3982..3984 "ch"
+ SEMI@3984..3985 ";"
+ WHITESPACE@3985..3990 "\n "
+ EXPR_APPLY@3990..4054
+ EXPR_INDEX@3990..3999
+ EXPR_VAR@3990..3993
+ NAME@3990..3993
+ IDENT@3990..3993 "std"
+ DOT@3993..3994 "."
+ NAME@3994..3999
+ IDENT@3994..3999 "foldl"
+ ARGS_DESC@3999..4054
+ L_PAREN@3999..4000 "("
+ ARG@4000..4027
+ EXPR_FUNCTION@4000..4027
+ FUNCTION_KW@4000..4008 "function"
+ PARAMS_DESC@4008..4014
+ L_PAREN@4008..4009 "("
+ PARAM@4009..4010
+ DESTRUCT_FULL@4009..4010
+ NAME@4009..4010
+ IDENT@4009..4010 "a"
+ COMMA@4010..4011 ","
+ WHITESPACE@4011..4012 " "
+ PARAM@4012..4013
+ DESTRUCT_FULL@4012..4013
+ NAME@4012..4013
+ IDENT@4012..4013 "b"
+ R_PAREN@4013..4014 ")"
+ WHITESPACE@4014..4015 " "
+ EXPR_BINARY@4015..4027
+ LHS_EXPR@4015..4016
+ EXPR_VAR@4015..4016
+ NAME@4015..4016
+ IDENT@4015..4016 "a"
+ WHITESPACE@4016..4017 " "
+ PLUS@4017..4018 "+"
+ WHITESPACE@4018..4019 " "
+ EXPR_APPLY@4019..4027
+ EXPR_VAR@4019..4024
+ NAME@4019..4024
+ IDENT@4019..4024 "trans"
+ ARGS_DESC@4024..4027
+ L_PAREN@4024..4025 "("
+ ARG@4025..4026
+ EXPR_VAR@4025..4026
+ NAME@4025..4026
+ IDENT@4025..4026 "b"
+ R_PAREN@4026..4027 ")"
+ COMMA@4027..4028 ","
+ WHITESPACE@4028..4029 " "
+ ARG@4029..4049
+ EXPR_APPLY@4029..4049
+ EXPR_INDEX@4029..4044
+ EXPR_VAR@4029..4032
+ NAME@4029..4032
+ IDENT@4029..4032 "std"
+ DOT@4032..4033 "."
+ NAME@4033..4044
+ IDENT@4033..4044 "stringChars"
+ ARGS_DESC@4044..4049
+ L_PAREN@4044..4045 "("
+ ARG@4045..4048
+ EXPR_VAR@4045..4048
+ NAME@4045..4048
+ IDENT@4045..4048 "str"
+ R_PAREN@4048..4049 ")"
+ COMMA@4049..4050 ","
+ WHITESPACE@4050..4051 " "
+ ARG@4051..4053
+ EXPR_STRING@4051..4053
+ STRING_SINGLE@4051..4053 "''"
+ R_PAREN@4053..4054 ")"
COMMA@4054..4055 ","
WHITESPACE@4055..4059 "\n\n "
MEMBER_BIND_STMT@4059..4174
@@ -2628,4667 +2606,4636 @@
OBJ_BODY_MEMBER_LIST@4079..4174
L_BRACE@4079..4080 "{"
WHITESPACE@4080..4085 "\n "
- MEMBER_FIELD@4085..4096
- FIELD_NORMAL@4085..4096
- FIELD_NAME_FIXED@4085..4088
- STRING_SINGLE@4085..4088 "'<'"
- COLON@4088..4089 ":"
- WHITESPACE@4089..4090 " "
- EXPR_STRING@4090..4096
- STRING_SINGLE@4090..4096 "'<'"
+ MEMBER_FIELD_NORMAL@4085..4096
+ FIELD_NAME_FIXED@4085..4088
+ STRING_SINGLE@4085..4088 "'<'"
+ COLON@4088..4089 ":"
+ WHITESPACE@4089..4090 " "
+ EXPR_STRING@4090..4096
+ STRING_SINGLE@4090..4096 "'<'"
COMMA@4096..4097 ","
WHITESPACE@4097..4102 "\n "
- MEMBER_FIELD@4102..4113
- FIELD_NORMAL@4102..4113
- FIELD_NAME_FIXED@4102..4105
- STRING_SINGLE@4102..4105 "'>'"
- COLON@4105..4106 ":"
- WHITESPACE@4106..4107 " "
- EXPR_STRING@4107..4113
- STRING_SINGLE@4107..4113 "'>'"
+ MEMBER_FIELD_NORMAL@4102..4113
+ FIELD_NAME_FIXED@4102..4105
+ STRING_SINGLE@4102..4105 "'>'"
+ COLON@4105..4106 ":"
+ WHITESPACE@4106..4107 " "
+ EXPR_STRING@4107..4113
+ STRING_SINGLE@4107..4113 "'>'"
COMMA@4113..4114 ","
WHITESPACE@4114..4119 "\n "
- MEMBER_FIELD@4119..4131
- FIELD_NORMAL@4119..4131
- FIELD_NAME_FIXED@4119..4122
- STRING_SINGLE@4119..4122 "'&'"
- COLON@4122..4123 ":"
- WHITESPACE@4123..4124 " "
- EXPR_STRING@4124..4131
- STRING_SINGLE@4124..4131 "'&'"
+ MEMBER_FIELD_NORMAL@4119..4131
+ FIELD_NAME_FIXED@4119..4122
+ STRING_SINGLE@4119..4122 "'&'"
+ COLON@4122..4123 ":"
+ WHITESPACE@4123..4124 " "
+ EXPR_STRING@4124..4131
+ STRING_SINGLE@4124..4131 "'&'"
COMMA@4131..4132 ","
WHITESPACE@4132..4137 "\n "
- MEMBER_FIELD@4137..4150
- FIELD_NORMAL@4137..4150
- FIELD_NAME_FIXED@4137..4140
- STRING_SINGLE@4137..4140 "'\"'"
- COLON@4140..4141 ":"
- WHITESPACE@4141..4142 " "
- EXPR_STRING@4142..4150
- STRING_SINGLE@4142..4150 "'"'"
+ MEMBER_FIELD_NORMAL@4137..4150
+ FIELD_NAME_FIXED@4137..4140
+ STRING_SINGLE@4137..4140 "'\"'"
+ COLON@4140..4141 ":"
+ WHITESPACE@4141..4142 " "
+ EXPR_STRING@4142..4150
+ STRING_SINGLE@4142..4150 "'"'"
COMMA@4150..4151 ","
WHITESPACE@4151..4156 "\n "
- MEMBER_FIELD@4156..4169
- FIELD_NORMAL@4156..4169
- FIELD_NAME_FIXED@4156..4159
- STRING_DOUBLE@4156..4159 "\"'\""
- COLON@4159..4160 ":"
- WHITESPACE@4160..4161 " "
- EXPR_STRING@4161..4169
- STRING_SINGLE@4161..4169 "'''"
+ MEMBER_FIELD_NORMAL@4156..4169
+ FIELD_NAME_FIXED@4156..4159
+ STRING_DOUBLE@4156..4159 "\"'\""
+ COLON@4159..4160 ":"
+ WHITESPACE@4160..4161 " "
+ EXPR_STRING@4161..4169
+ STRING_SINGLE@4161..4169 "'''"
COMMA@4169..4170 ","
WHITESPACE@4170..4173 "\n "
R_BRACE@4173..4174 "}"
COMMA@4174..4175 ","
WHITESPACE@4175..4179 "\n\n "
- MEMBER_FIELD@4179..4318
- FIELD_METHOD@4179..4318
- FIELD_NAME_FIXED@4179..4194
- NAME@4179..4194
- IDENT@4179..4194 "escapeStringXML"
- PARAMS_DESC@4194..4200
- L_PAREN@4194..4195 "("
- PARAM@4195..4199
- DESTRUCT_FULL@4195..4199
- NAME@4195..4199
- IDENT@4195..4199 "str_"
- R_PAREN@4199..4200 ")"
- COLONCOLON@4200..4202 "::"
- WHITESPACE@4202..4207 "\n "
- EXPR_LOCAL@4207..4318
- LOCAL_KW@4207..4212 "local"
- WHITESPACE@4212..4213 " "
- BIND_DESTRUCT@4213..4237
- DESTRUCT_FULL@4213..4216
- NAME@4213..4216
- IDENT@4213..4216 "str"
- WHITESPACE@4216..4217 " "
- ASSIGN@4217..4218 "="
- WHITESPACE@4218..4219 " "
- EXPR_APPLY@4219..4237
- EXPR_INDEX@4219..4231
- EXPR_VAR@4219..4222
- NAME@4219..4222
- IDENT@4219..4222 "std"
- DOT@4222..4223 "."
- NAME@4223..4231
- IDENT@4223..4231 "toString"
- ARGS_DESC@4231..4237
- L_PAREN@4231..4232 "("
- ARG@4232..4236
- EXPR_VAR@4232..4236
- NAME@4232..4236
- IDENT@4232..4236 "str_"
- R_PAREN@4236..4237 ")"
- SEMI@4237..4238 ";"
- WHITESPACE@4238..4243 "\n "
- EXPR_APPLY@4243..4318
- EXPR_INDEX@4243..4251
- EXPR_VAR@4243..4246
- NAME@4243..4246
- IDENT@4243..4246 "std"
- DOT@4246..4247 "."
- NAME@4247..4251
- IDENT@4247..4251 "join"
- ARGS_DESC@4251..4318
- L_PAREN@4251..4252 "("
- ARG@4252..4254
- EXPR_STRING@4252..4254
- STRING_SINGLE@4252..4254 "''"
- COMMA@4254..4255 ","
- WHITESPACE@4255..4256 " "
- ARG@4256..4317
- EXPR_ARRAY_COMP@4256..4317
- L_BRACK@4256..4257 "["
- EXPR_APPLY@4257..4285
- EXPR_INDEX@4257..4264
- EXPR_VAR@4257..4260
- NAME@4257..4260
- IDENT@4257..4260 "std"
- DOT@4260..4261 "."
- NAME@4261..4264
- IDENT@4261..4264 "get"
- ARGS_DESC@4264..4285
- L_PAREN@4264..4265 "("
- ARG@4265..4276
- EXPR_VAR@4265..4276
- NAME@4265..4276
- IDENT@4265..4276 "xml_escapes"
- COMMA@4276..4277 ","
- WHITESPACE@4277..4278 " "
- ARG@4278..4280
- EXPR_VAR@4278..4280
- NAME@4278..4280
- IDENT@4278..4280 "ch"
- COMMA@4280..4281 ","
- WHITESPACE@4281..4282 " "
- ARG@4282..4284
- EXPR_VAR@4282..4284
- NAME@4282..4284
- IDENT@4282..4284 "ch"
- R_PAREN@4284..4285 ")"
- WHITESPACE@4285..4286 " "
- FOR_SPEC@4286..4316
- FOR_KW@4286..4289 "for"
- WHITESPACE@4289..4290 " "
- NAME@4290..4292
- IDENT@4290..4292 "ch"
- WHITESPACE@4292..4293 " "
- IN_KW@4293..4295 "in"
- WHITESPACE@4295..4296 " "
- EXPR_APPLY@4296..4316
- EXPR_INDEX@4296..4311
- EXPR_VAR@4296..4299
- NAME@4296..4299
- IDENT@4296..4299 "std"
- DOT@4299..4300 "."
- NAME@4300..4311
- IDENT@4300..4311 "stringChars"
- ARGS_DESC@4311..4316
- L_PAREN@4311..4312 "("
- ARG@4312..4315
- EXPR_VAR@4312..4315
- NAME@4312..4315
- IDENT@4312..4315 "str"
- R_PAREN@4315..4316 ")"
- R_BRACK@4316..4317 "]"
- R_PAREN@4317..4318 ")"
+ MEMBER_FIELD_METHOD@4179..4318
+ FIELD_NAME_FIXED@4179..4194
+ NAME@4179..4194
+ IDENT@4179..4194 "escapeStringXML"
+ PARAMS_DESC@4194..4200
+ L_PAREN@4194..4195 "("
+ PARAM@4195..4199
+ DESTRUCT_FULL@4195..4199
+ NAME@4195..4199
+ IDENT@4195..4199 "str_"
+ R_PAREN@4199..4200 ")"
+ COLONCOLON@4200..4202 "::"
+ WHITESPACE@4202..4207 "\n "
+ EXPR_LOCAL@4207..4318
+ LOCAL_KW@4207..4212 "local"
+ WHITESPACE@4212..4213 " "
+ BIND_DESTRUCT@4213..4237
+ DESTRUCT_FULL@4213..4216
+ NAME@4213..4216
+ IDENT@4213..4216 "str"
+ WHITESPACE@4216..4217 " "
+ ASSIGN@4217..4218 "="
+ WHITESPACE@4218..4219 " "
+ EXPR_APPLY@4219..4237
+ EXPR_INDEX@4219..4231
+ EXPR_VAR@4219..4222
+ NAME@4219..4222
+ IDENT@4219..4222 "std"
+ DOT@4222..4223 "."
+ NAME@4223..4231
+ IDENT@4223..4231 "toString"
+ ARGS_DESC@4231..4237
+ L_PAREN@4231..4232 "("
+ ARG@4232..4236
+ EXPR_VAR@4232..4236
+ NAME@4232..4236
+ IDENT@4232..4236 "str_"
+ R_PAREN@4236..4237 ")"
+ SEMI@4237..4238 ";"
+ WHITESPACE@4238..4243 "\n "
+ EXPR_APPLY@4243..4318
+ EXPR_INDEX@4243..4251
+ EXPR_VAR@4243..4246
+ NAME@4243..4246
+ IDENT@4243..4246 "std"
+ DOT@4246..4247 "."
+ NAME@4247..4251
+ IDENT@4247..4251 "join"
+ ARGS_DESC@4251..4318
+ L_PAREN@4251..4252 "("
+ ARG@4252..4254
+ EXPR_STRING@4252..4254
+ STRING_SINGLE@4252..4254 "''"
+ COMMA@4254..4255 ","
+ WHITESPACE@4255..4256 " "
+ ARG@4256..4317
+ EXPR_ARRAY_COMP@4256..4317
+ L_BRACK@4256..4257 "["
+ EXPR_APPLY@4257..4285
+ EXPR_INDEX@4257..4264
+ EXPR_VAR@4257..4260
+ NAME@4257..4260
+ IDENT@4257..4260 "std"
+ DOT@4260..4261 "."
+ NAME@4261..4264
+ IDENT@4261..4264 "get"
+ ARGS_DESC@4264..4285
+ L_PAREN@4264..4265 "("
+ ARG@4265..4276
+ EXPR_VAR@4265..4276
+ NAME@4265..4276
+ IDENT@4265..4276 "xml_escapes"
+ COMMA@4276..4277 ","
+ WHITESPACE@4277..4278 " "
+ ARG@4278..4280
+ EXPR_VAR@4278..4280
+ NAME@4278..4280
+ IDENT@4278..4280 "ch"
+ COMMA@4280..4281 ","
+ WHITESPACE@4281..4282 " "
+ ARG@4282..4284
+ EXPR_VAR@4282..4284
+ NAME@4282..4284
+ IDENT@4282..4284 "ch"
+ R_PAREN@4284..4285 ")"
+ WHITESPACE@4285..4286 " "
+ FOR_SPEC@4286..4316
+ FOR_KW@4286..4289 "for"
+ WHITESPACE@4289..4290 " "
+ NAME@4290..4292
+ IDENT@4290..4292 "ch"
+ WHITESPACE@4292..4293 " "
+ IN_KW@4293..4295 "in"
+ WHITESPACE@4295..4296 " "
+ EXPR_APPLY@4296..4316
+ EXPR_INDEX@4296..4311
+ EXPR_VAR@4296..4299
+ NAME@4296..4299
+ IDENT@4296..4299 "std"
+ DOT@4299..4300 "."
+ NAME@4300..4311
+ IDENT@4300..4311 "stringChars"
+ ARGS_DESC@4311..4316
+ L_PAREN@4311..4312 "("
+ ARG@4312..4315
+ EXPR_VAR@4312..4315
+ NAME@4312..4315
+ IDENT@4312..4315 "str"
+ R_PAREN@4315..4316 ")"
+ R_BRACK@4316..4317 "]"
+ R_PAREN@4317..4318 ")"
COMMA@4318..4319 ","
WHITESPACE@4319..4323 "\n\n "
- MEMBER_FIELD@4323..4389
- FIELD_METHOD@4323..4389
- FIELD_NAME_FIXED@4323..4335
- NAME@4323..4335
- IDENT@4323..4335 "manifestJson"
- PARAMS_DESC@4335..4342
- L_PAREN@4335..4336 "("
- PARAM@4336..4341
- DESTRUCT_FULL@4336..4341
- NAME@4336..4341
- IDENT@4336..4341 "value"
- R_PAREN@4341..4342 ")"
- COLONCOLON@4342..4344 "::"
- WHITESPACE@4344..4345 " "
- EXPR_APPLY@4345..4389
- EXPR_INDEX@4345..4363
- EXPR_VAR@4345..4348
- NAME@4345..4348
- IDENT@4345..4348 "std"
- DOT@4348..4349 "."
- NAME@4349..4363
- IDENT@4349..4363 "manifestJsonEx"
- ARGS_DESC@4363..4389
- L_PAREN@4363..4364 "("
- ARG@4364..4369
- EXPR_VAR@4364..4369
- NAME@4364..4369
- IDENT@4364..4369 "value"
- COMMA@4369..4370 ","
- WHITESPACE@4370..4371 " "
- ARG@4371..4377
- EXPR_STRING@4371..4377
- STRING_SINGLE@4371..4377 "' '"
- R_PAREN@4377..4378 ")"
- WHITESPACE@4378..4379 " "
- TAILSTRICT_KW@4379..4389 "tailstrict"
+ MEMBER_FIELD_METHOD@4323..4389
+ FIELD_NAME_FIXED@4323..4335
+ NAME@4323..4335
+ IDENT@4323..4335 "manifestJson"
+ PARAMS_DESC@4335..4342
+ L_PAREN@4335..4336 "("
+ PARAM@4336..4341
+ DESTRUCT_FULL@4336..4341
+ NAME@4336..4341
+ IDENT@4336..4341 "value"
+ R_PAREN@4341..4342 ")"
+ COLONCOLON@4342..4344 "::"
+ WHITESPACE@4344..4345 " "
+ EXPR_APPLY@4345..4389
+ EXPR_INDEX@4345..4363
+ EXPR_VAR@4345..4348
+ NAME@4345..4348
+ IDENT@4345..4348 "std"
+ DOT@4348..4349 "."
+ NAME@4349..4363
+ IDENT@4349..4363 "manifestJsonEx"
+ ARGS_DESC@4363..4389
+ L_PAREN@4363..4364 "("
+ ARG@4364..4369
+ EXPR_VAR@4364..4369
+ NAME@4364..4369
+ IDENT@4364..4369 "value"
+ COMMA@4369..4370 ","
+ WHITESPACE@4370..4371 " "
+ ARG@4371..4377
+ EXPR_STRING@4371..4377
+ STRING_SINGLE@4371..4377 "' '"
+ R_PAREN@4377..4378 ")"
+ WHITESPACE@4378..4379 " "
+ TAILSTRICT_KW@4379..4389 "tailstrict"
COMMA@4389..4390 ","
WHITESPACE@4390..4394 "\n\n "
- MEMBER_FIELD@4394..4462
- FIELD_METHOD@4394..4462
- FIELD_NAME_FIXED@4394..4414
- NAME@4394..4414
- IDENT@4394..4414 "manifestJsonMinified"
- PARAMS_DESC@4414..4421
- L_PAREN@4414..4415 "("
- PARAM@4415..4420
- DESTRUCT_FULL@4415..4420
- NAME@4415..4420
- IDENT@4415..4420 "value"
- R_PAREN@4420..4421 ")"
- COLONCOLON@4421..4423 "::"
- WHITESPACE@4423..4424 " "
- EXPR_APPLY@4424..4462
- EXPR_INDEX@4424..4442
- EXPR_VAR@4424..4427
- NAME@4424..4427
- IDENT@4424..4427 "std"
- DOT@4427..4428 "."
- NAME@4428..4442
- IDENT@4428..4442 "manifestJsonEx"
- ARGS_DESC@4442..4462
- L_PAREN@4442..4443 "("
- ARG@4443..4448
- EXPR_VAR@4443..4448
- NAME@4443..4448
- IDENT@4443..4448 "value"
- COMMA@4448..4449 ","
- WHITESPACE@4449..4450 " "
- ARG@4450..4452
- EXPR_STRING@4450..4452
- STRING_SINGLE@4450..4452 "''"
- COMMA@4452..4453 ","
- WHITESPACE@4453..4454 " "
- ARG@4454..4456
- EXPR_STRING@4454..4456
- STRING_SINGLE@4454..4456 "''"
- COMMA@4456..4457 ","
- WHITESPACE@4457..4458 " "
- ARG@4458..4461
- EXPR_STRING@4458..4461
- STRING_SINGLE@4458..4461 "':'"
- R_PAREN@4461..4462 ")"
+ MEMBER_FIELD_METHOD@4394..4462
+ FIELD_NAME_FIXED@4394..4414
+ NAME@4394..4414
+ IDENT@4394..4414 "manifestJsonMinified"
+ PARAMS_DESC@4414..4421
+ L_PAREN@4414..4415 "("
+ PARAM@4415..4420
+ DESTRUCT_FULL@4415..4420
+ NAME@4415..4420
+ IDENT@4415..4420 "value"
+ R_PAREN@4420..4421 ")"
+ COLONCOLON@4421..4423 "::"
+ WHITESPACE@4423..4424 " "
+ EXPR_APPLY@4424..4462
+ EXPR_INDEX@4424..4442
+ EXPR_VAR@4424..4427
+ NAME@4424..4427
+ IDENT@4424..4427 "std"
+ DOT@4427..4428 "."
+ NAME@4428..4442
+ IDENT@4428..4442 "manifestJsonEx"
+ ARGS_DESC@4442..4462
+ L_PAREN@4442..4443 "("
+ ARG@4443..4448
+ EXPR_VAR@4443..4448
+ NAME@4443..4448
+ IDENT@4443..4448 "value"
+ COMMA@4448..4449 ","
+ WHITESPACE@4449..4450 " "
+ ARG@4450..4452
+ EXPR_STRING@4450..4452
+ STRING_SINGLE@4450..4452 "''"
+ COMMA@4452..4453 ","
+ WHITESPACE@4453..4454 " "
+ ARG@4454..4456
+ EXPR_STRING@4454..4456
+ STRING_SINGLE@4454..4456 "''"
+ COMMA@4456..4457 ","
+ WHITESPACE@4457..4458 " "
+ ARG@4458..4461
+ EXPR_STRING@4458..4461
+ STRING_SINGLE@4458..4461 "':'"
+ R_PAREN@4461..4462 ")"
COMMA@4462..4463 ","
WHITESPACE@4463..4467 "\n\n "
- MEMBER_FIELD@4467..4852
- FIELD_METHOD@4467..4852
- FIELD_NAME_FIXED@4467..4485
- NAME@4467..4485
- IDENT@4467..4485 "manifestYamlStream"
- PARAMS_DESC@4485..4560
- L_PAREN@4485..4486 "("
- PARAM@4486..4491
- DESTRUCT_FULL@4486..4491
- NAME@4486..4491
- IDENT@4486..4491 "value"
- COMMA@4491..4492 ","
- WHITESPACE@4492..4493 " "
- PARAM@4493..4521
- DESTRUCT_FULL@4493..4515
- NAME@4493..4515
- IDENT@4493..4515 "indent_array_in_object"
- ASSIGN@4515..4516 "="
- EXPR_LITERAL@4516..4521
- FALSE_KW@4516..4521 "false"
- COMMA@4521..4522 ","
- WHITESPACE@4522..4523 " "
- PARAM@4523..4542
- DESTRUCT_FULL@4523..4537
- NAME@4523..4537
- IDENT@4523..4537 "c_document_end"
- ASSIGN@4537..4538 "="
- EXPR_LITERAL@4538..4542
- TRUE_KW@4538..4542 "true"
- COMMA@4542..4543 ","
- WHITESPACE@4543..4544 " "
- PARAM@4544..4559
- DESTRUCT_FULL@4544..4554
- NAME@4544..4554
- IDENT@4544..4554 "quote_keys"
- ASSIGN@4554..4555 "="
- EXPR_LITERAL@4555..4559
- TRUE_KW@4555..4559 "true"
- R_PAREN@4559..4560 ")"
- COLONCOLON@4560..4562 "::"
- WHITESPACE@4562..4567 "\n "
- EXPR_IF_THEN_ELSE@4567..4852
- IF_KW@4567..4569 "if"
- WHITESPACE@4569..4570 " "
- EXPR_UNARY@4570..4589
- NOT@4570..4571 "!"
- EXPR_APPLY@4571..4589
- EXPR_INDEX@4571..4582
- EXPR_VAR@4571..4574
- NAME@4571..4574
- IDENT@4571..4574 "std"
- DOT@4574..4575 "."
- NAME@4575..4582
- IDENT@4575..4582 "isArray"
- ARGS_DESC@4582..4589
- L_PAREN@4582..4583 "("
- ARG@4583..4588
- EXPR_VAR@4583..4588
- NAME@4583..4588
- IDENT@4583..4588 "value"
- R_PAREN@4588..4589 ")"
- WHITESPACE@4589..4590 " "
- THEN_KW@4590..4594 "then"
- WHITESPACE@4594..4601 "\n "
- TRUE_EXPR@4601..4669
- EXPR_ERROR@4601..4669
- ERROR_KW@4601..4606 "error"
- WHITESPACE@4606..4607 " "
- EXPR_BINARY@4607..4669
- LHS_EXPR@4607..4651
- EXPR_STRING@4607..4651
- STRING_SINGLE@4607..4651 "'manifestYamlStream o ..."
- WHITESPACE@4651..4652 " "
- PLUS@4652..4653 "+"
- WHITESPACE@4653..4654 " "
- EXPR_APPLY@4654..4669
- EXPR_INDEX@4654..4662
- EXPR_VAR@4654..4657
- NAME@4654..4657
- IDENT@4654..4657 "std"
- DOT@4657..4658 "."
- NAME@4658..4662
- IDENT@4658..4662 "type"
- ARGS_DESC@4662..4669
- L_PAREN@4662..4663 "("
- ARG@4663..4668
- EXPR_VAR@4663..4668
- NAME@4663..4668
- IDENT@4663..4668 "value"
- R_PAREN@4668..4669 ")"
- WHITESPACE@4669..4674 "\n "
- ELSE_KW@4674..4678 "else"
- WHITESPACE@4678..4685 "\n "
- FALSE_EXPR@4685..4852
- EXPR_BINARY@4685..4852
- LHS_EXPR@4685..4807
- EXPR_BINARY@4685..4807
- LHS_EXPR@4685..4692
- EXPR_STRING@4685..4692
- STRING_SINGLE@4685..4692 "'---\\n'"
- WHITESPACE@4692..4693 " "
- PLUS@4693..4694 "+"
- WHITESPACE@4694..4695 " "
- EXPR_APPLY@4695..4807
- EXPR_INDEX@4695..4703
- EXPR_VAR@4695..4698
- NAME@4695..4698
- IDENT@4695..4698 "std"
- DOT@4698..4699 "."
- NAME@4699..4703
- IDENT@4699..4703 "join"
- ARGS_DESC@4703..4807
- L_PAREN@4703..4704 "("
- WHITESPACE@4704..4713 "\n "
- ARG@4713..4722
- EXPR_STRING@4713..4722
- STRING_SINGLE@4713..4722 "'\\n---\\n'"
- COMMA@4722..4723 ","
- WHITESPACE@4723..4724 " "
- ARG@4724..4799
- EXPR_ARRAY_COMP@4724..4799
- L_BRACK@4724..4725 "["
- EXPR_APPLY@4725..4783
- EXPR_INDEX@4725..4744
- EXPR_VAR@4725..4728
- NAME@4725..4728
- IDENT@4725..4728 "std"
- DOT@4728..4729 "."
- NAME@4729..4744
- IDENT@4729..4744 "manifestYamlDoc"
- ARGS_DESC@4744..4783
- L_PAREN@4744..4745 "("
- ARG@4745..4746
- EXPR_VAR@4745..4746
- NAME@4745..4746
- IDENT@4745..4746 "e"
- COMMA@4746..4747 ","
- WHITESPACE@4747..4748 " "
- ARG@4748..4770
- EXPR_VAR@4748..4770
- NAME@4748..4770
- IDENT@4748..4770 "indent_array_in_object"
- COMMA@4770..4771 ","
- WHITESPACE@4771..4772 " "
- ARG@4772..4782
- EXPR_VAR@4772..4782
- NAME@4772..4782
- IDENT@4772..4782 "quote_keys"
- R_PAREN@4782..4783 ")"
- WHITESPACE@4783..4784 " "
- FOR_SPEC@4784..4798
- FOR_KW@4784..4787 "for"
- WHITESPACE@4787..4788 " "
- NAME@4788..4789
- IDENT@4788..4789 "e"
- WHITESPACE@4789..4790 " "
- IN_KW@4790..4792 "in"
- WHITESPACE@4792..4793 " "
- EXPR_VAR@4793..4798
- NAME@4793..4798
- IDENT@4793..4798 "value"
- R_BRACK@4798..4799 "]"
- WHITESPACE@4799..4806 "\n "
- R_PAREN@4806..4807 ")"
- WHITESPACE@4807..4808 " "
- PLUS@4808..4809 "+"
- WHITESPACE@4809..4810 " "
- EXPR_IF_THEN_ELSE@4810..4852
- IF_KW@4810..4812 "if"
- WHITESPACE@4812..4813 " "
- EXPR_VAR@4813..4827
- NAME@4813..4827
- IDENT@4813..4827 "c_document_end"
- WHITESPACE@4827..4828 " "
- THEN_KW@4828..4832 "then"
- WHITESPACE@4832..4833 " "
- TRUE_EXPR@4833..4842
- EXPR_STRING@4833..4842
- STRING_SINGLE@4833..4842 "'\\n...\\n'"
- WHITESPACE@4842..4843 " "
- ELSE_KW@4843..4847 "else"
- WHITESPACE@4847..4848 " "
- FALSE_EXPR@4848..4852
- EXPR_STRING@4848..4852
- STRING_SINGLE@4848..4852 "'\\n'"
+ MEMBER_FIELD_METHOD@4467..4852
+ FIELD_NAME_FIXED@4467..4485
+ NAME@4467..4485
+ IDENT@4467..4485 "manifestYamlStream"
+ PARAMS_DESC@4485..4560
+ L_PAREN@4485..4486 "("
+ PARAM@4486..4491
+ DESTRUCT_FULL@4486..4491
+ NAME@4486..4491
+ IDENT@4486..4491 "value"
+ COMMA@4491..4492 ","
+ WHITESPACE@4492..4493 " "
+ PARAM@4493..4521
+ DESTRUCT_FULL@4493..4515
+ NAME@4493..4515
+ IDENT@4493..4515 "indent_array_in_object"
+ ASSIGN@4515..4516 "="
+ EXPR_LITERAL@4516..4521
+ FALSE_KW@4516..4521 "false"
+ COMMA@4521..4522 ","
+ WHITESPACE@4522..4523 " "
+ PARAM@4523..4542
+ DESTRUCT_FULL@4523..4537
+ NAME@4523..4537
+ IDENT@4523..4537 "c_document_end"
+ ASSIGN@4537..4538 "="
+ EXPR_LITERAL@4538..4542
+ TRUE_KW@4538..4542 "true"
+ COMMA@4542..4543 ","
+ WHITESPACE@4543..4544 " "
+ PARAM@4544..4559
+ DESTRUCT_FULL@4544..4554
+ NAME@4544..4554
+ IDENT@4544..4554 "quote_keys"
+ ASSIGN@4554..4555 "="
+ EXPR_LITERAL@4555..4559
+ TRUE_KW@4555..4559 "true"
+ R_PAREN@4559..4560 ")"
+ COLONCOLON@4560..4562 "::"
+ WHITESPACE@4562..4567 "\n "
+ EXPR_IF_THEN_ELSE@4567..4852
+ IF_KW@4567..4569 "if"
+ WHITESPACE@4569..4570 " "
+ EXPR_UNARY@4570..4589
+ NOT@4570..4571 "!"
+ EXPR_APPLY@4571..4589
+ EXPR_INDEX@4571..4582
+ EXPR_VAR@4571..4574
+ NAME@4571..4574
+ IDENT@4571..4574 "std"
+ DOT@4574..4575 "."
+ NAME@4575..4582
+ IDENT@4575..4582 "isArray"
+ ARGS_DESC@4582..4589
+ L_PAREN@4582..4583 "("
+ ARG@4583..4588
+ EXPR_VAR@4583..4588
+ NAME@4583..4588
+ IDENT@4583..4588 "value"
+ R_PAREN@4588..4589 ")"
+ WHITESPACE@4589..4590 " "
+ THEN_KW@4590..4594 "then"
+ WHITESPACE@4594..4601 "\n "
+ TRUE_EXPR@4601..4669
+ EXPR_ERROR@4601..4669
+ ERROR_KW@4601..4606 "error"
+ WHITESPACE@4606..4607 " "
+ EXPR_BINARY@4607..4669
+ LHS_EXPR@4607..4651
+ EXPR_STRING@4607..4651
+ STRING_SINGLE@4607..4651 "'manifestYamlStream o ..."
+ WHITESPACE@4651..4652 " "
+ PLUS@4652..4653 "+"
+ WHITESPACE@4653..4654 " "
+ EXPR_APPLY@4654..4669
+ EXPR_INDEX@4654..4662
+ EXPR_VAR@4654..4657
+ NAME@4654..4657
+ IDENT@4654..4657 "std"
+ DOT@4657..4658 "."
+ NAME@4658..4662
+ IDENT@4658..4662 "type"
+ ARGS_DESC@4662..4669
+ L_PAREN@4662..4663 "("
+ ARG@4663..4668
+ EXPR_VAR@4663..4668
+ NAME@4663..4668
+ IDENT@4663..4668 "value"
+ R_PAREN@4668..4669 ")"
+ WHITESPACE@4669..4674 "\n "
+ ELSE_KW@4674..4678 "else"
+ WHITESPACE@4678..4685 "\n "
+ FALSE_EXPR@4685..4852
+ EXPR_BINARY@4685..4852
+ LHS_EXPR@4685..4807
+ EXPR_BINARY@4685..4807
+ LHS_EXPR@4685..4692
+ EXPR_STRING@4685..4692
+ STRING_SINGLE@4685..4692 "'---\\n'"
+ WHITESPACE@4692..4693 " "
+ PLUS@4693..4694 "+"
+ WHITESPACE@4694..4695 " "
+ EXPR_APPLY@4695..4807
+ EXPR_INDEX@4695..4703
+ EXPR_VAR@4695..4698
+ NAME@4695..4698
+ IDENT@4695..4698 "std"
+ DOT@4698..4699 "."
+ NAME@4699..4703
+ IDENT@4699..4703 "join"
+ ARGS_DESC@4703..4807
+ L_PAREN@4703..4704 "("
+ WHITESPACE@4704..4713 "\n "
+ ARG@4713..4722
+ EXPR_STRING@4713..4722
+ STRING_SINGLE@4713..4722 "'\\n---\\n'"
+ COMMA@4722..4723 ","
+ WHITESPACE@4723..4724 " "
+ ARG@4724..4799
+ EXPR_ARRAY_COMP@4724..4799
+ L_BRACK@4724..4725 "["
+ EXPR_APPLY@4725..4783
+ EXPR_INDEX@4725..4744
+ EXPR_VAR@4725..4728
+ NAME@4725..4728
+ IDENT@4725..4728 "std"
+ DOT@4728..4729 "."
+ NAME@4729..4744
+ IDENT@4729..4744 "manifestYamlDoc"
+ ARGS_DESC@4744..4783
+ L_PAREN@4744..4745 "("
+ ARG@4745..4746
+ EXPR_VAR@4745..4746
+ NAME@4745..4746
+ IDENT@4745..4746 "e"
+ COMMA@4746..4747 ","
+ WHITESPACE@4747..4748 " "
+ ARG@4748..4770
+ EXPR_VAR@4748..4770
+ NAME@4748..4770
+ IDENT@4748..4770 "indent_array_in_object"
+ COMMA@4770..4771 ","
+ WHITESPACE@4771..4772 " "
+ ARG@4772..4782
+ EXPR_VAR@4772..4782
+ NAME@4772..4782
+ IDENT@4772..4782 "quote_keys"
+ R_PAREN@4782..4783 ")"
+ WHITESPACE@4783..4784 " "
+ FOR_SPEC@4784..4798
+ FOR_KW@4784..4787 "for"
+ WHITESPACE@4787..4788 " "
+ NAME@4788..4789
+ IDENT@4788..4789 "e"
+ WHITESPACE@4789..4790 " "
+ IN_KW@4790..4792 "in"
+ WHITESPACE@4792..4793 " "
+ EXPR_VAR@4793..4798
+ NAME@4793..4798
+ IDENT@4793..4798 "value"
+ R_BRACK@4798..4799 "]"
+ WHITESPACE@4799..4806 "\n "
+ R_PAREN@4806..4807 ")"
+ WHITESPACE@4807..4808 " "
+ PLUS@4808..4809 "+"
+ WHITESPACE@4809..4810 " "
+ EXPR_IF_THEN_ELSE@4810..4852
+ IF_KW@4810..4812 "if"
+ WHITESPACE@4812..4813 " "
+ EXPR_VAR@4813..4827
+ NAME@4813..4827
+ IDENT@4813..4827 "c_document_end"
+ WHITESPACE@4827..4828 " "
+ THEN_KW@4828..4832 "then"
+ WHITESPACE@4832..4833 " "
+ TRUE_EXPR@4833..4842
+ EXPR_STRING@4833..4842
+ STRING_SINGLE@4833..4842 "'\\n...\\n'"
+ WHITESPACE@4842..4843 " "
+ ELSE_KW@4843..4847 "else"
+ WHITESPACE@4847..4848 " "
+ FALSE_EXPR@4848..4852
+ EXPR_STRING@4848..4852
+ STRING_SINGLE@4848..4852 "'\\n'"
COMMA@4852..4853 ","
WHITESPACE@4853..4857 "\n\n "
- MEMBER_FIELD@4857..5513
- FIELD_METHOD@4857..5513
- FIELD_NAME_FIXED@4857..4871
- NAME@4857..4871
- IDENT@4857..4871 "manifestPython"
- PARAMS_DESC@4871..4874
- L_PAREN@4871..4872 "("
- PARAM@4872..4873
- DESTRUCT_FULL@4872..4873
- NAME@4872..4873
- IDENT@4872..4873 "v"
- R_PAREN@4873..4874 ")"
- COLONCOLON@4874..4876 "::"
- WHITESPACE@4876..4881 "\n "
- EXPR_IF_THEN_ELSE@4881..5513
- IF_KW@4881..4883 "if"
- WHITESPACE@4883..4884 " "
- EXPR_APPLY@4884..4899
- EXPR_INDEX@4884..4896
- EXPR_VAR@4884..4887
- NAME@4884..4887
- IDENT@4884..4887 "std"
- DOT@4887..4888 "."
- NAME@4888..4896
- IDENT@4888..4896 "isObject"
- ARGS_DESC@4896..4899
- L_PAREN@4896..4897 "("
- ARG@4897..4898
- EXPR_VAR@4897..4898
- NAME@4897..4898
- IDENT@4897..4898 "v"
- R_PAREN@4898..4899 ")"
- WHITESPACE@4899..4900 " "
- THEN_KW@4900..4904 "then"
- WHITESPACE@4904..4911 "\n "
- TRUE_EXPR@4911..5086
- EXPR_LOCAL@4911..5086
- LOCAL_KW@4911..4916 "local"
- WHITESPACE@4916..4917 " "
- BIND_DESTRUCT@4917..5045
- DESTRUCT_FULL@4917..4923
- NAME@4917..4923
- IDENT@4917..4923 "fields"
- WHITESPACE@4923..4924 " "
- ASSIGN@4924..4925 "="
- WHITESPACE@4925..4926 " "
- EXPR_ARRAY_COMP@4926..5045
- L_BRACK@4926..4927 "["
- WHITESPACE@4927..4936 "\n "
- EXPR_BINARY@4936..5000
- LHS_EXPR@4936..4944
- EXPR_STRING@4936..4944
- STRING_SINGLE@4936..4944 "'%s: %s'"
- WHITESPACE@4944..4945 " "
- MODULO@4945..4946 "%"
- WHITESPACE@4946..4947 " "
- EXPR_ARRAY@4947..5000
- L_BRACK@4947..4948 "["
- EXPR_APPLY@4948..4973
- EXPR_INDEX@4948..4970
- EXPR_VAR@4948..4951
- NAME@4948..4951
- IDENT@4948..4951 "std"
- DOT@4951..4952 "."
- NAME@4952..4970
- IDENT@4952..4970 "escapeStringPython"
- ARGS_DESC@4970..4973
- L_PAREN@4970..4971 "("
- ARG@4971..4972
- EXPR_VAR@4971..4972
- NAME@4971..4972
- IDENT@4971..4972 "k"
- R_PAREN@4972..4973 ")"
- COMMA@4973..4974 ","
- WHITESPACE@4974..4975 " "
- EXPR_APPLY@4975..4999
- EXPR_INDEX@4975..4993
- EXPR_VAR@4975..4978
- NAME@4975..4978
- IDENT@4975..4978 "std"
- DOT@4978..4979 "."
- NAME@4979..4993
- IDENT@4979..4993 "manifestPython"
- ARGS_DESC@4993..4999
- L_PAREN@4993..4994 "("
- ARG@4994..4998
- EXPR_INDEX_EXPR@4994..4998
- LHS_EXPR@4994..4995
- EXPR_VAR@4994..4995
- NAME@4994..4995
- IDENT@4994..4995 "v"
- L_BRACK@4995..4996 "["
- EXPR_VAR@4996..4997
- NAME@4996..4997
- IDENT@4996..4997 "k"
- R_BRACK@4997..4998 "]"
- R_PAREN@4998..4999 ")"
- R_BRACK@4999..5000 "]"
- WHITESPACE@5000..5009 "\n "
- FOR_SPEC@5009..5037
- FOR_KW@5009..5012 "for"
- WHITESPACE@5012..5013 " "
- NAME@5013..5014
- IDENT@5013..5014 "k"
- WHITESPACE@5014..5015 " "
- IN_KW@5015..5017 "in"
- WHITESPACE@5017..5018 " "
- EXPR_APPLY@5018..5037
- EXPR_INDEX@5018..5034
- EXPR_VAR@5018..5021
- NAME@5018..5021
- IDENT@5018..5021 "std"
- DOT@5021..5022 "."
- NAME@5022..5034
- IDENT@5022..5034 "objectFields"
- ARGS_DESC@5034..5037
- L_PAREN@5034..5035 "("
- ARG@5035..5036
- EXPR_VAR@5035..5036
- NAME@5035..5036
- IDENT@5035..5036 "v"
- R_PAREN@5036..5037 ")"
- WHITESPACE@5037..5044 "\n "
- R_BRACK@5044..5045 "]"
- SEMI@5045..5046 ";"
- WHITESPACE@5046..5053 "\n "
- EXPR_BINARY@5053..5086
- LHS_EXPR@5053..5059
- EXPR_STRING@5053..5059
- STRING_SINGLE@5053..5059 "'{%s}'"
- WHITESPACE@5059..5060 " "
- MODULO@5060..5061 "%"
- WHITESPACE@5061..5062 " "
- EXPR_ARRAY@5062..5086
- L_BRACK@5062..5063 "["
- EXPR_APPLY@5063..5085
- EXPR_INDEX@5063..5071
- EXPR_VAR@5063..5066
- NAME@5063..5066
- IDENT@5063..5066 "std"
- DOT@5066..5067 "."
- NAME@5067..5071
- IDENT@5067..5071 "join"
- ARGS_DESC@5071..5085
- L_PAREN@5071..5072 "("
- ARG@5072..5076
- EXPR_STRING@5072..5076
- STRING_SINGLE@5072..5076 "', '"
- COMMA@5076..5077 ","
- WHITESPACE@5077..5078 " "
- ARG@5078..5084
- EXPR_VAR@5078..5084
- NAME@5078..5084
- IDENT@5078..5084 "fields"
- R_PAREN@5084..5085 ")"
- R_BRACK@5085..5086 "]"
- WHITESPACE@5086..5091 "\n "
- ELSE_KW@5091..5095 "else"
- WHITESPACE@5095..5096 " "
- FALSE_EXPR@5096..5513
- EXPR_IF_THEN_ELSE@5096..5513
- IF_KW@5096..5098 "if"
- WHITESPACE@5098..5099 " "
- EXPR_APPLY@5099..5113
- EXPR_INDEX@5099..5110
- EXPR_VAR@5099..5102
- NAME@5099..5102
- IDENT@5099..5102 "std"
- DOT@5102..5103 "."
- NAME@5103..5110
- IDENT@5103..5110 "isArray"
- ARGS_DESC@5110..5113
- L_PAREN@5110..5111 "("
- ARG@5111..5112
- EXPR_VAR@5111..5112
- NAME@5111..5112
- IDENT@5111..5112 "v"
- R_PAREN@5112..5113 ")"
- WHITESPACE@5113..5114 " "
- THEN_KW@5114..5118 "then"
- WHITESPACE@5118..5125 "\n "
- TRUE_EXPR@5125..5188
- EXPR_BINARY@5125..5188
- LHS_EXPR@5125..5131
- EXPR_STRING@5125..5131
- STRING_SINGLE@5125..5131 "'[%s]'"
- WHITESPACE@5131..5132 " "
- MODULO@5132..5133 "%"
- WHITESPACE@5133..5134 " "
- EXPR_ARRAY@5134..5188
- L_BRACK@5134..5135 "["
- EXPR_APPLY@5135..5187
- EXPR_INDEX@5135..5143
- EXPR_VAR@5135..5138
- NAME@5135..5138
- IDENT@5135..5138 "std"
- DOT@5138..5139 "."
- NAME@5139..5143
- IDENT@5139..5143 "join"
- ARGS_DESC@5143..5187
- L_PAREN@5143..5144 "("
- ARG@5144..5148
- EXPR_STRING@5144..5148
- STRING_SINGLE@5144..5148 "', '"
- COMMA@5148..5149 ","
- WHITESPACE@5149..5150 " "
- ARG@5150..5186
- EXPR_ARRAY_COMP@5150..5186
- L_BRACK@5150..5151 "["
- EXPR_APPLY@5151..5173
- EXPR_INDEX@5151..5169
- EXPR_VAR@5151..5154
- NAME@5151..5154
- IDENT@5151..5154 "std"
- DOT@5154..5155 "."
- NAME@5155..5169
- IDENT@5155..5169 "manifestPython"
- ARGS_DESC@5169..5173
- L_PAREN@5169..5170 "("
- ARG@5170..5172
- EXPR_VAR@5170..5172
- NAME@5170..5172
- IDENT@5170..5172 "v2"
- R_PAREN@5172..5173 ")"
- WHITESPACE@5173..5174 " "
- FOR_SPEC@5174..5185
- FOR_KW@5174..5177 "for"
- WHITESPACE@5177..5178 " "
- NAME@5178..5180
- IDENT@5178..5180 "v2"
- WHITESPACE@5180..5181 " "
- IN_KW@5181..5183 "in"
- WHITESPACE@5183..5184 " "
- EXPR_VAR@5184..5185
- NAME@5184..5185
- IDENT@5184..5185 "v"
- R_BRACK@5185..5186 "]"
- R_PAREN@5186..5187 ")"
- R_BRACK@5187..5188 "]"
- WHITESPACE@5188..5193 "\n "
- ELSE_KW@5193..5197 "else"
- WHITESPACE@5197..5198 " "
- FALSE_EXPR@5198..5513
- EXPR_IF_THEN_ELSE@5198..5513
- IF_KW@5198..5200 "if"
- WHITESPACE@5200..5201 " "
- EXPR_APPLY@5201..5216
- EXPR_INDEX@5201..5213
- EXPR_VAR@5201..5204
- NAME@5201..5204
- IDENT@5201..5204 "std"
- DOT@5204..5205 "."
- NAME@5205..5213
- IDENT@5205..5213 "isString"
- ARGS_DESC@5213..5216
- L_PAREN@5213..5214 "("
- ARG@5214..5215
- EXPR_VAR@5214..5215
- NAME@5214..5215
- IDENT@5214..5215 "v"
- R_PAREN@5215..5216 ")"
- WHITESPACE@5216..5217 " "
- THEN_KW@5217..5221 "then"
- WHITESPACE@5221..5228 "\n "
- TRUE_EXPR@5228..5262
- EXPR_BINARY@5228..5262
- LHS_EXPR@5228..5232
- EXPR_STRING@5228..5232
- STRING_SINGLE@5228..5232 "'%s'"
- WHITESPACE@5232..5233 " "
- MODULO@5233..5234 "%"
- WHITESPACE@5234..5235 " "
- EXPR_ARRAY@5235..5262
- L_BRACK@5235..5236 "["
- EXPR_APPLY@5236..5261
- EXPR_INDEX@5236..5258
- EXPR_VAR@5236..5239
- NAME@5236..5239
- IDENT@5236..5239 "std"
- DOT@5239..5240 "."
- NAME@5240..5258
- IDENT@5240..5258 "escapeStringPython"
- ARGS_DESC@5258..5261
- L_PAREN@5258..5259 "("
- ARG@5259..5260
- EXPR_VAR@5259..5260
- NAME@5259..5260
- IDENT@5259..5260 "v"
- R_PAREN@5260..5261 ")"
- R_BRACK@5261..5262 "]"
- WHITESPACE@5262..5267 "\n "
- ELSE_KW@5267..5271 "else"
- WHITESPACE@5271..5272 " "
- FALSE_EXPR@5272..5513
- EXPR_IF_THEN_ELSE@5272..5513
- IF_KW@5272..5274 "if"
- WHITESPACE@5274..5275 " "
- EXPR_APPLY@5275..5292
- EXPR_INDEX@5275..5289
- EXPR_VAR@5275..5278
- NAME@5275..5278
- IDENT@5275..5278 "std"
- DOT@5278..5279 "."
- NAME@5279..5289
- IDENT@5279..5289 "isFunction"
- ARGS_DESC@5289..5292
- L_PAREN@5289..5290 "("
- ARG@5290..5291
- EXPR_VAR@5290..5291
- NAME@5290..5291
- IDENT@5290..5291 "v"
- R_PAREN@5291..5292 ")"
- WHITESPACE@5292..5293 " "
- THEN_KW@5293..5297 "then"
- WHITESPACE@5297..5304 "\n "
- TRUE_EXPR@5304..5336
- EXPR_ERROR@5304..5336
- ERROR_KW@5304..5309 "error"
- WHITESPACE@5309..5310 " "
- EXPR_STRING@5310..5336
- STRING_SINGLE@5310..5336 "'cannot manifest func ..."
- WHITESPACE@5336..5341 "\n "
- ELSE_KW@5341..5345 "else"
- WHITESPACE@5345..5346 " "
- FALSE_EXPR@5346..5513
- EXPR_IF_THEN_ELSE@5346..5513
- IF_KW@5346..5348 "if"
- WHITESPACE@5348..5349 " "
- EXPR_APPLY@5349..5364
- EXPR_INDEX@5349..5361
- EXPR_VAR@5349..5352
- NAME@5349..5352
- IDENT@5349..5352 "std"
- DOT@5352..5353 "."
- NAME@5353..5361
- IDENT@5353..5361 "isNumber"
- ARGS_DESC@5361..5364
- L_PAREN@5361..5362 "("
- ARG@5362..5363
- EXPR_VAR@5362..5363
- NAME@5362..5363
- IDENT@5362..5363 "v"
- R_PAREN@5363..5364 ")"
- WHITESPACE@5364..5365 " "
- THEN_KW@5365..5369 "then"
- WHITESPACE@5369..5376 "\n "
- TRUE_EXPR@5376..5391
- EXPR_APPLY@5376..5391
- EXPR_INDEX@5376..5388
- EXPR_VAR@5376..5379
- NAME@5376..5379
- IDENT@5376..5379 "std"
- DOT@5379..5380 "."
- NAME@5380..5388
- IDENT@5380..5388 "toString"
- ARGS_DESC@5388..5391
- L_PAREN@5388..5389 "("
- ARG@5389..5390
- EXPR_VAR@5389..5390
- NAME@5389..5390
- IDENT@5389..5390 "v"
- R_PAREN@5390..5391 ")"
- WHITESPACE@5391..5396 "\n "
- ELSE_KW@5396..5400 "else"
- WHITESPACE@5400..5401 " "
- FALSE_EXPR@5401..5513
- EXPR_IF_THEN_ELSE@5401..5513
- IF_KW@5401..5403 "if"
- WHITESPACE@5403..5404 " "
- EXPR_BINARY@5404..5413
- LHS_EXPR@5404..5405
- EXPR_VAR@5404..5405
- NAME@5404..5405
- IDENT@5404..5405 "v"
- WHITESPACE@5405..5406 " "
- EQ@5406..5408 "=="
- WHITESPACE@5408..5409 " "
- EXPR_LITERAL@5409..5413
- TRUE_KW@5409..5413 "true"
- WHITESPACE@5413..5414 " "
- THEN_KW@5414..5418 "then"
- WHITESPACE@5418..5425 "\n "
- TRUE_EXPR@5425..5431
- EXPR_STRING@5425..5431
- STRING_SINGLE@5425..5431 "'True'"
- WHITESPACE@5431..5436 "\n "
- ELSE_KW@5436..5440 "else"
- WHITESPACE@5440..5441 " "
- FALSE_EXPR@5441..5513
- EXPR_IF_THEN_ELSE@5441..5513
- IF_KW@5441..5443 "if"
- WHITESPACE@5443..5444 " "
- EXPR_BINARY@5444..5454
- LHS_EXPR@5444..5445
- EXPR_VAR@5444..5445
- NAME@5444..5445
- IDENT@5444..5445 "v"
- WHITESPACE@5445..5446 " "
- EQ@5446..5448 "=="
- WHITESPACE@5448..5449 " "
- EXPR_LITERAL@5449..5454
- FALSE_KW@5449..5454 "false"
- WHITESPACE@5454..5455 " "
- THEN_KW@5455..5459 "then"
- WHITESPACE@5459..5466 "\n "
- TRUE_EXPR@5466..5473
- EXPR_STRING@5466..5473
- STRING_SINGLE@5466..5473 "'False'"
- WHITESPACE@5473..5478 "\n "
- ELSE_KW@5478..5482 "else"
- WHITESPACE@5482..5483 " "
- FALSE_EXPR@5483..5513
- EXPR_IF_THEN_ELSE@5483..5513
- IF_KW@5483..5485 "if"
- WHITESPACE@5485..5486 " "
- EXPR_BINARY@5486..5495
- LHS_EXPR@5486..5487
- EXPR_VAR@5486..5487
- NAME@5486..5487
- IDENT@5486..5487 "v"
- WHITESPACE@5487..5488 " "
- EQ@5488..5490 "=="
- WHITESPACE@5490..5491 " "
- EXPR_LITERAL@5491..5495
- NULL_KW@5491..5495 "null"
- WHITESPACE@5495..5496 " "
- THEN_KW@5496..5500 "then"
- WHITESPACE@5500..5507 "\n "
- TRUE_EXPR@5507..5513
- EXPR_STRING@5507..5513
- STRING_SINGLE@5507..5513 "'None'"
+ MEMBER_FIELD_METHOD@4857..5513
+ FIELD_NAME_FIXED@4857..4871
+ NAME@4857..4871
+ IDENT@4857..4871 "manifestPython"
+ PARAMS_DESC@4871..4874
+ L_PAREN@4871..4872 "("
+ PARAM@4872..4873
+ DESTRUCT_FULL@4872..4873
+ NAME@4872..4873
+ IDENT@4872..4873 "v"
+ R_PAREN@4873..4874 ")"
+ COLONCOLON@4874..4876 "::"
+ WHITESPACE@4876..4881 "\n "
+ EXPR_IF_THEN_ELSE@4881..5513
+ IF_KW@4881..4883 "if"
+ WHITESPACE@4883..4884 " "
+ EXPR_APPLY@4884..4899
+ EXPR_INDEX@4884..4896
+ EXPR_VAR@4884..4887
+ NAME@4884..4887
+ IDENT@4884..4887 "std"
+ DOT@4887..4888 "."
+ NAME@4888..4896
+ IDENT@4888..4896 "isObject"
+ ARGS_DESC@4896..4899
+ L_PAREN@4896..4897 "("
+ ARG@4897..4898
+ EXPR_VAR@4897..4898
+ NAME@4897..4898
+ IDENT@4897..4898 "v"
+ R_PAREN@4898..4899 ")"
+ WHITESPACE@4899..4900 " "
+ THEN_KW@4900..4904 "then"
+ WHITESPACE@4904..4911 "\n "
+ TRUE_EXPR@4911..5086
+ EXPR_LOCAL@4911..5086
+ LOCAL_KW@4911..4916 "local"
+ WHITESPACE@4916..4917 " "
+ BIND_DESTRUCT@4917..5045
+ DESTRUCT_FULL@4917..4923
+ NAME@4917..4923
+ IDENT@4917..4923 "fields"
+ WHITESPACE@4923..4924 " "
+ ASSIGN@4924..4925 "="
+ WHITESPACE@4925..4926 " "
+ EXPR_ARRAY_COMP@4926..5045
+ L_BRACK@4926..4927 "["
+ WHITESPACE@4927..4936 "\n "
+ EXPR_BINARY@4936..5000
+ LHS_EXPR@4936..4944
+ EXPR_STRING@4936..4944
+ STRING_SINGLE@4936..4944 "'%s: %s'"
+ WHITESPACE@4944..4945 " "
+ MODULO@4945..4946 "%"
+ WHITESPACE@4946..4947 " "
+ EXPR_ARRAY@4947..5000
+ L_BRACK@4947..4948 "["
+ EXPR_APPLY@4948..4973
+ EXPR_INDEX@4948..4970
+ EXPR_VAR@4948..4951
+ NAME@4948..4951
+ IDENT@4948..4951 "std"
+ DOT@4951..4952 "."
+ NAME@4952..4970
+ IDENT@4952..4970 "escapeStringPython"
+ ARGS_DESC@4970..4973
+ L_PAREN@4970..4971 "("
+ ARG@4971..4972
+ EXPR_VAR@4971..4972
+ NAME@4971..4972
+ IDENT@4971..4972 "k"
+ R_PAREN@4972..4973 ")"
+ COMMA@4973..4974 ","
+ WHITESPACE@4974..4975 " "
+ EXPR_APPLY@4975..4999
+ EXPR_INDEX@4975..4993
+ EXPR_VAR@4975..4978
+ NAME@4975..4978
+ IDENT@4975..4978 "std"
+ DOT@4978..4979 "."
+ NAME@4979..4993
+ IDENT@4979..4993 "manifestPython"
+ ARGS_DESC@4993..4999
+ L_PAREN@4993..4994 "("
+ ARG@4994..4998
+ EXPR_INDEX_EXPR@4994..4998
+ LHS_EXPR@4994..4995
+ EXPR_VAR@4994..4995
+ NAME@4994..4995
+ IDENT@4994..4995 "v"
+ L_BRACK@4995..4996 "["
+ EXPR_VAR@4996..4997
+ NAME@4996..4997
+ IDENT@4996..4997 "k"
+ R_BRACK@4997..4998 "]"
+ R_PAREN@4998..4999 ")"
+ R_BRACK@4999..5000 "]"
+ WHITESPACE@5000..5009 "\n "
+ FOR_SPEC@5009..5037
+ FOR_KW@5009..5012 "for"
+ WHITESPACE@5012..5013 " "
+ NAME@5013..5014
+ IDENT@5013..5014 "k"
+ WHITESPACE@5014..5015 " "
+ IN_KW@5015..5017 "in"
+ WHITESPACE@5017..5018 " "
+ EXPR_APPLY@5018..5037
+ EXPR_INDEX@5018..5034
+ EXPR_VAR@5018..5021
+ NAME@5018..5021
+ IDENT@5018..5021 "std"
+ DOT@5021..5022 "."
+ NAME@5022..5034
+ IDENT@5022..5034 "objectFields"
+ ARGS_DESC@5034..5037
+ L_PAREN@5034..5035 "("
+ ARG@5035..5036
+ EXPR_VAR@5035..5036
+ NAME@5035..5036
+ IDENT@5035..5036 "v"
+ R_PAREN@5036..5037 ")"
+ WHITESPACE@5037..5044 "\n "
+ R_BRACK@5044..5045 "]"
+ SEMI@5045..5046 ";"
+ WHITESPACE@5046..5053 "\n "
+ EXPR_BINARY@5053..5086
+ LHS_EXPR@5053..5059
+ EXPR_STRING@5053..5059
+ STRING_SINGLE@5053..5059 "'{%s}'"
+ WHITESPACE@5059..5060 " "
+ MODULO@5060..5061 "%"
+ WHITESPACE@5061..5062 " "
+ EXPR_ARRAY@5062..5086
+ L_BRACK@5062..5063 "["
+ EXPR_APPLY@5063..5085
+ EXPR_INDEX@5063..5071
+ EXPR_VAR@5063..5066
+ NAME@5063..5066
+ IDENT@5063..5066 "std"
+ DOT@5066..5067 "."
+ NAME@5067..5071
+ IDENT@5067..5071 "join"
+ ARGS_DESC@5071..5085
+ L_PAREN@5071..5072 "("
+ ARG@5072..5076
+ EXPR_STRING@5072..5076
+ STRING_SINGLE@5072..5076 "', '"
+ COMMA@5076..5077 ","
+ WHITESPACE@5077..5078 " "
+ ARG@5078..5084
+ EXPR_VAR@5078..5084
+ NAME@5078..5084
+ IDENT@5078..5084 "fields"
+ R_PAREN@5084..5085 ")"
+ R_BRACK@5085..5086 "]"
+ WHITESPACE@5086..5091 "\n "
+ ELSE_KW@5091..5095 "else"
+ WHITESPACE@5095..5096 " "
+ FALSE_EXPR@5096..5513
+ EXPR_IF_THEN_ELSE@5096..5513
+ IF_KW@5096..5098 "if"
+ WHITESPACE@5098..5099 " "
+ EXPR_APPLY@5099..5113
+ EXPR_INDEX@5099..5110
+ EXPR_VAR@5099..5102
+ NAME@5099..5102
+ IDENT@5099..5102 "std"
+ DOT@5102..5103 "."
+ NAME@5103..5110
+ IDENT@5103..5110 "isArray"
+ ARGS_DESC@5110..5113
+ L_PAREN@5110..5111 "("
+ ARG@5111..5112
+ EXPR_VAR@5111..5112
+ NAME@5111..5112
+ IDENT@5111..5112 "v"
+ R_PAREN@5112..5113 ")"
+ WHITESPACE@5113..5114 " "
+ THEN_KW@5114..5118 "then"
+ WHITESPACE@5118..5125 "\n "
+ TRUE_EXPR@5125..5188
+ EXPR_BINARY@5125..5188
+ LHS_EXPR@5125..5131
+ EXPR_STRING@5125..5131
+ STRING_SINGLE@5125..5131 "'[%s]'"
+ WHITESPACE@5131..5132 " "
+ MODULO@5132..5133 "%"
+ WHITESPACE@5133..5134 " "
+ EXPR_ARRAY@5134..5188
+ L_BRACK@5134..5135 "["
+ EXPR_APPLY@5135..5187
+ EXPR_INDEX@5135..5143
+ EXPR_VAR@5135..5138
+ NAME@5135..5138
+ IDENT@5135..5138 "std"
+ DOT@5138..5139 "."
+ NAME@5139..5143
+ IDENT@5139..5143 "join"
+ ARGS_DESC@5143..5187
+ L_PAREN@5143..5144 "("
+ ARG@5144..5148
+ EXPR_STRING@5144..5148
+ STRING_SINGLE@5144..5148 "', '"
+ COMMA@5148..5149 ","
+ WHITESPACE@5149..5150 " "
+ ARG@5150..5186
+ EXPR_ARRAY_COMP@5150..5186
+ L_BRACK@5150..5151 "["
+ EXPR_APPLY@5151..5173
+ EXPR_INDEX@5151..5169
+ EXPR_VAR@5151..5154
+ NAME@5151..5154
+ IDENT@5151..5154 "std"
+ DOT@5154..5155 "."
+ NAME@5155..5169
+ IDENT@5155..5169 "manifestPython"
+ ARGS_DESC@5169..5173
+ L_PAREN@5169..5170 "("
+ ARG@5170..5172
+ EXPR_VAR@5170..5172
+ NAME@5170..5172
+ IDENT@5170..5172 "v2"
+ R_PAREN@5172..5173 ")"
+ WHITESPACE@5173..5174 " "
+ FOR_SPEC@5174..5185
+ FOR_KW@5174..5177 "for"
+ WHITESPACE@5177..5178 " "
+ NAME@5178..5180
+ IDENT@5178..5180 "v2"
+ WHITESPACE@5180..5181 " "
+ IN_KW@5181..5183 "in"
+ WHITESPACE@5183..5184 " "
+ EXPR_VAR@5184..5185
+ NAME@5184..5185
+ IDENT@5184..5185 "v"
+ R_BRACK@5185..5186 "]"
+ R_PAREN@5186..5187 ")"
+ R_BRACK@5187..5188 "]"
+ WHITESPACE@5188..5193 "\n "
+ ELSE_KW@5193..5197 "else"
+ WHITESPACE@5197..5198 " "
+ FALSE_EXPR@5198..5513
+ EXPR_IF_THEN_ELSE@5198..5513
+ IF_KW@5198..5200 "if"
+ WHITESPACE@5200..5201 " "
+ EXPR_APPLY@5201..5216
+ EXPR_INDEX@5201..5213
+ EXPR_VAR@5201..5204
+ NAME@5201..5204
+ IDENT@5201..5204 "std"
+ DOT@5204..5205 "."
+ NAME@5205..5213
+ IDENT@5205..5213 "isString"
+ ARGS_DESC@5213..5216
+ L_PAREN@5213..5214 "("
+ ARG@5214..5215
+ EXPR_VAR@5214..5215
+ NAME@5214..5215
+ IDENT@5214..5215 "v"
+ R_PAREN@5215..5216 ")"
+ WHITESPACE@5216..5217 " "
+ THEN_KW@5217..5221 "then"
+ WHITESPACE@5221..5228 "\n "
+ TRUE_EXPR@5228..5262
+ EXPR_BINARY@5228..5262
+ LHS_EXPR@5228..5232
+ EXPR_STRING@5228..5232
+ STRING_SINGLE@5228..5232 "'%s'"
+ WHITESPACE@5232..5233 " "
+ MODULO@5233..5234 "%"
+ WHITESPACE@5234..5235 " "
+ EXPR_ARRAY@5235..5262
+ L_BRACK@5235..5236 "["
+ EXPR_APPLY@5236..5261
+ EXPR_INDEX@5236..5258
+ EXPR_VAR@5236..5239
+ NAME@5236..5239
+ IDENT@5236..5239 "std"
+ DOT@5239..5240 "."
+ NAME@5240..5258
+ IDENT@5240..5258 "escapeStringPython"
+ ARGS_DESC@5258..5261
+ L_PAREN@5258..5259 "("
+ ARG@5259..5260
+ EXPR_VAR@5259..5260
+ NAME@5259..5260
+ IDENT@5259..5260 "v"
+ R_PAREN@5260..5261 ")"
+ R_BRACK@5261..5262 "]"
+ WHITESPACE@5262..5267 "\n "
+ ELSE_KW@5267..5271 "else"
+ WHITESPACE@5271..5272 " "
+ FALSE_EXPR@5272..5513
+ EXPR_IF_THEN_ELSE@5272..5513
+ IF_KW@5272..5274 "if"
+ WHITESPACE@5274..5275 " "
+ EXPR_APPLY@5275..5292
+ EXPR_INDEX@5275..5289
+ EXPR_VAR@5275..5278
+ NAME@5275..5278
+ IDENT@5275..5278 "std"
+ DOT@5278..5279 "."
+ NAME@5279..5289
+ IDENT@5279..5289 "isFunction"
+ ARGS_DESC@5289..5292
+ L_PAREN@5289..5290 "("
+ ARG@5290..5291
+ EXPR_VAR@5290..5291
+ NAME@5290..5291
+ IDENT@5290..5291 "v"
+ R_PAREN@5291..5292 ")"
+ WHITESPACE@5292..5293 " "
+ THEN_KW@5293..5297 "then"
+ WHITESPACE@5297..5304 "\n "
+ TRUE_EXPR@5304..5336
+ EXPR_ERROR@5304..5336
+ ERROR_KW@5304..5309 "error"
+ WHITESPACE@5309..5310 " "
+ EXPR_STRING@5310..5336
+ STRING_SINGLE@5310..5336 "'cannot manifest func ..."
+ WHITESPACE@5336..5341 "\n "
+ ELSE_KW@5341..5345 "else"
+ WHITESPACE@5345..5346 " "
+ FALSE_EXPR@5346..5513
+ EXPR_IF_THEN_ELSE@5346..5513
+ IF_KW@5346..5348 "if"
+ WHITESPACE@5348..5349 " "
+ EXPR_APPLY@5349..5364
+ EXPR_INDEX@5349..5361
+ EXPR_VAR@5349..5352
+ NAME@5349..5352
+ IDENT@5349..5352 "std"
+ DOT@5352..5353 "."
+ NAME@5353..5361
+ IDENT@5353..5361 "isNumber"
+ ARGS_DESC@5361..5364
+ L_PAREN@5361..5362 "("
+ ARG@5362..5363
+ EXPR_VAR@5362..5363
+ NAME@5362..5363
+ IDENT@5362..5363 "v"
+ R_PAREN@5363..5364 ")"
+ WHITESPACE@5364..5365 " "
+ THEN_KW@5365..5369 "then"
+ WHITESPACE@5369..5376 "\n "
+ TRUE_EXPR@5376..5391
+ EXPR_APPLY@5376..5391
+ EXPR_INDEX@5376..5388
+ EXPR_VAR@5376..5379
+ NAME@5376..5379
+ IDENT@5376..5379 "std"
+ DOT@5379..5380 "."
+ NAME@5380..5388
+ IDENT@5380..5388 "toString"
+ ARGS_DESC@5388..5391
+ L_PAREN@5388..5389 "("
+ ARG@5389..5390
+ EXPR_VAR@5389..5390
+ NAME@5389..5390
+ IDENT@5389..5390 "v"
+ R_PAREN@5390..5391 ")"
+ WHITESPACE@5391..5396 "\n "
+ ELSE_KW@5396..5400 "else"
+ WHITESPACE@5400..5401 " "
+ FALSE_EXPR@5401..5513
+ EXPR_IF_THEN_ELSE@5401..5513
+ IF_KW@5401..5403 "if"
+ WHITESPACE@5403..5404 " "
+ EXPR_BINARY@5404..5413
+ LHS_EXPR@5404..5405
+ EXPR_VAR@5404..5405
+ NAME@5404..5405
+ IDENT@5404..5405 "v"
+ WHITESPACE@5405..5406 " "
+ EQ@5406..5408 "=="
+ WHITESPACE@5408..5409 " "
+ EXPR_LITERAL@5409..5413
+ TRUE_KW@5409..5413 "true"
+ WHITESPACE@5413..5414 " "
+ THEN_KW@5414..5418 "then"
+ WHITESPACE@5418..5425 "\n "
+ TRUE_EXPR@5425..5431
+ EXPR_STRING@5425..5431
+ STRING_SINGLE@5425..5431 "'True'"
+ WHITESPACE@5431..5436 "\n "
+ ELSE_KW@5436..5440 "else"
+ WHITESPACE@5440..5441 " "
+ FALSE_EXPR@5441..5513
+ EXPR_IF_THEN_ELSE@5441..5513
+ IF_KW@5441..5443 "if"
+ WHITESPACE@5443..5444 " "
+ EXPR_BINARY@5444..5454
+ LHS_EXPR@5444..5445
+ EXPR_VAR@5444..5445
+ NAME@5444..5445
+ IDENT@5444..5445 "v"
+ WHITESPACE@5445..5446 " "
+ EQ@5446..5448 "=="
+ WHITESPACE@5448..5449 " "
+ EXPR_LITERAL@5449..5454
+ FALSE_KW@5449..5454 "false"
+ WHITESPACE@5454..5455 " "
+ THEN_KW@5455..5459 "then"
+ WHITESPACE@5459..5466 "\n "
+ TRUE_EXPR@5466..5473
+ EXPR_STRING@5466..5473
+ STRING_SINGLE@5466..5473 "'False'"
+ WHITESPACE@5473..5478 "\n "
+ ELSE_KW@5478..5482 "else"
+ WHITESPACE@5482..5483 " "
+ FALSE_EXPR@5483..5513
+ EXPR_IF_THEN_ELSE@5483..5513
+ IF_KW@5483..5485 "if"
+ WHITESPACE@5485..5486 " "
+ EXPR_BINARY@5486..5495
+ LHS_EXPR@5486..5487
+ EXPR_VAR@5486..5487
+ NAME@5486..5487
+ IDENT@5486..5487 "v"
+ WHITESPACE@5487..5488 " "
+ EQ@5488..5490 "=="
+ WHITESPACE@5490..5491 " "
+ EXPR_LITERAL@5491..5495
+ NULL_KW@5491..5495 "null"
+ WHITESPACE@5495..5496 " "
+ THEN_KW@5496..5500 "then"
+ WHITESPACE@5500..5507 "\n "
+ TRUE_EXPR@5507..5513
+ EXPR_STRING@5507..5513
+ STRING_SINGLE@5507..5513 "'None'"
COMMA@5513..5514 ","
WHITESPACE@5514..5518 "\n\n "
- MEMBER_FIELD@5518..5673
- FIELD_METHOD@5518..5673
- FIELD_NAME_FIXED@5518..5536
- NAME@5518..5536
- IDENT@5518..5536 "manifestPythonVars"
- PARAMS_DESC@5536..5542
- L_PAREN@5536..5537 "("
- PARAM@5537..5541
- DESTRUCT_FULL@5537..5541
- NAME@5537..5541
- IDENT@5537..5541 "conf"
- R_PAREN@5541..5542 ")"
- COLONCOLON@5542..5544 "::"
- WHITESPACE@5544..5549 "\n "
- EXPR_LOCAL@5549..5673
- LOCAL_KW@5549..5554 "local"
- WHITESPACE@5554..5555 " "
- BIND_DESTRUCT@5555..5640
- DESTRUCT_FULL@5555..5559
- NAME@5555..5559
- IDENT@5555..5559 "vars"
- WHITESPACE@5559..5560 " "
- ASSIGN@5560..5561 "="
- WHITESPACE@5561..5562 " "
- EXPR_ARRAY_COMP@5562..5640
- L_BRACK@5562..5563 "["
- EXPR_BINARY@5563..5607
- LHS_EXPR@5563..5572
- EXPR_STRING@5563..5572
- STRING_SINGLE@5563..5572 "'%s = %s'"
- WHITESPACE@5572..5573 " "
- MODULO@5573..5574 "%"
- WHITESPACE@5574..5575 " "
- EXPR_ARRAY@5575..5607
- L_BRACK@5575..5576 "["
- EXPR_VAR@5576..5577
- NAME@5576..5577
- IDENT@5576..5577 "k"
- COMMA@5577..5578 ","
- WHITESPACE@5578..5579 " "
- EXPR_APPLY@5579..5606
- EXPR_INDEX@5579..5597
- EXPR_VAR@5579..5582
- NAME@5579..5582
- IDENT@5579..5582 "std"
- DOT@5582..5583 "."
- NAME@5583..5597
- IDENT@5583..5597 "manifestPython"
- ARGS_DESC@5597..5606
- L_PAREN@5597..5598 "("
- ARG@5598..5605
- EXPR_INDEX_EXPR@5598..5605
- LHS_EXPR@5598..5602
- EXPR_VAR@5598..5602
- NAME@5598..5602
- IDENT@5598..5602 "conf"
- L_BRACK@5602..5603 "["
- EXPR_VAR@5603..5604
- NAME@5603..5604
- IDENT@5603..5604 "k"
- R_BRACK@5604..5605 "]"
- R_PAREN@5605..5606 ")"
- R_BRACK@5606..5607 "]"
- WHITESPACE@5607..5608 " "
- FOR_SPEC@5608..5639
- FOR_KW@5608..5611 "for"
- WHITESPACE@5611..5612 " "
- NAME@5612..5613
- IDENT@5612..5613 "k"
- WHITESPACE@5613..5614 " "
- IN_KW@5614..5616 "in"
- WHITESPACE@5616..5617 " "
- EXPR_APPLY@5617..5639
- EXPR_INDEX@5617..5633
- EXPR_VAR@5617..5620
- NAME@5617..5620
- IDENT@5617..5620 "std"
- DOT@5620..5621 "."
- NAME@5621..5633
- IDENT@5621..5633 "objectFields"
- ARGS_DESC@5633..5639
- L_PAREN@5633..5634 "("
- ARG@5634..5638
- EXPR_VAR@5634..5638
- NAME@5634..5638
- IDENT@5634..5638 "conf"
- R_PAREN@5638..5639 ")"
- R_BRACK@5639..5640 "]"
- SEMI@5640..5641 ";"
- WHITESPACE@5641..5646 "\n "
- EXPR_APPLY@5646..5673
- EXPR_INDEX@5646..5654
- EXPR_VAR@5646..5649
- NAME@5646..5649
- IDENT@5646..5649 "std"
- DOT@5649..5650 "."
- NAME@5650..5654
- IDENT@5650..5654 "join"
- ARGS_DESC@5654..5673
- L_PAREN@5654..5655 "("
- ARG@5655..5659
- EXPR_STRING@5655..5659
- STRING_SINGLE@5655..5659 "'\\n'"
- COMMA@5659..5660 ","
- WHITESPACE@5660..5661 " "
- ARG@5661..5672
- EXPR_BINARY@5661..5672
- LHS_EXPR@5661..5665
- EXPR_VAR@5661..5665
- NAME@5661..5665
- IDENT@5661..5665 "vars"
- WHITESPACE@5665..5666 " "
- PLUS@5666..5667 "+"
- WHITESPACE@5667..5668 " "
- EXPR_ARRAY@5668..5672
- L_BRACK@5668..5669 "["
- EXPR_STRING@5669..5671
- STRING_SINGLE@5669..5671 "''"
- R_BRACK@5671..5672 "]"
- R_PAREN@5672..5673 ")"
+ MEMBER_FIELD_METHOD@5518..5673
+ FIELD_NAME_FIXED@5518..5536
+ NAME@5518..5536
+ IDENT@5518..5536 "manifestPythonVars"
+ PARAMS_DESC@5536..5542
+ L_PAREN@5536..5537 "("
+ PARAM@5537..5541
+ DESTRUCT_FULL@5537..5541
+ NAME@5537..5541
+ IDENT@5537..5541 "conf"
+ R_PAREN@5541..5542 ")"
+ COLONCOLON@5542..5544 "::"
+ WHITESPACE@5544..5549 "\n "
+ EXPR_LOCAL@5549..5673
+ LOCAL_KW@5549..5554 "local"
+ WHITESPACE@5554..5555 " "
+ BIND_DESTRUCT@5555..5640
+ DESTRUCT_FULL@5555..5559
+ NAME@5555..5559
+ IDENT@5555..5559 "vars"
+ WHITESPACE@5559..5560 " "
+ ASSIGN@5560..5561 "="
+ WHITESPACE@5561..5562 " "
+ EXPR_ARRAY_COMP@5562..5640
+ L_BRACK@5562..5563 "["
+ EXPR_BINARY@5563..5607
+ LHS_EXPR@5563..5572
+ EXPR_STRING@5563..5572
+ STRING_SINGLE@5563..5572 "'%s = %s'"
+ WHITESPACE@5572..5573 " "
+ MODULO@5573..5574 "%"
+ WHITESPACE@5574..5575 " "
+ EXPR_ARRAY@5575..5607
+ L_BRACK@5575..5576 "["
+ EXPR_VAR@5576..5577
+ NAME@5576..5577
+ IDENT@5576..5577 "k"
+ COMMA@5577..5578 ","
+ WHITESPACE@5578..5579 " "
+ EXPR_APPLY@5579..5606
+ EXPR_INDEX@5579..5597
+ EXPR_VAR@5579..5582
+ NAME@5579..5582
+ IDENT@5579..5582 "std"
+ DOT@5582..5583 "."
+ NAME@5583..5597
+ IDENT@5583..5597 "manifestPython"
+ ARGS_DESC@5597..5606
+ L_PAREN@5597..5598 "("
+ ARG@5598..5605
+ EXPR_INDEX_EXPR@5598..5605
+ LHS_EXPR@5598..5602
+ EXPR_VAR@5598..5602
+ NAME@5598..5602
+ IDENT@5598..5602 "conf"
+ L_BRACK@5602..5603 "["
+ EXPR_VAR@5603..5604
+ NAME@5603..5604
+ IDENT@5603..5604 "k"
+ R_BRACK@5604..5605 "]"
+ R_PAREN@5605..5606 ")"
+ R_BRACK@5606..5607 "]"
+ WHITESPACE@5607..5608 " "
+ FOR_SPEC@5608..5639
+ FOR_KW@5608..5611 "for"
+ WHITESPACE@5611..5612 " "
+ NAME@5612..5613
+ IDENT@5612..5613 "k"
+ WHITESPACE@5613..5614 " "
+ IN_KW@5614..5616 "in"
+ WHITESPACE@5616..5617 " "
+ EXPR_APPLY@5617..5639
+ EXPR_INDEX@5617..5633
+ EXPR_VAR@5617..5620
+ NAME@5617..5620
+ IDENT@5617..5620 "std"
+ DOT@5620..5621 "."
+ NAME@5621..5633
+ IDENT@5621..5633 "objectFields"
+ ARGS_DESC@5633..5639
+ L_PAREN@5633..5634 "("
+ ARG@5634..5638
+ EXPR_VAR@5634..5638
+ NAME@5634..5638
+ IDENT@5634..5638 "conf"
+ R_PAREN@5638..5639 ")"
+ R_BRACK@5639..5640 "]"
+ SEMI@5640..5641 ";"
+ WHITESPACE@5641..5646 "\n "
+ EXPR_APPLY@5646..5673
+ EXPR_INDEX@5646..5654
+ EXPR_VAR@5646..5649
+ NAME@5646..5649
+ IDENT@5646..5649 "std"
+ DOT@5649..5650 "."
+ NAME@5650..5654
+ IDENT@5650..5654 "join"
+ ARGS_DESC@5654..5673
+ L_PAREN@5654..5655 "("
+ ARG@5655..5659
+ EXPR_STRING@5655..5659
+ STRING_SINGLE@5655..5659 "'\\n'"
+ COMMA@5659..5660 ","
+ WHITESPACE@5660..5661 " "
+ ARG@5661..5672
+ EXPR_BINARY@5661..5672
+ LHS_EXPR@5661..5665
+ EXPR_VAR@5661..5665
+ NAME@5661..5665
+ IDENT@5661..5665 "vars"
+ WHITESPACE@5665..5666 " "
+ PLUS@5666..5667 "+"
+ WHITESPACE@5667..5668 " "
+ EXPR_ARRAY@5668..5672
+ L_BRACK@5668..5669 "["
+ EXPR_STRING@5669..5671
+ STRING_SINGLE@5669..5671 "''"
+ R_BRACK@5671..5672 "]"
+ R_PAREN@5672..5673 ")"
COMMA@5673..5674 ","
WHITESPACE@5674..5678 "\n\n "
- MEMBER_FIELD@5678..6345
- FIELD_METHOD@5678..6345
- FIELD_NAME_FIXED@5678..5695
- NAME@5678..5695
- IDENT@5678..5695 "manifestXmlJsonml"
- PARAMS_DESC@5695..5702
- L_PAREN@5695..5696 "("
- PARAM@5696..5701
- DESTRUCT_FULL@5696..5701
- NAME@5696..5701
- IDENT@5696..5701 "value"
- R_PAREN@5701..5702 ")"
- COLONCOLON@5702..5704 "::"
- WHITESPACE@5704..5709 "\n "
- EXPR_IF_THEN_ELSE@5709..6345
- IF_KW@5709..5711 "if"
- WHITESPACE@5711..5712 " "
- EXPR_UNARY@5712..5731
- NOT@5712..5713 "!"
- EXPR_APPLY@5713..5731
- EXPR_INDEX@5713..5724
- EXPR_VAR@5713..5716
- NAME@5713..5716
- IDENT@5713..5716 "std"
- DOT@5716..5717 "."
- NAME@5717..5724
- IDENT@5717..5724 "isArray"
- ARGS_DESC@5724..5731
- L_PAREN@5724..5725 "("
- ARG@5725..5730
- EXPR_VAR@5725..5730
- NAME@5725..5730
- IDENT@5725..5730 "value"
- R_PAREN@5730..5731 ")"
- WHITESPACE@5731..5732 " "
- THEN_KW@5732..5736 "then"
- WHITESPACE@5736..5743 "\n "
- TRUE_EXPR@5743..5811
- EXPR_ERROR@5743..5811
- ERROR_KW@5743..5748 "error"
- WHITESPACE@5748..5749 " "
- EXPR_BINARY@5749..5811
- LHS_EXPR@5749..5793
- EXPR_STRING@5749..5793
- STRING_SINGLE@5749..5793 "'Expected a JSONML va ..."
- WHITESPACE@5793..5794 " "
- MODULO@5794..5795 "%"
- WHITESPACE@5795..5796 " "
- EXPR_APPLY@5796..5811
- EXPR_INDEX@5796..5804
- EXPR_VAR@5796..5799
- NAME@5796..5799
- IDENT@5796..5799 "std"
- DOT@5799..5800 "."
- NAME@5800..5804
- IDENT@5800..5804 "type"
- ARGS_DESC@5804..5811
- L_PAREN@5804..5805 "("
- ARG@5805..5810
- EXPR_VAR@5805..5810
- NAME@5805..5810
- IDENT@5805..5810 "value"
- R_PAREN@5810..5811 ")"
- WHITESPACE@5811..5816 "\n "
- ELSE_KW@5816..5820 "else"
- WHITESPACE@5820..5827 "\n "
- FALSE_EXPR@5827..6345
- EXPR_LOCAL@5827..6345
- LOCAL_KW@5827..5832 "local"
- WHITESPACE@5832..5833 " "
- BIND_FUNCTION@5833..6326
- NAME@5833..5836
- IDENT@5833..5836 "aux"
- PARAMS_DESC@5836..5839
- L_PAREN@5836..5837 "("
- PARAM@5837..5838
- DESTRUCT_FULL@5837..5838
- NAME@5837..5838
- IDENT@5837..5838 "v"
- R_PAREN@5838..5839 ")"
- WHITESPACE@5839..5840 " "
- ASSIGN@5840..5841 "="
- WHITESPACE@5841..5850 "\n "
- EXPR_IF_THEN_ELSE@5850..6326
- IF_KW@5850..5852 "if"
- WHITESPACE@5852..5853 " "
- EXPR_APPLY@5853..5868
- EXPR_INDEX@5853..5865
- EXPR_VAR@5853..5856
- NAME@5853..5856
- IDENT@5853..5856 "std"
- DOT@5856..5857 "."
- NAME@5857..5865
- IDENT@5857..5865 "isString"
- ARGS_DESC@5865..5868
- L_PAREN@5865..5866 "("
- ARG@5866..5867
- EXPR_VAR@5866..5867
- NAME@5866..5867
- IDENT@5866..5867 "v"
- R_PAREN@5867..5868 ")"
- WHITESPACE@5868..5869 " "
- THEN_KW@5869..5873 "then"
- WHITESPACE@5873..5884 "\n "
- TRUE_EXPR@5884..5885
- EXPR_VAR@5884..5885
- NAME@5884..5885
- IDENT@5884..5885 "v"
- WHITESPACE@5885..5894 "\n "
- ELSE_KW@5894..5898 "else"
- WHITESPACE@5898..5909 "\n "
- FALSE_EXPR@5909..6326
- EXPR_LOCAL@5909..6326
- LOCAL_KW@5909..5914 "local"
- WHITESPACE@5914..5915 " "
- BIND_DESTRUCT@5915..5925
- DESTRUCT_FULL@5915..5918
- NAME@5915..5918
- IDENT@5915..5918 "tag"
- WHITESPACE@5918..5919 " "
- ASSIGN@5919..5920 "="
- WHITESPACE@5920..5921 " "
- EXPR_INDEX_EXPR@5921..5925
- LHS_EXPR@5921..5922
- EXPR_VAR@5921..5922
- NAME@5921..5922
- IDENT@5921..5922 "v"
- L_BRACK@5922..5923 "["
- EXPR_NUMBER@5923..5924
- FLOAT@5923..5924 "0"
- R_BRACK@5924..5925 "]"
- SEMI@5925..5926 ";"
- WHITESPACE@5926..5937 "\n "
- EXPR_LOCAL@5937..6326
- LOCAL_KW@5937..5942 "local"
- WHITESPACE@5942..5943 " "
- BIND_DESTRUCT@5943..5994
- DESTRUCT_FULL@5943..5952
- NAME@5943..5952
- IDENT@5943..5952 "has_attrs"
- WHITESPACE@5952..5953 " "
- ASSIGN@5953..5954 "="
- WHITESPACE@5954..5955 " "
- EXPR_BINARY@5955..5994
- LHS_EXPR@5955..5972
- EXPR_BINARY@5955..5972
- LHS_EXPR@5955..5968
- EXPR_APPLY@5955..5968
- EXPR_INDEX@5955..5965
- EXPR_VAR@5955..5958
- NAME@5955..5958
- IDENT@5955..5958 "std"
- DOT@5958..5959 "."
- NAME@5959..5965
- IDENT@5959..5965 "length"
- ARGS_DESC@5965..5968
- L_PAREN@5965..5966 "("
- ARG@5966..5967
- EXPR_VAR@5966..5967
- NAME@5966..5967
- IDENT@5966..5967 "v"
- R_PAREN@5967..5968 ")"
- WHITESPACE@5968..5969 " "
- GT@5969..5970 ">"
- WHITESPACE@5970..5971 " "
- EXPR_NUMBER@5971..5972
- FLOAT@5971..5972 "1"
- WHITESPACE@5972..5973 " "
- AND@5973..5975 "&&"
- WHITESPACE@5975..5976 " "
- EXPR_APPLY@5976..5994
- EXPR_INDEX@5976..5988
- EXPR_VAR@5976..5979
- NAME@5976..5979
- IDENT@5976..5979 "std"
- DOT@5979..5980 "."
- NAME@5980..5988
- IDENT@5980..5988 "isObject"
- ARGS_DESC@5988..5994
- L_PAREN@5988..5989 "("
- ARG@5989..5993
- EXPR_INDEX_EXPR@5989..5993
- LHS_EXPR@5989..5990
- EXPR_VAR@5989..5990
- NAME@5989..5990
- IDENT@5989..5990 "v"
- L_BRACK@5990..5991 "["
- EXPR_NUMBER@5991..5992
- FLOAT@5991..5992 "1"
- R_BRACK@5992..5993 "]"
- R_PAREN@5993..5994 ")"
- SEMI@5994..5995 ";"
- WHITESPACE@5995..6006 "\n "
- EXPR_LOCAL@6006..6326
- LOCAL_KW@6006..6011 "local"
- WHITESPACE@6011..6012 " "
- BIND_DESTRUCT@6012..6050
- DESTRUCT_FULL@6012..6017
- NAME@6012..6017
- IDENT@6012..6017 "attrs"
- WHITESPACE@6017..6018 " "
- ASSIGN@6018..6019 "="
- WHITESPACE@6019..6020 " "
- EXPR_IF_THEN_ELSE@6020..6050
- IF_KW@6020..6022 "if"
- WHITESPACE@6022..6023 " "
- EXPR_VAR@6023..6032
- NAME@6023..6032
- IDENT@6023..6032 "has_attrs"
- WHITESPACE@6032..6033 " "
- THEN_KW@6033..6037 "then"
- WHITESPACE@6037..6038 " "
- TRUE_EXPR@6038..6042
- EXPR_INDEX_EXPR@6038..6042
- LHS_EXPR@6038..6039
- EXPR_VAR@6038..6039
- NAME@6038..6039
- IDENT@6038..6039 "v"
- L_BRACK@6039..6040 "["
- EXPR_NUMBER@6040..6041
- FLOAT@6040..6041 "1"
- R_BRACK@6041..6042 "]"
- WHITESPACE@6042..6043 " "
- ELSE_KW@6043..6047 "else"
- WHITESPACE@6047..6048 " "
- FALSE_EXPR@6048..6050
- EXPR_OBJECT@6048..6050
- OBJ_BODY_MEMBER_LIST@6048..6050
- L_BRACE@6048..6049 "{"
- R_BRACE@6049..6050 "}"
- SEMI@6050..6051 ";"
- WHITESPACE@6051..6062 "\n "
- EXPR_LOCAL@6062..6326
- LOCAL_KW@6062..6067 "local"
- WHITESPACE@6067..6068 " "
- BIND_DESTRUCT@6068..6113
- DESTRUCT_FULL@6068..6076
- NAME@6068..6076
- IDENT@6068..6076 "children"
- WHITESPACE@6076..6077 " "
- ASSIGN@6077..6078 "="
- WHITESPACE@6078..6079 " "
- EXPR_IF_THEN_ELSE@6079..6113
- IF_KW@6079..6081 "if"
- WHITESPACE@6081..6082 " "
- EXPR_VAR@6082..6091
- NAME@6082..6091
- IDENT@6082..6091 "has_attrs"
- WHITESPACE@6091..6092 " "
- THEN_KW@6092..6096 "then"
- WHITESPACE@6096..6097 " "
- TRUE_EXPR@6097..6102
- EXPR_SLICE@6097..6102
- EXPR_VAR@6097..6098
- NAME@6097..6098
- IDENT@6097..6098 "v"
- SLICE_DESC@6098..6102
- L_BRACK@6098..6099 "["
- EXPR_NUMBER@6099..6100
- FLOAT@6099..6100 "2"
- COLON@6100..6101 ":"
- R_BRACK@6101..6102 "]"
- WHITESPACE@6102..6103 " "
- ELSE_KW@6103..6107 "else"
- WHITESPACE@6107..6108 " "
- FALSE_EXPR@6108..6113
- EXPR_SLICE@6108..6113
- EXPR_VAR@6108..6109
- NAME@6108..6109
- IDENT@6108..6109 "v"
- SLICE_DESC@6109..6113
- L_BRACK@6109..6110 "["
- EXPR_NUMBER@6110..6111
- FLOAT@6110..6111 "1"
- COLON@6111..6112 ":"
- R_BRACK@6112..6113 "]"
- SEMI@6113..6114 ";"
- WHITESPACE@6114..6125 "\n "
- EXPR_LOCAL@6125..6326
- LOCAL_KW@6125..6130 "local"
- WHITESPACE@6130..6131 " "
- BIND_DESTRUCT@6131..6230
- DESTRUCT_FULL@6131..6140
- NAME@6131..6140
- IDENT@6131..6140 "attrs_str"
- WHITESPACE@6140..6141 " "
- ASSIGN@6141..6142 "="
- WHITESPACE@6142..6155 "\n "
- EXPR_APPLY@6155..6230
- EXPR_INDEX@6155..6163
- EXPR_VAR@6155..6158
- NAME@6155..6158
- IDENT@6155..6158 "std"
- DOT@6158..6159 "."
- NAME@6159..6163
- IDENT@6159..6163 "join"
- ARGS_DESC@6163..6230
- L_PAREN@6163..6164 "("
- ARG@6164..6166
- EXPR_STRING@6164..6166
- STRING_SINGLE@6164..6166 "''"
- COMMA@6166..6167 ","
- WHITESPACE@6167..6168 " "
- ARG@6168..6229
- EXPR_ARRAY_COMP@6168..6229
- L_BRACK@6168..6169 "["
- EXPR_BINARY@6169..6195
- LHS_EXPR@6169..6179
- EXPR_STRING@6169..6179
- STRING_SINGLE@6169..6179 "' %s=\"%s\"'"
- WHITESPACE@6179..6180 " "
- MODULO@6180..6181 "%"
- WHITESPACE@6181..6182 " "
- EXPR_ARRAY@6182..6195
- L_BRACK@6182..6183 "["
- EXPR_VAR@6183..6184
- NAME@6183..6184
- IDENT@6183..6184 "k"
- COMMA@6184..6185 ","
- WHITESPACE@6185..6186 " "
- EXPR_INDEX_EXPR@6186..6194
- LHS_EXPR@6186..6191
- EXPR_VAR@6186..6191
- NAME@6186..6191
- IDENT@6186..6191 "attrs"
- L_BRACK@6191..6192 "["
- EXPR_VAR@6192..6193
- NAME@6192..6193
- IDENT@6192..6193 "k"
- R_BRACK@6193..6194 "]"
- R_BRACK@6194..6195 "]"
- WHITESPACE@6195..6196 " "
- FOR_SPEC@6196..6228
- FOR_KW@6196..6199 "for"
- WHITESPACE@6199..6200 " "
- NAME@6200..6201
- IDENT@6200..6201 "k"
- WHITESPACE@6201..6202 " "
- IN_KW@6202..6204 "in"
- WHITESPACE@6204..6205 " "
- EXPR_APPLY@6205..6228
- EXPR_INDEX@6205..6221
- EXPR_VAR@6205..6208
- NAME@6205..6208
- IDENT@6205..6208 "std"
- DOT@6208..6209 "."
- NAME@6209..6221
- IDENT@6209..6221 "objectFields"
- ARGS_DESC@6221..6228
- L_PAREN@6221..6222 "("
- ARG@6222..6227
- EXPR_VAR@6222..6227
- NAME@6222..6227
- IDENT@6222..6227 "attrs"
- R_PAREN@6227..6228 ")"
- R_BRACK@6228..6229 "]"
- R_PAREN@6229..6230 ")"
- SEMI@6230..6231 ";"
- WHITESPACE@6231..6242 "\n "
- EXPR_APPLY@6242..6326
- EXPR_INDEX@6242..6254
- EXPR_VAR@6242..6245
- NAME@6242..6245
- IDENT@6242..6245 "std"
- DOT@6245..6246 "."
- NAME@6246..6254
- IDENT@6246..6254 "deepJoin"
- ARGS_DESC@6254..6326
- L_PAREN@6254..6255 "("
- ARG@6255..6325
- EXPR_ARRAY@6255..6325
- L_BRACK@6255..6256 "["
- EXPR_STRING@6256..6259
- STRING_SINGLE@6256..6259 "'<'"
- COMMA@6259..6260 ","
- WHITESPACE@6260..6261 " "
- EXPR_VAR@6261..6264
- NAME@6261..6264
- IDENT@6261..6264 "tag"
- COMMA@6264..6265 ","
- WHITESPACE@6265..6266 " "
- EXPR_VAR@6266..6275
- NAME@6266..6275
- IDENT@6266..6275 "attrs_str"
- COMMA@6275..6276 ","
- WHITESPACE@6276..6277 " "
- EXPR_STRING@6277..6280
- STRING_SINGLE@6277..6280 "'>'"
- COMMA@6280..6281 ","
- WHITESPACE@6281..6282 " "
- EXPR_ARRAY_COMP@6282..6308
- L_BRACK@6282..6283 "["
- EXPR_APPLY@6283..6289
- EXPR_VAR@6283..6286
- NAME@6283..6286
- IDENT@6283..6286 "aux"
- ARGS_DESC@6286..6289
- L_PAREN@6286..6287 "("
- ARG@6287..6288
- EXPR_VAR@6287..6288
- NAME@6287..6288
- IDENT@6287..6288 "x"
- R_PAREN@6288..6289 ")"
- WHITESPACE@6289..6290 " "
- FOR_SPEC@6290..6307
- FOR_KW@6290..6293 "for"
- WHITESPACE@6293..6294 " "
- NAME@6294..6295
- IDENT@6294..6295 "x"
- WHITESPACE@6295..6296 " "
- IN_KW@6296..6298 "in"
- WHITESPACE@6298..6299 " "
- EXPR_VAR@6299..6307
- NAME@6299..6307
- IDENT@6299..6307 "children"
- R_BRACK@6307..6308 "]"
- COMMA@6308..6309 ","
- WHITESPACE@6309..6310 " "
- EXPR_STRING@6310..6314
- STRING_SINGLE@6310..6314 "'</'"
- COMMA@6314..6315 ","
- WHITESPACE@6315..6316 " "
- EXPR_VAR@6316..6319
- NAME@6316..6319
- IDENT@6316..6319 "tag"
- COMMA@6319..6320 ","
- WHITESPACE@6320..6321 " "
- EXPR_STRING@6321..6324
- STRING_SINGLE@6321..6324 "'>'"
- R_BRACK@6324..6325 "]"
- R_PAREN@6325..6326 ")"
- SEMI@6326..6327 ";"
- WHITESPACE@6327..6335 "\n\n "
- EXPR_APPLY@6335..6345
- EXPR_VAR@6335..6338
- NAME@6335..6338
- IDENT@6335..6338 "aux"
- ARGS_DESC@6338..6345
- L_PAREN@6338..6339 "("
- ARG@6339..6344
- EXPR_VAR@6339..6344
- NAME@6339..6344
- IDENT@6339..6344 "value"
- R_PAREN@6344..6345 ")"
+ MEMBER_FIELD_METHOD@5678..6345
+ FIELD_NAME_FIXED@5678..5695
+ NAME@5678..5695
+ IDENT@5678..5695 "manifestXmlJsonml"
+ PARAMS_DESC@5695..5702
+ L_PAREN@5695..5696 "("
+ PARAM@5696..5701
+ DESTRUCT_FULL@5696..5701
+ NAME@5696..5701
+ IDENT@5696..5701 "value"
+ R_PAREN@5701..5702 ")"
+ COLONCOLON@5702..5704 "::"
+ WHITESPACE@5704..5709 "\n "
+ EXPR_IF_THEN_ELSE@5709..6345
+ IF_KW@5709..5711 "if"
+ WHITESPACE@5711..5712 " "
+ EXPR_UNARY@5712..5731
+ NOT@5712..5713 "!"
+ EXPR_APPLY@5713..5731
+ EXPR_INDEX@5713..5724
+ EXPR_VAR@5713..5716
+ NAME@5713..5716
+ IDENT@5713..5716 "std"
+ DOT@5716..5717 "."
+ NAME@5717..5724
+ IDENT@5717..5724 "isArray"
+ ARGS_DESC@5724..5731
+ L_PAREN@5724..5725 "("
+ ARG@5725..5730
+ EXPR_VAR@5725..5730
+ NAME@5725..5730
+ IDENT@5725..5730 "value"
+ R_PAREN@5730..5731 ")"
+ WHITESPACE@5731..5732 " "
+ THEN_KW@5732..5736 "then"
+ WHITESPACE@5736..5743 "\n "
+ TRUE_EXPR@5743..5811
+ EXPR_ERROR@5743..5811
+ ERROR_KW@5743..5748 "error"
+ WHITESPACE@5748..5749 " "
+ EXPR_BINARY@5749..5811
+ LHS_EXPR@5749..5793
+ EXPR_STRING@5749..5793
+ STRING_SINGLE@5749..5793 "'Expected a JSONML va ..."
+ WHITESPACE@5793..5794 " "
+ MODULO@5794..5795 "%"
+ WHITESPACE@5795..5796 " "
+ EXPR_APPLY@5796..5811
+ EXPR_INDEX@5796..5804
+ EXPR_VAR@5796..5799
+ NAME@5796..5799
+ IDENT@5796..5799 "std"
+ DOT@5799..5800 "."
+ NAME@5800..5804
+ IDENT@5800..5804 "type"
+ ARGS_DESC@5804..5811
+ L_PAREN@5804..5805 "("
+ ARG@5805..5810
+ EXPR_VAR@5805..5810
+ NAME@5805..5810
+ IDENT@5805..5810 "value"
+ R_PAREN@5810..5811 ")"
+ WHITESPACE@5811..5816 "\n "
+ ELSE_KW@5816..5820 "else"
+ WHITESPACE@5820..5827 "\n "
+ FALSE_EXPR@5827..6345
+ EXPR_LOCAL@5827..6345
+ LOCAL_KW@5827..5832 "local"
+ WHITESPACE@5832..5833 " "
+ BIND_FUNCTION@5833..6326
+ NAME@5833..5836
+ IDENT@5833..5836 "aux"
+ PARAMS_DESC@5836..5839
+ L_PAREN@5836..5837 "("
+ PARAM@5837..5838
+ DESTRUCT_FULL@5837..5838
+ NAME@5837..5838
+ IDENT@5837..5838 "v"
+ R_PAREN@5838..5839 ")"
+ WHITESPACE@5839..5840 " "
+ ASSIGN@5840..5841 "="
+ WHITESPACE@5841..5850 "\n "
+ EXPR_IF_THEN_ELSE@5850..6326
+ IF_KW@5850..5852 "if"
+ WHITESPACE@5852..5853 " "
+ EXPR_APPLY@5853..5868
+ EXPR_INDEX@5853..5865
+ EXPR_VAR@5853..5856
+ NAME@5853..5856
+ IDENT@5853..5856 "std"
+ DOT@5856..5857 "."
+ NAME@5857..5865
+ IDENT@5857..5865 "isString"
+ ARGS_DESC@5865..5868
+ L_PAREN@5865..5866 "("
+ ARG@5866..5867
+ EXPR_VAR@5866..5867
+ NAME@5866..5867
+ IDENT@5866..5867 "v"
+ R_PAREN@5867..5868 ")"
+ WHITESPACE@5868..5869 " "
+ THEN_KW@5869..5873 "then"
+ WHITESPACE@5873..5884 "\n "
+ TRUE_EXPR@5884..5885
+ EXPR_VAR@5884..5885
+ NAME@5884..5885
+ IDENT@5884..5885 "v"
+ WHITESPACE@5885..5894 "\n "
+ ELSE_KW@5894..5898 "else"
+ WHITESPACE@5898..5909 "\n "
+ FALSE_EXPR@5909..6326
+ EXPR_LOCAL@5909..6326
+ LOCAL_KW@5909..5914 "local"
+ WHITESPACE@5914..5915 " "
+ BIND_DESTRUCT@5915..5925
+ DESTRUCT_FULL@5915..5918
+ NAME@5915..5918
+ IDENT@5915..5918 "tag"
+ WHITESPACE@5918..5919 " "
+ ASSIGN@5919..5920 "="
+ WHITESPACE@5920..5921 " "
+ EXPR_INDEX_EXPR@5921..5925
+ LHS_EXPR@5921..5922
+ EXPR_VAR@5921..5922
+ NAME@5921..5922
+ IDENT@5921..5922 "v"
+ L_BRACK@5922..5923 "["
+ EXPR_NUMBER@5923..5924
+ FLOAT@5923..5924 "0"
+ R_BRACK@5924..5925 "]"
+ SEMI@5925..5926 ";"
+ WHITESPACE@5926..5937 "\n "
+ EXPR_LOCAL@5937..6326
+ LOCAL_KW@5937..5942 "local"
+ WHITESPACE@5942..5943 " "
+ BIND_DESTRUCT@5943..5994
+ DESTRUCT_FULL@5943..5952
+ NAME@5943..5952
+ IDENT@5943..5952 "has_attrs"
+ WHITESPACE@5952..5953 " "
+ ASSIGN@5953..5954 "="
+ WHITESPACE@5954..5955 " "
+ EXPR_BINARY@5955..5994
+ LHS_EXPR@5955..5972
+ EXPR_BINARY@5955..5972
+ LHS_EXPR@5955..5968
+ EXPR_APPLY@5955..5968
+ EXPR_INDEX@5955..5965
+ EXPR_VAR@5955..5958
+ NAME@5955..5958
+ IDENT@5955..5958 "std"
+ DOT@5958..5959 "."
+ NAME@5959..5965
+ IDENT@5959..5965 "length"
+ ARGS_DESC@5965..5968
+ L_PAREN@5965..5966 "("
+ ARG@5966..5967
+ EXPR_VAR@5966..5967
+ NAME@5966..5967
+ IDENT@5966..5967 "v"
+ R_PAREN@5967..5968 ")"
+ WHITESPACE@5968..5969 " "
+ GT@5969..5970 ">"
+ WHITESPACE@5970..5971 " "
+ EXPR_NUMBER@5971..5972
+ FLOAT@5971..5972 "1"
+ WHITESPACE@5972..5973 " "
+ AND@5973..5975 "&&"
+ WHITESPACE@5975..5976 " "
+ EXPR_APPLY@5976..5994
+ EXPR_INDEX@5976..5988
+ EXPR_VAR@5976..5979
+ NAME@5976..5979
+ IDENT@5976..5979 "std"
+ DOT@5979..5980 "."
+ NAME@5980..5988
+ IDENT@5980..5988 "isObject"
+ ARGS_DESC@5988..5994
+ L_PAREN@5988..5989 "("
+ ARG@5989..5993
+ EXPR_INDEX_EXPR@5989..5993
+ LHS_EXPR@5989..5990
+ EXPR_VAR@5989..5990
+ NAME@5989..5990
+ IDENT@5989..5990 "v"
+ L_BRACK@5990..5991 "["
+ EXPR_NUMBER@5991..5992
+ FLOAT@5991..5992 "1"
+ R_BRACK@5992..5993 "]"
+ R_PAREN@5993..5994 ")"
+ SEMI@5994..5995 ";"
+ WHITESPACE@5995..6006 "\n "
+ EXPR_LOCAL@6006..6326
+ LOCAL_KW@6006..6011 "local"
+ WHITESPACE@6011..6012 " "
+ BIND_DESTRUCT@6012..6050
+ DESTRUCT_FULL@6012..6017
+ NAME@6012..6017
+ IDENT@6012..6017 "attrs"
+ WHITESPACE@6017..6018 " "
+ ASSIGN@6018..6019 "="
+ WHITESPACE@6019..6020 " "
+ EXPR_IF_THEN_ELSE@6020..6050
+ IF_KW@6020..6022 "if"
+ WHITESPACE@6022..6023 " "
+ EXPR_VAR@6023..6032
+ NAME@6023..6032
+ IDENT@6023..6032 "has_attrs"
+ WHITESPACE@6032..6033 " "
+ THEN_KW@6033..6037 "then"
+ WHITESPACE@6037..6038 " "
+ TRUE_EXPR@6038..6042
+ EXPR_INDEX_EXPR@6038..6042
+ LHS_EXPR@6038..6039
+ EXPR_VAR@6038..6039
+ NAME@6038..6039
+ IDENT@6038..6039 "v"
+ L_BRACK@6039..6040 "["
+ EXPR_NUMBER@6040..6041
+ FLOAT@6040..6041 "1"
+ R_BRACK@6041..6042 "]"
+ WHITESPACE@6042..6043 " "
+ ELSE_KW@6043..6047 "else"
+ WHITESPACE@6047..6048 " "
+ FALSE_EXPR@6048..6050
+ EXPR_OBJECT@6048..6050
+ OBJ_BODY_MEMBER_LIST@6048..6050
+ L_BRACE@6048..6049 "{"
+ R_BRACE@6049..6050 "}"
+ SEMI@6050..6051 ";"
+ WHITESPACE@6051..6062 "\n "
+ EXPR_LOCAL@6062..6326
+ LOCAL_KW@6062..6067 "local"
+ WHITESPACE@6067..6068 " "
+ BIND_DESTRUCT@6068..6113
+ DESTRUCT_FULL@6068..6076
+ NAME@6068..6076
+ IDENT@6068..6076 "children"
+ WHITESPACE@6076..6077 " "
+ ASSIGN@6077..6078 "="
+ WHITESPACE@6078..6079 " "
+ EXPR_IF_THEN_ELSE@6079..6113
+ IF_KW@6079..6081 "if"
+ WHITESPACE@6081..6082 " "
+ EXPR_VAR@6082..6091
+ NAME@6082..6091
+ IDENT@6082..6091 "has_attrs"
+ WHITESPACE@6091..6092 " "
+ THEN_KW@6092..6096 "then"
+ WHITESPACE@6096..6097 " "
+ TRUE_EXPR@6097..6102
+ EXPR_SLICE@6097..6102
+ EXPR_VAR@6097..6098
+ NAME@6097..6098
+ IDENT@6097..6098 "v"
+ SLICE_DESC@6098..6102
+ L_BRACK@6098..6099 "["
+ EXPR_NUMBER@6099..6100
+ FLOAT@6099..6100 "2"
+ COLON@6100..6101 ":"
+ R_BRACK@6101..6102 "]"
+ WHITESPACE@6102..6103 " "
+ ELSE_KW@6103..6107 "else"
+ WHITESPACE@6107..6108 " "
+ FALSE_EXPR@6108..6113
+ EXPR_SLICE@6108..6113
+ EXPR_VAR@6108..6109
+ NAME@6108..6109
+ IDENT@6108..6109 "v"
+ SLICE_DESC@6109..6113
+ L_BRACK@6109..6110 "["
+ EXPR_NUMBER@6110..6111
+ FLOAT@6110..6111 "1"
+ COLON@6111..6112 ":"
+ R_BRACK@6112..6113 "]"
+ SEMI@6113..6114 ";"
+ WHITESPACE@6114..6125 "\n "
+ EXPR_LOCAL@6125..6326
+ LOCAL_KW@6125..6130 "local"
+ WHITESPACE@6130..6131 " "
+ BIND_DESTRUCT@6131..6230
+ DESTRUCT_FULL@6131..6140
+ NAME@6131..6140
+ IDENT@6131..6140 "attrs_str"
+ WHITESPACE@6140..6141 " "
+ ASSIGN@6141..6142 "="
+ WHITESPACE@6142..6155 "\n "
+ EXPR_APPLY@6155..6230
+ EXPR_INDEX@6155..6163
+ EXPR_VAR@6155..6158
+ NAME@6155..6158
+ IDENT@6155..6158 "std"
+ DOT@6158..6159 "."
+ NAME@6159..6163
+ IDENT@6159..6163 "join"
+ ARGS_DESC@6163..6230
+ L_PAREN@6163..6164 "("
+ ARG@6164..6166
+ EXPR_STRING@6164..6166
+ STRING_SINGLE@6164..6166 "''"
+ COMMA@6166..6167 ","
+ WHITESPACE@6167..6168 " "
+ ARG@6168..6229
+ EXPR_ARRAY_COMP@6168..6229
+ L_BRACK@6168..6169 "["
+ EXPR_BINARY@6169..6195
+ LHS_EXPR@6169..6179
+ EXPR_STRING@6169..6179
+ STRING_SINGLE@6169..6179 "' %s=\"%s\"'"
+ WHITESPACE@6179..6180 " "
+ MODULO@6180..6181 "%"
+ WHITESPACE@6181..6182 " "
+ EXPR_ARRAY@6182..6195
+ L_BRACK@6182..6183 "["
+ EXPR_VAR@6183..6184
+ NAME@6183..6184
+ IDENT@6183..6184 "k"
+ COMMA@6184..6185 ","
+ WHITESPACE@6185..6186 " "
+ EXPR_INDEX_EXPR@6186..6194
+ LHS_EXPR@6186..6191
+ EXPR_VAR@6186..6191
+ NAME@6186..6191
+ IDENT@6186..6191 "attrs"
+ L_BRACK@6191..6192 "["
+ EXPR_VAR@6192..6193
+ NAME@6192..6193
+ IDENT@6192..6193 "k"
+ R_BRACK@6193..6194 "]"
+ R_BRACK@6194..6195 "]"
+ WHITESPACE@6195..6196 " "
+ FOR_SPEC@6196..6228
+ FOR_KW@6196..6199 "for"
+ WHITESPACE@6199..6200 " "
+ NAME@6200..6201
+ IDENT@6200..6201 "k"
+ WHITESPACE@6201..6202 " "
+ IN_KW@6202..6204 "in"
+ WHITESPACE@6204..6205 " "
+ EXPR_APPLY@6205..6228
+ EXPR_INDEX@6205..6221
+ EXPR_VAR@6205..6208
+ NAME@6205..6208
+ IDENT@6205..6208 "std"
+ DOT@6208..6209 "."
+ NAME@6209..6221
+ IDENT@6209..6221 "objectFields"
+ ARGS_DESC@6221..6228
+ L_PAREN@6221..6222 "("
+ ARG@6222..6227
+ EXPR_VAR@6222..6227
+ NAME@6222..6227
+ IDENT@6222..6227 "attrs"
+ R_PAREN@6227..6228 ")"
+ R_BRACK@6228..6229 "]"
+ R_PAREN@6229..6230 ")"
+ SEMI@6230..6231 ";"
+ WHITESPACE@6231..6242 "\n "
+ EXPR_APPLY@6242..6326
+ EXPR_INDEX@6242..6254
+ EXPR_VAR@6242..6245
+ NAME@6242..6245
+ IDENT@6242..6245 "std"
+ DOT@6245..6246 "."
+ NAME@6246..6254
+ IDENT@6246..6254 "deepJoin"
+ ARGS_DESC@6254..6326
+ L_PAREN@6254..6255 "("
+ ARG@6255..6325
+ EXPR_ARRAY@6255..6325
+ L_BRACK@6255..6256 "["
+ EXPR_STRING@6256..6259
+ STRING_SINGLE@6256..6259 "'<'"
+ COMMA@6259..6260 ","
+ WHITESPACE@6260..6261 " "
+ EXPR_VAR@6261..6264
+ NAME@6261..6264
+ IDENT@6261..6264 "tag"
+ COMMA@6264..6265 ","
+ WHITESPACE@6265..6266 " "
+ EXPR_VAR@6266..6275
+ NAME@6266..6275
+ IDENT@6266..6275 "attrs_str"
+ COMMA@6275..6276 ","
+ WHITESPACE@6276..6277 " "
+ EXPR_STRING@6277..6280
+ STRING_SINGLE@6277..6280 "'>'"
+ COMMA@6280..6281 ","
+ WHITESPACE@6281..6282 " "
+ EXPR_ARRAY_COMP@6282..6308
+ L_BRACK@6282..6283 "["
+ EXPR_APPLY@6283..6289
+ EXPR_VAR@6283..6286
+ NAME@6283..6286
+ IDENT@6283..6286 "aux"
+ ARGS_DESC@6286..6289
+ L_PAREN@6286..6287 "("
+ ARG@6287..6288
+ EXPR_VAR@6287..6288
+ NAME@6287..6288
+ IDENT@6287..6288 "x"
+ R_PAREN@6288..6289 ")"
+ WHITESPACE@6289..6290 " "
+ FOR_SPEC@6290..6307
+ FOR_KW@6290..6293 "for"
+ WHITESPACE@6293..6294 " "
+ NAME@6294..6295
+ IDENT@6294..6295 "x"
+ WHITESPACE@6295..6296 " "
+ IN_KW@6296..6298 "in"
+ WHITESPACE@6298..6299 " "
+ EXPR_VAR@6299..6307
+ NAME@6299..6307
+ IDENT@6299..6307 "children"
+ R_BRACK@6307..6308 "]"
+ COMMA@6308..6309 ","
+ WHITESPACE@6309..6310 " "
+ EXPR_STRING@6310..6314
+ STRING_SINGLE@6310..6314 "'</'"
+ COMMA@6314..6315 ","
+ WHITESPACE@6315..6316 " "
+ EXPR_VAR@6316..6319
+ NAME@6316..6319
+ IDENT@6316..6319 "tag"
+ COMMA@6319..6320 ","
+ WHITESPACE@6320..6321 " "
+ EXPR_STRING@6321..6324
+ STRING_SINGLE@6321..6324 "'>'"
+ R_BRACK@6324..6325 "]"
+ R_PAREN@6325..6326 ")"
+ SEMI@6326..6327 ";"
+ WHITESPACE@6327..6335 "\n\n "
+ EXPR_APPLY@6335..6345
+ EXPR_VAR@6335..6338
+ NAME@6335..6338
+ IDENT@6335..6338 "aux"
+ ARGS_DESC@6338..6345
+ L_PAREN@6338..6339 "("
+ ARG@6339..6344
+ EXPR_VAR@6339..6344
+ NAME@6339..6344
+ IDENT@6339..6344 "value"
+ R_PAREN@6344..6345 ")"
COMMA@6345..6346 ","
WHITESPACE@6346..6350 "\n\n "
- MEMBER_FIELD@6350..6556
- FIELD_METHOD@6350..6556
- FIELD_NAME_FIXED@6350..6354
- NAME@6350..6354
- IDENT@6350..6354 "uniq"
- PARAMS_DESC@6354..6368
- L_PAREN@6354..6355 "("
- PARAM@6355..6358
- DESTRUCT_FULL@6355..6358
- NAME@6355..6358
- IDENT@6355..6358 "arr"
- COMMA@6358..6359 ","
- WHITESPACE@6359..6360 " "
- PARAM@6360..6367
- DESTRUCT_FULL@6360..6364
- NAME@6360..6364
- IDENT@6360..6364 "keyF"
- ASSIGN@6364..6365 "="
- EXPR_VAR@6365..6367
- NAME@6365..6367
- IDENT@6365..6367 "id"
- R_PAREN@6367..6368 ")"
- COLONCOLON@6368..6370 "::"
- WHITESPACE@6370..6375 "\n "
- EXPR_LOCAL@6375..6556
- LOCAL_KW@6375..6380 "local"
- WHITESPACE@6380..6381 " "
- BIND_FUNCTION@6381..6529
- NAME@6381..6382
- IDENT@6381..6382 "f"
- PARAMS_DESC@6382..6388
- L_PAREN@6382..6383 "("
- PARAM@6383..6384
- DESTRUCT_FULL@6383..6384
- NAME@6383..6384
- IDENT@6383..6384 "a"
- COMMA@6384..6385 ","
- WHITESPACE@6385..6386 " "
- PARAM@6386..6387
- DESTRUCT_FULL@6386..6387
- NAME@6386..6387
- IDENT@6386..6387 "b"
- R_PAREN@6387..6388 ")"
- WHITESPACE@6388..6389 " "
- ASSIGN@6389..6390 "="
- WHITESPACE@6390..6397 "\n "
- EXPR_IF_THEN_ELSE@6397..6529
- IF_KW@6397..6399 "if"
- WHITESPACE@6399..6400 " "
- EXPR_BINARY@6400..6418
- LHS_EXPR@6400..6413
- EXPR_APPLY@6400..6413
- EXPR_INDEX@6400..6410
- EXPR_VAR@6400..6403
- NAME@6400..6403
- IDENT@6400..6403 "std"
- DOT@6403..6404 "."
- NAME@6404..6410
- IDENT@6404..6410 "length"
- ARGS_DESC@6410..6413
- L_PAREN@6410..6411 "("
- ARG@6411..6412
- EXPR_VAR@6411..6412
- NAME@6411..6412
- IDENT@6411..6412 "a"
- R_PAREN@6412..6413 ")"
- WHITESPACE@6413..6414 " "
- EQ@6414..6416 "=="
- WHITESPACE@6416..6417 " "
- EXPR_NUMBER@6417..6418
- FLOAT@6417..6418 "0"
- WHITESPACE@6418..6419 " "
- THEN_KW@6419..6423 "then"
- WHITESPACE@6423..6432 "\n "
- TRUE_EXPR@6432..6435
- EXPR_ARRAY@6432..6435
- L_BRACK@6432..6433 "["
- EXPR_VAR@6433..6434
- NAME@6433..6434
- IDENT@6433..6434 "b"
- R_BRACK@6434..6435 "]"
- WHITESPACE@6435..6442 "\n "
- ELSE_KW@6442..6446 "else"
- WHITESPACE@6446..6447 " "
- FALSE_EXPR@6447..6529
- EXPR_IF_THEN_ELSE@6447..6529
- IF_KW@6447..6449 "if"
- WHITESPACE@6449..6450 " "
- EXPR_BINARY@6450..6487
- LHS_EXPR@6450..6476
- EXPR_APPLY@6450..6476
- EXPR_VAR@6450..6454
- NAME@6450..6454
- IDENT@6450..6454 "keyF"
- ARGS_DESC@6454..6476
- L_PAREN@6454..6455 "("
- ARG@6455..6475
- EXPR_INDEX_EXPR@6455..6475
- LHS_EXPR@6455..6456
- EXPR_VAR@6455..6456
- NAME@6455..6456
- IDENT@6455..6456 "a"
- L_BRACK@6456..6457 "["
- EXPR_BINARY@6457..6474
- LHS_EXPR@6457..6470
- EXPR_APPLY@6457..6470
- EXPR_INDEX@6457..6467
- EXPR_VAR@6457..6460
- NAME@6457..6460
- IDENT@6457..6460 "std"
- DOT@6460..6461 "."
- NAME@6461..6467
- IDENT@6461..6467 "length"
- ARGS_DESC@6467..6470
- L_PAREN@6467..6468 "("
- ARG@6468..6469
- EXPR_VAR@6468..6469
- NAME@6468..6469
- IDENT@6468..6469 "a"
- R_PAREN@6469..6470 ")"
- WHITESPACE@6470..6471 " "
- MINUS@6471..6472 "-"
- WHITESPACE@6472..6473 " "
- EXPR_NUMBER@6473..6474
- FLOAT@6473..6474 "1"
- R_BRACK@6474..6475 "]"
- R_PAREN@6475..6476 ")"
- WHITESPACE@6476..6477 " "
- EQ@6477..6479 "=="
- WHITESPACE@6479..6480 " "
- EXPR_APPLY@6480..6487
- EXPR_VAR@6480..6484
- NAME@6480..6484
- IDENT@6480..6484 "keyF"
- ARGS_DESC@6484..6487
- L_PAREN@6484..6485 "("
- ARG@6485..6486
- EXPR_VAR@6485..6486
- NAME@6485..6486
- IDENT@6485..6486 "b"
- R_PAREN@6486..6487 ")"
- WHITESPACE@6487..6488 " "
- THEN_KW@6488..6492 "then"
- WHITESPACE@6492..6501 "\n "
- TRUE_EXPR@6501..6502
- EXPR_VAR@6501..6502
- NAME@6501..6502
- IDENT@6501..6502 "a"
- WHITESPACE@6502..6509 "\n "
- ELSE_KW@6509..6513 "else"
- WHITESPACE@6513..6522 "\n "
- FALSE_EXPR@6522..6529
- EXPR_BINARY@6522..6529
- LHS_EXPR@6522..6523
- EXPR_VAR@6522..6523
- NAME@6522..6523
- IDENT@6522..6523 "a"
- WHITESPACE@6523..6524 " "
- PLUS@6524..6525 "+"
- WHITESPACE@6525..6526 " "
- EXPR_ARRAY@6526..6529
- L_BRACK@6526..6527 "["
- EXPR_VAR@6527..6528
- NAME@6527..6528
- IDENT@6527..6528 "b"
- R_BRACK@6528..6529 "]"
- SEMI@6529..6530 ";"
- WHITESPACE@6530..6535 "\n "
- EXPR_APPLY@6535..6556
- EXPR_INDEX@6535..6544
- EXPR_VAR@6535..6538
- NAME@6535..6538
- IDENT@6535..6538 "std"
- DOT@6538..6539 "."
- NAME@6539..6544
- IDENT@6539..6544 "foldl"
- ARGS_DESC@6544..6556
- L_PAREN@6544..6545 "("
- ARG@6545..6546
- EXPR_VAR@6545..6546
- NAME@6545..6546
- IDENT@6545..6546 "f"
- COMMA@6546..6547 ","
- WHITESPACE@6547..6548 " "
- ARG@6548..6551
- EXPR_VAR@6548..6551
- NAME@6548..6551
- IDENT@6548..6551 "arr"
- COMMA@6551..6552 ","
- WHITESPACE@6552..6553 " "
- ARG@6553..6555
- EXPR_ARRAY@6553..6555
- L_BRACK@6553..6554 "["
- R_BRACK@6554..6555 "]"
- R_PAREN@6555..6556 ")"
+ MEMBER_FIELD_METHOD@6350..6556
+ FIELD_NAME_FIXED@6350..6354
+ NAME@6350..6354
+ IDENT@6350..6354 "uniq"
+ PARAMS_DESC@6354..6368
+ L_PAREN@6354..6355 "("
+ PARAM@6355..6358
+ DESTRUCT_FULL@6355..6358
+ NAME@6355..6358
+ IDENT@6355..6358 "arr"
+ COMMA@6358..6359 ","
+ WHITESPACE@6359..6360 " "
+ PARAM@6360..6367
+ DESTRUCT_FULL@6360..6364
+ NAME@6360..6364
+ IDENT@6360..6364 "keyF"
+ ASSIGN@6364..6365 "="
+ EXPR_VAR@6365..6367
+ NAME@6365..6367
+ IDENT@6365..6367 "id"
+ R_PAREN@6367..6368 ")"
+ COLONCOLON@6368..6370 "::"
+ WHITESPACE@6370..6375 "\n "
+ EXPR_LOCAL@6375..6556
+ LOCAL_KW@6375..6380 "local"
+ WHITESPACE@6380..6381 " "
+ BIND_FUNCTION@6381..6529
+ NAME@6381..6382
+ IDENT@6381..6382 "f"
+ PARAMS_DESC@6382..6388
+ L_PAREN@6382..6383 "("
+ PARAM@6383..6384
+ DESTRUCT_FULL@6383..6384
+ NAME@6383..6384
+ IDENT@6383..6384 "a"
+ COMMA@6384..6385 ","
+ WHITESPACE@6385..6386 " "
+ PARAM@6386..6387
+ DESTRUCT_FULL@6386..6387
+ NAME@6386..6387
+ IDENT@6386..6387 "b"
+ R_PAREN@6387..6388 ")"
+ WHITESPACE@6388..6389 " "
+ ASSIGN@6389..6390 "="
+ WHITESPACE@6390..6397 "\n "
+ EXPR_IF_THEN_ELSE@6397..6529
+ IF_KW@6397..6399 "if"
+ WHITESPACE@6399..6400 " "
+ EXPR_BINARY@6400..6418
+ LHS_EXPR@6400..6413
+ EXPR_APPLY@6400..6413
+ EXPR_INDEX@6400..6410
+ EXPR_VAR@6400..6403
+ NAME@6400..6403
+ IDENT@6400..6403 "std"
+ DOT@6403..6404 "."
+ NAME@6404..6410
+ IDENT@6404..6410 "length"
+ ARGS_DESC@6410..6413
+ L_PAREN@6410..6411 "("
+ ARG@6411..6412
+ EXPR_VAR@6411..6412
+ NAME@6411..6412
+ IDENT@6411..6412 "a"
+ R_PAREN@6412..6413 ")"
+ WHITESPACE@6413..6414 " "
+ EQ@6414..6416 "=="
+ WHITESPACE@6416..6417 " "
+ EXPR_NUMBER@6417..6418
+ FLOAT@6417..6418 "0"
+ WHITESPACE@6418..6419 " "
+ THEN_KW@6419..6423 "then"
+ WHITESPACE@6423..6432 "\n "
+ TRUE_EXPR@6432..6435
+ EXPR_ARRAY@6432..6435
+ L_BRACK@6432..6433 "["
+ EXPR_VAR@6433..6434
+ NAME@6433..6434
+ IDENT@6433..6434 "b"
+ R_BRACK@6434..6435 "]"
+ WHITESPACE@6435..6442 "\n "
+ ELSE_KW@6442..6446 "else"
+ WHITESPACE@6446..6447 " "
+ FALSE_EXPR@6447..6529
+ EXPR_IF_THEN_ELSE@6447..6529
+ IF_KW@6447..6449 "if"
+ WHITESPACE@6449..6450 " "
+ EXPR_BINARY@6450..6487
+ LHS_EXPR@6450..6476
+ EXPR_APPLY@6450..6476
+ EXPR_VAR@6450..6454
+ NAME@6450..6454
+ IDENT@6450..6454 "keyF"
+ ARGS_DESC@6454..6476
+ L_PAREN@6454..6455 "("
+ ARG@6455..6475
+ EXPR_INDEX_EXPR@6455..6475
+ LHS_EXPR@6455..6456
+ EXPR_VAR@6455..6456
+ NAME@6455..6456
+ IDENT@6455..6456 "a"
+ L_BRACK@6456..6457 "["
+ EXPR_BINARY@6457..6474
+ LHS_EXPR@6457..6470
+ EXPR_APPLY@6457..6470
+ EXPR_INDEX@6457..6467
+ EXPR_VAR@6457..6460
+ NAME@6457..6460
+ IDENT@6457..6460 "std"
+ DOT@6460..6461 "."
+ NAME@6461..6467
+ IDENT@6461..6467 "length"
+ ARGS_DESC@6467..6470
+ L_PAREN@6467..6468 "("
+ ARG@6468..6469
+ EXPR_VAR@6468..6469
+ NAME@6468..6469
+ IDENT@6468..6469 "a"
+ R_PAREN@6469..6470 ")"
+ WHITESPACE@6470..6471 " "
+ MINUS@6471..6472 "-"
+ WHITESPACE@6472..6473 " "
+ EXPR_NUMBER@6473..6474
+ FLOAT@6473..6474 "1"
+ R_BRACK@6474..6475 "]"
+ R_PAREN@6475..6476 ")"
+ WHITESPACE@6476..6477 " "
+ EQ@6477..6479 "=="
+ WHITESPACE@6479..6480 " "
+ EXPR_APPLY@6480..6487
+ EXPR_VAR@6480..6484
+ NAME@6480..6484
+ IDENT@6480..6484 "keyF"
+ ARGS_DESC@6484..6487
+ L_PAREN@6484..6485 "("
+ ARG@6485..6486
+ EXPR_VAR@6485..6486
+ NAME@6485..6486
+ IDENT@6485..6486 "b"
+ R_PAREN@6486..6487 ")"
+ WHITESPACE@6487..6488 " "
+ THEN_KW@6488..6492 "then"
+ WHITESPACE@6492..6501 "\n "
+ TRUE_EXPR@6501..6502
+ EXPR_VAR@6501..6502
+ NAME@6501..6502
+ IDENT@6501..6502 "a"
+ WHITESPACE@6502..6509 "\n "
+ ELSE_KW@6509..6513 "else"
+ WHITESPACE@6513..6522 "\n "
+ FALSE_EXPR@6522..6529
+ EXPR_BINARY@6522..6529
+ LHS_EXPR@6522..6523
+ EXPR_VAR@6522..6523
+ NAME@6522..6523
+ IDENT@6522..6523 "a"
+ WHITESPACE@6523..6524 " "
+ PLUS@6524..6525 "+"
+ WHITESPACE@6525..6526 " "
+ EXPR_ARRAY@6526..6529
+ L_BRACK@6526..6527 "["
+ EXPR_VAR@6527..6528
+ NAME@6527..6528
+ IDENT@6527..6528 "b"
+ R_BRACK@6528..6529 "]"
+ SEMI@6529..6530 ";"
+ WHITESPACE@6530..6535 "\n "
+ EXPR_APPLY@6535..6556
+ EXPR_INDEX@6535..6544
+ EXPR_VAR@6535..6538
+ NAME@6535..6538
+ IDENT@6535..6538 "std"
+ DOT@6538..6539 "."
+ NAME@6539..6544
+ IDENT@6539..6544 "foldl"
+ ARGS_DESC@6544..6556
+ L_PAREN@6544..6545 "("
+ ARG@6545..6546
+ EXPR_VAR@6545..6546
+ NAME@6545..6546
+ IDENT@6545..6546 "f"
+ COMMA@6546..6547 ","
+ WHITESPACE@6547..6548 " "
+ ARG@6548..6551
+ EXPR_VAR@6548..6551
+ NAME@6548..6551
+ IDENT@6548..6551 "arr"
+ COMMA@6551..6552 ","
+ WHITESPACE@6552..6553 " "
+ ARG@6553..6555
+ EXPR_ARRAY@6553..6555
+ L_BRACK@6553..6554 "["
+ R_BRACK@6554..6555 "]"
+ R_PAREN@6555..6556 ")"
COMMA@6556..6557 ","
WHITESPACE@6557..6561 "\n\n "
- MEMBER_FIELD@6561..6620
- FIELD_METHOD@6561..6620
- FIELD_NAME_FIXED@6561..6564
- NAME@6561..6564
- IDENT@6561..6564 "set"
- PARAMS_DESC@6564..6578
- L_PAREN@6564..6565 "("
- PARAM@6565..6568
- DESTRUCT_FULL@6565..6568
- NAME@6565..6568
- IDENT@6565..6568 "arr"
- COMMA@6568..6569 ","
- WHITESPACE@6569..6570 " "
- PARAM@6570..6577
- DESTRUCT_FULL@6570..6574
- NAME@6570..6574
- IDENT@6570..6574 "keyF"
- ASSIGN@6574..6575 "="
- EXPR_VAR@6575..6577
- NAME@6575..6577
- IDENT@6575..6577 "id"
- R_PAREN@6577..6578 ")"
- COLONCOLON@6578..6580 "::"
- WHITESPACE@6580..6585 "\n "
- EXPR_APPLY@6585..6620
- EXPR_INDEX@6585..6593
- EXPR_VAR@6585..6588
- NAME@6585..6588
- IDENT@6585..6588 "std"
- DOT@6588..6589 "."
- NAME@6589..6593
- IDENT@6589..6593 "uniq"
- ARGS_DESC@6593..6620
- L_PAREN@6593..6594 "("
- ARG@6594..6613
- EXPR_APPLY@6594..6613
- EXPR_INDEX@6594..6602
- EXPR_VAR@6594..6597
- NAME@6594..6597
- IDENT@6594..6597 "std"
- DOT@6597..6598 "."
- NAME@6598..6602
- IDENT@6598..6602 "sort"
- ARGS_DESC@6602..6613
- L_PAREN@6602..6603 "("
- ARG@6603..6606
- EXPR_VAR@6603..6606
- NAME@6603..6606
- IDENT@6603..6606 "arr"
- COMMA@6606..6607 ","
- WHITESPACE@6607..6608 " "
- ARG@6608..6612
- EXPR_VAR@6608..6612
- NAME@6608..6612
- IDENT@6608..6612 "keyF"
- R_PAREN@6612..6613 ")"
- COMMA@6613..6614 ","
- WHITESPACE@6614..6615 " "
- ARG@6615..6619
- EXPR_VAR@6615..6619
- NAME@6615..6619
- IDENT@6615..6619 "keyF"
- R_PAREN@6619..6620 ")"
+ MEMBER_FIELD_METHOD@6561..6620
+ FIELD_NAME_FIXED@6561..6564
+ NAME@6561..6564
+ IDENT@6561..6564 "set"
+ PARAMS_DESC@6564..6578
+ L_PAREN@6564..6565 "("
+ PARAM@6565..6568
+ DESTRUCT_FULL@6565..6568
+ NAME@6565..6568
+ IDENT@6565..6568 "arr"
+ COMMA@6568..6569 ","
+ WHITESPACE@6569..6570 " "
+ PARAM@6570..6577
+ DESTRUCT_FULL@6570..6574
+ NAME@6570..6574
+ IDENT@6570..6574 "keyF"
+ ASSIGN@6574..6575 "="
+ EXPR_VAR@6575..6577
+ NAME@6575..6577
+ IDENT@6575..6577 "id"
+ R_PAREN@6577..6578 ")"
+ COLONCOLON@6578..6580 "::"
+ WHITESPACE@6580..6585 "\n "
+ EXPR_APPLY@6585..6620
+ EXPR_INDEX@6585..6593
+ EXPR_VAR@6585..6588
+ NAME@6585..6588
+ IDENT@6585..6588 "std"
+ DOT@6588..6589 "."
+ NAME@6589..6593
+ IDENT@6589..6593 "uniq"
+ ARGS_DESC@6593..6620
+ L_PAREN@6593..6594 "("
+ ARG@6594..6613
+ EXPR_APPLY@6594..6613
+ EXPR_INDEX@6594..6602
+ EXPR_VAR@6594..6597
+ NAME@6594..6597
+ IDENT@6594..6597 "std"
+ DOT@6597..6598 "."
+ NAME@6598..6602
+ IDENT@6598..6602 "sort"
+ ARGS_DESC@6602..6613
+ L_PAREN@6602..6603 "("
+ ARG@6603..6606
+ EXPR_VAR@6603..6606
+ NAME@6603..6606
+ IDENT@6603..6606 "arr"
+ COMMA@6606..6607 ","
+ WHITESPACE@6607..6608 " "
+ ARG@6608..6612
+ EXPR_VAR@6608..6612
+ NAME@6608..6612
+ IDENT@6608..6612 "keyF"
+ R_PAREN@6612..6613 ")"
+ COMMA@6613..6614 ","
+ WHITESPACE@6614..6615 " "
+ ARG@6615..6619
+ EXPR_VAR@6615..6619
+ NAME@6615..6619
+ IDENT@6615..6619 "keyF"
+ R_PAREN@6619..6620 ")"
COMMA@6620..6621 ","
WHITESPACE@6621..6625 "\n\n "
- MEMBER_FIELD@6625..6760
- FIELD_METHOD@6625..6760
- FIELD_NAME_FIXED@6625..6634
- NAME@6625..6634
- IDENT@6625..6634 "setMember"
- PARAMS_DESC@6634..6651
- L_PAREN@6634..6635 "("
- PARAM@6635..6636
- DESTRUCT_FULL@6635..6636
- NAME@6635..6636
- IDENT@6635..6636 "x"
- COMMA@6636..6637 ","
- WHITESPACE@6637..6638 " "
- PARAM@6638..6641
- DESTRUCT_FULL@6638..6641
- NAME@6638..6641
- IDENT@6638..6641 "arr"
- COMMA@6641..6642 ","
- WHITESPACE@6642..6643 " "
- PARAM@6643..6650
- DESTRUCT_FULL@6643..6647
- NAME@6643..6647
- IDENT@6643..6647 "keyF"
- ASSIGN@6647..6648 "="
- EXPR_VAR@6648..6650
- NAME@6648..6650
- IDENT@6648..6650 "id"
- R_PAREN@6650..6651 ")"
- COLONCOLON@6651..6653 "::"
- WHITESPACE@6653..6658 "\n "
- SINGLE_LINE_SLASH_COMMENT@6658..6712 "// TODO(dcunnin): Bin ..."
- WHITESPACE@6712..6716 " "
- EXPR_BINARY@6716..6760
- LHS_EXPR@6716..6756
- EXPR_APPLY@6716..6756
- EXPR_INDEX@6716..6726
- EXPR_VAR@6716..6719
- NAME@6716..6719
- IDENT@6716..6719 "std"
- DOT@6719..6720 "."
- NAME@6720..6726
- IDENT@6720..6726 "length"
- ARGS_DESC@6726..6756
- L_PAREN@6726..6727 "("
- ARG@6727..6755
- EXPR_APPLY@6727..6755
- EXPR_INDEX@6727..6739
- EXPR_VAR@6727..6730
- NAME@6727..6730
- IDENT@6727..6730 "std"
- DOT@6730..6731 "."
- NAME@6731..6739
- IDENT@6731..6739 "setInter"
- ARGS_DESC@6739..6755
- L_PAREN@6739..6740 "("
- ARG@6740..6743
- EXPR_ARRAY@6740..6743
- L_BRACK@6740..6741 "["
- EXPR_VAR@6741..6742
- NAME@6741..6742
- IDENT@6741..6742 "x"
- R_BRACK@6742..6743 "]"
- COMMA@6743..6744 ","
- WHITESPACE@6744..6745 " "
- ARG@6745..6748
- EXPR_VAR@6745..6748
- NAME@6745..6748
- IDENT@6745..6748 "arr"
- COMMA@6748..6749 ","
- WHITESPACE@6749..6750 " "
- ARG@6750..6754
- EXPR_VAR@6750..6754
- NAME@6750..6754
- IDENT@6750..6754 "keyF"
- R_PAREN@6754..6755 ")"
- R_PAREN@6755..6756 ")"
- WHITESPACE@6756..6757 " "
- GT@6757..6758 ">"
- WHITESPACE@6758..6759 " "
- EXPR_NUMBER@6759..6760
- FLOAT@6759..6760 "0"
+ MEMBER_FIELD_METHOD@6625..6760
+ FIELD_NAME_FIXED@6625..6634
+ NAME@6625..6634
+ IDENT@6625..6634 "setMember"
+ PARAMS_DESC@6634..6651
+ L_PAREN@6634..6635 "("
+ PARAM@6635..6636
+ DESTRUCT_FULL@6635..6636
+ NAME@6635..6636
+ IDENT@6635..6636 "x"
+ COMMA@6636..6637 ","
+ WHITESPACE@6637..6638 " "
+ PARAM@6638..6641
+ DESTRUCT_FULL@6638..6641
+ NAME@6638..6641
+ IDENT@6638..6641 "arr"
+ COMMA@6641..6642 ","
+ WHITESPACE@6642..6643 " "
+ PARAM@6643..6650
+ DESTRUCT_FULL@6643..6647
+ NAME@6643..6647
+ IDENT@6643..6647 "keyF"
+ ASSIGN@6647..6648 "="
+ EXPR_VAR@6648..6650
+ NAME@6648..6650
+ IDENT@6648..6650 "id"
+ R_PAREN@6650..6651 ")"
+ COLONCOLON@6651..6653 "::"
+ WHITESPACE@6653..6658 "\n "
+ SINGLE_LINE_SLASH_COMMENT@6658..6712 "// TODO(dcunnin): Bin ..."
+ WHITESPACE@6712..6716 " "
+ EXPR_BINARY@6716..6760
+ LHS_EXPR@6716..6756
+ EXPR_APPLY@6716..6756
+ EXPR_INDEX@6716..6726
+ EXPR_VAR@6716..6719
+ NAME@6716..6719
+ IDENT@6716..6719 "std"
+ DOT@6719..6720 "."
+ NAME@6720..6726
+ IDENT@6720..6726 "length"
+ ARGS_DESC@6726..6756
+ L_PAREN@6726..6727 "("
+ ARG@6727..6755
+ EXPR_APPLY@6727..6755
+ EXPR_INDEX@6727..6739
+ EXPR_VAR@6727..6730
+ NAME@6727..6730
+ IDENT@6727..6730 "std"
+ DOT@6730..6731 "."
+ NAME@6731..6739
+ IDENT@6731..6739 "setInter"
+ ARGS_DESC@6739..6755
+ L_PAREN@6739..6740 "("
+ ARG@6740..6743
+ EXPR_ARRAY@6740..6743
+ L_BRACK@6740..6741 "["
+ EXPR_VAR@6741..6742
+ NAME@6741..6742
+ IDENT@6741..6742 "x"
+ R_BRACK@6742..6743 "]"
+ COMMA@6743..6744 ","
+ WHITESPACE@6744..6745 " "
+ ARG@6745..6748
+ EXPR_VAR@6745..6748
+ NAME@6745..6748
+ IDENT@6745..6748 "arr"
+ COMMA@6748..6749 ","
+ WHITESPACE@6749..6750 " "
+ ARG@6750..6754
+ EXPR_VAR@6750..6754
+ NAME@6750..6754
+ IDENT@6750..6754 "keyF"
+ R_PAREN@6754..6755 ")"
+ R_PAREN@6755..6756 ")"
+ WHITESPACE@6756..6757 " "
+ GT@6757..6758 ">"
+ WHITESPACE@6758..6759 " "
+ EXPR_NUMBER@6759..6760
+ FLOAT@6759..6760 "0"
COMMA@6760..6761 ","
WHITESPACE@6761..6765 "\n\n "
- MEMBER_FIELD@6765..7314
- FIELD_METHOD@6765..7314
- FIELD_NAME_FIXED@6765..6773
- NAME@6765..6773
- IDENT@6765..6773 "setUnion"
- PARAMS_DESC@6773..6788
- L_PAREN@6773..6774 "("
- PARAM@6774..6775
- DESTRUCT_FULL@6774..6775
- NAME@6774..6775
- IDENT@6774..6775 "a"
- COMMA@6775..6776 ","
- WHITESPACE@6776..6777 " "
- PARAM@6777..6778
- DESTRUCT_FULL@6777..6778
- NAME@6777..6778
- IDENT@6777..6778 "b"
- COMMA@6778..6779 ","
- WHITESPACE@6779..6780 " "
- PARAM@6780..6787
- DESTRUCT_FULL@6780..6784
- NAME@6780..6784
- IDENT@6780..6784 "keyF"
- ASSIGN@6784..6785 "="
- EXPR_VAR@6785..6787
- NAME@6785..6787
- IDENT@6785..6787 "id"
- R_PAREN@6787..6788 ")"
- COLONCOLON@6788..6790 "::"
- WHITESPACE@6790..6795 "\n "
- SINGLE_LINE_SLASH_COMMENT@6795..6837 "// NOTE: order matter ..."
- WHITESPACE@6837..6841 " "
- EXPR_LOCAL@6841..7314
- LOCAL_KW@6841..6846 "local"
- WHITESPACE@6846..6847 " "
- BIND_FUNCTION@6847..7289
- NAME@6847..6850
- IDENT@6847..6850 "aux"
- PARAMS_DESC@6850..6867
- L_PAREN@6850..6851 "("
- PARAM@6851..6852
- DESTRUCT_FULL@6851..6852
- NAME@6851..6852
- IDENT@6851..6852 "a"
- COMMA@6852..6853 ","
- WHITESPACE@6853..6854 " "
- PARAM@6854..6855
- DESTRUCT_FULL@6854..6855
- NAME@6854..6855
- IDENT@6854..6855 "b"
- COMMA@6855..6856 ","
- WHITESPACE@6856..6857 " "
- PARAM@6857..6858
- DESTRUCT_FULL@6857..6858
- NAME@6857..6858
- IDENT@6857..6858 "i"
- COMMA@6858..6859 ","
- WHITESPACE@6859..6860 " "
- PARAM@6860..6861
- DESTRUCT_FULL@6860..6861
- NAME@6860..6861
- IDENT@6860..6861 "j"
- COMMA@6861..6862 ","
- WHITESPACE@6862..6863 " "
- PARAM@6863..6866
- DESTRUCT_FULL@6863..6866
- NAME@6863..6866
- IDENT@6863..6866 "acc"
- R_PAREN@6866..6867 ")"
- WHITESPACE@6867..6868 " "
- ASSIGN@6868..6869 "="
- WHITESPACE@6869..6876 "\n "
- EXPR_IF_THEN_ELSE@6876..7289
- IF_KW@6876..6878 "if"
- WHITESPACE@6878..6879 " "
- EXPR_BINARY@6879..6897
- LHS_EXPR@6879..6880
- EXPR_VAR@6879..6880
- NAME@6879..6880
- IDENT@6879..6880 "i"
- WHITESPACE@6880..6881 " "
- GE@6881..6883 ">="
- WHITESPACE@6883..6884 " "
- EXPR_APPLY@6884..6897
- EXPR_INDEX@6884..6894
- EXPR_VAR@6884..6887
- NAME@6884..6887
- IDENT@6884..6887 "std"
- DOT@6887..6888 "."
- NAME@6888..6894
- IDENT@6888..6894 "length"
- ARGS_DESC@6894..6897
- L_PAREN@6894..6895 "("
- ARG@6895..6896
- EXPR_VAR@6895..6896
- NAME@6895..6896
- IDENT@6895..6896 "a"
- R_PAREN@6896..6897 ")"
- WHITESPACE@6897..6898 " "
- THEN_KW@6898..6902 "then"
- WHITESPACE@6902..6911 "\n "
- TRUE_EXPR@6911..6922
- EXPR_BINARY@6911..6922
- LHS_EXPR@6911..6914
- EXPR_VAR@6911..6914
- NAME@6911..6914
- IDENT@6911..6914 "acc"
- WHITESPACE@6914..6915 " "
- PLUS@6915..6916 "+"
- WHITESPACE@6916..6917 " "
- EXPR_SLICE@6917..6922
- EXPR_VAR@6917..6918
- NAME@6917..6918
- IDENT@6917..6918 "b"
- SLICE_DESC@6918..6922
- L_BRACK@6918..6919 "["
- EXPR_VAR@6919..6920
- NAME@6919..6920
- IDENT@6919..6920 "j"
- COLON@6920..6921 ":"
- R_BRACK@6921..6922 "]"
- WHITESPACE@6922..6929 "\n "
- ELSE_KW@6929..6933 "else"
- WHITESPACE@6933..6934 " "
- FALSE_EXPR@6934..7289
- EXPR_IF_THEN_ELSE@6934..7289
- IF_KW@6934..6936 "if"
- WHITESPACE@6936..6937 " "
- EXPR_BINARY@6937..6955
- LHS_EXPR@6937..6938
- EXPR_VAR@6937..6938
- NAME@6937..6938
- IDENT@6937..6938 "j"
- WHITESPACE@6938..6939 " "
- GE@6939..6941 ">="
- WHITESPACE@6941..6942 " "
- EXPR_APPLY@6942..6955
- EXPR_INDEX@6942..6952
- EXPR_VAR@6942..6945
- NAME@6942..6945
- IDENT@6942..6945 "std"
- DOT@6945..6946 "."
- NAME@6946..6952
- IDENT@6946..6952 "length"
- ARGS_DESC@6952..6955
- L_PAREN@6952..6953 "("
- ARG@6953..6954
- EXPR_VAR@6953..6954
- NAME@6953..6954
- IDENT@6953..6954 "b"
- R_PAREN@6954..6955 ")"
- WHITESPACE@6955..6956 " "
- THEN_KW@6956..6960 "then"
- WHITESPACE@6960..6969 "\n "
- TRUE_EXPR@6969..6980
- EXPR_BINARY@6969..6980
- LHS_EXPR@6969..6972
- EXPR_VAR@6969..6972
- NAME@6969..6972
- IDENT@6969..6972 "acc"
- WHITESPACE@6972..6973 " "
- PLUS@6973..6974 "+"
- WHITESPACE@6974..6975 " "
- EXPR_SLICE@6975..6980
- EXPR_VAR@6975..6976
- NAME@6975..6976
- IDENT@6975..6976 "a"
- SLICE_DESC@6976..6980
- L_BRACK@6976..6977 "["
- EXPR_VAR@6977..6978
- NAME@6977..6978
- IDENT@6977..6978 "i"
- COLON@6978..6979 ":"
- R_BRACK@6979..6980 "]"
- WHITESPACE@6980..6987 "\n "
- ELSE_KW@6987..6991 "else"
- WHITESPACE@6991..7000 "\n "
- FALSE_EXPR@7000..7289
- EXPR_LOCAL@7000..7289
- LOCAL_KW@7000..7005 "local"
- WHITESPACE@7005..7006 " "
- BIND_DESTRUCT@7006..7021
- DESTRUCT_FULL@7006..7008
- NAME@7006..7008
- IDENT@7006..7008 "ak"
- WHITESPACE@7008..7009 " "
- ASSIGN@7009..7010 "="
- WHITESPACE@7010..7011 " "
- EXPR_APPLY@7011..7021
- EXPR_VAR@7011..7015
- NAME@7011..7015
- IDENT@7011..7015 "keyF"
- ARGS_DESC@7015..7021
- L_PAREN@7015..7016 "("
- ARG@7016..7020
- EXPR_INDEX_EXPR@7016..7020
- LHS_EXPR@7016..7017
- EXPR_VAR@7016..7017
- NAME@7016..7017
- IDENT@7016..7017 "a"
- L_BRACK@7017..7018 "["
- EXPR_VAR@7018..7019
- NAME@7018..7019
- IDENT@7018..7019 "i"
- R_BRACK@7019..7020 "]"
- R_PAREN@7020..7021 ")"
- SEMI@7021..7022 ";"
- WHITESPACE@7022..7031 "\n "
- EXPR_LOCAL@7031..7289
- LOCAL_KW@7031..7036 "local"
- WHITESPACE@7036..7037 " "
- BIND_DESTRUCT@7037..7052
- DESTRUCT_FULL@7037..7039
- NAME@7037..7039
- IDENT@7037..7039 "bk"
- WHITESPACE@7039..7040 " "
- ASSIGN@7040..7041 "="
- WHITESPACE@7041..7042 " "
- EXPR_APPLY@7042..7052
- EXPR_VAR@7042..7046
- NAME@7042..7046
- IDENT@7042..7046 "keyF"
- ARGS_DESC@7046..7052
- L_PAREN@7046..7047 "("
- ARG@7047..7051
- EXPR_INDEX_EXPR@7047..7051
- LHS_EXPR@7047..7048
- EXPR_VAR@7047..7048
- NAME@7047..7048
- IDENT@7047..7048 "b"
- L_BRACK@7048..7049 "["
- EXPR_VAR@7049..7050
- NAME@7049..7050
- IDENT@7049..7050 "j"
- R_BRACK@7050..7051 "]"
- R_PAREN@7051..7052 ")"
- SEMI@7052..7053 ";"
- WHITESPACE@7053..7062 "\n "
- EXPR_IF_THEN_ELSE@7062..7289
- IF_KW@7062..7064 "if"
- WHITESPACE@7064..7065 " "
- EXPR_BINARY@7065..7073
- LHS_EXPR@7065..7067
- EXPR_VAR@7065..7067
- NAME@7065..7067
- IDENT@7065..7067 "ak"
- WHITESPACE@7067..7068 " "
- EQ@7068..7070 "=="
- WHITESPACE@7070..7071 " "
- EXPR_VAR@7071..7073
- NAME@7071..7073
- IDENT@7071..7073 "bk"
- WHITESPACE@7073..7074 " "
- THEN_KW@7074..7078 "then"
- WHITESPACE@7078..7089 "\n "
- TRUE_EXPR@7089..7137
- EXPR_APPLY@7089..7137
- EXPR_VAR@7089..7092
- NAME@7089..7092
- IDENT@7089..7092 "aux"
- ARGS_DESC@7092..7137
- L_PAREN@7092..7093 "("
- ARG@7093..7094
- EXPR_VAR@7093..7094
- NAME@7093..7094
- IDENT@7093..7094 "a"
- COMMA@7094..7095 ","
- WHITESPACE@7095..7096 " "
- ARG@7096..7097
- EXPR_VAR@7096..7097
- NAME@7096..7097
- IDENT@7096..7097 "b"
- COMMA@7097..7098 ","
- WHITESPACE@7098..7099 " "
- ARG@7099..7104
- EXPR_BINARY@7099..7104
- LHS_EXPR@7099..7100
- EXPR_VAR@7099..7100
- NAME@7099..7100
- IDENT@7099..7100 "i"
- WHITESPACE@7100..7101 " "
- PLUS@7101..7102 "+"
- WHITESPACE@7102..7103 " "
- EXPR_NUMBER@7103..7104
- FLOAT@7103..7104 "1"
- COMMA@7104..7105 ","
- WHITESPACE@7105..7106 " "
- ARG@7106..7111
- EXPR_BINARY@7106..7111
- LHS_EXPR@7106..7107
- EXPR_VAR@7106..7107
- NAME@7106..7107
- IDENT@7106..7107 "j"
- WHITESPACE@7107..7108 " "
- PLUS@7108..7109 "+"
- WHITESPACE@7109..7110 " "
- EXPR_NUMBER@7110..7111
- FLOAT@7110..7111 "1"
- COMMA@7111..7112 ","
- WHITESPACE@7112..7113 " "
- ARG@7113..7125
- EXPR_BINARY@7113..7125
- LHS_EXPR@7113..7116
- EXPR_VAR@7113..7116
- NAME@7113..7116
- IDENT@7113..7116 "acc"
- WHITESPACE@7116..7117 " "
- PLUS@7117..7118 "+"
- WHITESPACE@7118..7119 " "
- EXPR_ARRAY@7119..7125
- L_BRACK@7119..7120 "["
- EXPR_INDEX_EXPR@7120..7124
- LHS_EXPR@7120..7121
- EXPR_VAR@7120..7121
- NAME@7120..7121
- IDENT@7120..7121 "a"
- L_BRACK@7121..7122 "["
- EXPR_VAR@7122..7123
- NAME@7122..7123
- IDENT@7122..7123 "i"
- R_BRACK@7123..7124 "]"
- R_BRACK@7124..7125 "]"
- R_PAREN@7125..7126 ")"
- WHITESPACE@7126..7127 " "
- TAILSTRICT_KW@7127..7137 "tailstrict"
- WHITESPACE@7137..7146 "\n "
- ELSE_KW@7146..7150 "else"
- WHITESPACE@7150..7151 " "
- FALSE_EXPR@7151..7289
- EXPR_IF_THEN_ELSE@7151..7289
- IF_KW@7151..7153 "if"
- WHITESPACE@7153..7154 " "
- EXPR_BINARY@7154..7161
- LHS_EXPR@7154..7156
- EXPR_VAR@7154..7156
- NAME@7154..7156
- IDENT@7154..7156 "ak"
- WHITESPACE@7156..7157 " "
- LT@7157..7158 "<"
- WHITESPACE@7158..7159 " "
- EXPR_VAR@7159..7161
- NAME@7159..7161
- IDENT@7159..7161 "bk"
- WHITESPACE@7161..7162 " "
- THEN_KW@7162..7166 "then"
- WHITESPACE@7166..7177 "\n "
- TRUE_EXPR@7177..7221
- EXPR_APPLY@7177..7221
- EXPR_VAR@7177..7180
- NAME@7177..7180
- IDENT@7177..7180 "aux"
- ARGS_DESC@7180..7221
- L_PAREN@7180..7181 "("
- ARG@7181..7182
- EXPR_VAR@7181..7182
- NAME@7181..7182
- IDENT@7181..7182 "a"
- COMMA@7182..7183 ","
- WHITESPACE@7183..7184 " "
- ARG@7184..7185
- EXPR_VAR@7184..7185
- NAME@7184..7185
- IDENT@7184..7185 "b"
- COMMA@7185..7186 ","
- WHITESPACE@7186..7187 " "
- ARG@7187..7192
- EXPR_BINARY@7187..7192
- LHS_EXPR@7187..7188
- EXPR_VAR@7187..7188
- NAME@7187..7188
- IDENT@7187..7188 "i"
- WHITESPACE@7188..7189 " "
- PLUS@7189..7190 "+"
- WHITESPACE@7190..7191 " "
- EXPR_NUMBER@7191..7192
- FLOAT@7191..7192 "1"
- COMMA@7192..7193 ","
- WHITESPACE@7193..7194 " "
- ARG@7194..7195
- EXPR_VAR@7194..7195
- NAME@7194..7195
- IDENT@7194..7195 "j"
- COMMA@7195..7196 ","
- WHITESPACE@7196..7197 " "
- ARG@7197..7209
- EXPR_BINARY@7197..7209
- LHS_EXPR@7197..7200
- EXPR_VAR@7197..7200
- NAME@7197..7200
- IDENT@7197..7200 "acc"
- WHITESPACE@7200..7201 " "
- PLUS@7201..7202 "+"
- WHITESPACE@7202..7203 " "
- EXPR_ARRAY@7203..7209
- L_BRACK@7203..7204 "["
- EXPR_INDEX_EXPR@7204..7208
- LHS_EXPR@7204..7205
- EXPR_VAR@7204..7205
- NAME@7204..7205
- IDENT@7204..7205 "a"
- L_BRACK@7205..7206 "["
- EXPR_VAR@7206..7207
- NAME@7206..7207
- IDENT@7206..7207 "i"
- R_BRACK@7207..7208 "]"
- R_BRACK@7208..7209 "]"
- R_PAREN@7209..7210 ")"
- WHITESPACE@7210..7211 " "
- TAILSTRICT_KW@7211..7221 "tailstrict"
- WHITESPACE@7221..7230 "\n "
- ELSE_KW@7230..7234 "else"
- WHITESPACE@7234..7245 "\n "
- FALSE_EXPR@7245..7289
- EXPR_APPLY@7245..7289
- EXPR_VAR@7245..7248
- NAME@7245..7248
- IDENT@7245..7248 "aux"
- ARGS_DESC@7248..7289
- L_PAREN@7248..7249 "("
- ARG@7249..7250
- EXPR_VAR@7249..7250
- NAME@7249..7250
- IDENT@7249..7250 "a"
- COMMA@7250..7251 ","
- WHITESPACE@7251..7252 " "
- ARG@7252..7253
- EXPR_VAR@7252..7253
- NAME@7252..7253
- IDENT@7252..7253 "b"
- COMMA@7253..7254 ","
- WHITESPACE@7254..7255 " "
- ARG@7255..7256
- EXPR_VAR@7255..7256
- NAME@7255..7256
- IDENT@7255..7256 "i"
- COMMA@7256..7257 ","
- WHITESPACE@7257..7258 " "
- ARG@7258..7263
- EXPR_BINARY@7258..7263
- LHS_EXPR@7258..7259
- EXPR_VAR@7258..7259
- NAME@7258..7259
- IDENT@7258..7259 "j"
- WHITESPACE@7259..7260 " "
- PLUS@7260..7261 "+"
- WHITESPACE@7261..7262 " "
- EXPR_NUMBER@7262..7263
- FLOAT@7262..7263 "1"
- COMMA@7263..7264 ","
- WHITESPACE@7264..7265 " "
- ARG@7265..7277
- EXPR_BINARY@7265..7277
- LHS_EXPR@7265..7268
- EXPR_VAR@7265..7268
- NAME@7265..7268
- IDENT@7265..7268 "acc"
- WHITESPACE@7268..7269 " "
- PLUS@7269..7270 "+"
- WHITESPACE@7270..7271 " "
- EXPR_ARRAY@7271..7277
- L_BRACK@7271..7272 "["
- EXPR_INDEX_EXPR@7272..7276
- LHS_EXPR@7272..7273
- EXPR_VAR@7272..7273
- NAME@7272..7273
- IDENT@7272..7273 "b"
- L_BRACK@7273..7274 "["
- EXPR_VAR@7274..7275
- NAME@7274..7275
- IDENT@7274..7275 "j"
- R_BRACK@7275..7276 "]"
- R_BRACK@7276..7277 "]"
- R_PAREN@7277..7278 ")"
- WHITESPACE@7278..7279 " "
- TAILSTRICT_KW@7279..7289 "tailstrict"
- SEMI@7289..7290 ";"
- WHITESPACE@7290..7295 "\n "
- EXPR_APPLY@7295..7314
- EXPR_VAR@7295..7298
- NAME@7295..7298
- IDENT@7295..7298 "aux"
- ARGS_DESC@7298..7314
- L_PAREN@7298..7299 "("
- ARG@7299..7300
- EXPR_VAR@7299..7300
- NAME@7299..7300
- IDENT@7299..7300 "a"
- COMMA@7300..7301 ","
- WHITESPACE@7301..7302 " "
- ARG@7302..7303
- EXPR_VAR@7302..7303
- NAME@7302..7303
- IDENT@7302..7303 "b"
- COMMA@7303..7304 ","
- WHITESPACE@7304..7305 " "
- ARG@7305..7306
- EXPR_NUMBER@7305..7306
- FLOAT@7305..7306 "0"
- COMMA@7306..7307 ","
- WHITESPACE@7307..7308 " "
- ARG@7308..7309
- EXPR_NUMBER@7308..7309
- FLOAT@7308..7309 "0"
- COMMA@7309..7310 ","
- WHITESPACE@7310..7311 " "
- ARG@7311..7313
- EXPR_ARRAY@7311..7313
- L_BRACK@7311..7312 "["
- R_BRACK@7312..7313 "]"
- R_PAREN@7313..7314 ")"
+ MEMBER_FIELD_METHOD@6765..7314
+ FIELD_NAME_FIXED@6765..6773
+ NAME@6765..6773
+ IDENT@6765..6773 "setUnion"
+ PARAMS_DESC@6773..6788
+ L_PAREN@6773..6774 "("
+ PARAM@6774..6775
+ DESTRUCT_FULL@6774..6775
+ NAME@6774..6775
+ IDENT@6774..6775 "a"
+ COMMA@6775..6776 ","
+ WHITESPACE@6776..6777 " "
+ PARAM@6777..6778
+ DESTRUCT_FULL@6777..6778
+ NAME@6777..6778
+ IDENT@6777..6778 "b"
+ COMMA@6778..6779 ","
+ WHITESPACE@6779..6780 " "
+ PARAM@6780..6787
+ DESTRUCT_FULL@6780..6784
+ NAME@6780..6784
+ IDENT@6780..6784 "keyF"
+ ASSIGN@6784..6785 "="
+ EXPR_VAR@6785..6787
+ NAME@6785..6787
+ IDENT@6785..6787 "id"
+ R_PAREN@6787..6788 ")"
+ COLONCOLON@6788..6790 "::"
+ WHITESPACE@6790..6795 "\n "
+ SINGLE_LINE_SLASH_COMMENT@6795..6837 "// NOTE: order matter ..."
+ WHITESPACE@6837..6841 " "
+ EXPR_LOCAL@6841..7314
+ LOCAL_KW@6841..6846 "local"
+ WHITESPACE@6846..6847 " "
+ BIND_FUNCTION@6847..7289
+ NAME@6847..6850
+ IDENT@6847..6850 "aux"
+ PARAMS_DESC@6850..6867
+ L_PAREN@6850..6851 "("
+ PARAM@6851..6852
+ DESTRUCT_FULL@6851..6852
+ NAME@6851..6852
+ IDENT@6851..6852 "a"
+ COMMA@6852..6853 ","
+ WHITESPACE@6853..6854 " "
+ PARAM@6854..6855
+ DESTRUCT_FULL@6854..6855
+ NAME@6854..6855
+ IDENT@6854..6855 "b"
+ COMMA@6855..6856 ","
+ WHITESPACE@6856..6857 " "
+ PARAM@6857..6858
+ DESTRUCT_FULL@6857..6858
+ NAME@6857..6858
+ IDENT@6857..6858 "i"
+ COMMA@6858..6859 ","
+ WHITESPACE@6859..6860 " "
+ PARAM@6860..6861
+ DESTRUCT_FULL@6860..6861
+ NAME@6860..6861
+ IDENT@6860..6861 "j"
+ COMMA@6861..6862 ","
+ WHITESPACE@6862..6863 " "
+ PARAM@6863..6866
+ DESTRUCT_FULL@6863..6866
+ NAME@6863..6866
+ IDENT@6863..6866 "acc"
+ R_PAREN@6866..6867 ")"
+ WHITESPACE@6867..6868 " "
+ ASSIGN@6868..6869 "="
+ WHITESPACE@6869..6876 "\n "
+ EXPR_IF_THEN_ELSE@6876..7289
+ IF_KW@6876..6878 "if"
+ WHITESPACE@6878..6879 " "
+ EXPR_BINARY@6879..6897
+ LHS_EXPR@6879..6880
+ EXPR_VAR@6879..6880
+ NAME@6879..6880
+ IDENT@6879..6880 "i"
+ WHITESPACE@6880..6881 " "
+ GE@6881..6883 ">="
+ WHITESPACE@6883..6884 " "
+ EXPR_APPLY@6884..6897
+ EXPR_INDEX@6884..6894
+ EXPR_VAR@6884..6887
+ NAME@6884..6887
+ IDENT@6884..6887 "std"
+ DOT@6887..6888 "."
+ NAME@6888..6894
+ IDENT@6888..6894 "length"
+ ARGS_DESC@6894..6897
+ L_PAREN@6894..6895 "("
+ ARG@6895..6896
+ EXPR_VAR@6895..6896
+ NAME@6895..6896
+ IDENT@6895..6896 "a"
+ R_PAREN@6896..6897 ")"
+ WHITESPACE@6897..6898 " "
+ THEN_KW@6898..6902 "then"
+ WHITESPACE@6902..6911 "\n "
+ TRUE_EXPR@6911..6922
+ EXPR_BINARY@6911..6922
+ LHS_EXPR@6911..6914
+ EXPR_VAR@6911..6914
+ NAME@6911..6914
+ IDENT@6911..6914 "acc"
+ WHITESPACE@6914..6915 " "
+ PLUS@6915..6916 "+"
+ WHITESPACE@6916..6917 " "
+ EXPR_SLICE@6917..6922
+ EXPR_VAR@6917..6918
+ NAME@6917..6918
+ IDENT@6917..6918 "b"
+ SLICE_DESC@6918..6922
+ L_BRACK@6918..6919 "["
+ EXPR_VAR@6919..6920
+ NAME@6919..6920
+ IDENT@6919..6920 "j"
+ COLON@6920..6921 ":"
+ R_BRACK@6921..6922 "]"
+ WHITESPACE@6922..6929 "\n "
+ ELSE_KW@6929..6933 "else"
+ WHITESPACE@6933..6934 " "
+ FALSE_EXPR@6934..7289
+ EXPR_IF_THEN_ELSE@6934..7289
+ IF_KW@6934..6936 "if"
+ WHITESPACE@6936..6937 " "
+ EXPR_BINARY@6937..6955
+ LHS_EXPR@6937..6938
+ EXPR_VAR@6937..6938
+ NAME@6937..6938
+ IDENT@6937..6938 "j"
+ WHITESPACE@6938..6939 " "
+ GE@6939..6941 ">="
+ WHITESPACE@6941..6942 " "
+ EXPR_APPLY@6942..6955
+ EXPR_INDEX@6942..6952
+ EXPR_VAR@6942..6945
+ NAME@6942..6945
+ IDENT@6942..6945 "std"
+ DOT@6945..6946 "."
+ NAME@6946..6952
+ IDENT@6946..6952 "length"
+ ARGS_DESC@6952..6955
+ L_PAREN@6952..6953 "("
+ ARG@6953..6954
+ EXPR_VAR@6953..6954
+ NAME@6953..6954
+ IDENT@6953..6954 "b"
+ R_PAREN@6954..6955 ")"
+ WHITESPACE@6955..6956 " "
+ THEN_KW@6956..6960 "then"
+ WHITESPACE@6960..6969 "\n "
+ TRUE_EXPR@6969..6980
+ EXPR_BINARY@6969..6980
+ LHS_EXPR@6969..6972
+ EXPR_VAR@6969..6972
+ NAME@6969..6972
+ IDENT@6969..6972 "acc"
+ WHITESPACE@6972..6973 " "
+ PLUS@6973..6974 "+"
+ WHITESPACE@6974..6975 " "
+ EXPR_SLICE@6975..6980
+ EXPR_VAR@6975..6976
+ NAME@6975..6976
+ IDENT@6975..6976 "a"
+ SLICE_DESC@6976..6980
+ L_BRACK@6976..6977 "["
+ EXPR_VAR@6977..6978
+ NAME@6977..6978
+ IDENT@6977..6978 "i"
+ COLON@6978..6979 ":"
+ R_BRACK@6979..6980 "]"
+ WHITESPACE@6980..6987 "\n "
+ ELSE_KW@6987..6991 "else"
+ WHITESPACE@6991..7000 "\n "
+ FALSE_EXPR@7000..7289
+ EXPR_LOCAL@7000..7289
+ LOCAL_KW@7000..7005 "local"
+ WHITESPACE@7005..7006 " "
+ BIND_DESTRUCT@7006..7021
+ DESTRUCT_FULL@7006..7008
+ NAME@7006..7008
+ IDENT@7006..7008 "ak"
+ WHITESPACE@7008..7009 " "
+ ASSIGN@7009..7010 "="
+ WHITESPACE@7010..7011 " "
+ EXPR_APPLY@7011..7021
+ EXPR_VAR@7011..7015
+ NAME@7011..7015
+ IDENT@7011..7015 "keyF"
+ ARGS_DESC@7015..7021
+ L_PAREN@7015..7016 "("
+ ARG@7016..7020
+ EXPR_INDEX_EXPR@7016..7020
+ LHS_EXPR@7016..7017
+ EXPR_VAR@7016..7017
+ NAME@7016..7017
+ IDENT@7016..7017 "a"
+ L_BRACK@7017..7018 "["
+ EXPR_VAR@7018..7019
+ NAME@7018..7019
+ IDENT@7018..7019 "i"
+ R_BRACK@7019..7020 "]"
+ R_PAREN@7020..7021 ")"
+ SEMI@7021..7022 ";"
+ WHITESPACE@7022..7031 "\n "
+ EXPR_LOCAL@7031..7289
+ LOCAL_KW@7031..7036 "local"
+ WHITESPACE@7036..7037 " "
+ BIND_DESTRUCT@7037..7052
+ DESTRUCT_FULL@7037..7039
+ NAME@7037..7039
+ IDENT@7037..7039 "bk"
+ WHITESPACE@7039..7040 " "
+ ASSIGN@7040..7041 "="
+ WHITESPACE@7041..7042 " "
+ EXPR_APPLY@7042..7052
+ EXPR_VAR@7042..7046
+ NAME@7042..7046
+ IDENT@7042..7046 "keyF"
+ ARGS_DESC@7046..7052
+ L_PAREN@7046..7047 "("
+ ARG@7047..7051
+ EXPR_INDEX_EXPR@7047..7051
+ LHS_EXPR@7047..7048
+ EXPR_VAR@7047..7048
+ NAME@7047..7048
+ IDENT@7047..7048 "b"
+ L_BRACK@7048..7049 "["
+ EXPR_VAR@7049..7050
+ NAME@7049..7050
+ IDENT@7049..7050 "j"
+ R_BRACK@7050..7051 "]"
+ R_PAREN@7051..7052 ")"
+ SEMI@7052..7053 ";"
+ WHITESPACE@7053..7062 "\n "
+ EXPR_IF_THEN_ELSE@7062..7289
+ IF_KW@7062..7064 "if"
+ WHITESPACE@7064..7065 " "
+ EXPR_BINARY@7065..7073
+ LHS_EXPR@7065..7067
+ EXPR_VAR@7065..7067
+ NAME@7065..7067
+ IDENT@7065..7067 "ak"
+ WHITESPACE@7067..7068 " "
+ EQ@7068..7070 "=="
+ WHITESPACE@7070..7071 " "
+ EXPR_VAR@7071..7073
+ NAME@7071..7073
+ IDENT@7071..7073 "bk"
+ WHITESPACE@7073..7074 " "
+ THEN_KW@7074..7078 "then"
+ WHITESPACE@7078..7089 "\n "
+ TRUE_EXPR@7089..7137
+ EXPR_APPLY@7089..7137
+ EXPR_VAR@7089..7092
+ NAME@7089..7092
+ IDENT@7089..7092 "aux"
+ ARGS_DESC@7092..7137
+ L_PAREN@7092..7093 "("
+ ARG@7093..7094
+ EXPR_VAR@7093..7094
+ NAME@7093..7094
+ IDENT@7093..7094 "a"
+ COMMA@7094..7095 ","
+ WHITESPACE@7095..7096 " "
+ ARG@7096..7097
+ EXPR_VAR@7096..7097
+ NAME@7096..7097
+ IDENT@7096..7097 "b"
+ COMMA@7097..7098 ","
+ WHITESPACE@7098..7099 " "
+ ARG@7099..7104
+ EXPR_BINARY@7099..7104
+ LHS_EXPR@7099..7100
+ EXPR_VAR@7099..7100
+ NAME@7099..7100
+ IDENT@7099..7100 "i"
+ WHITESPACE@7100..7101 " "
+ PLUS@7101..7102 "+"
+ WHITESPACE@7102..7103 " "
+ EXPR_NUMBER@7103..7104
+ FLOAT@7103..7104 "1"
+ COMMA@7104..7105 ","
+ WHITESPACE@7105..7106 " "
+ ARG@7106..7111
+ EXPR_BINARY@7106..7111
+ LHS_EXPR@7106..7107
+ EXPR_VAR@7106..7107
+ NAME@7106..7107
+ IDENT@7106..7107 "j"
+ WHITESPACE@7107..7108 " "
+ PLUS@7108..7109 "+"
+ WHITESPACE@7109..7110 " "
+ EXPR_NUMBER@7110..7111
+ FLOAT@7110..7111 "1"
+ COMMA@7111..7112 ","
+ WHITESPACE@7112..7113 " "
+ ARG@7113..7125
+ EXPR_BINARY@7113..7125
+ LHS_EXPR@7113..7116
+ EXPR_VAR@7113..7116
+ NAME@7113..7116
+ IDENT@7113..7116 "acc"
+ WHITESPACE@7116..7117 " "
+ PLUS@7117..7118 "+"
+ WHITESPACE@7118..7119 " "
+ EXPR_ARRAY@7119..7125
+ L_BRACK@7119..7120 "["
+ EXPR_INDEX_EXPR@7120..7124
+ LHS_EXPR@7120..7121
+ EXPR_VAR@7120..7121
+ NAME@7120..7121
+ IDENT@7120..7121 "a"
+ L_BRACK@7121..7122 "["
+ EXPR_VAR@7122..7123
+ NAME@7122..7123
+ IDENT@7122..7123 "i"
+ R_BRACK@7123..7124 "]"
+ R_BRACK@7124..7125 "]"
+ R_PAREN@7125..7126 ")"
+ WHITESPACE@7126..7127 " "
+ TAILSTRICT_KW@7127..7137 "tailstrict"
+ WHITESPACE@7137..7146 "\n "
+ ELSE_KW@7146..7150 "else"
+ WHITESPACE@7150..7151 " "
+ FALSE_EXPR@7151..7289
+ EXPR_IF_THEN_ELSE@7151..7289
+ IF_KW@7151..7153 "if"
+ WHITESPACE@7153..7154 " "
+ EXPR_BINARY@7154..7161
+ LHS_EXPR@7154..7156
+ EXPR_VAR@7154..7156
+ NAME@7154..7156
+ IDENT@7154..7156 "ak"
+ WHITESPACE@7156..7157 " "
+ LT@7157..7158 "<"
+ WHITESPACE@7158..7159 " "
+ EXPR_VAR@7159..7161
+ NAME@7159..7161
+ IDENT@7159..7161 "bk"
+ WHITESPACE@7161..7162 " "
+ THEN_KW@7162..7166 "then"
+ WHITESPACE@7166..7177 "\n "
+ TRUE_EXPR@7177..7221
+ EXPR_APPLY@7177..7221
+ EXPR_VAR@7177..7180
+ NAME@7177..7180
+ IDENT@7177..7180 "aux"
+ ARGS_DESC@7180..7221
+ L_PAREN@7180..7181 "("
+ ARG@7181..7182
+ EXPR_VAR@7181..7182
+ NAME@7181..7182
+ IDENT@7181..7182 "a"
+ COMMA@7182..7183 ","
+ WHITESPACE@7183..7184 " "
+ ARG@7184..7185
+ EXPR_VAR@7184..7185
+ NAME@7184..7185
+ IDENT@7184..7185 "b"
+ COMMA@7185..7186 ","
+ WHITESPACE@7186..7187 " "
+ ARG@7187..7192
+ EXPR_BINARY@7187..7192
+ LHS_EXPR@7187..7188
+ EXPR_VAR@7187..7188
+ NAME@7187..7188
+ IDENT@7187..7188 "i"
+ WHITESPACE@7188..7189 " "
+ PLUS@7189..7190 "+"
+ WHITESPACE@7190..7191 " "
+ EXPR_NUMBER@7191..7192
+ FLOAT@7191..7192 "1"
+ COMMA@7192..7193 ","
+ WHITESPACE@7193..7194 " "
+ ARG@7194..7195
+ EXPR_VAR@7194..7195
+ NAME@7194..7195
+ IDENT@7194..7195 "j"
+ COMMA@7195..7196 ","
+ WHITESPACE@7196..7197 " "
+ ARG@7197..7209
+ EXPR_BINARY@7197..7209
+ LHS_EXPR@7197..7200
+ EXPR_VAR@7197..7200
+ NAME@7197..7200
+ IDENT@7197..7200 "acc"
+ WHITESPACE@7200..7201 " "
+ PLUS@7201..7202 "+"
+ WHITESPACE@7202..7203 " "
+ EXPR_ARRAY@7203..7209
+ L_BRACK@7203..7204 "["
+ EXPR_INDEX_EXPR@7204..7208
+ LHS_EXPR@7204..7205
+ EXPR_VAR@7204..7205
+ NAME@7204..7205
+ IDENT@7204..7205 "a"
+ L_BRACK@7205..7206 "["
+ EXPR_VAR@7206..7207
+ NAME@7206..7207
+ IDENT@7206..7207 "i"
+ R_BRACK@7207..7208 "]"
+ R_BRACK@7208..7209 "]"
+ R_PAREN@7209..7210 ")"
+ WHITESPACE@7210..7211 " "
+ TAILSTRICT_KW@7211..7221 "tailstrict"
+ WHITESPACE@7221..7230 "\n "
+ ELSE_KW@7230..7234 "else"
+ WHITESPACE@7234..7245 "\n "
+ FALSE_EXPR@7245..7289
+ EXPR_APPLY@7245..7289
+ EXPR_VAR@7245..7248
+ NAME@7245..7248
+ IDENT@7245..7248 "aux"
+ ARGS_DESC@7248..7289
+ L_PAREN@7248..7249 "("
+ ARG@7249..7250
+ EXPR_VAR@7249..7250
+ NAME@7249..7250
+ IDENT@7249..7250 "a"
+ COMMA@7250..7251 ","
+ WHITESPACE@7251..7252 " "
+ ARG@7252..7253
+ EXPR_VAR@7252..7253
+ NAME@7252..7253
+ IDENT@7252..7253 "b"
+ COMMA@7253..7254 ","
+ WHITESPACE@7254..7255 " "
+ ARG@7255..7256
+ EXPR_VAR@7255..7256
+ NAME@7255..7256
+ IDENT@7255..7256 "i"
+ COMMA@7256..7257 ","
+ WHITESPACE@7257..7258 " "
+ ARG@7258..7263
+ EXPR_BINARY@7258..7263
+ LHS_EXPR@7258..7259
+ EXPR_VAR@7258..7259
+ NAME@7258..7259
+ IDENT@7258..7259 "j"
+ WHITESPACE@7259..7260 " "
+ PLUS@7260..7261 "+"
+ WHITESPACE@7261..7262 " "
+ EXPR_NUMBER@7262..7263
+ FLOAT@7262..7263 "1"
+ COMMA@7263..7264 ","
+ WHITESPACE@7264..7265 " "
+ ARG@7265..7277
+ EXPR_BINARY@7265..7277
+ LHS_EXPR@7265..7268
+ EXPR_VAR@7265..7268
+ NAME@7265..7268
+ IDENT@7265..7268 "acc"
+ WHITESPACE@7268..7269 " "
+ PLUS@7269..7270 "+"
+ WHITESPACE@7270..7271 " "
+ EXPR_ARRAY@7271..7277
+ L_BRACK@7271..7272 "["
+ EXPR_INDEX_EXPR@7272..7276
+ LHS_EXPR@7272..7273
+ EXPR_VAR@7272..7273
+ NAME@7272..7273
+ IDENT@7272..7273 "b"
+ L_BRACK@7273..7274 "["
+ EXPR_VAR@7274..7275
+ NAME@7274..7275
+ IDENT@7274..7275 "j"
+ R_BRACK@7275..7276 "]"
+ R_BRACK@7276..7277 "]"
+ R_PAREN@7277..7278 ")"
+ WHITESPACE@7278..7279 " "
+ TAILSTRICT_KW@7279..7289 "tailstrict"
+ SEMI@7289..7290 ";"
+ WHITESPACE@7290..7295 "\n "
+ EXPR_APPLY@7295..7314
+ EXPR_VAR@7295..7298
+ NAME@7295..7298
+ IDENT@7295..7298 "aux"
+ ARGS_DESC@7298..7314
+ L_PAREN@7298..7299 "("
+ ARG@7299..7300
+ EXPR_VAR@7299..7300
+ NAME@7299..7300
+ IDENT@7299..7300 "a"
+ COMMA@7300..7301 ","
+ WHITESPACE@7301..7302 " "
+ ARG@7302..7303
+ EXPR_VAR@7302..7303
+ NAME@7302..7303
+ IDENT@7302..7303 "b"
+ COMMA@7303..7304 ","
+ WHITESPACE@7304..7305 " "
+ ARG@7305..7306
+ EXPR_NUMBER@7305..7306
+ FLOAT@7305..7306 "0"
+ COMMA@7306..7307 ","
+ WHITESPACE@7307..7308 " "
+ ARG@7308..7309
+ EXPR_NUMBER@7308..7309
+ FLOAT@7308..7309 "0"
+ COMMA@7309..7310 ","
+ WHITESPACE@7310..7311 " "
+ ARG@7311..7313
+ EXPR_ARRAY@7311..7313
+ L_BRACK@7311..7312 "["
+ R_BRACK@7312..7313 "]"
+ R_PAREN@7313..7314 ")"
COMMA@7314..7315 ","
WHITESPACE@7315..7319 "\n\n "
- MEMBER_FIELD@7319..7741
- FIELD_METHOD@7319..7741
- FIELD_NAME_FIXED@7319..7327
- NAME@7319..7327
- IDENT@7319..7327 "setInter"
- PARAMS_DESC@7327..7342
- L_PAREN@7327..7328 "("
- PARAM@7328..7329
- DESTRUCT_FULL@7328..7329
- NAME@7328..7329
- IDENT@7328..7329 "a"
- COMMA@7329..7330 ","
- WHITESPACE@7330..7331 " "
- PARAM@7331..7332
- DESTRUCT_FULL@7331..7332
- NAME@7331..7332
- IDENT@7331..7332 "b"
- COMMA@7332..7333 ","
- WHITESPACE@7333..7334 " "
- PARAM@7334..7341
- DESTRUCT_FULL@7334..7338
- NAME@7334..7338
- IDENT@7334..7338 "keyF"
- ASSIGN@7338..7339 "="
- EXPR_VAR@7339..7341
- NAME@7339..7341
- IDENT@7339..7341 "id"
- R_PAREN@7341..7342 ")"
- COLONCOLON@7342..7344 "::"
- WHITESPACE@7344..7349 "\n "
- EXPR_LOCAL@7349..7741
- LOCAL_KW@7349..7354 "local"
- WHITESPACE@7354..7355 " "
- BIND_FUNCTION@7355..7705
- NAME@7355..7358
- IDENT@7355..7358 "aux"
- PARAMS_DESC@7358..7375
- L_PAREN@7358..7359 "("
- PARAM@7359..7360
- DESTRUCT_FULL@7359..7360
- NAME@7359..7360
- IDENT@7359..7360 "a"
- COMMA@7360..7361 ","
- WHITESPACE@7361..7362 " "
- PARAM@7362..7363
- DESTRUCT_FULL@7362..7363
- NAME@7362..7363
- IDENT@7362..7363 "b"
- COMMA@7363..7364 ","
- WHITESPACE@7364..7365 " "
- PARAM@7365..7366
- DESTRUCT_FULL@7365..7366
- NAME@7365..7366
- IDENT@7365..7366 "i"
- COMMA@7366..7367 ","
- WHITESPACE@7367..7368 " "
- PARAM@7368..7369
- DESTRUCT_FULL@7368..7369
- NAME@7368..7369
- IDENT@7368..7369 "j"
- COMMA@7369..7370 ","
- WHITESPACE@7370..7371 " "
- PARAM@7371..7374
- DESTRUCT_FULL@7371..7374
- NAME@7371..7374
- IDENT@7371..7374 "acc"
- R_PAREN@7374..7375 ")"
- WHITESPACE@7375..7376 " "
- ASSIGN@7376..7377 "="
- WHITESPACE@7377..7384 "\n "
- EXPR_IF_THEN_ELSE@7384..7705
- IF_KW@7384..7386 "if"
- WHITESPACE@7386..7387 " "
- EXPR_BINARY@7387..7427
- LHS_EXPR@7387..7405
- EXPR_BINARY@7387..7405
- LHS_EXPR@7387..7388
- EXPR_VAR@7387..7388
- NAME@7387..7388
- IDENT@7387..7388 "i"
- WHITESPACE@7388..7389 " "
- GE@7389..7391 ">="
- WHITESPACE@7391..7392 " "
- EXPR_APPLY@7392..7405
- EXPR_INDEX@7392..7402
- EXPR_VAR@7392..7395
- NAME@7392..7395
- IDENT@7392..7395 "std"
- DOT@7395..7396 "."
- NAME@7396..7402
- IDENT@7396..7402 "length"
- ARGS_DESC@7402..7405
- L_PAREN@7402..7403 "("
- ARG@7403..7404
- EXPR_VAR@7403..7404
- NAME@7403..7404
- IDENT@7403..7404 "a"
- R_PAREN@7404..7405 ")"
- WHITESPACE@7405..7406 " "
- OR@7406..7408 "||"
- WHITESPACE@7408..7409 " "
- EXPR_BINARY@7409..7427
- LHS_EXPR@7409..7410
- EXPR_VAR@7409..7410
- NAME@7409..7410
- IDENT@7409..7410 "j"
- WHITESPACE@7410..7411 " "
- GE@7411..7413 ">="
- WHITESPACE@7413..7414 " "
- EXPR_APPLY@7414..7427
- EXPR_INDEX@7414..7424
- EXPR_VAR@7414..7417
- NAME@7414..7417
- IDENT@7414..7417 "std"
- DOT@7417..7418 "."
- NAME@7418..7424
- IDENT@7418..7424 "length"
- ARGS_DESC@7424..7427
- L_PAREN@7424..7425 "("
- ARG@7425..7426
- EXPR_VAR@7425..7426
- NAME@7425..7426
- IDENT@7425..7426 "b"
- R_PAREN@7426..7427 ")"
- WHITESPACE@7427..7428 " "
- THEN_KW@7428..7432 "then"
- WHITESPACE@7432..7441 "\n "
- TRUE_EXPR@7441..7444
- EXPR_VAR@7441..7444
- NAME@7441..7444
- IDENT@7441..7444 "acc"
- WHITESPACE@7444..7451 "\n "
- ELSE_KW@7451..7455 "else"
- WHITESPACE@7455..7464 "\n "
- FALSE_EXPR@7464..7705
- EXPR_IF_THEN_ELSE@7464..7705
- IF_KW@7464..7466 "if"
- WHITESPACE@7466..7467 " "
- EXPR_BINARY@7467..7491
- LHS_EXPR@7467..7477
- EXPR_APPLY@7467..7477
- EXPR_VAR@7467..7471
- NAME@7467..7471
- IDENT@7467..7471 "keyF"
- ARGS_DESC@7471..7477
- L_PAREN@7471..7472 "("
- ARG@7472..7476
- EXPR_INDEX_EXPR@7472..7476
- LHS_EXPR@7472..7473
- EXPR_VAR@7472..7473
- NAME@7472..7473
- IDENT@7472..7473 "a"
- L_BRACK@7473..7474 "["
- EXPR_VAR@7474..7475
- NAME@7474..7475
- IDENT@7474..7475 "i"
- R_BRACK@7475..7476 "]"
- R_PAREN@7476..7477 ")"
- WHITESPACE@7477..7478 " "
- EQ@7478..7480 "=="
- WHITESPACE@7480..7481 " "
- EXPR_APPLY@7481..7491
- EXPR_VAR@7481..7485
- NAME@7481..7485
- IDENT@7481..7485 "keyF"
- ARGS_DESC@7485..7491
- L_PAREN@7485..7486 "("
- ARG@7486..7490
- EXPR_INDEX_EXPR@7486..7490
- LHS_EXPR@7486..7487
- EXPR_VAR@7486..7487
- NAME@7486..7487
- IDENT@7486..7487 "b"
- L_BRACK@7487..7488 "["
- EXPR_VAR@7488..7489
- NAME@7488..7489
- IDENT@7488..7489 "j"
- R_BRACK@7489..7490 "]"
- R_PAREN@7490..7491 ")"
- WHITESPACE@7491..7492 " "
- THEN_KW@7492..7496 "then"
- WHITESPACE@7496..7507 "\n "
- TRUE_EXPR@7507..7555
- EXPR_APPLY@7507..7555
- EXPR_VAR@7507..7510
- NAME@7507..7510
- IDENT@7507..7510 "aux"
- ARGS_DESC@7510..7555
- L_PAREN@7510..7511 "("
- ARG@7511..7512
- EXPR_VAR@7511..7512
- NAME@7511..7512
- IDENT@7511..7512 "a"
- COMMA@7512..7513 ","
- WHITESPACE@7513..7514 " "
- ARG@7514..7515
- EXPR_VAR@7514..7515
- NAME@7514..7515
- IDENT@7514..7515 "b"
- COMMA@7515..7516 ","
- WHITESPACE@7516..7517 " "
- ARG@7517..7522
- EXPR_BINARY@7517..7522
- LHS_EXPR@7517..7518
- EXPR_VAR@7517..7518
- NAME@7517..7518
- IDENT@7517..7518 "i"
- WHITESPACE@7518..7519 " "
- PLUS@7519..7520 "+"
- WHITESPACE@7520..7521 " "
- EXPR_NUMBER@7521..7522
- FLOAT@7521..7522 "1"
- COMMA@7522..7523 ","
- WHITESPACE@7523..7524 " "
- ARG@7524..7529
- EXPR_BINARY@7524..7529
- LHS_EXPR@7524..7525
- EXPR_VAR@7524..7525
- NAME@7524..7525
- IDENT@7524..7525 "j"
- WHITESPACE@7525..7526 " "
- PLUS@7526..7527 "+"
- WHITESPACE@7527..7528 " "
- EXPR_NUMBER@7528..7529
- FLOAT@7528..7529 "1"
- COMMA@7529..7530 ","
- WHITESPACE@7530..7531 " "
- ARG@7531..7543
- EXPR_BINARY@7531..7543
- LHS_EXPR@7531..7534
- EXPR_VAR@7531..7534
- NAME@7531..7534
- IDENT@7531..7534 "acc"
- WHITESPACE@7534..7535 " "
- PLUS@7535..7536 "+"
- WHITESPACE@7536..7537 " "
- EXPR_ARRAY@7537..7543
- L_BRACK@7537..7538 "["
- EXPR_INDEX_EXPR@7538..7542
- LHS_EXPR@7538..7539
- EXPR_VAR@7538..7539
- NAME@7538..7539
- IDENT@7538..7539 "a"
- L_BRACK@7539..7540 "["
- EXPR_VAR@7540..7541
- NAME@7540..7541
- IDENT@7540..7541 "i"
- R_BRACK@7541..7542 "]"
- R_BRACK@7542..7543 "]"
- R_PAREN@7543..7544 ")"
- WHITESPACE@7544..7545 " "
- TAILSTRICT_KW@7545..7555 "tailstrict"
- WHITESPACE@7555..7564 "\n "
- ELSE_KW@7564..7568 "else"
- WHITESPACE@7568..7569 " "
- FALSE_EXPR@7569..7705
- EXPR_IF_THEN_ELSE@7569..7705
- IF_KW@7569..7571 "if"
- WHITESPACE@7571..7572 " "
- EXPR_BINARY@7572..7595
- LHS_EXPR@7572..7582
- EXPR_APPLY@7572..7582
- EXPR_VAR@7572..7576
- NAME@7572..7576
- IDENT@7572..7576 "keyF"
- ARGS_DESC@7576..7582
- L_PAREN@7576..7577 "("
- ARG@7577..7581
- EXPR_INDEX_EXPR@7577..7581
- LHS_EXPR@7577..7578
- EXPR_VAR@7577..7578
- NAME@7577..7578
- IDENT@7577..7578 "a"
- L_BRACK@7578..7579 "["
- EXPR_VAR@7579..7580
- NAME@7579..7580
- IDENT@7579..7580 "i"
- R_BRACK@7580..7581 "]"
- R_PAREN@7581..7582 ")"
- WHITESPACE@7582..7583 " "
- LT@7583..7584 "<"
- WHITESPACE@7584..7585 " "
- EXPR_APPLY@7585..7595
- EXPR_VAR@7585..7589
- NAME@7585..7589
- IDENT@7585..7589 "keyF"
- ARGS_DESC@7589..7595
- L_PAREN@7589..7590 "("
- ARG@7590..7594
- EXPR_INDEX_EXPR@7590..7594
- LHS_EXPR@7590..7591
- EXPR_VAR@7590..7591
- NAME@7590..7591
- IDENT@7590..7591 "b"
- L_BRACK@7591..7592 "["
- EXPR_VAR@7592..7593
- NAME@7592..7593
- IDENT@7592..7593 "j"
- R_BRACK@7593..7594 "]"
- R_PAREN@7594..7595 ")"
- WHITESPACE@7595..7596 " "
- THEN_KW@7596..7600 "then"
- WHITESPACE@7600..7611 "\n "
- TRUE_EXPR@7611..7646
- EXPR_APPLY@7611..7646
- EXPR_VAR@7611..7614
- NAME@7611..7614
- IDENT@7611..7614 "aux"
- ARGS_DESC@7614..7646
- L_PAREN@7614..7615 "("
- ARG@7615..7616
- EXPR_VAR@7615..7616
- NAME@7615..7616
- IDENT@7615..7616 "a"
- COMMA@7616..7617 ","
- WHITESPACE@7617..7618 " "
- ARG@7618..7619
- EXPR_VAR@7618..7619
- NAME@7618..7619
- IDENT@7618..7619 "b"
- COMMA@7619..7620 ","
- WHITESPACE@7620..7621 " "
- ARG@7621..7626
- EXPR_BINARY@7621..7626
- LHS_EXPR@7621..7622
- EXPR_VAR@7621..7622
- NAME@7621..7622
- IDENT@7621..7622 "i"
- WHITESPACE@7622..7623 " "
- PLUS@7623..7624 "+"
- WHITESPACE@7624..7625 " "
- EXPR_NUMBER@7625..7626
- FLOAT@7625..7626 "1"
- COMMA@7626..7627 ","
- WHITESPACE@7627..7628 " "
- ARG@7628..7629
- EXPR_VAR@7628..7629
- NAME@7628..7629
- IDENT@7628..7629 "j"
- COMMA@7629..7630 ","
- WHITESPACE@7630..7631 " "
- ARG@7631..7634
- EXPR_VAR@7631..7634
- NAME@7631..7634
- IDENT@7631..7634 "acc"
- R_PAREN@7634..7635 ")"
- WHITESPACE@7635..7636 " "
- TAILSTRICT_KW@7636..7646 "tailstrict"
- WHITESPACE@7646..7655 "\n "
- ELSE_KW@7655..7659 "else"
- WHITESPACE@7659..7670 "\n "
- FALSE_EXPR@7670..7705
- EXPR_APPLY@7670..7705
- EXPR_VAR@7670..7673
- NAME@7670..7673
- IDENT@7670..7673 "aux"
- ARGS_DESC@7673..7705
- L_PAREN@7673..7674 "("
- ARG@7674..7675
- EXPR_VAR@7674..7675
- NAME@7674..7675
- IDENT@7674..7675 "a"
- COMMA@7675..7676 ","
- WHITESPACE@7676..7677 " "
- ARG@7677..7678
- EXPR_VAR@7677..7678
- NAME@7677..7678
- IDENT@7677..7678 "b"
- COMMA@7678..7679 ","
- WHITESPACE@7679..7680 " "
- ARG@7680..7681
- EXPR_VAR@7680..7681
- NAME@7680..7681
- IDENT@7680..7681 "i"
- COMMA@7681..7682 ","
- WHITESPACE@7682..7683 " "
- ARG@7683..7688
- EXPR_BINARY@7683..7688
- LHS_EXPR@7683..7684
- EXPR_VAR@7683..7684
- NAME@7683..7684
- IDENT@7683..7684 "j"
- WHITESPACE@7684..7685 " "
- PLUS@7685..7686 "+"
- WHITESPACE@7686..7687 " "
- EXPR_NUMBER@7687..7688
- FLOAT@7687..7688 "1"
- COMMA@7688..7689 ","
- WHITESPACE@7689..7690 " "
- ARG@7690..7693
- EXPR_VAR@7690..7693
- NAME@7690..7693
- IDENT@7690..7693 "acc"
- R_PAREN@7693..7694 ")"
- WHITESPACE@7694..7695 " "
- TAILSTRICT_KW@7695..7705 "tailstrict"
- SEMI@7705..7706 ";"
- WHITESPACE@7706..7711 "\n "
- EXPR_APPLY@7711..7741
- EXPR_VAR@7711..7714
- NAME@7711..7714
- IDENT@7711..7714 "aux"
- ARGS_DESC@7714..7741
- L_PAREN@7714..7715 "("
- ARG@7715..7716
- EXPR_VAR@7715..7716
- NAME@7715..7716
- IDENT@7715..7716 "a"
- COMMA@7716..7717 ","
- WHITESPACE@7717..7718 " "
- ARG@7718..7719
- EXPR_VAR@7718..7719
- NAME@7718..7719
- IDENT@7718..7719 "b"
- COMMA@7719..7720 ","
- WHITESPACE@7720..7721 " "
- ARG@7721..7722
- EXPR_NUMBER@7721..7722
- FLOAT@7721..7722 "0"
- COMMA@7722..7723 ","
- WHITESPACE@7723..7724 " "
- ARG@7724..7725
- EXPR_NUMBER@7724..7725
- FLOAT@7724..7725 "0"
- COMMA@7725..7726 ","
- WHITESPACE@7726..7727 " "
- ARG@7727..7729
- EXPR_ARRAY@7727..7729
- L_BRACK@7727..7728 "["
- R_BRACK@7728..7729 "]"
- R_PAREN@7729..7730 ")"
- WHITESPACE@7730..7731 " "
- TAILSTRICT_KW@7731..7741 "tailstrict"
+ MEMBER_FIELD_METHOD@7319..7741
+ FIELD_NAME_FIXED@7319..7327
+ NAME@7319..7327
+ IDENT@7319..7327 "setInter"
+ PARAMS_DESC@7327..7342
+ L_PAREN@7327..7328 "("
+ PARAM@7328..7329
+ DESTRUCT_FULL@7328..7329
+ NAME@7328..7329
+ IDENT@7328..7329 "a"
+ COMMA@7329..7330 ","
+ WHITESPACE@7330..7331 " "
+ PARAM@7331..7332
+ DESTRUCT_FULL@7331..7332
+ NAME@7331..7332
+ IDENT@7331..7332 "b"
+ COMMA@7332..7333 ","
+ WHITESPACE@7333..7334 " "
+ PARAM@7334..7341
+ DESTRUCT_FULL@7334..7338
+ NAME@7334..7338
+ IDENT@7334..7338 "keyF"
+ ASSIGN@7338..7339 "="
+ EXPR_VAR@7339..7341
+ NAME@7339..7341
+ IDENT@7339..7341 "id"
+ R_PAREN@7341..7342 ")"
+ COLONCOLON@7342..7344 "::"
+ WHITESPACE@7344..7349 "\n "
+ EXPR_LOCAL@7349..7741
+ LOCAL_KW@7349..7354 "local"
+ WHITESPACE@7354..7355 " "
+ BIND_FUNCTION@7355..7705
+ NAME@7355..7358
+ IDENT@7355..7358 "aux"
+ PARAMS_DESC@7358..7375
+ L_PAREN@7358..7359 "("
+ PARAM@7359..7360
+ DESTRUCT_FULL@7359..7360
+ NAME@7359..7360
+ IDENT@7359..7360 "a"
+ COMMA@7360..7361 ","
+ WHITESPACE@7361..7362 " "
+ PARAM@7362..7363
+ DESTRUCT_FULL@7362..7363
+ NAME@7362..7363
+ IDENT@7362..7363 "b"
+ COMMA@7363..7364 ","
+ WHITESPACE@7364..7365 " "
+ PARAM@7365..7366
+ DESTRUCT_FULL@7365..7366
+ NAME@7365..7366
+ IDENT@7365..7366 "i"
+ COMMA@7366..7367 ","
+ WHITESPACE@7367..7368 " "
+ PARAM@7368..7369
+ DESTRUCT_FULL@7368..7369
+ NAME@7368..7369
+ IDENT@7368..7369 "j"
+ COMMA@7369..7370 ","
+ WHITESPACE@7370..7371 " "
+ PARAM@7371..7374
+ DESTRUCT_FULL@7371..7374
+ NAME@7371..7374
+ IDENT@7371..7374 "acc"
+ R_PAREN@7374..7375 ")"
+ WHITESPACE@7375..7376 " "
+ ASSIGN@7376..7377 "="
+ WHITESPACE@7377..7384 "\n "
+ EXPR_IF_THEN_ELSE@7384..7705
+ IF_KW@7384..7386 "if"
+ WHITESPACE@7386..7387 " "
+ EXPR_BINARY@7387..7427
+ LHS_EXPR@7387..7405
+ EXPR_BINARY@7387..7405
+ LHS_EXPR@7387..7388
+ EXPR_VAR@7387..7388
+ NAME@7387..7388
+ IDENT@7387..7388 "i"
+ WHITESPACE@7388..7389 " "
+ GE@7389..7391 ">="
+ WHITESPACE@7391..7392 " "
+ EXPR_APPLY@7392..7405
+ EXPR_INDEX@7392..7402
+ EXPR_VAR@7392..7395
+ NAME@7392..7395
+ IDENT@7392..7395 "std"
+ DOT@7395..7396 "."
+ NAME@7396..7402
+ IDENT@7396..7402 "length"
+ ARGS_DESC@7402..7405
+ L_PAREN@7402..7403 "("
+ ARG@7403..7404
+ EXPR_VAR@7403..7404
+ NAME@7403..7404
+ IDENT@7403..7404 "a"
+ R_PAREN@7404..7405 ")"
+ WHITESPACE@7405..7406 " "
+ OR@7406..7408 "||"
+ WHITESPACE@7408..7409 " "
+ EXPR_BINARY@7409..7427
+ LHS_EXPR@7409..7410
+ EXPR_VAR@7409..7410
+ NAME@7409..7410
+ IDENT@7409..7410 "j"
+ WHITESPACE@7410..7411 " "
+ GE@7411..7413 ">="
+ WHITESPACE@7413..7414 " "
+ EXPR_APPLY@7414..7427
+ EXPR_INDEX@7414..7424
+ EXPR_VAR@7414..7417
+ NAME@7414..7417
+ IDENT@7414..7417 "std"
+ DOT@7417..7418 "."
+ NAME@7418..7424
+ IDENT@7418..7424 "length"
+ ARGS_DESC@7424..7427
+ L_PAREN@7424..7425 "("
+ ARG@7425..7426
+ EXPR_VAR@7425..7426
+ NAME@7425..7426
+ IDENT@7425..7426 "b"
+ R_PAREN@7426..7427 ")"
+ WHITESPACE@7427..7428 " "
+ THEN_KW@7428..7432 "then"
+ WHITESPACE@7432..7441 "\n "
+ TRUE_EXPR@7441..7444
+ EXPR_VAR@7441..7444
+ NAME@7441..7444
+ IDENT@7441..7444 "acc"
+ WHITESPACE@7444..7451 "\n "
+ ELSE_KW@7451..7455 "else"
+ WHITESPACE@7455..7464 "\n "
+ FALSE_EXPR@7464..7705
+ EXPR_IF_THEN_ELSE@7464..7705
+ IF_KW@7464..7466 "if"
+ WHITESPACE@7466..7467 " "
+ EXPR_BINARY@7467..7491
+ LHS_EXPR@7467..7477
+ EXPR_APPLY@7467..7477
+ EXPR_VAR@7467..7471
+ NAME@7467..7471
+ IDENT@7467..7471 "keyF"
+ ARGS_DESC@7471..7477
+ L_PAREN@7471..7472 "("
+ ARG@7472..7476
+ EXPR_INDEX_EXPR@7472..7476
+ LHS_EXPR@7472..7473
+ EXPR_VAR@7472..7473
+ NAME@7472..7473
+ IDENT@7472..7473 "a"
+ L_BRACK@7473..7474 "["
+ EXPR_VAR@7474..7475
+ NAME@7474..7475
+ IDENT@7474..7475 "i"
+ R_BRACK@7475..7476 "]"
+ R_PAREN@7476..7477 ")"
+ WHITESPACE@7477..7478 " "
+ EQ@7478..7480 "=="
+ WHITESPACE@7480..7481 " "
+ EXPR_APPLY@7481..7491
+ EXPR_VAR@7481..7485
+ NAME@7481..7485
+ IDENT@7481..7485 "keyF"
+ ARGS_DESC@7485..7491
+ L_PAREN@7485..7486 "("
+ ARG@7486..7490
+ EXPR_INDEX_EXPR@7486..7490
+ LHS_EXPR@7486..7487
+ EXPR_VAR@7486..7487
+ NAME@7486..7487
+ IDENT@7486..7487 "b"
+ L_BRACK@7487..7488 "["
+ EXPR_VAR@7488..7489
+ NAME@7488..7489
+ IDENT@7488..7489 "j"
+ R_BRACK@7489..7490 "]"
+ R_PAREN@7490..7491 ")"
+ WHITESPACE@7491..7492 " "
+ THEN_KW@7492..7496 "then"
+ WHITESPACE@7496..7507 "\n "
+ TRUE_EXPR@7507..7555
+ EXPR_APPLY@7507..7555
+ EXPR_VAR@7507..7510
+ NAME@7507..7510
+ IDENT@7507..7510 "aux"
+ ARGS_DESC@7510..7555
+ L_PAREN@7510..7511 "("
+ ARG@7511..7512
+ EXPR_VAR@7511..7512
+ NAME@7511..7512
+ IDENT@7511..7512 "a"
+ COMMA@7512..7513 ","
+ WHITESPACE@7513..7514 " "
+ ARG@7514..7515
+ EXPR_VAR@7514..7515
+ NAME@7514..7515
+ IDENT@7514..7515 "b"
+ COMMA@7515..7516 ","
+ WHITESPACE@7516..7517 " "
+ ARG@7517..7522
+ EXPR_BINARY@7517..7522
+ LHS_EXPR@7517..7518
+ EXPR_VAR@7517..7518
+ NAME@7517..7518
+ IDENT@7517..7518 "i"
+ WHITESPACE@7518..7519 " "
+ PLUS@7519..7520 "+"
+ WHITESPACE@7520..7521 " "
+ EXPR_NUMBER@7521..7522
+ FLOAT@7521..7522 "1"
+ COMMA@7522..7523 ","
+ WHITESPACE@7523..7524 " "
+ ARG@7524..7529
+ EXPR_BINARY@7524..7529
+ LHS_EXPR@7524..7525
+ EXPR_VAR@7524..7525
+ NAME@7524..7525
+ IDENT@7524..7525 "j"
+ WHITESPACE@7525..7526 " "
+ PLUS@7526..7527 "+"
+ WHITESPACE@7527..7528 " "
+ EXPR_NUMBER@7528..7529
+ FLOAT@7528..7529 "1"
+ COMMA@7529..7530 ","
+ WHITESPACE@7530..7531 " "
+ ARG@7531..7543
+ EXPR_BINARY@7531..7543
+ LHS_EXPR@7531..7534
+ EXPR_VAR@7531..7534
+ NAME@7531..7534
+ IDENT@7531..7534 "acc"
+ WHITESPACE@7534..7535 " "
+ PLUS@7535..7536 "+"
+ WHITESPACE@7536..7537 " "
+ EXPR_ARRAY@7537..7543
+ L_BRACK@7537..7538 "["
+ EXPR_INDEX_EXPR@7538..7542
+ LHS_EXPR@7538..7539
+ EXPR_VAR@7538..7539
+ NAME@7538..7539
+ IDENT@7538..7539 "a"
+ L_BRACK@7539..7540 "["
+ EXPR_VAR@7540..7541
+ NAME@7540..7541
+ IDENT@7540..7541 "i"
+ R_BRACK@7541..7542 "]"
+ R_BRACK@7542..7543 "]"
+ R_PAREN@7543..7544 ")"
+ WHITESPACE@7544..7545 " "
+ TAILSTRICT_KW@7545..7555 "tailstrict"
+ WHITESPACE@7555..7564 "\n "
+ ELSE_KW@7564..7568 "else"
+ WHITESPACE@7568..7569 " "
+ FALSE_EXPR@7569..7705
+ EXPR_IF_THEN_ELSE@7569..7705
+ IF_KW@7569..7571 "if"
+ WHITESPACE@7571..7572 " "
+ EXPR_BINARY@7572..7595
+ LHS_EXPR@7572..7582
+ EXPR_APPLY@7572..7582
+ EXPR_VAR@7572..7576
+ NAME@7572..7576
+ IDENT@7572..7576 "keyF"
+ ARGS_DESC@7576..7582
+ L_PAREN@7576..7577 "("
+ ARG@7577..7581
+ EXPR_INDEX_EXPR@7577..7581
+ LHS_EXPR@7577..7578
+ EXPR_VAR@7577..7578
+ NAME@7577..7578
+ IDENT@7577..7578 "a"
+ L_BRACK@7578..7579 "["
+ EXPR_VAR@7579..7580
+ NAME@7579..7580
+ IDENT@7579..7580 "i"
+ R_BRACK@7580..7581 "]"
+ R_PAREN@7581..7582 ")"
+ WHITESPACE@7582..7583 " "
+ LT@7583..7584 "<"
+ WHITESPACE@7584..7585 " "
+ EXPR_APPLY@7585..7595
+ EXPR_VAR@7585..7589
+ NAME@7585..7589
+ IDENT@7585..7589 "keyF"
+ ARGS_DESC@7589..7595
+ L_PAREN@7589..7590 "("
+ ARG@7590..7594
+ EXPR_INDEX_EXPR@7590..7594
+ LHS_EXPR@7590..7591
+ EXPR_VAR@7590..7591
+ NAME@7590..7591
+ IDENT@7590..7591 "b"
+ L_BRACK@7591..7592 "["
+ EXPR_VAR@7592..7593
+ NAME@7592..7593
+ IDENT@7592..7593 "j"
+ R_BRACK@7593..7594 "]"
+ R_PAREN@7594..7595 ")"
+ WHITESPACE@7595..7596 " "
+ THEN_KW@7596..7600 "then"
+ WHITESPACE@7600..7611 "\n "
+ TRUE_EXPR@7611..7646
+ EXPR_APPLY@7611..7646
+ EXPR_VAR@7611..7614
+ NAME@7611..7614
+ IDENT@7611..7614 "aux"
+ ARGS_DESC@7614..7646
+ L_PAREN@7614..7615 "("
+ ARG@7615..7616
+ EXPR_VAR@7615..7616
+ NAME@7615..7616
+ IDENT@7615..7616 "a"
+ COMMA@7616..7617 ","
+ WHITESPACE@7617..7618 " "
+ ARG@7618..7619
+ EXPR_VAR@7618..7619
+ NAME@7618..7619
+ IDENT@7618..7619 "b"
+ COMMA@7619..7620 ","
+ WHITESPACE@7620..7621 " "
+ ARG@7621..7626
+ EXPR_BINARY@7621..7626
+ LHS_EXPR@7621..7622
+ EXPR_VAR@7621..7622
+ NAME@7621..7622
+ IDENT@7621..7622 "i"
+ WHITESPACE@7622..7623 " "
+ PLUS@7623..7624 "+"
+ WHITESPACE@7624..7625 " "
+ EXPR_NUMBER@7625..7626
+ FLOAT@7625..7626 "1"
+ COMMA@7626..7627 ","
+ WHITESPACE@7627..7628 " "
+ ARG@7628..7629
+ EXPR_VAR@7628..7629
+ NAME@7628..7629
+ IDENT@7628..7629 "j"
+ COMMA@7629..7630 ","
+ WHITESPACE@7630..7631 " "
+ ARG@7631..7634
+ EXPR_VAR@7631..7634
+ NAME@7631..7634
+ IDENT@7631..7634 "acc"
+ R_PAREN@7634..7635 ")"
+ WHITESPACE@7635..7636 " "
+ TAILSTRICT_KW@7636..7646 "tailstrict"
+ WHITESPACE@7646..7655 "\n "
+ ELSE_KW@7655..7659 "else"
+ WHITESPACE@7659..7670 "\n "
+ FALSE_EXPR@7670..7705
+ EXPR_APPLY@7670..7705
+ EXPR_VAR@7670..7673
+ NAME@7670..7673
+ IDENT@7670..7673 "aux"
+ ARGS_DESC@7673..7705
+ L_PAREN@7673..7674 "("
+ ARG@7674..7675
+ EXPR_VAR@7674..7675
+ NAME@7674..7675
+ IDENT@7674..7675 "a"
+ COMMA@7675..7676 ","
+ WHITESPACE@7676..7677 " "
+ ARG@7677..7678
+ EXPR_VAR@7677..7678
+ NAME@7677..7678
+ IDENT@7677..7678 "b"
+ COMMA@7678..7679 ","
+ WHITESPACE@7679..7680 " "
+ ARG@7680..7681
+ EXPR_VAR@7680..7681
+ NAME@7680..7681
+ IDENT@7680..7681 "i"
+ COMMA@7681..7682 ","
+ WHITESPACE@7682..7683 " "
+ ARG@7683..7688
+ EXPR_BINARY@7683..7688
+ LHS_EXPR@7683..7684
+ EXPR_VAR@7683..7684
+ NAME@7683..7684
+ IDENT@7683..7684 "j"
+ WHITESPACE@7684..7685 " "
+ PLUS@7685..7686 "+"
+ WHITESPACE@7686..7687 " "
+ EXPR_NUMBER@7687..7688
+ FLOAT@7687..7688 "1"
+ COMMA@7688..7689 ","
+ WHITESPACE@7689..7690 " "
+ ARG@7690..7693
+ EXPR_VAR@7690..7693
+ NAME@7690..7693
+ IDENT@7690..7693 "acc"
+ R_PAREN@7693..7694 ")"
+ WHITESPACE@7694..7695 " "
+ TAILSTRICT_KW@7695..7705 "tailstrict"
+ SEMI@7705..7706 ";"
+ WHITESPACE@7706..7711 "\n "
+ EXPR_APPLY@7711..7741
+ EXPR_VAR@7711..7714
+ NAME@7711..7714
+ IDENT@7711..7714 "aux"
+ ARGS_DESC@7714..7741
+ L_PAREN@7714..7715 "("
+ ARG@7715..7716
+ EXPR_VAR@7715..7716
+ NAME@7715..7716
+ IDENT@7715..7716 "a"
+ COMMA@7716..7717 ","
+ WHITESPACE@7717..7718 " "
+ ARG@7718..7719
+ EXPR_VAR@7718..7719
+ NAME@7718..7719
+ IDENT@7718..7719 "b"
+ COMMA@7719..7720 ","
+ WHITESPACE@7720..7721 " "
+ ARG@7721..7722
+ EXPR_NUMBER@7721..7722
+ FLOAT@7721..7722 "0"
+ COMMA@7722..7723 ","
+ WHITESPACE@7723..7724 " "
+ ARG@7724..7725
+ EXPR_NUMBER@7724..7725
+ FLOAT@7724..7725 "0"
+ COMMA@7725..7726 ","
+ WHITESPACE@7726..7727 " "
+ ARG@7727..7729
+ EXPR_ARRAY@7727..7729
+ L_BRACK@7727..7728 "["
+ R_BRACK@7728..7729 "]"
+ R_PAREN@7729..7730 ")"
+ WHITESPACE@7730..7731 " "
+ TAILSTRICT_KW@7731..7741 "tailstrict"
COMMA@7741..7742 ","
WHITESPACE@7742..7746 "\n\n "
- MEMBER_FIELD@7746..8203
- FIELD_METHOD@7746..8203
- FIELD_NAME_FIXED@7746..7753
- NAME@7746..7753
- IDENT@7746..7753 "setDiff"
- PARAMS_DESC@7753..7768
- L_PAREN@7753..7754 "("
- PARAM@7754..7755
- DESTRUCT_FULL@7754..7755
- NAME@7754..7755
- IDENT@7754..7755 "a"
- COMMA@7755..7756 ","
- WHITESPACE@7756..7757 " "
- PARAM@7757..7758
- DESTRUCT_FULL@7757..7758
- NAME@7757..7758
- IDENT@7757..7758 "b"
- COMMA@7758..7759 ","
- WHITESPACE@7759..7760 " "
- PARAM@7760..7767
- DESTRUCT_FULL@7760..7764
- NAME@7760..7764
- IDENT@7760..7764 "keyF"
- ASSIGN@7764..7765 "="
- EXPR_VAR@7765..7767
- NAME@7765..7767
- IDENT@7765..7767 "id"
- R_PAREN@7767..7768 ")"
- COLONCOLON@7768..7770 "::"
- WHITESPACE@7770..7775 "\n "
- EXPR_LOCAL@7775..8203
- LOCAL_KW@7775..7780 "local"
- WHITESPACE@7780..7781 " "
- BIND_FUNCTION@7781..8167
- NAME@7781..7784
- IDENT@7781..7784 "aux"
- PARAMS_DESC@7784..7801
- L_PAREN@7784..7785 "("
- PARAM@7785..7786
- DESTRUCT_FULL@7785..7786
- NAME@7785..7786
- IDENT@7785..7786 "a"
- COMMA@7786..7787 ","
- WHITESPACE@7787..7788 " "
- PARAM@7788..7789
- DESTRUCT_FULL@7788..7789
- NAME@7788..7789
- IDENT@7788..7789 "b"
- COMMA@7789..7790 ","
- WHITESPACE@7790..7791 " "
- PARAM@7791..7792
- DESTRUCT_FULL@7791..7792
- NAME@7791..7792
- IDENT@7791..7792 "i"
- COMMA@7792..7793 ","
- WHITESPACE@7793..7794 " "
- PARAM@7794..7795
- DESTRUCT_FULL@7794..7795
- NAME@7794..7795
- IDENT@7794..7795 "j"
- COMMA@7795..7796 ","
- WHITESPACE@7796..7797 " "
- PARAM@7797..7800
- DESTRUCT_FULL@7797..7800
- NAME@7797..7800
- IDENT@7797..7800 "acc"
- R_PAREN@7800..7801 ")"
- WHITESPACE@7801..7802 " "
- ASSIGN@7802..7803 "="
- WHITESPACE@7803..7810 "\n "
- EXPR_IF_THEN_ELSE@7810..8167
- IF_KW@7810..7812 "if"
- WHITESPACE@7812..7813 " "
- EXPR_BINARY@7813..7831
- LHS_EXPR@7813..7814
- EXPR_VAR@7813..7814
- NAME@7813..7814
- IDENT@7813..7814 "i"
- WHITESPACE@7814..7815 " "
- GE@7815..7817 ">="
- WHITESPACE@7817..7818 " "
- EXPR_APPLY@7818..7831
- EXPR_INDEX@7818..7828
- EXPR_VAR@7818..7821
- NAME@7818..7821
- IDENT@7818..7821 "std"
- DOT@7821..7822 "."
- NAME@7822..7828
- IDENT@7822..7828 "length"
- ARGS_DESC@7828..7831
- L_PAREN@7828..7829 "("
- ARG@7829..7830
- EXPR_VAR@7829..7830
- NAME@7829..7830
- IDENT@7829..7830 "a"
- R_PAREN@7830..7831 ")"
- WHITESPACE@7831..7832 " "
- THEN_KW@7832..7836 "then"
- WHITESPACE@7836..7845 "\n "
- TRUE_EXPR@7845..7848
- EXPR_VAR@7845..7848
- NAME@7845..7848
- IDENT@7845..7848 "acc"
- WHITESPACE@7848..7855 "\n "
- ELSE_KW@7855..7859 "else"
- WHITESPACE@7859..7860 " "
- FALSE_EXPR@7860..8167
- EXPR_IF_THEN_ELSE@7860..8167
- IF_KW@7860..7862 "if"
- WHITESPACE@7862..7863 " "
- EXPR_BINARY@7863..7881
- LHS_EXPR@7863..7864
- EXPR_VAR@7863..7864
- NAME@7863..7864
- IDENT@7863..7864 "j"
- WHITESPACE@7864..7865 " "
- GE@7865..7867 ">="
- WHITESPACE@7867..7868 " "
- EXPR_APPLY@7868..7881
- EXPR_INDEX@7868..7878
- EXPR_VAR@7868..7871
- NAME@7868..7871
- IDENT@7868..7871 "std"
- DOT@7871..7872 "."
- NAME@7872..7878
- IDENT@7872..7878 "length"
- ARGS_DESC@7878..7881
- L_PAREN@7878..7879 "("
- ARG@7879..7880
- EXPR_VAR@7879..7880
- NAME@7879..7880
- IDENT@7879..7880 "b"
- R_PAREN@7880..7881 ")"
- WHITESPACE@7881..7882 " "
- THEN_KW@7882..7886 "then"
- WHITESPACE@7886..7895 "\n "
- TRUE_EXPR@7895..7906
- EXPR_BINARY@7895..7906
- LHS_EXPR@7895..7898
- EXPR_VAR@7895..7898
- NAME@7895..7898
- IDENT@7895..7898 "acc"
- WHITESPACE@7898..7899 " "
- PLUS@7899..7900 "+"
- WHITESPACE@7900..7901 " "
- EXPR_SLICE@7901..7906
- EXPR_VAR@7901..7902
- NAME@7901..7902
- IDENT@7901..7902 "a"
- SLICE_DESC@7902..7906
- L_BRACK@7902..7903 "["
- EXPR_VAR@7903..7904
- NAME@7903..7904
- IDENT@7903..7904 "i"
- COLON@7904..7905 ":"
- R_BRACK@7905..7906 "]"
- WHITESPACE@7906..7913 "\n "
- ELSE_KW@7913..7917 "else"
- WHITESPACE@7917..7926 "\n "
- FALSE_EXPR@7926..8167
- EXPR_IF_THEN_ELSE@7926..8167
- IF_KW@7926..7928 "if"
- WHITESPACE@7928..7929 " "
- EXPR_BINARY@7929..7953
- LHS_EXPR@7929..7939
- EXPR_APPLY@7929..7939
- EXPR_VAR@7929..7933
- NAME@7929..7933
- IDENT@7929..7933 "keyF"
- ARGS_DESC@7933..7939
- L_PAREN@7933..7934 "("
- ARG@7934..7938
- EXPR_INDEX_EXPR@7934..7938
- LHS_EXPR@7934..7935
- EXPR_VAR@7934..7935
- NAME@7934..7935
- IDENT@7934..7935 "a"
- L_BRACK@7935..7936 "["
- EXPR_VAR@7936..7937
- NAME@7936..7937
- IDENT@7936..7937 "i"
- R_BRACK@7937..7938 "]"
- R_PAREN@7938..7939 ")"
- WHITESPACE@7939..7940 " "
- EQ@7940..7942 "=="
- WHITESPACE@7942..7943 " "
- EXPR_APPLY@7943..7953
- EXPR_VAR@7943..7947
- NAME@7943..7947
- IDENT@7943..7947 "keyF"
- ARGS_DESC@7947..7953
- L_PAREN@7947..7948 "("
- ARG@7948..7952
- EXPR_INDEX_EXPR@7948..7952
- LHS_EXPR@7948..7949
- EXPR_VAR@7948..7949
- NAME@7948..7949
- IDENT@7948..7949 "b"
- L_BRACK@7949..7950 "["
- EXPR_VAR@7950..7951
- NAME@7950..7951
- IDENT@7950..7951 "j"
- R_BRACK@7951..7952 "]"
- R_PAREN@7952..7953 ")"
- WHITESPACE@7953..7954 " "
- THEN_KW@7954..7958 "then"
- WHITESPACE@7958..7969 "\n "
- TRUE_EXPR@7969..8008
- EXPR_APPLY@7969..8008
- EXPR_VAR@7969..7972
- NAME@7969..7972
- IDENT@7969..7972 "aux"
- ARGS_DESC@7972..8008
- L_PAREN@7972..7973 "("
- ARG@7973..7974
- EXPR_VAR@7973..7974
- NAME@7973..7974
- IDENT@7973..7974 "a"
- COMMA@7974..7975 ","
- WHITESPACE@7975..7976 " "
- ARG@7976..7977
- EXPR_VAR@7976..7977
- NAME@7976..7977
- IDENT@7976..7977 "b"
- COMMA@7977..7978 ","
- WHITESPACE@7978..7979 " "
- ARG@7979..7984
- EXPR_BINARY@7979..7984
- LHS_EXPR@7979..7980
- EXPR_VAR@7979..7980
- NAME@7979..7980
- IDENT@7979..7980 "i"
- WHITESPACE@7980..7981 " "
- PLUS@7981..7982 "+"
- WHITESPACE@7982..7983 " "
- EXPR_NUMBER@7983..7984
- FLOAT@7983..7984 "1"
- COMMA@7984..7985 ","
- WHITESPACE@7985..7986 " "
- ARG@7986..7991
- EXPR_BINARY@7986..7991
- LHS_EXPR@7986..7987
- EXPR_VAR@7986..7987
- NAME@7986..7987
- IDENT@7986..7987 "j"
- WHITESPACE@7987..7988 " "
- PLUS@7988..7989 "+"
- WHITESPACE@7989..7990 " "
- EXPR_NUMBER@7990..7991
- FLOAT@7990..7991 "1"
- COMMA@7991..7992 ","
- WHITESPACE@7992..7993 " "
- ARG@7993..7996
- EXPR_VAR@7993..7996
- NAME@7993..7996
- IDENT@7993..7996 "acc"
- R_PAREN@7996..7997 ")"
- WHITESPACE@7997..7998 " "
- TAILSTRICT_KW@7998..8008 "tailstrict"
- WHITESPACE@8008..8017 "\n "
- ELSE_KW@8017..8021 "else"
- WHITESPACE@8021..8022 " "
- FALSE_EXPR@8022..8167
- EXPR_IF_THEN_ELSE@8022..8167
- IF_KW@8022..8024 "if"
- WHITESPACE@8024..8025 " "
- EXPR_BINARY@8025..8048
- LHS_EXPR@8025..8035
- EXPR_APPLY@8025..8035
- EXPR_VAR@8025..8029
- NAME@8025..8029
- IDENT@8025..8029 "keyF"
- ARGS_DESC@8029..8035
- L_PAREN@8029..8030 "("
- ARG@8030..8034
- EXPR_INDEX_EXPR@8030..8034
- LHS_EXPR@8030..8031
- EXPR_VAR@8030..8031
- NAME@8030..8031
- IDENT@8030..8031 "a"
- L_BRACK@8031..8032 "["
- EXPR_VAR@8032..8033
- NAME@8032..8033
- IDENT@8032..8033 "i"
- R_BRACK@8033..8034 "]"
- R_PAREN@8034..8035 ")"
- WHITESPACE@8035..8036 " "
- LT@8036..8037 "<"
- WHITESPACE@8037..8038 " "
- EXPR_APPLY@8038..8048
- EXPR_VAR@8038..8042
- NAME@8038..8042
- IDENT@8038..8042 "keyF"
- ARGS_DESC@8042..8048
- L_PAREN@8042..8043 "("
- ARG@8043..8047
- EXPR_INDEX_EXPR@8043..8047
- LHS_EXPR@8043..8044
- EXPR_VAR@8043..8044
- NAME@8043..8044
- IDENT@8043..8044 "b"
- L_BRACK@8044..8045 "["
- EXPR_VAR@8045..8046
- NAME@8045..8046
- IDENT@8045..8046 "j"
- R_BRACK@8046..8047 "]"
- R_PAREN@8047..8048 ")"
- WHITESPACE@8048..8049 " "
- THEN_KW@8049..8053 "then"
- WHITESPACE@8053..8064 "\n "
- TRUE_EXPR@8064..8108
- EXPR_APPLY@8064..8108
- EXPR_VAR@8064..8067
- NAME@8064..8067
- IDENT@8064..8067 "aux"
- ARGS_DESC@8067..8108
- L_PAREN@8067..8068 "("
- ARG@8068..8069
- EXPR_VAR@8068..8069
- NAME@8068..8069
- IDENT@8068..8069 "a"
- COMMA@8069..8070 ","
- WHITESPACE@8070..8071 " "
- ARG@8071..8072
- EXPR_VAR@8071..8072
- NAME@8071..8072
- IDENT@8071..8072 "b"
- COMMA@8072..8073 ","
- WHITESPACE@8073..8074 " "
- ARG@8074..8079
- EXPR_BINARY@8074..8079
- LHS_EXPR@8074..8075
- EXPR_VAR@8074..8075
- NAME@8074..8075
- IDENT@8074..8075 "i"
- WHITESPACE@8075..8076 " "
- PLUS@8076..8077 "+"
- WHITESPACE@8077..8078 " "
- EXPR_NUMBER@8078..8079
- FLOAT@8078..8079 "1"
- COMMA@8079..8080 ","
- WHITESPACE@8080..8081 " "
- ARG@8081..8082
- EXPR_VAR@8081..8082
- NAME@8081..8082
- IDENT@8081..8082 "j"
- COMMA@8082..8083 ","
- WHITESPACE@8083..8084 " "
- ARG@8084..8096
- EXPR_BINARY@8084..8096
- LHS_EXPR@8084..8087
- EXPR_VAR@8084..8087
- NAME@8084..8087
- IDENT@8084..8087 "acc"
- WHITESPACE@8087..8088 " "
- PLUS@8088..8089 "+"
- WHITESPACE@8089..8090 " "
- EXPR_ARRAY@8090..8096
- L_BRACK@8090..8091 "["
- EXPR_INDEX_EXPR@8091..8095
- LHS_EXPR@8091..8092
- EXPR_VAR@8091..8092
- NAME@8091..8092
- IDENT@8091..8092 "a"
- L_BRACK@8092..8093 "["
- EXPR_VAR@8093..8094
- NAME@8093..8094
- IDENT@8093..8094 "i"
- R_BRACK@8094..8095 "]"
- R_BRACK@8095..8096 "]"
- R_PAREN@8096..8097 ")"
- WHITESPACE@8097..8098 " "
- TAILSTRICT_KW@8098..8108 "tailstrict"
- WHITESPACE@8108..8117 "\n "
- ELSE_KW@8117..8121 "else"
- WHITESPACE@8121..8132 "\n "
- FALSE_EXPR@8132..8167
- EXPR_APPLY@8132..8167
- EXPR_VAR@8132..8135
- NAME@8132..8135
- IDENT@8132..8135 "aux"
- ARGS_DESC@8135..8167
- L_PAREN@8135..8136 "("
- ARG@8136..8137
- EXPR_VAR@8136..8137
- NAME@8136..8137
- IDENT@8136..8137 "a"
- COMMA@8137..8138 ","
- WHITESPACE@8138..8139 " "
- ARG@8139..8140
- EXPR_VAR@8139..8140
- NAME@8139..8140
- IDENT@8139..8140 "b"
- COMMA@8140..8141 ","
- WHITESPACE@8141..8142 " "
- ARG@8142..8143
- EXPR_VAR@8142..8143
- NAME@8142..8143
- IDENT@8142..8143 "i"
- COMMA@8143..8144 ","
- WHITESPACE@8144..8145 " "
- ARG@8145..8150
- EXPR_BINARY@8145..8150
- LHS_EXPR@8145..8146
- EXPR_VAR@8145..8146
- NAME@8145..8146
- IDENT@8145..8146 "j"
- WHITESPACE@8146..8147 " "
- PLUS@8147..8148 "+"
- WHITESPACE@8148..8149 " "
- EXPR_NUMBER@8149..8150
- FLOAT@8149..8150 "1"
- COMMA@8150..8151 ","
- WHITESPACE@8151..8152 " "
- ARG@8152..8155
- EXPR_VAR@8152..8155
- NAME@8152..8155
- IDENT@8152..8155 "acc"
- R_PAREN@8155..8156 ")"
- WHITESPACE@8156..8157 " "
- TAILSTRICT_KW@8157..8167 "tailstrict"
- SEMI@8167..8168 ";"
- WHITESPACE@8168..8173 "\n "
- EXPR_APPLY@8173..8203
- EXPR_VAR@8173..8176
- NAME@8173..8176
- IDENT@8173..8176 "aux"
- ARGS_DESC@8176..8203
- L_PAREN@8176..8177 "("
- ARG@8177..8178
- EXPR_VAR@8177..8178
- NAME@8177..8178
- IDENT@8177..8178 "a"
- COMMA@8178..8179 ","
- WHITESPACE@8179..8180 " "
- ARG@8180..8181
- EXPR_VAR@8180..8181
- NAME@8180..8181
- IDENT@8180..8181 "b"
- COMMA@8181..8182 ","
- WHITESPACE@8182..8183 " "
- ARG@8183..8184
- EXPR_NUMBER@8183..8184
- FLOAT@8183..8184 "0"
- COMMA@8184..8185 ","
- WHITESPACE@8185..8186 " "
- ARG@8186..8187
- EXPR_NUMBER@8186..8187
- FLOAT@8186..8187 "0"
- COMMA@8187..8188 ","
- WHITESPACE@8188..8189 " "
- ARG@8189..8191
- EXPR_ARRAY@8189..8191
- L_BRACK@8189..8190 "["
- R_BRACK@8190..8191 "]"
- R_PAREN@8191..8192 ")"
- WHITESPACE@8192..8193 " "
- TAILSTRICT_KW@8193..8203 "tailstrict"
+ MEMBER_FIELD_METHOD@7746..8203
+ FIELD_NAME_FIXED@7746..7753
+ NAME@7746..7753
+ IDENT@7746..7753 "setDiff"
+ PARAMS_DESC@7753..7768
+ L_PAREN@7753..7754 "("
+ PARAM@7754..7755
+ DESTRUCT_FULL@7754..7755
+ NAME@7754..7755
+ IDENT@7754..7755 "a"
+ COMMA@7755..7756 ","
+ WHITESPACE@7756..7757 " "
+ PARAM@7757..7758
+ DESTRUCT_FULL@7757..7758
+ NAME@7757..7758
+ IDENT@7757..7758 "b"
+ COMMA@7758..7759 ","
+ WHITESPACE@7759..7760 " "
+ PARAM@7760..7767
+ DESTRUCT_FULL@7760..7764
+ NAME@7760..7764
+ IDENT@7760..7764 "keyF"
+ ASSIGN@7764..7765 "="
+ EXPR_VAR@7765..7767
+ NAME@7765..7767
+ IDENT@7765..7767 "id"
+ R_PAREN@7767..7768 ")"
+ COLONCOLON@7768..7770 "::"
+ WHITESPACE@7770..7775 "\n "
+ EXPR_LOCAL@7775..8203
+ LOCAL_KW@7775..7780 "local"
+ WHITESPACE@7780..7781 " "
+ BIND_FUNCTION@7781..8167
+ NAME@7781..7784
+ IDENT@7781..7784 "aux"
+ PARAMS_DESC@7784..7801
+ L_PAREN@7784..7785 "("
+ PARAM@7785..7786
+ DESTRUCT_FULL@7785..7786
+ NAME@7785..7786
+ IDENT@7785..7786 "a"
+ COMMA@7786..7787 ","
+ WHITESPACE@7787..7788 " "
+ PARAM@7788..7789
+ DESTRUCT_FULL@7788..7789
+ NAME@7788..7789
+ IDENT@7788..7789 "b"
+ COMMA@7789..7790 ","
+ WHITESPACE@7790..7791 " "
+ PARAM@7791..7792
+ DESTRUCT_FULL@7791..7792
+ NAME@7791..7792
+ IDENT@7791..7792 "i"
+ COMMA@7792..7793 ","
+ WHITESPACE@7793..7794 " "
+ PARAM@7794..7795
+ DESTRUCT_FULL@7794..7795
+ NAME@7794..7795
+ IDENT@7794..7795 "j"
+ COMMA@7795..7796 ","
+ WHITESPACE@7796..7797 " "
+ PARAM@7797..7800
+ DESTRUCT_FULL@7797..7800
+ NAME@7797..7800
+ IDENT@7797..7800 "acc"
+ R_PAREN@7800..7801 ")"
+ WHITESPACE@7801..7802 " "
+ ASSIGN@7802..7803 "="
+ WHITESPACE@7803..7810 "\n "
+ EXPR_IF_THEN_ELSE@7810..8167
+ IF_KW@7810..7812 "if"
+ WHITESPACE@7812..7813 " "
+ EXPR_BINARY@7813..7831
+ LHS_EXPR@7813..7814
+ EXPR_VAR@7813..7814
+ NAME@7813..7814
+ IDENT@7813..7814 "i"
+ WHITESPACE@7814..7815 " "
+ GE@7815..7817 ">="
+ WHITESPACE@7817..7818 " "
+ EXPR_APPLY@7818..7831
+ EXPR_INDEX@7818..7828
+ EXPR_VAR@7818..7821
+ NAME@7818..7821
+ IDENT@7818..7821 "std"
+ DOT@7821..7822 "."
+ NAME@7822..7828
+ IDENT@7822..7828 "length"
+ ARGS_DESC@7828..7831
+ L_PAREN@7828..7829 "("
+ ARG@7829..7830
+ EXPR_VAR@7829..7830
+ NAME@7829..7830
+ IDENT@7829..7830 "a"
+ R_PAREN@7830..7831 ")"
+ WHITESPACE@7831..7832 " "
+ THEN_KW@7832..7836 "then"
+ WHITESPACE@7836..7845 "\n "
+ TRUE_EXPR@7845..7848
+ EXPR_VAR@7845..7848
+ NAME@7845..7848
+ IDENT@7845..7848 "acc"
+ WHITESPACE@7848..7855 "\n "
+ ELSE_KW@7855..7859 "else"
+ WHITESPACE@7859..7860 " "
+ FALSE_EXPR@7860..8167
+ EXPR_IF_THEN_ELSE@7860..8167
+ IF_KW@7860..7862 "if"
+ WHITESPACE@7862..7863 " "
+ EXPR_BINARY@7863..7881
+ LHS_EXPR@7863..7864
+ EXPR_VAR@7863..7864
+ NAME@7863..7864
+ IDENT@7863..7864 "j"
+ WHITESPACE@7864..7865 " "
+ GE@7865..7867 ">="
+ WHITESPACE@7867..7868 " "
+ EXPR_APPLY@7868..7881
+ EXPR_INDEX@7868..7878
+ EXPR_VAR@7868..7871
+ NAME@7868..7871
+ IDENT@7868..7871 "std"
+ DOT@7871..7872 "."
+ NAME@7872..7878
+ IDENT@7872..7878 "length"
+ ARGS_DESC@7878..7881
+ L_PAREN@7878..7879 "("
+ ARG@7879..7880
+ EXPR_VAR@7879..7880
+ NAME@7879..7880
+ IDENT@7879..7880 "b"
+ R_PAREN@7880..7881 ")"
+ WHITESPACE@7881..7882 " "
+ THEN_KW@7882..7886 "then"
+ WHITESPACE@7886..7895 "\n "
+ TRUE_EXPR@7895..7906
+ EXPR_BINARY@7895..7906
+ LHS_EXPR@7895..7898
+ EXPR_VAR@7895..7898
+ NAME@7895..7898
+ IDENT@7895..7898 "acc"
+ WHITESPACE@7898..7899 " "
+ PLUS@7899..7900 "+"
+ WHITESPACE@7900..7901 " "
+ EXPR_SLICE@7901..7906
+ EXPR_VAR@7901..7902
+ NAME@7901..7902
+ IDENT@7901..7902 "a"
+ SLICE_DESC@7902..7906
+ L_BRACK@7902..7903 "["
+ EXPR_VAR@7903..7904
+ NAME@7903..7904
+ IDENT@7903..7904 "i"
+ COLON@7904..7905 ":"
+ R_BRACK@7905..7906 "]"
+ WHITESPACE@7906..7913 "\n "
+ ELSE_KW@7913..7917 "else"
+ WHITESPACE@7917..7926 "\n "
+ FALSE_EXPR@7926..8167
+ EXPR_IF_THEN_ELSE@7926..8167
+ IF_KW@7926..7928 "if"
+ WHITESPACE@7928..7929 " "
+ EXPR_BINARY@7929..7953
+ LHS_EXPR@7929..7939
+ EXPR_APPLY@7929..7939
+ EXPR_VAR@7929..7933
+ NAME@7929..7933
+ IDENT@7929..7933 "keyF"
+ ARGS_DESC@7933..7939
+ L_PAREN@7933..7934 "("
+ ARG@7934..7938
+ EXPR_INDEX_EXPR@7934..7938
+ LHS_EXPR@7934..7935
+ EXPR_VAR@7934..7935
+ NAME@7934..7935
+ IDENT@7934..7935 "a"
+ L_BRACK@7935..7936 "["
+ EXPR_VAR@7936..7937
+ NAME@7936..7937
+ IDENT@7936..7937 "i"
+ R_BRACK@7937..7938 "]"
+ R_PAREN@7938..7939 ")"
+ WHITESPACE@7939..7940 " "
+ EQ@7940..7942 "=="
+ WHITESPACE@7942..7943 " "
+ EXPR_APPLY@7943..7953
+ EXPR_VAR@7943..7947
+ NAME@7943..7947
+ IDENT@7943..7947 "keyF"
+ ARGS_DESC@7947..7953
+ L_PAREN@7947..7948 "("
+ ARG@7948..7952
+ EXPR_INDEX_EXPR@7948..7952
+ LHS_EXPR@7948..7949
+ EXPR_VAR@7948..7949
+ NAME@7948..7949
+ IDENT@7948..7949 "b"
+ L_BRACK@7949..7950 "["
+ EXPR_VAR@7950..7951
+ NAME@7950..7951
+ IDENT@7950..7951 "j"
+ R_BRACK@7951..7952 "]"
+ R_PAREN@7952..7953 ")"
+ WHITESPACE@7953..7954 " "
+ THEN_KW@7954..7958 "then"
+ WHITESPACE@7958..7969 "\n "
+ TRUE_EXPR@7969..8008
+ EXPR_APPLY@7969..8008
+ EXPR_VAR@7969..7972
+ NAME@7969..7972
+ IDENT@7969..7972 "aux"
+ ARGS_DESC@7972..8008
+ L_PAREN@7972..7973 "("
+ ARG@7973..7974
+ EXPR_VAR@7973..7974
+ NAME@7973..7974
+ IDENT@7973..7974 "a"
+ COMMA@7974..7975 ","
+ WHITESPACE@7975..7976 " "
+ ARG@7976..7977
+ EXPR_VAR@7976..7977
+ NAME@7976..7977
+ IDENT@7976..7977 "b"
+ COMMA@7977..7978 ","
+ WHITESPACE@7978..7979 " "
+ ARG@7979..7984
+ EXPR_BINARY@7979..7984
+ LHS_EXPR@7979..7980
+ EXPR_VAR@7979..7980
+ NAME@7979..7980
+ IDENT@7979..7980 "i"
+ WHITESPACE@7980..7981 " "
+ PLUS@7981..7982 "+"
+ WHITESPACE@7982..7983 " "
+ EXPR_NUMBER@7983..7984
+ FLOAT@7983..7984 "1"
+ COMMA@7984..7985 ","
+ WHITESPACE@7985..7986 " "
+ ARG@7986..7991
+ EXPR_BINARY@7986..7991
+ LHS_EXPR@7986..7987
+ EXPR_VAR@7986..7987
+ NAME@7986..7987
+ IDENT@7986..7987 "j"
+ WHITESPACE@7987..7988 " "
+ PLUS@7988..7989 "+"
+ WHITESPACE@7989..7990 " "
+ EXPR_NUMBER@7990..7991
+ FLOAT@7990..7991 "1"
+ COMMA@7991..7992 ","
+ WHITESPACE@7992..7993 " "
+ ARG@7993..7996
+ EXPR_VAR@7993..7996
+ NAME@7993..7996
+ IDENT@7993..7996 "acc"
+ R_PAREN@7996..7997 ")"
+ WHITESPACE@7997..7998 " "
+ TAILSTRICT_KW@7998..8008 "tailstrict"
+ WHITESPACE@8008..8017 "\n "
+ ELSE_KW@8017..8021 "else"
+ WHITESPACE@8021..8022 " "
+ FALSE_EXPR@8022..8167
+ EXPR_IF_THEN_ELSE@8022..8167
+ IF_KW@8022..8024 "if"
+ WHITESPACE@8024..8025 " "
+ EXPR_BINARY@8025..8048
+ LHS_EXPR@8025..8035
+ EXPR_APPLY@8025..8035
+ EXPR_VAR@8025..8029
+ NAME@8025..8029
+ IDENT@8025..8029 "keyF"
+ ARGS_DESC@8029..8035
+ L_PAREN@8029..8030 "("
+ ARG@8030..8034
+ EXPR_INDEX_EXPR@8030..8034
+ LHS_EXPR@8030..8031
+ EXPR_VAR@8030..8031
+ NAME@8030..8031
+ IDENT@8030..8031 "a"
+ L_BRACK@8031..8032 "["
+ EXPR_VAR@8032..8033
+ NAME@8032..8033
+ IDENT@8032..8033 "i"
+ R_BRACK@8033..8034 "]"
+ R_PAREN@8034..8035 ")"
+ WHITESPACE@8035..8036 " "
+ LT@8036..8037 "<"
+ WHITESPACE@8037..8038 " "
+ EXPR_APPLY@8038..8048
+ EXPR_VAR@8038..8042
+ NAME@8038..8042
+ IDENT@8038..8042 "keyF"
+ ARGS_DESC@8042..8048
+ L_PAREN@8042..8043 "("
+ ARG@8043..8047
+ EXPR_INDEX_EXPR@8043..8047
+ LHS_EXPR@8043..8044
+ EXPR_VAR@8043..8044
+ NAME@8043..8044
+ IDENT@8043..8044 "b"
+ L_BRACK@8044..8045 "["
+ EXPR_VAR@8045..8046
+ NAME@8045..8046
+ IDENT@8045..8046 "j"
+ R_BRACK@8046..8047 "]"
+ R_PAREN@8047..8048 ")"
+ WHITESPACE@8048..8049 " "
+ THEN_KW@8049..8053 "then"
+ WHITESPACE@8053..8064 "\n "
+ TRUE_EXPR@8064..8108
+ EXPR_APPLY@8064..8108
+ EXPR_VAR@8064..8067
+ NAME@8064..8067
+ IDENT@8064..8067 "aux"
+ ARGS_DESC@8067..8108
+ L_PAREN@8067..8068 "("
+ ARG@8068..8069
+ EXPR_VAR@8068..8069
+ NAME@8068..8069
+ IDENT@8068..8069 "a"
+ COMMA@8069..8070 ","
+ WHITESPACE@8070..8071 " "
+ ARG@8071..8072
+ EXPR_VAR@8071..8072
+ NAME@8071..8072
+ IDENT@8071..8072 "b"
+ COMMA@8072..8073 ","
+ WHITESPACE@8073..8074 " "
+ ARG@8074..8079
+ EXPR_BINARY@8074..8079
+ LHS_EXPR@8074..8075
+ EXPR_VAR@8074..8075
+ NAME@8074..8075
+ IDENT@8074..8075 "i"
+ WHITESPACE@8075..8076 " "
+ PLUS@8076..8077 "+"
+ WHITESPACE@8077..8078 " "
+ EXPR_NUMBER@8078..8079
+ FLOAT@8078..8079 "1"
+ COMMA@8079..8080 ","
+ WHITESPACE@8080..8081 " "
+ ARG@8081..8082
+ EXPR_VAR@8081..8082
+ NAME@8081..8082
+ IDENT@8081..8082 "j"
+ COMMA@8082..8083 ","
+ WHITESPACE@8083..8084 " "
+ ARG@8084..8096
+ EXPR_BINARY@8084..8096
+ LHS_EXPR@8084..8087
+ EXPR_VAR@8084..8087
+ NAME@8084..8087
+ IDENT@8084..8087 "acc"
+ WHITESPACE@8087..8088 " "
+ PLUS@8088..8089 "+"
+ WHITESPACE@8089..8090 " "
+ EXPR_ARRAY@8090..8096
+ L_BRACK@8090..8091 "["
+ EXPR_INDEX_EXPR@8091..8095
+ LHS_EXPR@8091..8092
+ EXPR_VAR@8091..8092
+ NAME@8091..8092
+ IDENT@8091..8092 "a"
+ L_BRACK@8092..8093 "["
+ EXPR_VAR@8093..8094
+ NAME@8093..8094
+ IDENT@8093..8094 "i"
+ R_BRACK@8094..8095 "]"
+ R_BRACK@8095..8096 "]"
+ R_PAREN@8096..8097 ")"
+ WHITESPACE@8097..8098 " "
+ TAILSTRICT_KW@8098..8108 "tailstrict"
+ WHITESPACE@8108..8117 "\n "
+ ELSE_KW@8117..8121 "else"
+ WHITESPACE@8121..8132 "\n "
+ FALSE_EXPR@8132..8167
+ EXPR_APPLY@8132..8167
+ EXPR_VAR@8132..8135
+ NAME@8132..8135
+ IDENT@8132..8135 "aux"
+ ARGS_DESC@8135..8167
+ L_PAREN@8135..8136 "("
+ ARG@8136..8137
+ EXPR_VAR@8136..8137
+ NAME@8136..8137
+ IDENT@8136..8137 "a"
+ COMMA@8137..8138 ","
+ WHITESPACE@8138..8139 " "
+ ARG@8139..8140
+ EXPR_VAR@8139..8140
+ NAME@8139..8140
+ IDENT@8139..8140 "b"
+ COMMA@8140..8141 ","
+ WHITESPACE@8141..8142 " "
+ ARG@8142..8143
+ EXPR_VAR@8142..8143
+ NAME@8142..8143
+ IDENT@8142..8143 "i"
+ COMMA@8143..8144 ","
+ WHITESPACE@8144..8145 " "
+ ARG@8145..8150
+ EXPR_BINARY@8145..8150
+ LHS_EXPR@8145..8146
+ EXPR_VAR@8145..8146
+ NAME@8145..8146
+ IDENT@8145..8146 "j"
+ WHITESPACE@8146..8147 " "
+ PLUS@8147..8148 "+"
+ WHITESPACE@8148..8149 " "
+ EXPR_NUMBER@8149..8150
+ FLOAT@8149..8150 "1"
+ COMMA@8150..8151 ","
+ WHITESPACE@8151..8152 " "
+ ARG@8152..8155
+ EXPR_VAR@8152..8155
+ NAME@8152..8155
+ IDENT@8152..8155 "acc"
+ R_PAREN@8155..8156 ")"
+ WHITESPACE@8156..8157 " "
+ TAILSTRICT_KW@8157..8167 "tailstrict"
+ SEMI@8167..8168 ";"
+ WHITESPACE@8168..8173 "\n "
+ EXPR_APPLY@8173..8203
+ EXPR_VAR@8173..8176
+ NAME@8173..8176
+ IDENT@8173..8176 "aux"
+ ARGS_DESC@8176..8203
+ L_PAREN@8176..8177 "("
+ ARG@8177..8178
+ EXPR_VAR@8177..8178
+ NAME@8177..8178
+ IDENT@8177..8178 "a"
+ COMMA@8178..8179 ","
+ WHITESPACE@8179..8180 " "
+ ARG@8180..8181
+ EXPR_VAR@8180..8181
+ NAME@8180..8181
+ IDENT@8180..8181 "b"
+ COMMA@8181..8182 ","
+ WHITESPACE@8182..8183 " "
+ ARG@8183..8184
+ EXPR_NUMBER@8183..8184
+ FLOAT@8183..8184 "0"
+ COMMA@8184..8185 ","
+ WHITESPACE@8185..8186 " "
+ ARG@8186..8187
+ EXPR_NUMBER@8186..8187
+ FLOAT@8186..8187 "0"
+ COMMA@8187..8188 ","
+ WHITESPACE@8188..8189 " "
+ ARG@8189..8191
+ EXPR_ARRAY@8189..8191
+ L_BRACK@8189..8190 "["
+ R_BRACK@8190..8191 "]"
+ R_PAREN@8191..8192 ")"
+ WHITESPACE@8192..8193 " "
+ TAILSTRICT_KW@8193..8203 "tailstrict"
COMMA@8203..8204 ","
WHITESPACE@8204..8208 "\n\n "
- MEMBER_FIELD@8208..8996
- FIELD_METHOD@8208..8996
- FIELD_NAME_FIXED@8208..8218
- NAME@8208..8218
- IDENT@8208..8218 "mergePatch"
- PARAMS_DESC@8218..8233
- L_PAREN@8218..8219 "("
- PARAM@8219..8225
- DESTRUCT_FULL@8219..8225
- NAME@8219..8225
- IDENT@8219..8225 "target"
- COMMA@8225..8226 ","
- WHITESPACE@8226..8227 " "
- PARAM@8227..8232
- DESTRUCT_FULL@8227..8232
- NAME@8227..8232
- IDENT@8227..8232 "patch"
- R_PAREN@8232..8233 ")"
- COLONCOLON@8233..8235 "::"
- WHITESPACE@8235..8240 "\n "
- EXPR_IF_THEN_ELSE@8240..8996
- IF_KW@8240..8242 "if"
- WHITESPACE@8242..8243 " "
- EXPR_APPLY@8243..8262
- EXPR_INDEX@8243..8255
- EXPR_VAR@8243..8246
- NAME@8243..8246
- IDENT@8243..8246 "std"
- DOT@8246..8247 "."
- NAME@8247..8255
- IDENT@8247..8255 "isObject"
- ARGS_DESC@8255..8262
- L_PAREN@8255..8256 "("
- ARG@8256..8261
- EXPR_VAR@8256..8261
- NAME@8256..8261
- IDENT@8256..8261 "patch"
- R_PAREN@8261..8262 ")"
- WHITESPACE@8262..8263 " "
- THEN_KW@8263..8267 "then"
- WHITESPACE@8267..8274 "\n "
- TRUE_EXPR@8274..8975
- EXPR_LOCAL@8274..8975
- LOCAL_KW@8274..8279 "local"
- WHITESPACE@8279..8280 " "
- BIND_DESTRUCT@8280..8347
- DESTRUCT_FULL@8280..8293
- NAME@8280..8293
- IDENT@8280..8293 "target_object"
- WHITESPACE@8293..8294 " "
- ASSIGN@8294..8295 "="
- WHITESPACE@8295..8304 "\n "
- EXPR_IF_THEN_ELSE@8304..8347
- IF_KW@8304..8306 "if"
- WHITESPACE@8306..8307 " "
- EXPR_APPLY@8307..8327
- EXPR_INDEX@8307..8319
- EXPR_VAR@8307..8310
- NAME@8307..8310
- IDENT@8307..8310 "std"
- DOT@8310..8311 "."
- NAME@8311..8319
- IDENT@8311..8319 "isObject"
- ARGS_DESC@8319..8327
- L_PAREN@8319..8320 "("
- ARG@8320..8326
- EXPR_VAR@8320..8326
- NAME@8320..8326
- IDENT@8320..8326 "target"
- R_PAREN@8326..8327 ")"
- WHITESPACE@8327..8328 " "
- THEN_KW@8328..8332 "then"
- WHITESPACE@8332..8333 " "
- TRUE_EXPR@8333..8339
- EXPR_VAR@8333..8339
- NAME@8333..8339
- IDENT@8333..8339 "target"
- WHITESPACE@8339..8340 " "
- ELSE_KW@8340..8344 "else"
- WHITESPACE@8344..8345 " "
- FALSE_EXPR@8345..8347
- EXPR_OBJECT@8345..8347
- OBJ_BODY_MEMBER_LIST@8345..8347
- L_BRACE@8345..8346 "{"
- R_BRACE@8346..8347 "}"
- SEMI@8347..8348 ";"
- WHITESPACE@8348..8356 "\n\n "
- EXPR_LOCAL@8356..8975
- LOCAL_KW@8356..8361 "local"
- WHITESPACE@8361..8362 " "
- BIND_DESTRUCT@8362..8461
- DESTRUCT_FULL@8362..8375
- NAME@8362..8375
- IDENT@8362..8375 "target_fields"
- WHITESPACE@8375..8376 " "
- ASSIGN@8376..8377 "="
- WHITESPACE@8377..8386 "\n "
- EXPR_IF_THEN_ELSE@8386..8461
- IF_KW@8386..8388 "if"
- WHITESPACE@8388..8389 " "
- EXPR_APPLY@8389..8416
- EXPR_INDEX@8389..8401
- EXPR_VAR@8389..8392
- NAME@8389..8392
- IDENT@8389..8392 "std"
- DOT@8392..8393 "."
- NAME@8393..8401
- IDENT@8393..8401 "isObject"
- ARGS_DESC@8401..8416
- L_PAREN@8401..8402 "("
- ARG@8402..8415
- EXPR_VAR@8402..8415
- NAME@8402..8415
- IDENT@8402..8415 "target_object"
- R_PAREN@8415..8416 ")"
- WHITESPACE@8416..8417 " "
- THEN_KW@8417..8421 "then"
- WHITESPACE@8421..8422 " "
- TRUE_EXPR@8422..8453
- EXPR_APPLY@8422..8453
- EXPR_INDEX@8422..8438
- EXPR_VAR@8422..8425
- NAME@8422..8425
- IDENT@8422..8425 "std"
- DOT@8425..8426 "."
- NAME@8426..8438
- IDENT@8426..8438 "objectFields"
- ARGS_DESC@8438..8453
- L_PAREN@8438..8439 "("
- ARG@8439..8452
- EXPR_VAR@8439..8452
- NAME@8439..8452
- IDENT@8439..8452 "target_object"
- R_PAREN@8452..8453 ")"
- WHITESPACE@8453..8454 " "
- ELSE_KW@8454..8458 "else"
- WHITESPACE@8458..8459 " "
- FALSE_EXPR@8459..8461
- EXPR_ARRAY@8459..8461
- L_BRACK@8459..8460 "["
- R_BRACK@8460..8461 "]"
- SEMI@8461..8462 ";"
- WHITESPACE@8462..8470 "\n\n "
- EXPR_LOCAL@8470..8975
- LOCAL_KW@8470..8475 "local"
- WHITESPACE@8475..8476 " "
- BIND_DESTRUCT@8476..8546
- DESTRUCT_FULL@8476..8487
- NAME@8476..8487
- IDENT@8476..8487 "null_fields"
- WHITESPACE@8487..8488 " "
- ASSIGN@8488..8489 "="
- WHITESPACE@8489..8490 " "
- EXPR_ARRAY_COMP@8490..8546
- L_BRACK@8490..8491 "["
- EXPR_VAR@8491..8492
- NAME@8491..8492
- IDENT@8491..8492 "k"
- WHITESPACE@8492..8493 " "
- FOR_SPEC@8493..8525
- FOR_KW@8493..8496 "for"
- WHITESPACE@8496..8497 " "
- NAME@8497..8498
- IDENT@8497..8498 "k"
- WHITESPACE@8498..8499 " "
- IN_KW@8499..8501 "in"
- WHITESPACE@8501..8502 " "
- EXPR_APPLY@8502..8525
- EXPR_INDEX@8502..8518
- EXPR_VAR@8502..8505
- NAME@8502..8505
- IDENT@8502..8505 "std"
- DOT@8505..8506 "."
- NAME@8506..8518
- IDENT@8506..8518 "objectFields"
- ARGS_DESC@8518..8525
- L_PAREN@8518..8519 "("
- ARG@8519..8524
- EXPR_VAR@8519..8524
- NAME@8519..8524
- IDENT@8519..8524 "patch"
- R_PAREN@8524..8525 ")"
- WHITESPACE@8525..8526 " "
- IF_SPEC@8526..8545
- IF_KW@8526..8528 "if"
- WHITESPACE@8528..8529 " "
- EXPR_BINARY@8529..8545
- LHS_EXPR@8529..8537
- EXPR_INDEX_EXPR@8529..8537
- LHS_EXPR@8529..8534
- EXPR_VAR@8529..8534
- NAME@8529..8534
- IDENT@8529..8534 "patch"
- L_BRACK@8534..8535 "["
- EXPR_VAR@8535..8536
- NAME@8535..8536
- IDENT@8535..8536 "k"
- R_BRACK@8536..8537 "]"
- WHITESPACE@8537..8538 " "
- EQ@8538..8540 "=="
- WHITESPACE@8540..8541 " "
- EXPR_LITERAL@8541..8545
- NULL_KW@8541..8545 "null"
- R_BRACK@8545..8546 "]"
- SEMI@8546..8547 ";"
- WHITESPACE@8547..8554 "\n "
- EXPR_LOCAL@8554..8975
- LOCAL_KW@8554..8559 "local"
- WHITESPACE@8559..8560 " "
- BIND_DESTRUCT@8560..8626
- DESTRUCT_FULL@8560..8571
- NAME@8560..8571
- IDENT@8560..8571 "both_fields"
- WHITESPACE@8571..8572 " "
- ASSIGN@8572..8573 "="
- WHITESPACE@8573..8574 " "
- EXPR_APPLY@8574..8626
- EXPR_INDEX@8574..8586
- EXPR_VAR@8574..8577
- NAME@8574..8577
- IDENT@8574..8577 "std"
- DOT@8577..8578 "."
- NAME@8578..8586
- IDENT@8578..8586 "setUnion"
- ARGS_DESC@8586..8626
- L_PAREN@8586..8587 "("
- ARG@8587..8600
- EXPR_VAR@8587..8600
- NAME@8587..8600
- IDENT@8587..8600 "target_fields"
- COMMA@8600..8601 ","
- WHITESPACE@8601..8602 " "
- ARG@8602..8625
- EXPR_APPLY@8602..8625
- EXPR_INDEX@8602..8618
- EXPR_VAR@8602..8605
- NAME@8602..8605
- IDENT@8602..8605 "std"
- DOT@8605..8606 "."
- NAME@8606..8618
- IDENT@8606..8618 "objectFields"
- ARGS_DESC@8618..8625
- L_PAREN@8618..8619 "("
- ARG@8619..8624
- EXPR_VAR@8619..8624
- NAME@8619..8624
- IDENT@8619..8624 "patch"
- R_PAREN@8624..8625 ")"
- R_PAREN@8625..8626 ")"
- SEMI@8626..8627 ";"
- WHITESPACE@8627..8635 "\n\n "
- EXPR_OBJECT@8635..8975
- OBJ_BODY_MEMBER_LIST@8635..8975
- L_BRACE@8635..8636 "{"
- WHITESPACE@8636..8645 "\n "
- MEMBER_FIELD@8645..8967
- FIELD_NORMAL@8645..8912
- FIELD_NAME_DYNAMIC@8645..8648
- L_BRACK@8645..8646 "["
- EXPR_VAR@8646..8647
- NAME@8646..8647
- IDENT@8646..8647 "k"
- R_BRACK@8647..8648 "]"
- COLON@8648..8649 ":"
- WHITESPACE@8649..8660 "\n "
- EXPR_IF_THEN_ELSE@8660..8912
- IF_KW@8660..8662 "if"
- WHITESPACE@8662..8663 " "
- EXPR_UNARY@8663..8687
- NOT@8663..8664 "!"
- EXPR_APPLY@8664..8687
- EXPR_INDEX@8664..8677
- EXPR_VAR@8664..8667
- NAME@8664..8667
- IDENT@8664..8667 "std"
- DOT@8667..8668 "."
- NAME@8668..8677
- IDENT@8668..8677 "objectHas"
- ARGS_DESC@8677..8687
- L_PAREN@8677..8678 "("
- ARG@8678..8683
- EXPR_VAR@8678..8683
- NAME@8678..8683
- IDENT@8678..8683 "patch"
- COMMA@8683..8684 ","
- WHITESPACE@8684..8685 " "
- ARG@8685..8686
- EXPR_VAR@8685..8686
- NAME@8685..8686
- IDENT@8685..8686 "k"
- R_PAREN@8686..8687 ")"
- WHITESPACE@8687..8688 " "
- THEN_KW@8688..8692 "then"
- WHITESPACE@8692..8705 "\n "
- TRUE_EXPR@8705..8721
- EXPR_INDEX_EXPR@8705..8721
- LHS_EXPR@8705..8718
- EXPR_VAR@8705..8718
- NAME@8705..8718
- IDENT@8705..8718 "target_object"
- L_BRACK@8718..8719 "["
- EXPR_VAR@8719..8720
- NAME@8719..8720
- IDENT@8719..8720 "k"
- R_BRACK@8720..8721 "]"
- WHITESPACE@8721..8732 "\n "
- ELSE_KW@8732..8736 "else"
- WHITESPACE@8736..8737 " "
- FALSE_EXPR@8737..8912
- EXPR_IF_THEN_ELSE@8737..8912
- IF_KW@8737..8739 "if"
- WHITESPACE@8739..8740 " "
- EXPR_UNARY@8740..8772
- NOT@8740..8741 "!"
- EXPR_APPLY@8741..8772
- EXPR_INDEX@8741..8754
- EXPR_VAR@8741..8744
- NAME@8741..8744
- IDENT@8741..8744 "std"
- DOT@8744..8745 "."
- NAME@8745..8754
- IDENT@8745..8754 "objectHas"
- ARGS_DESC@8754..8772
- L_PAREN@8754..8755 "("
- ARG@8755..8768
- EXPR_VAR@8755..8768
- NAME@8755..8768
- IDENT@8755..8768 "target_object"
- COMMA@8768..8769 ","
- WHITESPACE@8769..8770 " "
- ARG@8770..8771
- EXPR_VAR@8770..8771
- NAME@8770..8771
- IDENT@8770..8771 "k"
- R_PAREN@8771..8772 ")"
- WHITESPACE@8772..8773 " "
- THEN_KW@8773..8777 "then"
- WHITESPACE@8777..8790 "\n "
- TRUE_EXPR@8790..8831
- EXPR_APPLY@8790..8831
- EXPR_INDEX@8790..8804
- EXPR_VAR@8790..8793
- NAME@8790..8793
- IDENT@8790..8793 "std"
- DOT@8793..8794 "."
- NAME@8794..8804
- IDENT@8794..8804 "mergePatch"
- ARGS_DESC@8804..8831
- L_PAREN@8804..8805 "("
- ARG@8805..8809
- EXPR_LITERAL@8805..8809
- NULL_KW@8805..8809 "null"
- COMMA@8809..8810 ","
- WHITESPACE@8810..8811 " "
- ARG@8811..8819
- EXPR_INDEX_EXPR@8811..8819
- LHS_EXPR@8811..8816
- EXPR_VAR@8811..8816
- NAME@8811..8816
- IDENT@8811..8816 "patch"
- L_BRACK@8816..8817 "["
- EXPR_VAR@8817..8818
- NAME@8817..8818
- IDENT@8817..8818 "k"
- R_BRACK@8818..8819 "]"
- R_PAREN@8819..8820 ")"
- WHITESPACE@8820..8821 " "
- TAILSTRICT_KW@8821..8831 "tailstrict"
- WHITESPACE@8831..8842 "\n "
- ELSE_KW@8842..8846 "else"
- WHITESPACE@8846..8859 "\n "
- FALSE_EXPR@8859..8912
- EXPR_APPLY@8859..8912
- EXPR_INDEX@8859..8873
- EXPR_VAR@8859..8862
- NAME@8859..8862
- IDENT@8859..8862 "std"
- DOT@8862..8863 "."
- NAME@8863..8873
- IDENT@8863..8873 "mergePatch"
- ARGS_DESC@8873..8912
- L_PAREN@8873..8874 "("
- ARG@8874..8890
- EXPR_INDEX_EXPR@8874..8890
- LHS_EXPR@8874..8887
- EXPR_VAR@8874..8887
- NAME@8874..8887
- IDENT@8874..8887 "target_object"
- L_BRACK@8887..8888 "["
- EXPR_VAR@8888..8889
- NAME@8888..8889
- IDENT@8888..8889 "k"
- R_BRACK@8889..8890 "]"
- COMMA@8890..8891 ","
- WHITESPACE@8891..8892 " "
- ARG@8892..8900
- EXPR_INDEX_EXPR@8892..8900
- LHS_EXPR@8892..8897
- EXPR_VAR@8892..8897
- NAME@8892..8897
- IDENT@8892..8897 "patch"
- L_BRACK@8897..8898 "["
- EXPR_VAR@8898..8899
- NAME@8898..8899
- IDENT@8898..8899 "k"
- R_BRACK@8899..8900 "]"
- R_PAREN@8900..8901 ")"
- WHITESPACE@8901..8902 " "
- TAILSTRICT_KW@8902..8912 "tailstrict"
- WHITESPACE@8912..8921 "\n "
- FOR_SPEC@8921..8967
- FOR_KW@8921..8924 "for"
- WHITESPACE@8924..8925 " "
- NAME@8925..8926
- IDENT@8925..8926 "k"
- WHITESPACE@8926..8927 " "
- IN_KW@8927..8929 "in"
- WHITESPACE@8929..8930 " "
- EXPR_APPLY@8930..8967
- EXPR_INDEX@8930..8941
- EXPR_VAR@8930..8933
- NAME@8930..8933
- IDENT@8930..8933 "std"
- DOT@8933..8934 "."
- NAME@8934..8941
- IDENT@8934..8941 "setDiff"
- ARGS_DESC@8941..8967
- L_PAREN@8941..8942 "("
- ARG@8942..8953
- EXPR_VAR@8942..8953
- NAME@8942..8953
- IDENT@8942..8953 "both_fields"
- COMMA@8953..8954 ","
- WHITESPACE@8954..8955 " "
- ARG@8955..8966
- EXPR_VAR@8955..8966
- NAME@8955..8966
- IDENT@8955..8966 "null_fields"
- R_PAREN@8966..8967 ")"
- WHITESPACE@8967..8974 "\n "
- R_BRACE@8974..8975 "}"
- WHITESPACE@8975..8980 "\n "
- ELSE_KW@8980..8984 "else"
- WHITESPACE@8984..8991 "\n "
- FALSE_EXPR@8991..8996
- EXPR_VAR@8991..8996
- NAME@8991..8996
- IDENT@8991..8996 "patch"
+ MEMBER_FIELD_METHOD@8208..8996
+ FIELD_NAME_FIXED@8208..8218
+ NAME@8208..8218
+ IDENT@8208..8218 "mergePatch"
+ PARAMS_DESC@8218..8233
+ L_PAREN@8218..8219 "("
+ PARAM@8219..8225
+ DESTRUCT_FULL@8219..8225
+ NAME@8219..8225
+ IDENT@8219..8225 "target"
+ COMMA@8225..8226 ","
+ WHITESPACE@8226..8227 " "
+ PARAM@8227..8232
+ DESTRUCT_FULL@8227..8232
+ NAME@8227..8232
+ IDENT@8227..8232 "patch"
+ R_PAREN@8232..8233 ")"
+ COLONCOLON@8233..8235 "::"
+ WHITESPACE@8235..8240 "\n "
+ EXPR_IF_THEN_ELSE@8240..8996
+ IF_KW@8240..8242 "if"
+ WHITESPACE@8242..8243 " "
+ EXPR_APPLY@8243..8262
+ EXPR_INDEX@8243..8255
+ EXPR_VAR@8243..8246
+ NAME@8243..8246
+ IDENT@8243..8246 "std"
+ DOT@8246..8247 "."
+ NAME@8247..8255
+ IDENT@8247..8255 "isObject"
+ ARGS_DESC@8255..8262
+ L_PAREN@8255..8256 "("
+ ARG@8256..8261
+ EXPR_VAR@8256..8261
+ NAME@8256..8261
+ IDENT@8256..8261 "patch"
+ R_PAREN@8261..8262 ")"
+ WHITESPACE@8262..8263 " "
+ THEN_KW@8263..8267 "then"
+ WHITESPACE@8267..8274 "\n "
+ TRUE_EXPR@8274..8975
+ EXPR_LOCAL@8274..8975
+ LOCAL_KW@8274..8279 "local"
+ WHITESPACE@8279..8280 " "
+ BIND_DESTRUCT@8280..8347
+ DESTRUCT_FULL@8280..8293
+ NAME@8280..8293
+ IDENT@8280..8293 "target_object"
+ WHITESPACE@8293..8294 " "
+ ASSIGN@8294..8295 "="
+ WHITESPACE@8295..8304 "\n "
+ EXPR_IF_THEN_ELSE@8304..8347
+ IF_KW@8304..8306 "if"
+ WHITESPACE@8306..8307 " "
+ EXPR_APPLY@8307..8327
+ EXPR_INDEX@8307..8319
+ EXPR_VAR@8307..8310
+ NAME@8307..8310
+ IDENT@8307..8310 "std"
+ DOT@8310..8311 "."
+ NAME@8311..8319
+ IDENT@8311..8319 "isObject"
+ ARGS_DESC@8319..8327
+ L_PAREN@8319..8320 "("
+ ARG@8320..8326
+ EXPR_VAR@8320..8326
+ NAME@8320..8326
+ IDENT@8320..8326 "target"
+ R_PAREN@8326..8327 ")"
+ WHITESPACE@8327..8328 " "
+ THEN_KW@8328..8332 "then"
+ WHITESPACE@8332..8333 " "
+ TRUE_EXPR@8333..8339
+ EXPR_VAR@8333..8339
+ NAME@8333..8339
+ IDENT@8333..8339 "target"
+ WHITESPACE@8339..8340 " "
+ ELSE_KW@8340..8344 "else"
+ WHITESPACE@8344..8345 " "
+ FALSE_EXPR@8345..8347
+ EXPR_OBJECT@8345..8347
+ OBJ_BODY_MEMBER_LIST@8345..8347
+ L_BRACE@8345..8346 "{"
+ R_BRACE@8346..8347 "}"
+ SEMI@8347..8348 ";"
+ WHITESPACE@8348..8356 "\n\n "
+ EXPR_LOCAL@8356..8975
+ LOCAL_KW@8356..8361 "local"
+ WHITESPACE@8361..8362 " "
+ BIND_DESTRUCT@8362..8461
+ DESTRUCT_FULL@8362..8375
+ NAME@8362..8375
+ IDENT@8362..8375 "target_fields"
+ WHITESPACE@8375..8376 " "
+ ASSIGN@8376..8377 "="
+ WHITESPACE@8377..8386 "\n "
+ EXPR_IF_THEN_ELSE@8386..8461
+ IF_KW@8386..8388 "if"
+ WHITESPACE@8388..8389 " "
+ EXPR_APPLY@8389..8416
+ EXPR_INDEX@8389..8401
+ EXPR_VAR@8389..8392
+ NAME@8389..8392
+ IDENT@8389..8392 "std"
+ DOT@8392..8393 "."
+ NAME@8393..8401
+ IDENT@8393..8401 "isObject"
+ ARGS_DESC@8401..8416
+ L_PAREN@8401..8402 "("
+ ARG@8402..8415
+ EXPR_VAR@8402..8415
+ NAME@8402..8415
+ IDENT@8402..8415 "target_object"
+ R_PAREN@8415..8416 ")"
+ WHITESPACE@8416..8417 " "
+ THEN_KW@8417..8421 "then"
+ WHITESPACE@8421..8422 " "
+ TRUE_EXPR@8422..8453
+ EXPR_APPLY@8422..8453
+ EXPR_INDEX@8422..8438
+ EXPR_VAR@8422..8425
+ NAME@8422..8425
+ IDENT@8422..8425 "std"
+ DOT@8425..8426 "."
+ NAME@8426..8438
+ IDENT@8426..8438 "objectFields"
+ ARGS_DESC@8438..8453
+ L_PAREN@8438..8439 "("
+ ARG@8439..8452
+ EXPR_VAR@8439..8452
+ NAME@8439..8452
+ IDENT@8439..8452 "target_object"
+ R_PAREN@8452..8453 ")"
+ WHITESPACE@8453..8454 " "
+ ELSE_KW@8454..8458 "else"
+ WHITESPACE@8458..8459 " "
+ FALSE_EXPR@8459..8461
+ EXPR_ARRAY@8459..8461
+ L_BRACK@8459..8460 "["
+ R_BRACK@8460..8461 "]"
+ SEMI@8461..8462 ";"
+ WHITESPACE@8462..8470 "\n\n "
+ EXPR_LOCAL@8470..8975
+ LOCAL_KW@8470..8475 "local"
+ WHITESPACE@8475..8476 " "
+ BIND_DESTRUCT@8476..8546
+ DESTRUCT_FULL@8476..8487
+ NAME@8476..8487
+ IDENT@8476..8487 "null_fields"
+ WHITESPACE@8487..8488 " "
+ ASSIGN@8488..8489 "="
+ WHITESPACE@8489..8490 " "
+ EXPR_ARRAY_COMP@8490..8546
+ L_BRACK@8490..8491 "["
+ EXPR_VAR@8491..8492
+ NAME@8491..8492
+ IDENT@8491..8492 "k"
+ WHITESPACE@8492..8493 " "
+ FOR_SPEC@8493..8525
+ FOR_KW@8493..8496 "for"
+ WHITESPACE@8496..8497 " "
+ NAME@8497..8498
+ IDENT@8497..8498 "k"
+ WHITESPACE@8498..8499 " "
+ IN_KW@8499..8501 "in"
+ WHITESPACE@8501..8502 " "
+ EXPR_APPLY@8502..8525
+ EXPR_INDEX@8502..8518
+ EXPR_VAR@8502..8505
+ NAME@8502..8505
+ IDENT@8502..8505 "std"
+ DOT@8505..8506 "."
+ NAME@8506..8518
+ IDENT@8506..8518 "objectFields"
+ ARGS_DESC@8518..8525
+ L_PAREN@8518..8519 "("
+ ARG@8519..8524
+ EXPR_VAR@8519..8524
+ NAME@8519..8524
+ IDENT@8519..8524 "patch"
+ R_PAREN@8524..8525 ")"
+ WHITESPACE@8525..8526 " "
+ IF_SPEC@8526..8545
+ IF_KW@8526..8528 "if"
+ WHITESPACE@8528..8529 " "
+ EXPR_BINARY@8529..8545
+ LHS_EXPR@8529..8537
+ EXPR_INDEX_EXPR@8529..8537
+ LHS_EXPR@8529..8534
+ EXPR_VAR@8529..8534
+ NAME@8529..8534
+ IDENT@8529..8534 "patch"
+ L_BRACK@8534..8535 "["
+ EXPR_VAR@8535..8536
+ NAME@8535..8536
+ IDENT@8535..8536 "k"
+ R_BRACK@8536..8537 "]"
+ WHITESPACE@8537..8538 " "
+ EQ@8538..8540 "=="
+ WHITESPACE@8540..8541 " "
+ EXPR_LITERAL@8541..8545
+ NULL_KW@8541..8545 "null"
+ R_BRACK@8545..8546 "]"
+ SEMI@8546..8547 ";"
+ WHITESPACE@8547..8554 "\n "
+ EXPR_LOCAL@8554..8975
+ LOCAL_KW@8554..8559 "local"
+ WHITESPACE@8559..8560 " "
+ BIND_DESTRUCT@8560..8626
+ DESTRUCT_FULL@8560..8571
+ NAME@8560..8571
+ IDENT@8560..8571 "both_fields"
+ WHITESPACE@8571..8572 " "
+ ASSIGN@8572..8573 "="
+ WHITESPACE@8573..8574 " "
+ EXPR_APPLY@8574..8626
+ EXPR_INDEX@8574..8586
+ EXPR_VAR@8574..8577
+ NAME@8574..8577
+ IDENT@8574..8577 "std"
+ DOT@8577..8578 "."
+ NAME@8578..8586
+ IDENT@8578..8586 "setUnion"
+ ARGS_DESC@8586..8626
+ L_PAREN@8586..8587 "("
+ ARG@8587..8600
+ EXPR_VAR@8587..8600
+ NAME@8587..8600
+ IDENT@8587..8600 "target_fields"
+ COMMA@8600..8601 ","
+ WHITESPACE@8601..8602 " "
+ ARG@8602..8625
+ EXPR_APPLY@8602..8625
+ EXPR_INDEX@8602..8618
+ EXPR_VAR@8602..8605
+ NAME@8602..8605
+ IDENT@8602..8605 "std"
+ DOT@8605..8606 "."
+ NAME@8606..8618
+ IDENT@8606..8618 "objectFields"
+ ARGS_DESC@8618..8625
+ L_PAREN@8618..8619 "("
+ ARG@8619..8624
+ EXPR_VAR@8619..8624
+ NAME@8619..8624
+ IDENT@8619..8624 "patch"
+ R_PAREN@8624..8625 ")"
+ R_PAREN@8625..8626 ")"
+ SEMI@8626..8627 ";"
+ WHITESPACE@8627..8635 "\n\n "
+ EXPR_OBJECT@8635..8975
+ OBJ_BODY_COMP@8635..8975
+ L_BRACE@8635..8636 "{"
+ WHITESPACE@8636..8645 "\n "
+ MEMBER_FIELD_NORMAL@8645..8912
+ FIELD_NAME_DYNAMIC@8645..8648
+ L_BRACK@8645..8646 "["
+ EXPR_VAR@8646..8647
+ NAME@8646..8647
+ IDENT@8646..8647 "k"
+ R_BRACK@8647..8648 "]"
+ COLON@8648..8649 ":"
+ WHITESPACE@8649..8660 "\n "
+ EXPR_IF_THEN_ELSE@8660..8912
+ IF_KW@8660..8662 "if"
+ WHITESPACE@8662..8663 " "
+ EXPR_UNARY@8663..8687
+ NOT@8663..8664 "!"
+ EXPR_APPLY@8664..8687
+ EXPR_INDEX@8664..8677
+ EXPR_VAR@8664..8667
+ NAME@8664..8667
+ IDENT@8664..8667 "std"
+ DOT@8667..8668 "."
+ NAME@8668..8677
+ IDENT@8668..8677 "objectHas"
+ ARGS_DESC@8677..8687
+ L_PAREN@8677..8678 "("
+ ARG@8678..8683
+ EXPR_VAR@8678..8683
+ NAME@8678..8683
+ IDENT@8678..8683 "patch"
+ COMMA@8683..8684 ","
+ WHITESPACE@8684..8685 " "
+ ARG@8685..8686
+ EXPR_VAR@8685..8686
+ NAME@8685..8686
+ IDENT@8685..8686 "k"
+ R_PAREN@8686..8687 ")"
+ WHITESPACE@8687..8688 " "
+ THEN_KW@8688..8692 "then"
+ WHITESPACE@8692..8705 "\n "
+ TRUE_EXPR@8705..8721
+ EXPR_INDEX_EXPR@8705..8721
+ LHS_EXPR@8705..8718
+ EXPR_VAR@8705..8718
+ NAME@8705..8718
+ IDENT@8705..8718 "target_object"
+ L_BRACK@8718..8719 "["
+ EXPR_VAR@8719..8720
+ NAME@8719..8720
+ IDENT@8719..8720 "k"
+ R_BRACK@8720..8721 "]"
+ WHITESPACE@8721..8732 "\n "
+ ELSE_KW@8732..8736 "else"
+ WHITESPACE@8736..8737 " "
+ FALSE_EXPR@8737..8912
+ EXPR_IF_THEN_ELSE@8737..8912
+ IF_KW@8737..8739 "if"
+ WHITESPACE@8739..8740 " "
+ EXPR_UNARY@8740..8772
+ NOT@8740..8741 "!"
+ EXPR_APPLY@8741..8772
+ EXPR_INDEX@8741..8754
+ EXPR_VAR@8741..8744
+ NAME@8741..8744
+ IDENT@8741..8744 "std"
+ DOT@8744..8745 "."
+ NAME@8745..8754
+ IDENT@8745..8754 "objectHas"
+ ARGS_DESC@8754..8772
+ L_PAREN@8754..8755 "("
+ ARG@8755..8768
+ EXPR_VAR@8755..8768
+ NAME@8755..8768
+ IDENT@8755..8768 "target_object"
+ COMMA@8768..8769 ","
+ WHITESPACE@8769..8770 " "
+ ARG@8770..8771
+ EXPR_VAR@8770..8771
+ NAME@8770..8771
+ IDENT@8770..8771 "k"
+ R_PAREN@8771..8772 ")"
+ WHITESPACE@8772..8773 " "
+ THEN_KW@8773..8777 "then"
+ WHITESPACE@8777..8790 "\n "
+ TRUE_EXPR@8790..8831
+ EXPR_APPLY@8790..8831
+ EXPR_INDEX@8790..8804
+ EXPR_VAR@8790..8793
+ NAME@8790..8793
+ IDENT@8790..8793 "std"
+ DOT@8793..8794 "."
+ NAME@8794..8804
+ IDENT@8794..8804 "mergePatch"
+ ARGS_DESC@8804..8831
+ L_PAREN@8804..8805 "("
+ ARG@8805..8809
+ EXPR_LITERAL@8805..8809
+ NULL_KW@8805..8809 "null"
+ COMMA@8809..8810 ","
+ WHITESPACE@8810..8811 " "
+ ARG@8811..8819
+ EXPR_INDEX_EXPR@8811..8819
+ LHS_EXPR@8811..8816
+ EXPR_VAR@8811..8816
+ NAME@8811..8816
+ IDENT@8811..8816 "patch"
+ L_BRACK@8816..8817 "["
+ EXPR_VAR@8817..8818
+ NAME@8817..8818
+ IDENT@8817..8818 "k"
+ R_BRACK@8818..8819 "]"
+ R_PAREN@8819..8820 ")"
+ WHITESPACE@8820..8821 " "
+ TAILSTRICT_KW@8821..8831 "tailstrict"
+ WHITESPACE@8831..8842 "\n "
+ ELSE_KW@8842..8846 "else"
+ WHITESPACE@8846..8859 "\n "
+ FALSE_EXPR@8859..8912
+ EXPR_APPLY@8859..8912
+ EXPR_INDEX@8859..8873
+ EXPR_VAR@8859..8862
+ NAME@8859..8862
+ IDENT@8859..8862 "std"
+ DOT@8862..8863 "."
+ NAME@8863..8873
+ IDENT@8863..8873 "mergePatch"
+ ARGS_DESC@8873..8912
+ L_PAREN@8873..8874 "("
+ ARG@8874..8890
+ EXPR_INDEX_EXPR@8874..8890
+ LHS_EXPR@8874..8887
+ EXPR_VAR@8874..8887
+ NAME@8874..8887
+ IDENT@8874..8887 "target_object"
+ L_BRACK@8887..8888 "["
+ EXPR_VAR@8888..8889
+ NAME@8888..8889
+ IDENT@8888..8889 "k"
+ R_BRACK@8889..8890 "]"
+ COMMA@8890..8891 ","
+ WHITESPACE@8891..8892 " "
+ ARG@8892..8900
+ EXPR_INDEX_EXPR@8892..8900
+ LHS_EXPR@8892..8897
+ EXPR_VAR@8892..8897
+ NAME@8892..8897
+ IDENT@8892..8897 "patch"
+ L_BRACK@8897..8898 "["
+ EXPR_VAR@8898..8899
+ NAME@8898..8899
+ IDENT@8898..8899 "k"
+ R_BRACK@8899..8900 "]"
+ R_PAREN@8900..8901 ")"
+ WHITESPACE@8901..8902 " "
+ TAILSTRICT_KW@8902..8912 "tailstrict"
+ WHITESPACE@8912..8921 "\n "
+ FOR_SPEC@8921..8967
+ FOR_KW@8921..8924 "for"
+ WHITESPACE@8924..8925 " "
+ NAME@8925..8926
+ IDENT@8925..8926 "k"
+ WHITESPACE@8926..8927 " "
+ IN_KW@8927..8929 "in"
+ WHITESPACE@8929..8930 " "
+ EXPR_APPLY@8930..8967
+ EXPR_INDEX@8930..8941
+ EXPR_VAR@8930..8933
+ NAME@8930..8933
+ IDENT@8930..8933 "std"
+ DOT@8933..8934 "."
+ NAME@8934..8941
+ IDENT@8934..8941 "setDiff"
+ ARGS_DESC@8941..8967
+ L_PAREN@8941..8942 "("
+ ARG@8942..8953
+ EXPR_VAR@8942..8953
+ NAME@8942..8953
+ IDENT@8942..8953 "both_fields"
+ COMMA@8953..8954 ","
+ WHITESPACE@8954..8955 " "
+ ARG@8955..8966
+ EXPR_VAR@8955..8966
+ NAME@8955..8966
+ IDENT@8955..8966 "null_fields"
+ R_PAREN@8966..8967 ")"
+ WHITESPACE@8967..8974 "\n "
+ R_BRACE@8974..8975 "}"
+ WHITESPACE@8975..8980 "\n "
+ ELSE_KW@8980..8984 "else"
+ WHITESPACE@8984..8991 "\n "
+ FALSE_EXPR@8991..8996
+ EXPR_VAR@8991..8996
+ NAME@8991..8996
+ IDENT@8991..8996 "patch"
COMMA@8996..8997 ","
WHITESPACE@8997..9001 "\n\n "
- MEMBER_FIELD@9001..9107
- FIELD_METHOD@9001..9107
- FIELD_NAME_FIXED@9001..9004
- NAME@9001..9004
- IDENT@9001..9004 "get"
- PARAMS_DESC@9004..9041
- L_PAREN@9004..9005 "("
- PARAM@9005..9006
- DESTRUCT_FULL@9005..9006
- NAME@9005..9006
- IDENT@9005..9006 "o"
- COMMA@9006..9007 ","
- WHITESPACE@9007..9008 " "
- PARAM@9008..9009
- DESTRUCT_FULL@9008..9009
- NAME@9008..9009
- IDENT@9008..9009 "f"
- COMMA@9009..9010 ","
- WHITESPACE@9010..9011 " "
- PARAM@9011..9023
- DESTRUCT_FULL@9011..9018
- NAME@9011..9018
- IDENT@9011..9018 "default"
- ASSIGN@9018..9019 "="
- EXPR_LITERAL@9019..9023
- NULL_KW@9019..9023 "null"
- COMMA@9023..9024 ","
- WHITESPACE@9024..9025 " "
- PARAM@9025..9040
- DESTRUCT_FULL@9025..9035
- NAME@9025..9035
- IDENT@9025..9035 "inc_hidden"
- ASSIGN@9035..9036 "="
- EXPR_LITERAL@9036..9040
- TRUE_KW@9036..9040 "true"
- R_PAREN@9040..9041 ")"
- COLONCOLON@9041..9043 "::"
- WHITESPACE@9043..9048 "\n "
- EXPR_IF_THEN_ELSE@9048..9107
- IF_KW@9048..9050 "if"
- WHITESPACE@9050..9051 " "
- EXPR_APPLY@9051..9084
- EXPR_INDEX@9051..9066
- EXPR_VAR@9051..9054
- NAME@9051..9054
- IDENT@9051..9054 "std"
- DOT@9054..9055 "."
- NAME@9055..9066
- IDENT@9055..9066 "objectHasEx"
- ARGS_DESC@9066..9084
- L_PAREN@9066..9067 "("
- ARG@9067..9068
- EXPR_VAR@9067..9068
- NAME@9067..9068
- IDENT@9067..9068 "o"
- COMMA@9068..9069 ","
- WHITESPACE@9069..9070 " "
- ARG@9070..9071
- EXPR_VAR@9070..9071
- NAME@9070..9071
- IDENT@9070..9071 "f"
- COMMA@9071..9072 ","
- WHITESPACE@9072..9073 " "
- ARG@9073..9083
- EXPR_VAR@9073..9083
- NAME@9073..9083
- IDENT@9073..9083 "inc_hidden"
- R_PAREN@9083..9084 ")"
- WHITESPACE@9084..9085 " "
- THEN_KW@9085..9089 "then"
- WHITESPACE@9089..9090 " "
- TRUE_EXPR@9090..9094
- EXPR_INDEX_EXPR@9090..9094
- LHS_EXPR@9090..9091
- EXPR_VAR@9090..9091
- NAME@9090..9091
- IDENT@9090..9091 "o"
- L_BRACK@9091..9092 "["
- EXPR_VAR@9092..9093
- NAME@9092..9093
- IDENT@9092..9093 "f"
- R_BRACK@9093..9094 "]"
- WHITESPACE@9094..9095 " "
- ELSE_KW@9095..9099 "else"
- WHITESPACE@9099..9100 " "
- FALSE_EXPR@9100..9107
- EXPR_VAR@9100..9107
- NAME@9100..9107
- IDENT@9100..9107 "default"
+ MEMBER_FIELD_METHOD@9001..9107
+ FIELD_NAME_FIXED@9001..9004
+ NAME@9001..9004
+ IDENT@9001..9004 "get"
+ PARAMS_DESC@9004..9041
+ L_PAREN@9004..9005 "("
+ PARAM@9005..9006
+ DESTRUCT_FULL@9005..9006
+ NAME@9005..9006
+ IDENT@9005..9006 "o"
+ COMMA@9006..9007 ","
+ WHITESPACE@9007..9008 " "
+ PARAM@9008..9009
+ DESTRUCT_FULL@9008..9009
+ NAME@9008..9009
+ IDENT@9008..9009 "f"
+ COMMA@9009..9010 ","
+ WHITESPACE@9010..9011 " "
+ PARAM@9011..9023
+ DESTRUCT_FULL@9011..9018
+ NAME@9011..9018
+ IDENT@9011..9018 "default"
+ ASSIGN@9018..9019 "="
+ EXPR_LITERAL@9019..9023
+ NULL_KW@9019..9023 "null"
+ COMMA@9023..9024 ","
+ WHITESPACE@9024..9025 " "
+ PARAM@9025..9040
+ DESTRUCT_FULL@9025..9035
+ NAME@9025..9035
+ IDENT@9025..9035 "inc_hidden"
+ ASSIGN@9035..9036 "="
+ EXPR_LITERAL@9036..9040
+ TRUE_KW@9036..9040 "true"
+ R_PAREN@9040..9041 ")"
+ COLONCOLON@9041..9043 "::"
+ WHITESPACE@9043..9048 "\n "
+ EXPR_IF_THEN_ELSE@9048..9107
+ IF_KW@9048..9050 "if"
+ WHITESPACE@9050..9051 " "
+ EXPR_APPLY@9051..9084
+ EXPR_INDEX@9051..9066
+ EXPR_VAR@9051..9054
+ NAME@9051..9054
+ IDENT@9051..9054 "std"
+ DOT@9054..9055 "."
+ NAME@9055..9066
+ IDENT@9055..9066 "objectHasEx"
+ ARGS_DESC@9066..9084
+ L_PAREN@9066..9067 "("
+ ARG@9067..9068
+ EXPR_VAR@9067..9068
+ NAME@9067..9068
+ IDENT@9067..9068 "o"
+ COMMA@9068..9069 ","
+ WHITESPACE@9069..9070 " "
+ ARG@9070..9071
+ EXPR_VAR@9070..9071
+ NAME@9070..9071
+ IDENT@9070..9071 "f"
+ COMMA@9071..9072 ","
+ WHITESPACE@9072..9073 " "
+ ARG@9073..9083
+ EXPR_VAR@9073..9083
+ NAME@9073..9083
+ IDENT@9073..9083 "inc_hidden"
+ R_PAREN@9083..9084 ")"
+ WHITESPACE@9084..9085 " "
+ THEN_KW@9085..9089 "then"
+ WHITESPACE@9089..9090 " "
+ TRUE_EXPR@9090..9094
+ EXPR_INDEX_EXPR@9090..9094
+ LHS_EXPR@9090..9091
+ EXPR_VAR@9090..9091
+ NAME@9090..9091
+ IDENT@9090..9091 "o"
+ L_BRACK@9091..9092 "["
+ EXPR_VAR@9092..9093
+ NAME@9092..9093
+ IDENT@9092..9093 "f"
+ R_BRACK@9093..9094 "]"
+ WHITESPACE@9094..9095 " "
+ ELSE_KW@9095..9099 "else"
+ WHITESPACE@9099..9100 " "
+ FALSE_EXPR@9100..9107
+ EXPR_VAR@9100..9107
+ NAME@9100..9107
+ IDENT@9100..9107 "default"
COMMA@9107..9108 ","
WHITESPACE@9108..9112 "\n\n "
- MEMBER_FIELD@9112..9162
- FIELD_METHOD@9112..9162
- FIELD_NAME_FIXED@9112..9124
- NAME@9112..9124
- IDENT@9112..9124 "objectFields"
- PARAMS_DESC@9124..9127
- L_PAREN@9124..9125 "("
- PARAM@9125..9126
- DESTRUCT_FULL@9125..9126
- NAME@9125..9126
- IDENT@9125..9126 "o"
- R_PAREN@9126..9127 ")"
- COLONCOLON@9127..9129 "::"
- WHITESPACE@9129..9134 "\n "
- EXPR_APPLY@9134..9162
- EXPR_INDEX@9134..9152
- EXPR_VAR@9134..9137
- NAME@9134..9137
- IDENT@9134..9137 "std"
- DOT@9137..9138 "."
- NAME@9138..9152
- IDENT@9138..9152 "objectFieldsEx"
- ARGS_DESC@9152..9162
- L_PAREN@9152..9153 "("
- ARG@9153..9154
- EXPR_VAR@9153..9154
- NAME@9153..9154
- IDENT@9153..9154 "o"
- COMMA@9154..9155 ","
- WHITESPACE@9155..9156 " "
- ARG@9156..9161
- EXPR_LITERAL@9156..9161
- FALSE_KW@9156..9161 "false"
- R_PAREN@9161..9162 ")"
+ MEMBER_FIELD_METHOD@9112..9162
+ FIELD_NAME_FIXED@9112..9124
+ NAME@9112..9124
+ IDENT@9112..9124 "objectFields"
+ PARAMS_DESC@9124..9127
+ L_PAREN@9124..9125 "("
+ PARAM@9125..9126
+ DESTRUCT_FULL@9125..9126
+ NAME@9125..9126
+ IDENT@9125..9126 "o"
+ R_PAREN@9126..9127 ")"
+ COLONCOLON@9127..9129 "::"
+ WHITESPACE@9129..9134 "\n "
+ EXPR_APPLY@9134..9162
+ EXPR_INDEX@9134..9152
+ EXPR_VAR@9134..9137
+ NAME@9134..9137
+ IDENT@9134..9137 "std"
+ DOT@9137..9138 "."
+ NAME@9138..9152
+ IDENT@9138..9152 "objectFieldsEx"
+ ARGS_DESC@9152..9162
+ L_PAREN@9152..9153 "("
+ ARG@9153..9154
+ EXPR_VAR@9153..9154
+ NAME@9153..9154
+ IDENT@9153..9154 "o"
+ COMMA@9154..9155 ","
+ WHITESPACE@9155..9156 " "
+ ARG@9156..9161
+ EXPR_LITERAL@9156..9161
+ FALSE_KW@9156..9161 "false"
+ R_PAREN@9161..9162 ")"
COMMA@9162..9163 ","
WHITESPACE@9163..9167 "\n\n "
- MEMBER_FIELD@9167..9219
- FIELD_METHOD@9167..9219
- FIELD_NAME_FIXED@9167..9182
- NAME@9167..9182
- IDENT@9167..9182 "objectFieldsAll"
- PARAMS_DESC@9182..9185
- L_PAREN@9182..9183 "("
- PARAM@9183..9184
- DESTRUCT_FULL@9183..9184
- NAME@9183..9184
- IDENT@9183..9184 "o"
- R_PAREN@9184..9185 ")"
- COLONCOLON@9185..9187 "::"
- WHITESPACE@9187..9192 "\n "
- EXPR_APPLY@9192..9219
- EXPR_INDEX@9192..9210
- EXPR_VAR@9192..9195
- NAME@9192..9195
- IDENT@9192..9195 "std"
- DOT@9195..9196 "."
- NAME@9196..9210
- IDENT@9196..9210 "objectFieldsEx"
- ARGS_DESC@9210..9219
- L_PAREN@9210..9211 "("
- ARG@9211..9212
- EXPR_VAR@9211..9212
- NAME@9211..9212
- IDENT@9211..9212 "o"
- COMMA@9212..9213 ","
- WHITESPACE@9213..9214 " "
- ARG@9214..9218
- EXPR_LITERAL@9214..9218
- TRUE_KW@9214..9218 "true"
- R_PAREN@9218..9219 ")"
+ MEMBER_FIELD_METHOD@9167..9219
+ FIELD_NAME_FIXED@9167..9182
+ NAME@9167..9182
+ IDENT@9167..9182 "objectFieldsAll"
+ PARAMS_DESC@9182..9185
+ L_PAREN@9182..9183 "("
+ PARAM@9183..9184
+ DESTRUCT_FULL@9183..9184
+ NAME@9183..9184
+ IDENT@9183..9184 "o"
+ R_PAREN@9184..9185 ")"
+ COLONCOLON@9185..9187 "::"
+ WHITESPACE@9187..9192 "\n "
+ EXPR_APPLY@9192..9219
+ EXPR_INDEX@9192..9210
+ EXPR_VAR@9192..9195
+ NAME@9192..9195
+ IDENT@9192..9195 "std"
+ DOT@9195..9196 "."
+ NAME@9196..9210
+ IDENT@9196..9210 "objectFieldsEx"
+ ARGS_DESC@9210..9219
+ L_PAREN@9210..9211 "("
+ ARG@9211..9212
+ EXPR_VAR@9211..9212
+ NAME@9211..9212
+ IDENT@9211..9212 "o"
+ COMMA@9212..9213 ","
+ WHITESPACE@9213..9214 " "
+ ARG@9214..9218
+ EXPR_LITERAL@9214..9218
+ TRUE_KW@9214..9218 "true"
+ R_PAREN@9218..9219 ")"
COMMA@9219..9220 ","
WHITESPACE@9220..9224 "\n\n "
- MEMBER_FIELD@9224..9274
- FIELD_METHOD@9224..9274
- FIELD_NAME_FIXED@9224..9233
- NAME@9224..9233
- IDENT@9224..9233 "objectHas"
- PARAMS_DESC@9233..9239
- L_PAREN@9233..9234 "("
- PARAM@9234..9235
- DESTRUCT_FULL@9234..9235
- NAME@9234..9235
- IDENT@9234..9235 "o"
- COMMA@9235..9236 ","
- WHITESPACE@9236..9237 " "
- PARAM@9237..9238
- DESTRUCT_FULL@9237..9238
- NAME@9237..9238
- IDENT@9237..9238 "f"
- R_PAREN@9238..9239 ")"
- COLONCOLON@9239..9241 "::"
- WHITESPACE@9241..9246 "\n "
- EXPR_APPLY@9246..9274
- EXPR_INDEX@9246..9261
- EXPR_VAR@9246..9249
- NAME@9246..9249
- IDENT@9246..9249 "std"
- DOT@9249..9250 "."
- NAME@9250..9261
- IDENT@9250..9261 "objectHasEx"
- ARGS_DESC@9261..9274
- L_PAREN@9261..9262 "("
- ARG@9262..9263
- EXPR_VAR@9262..9263
- NAME@9262..9263
- IDENT@9262..9263 "o"
- COMMA@9263..9264 ","
- WHITESPACE@9264..9265 " "
- ARG@9265..9266
- EXPR_VAR@9265..9266
- NAME@9265..9266
- IDENT@9265..9266 "f"
- COMMA@9266..9267 ","
- WHITESPACE@9267..9268 " "
- ARG@9268..9273
- EXPR_LITERAL@9268..9273
- FALSE_KW@9268..9273 "false"
- R_PAREN@9273..9274 ")"
+ MEMBER_FIELD_METHOD@9224..9274
+ FIELD_NAME_FIXED@9224..9233
+ NAME@9224..9233
+ IDENT@9224..9233 "objectHas"
+ PARAMS_DESC@9233..9239
+ L_PAREN@9233..9234 "("
+ PARAM@9234..9235
+ DESTRUCT_FULL@9234..9235
+ NAME@9234..9235
+ IDENT@9234..9235 "o"
+ COMMA@9235..9236 ","
+ WHITESPACE@9236..9237 " "
+ PARAM@9237..9238
+ DESTRUCT_FULL@9237..9238
+ NAME@9237..9238
+ IDENT@9237..9238 "f"
+ R_PAREN@9238..9239 ")"
+ COLONCOLON@9239..9241 "::"
+ WHITESPACE@9241..9246 "\n "
+ EXPR_APPLY@9246..9274
+ EXPR_INDEX@9246..9261
+ EXPR_VAR@9246..9249
+ NAME@9246..9249
+ IDENT@9246..9249 "std"
+ DOT@9249..9250 "."
+ NAME@9250..9261
+ IDENT@9250..9261 "objectHasEx"
+ ARGS_DESC@9261..9274
+ L_PAREN@9261..9262 "("
+ ARG@9262..9263
+ EXPR_VAR@9262..9263
+ NAME@9262..9263
+ IDENT@9262..9263 "o"
+ COMMA@9263..9264 ","
+ WHITESPACE@9264..9265 " "
+ ARG@9265..9266
+ EXPR_VAR@9265..9266
+ NAME@9265..9266
+ IDENT@9265..9266 "f"
+ COMMA@9266..9267 ","
+ WHITESPACE@9267..9268 " "
+ ARG@9268..9273
+ EXPR_LITERAL@9268..9273
+ FALSE_KW@9268..9273 "false"
+ R_PAREN@9273..9274 ")"
COMMA@9274..9275 ","
WHITESPACE@9275..9279 "\n\n "
- MEMBER_FIELD@9279..9331
- FIELD_METHOD@9279..9331
- FIELD_NAME_FIXED@9279..9291
- NAME@9279..9291
- IDENT@9279..9291 "objectHasAll"
- PARAMS_DESC@9291..9297
- L_PAREN@9291..9292 "("
- PARAM@9292..9293
- DESTRUCT_FULL@9292..9293
- NAME@9292..9293
- IDENT@9292..9293 "o"
- COMMA@9293..9294 ","
- WHITESPACE@9294..9295 " "
- PARAM@9295..9296
- DESTRUCT_FULL@9295..9296
- NAME@9295..9296
- IDENT@9295..9296 "f"
- R_PAREN@9296..9297 ")"
- COLONCOLON@9297..9299 "::"
- WHITESPACE@9299..9304 "\n "
- EXPR_APPLY@9304..9331
- EXPR_INDEX@9304..9319
- EXPR_VAR@9304..9307
- NAME@9304..9307
- IDENT@9304..9307 "std"
- DOT@9307..9308 "."
- NAME@9308..9319
- IDENT@9308..9319 "objectHasEx"
- ARGS_DESC@9319..9331
- L_PAREN@9319..9320 "("
- ARG@9320..9321
- EXPR_VAR@9320..9321
- NAME@9320..9321
- IDENT@9320..9321 "o"
- COMMA@9321..9322 ","
- WHITESPACE@9322..9323 " "
- ARG@9323..9324
- EXPR_VAR@9323..9324
- NAME@9323..9324
- IDENT@9323..9324 "f"
- COMMA@9324..9325 ","
- WHITESPACE@9325..9326 " "
- ARG@9326..9330
- EXPR_LITERAL@9326..9330
- TRUE_KW@9326..9330 "true"
- R_PAREN@9330..9331 ")"
+ MEMBER_FIELD_METHOD@9279..9331
+ FIELD_NAME_FIXED@9279..9291
+ NAME@9279..9291
+ IDENT@9279..9291 "objectHasAll"
+ PARAMS_DESC@9291..9297
+ L_PAREN@9291..9292 "("
+ PARAM@9292..9293
+ DESTRUCT_FULL@9292..9293
+ NAME@9292..9293
+ IDENT@9292..9293 "o"
+ COMMA@9293..9294 ","
+ WHITESPACE@9294..9295 " "
+ PARAM@9295..9296
+ DESTRUCT_FULL@9295..9296
+ NAME@9295..9296
+ IDENT@9295..9296 "f"
+ R_PAREN@9296..9297 ")"
+ COLONCOLON@9297..9299 "::"
+ WHITESPACE@9299..9304 "\n "
+ EXPR_APPLY@9304..9331
+ EXPR_INDEX@9304..9319
+ EXPR_VAR@9304..9307
+ NAME@9304..9307
+ IDENT@9304..9307 "std"
+ DOT@9307..9308 "."
+ NAME@9308..9319
+ IDENT@9308..9319 "objectHasEx"
+ ARGS_DESC@9319..9331
+ L_PAREN@9319..9320 "("
+ ARG@9320..9321
+ EXPR_VAR@9320..9321
+ NAME@9320..9321
+ IDENT@9320..9321 "o"
+ COMMA@9321..9322 ","
+ WHITESPACE@9322..9323 " "
+ ARG@9323..9324
+ EXPR_VAR@9323..9324
+ NAME@9323..9324
+ IDENT@9323..9324 "f"
+ COMMA@9324..9325 ","
+ WHITESPACE@9325..9326 " "
+ ARG@9326..9330
+ EXPR_LITERAL@9326..9330
+ TRUE_KW@9326..9330 "true"
+ R_PAREN@9330..9331 ")"
COMMA@9331..9332 ","
WHITESPACE@9332..9336 "\n\n "
- MEMBER_FIELD@9336..9393
- FIELD_METHOD@9336..9393
- FIELD_NAME_FIXED@9336..9348
- NAME@9336..9348
- IDENT@9336..9348 "objectValues"
- PARAMS_DESC@9348..9351
- L_PAREN@9348..9349 "("
- PARAM@9349..9350
- DESTRUCT_FULL@9349..9350
- NAME@9349..9350
- IDENT@9349..9350 "o"
- R_PAREN@9350..9351 ")"
- COLONCOLON@9351..9353 "::"
- WHITESPACE@9353..9358 "\n "
- EXPR_ARRAY_COMP@9358..9393
- L_BRACK@9358..9359 "["
- EXPR_INDEX_EXPR@9359..9363
- LHS_EXPR@9359..9360
- EXPR_VAR@9359..9360
- NAME@9359..9360
- IDENT@9359..9360 "o"
- L_BRACK@9360..9361 "["
- EXPR_VAR@9361..9362
- NAME@9361..9362
- IDENT@9361..9362 "k"
- R_BRACK@9362..9363 "]"
- WHITESPACE@9363..9364 " "
- FOR_SPEC@9364..9392
- FOR_KW@9364..9367 "for"
- WHITESPACE@9367..9368 " "
- NAME@9368..9369
- IDENT@9368..9369 "k"
- WHITESPACE@9369..9370 " "
- IN_KW@9370..9372 "in"
- WHITESPACE@9372..9373 " "
- EXPR_APPLY@9373..9392
- EXPR_INDEX@9373..9389
- EXPR_VAR@9373..9376
- NAME@9373..9376
- IDENT@9373..9376 "std"
- DOT@9376..9377 "."
- NAME@9377..9389
- IDENT@9377..9389 "objectFields"
- ARGS_DESC@9389..9392
- L_PAREN@9389..9390 "("
- ARG@9390..9391
- EXPR_VAR@9390..9391
- NAME@9390..9391
- IDENT@9390..9391 "o"
- R_PAREN@9391..9392 ")"
- R_BRACK@9392..9393 "]"
+ MEMBER_FIELD_METHOD@9336..9393
+ FIELD_NAME_FIXED@9336..9348
+ NAME@9336..9348
+ IDENT@9336..9348 "objectValues"
+ PARAMS_DESC@9348..9351
+ L_PAREN@9348..9349 "("
+ PARAM@9349..9350
+ DESTRUCT_FULL@9349..9350
+ NAME@9349..9350
+ IDENT@9349..9350 "o"
+ R_PAREN@9350..9351 ")"
+ COLONCOLON@9351..9353 "::"
+ WHITESPACE@9353..9358 "\n "
+ EXPR_ARRAY_COMP@9358..9393
+ L_BRACK@9358..9359 "["
+ EXPR_INDEX_EXPR@9359..9363
+ LHS_EXPR@9359..9360
+ EXPR_VAR@9359..9360
+ NAME@9359..9360
+ IDENT@9359..9360 "o"
+ L_BRACK@9360..9361 "["
+ EXPR_VAR@9361..9362
+ NAME@9361..9362
+ IDENT@9361..9362 "k"
+ R_BRACK@9362..9363 "]"
+ WHITESPACE@9363..9364 " "
+ FOR_SPEC@9364..9392
+ FOR_KW@9364..9367 "for"
+ WHITESPACE@9367..9368 " "
+ NAME@9368..9369
+ IDENT@9368..9369 "k"
+ WHITESPACE@9369..9370 " "
+ IN_KW@9370..9372 "in"
+ WHITESPACE@9372..9373 " "
+ EXPR_APPLY@9373..9392
+ EXPR_INDEX@9373..9389
+ EXPR_VAR@9373..9376
+ NAME@9373..9376
+ IDENT@9373..9376 "std"
+ DOT@9376..9377 "."
+ NAME@9377..9389
+ IDENT@9377..9389 "objectFields"
+ ARGS_DESC@9389..9392
+ L_PAREN@9389..9390 "("
+ ARG@9390..9391
+ EXPR_VAR@9390..9391
+ NAME@9390..9391
+ IDENT@9390..9391 "o"
+ R_PAREN@9391..9392 ")"
+ R_BRACK@9392..9393 "]"
COMMA@9393..9394 ","
WHITESPACE@9394..9398 "\n\n "
- MEMBER_FIELD@9398..9461
- FIELD_METHOD@9398..9461
- FIELD_NAME_FIXED@9398..9413
- NAME@9398..9413
- IDENT@9398..9413 "objectValuesAll"
- PARAMS_DESC@9413..9416
- L_PAREN@9413..9414 "("
- PARAM@9414..9415
- DESTRUCT_FULL@9414..9415
- NAME@9414..9415
- IDENT@9414..9415 "o"
- R_PAREN@9415..9416 ")"
- COLONCOLON@9416..9418 "::"
- WHITESPACE@9418..9423 "\n "
- EXPR_ARRAY_COMP@9423..9461
- L_BRACK@9423..9424 "["
- EXPR_INDEX_EXPR@9424..9428
- LHS_EXPR@9424..9425
- EXPR_VAR@9424..9425
- NAME@9424..9425
- IDENT@9424..9425 "o"
- L_BRACK@9425..9426 "["
- EXPR_VAR@9426..9427
- NAME@9426..9427
- IDENT@9426..9427 "k"
- R_BRACK@9427..9428 "]"
- WHITESPACE@9428..9429 " "
- FOR_SPEC@9429..9460
- FOR_KW@9429..9432 "for"
- WHITESPACE@9432..9433 " "
- NAME@9433..9434
- IDENT@9433..9434 "k"
- WHITESPACE@9434..9435 " "
- IN_KW@9435..9437 "in"
- WHITESPACE@9437..9438 " "
- EXPR_APPLY@9438..9460
- EXPR_INDEX@9438..9457
- EXPR_VAR@9438..9441
- NAME@9438..9441
- IDENT@9438..9441 "std"
- DOT@9441..9442 "."
- NAME@9442..9457
- IDENT@9442..9457 "objectFieldsAll"
- ARGS_DESC@9457..9460
- L_PAREN@9457..9458 "("
- ARG@9458..9459
- EXPR_VAR@9458..9459
- NAME@9458..9459
- IDENT@9458..9459 "o"
- R_PAREN@9459..9460 ")"
- R_BRACK@9460..9461 "]"
+ MEMBER_FIELD_METHOD@9398..9461
+ FIELD_NAME_FIXED@9398..9413
+ NAME@9398..9413
+ IDENT@9398..9413 "objectValuesAll"
+ PARAMS_DESC@9413..9416
+ L_PAREN@9413..9414 "("
+ PARAM@9414..9415
+ DESTRUCT_FULL@9414..9415
+ NAME@9414..9415
+ IDENT@9414..9415 "o"
+ R_PAREN@9415..9416 ")"
+ COLONCOLON@9416..9418 "::"
+ WHITESPACE@9418..9423 "\n "
+ EXPR_ARRAY_COMP@9423..9461
+ L_BRACK@9423..9424 "["
+ EXPR_INDEX_EXPR@9424..9428
+ LHS_EXPR@9424..9425
+ EXPR_VAR@9424..9425
+ NAME@9424..9425
+ IDENT@9424..9425 "o"
+ L_BRACK@9425..9426 "["
+ EXPR_VAR@9426..9427
+ NAME@9426..9427
+ IDENT@9426..9427 "k"
+ R_BRACK@9427..9428 "]"
+ WHITESPACE@9428..9429 " "
+ FOR_SPEC@9429..9460
+ FOR_KW@9429..9432 "for"
+ WHITESPACE@9432..9433 " "
+ NAME@9433..9434
+ IDENT@9433..9434 "k"
+ WHITESPACE@9434..9435 " "
+ IN_KW@9435..9437 "in"
+ WHITESPACE@9437..9438 " "
+ EXPR_APPLY@9438..9460
+ EXPR_INDEX@9438..9457
+ EXPR_VAR@9438..9441
+ NAME@9438..9441
+ IDENT@9438..9441 "std"
+ DOT@9441..9442 "."
+ NAME@9442..9457
+ IDENT@9442..9457 "objectFieldsAll"
+ ARGS_DESC@9457..9460
+ L_PAREN@9457..9458 "("
+ ARG@9458..9459
+ EXPR_VAR@9458..9459
+ NAME@9458..9459
+ IDENT@9458..9459 "o"
+ R_PAREN@9459..9460 ")"
+ R_BRACK@9460..9461 "]"
COMMA@9461..9462 ","
WHITESPACE@9462..9466 "\n\n "
- MEMBER_FIELD@9466..9600
- FIELD_METHOD@9466..9600
- FIELD_NAME_FIXED@9466..9477
- NAME@9466..9477
- IDENT@9466..9477 "resolvePath"
- PARAMS_DESC@9477..9483
- L_PAREN@9477..9478 "("
- PARAM@9478..9479
- DESTRUCT_FULL@9478..9479
- NAME@9478..9479
- IDENT@9478..9479 "f"
- COMMA@9479..9480 ","
- WHITESPACE@9480..9481 " "
- PARAM@9481..9482
- DESTRUCT_FULL@9481..9482
- NAME@9481..9482
- IDENT@9481..9482 "r"
- R_PAREN@9482..9483 ")"
- COLONCOLON@9483..9485 "::"
- WHITESPACE@9485..9490 "\n "
- EXPR_LOCAL@9490..9600
- LOCAL_KW@9490..9495 "local"
- WHITESPACE@9495..9496 " "
- BIND_DESTRUCT@9496..9519
- DESTRUCT_FULL@9496..9499
- NAME@9496..9499
- IDENT@9496..9499 "arr"
- WHITESPACE@9499..9500 " "
- ASSIGN@9500..9501 "="
- WHITESPACE@9501..9502 " "
- EXPR_APPLY@9502..9519
- EXPR_INDEX@9502..9511
- EXPR_VAR@9502..9505
- NAME@9502..9505
- IDENT@9502..9505 "std"
- DOT@9505..9506 "."
- NAME@9506..9511
- IDENT@9506..9511 "split"
- ARGS_DESC@9511..9519
- L_PAREN@9511..9512 "("
- ARG@9512..9513
- EXPR_VAR@9512..9513
- NAME@9512..9513
- IDENT@9512..9513 "f"
- COMMA@9513..9514 ","
- WHITESPACE@9514..9515 " "
- ARG@9515..9518
- EXPR_STRING@9515..9518
- STRING_SINGLE@9515..9518 "'/'"
- R_PAREN@9518..9519 ")"
- SEMI@9519..9520 ";"
- WHITESPACE@9520..9525 "\n "
- EXPR_APPLY@9525..9600
- EXPR_INDEX@9525..9533
- EXPR_VAR@9525..9528
- NAME@9525..9528
- IDENT@9525..9528 "std"
- DOT@9528..9529 "."
- NAME@9529..9533
- IDENT@9529..9533 "join"
- ARGS_DESC@9533..9600
- L_PAREN@9533..9534 "("
- ARG@9534..9537
- EXPR_STRING@9534..9537
- STRING_SINGLE@9534..9537 "'/'"
- COMMA@9537..9538 ","
- WHITESPACE@9538..9539 " "
- ARG@9539..9599
- EXPR_BINARY@9539..9599
- LHS_EXPR@9539..9593
- EXPR_APPLY@9539..9593
- EXPR_INDEX@9539..9552
- EXPR_VAR@9539..9542
- NAME@9539..9542
- IDENT@9539..9542 "std"
- DOT@9542..9543 "."
- NAME@9543..9552
- IDENT@9543..9552 "makeArray"
- ARGS_DESC@9552..9593
- L_PAREN@9552..9553 "("
- ARG@9553..9572
- EXPR_BINARY@9553..9572
- LHS_EXPR@9553..9568
- EXPR_APPLY@9553..9568
- EXPR_INDEX@9553..9563
- EXPR_VAR@9553..9556
- NAME@9553..9556
- IDENT@9553..9556 "std"
- DOT@9556..9557 "."
- NAME@9557..9563
- IDENT@9557..9563 "length"
- ARGS_DESC@9563..9568
- L_PAREN@9563..9564 "("
- ARG@9564..9567
- EXPR_VAR@9564..9567
- NAME@9564..9567
- IDENT@9564..9567 "arr"
- R_PAREN@9567..9568 ")"
- WHITESPACE@9568..9569 " "
- MINUS@9569..9570 "-"
- WHITESPACE@9570..9571 " "
- EXPR_NUMBER@9571..9572
- FLOAT@9571..9572 "1"
- COMMA@9572..9573 ","
- WHITESPACE@9573..9574 " "
- ARG@9574..9592
- EXPR_FUNCTION@9574..9592
- FUNCTION_KW@9574..9582 "function"
- PARAMS_DESC@9582..9585
- L_PAREN@9582..9583 "("
- PARAM@9583..9584
- DESTRUCT_FULL@9583..9584
- NAME@9583..9584
- IDENT@9583..9584 "i"
- R_PAREN@9584..9585 ")"
- WHITESPACE@9585..9586 " "
- EXPR_INDEX_EXPR@9586..9592
- LHS_EXPR@9586..9589
- EXPR_VAR@9586..9589
- NAME@9586..9589
- IDENT@9586..9589 "arr"
- L_BRACK@9589..9590 "["
- EXPR_VAR@9590..9591
- NAME@9590..9591
- IDENT@9590..9591 "i"
- R_BRACK@9591..9592 "]"
- R_PAREN@9592..9593 ")"
- WHITESPACE@9593..9594 " "
- PLUS@9594..9595 "+"
- WHITESPACE@9595..9596 " "
- EXPR_ARRAY@9596..9599
- L_BRACK@9596..9597 "["
- EXPR_VAR@9597..9598
- NAME@9597..9598
- IDENT@9597..9598 "r"
- R_BRACK@9598..9599 "]"
- R_PAREN@9599..9600 ")"
+ MEMBER_FIELD_METHOD@9466..9600
+ FIELD_NAME_FIXED@9466..9477
+ NAME@9466..9477
+ IDENT@9466..9477 "resolvePath"
+ PARAMS_DESC@9477..9483
+ L_PAREN@9477..9478 "("
+ PARAM@9478..9479
+ DESTRUCT_FULL@9478..9479
+ NAME@9478..9479
+ IDENT@9478..9479 "f"
+ COMMA@9479..9480 ","
+ WHITESPACE@9480..9481 " "
+ PARAM@9481..9482
+ DESTRUCT_FULL@9481..9482
+ NAME@9481..9482
+ IDENT@9481..9482 "r"
+ R_PAREN@9482..9483 ")"
+ COLONCOLON@9483..9485 "::"
+ WHITESPACE@9485..9490 "\n "
+ EXPR_LOCAL@9490..9600
+ LOCAL_KW@9490..9495 "local"
+ WHITESPACE@9495..9496 " "
+ BIND_DESTRUCT@9496..9519
+ DESTRUCT_FULL@9496..9499
+ NAME@9496..9499
+ IDENT@9496..9499 "arr"
+ WHITESPACE@9499..9500 " "
+ ASSIGN@9500..9501 "="
+ WHITESPACE@9501..9502 " "
+ EXPR_APPLY@9502..9519
+ EXPR_INDEX@9502..9511
+ EXPR_VAR@9502..9505
+ NAME@9502..9505
+ IDENT@9502..9505 "std"
+ DOT@9505..9506 "."
+ NAME@9506..9511
+ IDENT@9506..9511 "split"
+ ARGS_DESC@9511..9519
+ L_PAREN@9511..9512 "("
+ ARG@9512..9513
+ EXPR_VAR@9512..9513
+ NAME@9512..9513
+ IDENT@9512..9513 "f"
+ COMMA@9513..9514 ","
+ WHITESPACE@9514..9515 " "
+ ARG@9515..9518
+ EXPR_STRING@9515..9518
+ STRING_SINGLE@9515..9518 "'/'"
+ R_PAREN@9518..9519 ")"
+ SEMI@9519..9520 ";"
+ WHITESPACE@9520..9525 "\n "
+ EXPR_APPLY@9525..9600
+ EXPR_INDEX@9525..9533
+ EXPR_VAR@9525..9528
+ NAME@9525..9528
+ IDENT@9525..9528 "std"
+ DOT@9528..9529 "."
+ NAME@9529..9533
+ IDENT@9529..9533 "join"
+ ARGS_DESC@9533..9600
+ L_PAREN@9533..9534 "("
+ ARG@9534..9537
+ EXPR_STRING@9534..9537
+ STRING_SINGLE@9534..9537 "'/'"
+ COMMA@9537..9538 ","
+ WHITESPACE@9538..9539 " "
+ ARG@9539..9599
+ EXPR_BINARY@9539..9599
+ LHS_EXPR@9539..9593
+ EXPR_APPLY@9539..9593
+ EXPR_INDEX@9539..9552
+ EXPR_VAR@9539..9542
+ NAME@9539..9542
+ IDENT@9539..9542 "std"
+ DOT@9542..9543 "."
+ NAME@9543..9552
+ IDENT@9543..9552 "makeArray"
+ ARGS_DESC@9552..9593
+ L_PAREN@9552..9553 "("
+ ARG@9553..9572
+ EXPR_BINARY@9553..9572
+ LHS_EXPR@9553..9568
+ EXPR_APPLY@9553..9568
+ EXPR_INDEX@9553..9563
+ EXPR_VAR@9553..9556
+ NAME@9553..9556
+ IDENT@9553..9556 "std"
+ DOT@9556..9557 "."
+ NAME@9557..9563
+ IDENT@9557..9563 "length"
+ ARGS_DESC@9563..9568
+ L_PAREN@9563..9564 "("
+ ARG@9564..9567
+ EXPR_VAR@9564..9567
+ NAME@9564..9567
+ IDENT@9564..9567 "arr"
+ R_PAREN@9567..9568 ")"
+ WHITESPACE@9568..9569 " "
+ MINUS@9569..9570 "-"
+ WHITESPACE@9570..9571 " "
+ EXPR_NUMBER@9571..9572
+ FLOAT@9571..9572 "1"
+ COMMA@9572..9573 ","
+ WHITESPACE@9573..9574 " "
+ ARG@9574..9592
+ EXPR_FUNCTION@9574..9592
+ FUNCTION_KW@9574..9582 "function"
+ PARAMS_DESC@9582..9585
+ L_PAREN@9582..9583 "("
+ PARAM@9583..9584
+ DESTRUCT_FULL@9583..9584
+ NAME@9583..9584
+ IDENT@9583..9584 "i"
+ R_PAREN@9584..9585 ")"
+ WHITESPACE@9585..9586 " "
+ EXPR_INDEX_EXPR@9586..9592
+ LHS_EXPR@9586..9589
+ EXPR_VAR@9586..9589
+ NAME@9586..9589
+ IDENT@9586..9589 "arr"
+ L_BRACK@9589..9590 "["
+ EXPR_VAR@9590..9591
+ NAME@9590..9591
+ IDENT@9590..9591 "i"
+ R_BRACK@9591..9592 "]"
+ R_PAREN@9592..9593 ")"
+ WHITESPACE@9593..9594 " "
+ PLUS@9594..9595 "+"
+ WHITESPACE@9595..9596 " "
+ EXPR_ARRAY@9596..9599
+ L_BRACK@9596..9597 "["
+ EXPR_VAR@9597..9598
+ NAME@9597..9598
+ IDENT@9597..9598 "r"
+ R_BRACK@9598..9599 "]"
+ R_PAREN@9599..9600 ")"
COMMA@9600..9601 ","
WHITESPACE@9601..9605 "\n\n "
- MEMBER_FIELD@9605..10058
- FIELD_METHOD@9605..10058
- FIELD_NAME_FIXED@9605..9610
- NAME@9605..9610
- IDENT@9605..9610 "prune"
- PARAMS_DESC@9610..9613
- L_PAREN@9610..9611 "("
- PARAM@9611..9612
- DESTRUCT_FULL@9611..9612
- NAME@9611..9612
- IDENT@9611..9612 "a"
- R_PAREN@9612..9613 ")"
- COLONCOLON@9613..9615 "::"
- WHITESPACE@9615..9620 "\n "
- EXPR_LOCAL@9620..10058
- LOCAL_KW@9620..9625 "local"
- WHITESPACE@9625..9626 " "
- BIND_FUNCTION@9626..9823
- NAME@9626..9635
- IDENT@9626..9635 "isContent"
- PARAMS_DESC@9635..9638
- L_PAREN@9635..9636 "("
- PARAM@9636..9637
- DESTRUCT_FULL@9636..9637
- NAME@9636..9637
- IDENT@9636..9637 "b"
- R_PAREN@9637..9638 ")"
- WHITESPACE@9638..9639 " "
- ASSIGN@9639..9640 "="
- WHITESPACE@9640..9647 "\n "
- EXPR_IF_THEN_ELSE@9647..9823
- IF_KW@9647..9649 "if"
- WHITESPACE@9649..9650 " "
- EXPR_BINARY@9650..9659
- LHS_EXPR@9650..9651
- EXPR_VAR@9650..9651
- NAME@9650..9651
- IDENT@9650..9651 "b"
- WHITESPACE@9651..9652 " "
- EQ@9652..9654 "=="
- WHITESPACE@9654..9655 " "
- EXPR_LITERAL@9655..9659
- NULL_KW@9655..9659 "null"
- WHITESPACE@9659..9660 " "
- THEN_KW@9660..9664 "then"
- WHITESPACE@9664..9673 "\n "
- TRUE_EXPR@9673..9678
- EXPR_LITERAL@9673..9678
- FALSE_KW@9673..9678 "false"
- WHITESPACE@9678..9685 "\n "
- ELSE_KW@9685..9689 "else"
- WHITESPACE@9689..9690 " "
- FALSE_EXPR@9690..9823
- EXPR_IF_THEN_ELSE@9690..9823
- IF_KW@9690..9692 "if"
- WHITESPACE@9692..9693 " "
- EXPR_APPLY@9693..9707
- EXPR_INDEX@9693..9704
- EXPR_VAR@9693..9696
- NAME@9693..9696
- IDENT@9693..9696 "std"
- DOT@9696..9697 "."
- NAME@9697..9704
- IDENT@9697..9704 "isArray"
- ARGS_DESC@9704..9707
- L_PAREN@9704..9705 "("
- ARG@9705..9706
- EXPR_VAR@9705..9706
- NAME@9705..9706
- IDENT@9705..9706 "b"
- R_PAREN@9706..9707 ")"
- WHITESPACE@9707..9708 " "
- THEN_KW@9708..9712 "then"
- WHITESPACE@9712..9721 "\n "
- TRUE_EXPR@9721..9738
- EXPR_BINARY@9721..9738
- LHS_EXPR@9721..9734
- EXPR_APPLY@9721..9734
- EXPR_INDEX@9721..9731
- EXPR_VAR@9721..9724
- NAME@9721..9724
- IDENT@9721..9724 "std"
- DOT@9724..9725 "."
- NAME@9725..9731
- IDENT@9725..9731 "length"
- ARGS_DESC@9731..9734
- L_PAREN@9731..9732 "("
- ARG@9732..9733
- EXPR_VAR@9732..9733
- NAME@9732..9733
- IDENT@9732..9733 "b"
- R_PAREN@9733..9734 ")"
- WHITESPACE@9734..9735 " "
- GT@9735..9736 ">"
- WHITESPACE@9736..9737 " "
- EXPR_NUMBER@9737..9738
- FLOAT@9737..9738 "0"
- WHITESPACE@9738..9745 "\n "
- ELSE_KW@9745..9749 "else"
- WHITESPACE@9749..9750 " "
- FALSE_EXPR@9750..9823
- EXPR_IF_THEN_ELSE@9750..9823
- IF_KW@9750..9752 "if"
- WHITESPACE@9752..9753 " "
- EXPR_APPLY@9753..9768
- EXPR_INDEX@9753..9765
- EXPR_VAR@9753..9756
- NAME@9753..9756
- IDENT@9753..9756 "std"
- DOT@9756..9757 "."
- NAME@9757..9765
- IDENT@9757..9765 "isObject"
- ARGS_DESC@9765..9768
- L_PAREN@9765..9766 "("
- ARG@9766..9767
- EXPR_VAR@9766..9767
- NAME@9766..9767
- IDENT@9766..9767 "b"
- R_PAREN@9767..9768 ")"
- WHITESPACE@9768..9769 " "
- THEN_KW@9769..9773 "then"
- WHITESPACE@9773..9782 "\n "
- TRUE_EXPR@9782..9799
- EXPR_BINARY@9782..9799
- LHS_EXPR@9782..9795
- EXPR_APPLY@9782..9795
- EXPR_INDEX@9782..9792
- EXPR_VAR@9782..9785
- NAME@9782..9785
- IDENT@9782..9785 "std"
- DOT@9785..9786 "."
- NAME@9786..9792
- IDENT@9786..9792 "length"
- ARGS_DESC@9792..9795
- L_PAREN@9792..9793 "("
- ARG@9793..9794
- EXPR_VAR@9793..9794
- NAME@9793..9794
- IDENT@9793..9794 "b"
- R_PAREN@9794..9795 ")"
- WHITESPACE@9795..9796 " "
- GT@9796..9797 ">"
- WHITESPACE@9797..9798 " "
- EXPR_NUMBER@9798..9799
- FLOAT@9798..9799 "0"
- WHITESPACE@9799..9806 "\n "
- ELSE_KW@9806..9810 "else"
- WHITESPACE@9810..9819 "\n "
- FALSE_EXPR@9819..9823
- EXPR_LITERAL@9819..9823
- TRUE_KW@9819..9823 "true"
- SEMI@9823..9824 ";"
- WHITESPACE@9824..9829 "\n "
- EXPR_IF_THEN_ELSE@9829..10058
- IF_KW@9829..9831 "if"
- WHITESPACE@9831..9832 " "
- EXPR_APPLY@9832..9846
- EXPR_INDEX@9832..9843
- EXPR_VAR@9832..9835
- NAME@9832..9835
- IDENT@9832..9835 "std"
- DOT@9835..9836 "."
- NAME@9836..9843
- IDENT@9836..9843 "isArray"
- ARGS_DESC@9843..9846
- L_PAREN@9843..9844 "("
- ARG@9844..9845
- EXPR_VAR@9844..9845
- NAME@9844..9845
- IDENT@9844..9845 "a"
- R_PAREN@9845..9846 ")"
- WHITESPACE@9846..9847 " "
- THEN_KW@9847..9851 "then"
- WHITESPACE@9851..9858 "\n "
- TRUE_EXPR@9858..9908
- EXPR_ARRAY_COMP@9858..9908
- L_BRACK@9858..9859 "["
- EXPR_APPLY@9859..9871
- EXPR_INDEX@9859..9868
- EXPR_VAR@9859..9862
- NAME@9859..9862
- IDENT@9859..9862 "std"
- DOT@9862..9863 "."
- NAME@9863..9868
- IDENT@9863..9868 "prune"
- ARGS_DESC@9868..9871
- L_PAREN@9868..9869 "("
- ARG@9869..9870
- EXPR_VAR@9869..9870
- NAME@9869..9870
- IDENT@9869..9870 "x"
- R_PAREN@9870..9871 ")"
- WHITESPACE@9871..9872 " "
- FOR_SPEC@9872..9882
- FOR_KW@9872..9875 "for"
- WHITESPACE@9875..9876 " "
- NAME@9876..9877
- IDENT@9876..9877 "x"
- WHITESPACE@9877..9878 " "
- IN_KW@9878..9880 "in"
- WHITESPACE@9880..9881 " "
- EXPR_VAR@9881..9882
- NAME@9881..9882
- IDENT@9881..9882 "a"
- WHITESPACE@9882..9883 " "
- IF_SPEC@9883..9907
- IF_KW@9883..9885 "if"
- WHITESPACE@9885..9886 " "
- EXPR_APPLY@9886..9907
- EXPR_VAR@9886..9895
- NAME@9886..9895
- IDENT@9886..9895 "isContent"
- ARGS_DESC@9895..9907
- L_PAREN@9895..9896 "("
- ARG@9896..9906
- EXPR_APPLY@9896..9906
- EXPR_INDEX@9896..9903
- EXPR_LITERAL@9896..9897
- DOLLAR@9896..9897 "$"
- DOT@9897..9898 "."
- NAME@9898..9903
- IDENT@9898..9903 "prune"
- ARGS_DESC@9903..9906
- L_PAREN@9903..9904 "("
- ARG@9904..9905
- EXPR_VAR@9904..9905
- NAME@9904..9905
- IDENT@9904..9905 "x"
- R_PAREN@9905..9906 ")"
- R_PAREN@9906..9907 ")"
- R_BRACK@9907..9908 "]"
- WHITESPACE@9908..9913 "\n "
- ELSE_KW@9913..9917 "else"
- WHITESPACE@9917..9918 " "
- FALSE_EXPR@9918..10058
- EXPR_IF_THEN_ELSE@9918..10058
- IF_KW@9918..9920 "if"
- WHITESPACE@9920..9921 " "
- EXPR_APPLY@9921..9936
- EXPR_INDEX@9921..9933
- EXPR_VAR@9921..9924
- NAME@9921..9924
- IDENT@9921..9924 "std"
- DOT@9924..9925 "."
- NAME@9925..9933
- IDENT@9925..9933 "isObject"
- ARGS_DESC@9933..9936
- L_PAREN@9933..9934 "("
- ARG@9934..9935
- EXPR_VAR@9934..9935
- NAME@9934..9935
- IDENT@9934..9935 "a"
- R_PAREN@9935..9936 ")"
- WHITESPACE@9936..9937 " "
- THEN_KW@9937..9941 "then"
- WHITESPACE@9941..9942 " "
- TRUE_EXPR@9942..10045
- EXPR_OBJECT@9942..10045
- OBJ_BODY_MEMBER_LIST@9942..10045
- L_BRACE@9942..9943 "{"
- WHITESPACE@9943..9950 "\n "
- MEMBER_FIELD@9950..10039
- FIELD_NORMAL@9950..9968
- FIELD_NAME_DYNAMIC@9950..9953
- L_BRACK@9950..9951 "["
- EXPR_VAR@9951..9952
- NAME@9951..9952
- IDENT@9951..9952 "x"
- R_BRACK@9952..9953 "]"
- COLON@9953..9954 ":"
- WHITESPACE@9954..9955 " "
- EXPR_APPLY@9955..9968
- EXPR_INDEX@9955..9962
- EXPR_LITERAL@9955..9956
- DOLLAR@9955..9956 "$"
- DOT@9956..9957 "."
- NAME@9957..9962
- IDENT@9957..9962 "prune"
- ARGS_DESC@9962..9968
- L_PAREN@9962..9963 "("
- ARG@9963..9967
- EXPR_INDEX_EXPR@9963..9967
- LHS_EXPR@9963..9964
- EXPR_VAR@9963..9964
- NAME@9963..9964
- IDENT@9963..9964 "a"
- L_BRACK@9964..9965 "["
- EXPR_VAR@9965..9966
- NAME@9965..9966
- IDENT@9965..9966 "x"
- R_BRACK@9966..9967 "]"
- R_PAREN@9967..9968 ")"
- WHITESPACE@9968..9975 "\n "
- FOR_SPEC@9975..10003
- FOR_KW@9975..9978 "for"
- WHITESPACE@9978..9979 " "
- NAME@9979..9980
- IDENT@9979..9980 "x"
- WHITESPACE@9980..9981 " "
- IN_KW@9981..9983 "in"
- WHITESPACE@9983..9984 " "
- EXPR_APPLY@9984..10003
- EXPR_INDEX@9984..10000
- EXPR_VAR@9984..9987
- NAME@9984..9987
- IDENT@9984..9987 "std"
- DOT@9987..9988 "."
- NAME@9988..10000
- IDENT@9988..10000 "objectFields"
- ARGS_DESC@10000..10003
- L_PAREN@10000..10001 "("
- ARG@10001..10002
- EXPR_VAR@10001..10002
- NAME@10001..10002
- IDENT@10001..10002 "a"
- R_PAREN@10002..10003 ")"
- WHITESPACE@10003..10010 "\n "
- IF_SPEC@10010..10039
- IF_KW@10010..10012 "if"
- WHITESPACE@10012..10013 " "
- EXPR_APPLY@10013..10039
- EXPR_VAR@10013..10022
- NAME@10013..10022
- IDENT@10013..10022 "isContent"
- ARGS_DESC@10022..10039
- L_PAREN@10022..10023 "("
- ARG@10023..10038
- EXPR_APPLY@10023..10038
- EXPR_INDEX@10023..10032
- EXPR_VAR@10023..10026
- NAME@10023..10026
- IDENT@10023..10026 "std"
- DOT@10026..10027 "."
- NAME@10027..10032
- IDENT@10027..10032 "prune"
- ARGS_DESC@10032..10038
- L_PAREN@10032..10033 "("
- ARG@10033..10037
- EXPR_INDEX_EXPR@10033..10037
- LHS_EXPR@10033..10034
- EXPR_VAR@10033..10034
- NAME@10033..10034
- IDENT@10033..10034 "a"
- L_BRACK@10034..10035 "["
- EXPR_VAR@10035..10036
- NAME@10035..10036
- IDENT@10035..10036 "x"
- R_BRACK@10036..10037 "]"
- R_PAREN@10037..10038 ")"
- R_PAREN@10038..10039 ")"
- WHITESPACE@10039..10044 "\n "
- R_BRACE@10044..10045 "}"
- WHITESPACE@10045..10046 " "
- ELSE_KW@10046..10050 "else"
- WHITESPACE@10050..10057 "\n "
- FALSE_EXPR@10057..10058
- EXPR_VAR@10057..10058
- NAME@10057..10058
- IDENT@10057..10058 "a"
+ MEMBER_FIELD_METHOD@9605..10058
+ FIELD_NAME_FIXED@9605..9610
+ NAME@9605..9610
+ IDENT@9605..9610 "prune"
+ PARAMS_DESC@9610..9613
+ L_PAREN@9610..9611 "("
+ PARAM@9611..9612
+ DESTRUCT_FULL@9611..9612
+ NAME@9611..9612
+ IDENT@9611..9612 "a"
+ R_PAREN@9612..9613 ")"
+ COLONCOLON@9613..9615 "::"
+ WHITESPACE@9615..9620 "\n "
+ EXPR_LOCAL@9620..10058
+ LOCAL_KW@9620..9625 "local"
+ WHITESPACE@9625..9626 " "
+ BIND_FUNCTION@9626..9823
+ NAME@9626..9635
+ IDENT@9626..9635 "isContent"
+ PARAMS_DESC@9635..9638
+ L_PAREN@9635..9636 "("
+ PARAM@9636..9637
+ DESTRUCT_FULL@9636..9637
+ NAME@9636..9637
+ IDENT@9636..9637 "b"
+ R_PAREN@9637..9638 ")"
+ WHITESPACE@9638..9639 " "
+ ASSIGN@9639..9640 "="
+ WHITESPACE@9640..9647 "\n "
+ EXPR_IF_THEN_ELSE@9647..9823
+ IF_KW@9647..9649 "if"
+ WHITESPACE@9649..9650 " "
+ EXPR_BINARY@9650..9659
+ LHS_EXPR@9650..9651
+ EXPR_VAR@9650..9651
+ NAME@9650..9651
+ IDENT@9650..9651 "b"
+ WHITESPACE@9651..9652 " "
+ EQ@9652..9654 "=="
+ WHITESPACE@9654..9655 " "
+ EXPR_LITERAL@9655..9659
+ NULL_KW@9655..9659 "null"
+ WHITESPACE@9659..9660 " "
+ THEN_KW@9660..9664 "then"
+ WHITESPACE@9664..9673 "\n "
+ TRUE_EXPR@9673..9678
+ EXPR_LITERAL@9673..9678
+ FALSE_KW@9673..9678 "false"
+ WHITESPACE@9678..9685 "\n "
+ ELSE_KW@9685..9689 "else"
+ WHITESPACE@9689..9690 " "
+ FALSE_EXPR@9690..9823
+ EXPR_IF_THEN_ELSE@9690..9823
+ IF_KW@9690..9692 "if"
+ WHITESPACE@9692..9693 " "
+ EXPR_APPLY@9693..9707
+ EXPR_INDEX@9693..9704
+ EXPR_VAR@9693..9696
+ NAME@9693..9696
+ IDENT@9693..9696 "std"
+ DOT@9696..9697 "."
+ NAME@9697..9704
+ IDENT@9697..9704 "isArray"
+ ARGS_DESC@9704..9707
+ L_PAREN@9704..9705 "("
+ ARG@9705..9706
+ EXPR_VAR@9705..9706
+ NAME@9705..9706
+ IDENT@9705..9706 "b"
+ R_PAREN@9706..9707 ")"
+ WHITESPACE@9707..9708 " "
+ THEN_KW@9708..9712 "then"
+ WHITESPACE@9712..9721 "\n "
+ TRUE_EXPR@9721..9738
+ EXPR_BINARY@9721..9738
+ LHS_EXPR@9721..9734
+ EXPR_APPLY@9721..9734
+ EXPR_INDEX@9721..9731
+ EXPR_VAR@9721..9724
+ NAME@9721..9724
+ IDENT@9721..9724 "std"
+ DOT@9724..9725 "."
+ NAME@9725..9731
+ IDENT@9725..9731 "length"
+ ARGS_DESC@9731..9734
+ L_PAREN@9731..9732 "("
+ ARG@9732..9733
+ EXPR_VAR@9732..9733
+ NAME@9732..9733
+ IDENT@9732..9733 "b"
+ R_PAREN@9733..9734 ")"
+ WHITESPACE@9734..9735 " "
+ GT@9735..9736 ">"
+ WHITESPACE@9736..9737 " "
+ EXPR_NUMBER@9737..9738
+ FLOAT@9737..9738 "0"
+ WHITESPACE@9738..9745 "\n "
+ ELSE_KW@9745..9749 "else"
+ WHITESPACE@9749..9750 " "
+ FALSE_EXPR@9750..9823
+ EXPR_IF_THEN_ELSE@9750..9823
+ IF_KW@9750..9752 "if"
+ WHITESPACE@9752..9753 " "
+ EXPR_APPLY@9753..9768
+ EXPR_INDEX@9753..9765
+ EXPR_VAR@9753..9756
+ NAME@9753..9756
+ IDENT@9753..9756 "std"
+ DOT@9756..9757 "."
+ NAME@9757..9765
+ IDENT@9757..9765 "isObject"
+ ARGS_DESC@9765..9768
+ L_PAREN@9765..9766 "("
+ ARG@9766..9767
+ EXPR_VAR@9766..9767
+ NAME@9766..9767
+ IDENT@9766..9767 "b"
+ R_PAREN@9767..9768 ")"
+ WHITESPACE@9768..9769 " "
+ THEN_KW@9769..9773 "then"
+ WHITESPACE@9773..9782 "\n "
+ TRUE_EXPR@9782..9799
+ EXPR_BINARY@9782..9799
+ LHS_EXPR@9782..9795
+ EXPR_APPLY@9782..9795
+ EXPR_INDEX@9782..9792
+ EXPR_VAR@9782..9785
+ NAME@9782..9785
+ IDENT@9782..9785 "std"
+ DOT@9785..9786 "."
+ NAME@9786..9792
+ IDENT@9786..9792 "length"
+ ARGS_DESC@9792..9795
+ L_PAREN@9792..9793 "("
+ ARG@9793..9794
+ EXPR_VAR@9793..9794
+ NAME@9793..9794
+ IDENT@9793..9794 "b"
+ R_PAREN@9794..9795 ")"
+ WHITESPACE@9795..9796 " "
+ GT@9796..9797 ">"
+ WHITESPACE@9797..9798 " "
+ EXPR_NUMBER@9798..9799
+ FLOAT@9798..9799 "0"
+ WHITESPACE@9799..9806 "\n "
+ ELSE_KW@9806..9810 "else"
+ WHITESPACE@9810..9819 "\n "
+ FALSE_EXPR@9819..9823
+ EXPR_LITERAL@9819..9823
+ TRUE_KW@9819..9823 "true"
+ SEMI@9823..9824 ";"
+ WHITESPACE@9824..9829 "\n "
+ EXPR_IF_THEN_ELSE@9829..10058
+ IF_KW@9829..9831 "if"
+ WHITESPACE@9831..9832 " "
+ EXPR_APPLY@9832..9846
+ EXPR_INDEX@9832..9843
+ EXPR_VAR@9832..9835
+ NAME@9832..9835
+ IDENT@9832..9835 "std"
+ DOT@9835..9836 "."
+ NAME@9836..9843
+ IDENT@9836..9843 "isArray"
+ ARGS_DESC@9843..9846
+ L_PAREN@9843..9844 "("
+ ARG@9844..9845
+ EXPR_VAR@9844..9845
+ NAME@9844..9845
+ IDENT@9844..9845 "a"
+ R_PAREN@9845..9846 ")"
+ WHITESPACE@9846..9847 " "
+ THEN_KW@9847..9851 "then"
+ WHITESPACE@9851..9858 "\n "
+ TRUE_EXPR@9858..9908
+ EXPR_ARRAY_COMP@9858..9908
+ L_BRACK@9858..9859 "["
+ EXPR_APPLY@9859..9871
+ EXPR_INDEX@9859..9868
+ EXPR_VAR@9859..9862
+ NAME@9859..9862
+ IDENT@9859..9862 "std"
+ DOT@9862..9863 "."
+ NAME@9863..9868
+ IDENT@9863..9868 "prune"
+ ARGS_DESC@9868..9871
+ L_PAREN@9868..9869 "("
+ ARG@9869..9870
+ EXPR_VAR@9869..9870
+ NAME@9869..9870
+ IDENT@9869..9870 "x"
+ R_PAREN@9870..9871 ")"
+ WHITESPACE@9871..9872 " "
+ FOR_SPEC@9872..9882
+ FOR_KW@9872..9875 "for"
+ WHITESPACE@9875..9876 " "
+ NAME@9876..9877
+ IDENT@9876..9877 "x"
+ WHITESPACE@9877..9878 " "
+ IN_KW@9878..9880 "in"
+ WHITESPACE@9880..9881 " "
+ EXPR_VAR@9881..9882
+ NAME@9881..9882
+ IDENT@9881..9882 "a"
+ WHITESPACE@9882..9883 " "
+ IF_SPEC@9883..9907
+ IF_KW@9883..9885 "if"
+ WHITESPACE@9885..9886 " "
+ EXPR_APPLY@9886..9907
+ EXPR_VAR@9886..9895
+ NAME@9886..9895
+ IDENT@9886..9895 "isContent"
+ ARGS_DESC@9895..9907
+ L_PAREN@9895..9896 "("
+ ARG@9896..9906
+ EXPR_APPLY@9896..9906
+ EXPR_INDEX@9896..9903
+ EXPR_LITERAL@9896..9897
+ DOLLAR@9896..9897 "$"
+ DOT@9897..9898 "."
+ NAME@9898..9903
+ IDENT@9898..9903 "prune"
+ ARGS_DESC@9903..9906
+ L_PAREN@9903..9904 "("
+ ARG@9904..9905
+ EXPR_VAR@9904..9905
+ NAME@9904..9905
+ IDENT@9904..9905 "x"
+ R_PAREN@9905..9906 ")"
+ R_PAREN@9906..9907 ")"
+ R_BRACK@9907..9908 "]"
+ WHITESPACE@9908..9913 "\n "
+ ELSE_KW@9913..9917 "else"
+ WHITESPACE@9917..9918 " "
+ FALSE_EXPR@9918..10058
+ EXPR_IF_THEN_ELSE@9918..10058
+ IF_KW@9918..9920 "if"
+ WHITESPACE@9920..9921 " "
+ EXPR_APPLY@9921..9936
+ EXPR_INDEX@9921..9933
+ EXPR_VAR@9921..9924
+ NAME@9921..9924
+ IDENT@9921..9924 "std"
+ DOT@9924..9925 "."
+ NAME@9925..9933
+ IDENT@9925..9933 "isObject"
+ ARGS_DESC@9933..9936
+ L_PAREN@9933..9934 "("
+ ARG@9934..9935
+ EXPR_VAR@9934..9935
+ NAME@9934..9935
+ IDENT@9934..9935 "a"
+ R_PAREN@9935..9936 ")"
+ WHITESPACE@9936..9937 " "
+ THEN_KW@9937..9941 "then"
+ WHITESPACE@9941..9942 " "
+ TRUE_EXPR@9942..10045
+ EXPR_OBJECT@9942..10045
+ OBJ_BODY_COMP@9942..10045
+ L_BRACE@9942..9943 "{"
+ WHITESPACE@9943..9950 "\n "
+ MEMBER_FIELD_NORMAL@9950..9968
+ FIELD_NAME_DYNAMIC@9950..9953
+ L_BRACK@9950..9951 "["
+ EXPR_VAR@9951..9952
+ NAME@9951..9952
+ IDENT@9951..9952 "x"
+ R_BRACK@9952..9953 "]"
+ COLON@9953..9954 ":"
+ WHITESPACE@9954..9955 " "
+ EXPR_APPLY@9955..9968
+ EXPR_INDEX@9955..9962
+ EXPR_LITERAL@9955..9956
+ DOLLAR@9955..9956 "$"
+ DOT@9956..9957 "."
+ NAME@9957..9962
+ IDENT@9957..9962 "prune"
+ ARGS_DESC@9962..9968
+ L_PAREN@9962..9963 "("
+ ARG@9963..9967
+ EXPR_INDEX_EXPR@9963..9967
+ LHS_EXPR@9963..9964
+ EXPR_VAR@9963..9964
+ NAME@9963..9964
+ IDENT@9963..9964 "a"
+ L_BRACK@9964..9965 "["
+ EXPR_VAR@9965..9966
+ NAME@9965..9966
+ IDENT@9965..9966 "x"
+ R_BRACK@9966..9967 "]"
+ R_PAREN@9967..9968 ")"
+ WHITESPACE@9968..9975 "\n "
+ FOR_SPEC@9975..10003
+ FOR_KW@9975..9978 "for"
+ WHITESPACE@9978..9979 " "
+ NAME@9979..9980
+ IDENT@9979..9980 "x"
+ WHITESPACE@9980..9981 " "
+ IN_KW@9981..9983 "in"
+ WHITESPACE@9983..9984 " "
+ EXPR_APPLY@9984..10003
+ EXPR_INDEX@9984..10000
+ EXPR_VAR@9984..9987
+ NAME@9984..9987
+ IDENT@9984..9987 "std"
+ DOT@9987..9988 "."
+ NAME@9988..10000
+ IDENT@9988..10000 "objectFields"
+ ARGS_DESC@10000..10003
+ L_PAREN@10000..10001 "("
+ ARG@10001..10002
+ EXPR_VAR@10001..10002
+ NAME@10001..10002
+ IDENT@10001..10002 "a"
+ R_PAREN@10002..10003 ")"
+ WHITESPACE@10003..10010 "\n "
+ IF_SPEC@10010..10039
+ IF_KW@10010..10012 "if"
+ WHITESPACE@10012..10013 " "
+ EXPR_APPLY@10013..10039
+ EXPR_VAR@10013..10022
+ NAME@10013..10022
+ IDENT@10013..10022 "isContent"
+ ARGS_DESC@10022..10039
+ L_PAREN@10022..10023 "("
+ ARG@10023..10038
+ EXPR_APPLY@10023..10038
+ EXPR_INDEX@10023..10032
+ EXPR_VAR@10023..10026
+ NAME@10023..10026
+ IDENT@10023..10026 "std"
+ DOT@10026..10027 "."
+ NAME@10027..10032
+ IDENT@10027..10032 "prune"
+ ARGS_DESC@10032..10038
+ L_PAREN@10032..10033 "("
+ ARG@10033..10037
+ EXPR_INDEX_EXPR@10033..10037
+ LHS_EXPR@10033..10034
+ EXPR_VAR@10033..10034
+ NAME@10033..10034
+ IDENT@10033..10034 "a"
+ L_BRACK@10034..10035 "["
+ EXPR_VAR@10035..10036
+ NAME@10035..10036
+ IDENT@10035..10036 "x"
+ R_BRACK@10036..10037 "]"
+ R_PAREN@10037..10038 ")"
+ R_PAREN@10038..10039 ")"
+ WHITESPACE@10039..10044 "\n "
+ R_BRACE@10044..10045 "}"
+ WHITESPACE@10045..10046 " "
+ ELSE_KW@10046..10050 "else"
+ WHITESPACE@10050..10057 "\n "
+ FALSE_EXPR@10057..10058
+ EXPR_VAR@10057..10058
+ NAME@10057..10058
+ IDENT@10057..10058 "a"
COMMA@10058..10059 ","
WHITESPACE@10059..10063 "\n\n "
- MEMBER_FIELD@10063..10278
- FIELD_METHOD@10063..10278
- FIELD_NAME_FIXED@10063..10067
- NAME@10063..10067
- IDENT@10063..10067 "find"
- PARAMS_DESC@10067..10079
- L_PAREN@10067..10068 "("
- PARAM@10068..10073
- DESTRUCT_FULL@10068..10073
- NAME@10068..10073
- IDENT@10068..10073 "value"
- COMMA@10073..10074 ","
- WHITESPACE@10074..10075 " "
- PARAM@10075..10078
- DESTRUCT_FULL@10075..10078
- NAME@10075..10078
- IDENT@10075..10078 "arr"
- R_PAREN@10078..10079 ")"
- COLONCOLON@10079..10081 "::"
- WHITESPACE@10081..10086 "\n "
- EXPR_IF_THEN_ELSE@10086..10278
- IF_KW@10086..10088 "if"
- WHITESPACE@10088..10089 " "
- EXPR_UNARY@10089..10106
- NOT@10089..10090 "!"
- EXPR_APPLY@10090..10106
- EXPR_INDEX@10090..10101
- EXPR_VAR@10090..10093
- NAME@10090..10093
- IDENT@10090..10093 "std"
- DOT@10093..10094 "."
- NAME@10094..10101
- IDENT@10094..10101 "isArray"
- ARGS_DESC@10101..10106
- L_PAREN@10101..10102 "("
- ARG@10102..10105
- EXPR_VAR@10102..10105
- NAME@10102..10105
- IDENT@10102..10105 "arr"
- R_PAREN@10105..10106 ")"
- WHITESPACE@10106..10107 " "
- THEN_KW@10107..10111 "then"
- WHITESPACE@10111..10118 "\n "
- TRUE_EXPR@10118..10188
- EXPR_ERROR@10118..10188
- ERROR_KW@10118..10123 "error"
- WHITESPACE@10123..10124 " "
- EXPR_BINARY@10124..10188
- LHS_EXPR@10124..10172
- EXPR_STRING@10124..10172
- STRING_SINGLE@10124..10172 "'find second paramete ..."
- WHITESPACE@10172..10173 " "
- PLUS@10173..10174 "+"
- WHITESPACE@10174..10175 " "
- EXPR_APPLY@10175..10188
- EXPR_INDEX@10175..10183
- EXPR_VAR@10175..10178
- NAME@10175..10178
- IDENT@10175..10178 "std"
- DOT@10178..10179 "."
- NAME@10179..10183
- IDENT@10179..10183 "type"
- ARGS_DESC@10183..10188
- L_PAREN@10183..10184 "("
- ARG@10184..10187
- EXPR_VAR@10184..10187
- NAME@10184..10187
- IDENT@10184..10187 "arr"
- R_PAREN@10187..10188 ")"
- WHITESPACE@10188..10193 "\n "
- ELSE_KW@10193..10197 "else"
- WHITESPACE@10197..10204 "\n "
- FALSE_EXPR@10204..10278
- EXPR_APPLY@10204..10278
- EXPR_INDEX@10204..10214
- EXPR_VAR@10204..10207
- NAME@10204..10207
- IDENT@10204..10207 "std"
- DOT@10207..10208 "."
- NAME@10208..10214
- IDENT@10208..10214 "filter"
- ARGS_DESC@10214..10278
- L_PAREN@10214..10215 "("
- ARG@10215..10242
- EXPR_FUNCTION@10215..10242
- FUNCTION_KW@10215..10223 "function"
- PARAMS_DESC@10223..10226
- L_PAREN@10223..10224 "("
- PARAM@10224..10225
- DESTRUCT_FULL@10224..10225
- NAME@10224..10225
- IDENT@10224..10225 "i"
- R_PAREN@10225..10226 ")"
- WHITESPACE@10226..10227 " "
- EXPR_BINARY@10227..10242
- LHS_EXPR@10227..10233
- EXPR_INDEX_EXPR@10227..10233
- LHS_EXPR@10227..10230
- EXPR_VAR@10227..10230
- NAME@10227..10230
- IDENT@10227..10230 "arr"
- L_BRACK@10230..10231 "["
- EXPR_VAR@10231..10232
- NAME@10231..10232
- IDENT@10231..10232 "i"
- R_BRACK@10232..10233 "]"
- WHITESPACE@10233..10234 " "
- EQ@10234..10236 "=="
- WHITESPACE@10236..10237 " "
- EXPR_VAR@10237..10242
- NAME@10237..10242
- IDENT@10237..10242 "value"
- COMMA@10242..10243 ","
- WHITESPACE@10243..10244 " "
- ARG@10244..10277
- EXPR_APPLY@10244..10277
- EXPR_INDEX@10244..10253
- EXPR_VAR@10244..10247
- NAME@10244..10247
- IDENT@10244..10247 "std"
- DOT@10247..10248 "."
- NAME@10248..10253
- IDENT@10248..10253 "range"
- ARGS_DESC@10253..10277
- L_PAREN@10253..10254 "("
- ARG@10254..10255
- EXPR_NUMBER@10254..10255
- FLOAT@10254..10255 "0"
- COMMA@10255..10256 ","
- WHITESPACE@10256..10257 " "
- ARG@10257..10276
- EXPR_BINARY@10257..10276
- LHS_EXPR@10257..10272
- EXPR_APPLY@10257..10272
- EXPR_INDEX@10257..10267
- EXPR_VAR@10257..10260
- NAME@10257..10260
- IDENT@10257..10260 "std"
- DOT@10260..10261 "."
- NAME@10261..10267
- IDENT@10261..10267 "length"
- ARGS_DESC@10267..10272
- L_PAREN@10267..10268 "("
- ARG@10268..10271
- EXPR_VAR@10268..10271
- NAME@10268..10271
- IDENT@10268..10271 "arr"
- R_PAREN@10271..10272 ")"
- WHITESPACE@10272..10273 " "
- MINUS@10273..10274 "-"
- WHITESPACE@10274..10275 " "
- EXPR_NUMBER@10275..10276
- FLOAT@10275..10276 "1"
- R_PAREN@10276..10277 ")"
- R_PAREN@10277..10278 ")"
+ MEMBER_FIELD_METHOD@10063..10278
+ FIELD_NAME_FIXED@10063..10067
+ NAME@10063..10067
+ IDENT@10063..10067 "find"
+ PARAMS_DESC@10067..10079
+ L_PAREN@10067..10068 "("
+ PARAM@10068..10073
+ DESTRUCT_FULL@10068..10073
+ NAME@10068..10073
+ IDENT@10068..10073 "value"
+ COMMA@10073..10074 ","
+ WHITESPACE@10074..10075 " "
+ PARAM@10075..10078
+ DESTRUCT_FULL@10075..10078
+ NAME@10075..10078
+ IDENT@10075..10078 "arr"
+ R_PAREN@10078..10079 ")"
+ COLONCOLON@10079..10081 "::"
+ WHITESPACE@10081..10086 "\n "
+ EXPR_IF_THEN_ELSE@10086..10278
+ IF_KW@10086..10088 "if"
+ WHITESPACE@10088..10089 " "
+ EXPR_UNARY@10089..10106
+ NOT@10089..10090 "!"
+ EXPR_APPLY@10090..10106
+ EXPR_INDEX@10090..10101
+ EXPR_VAR@10090..10093
+ NAME@10090..10093
+ IDENT@10090..10093 "std"
+ DOT@10093..10094 "."
+ NAME@10094..10101
+ IDENT@10094..10101 "isArray"
+ ARGS_DESC@10101..10106
+ L_PAREN@10101..10102 "("
+ ARG@10102..10105
+ EXPR_VAR@10102..10105
+ NAME@10102..10105
+ IDENT@10102..10105 "arr"
+ R_PAREN@10105..10106 ")"
+ WHITESPACE@10106..10107 " "
+ THEN_KW@10107..10111 "then"
+ WHITESPACE@10111..10118 "\n "
+ TRUE_EXPR@10118..10188
+ EXPR_ERROR@10118..10188
+ ERROR_KW@10118..10123 "error"
+ WHITESPACE@10123..10124 " "
+ EXPR_BINARY@10124..10188
+ LHS_EXPR@10124..10172
+ EXPR_STRING@10124..10172
+ STRING_SINGLE@10124..10172 "'find second paramete ..."
+ WHITESPACE@10172..10173 " "
+ PLUS@10173..10174 "+"
+ WHITESPACE@10174..10175 " "
+ EXPR_APPLY@10175..10188
+ EXPR_INDEX@10175..10183
+ EXPR_VAR@10175..10178
+ NAME@10175..10178
+ IDENT@10175..10178 "std"
+ DOT@10178..10179 "."
+ NAME@10179..10183
+ IDENT@10179..10183 "type"
+ ARGS_DESC@10183..10188
+ L_PAREN@10183..10184 "("
+ ARG@10184..10187
+ EXPR_VAR@10184..10187
+ NAME@10184..10187
+ IDENT@10184..10187 "arr"
+ R_PAREN@10187..10188 ")"
+ WHITESPACE@10188..10193 "\n "
+ ELSE_KW@10193..10197 "else"
+ WHITESPACE@10197..10204 "\n "
+ FALSE_EXPR@10204..10278
+ EXPR_APPLY@10204..10278
+ EXPR_INDEX@10204..10214
+ EXPR_VAR@10204..10207
+ NAME@10204..10207
+ IDENT@10204..10207 "std"
+ DOT@10207..10208 "."
+ NAME@10208..10214
+ IDENT@10208..10214 "filter"
+ ARGS_DESC@10214..10278
+ L_PAREN@10214..10215 "("
+ ARG@10215..10242
+ EXPR_FUNCTION@10215..10242
+ FUNCTION_KW@10215..10223 "function"
+ PARAMS_DESC@10223..10226
+ L_PAREN@10223..10224 "("
+ PARAM@10224..10225
+ DESTRUCT_FULL@10224..10225
+ NAME@10224..10225
+ IDENT@10224..10225 "i"
+ R_PAREN@10225..10226 ")"
+ WHITESPACE@10226..10227 " "
+ EXPR_BINARY@10227..10242
+ LHS_EXPR@10227..10233
+ EXPR_INDEX_EXPR@10227..10233
+ LHS_EXPR@10227..10230
+ EXPR_VAR@10227..10230
+ NAME@10227..10230
+ IDENT@10227..10230 "arr"
+ L_BRACK@10230..10231 "["
+ EXPR_VAR@10231..10232
+ NAME@10231..10232
+ IDENT@10231..10232 "i"
+ R_BRACK@10232..10233 "]"
+ WHITESPACE@10233..10234 " "
+ EQ@10234..10236 "=="
+ WHITESPACE@10236..10237 " "
+ EXPR_VAR@10237..10242
+ NAME@10237..10242
+ IDENT@10237..10242 "value"
+ COMMA@10242..10243 ","
+ WHITESPACE@10243..10244 " "
+ ARG@10244..10277
+ EXPR_APPLY@10244..10277
+ EXPR_INDEX@10244..10253
+ EXPR_VAR@10244..10247
+ NAME@10244..10247
+ IDENT@10244..10247 "std"
+ DOT@10247..10248 "."
+ NAME@10248..10253
+ IDENT@10248..10253 "range"
+ ARGS_DESC@10253..10277
+ L_PAREN@10253..10254 "("
+ ARG@10254..10255
+ EXPR_NUMBER@10254..10255
+ FLOAT@10254..10255 "0"
+ COMMA@10255..10256 ","
+ WHITESPACE@10256..10257 " "
+ ARG@10257..10276
+ EXPR_BINARY@10257..10276
+ LHS_EXPR@10257..10272
+ EXPR_APPLY@10257..10272
+ EXPR_INDEX@10257..10267
+ EXPR_VAR@10257..10260
+ NAME@10257..10260
+ IDENT@10257..10260 "std"
+ DOT@10260..10261 "."
+ NAME@10261..10267
+ IDENT@10261..10267 "length"
+ ARGS_DESC@10267..10272
+ L_PAREN@10267..10268 "("
+ ARG@10268..10271
+ EXPR_VAR@10268..10271
+ NAME@10268..10271
+ IDENT@10268..10271 "arr"
+ R_PAREN@10271..10272 ")"
+ WHITESPACE@10272..10273 " "
+ MINUS@10273..10274 "-"
+ WHITESPACE@10274..10275 " "
+ EXPR_NUMBER@10275..10276
+ FLOAT@10275..10276 "1"
+ R_PAREN@10276..10277 ")"
+ R_PAREN@10277..10278 ")"
COMMA@10278..10279 ","
WHITESPACE@10279..10280 "\n"
R_BRACE@10280..10281 "}"
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,37 +2,47 @@
source: crates/jrsonnet-rowan-parser/src/tests.rs
expression: "{\n\ta: 1;\n\tb: 2;\n}\n"
---
-SOURCE_FILE@0..11
- EXPR_OBJECT@0..8
- OBJ_BODY_MEMBER_LIST@0..8
+SOURCE_FILE@0..18
+ EXPR_OBJECT@0..17
+ OBJ_BODY_MEMBER_LIST@0..17
L_BRACE@0..1 "{"
WHITESPACE@1..3 "\n\t"
- MEMBER_FIELD@3..7
- FIELD_NORMAL@3..7
- FIELD_NAME_FIXED@3..4
- NAME@3..4
- IDENT@3..4 "a"
- COLON@4..5 ":"
- WHITESPACE@5..6 " "
- EXPR_NUMBER@6..7
- FLOAT@6..7 "1"
+ MEMBER_FIELD_NORMAL@3..7
+ FIELD_NAME_FIXED@3..4
+ NAME@3..4
+ IDENT@3..4 "a"
+ COLON@4..5 ":"
+ WHITESPACE@5..6 " "
+ EXPR_NUMBER@6..7
+ FLOAT@6..7 "1"
ERROR_UNEXPECTED_TOKEN@7..8
SEMI@7..8 ";"
- WHITESPACE@8..10 "\n\t"
- ERROR_UNEXPECTED_TOKEN@10..11
- IDENT@10..11 "b"
+ WHITESPACE@8..10 "\n\t"
+ MEMBER_FIELD_NORMAL@10..14
+ FIELD_NAME_FIXED@10..11
+ NAME@10..11
+ IDENT@10..11 "b"
+ COLON@11..12 ":"
+ WHITESPACE@12..13 " "
+ EXPR_NUMBER@13..14
+ FLOAT@13..14 "2"
+ ERROR_UNEXPECTED_TOKEN@14..15
+ SEMI@14..15 ";"
+ WHITESPACE@15..16 "\n"
+ R_BRACE@16..17 "}"
+ WHITESPACE@17..18 "\n"
===
-LocatedSyntaxError { error: Unexpected { expected: Unnamed(R_BRACE), found: SEMI }, range: 7..8 }
-LocatedSyntaxError { error: Unexpected { expected: Unnamed(EOF), found: IDENT }, range: 10..11 }
+LocatedSyntaxError { error: Unexpected { expected: Named("comma"), found: SEMI }, range: 7..8 }
+LocatedSyntaxError { error: Unexpected { expected: Named("comma"), found: SEMI }, range: 14..15 }
===
x syntax error
,-[1:1]
1 | {
2 | a: 1;
: |
- : `-- expected R_BRACE, found SEMI
+ : `-- expected comma, found SEMI
3 | b: 2;
- : |
- : `-- expected EOF, found IDENT
+ : |
+ : `-- expected comma, found SEMI
4 | }
`----
crates/jrsonnet-rowan-parser/src/tests.rsdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/tests.rs
+++ b/crates/jrsonnet-rowan-parser/src/tests.rs
@@ -118,12 +118,6 @@
1
"#
- array_comp => r#"
- [a for a in [1, 2, 3]]
- "#
- array_comp_incompatible_with_multiple_elems => r#"
- [a for a in [1, 2, 3], b]
- "#
no_rhs => r#"
a +
@@ -186,6 +180,50 @@
local * = 1;
a
"
+ arr_compspec => r#"
+ [a for a in [1, 2, 3]]
+ "#
+ arr_compspec_comma => "
+ [a, for a in [1, 2, 3]]
+ "
+ arr_compspec_no_elems => "
+ [for a in [1, 2, 3]]
+ "
+ arr_compspec_incompatible_with_multiple_elems => r#"
+ [a for a in [1, 2, 3], b]
+ "#
+ arr_compspec_incompatible_with_multiple_elems_w => r#"
+ [a, b, for a in [1, 2, 3], c]
+ "#
+
+ obj_compspec => r#"
+ {a:1 for a in [1, 2, 3]}
+ "#
+ obj_compspec_comma => "
+ {a:1, for a in [1, 2, 3]}
+ "
+ obj_compspec_no_elems => "
+ {for a in [1, 2, 3]}
+ "
+ obj_compspec_incompatible_with_multiple_elems => r#"
+ {a:1 for a in [1, 2, 3], b:1}
+ "#
+ obj_compspec_incompatible_with_multiple_elems_w => r#"
+ {a:1, b:1, for a in [1, 2, 3], c:1}
+ "#
+
+ local_method => r#"
+ local
+ a(x) = x,
+ a = function(x) x,
+ ; c
+ "#
+ obj_method => r#"
+ {
+ a(x): x,
+ a: function(x) x,
+ }
+ "#
);
#[test]
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
@@ -1,3 +1,5 @@
+use std::fmt;
+
use crate::SyntaxKind;
#[derive(Clone, Copy, Default)]
@@ -21,11 +23,55 @@
pub const fn union(self, other: SyntaxKindSet) -> SyntaxKindSet {
SyntaxKindSet(self.0 | other.0)
}
+ pub const fn with(self, kind: SyntaxKind) -> SyntaxKindSet {
+ SyntaxKindSet(self.0 | mask(kind))
+ }
pub const fn contains(&self, kind: SyntaxKind) -> bool {
self.0 & mask(kind) != 0
}
}
+impl fmt::Display for SyntaxKindSet {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ let mut v = self.0;
+ let mut variants = <Vec<SyntaxKind>>::new();
+ for i in 0..128 {
+ if v & 1 == 1 {
+ variants.push(SyntaxKind::from_raw(i))
+ }
+ v >>= 1;
+ if v == 0 {
+ break;
+ }
+ }
+ for (i, v) in variants.iter().enumerate() {
+ if i == 0 {
+ } else if i == variants.len() - 1 {
+ write!(f, " or ")?;
+ } else {
+ write!(f, ", ")?;
+ }
+ write!(f, "{v:?}")?;
+ }
+ Ok(())
+ }
+}
+impl fmt::Debug for SyntaxKindSet {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ let mut v = self.0;
+ let mut variants = <Vec<SyntaxKind>>::new();
+ for i in 0..128 {
+ if v & 1 == 1 {
+ variants.push(SyntaxKind::from_raw(i))
+ }
+ v >>= 1;
+ if v == 0 {
+ break;
+ }
+ }
+ f.debug_tuple("SyntaxKindSet").field(&variants).finish()
+ }
+}
const fn mask(kind: SyntaxKind) -> u128 {
1u128 << (kind as u128)