difftreelog
feat try to parse locals as statements, not as expressions
in: master
13 files changed
crates/jrsonnet-rowan-parser/jsonnet.ungramdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/jsonnet.ungram
+++ b/crates/jrsonnet-rowan-parser/jsonnet.ungram
@@ -65,11 +65,6 @@
ExprVar =
name:Name
-ExprLocal =
- 'local'
- (Bind (',' Bind)* ','?)
- ';'
- Expr
ExprIfThenElse =
'if'
@@ -92,7 +87,15 @@
'error'
Expr
+StmtLocal =
+ 'local'
+ (Bind (',' Bind)* ','?)
+ ';'
+
Expr =
+ StmtLocal*
+ ExprBase
+ExprBase =
ExprBinary
| ExprUnary
| ExprSlice
@@ -109,7 +112,6 @@
| ExprArrayComp
| ExprImport
| ExprVar
-| ExprLocal
| ExprIfThenElse
| ExprFunction
| ExprAssert
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 ExprString {216 pub(crate) syntax: SyntaxNode,217}218impl ExprString {219 pub fn text(&self) -> Option<Text> {220 support::token_child(&self.syntax)221 }222}223224#[derive(Debug, Clone, PartialEq, Eq, Hash)]225pub struct ExprNumber {226 pub(crate) syntax: SyntaxNode,227}228impl ExprNumber {229 pub fn number(&self) -> Option<Number> {230 support::token_child(&self.syntax)231 }232}233234#[derive(Debug, Clone, PartialEq, Eq, Hash)]235pub struct ExprArray {236 pub(crate) syntax: SyntaxNode,237}238impl ExprArray {239 pub fn l_brack_token(&self) -> Option<SyntaxToken> {240 support::token(&self.syntax, T!['['])241 }242 pub fn exprs(&self) -> AstChildren<Expr> {243 support::children(&self.syntax)244 }245 pub fn r_brack_token(&self) -> Option<SyntaxToken> {246 support::token(&self.syntax, T![']'])247 }248}249250#[derive(Debug, Clone, PartialEq, Eq, Hash)]251pub struct ExprObject {252 pub(crate) syntax: SyntaxNode,253}254impl ExprObject {255 pub fn obj_body(&self) -> Option<ObjBody> {256 support::child(&self.syntax)257 }258}259260#[derive(Debug, Clone, PartialEq, Eq, Hash)]261pub struct ExprArrayComp {262 pub(crate) syntax: SyntaxNode,263}264impl ExprArrayComp {265 pub fn l_brack_token(&self) -> Option<SyntaxToken> {266 support::token(&self.syntax, T!['['])267 }268 pub fn expr(&self) -> Option<Expr> {269 support::child(&self.syntax)270 }271 pub fn comma_token(&self) -> Option<SyntaxToken> {272 support::token(&self.syntax, T![,])273 }274 pub fn comp_specs(&self) -> AstChildren<CompSpec> {275 support::children(&self.syntax)276 }277 pub fn r_brack_token(&self) -> Option<SyntaxToken> {278 support::token(&self.syntax, T![']'])279 }280}281282#[derive(Debug, Clone, PartialEq, Eq, Hash)]283pub struct ExprImport {284 pub(crate) syntax: SyntaxNode,285}286impl ExprImport {287 pub fn import_kind(&self) -> Option<ImportKind> {288 support::token_child(&self.syntax)289 }290 pub fn text(&self) -> Option<Text> {291 support::token_child(&self.syntax)292 }293}294295#[derive(Debug, Clone, PartialEq, Eq, Hash)]296pub struct ExprVar {297 pub(crate) syntax: SyntaxNode,298}299impl ExprVar {300 pub fn name(&self) -> Option<Name> {301 support::child(&self.syntax)302 }303}304305#[derive(Debug, Clone, PartialEq, Eq, Hash)]306pub struct ExprLocal {307 pub(crate) syntax: SyntaxNode,308}309impl ExprLocal {310 pub fn local_kw_token(&self) -> Option<SyntaxToken> {311 support::token(&self.syntax, T![local])312 }313 pub fn binds(&self) -> AstChildren<Bind> {314 support::children(&self.syntax)315 }316 pub fn semi_token(&self) -> Option<SyntaxToken> {317 support::token(&self.syntax, T![;])318 }319 pub fn expr(&self) -> Option<Expr> {320 support::child(&self.syntax)321 }322}323324#[derive(Debug, Clone, PartialEq, Eq, Hash)]325pub struct ExprIfThenElse {326 pub(crate) syntax: SyntaxNode,327}328impl ExprIfThenElse {329 pub fn if_kw_token(&self) -> Option<SyntaxToken> {330 support::token(&self.syntax, T![if])331 }332 pub fn cond(&self) -> Option<Expr> {333 support::child(&self.syntax)334 }335 pub fn then_kw_token(&self) -> Option<SyntaxToken> {336 support::token(&self.syntax, T![then])337 }338 pub fn then(&self) -> Option<TrueExpr> {339 support::child(&self.syntax)340 }341 pub fn else_kw_token(&self) -> Option<SyntaxToken> {342 support::token(&self.syntax, T![else])343 }344 pub fn else_(&self) -> Option<FalseExpr> {345 support::child(&self.syntax)346 }347}348349#[derive(Debug, Clone, PartialEq, Eq, Hash)]350pub struct TrueExpr {351 pub(crate) syntax: SyntaxNode,352}353impl TrueExpr {354 pub fn expr(&self) -> Option<Expr> {355 support::child(&self.syntax)356 }357}358359#[derive(Debug, Clone, PartialEq, Eq, Hash)]360pub struct FalseExpr {361 pub(crate) syntax: SyntaxNode,362}363impl FalseExpr {364 pub fn expr(&self) -> Option<Expr> {365 support::child(&self.syntax)366 }367}368369#[derive(Debug, Clone, PartialEq, Eq, Hash)]370pub struct ExprFunction {371 pub(crate) syntax: SyntaxNode,372}373impl ExprFunction {374 pub fn function_kw_token(&self) -> Option<SyntaxToken> {375 support::token(&self.syntax, T![function])376 }377 pub fn l_paren_token(&self) -> Option<SyntaxToken> {378 support::token(&self.syntax, T!['('])379 }380 pub fn params_desc(&self) -> Option<ParamsDesc> {381 support::child(&self.syntax)382 }383 pub fn r_paren_token(&self) -> Option<SyntaxToken> {384 support::token(&self.syntax, T![')'])385 }386 pub fn expr(&self) -> Option<Expr> {387 support::child(&self.syntax)388 }389}390391#[derive(Debug, Clone, PartialEq, Eq, Hash)]392pub struct ParamsDesc {393 pub(crate) syntax: SyntaxNode,394}395impl ParamsDesc {396 pub fn l_paren_token(&self) -> Option<SyntaxToken> {397 support::token(&self.syntax, T!['('])398 }399 pub fn params(&self) -> AstChildren<Param> {400 support::children(&self.syntax)401 }402 pub fn r_paren_token(&self) -> Option<SyntaxToken> {403 support::token(&self.syntax, T![')'])404 }405}406407#[derive(Debug, Clone, PartialEq, Eq, Hash)]408pub struct ExprAssert {409 pub(crate) syntax: SyntaxNode,410}411impl ExprAssert {412 pub fn assertion(&self) -> Option<Assertion> {413 support::child(&self.syntax)414 }415 pub fn semi_token(&self) -> Option<SyntaxToken> {416 support::token(&self.syntax, T![;])417 }418 pub fn expr(&self) -> Option<Expr> {419 support::child(&self.syntax)420 }421}422423#[derive(Debug, Clone, PartialEq, Eq, Hash)]424pub struct Assertion {425 pub(crate) syntax: SyntaxNode,426}427impl Assertion {428 pub fn assert_kw_token(&self) -> Option<SyntaxToken> {429 support::token(&self.syntax, T![assert])430 }431 pub fn condition(&self) -> Option<LhsExpr> {432 support::child(&self.syntax)433 }434 pub fn colon_token(&self) -> Option<SyntaxToken> {435 support::token(&self.syntax, T![:])436 }437 pub fn message(&self) -> Option<Expr> {438 support::child(&self.syntax)439 }440}441442#[derive(Debug, Clone, PartialEq, Eq, Hash)]443pub struct ExprError {444 pub(crate) syntax: SyntaxNode,445}446impl ExprError {447 pub fn error_kw_token(&self) -> Option<SyntaxToken> {448 support::token(&self.syntax, T![error])449 }450 pub fn expr(&self) -> Option<Expr> {451 support::child(&self.syntax)452 }453}454455#[derive(Debug, Clone, PartialEq, Eq, Hash)]456pub struct SliceDescEnd {457 pub(crate) syntax: SyntaxNode,458}459impl SliceDescEnd {460 pub fn expr(&self) -> Option<Expr> {461 support::child(&self.syntax)462 }463}464465#[derive(Debug, Clone, PartialEq, Eq, Hash)]466pub struct SliceDescStep {467 pub(crate) syntax: SyntaxNode,468}469impl SliceDescStep {470 pub fn expr(&self) -> Option<Expr> {471 support::child(&self.syntax)472 }473}474475#[derive(Debug, Clone, PartialEq, Eq, Hash)]476pub struct Arg {477 pub(crate) syntax: SyntaxNode,478}479impl Arg {480 pub fn name(&self) -> Option<Name> {481 support::child(&self.syntax)482 }483 pub fn assign_token(&self) -> Option<SyntaxToken> {484 support::token(&self.syntax, T![=])485 }486 pub fn expr(&self) -> Option<Expr> {487 support::child(&self.syntax)488 }489}490491#[derive(Debug, Clone, PartialEq, Eq, Hash)]492pub struct ObjBodyComp {493 pub(crate) syntax: SyntaxNode,494}495impl ObjBodyComp {496 pub fn l_brace_token(&self) -> Option<SyntaxToken> {497 support::token(&self.syntax, T!['{'])498 }499 pub fn member_comps(&self) -> AstChildren<MemberComp> {500 support::children(&self.syntax)501 }502 pub fn comp_specs(&self) -> AstChildren<CompSpec> {503 support::children(&self.syntax)504 }505 pub fn r_brace_token(&self) -> Option<SyntaxToken> {506 support::token(&self.syntax, T!['}'])507 }508}509510#[derive(Debug, Clone, PartialEq, Eq, Hash)]511pub struct ObjBodyMemberList {512 pub(crate) syntax: SyntaxNode,513}514impl ObjBodyMemberList {515 pub fn l_brace_token(&self) -> Option<SyntaxToken> {516 support::token(&self.syntax, T!['{'])517 }518 pub fn members(&self) -> AstChildren<Member> {519 support::children(&self.syntax)520 }521 pub fn r_brace_token(&self) -> Option<SyntaxToken> {522 support::token(&self.syntax, T!['}'])523 }524}525526#[derive(Debug, Clone, PartialEq, Eq, Hash)]527pub struct MemberBindStmt {528 pub(crate) syntax: SyntaxNode,529}530impl MemberBindStmt {531 pub fn obj_local(&self) -> Option<ObjLocal> {532 support::child(&self.syntax)533 }534}535536#[derive(Debug, Clone, PartialEq, Eq, Hash)]537pub struct ObjLocal {538 pub(crate) syntax: SyntaxNode,539}540impl ObjLocal {541 pub fn local_kw_token(&self) -> Option<SyntaxToken> {542 support::token(&self.syntax, T![local])543 }544 pub fn bind(&self) -> Option<Bind> {545 support::child(&self.syntax)546 }547}548549#[derive(Debug, Clone, PartialEq, Eq, Hash)]550pub struct MemberAssertStmt {551 pub(crate) syntax: SyntaxNode,552}553impl MemberAssertStmt {554 pub fn assertion(&self) -> Option<Assertion> {555 support::child(&self.syntax)556 }557}558559#[derive(Debug, Clone, PartialEq, Eq, Hash)]560pub struct MemberFieldNormal {561 pub(crate) syntax: SyntaxNode,562}563impl MemberFieldNormal {564 pub fn field_name(&self) -> Option<FieldName> {565 support::child(&self.syntax)566 }567 pub fn plus_token(&self) -> Option<SyntaxToken> {568 support::token(&self.syntax, T![+])569 }570 pub fn visibility(&self) -> Option<Visibility> {571 support::token_child(&self.syntax)572 }573 pub fn expr(&self) -> Option<Expr> {574 support::child(&self.syntax)575 }576}577578#[derive(Debug, Clone, PartialEq, Eq, Hash)]579pub struct MemberFieldMethod {580 pub(crate) syntax: SyntaxNode,581}582impl MemberFieldMethod {583 pub fn field_name(&self) -> Option<FieldName> {584 support::child(&self.syntax)585 }586 pub fn params_desc(&self) -> Option<ParamsDesc> {587 support::child(&self.syntax)588 }589 pub fn visibility(&self) -> Option<Visibility> {590 support::token_child(&self.syntax)591 }592 pub fn expr(&self) -> Option<Expr> {593 support::child(&self.syntax)594 }595}596597#[derive(Debug, Clone, PartialEq, Eq, Hash)]598pub struct FieldNameFixed {599 pub(crate) syntax: SyntaxNode,600}601impl FieldNameFixed {602 pub fn id(&self) -> Option<Name> {603 support::child(&self.syntax)604 }605 pub fn text(&self) -> Option<Text> {606 support::token_child(&self.syntax)607 }608}609610#[derive(Debug, Clone, PartialEq, Eq, Hash)]611pub struct FieldNameDynamic {612 pub(crate) syntax: SyntaxNode,613}614impl FieldNameDynamic {615 pub fn l_brack_token(&self) -> Option<SyntaxToken> {616 support::token(&self.syntax, T!['['])617 }618 pub fn expr(&self) -> Option<Expr> {619 support::child(&self.syntax)620 }621 pub fn r_brack_token(&self) -> Option<SyntaxToken> {622 support::token(&self.syntax, T![']'])623 }624}625626#[derive(Debug, Clone, PartialEq, Eq, Hash)]627pub struct ForSpec {628 pub(crate) syntax: SyntaxNode,629}630impl ForSpec {631 pub fn for_kw_token(&self) -> Option<SyntaxToken> {632 support::token(&self.syntax, T![for])633 }634 pub fn bind(&self) -> Option<Name> {635 support::child(&self.syntax)636 }637 pub fn in_kw_token(&self) -> Option<SyntaxToken> {638 support::token(&self.syntax, T![in])639 }640 pub fn expr(&self) -> Option<Expr> {641 support::child(&self.syntax)642 }643}644645#[derive(Debug, Clone, PartialEq, Eq, Hash)]646pub struct IfSpec {647 pub(crate) syntax: SyntaxNode,648}649impl IfSpec {650 pub fn if_kw_token(&self) -> Option<SyntaxToken> {651 support::token(&self.syntax, T![if])652 }653 pub fn expr(&self) -> Option<Expr> {654 support::child(&self.syntax)655 }656}657658#[derive(Debug, Clone, PartialEq, Eq, Hash)]659pub struct BindDestruct {660 pub(crate) syntax: SyntaxNode,661}662impl BindDestruct {663 pub fn into(&self) -> Option<Destruct> {664 support::child(&self.syntax)665 }666 pub fn assign_token(&self) -> Option<SyntaxToken> {667 support::token(&self.syntax, T![=])668 }669 pub fn value(&self) -> Option<Expr> {670 support::child(&self.syntax)671 }672}673674#[derive(Debug, Clone, PartialEq, Eq, Hash)]675pub struct BindFunction {676 pub(crate) syntax: SyntaxNode,677}678impl BindFunction {679 pub fn name(&self) -> Option<Name> {680 support::child(&self.syntax)681 }682 pub fn params(&self) -> Option<ParamsDesc> {683 support::child(&self.syntax)684 }685 pub fn assign_token(&self) -> Option<SyntaxToken> {686 support::token(&self.syntax, T![=])687 }688 pub fn value(&self) -> Option<Expr> {689 support::child(&self.syntax)690 }691}692693#[derive(Debug, Clone, PartialEq, Eq, Hash)]694pub struct Param {695 pub(crate) syntax: SyntaxNode,696}697impl Param {698 pub fn destruct(&self) -> Option<Destruct> {699 support::child(&self.syntax)700 }701 pub fn assign_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}708709#[derive(Debug, Clone, PartialEq, Eq, Hash)]710pub struct DestructFull {711 pub(crate) syntax: SyntaxNode,712}713impl DestructFull {714 pub fn name(&self) -> Option<Name> {715 support::child(&self.syntax)716 }717}718719#[derive(Debug, Clone, PartialEq, Eq, Hash)]720pub struct DestructSkip {721 pub(crate) syntax: SyntaxNode,722}723impl DestructSkip {724 pub fn question_mark_token(&self) -> Option<SyntaxToken> {725 support::token(&self.syntax, T![?])726 }727}728729#[derive(Debug, Clone, PartialEq, Eq, Hash)]730pub struct DestructArray {731 pub(crate) syntax: SyntaxNode,732}733impl DestructArray {734 pub fn l_brack_token(&self) -> Option<SyntaxToken> {735 support::token(&self.syntax, T!['['])736 }737 pub fn destruct_array_parts(&self) -> AstChildren<DestructArrayPart> {738 support::children(&self.syntax)739 }740 pub fn r_brack_token(&self) -> Option<SyntaxToken> {741 support::token(&self.syntax, T![']'])742 }743}744745#[derive(Debug, Clone, PartialEq, Eq, Hash)]746pub struct DestructObject {747 pub(crate) syntax: SyntaxNode,748}749impl DestructObject {750 pub fn l_brace_token(&self) -> Option<SyntaxToken> {751 support::token(&self.syntax, T!['{'])752 }753 pub fn destruct_object_fields(&self) -> AstChildren<DestructObjectField> {754 support::children(&self.syntax)755 }756 pub fn destruct_rest(&self) -> Option<DestructRest> {757 support::child(&self.syntax)758 }759 pub fn comma_token(&self) -> Option<SyntaxToken> {760 support::token(&self.syntax, T![,])761 }762 pub fn r_brace_token(&self) -> Option<SyntaxToken> {763 support::token(&self.syntax, T!['}'])764 }765}766767#[derive(Debug, Clone, PartialEq, Eq, Hash)]768pub struct DestructObjectField {769 pub(crate) syntax: SyntaxNode,770}771impl DestructObjectField {772 pub fn field(&self) -> Option<Name> {773 support::child(&self.syntax)774 }775 pub fn colon_token(&self) -> Option<SyntaxToken> {776 support::token(&self.syntax, T![:])777 }778 pub fn destruct(&self) -> Option<Destruct> {779 support::child(&self.syntax)780 }781 pub fn assign_token(&self) -> Option<SyntaxToken> {782 support::token(&self.syntax, T![=])783 }784 pub fn expr(&self) -> Option<Expr> {785 support::child(&self.syntax)786 }787}788789#[derive(Debug, Clone, PartialEq, Eq, Hash)]790pub struct DestructRest {791 pub(crate) syntax: SyntaxNode,792}793impl DestructRest {794 pub fn dotdotdot_token(&self) -> Option<SyntaxToken> {795 support::token(&self.syntax, T![...])796 }797 pub fn into(&self) -> Option<Name> {798 support::child(&self.syntax)799 }800}801802#[derive(Debug, Clone, PartialEq, Eq, Hash)]803pub struct DestructArrayElement {804 pub(crate) syntax: SyntaxNode,805}806impl DestructArrayElement {807 pub fn destruct(&self) -> Option<Destruct> {808 support::child(&self.syntax)809 }810}811812#[derive(Debug, Clone, PartialEq, Eq, Hash)]813pub enum Expr {814 ExprBinary(ExprBinary),815 ExprUnary(ExprUnary),816 ExprSlice(ExprSlice),817 ExprIndex(ExprIndex),818 ExprIndexExpr(ExprIndexExpr),819 ExprApply(ExprApply),820 ExprObjExtend(ExprObjExtend),821 ExprParened(ExprParened),822 ExprString(ExprString),823 ExprNumber(ExprNumber),824 ExprLiteral(ExprLiteral),825 ExprArray(ExprArray),826 ExprObject(ExprObject),827 ExprArrayComp(ExprArrayComp),828 ExprImport(ExprImport),829 ExprVar(ExprVar),830 ExprLocal(ExprLocal),831 ExprIfThenElse(ExprIfThenElse),832 ExprFunction(ExprFunction),833 ExprAssert(ExprAssert),834 ExprError(ExprError),835}836837#[derive(Debug, Clone, PartialEq, Eq, Hash)]838pub enum ObjBody {839 ObjBodyComp(ObjBodyComp),840 ObjBodyMemberList(ObjBodyMemberList),841}842843#[derive(Debug, Clone, PartialEq, Eq, Hash)]844pub enum CompSpec {845 ForSpec(ForSpec),846 IfSpec(IfSpec),847}848849#[derive(Debug, Clone, PartialEq, Eq, Hash)]850pub enum Bind {851 BindDestruct(BindDestruct),852 BindFunction(BindFunction),853}854855#[derive(Debug, Clone, PartialEq, Eq, Hash)]856pub enum MemberComp {857 MemberBindStmt(MemberBindStmt),858 MemberFieldNormal(MemberFieldNormal),859 MemberFieldMethod(MemberFieldMethod),860}861862#[derive(Debug, Clone, PartialEq, Eq, Hash)]863pub enum Member {864 MemberBindStmt(MemberBindStmt),865 MemberAssertStmt(MemberAssertStmt),866 MemberFieldNormal(MemberFieldNormal),867 MemberFieldMethod(MemberFieldMethod),868}869870#[derive(Debug, Clone, PartialEq, Eq, Hash)]871pub enum FieldName {872 FieldNameFixed(FieldNameFixed),873 FieldNameDynamic(FieldNameDynamic),874}875876#[derive(Debug, Clone, PartialEq, Eq, Hash)]877pub enum Destruct {878 DestructFull(DestructFull),879 DestructSkip(DestructSkip),880 DestructArray(DestructArray),881 DestructObject(DestructObject),882}883884#[derive(Debug, Clone, PartialEq, Eq, Hash)]885pub enum DestructArrayPart {886 DestructArrayElement(DestructArrayElement),887 DestructRest(DestructRest),888}889890#[derive(Debug, Clone, PartialEq, Eq, Hash)]891pub struct BinaryOperator {892 syntax: SyntaxToken,893 kind: BinaryOperatorKind,894}895896#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]897pub enum BinaryOperatorKind {898 Or,899 And,900 BitOr,901 BitXor,902 BitAnd,903 Eq,904 Ne,905 Lt,906 Gt,907 Le,908 Ge,909 InKw,910 Lhs,911 Rhs,912 Plus,913 Minus,914 Mul,915 Div,916 Modulo,917 MetaObjectApply,918 ErrorNoOperator,919}920921#[derive(Debug, Clone, PartialEq, Eq, Hash)]922pub struct UnaryOperator {923 syntax: SyntaxToken,924 kind: UnaryOperatorKind,925}926927#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]928pub enum UnaryOperatorKind {929 Minus,930 Not,931 BitNot,932}933934#[derive(Debug, Clone, PartialEq, Eq, Hash)]935pub struct Literal {936 syntax: SyntaxToken,937 kind: LiteralKind,938}939940#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]941pub enum LiteralKind {942 NullKw,943 TrueKw,944 FalseKw,945 SelfKw,946 Dollar,947 SuperKw,948}949950#[derive(Debug, Clone, PartialEq, Eq, Hash)]951pub struct Text {952 syntax: SyntaxToken,953 kind: TextKind,954}955956#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]957pub enum TextKind {958 StringDouble,959 ErrorStringDoubleUnterminated,960 StringSingle,961 ErrorStringSingleUnterminated,962 StringDoubleVerbatim,963 ErrorStringDoubleVerbatimUnterminated,964 StringSingleVerbatim,965 ErrorStringSingleVerbatimUnterminated,966 ErrorStringVerbatimMissingQuotes,967 StringBlock,968 ErrorStringBlockUnexpectedEnd,969 ErrorStringBlockMissingNewLine,970 ErrorStringBlockMissingTermination,971 ErrorStringBlockMissingIndent,972}973974#[derive(Debug, Clone, PartialEq, Eq, Hash)]975pub struct Number {976 syntax: SyntaxToken,977 kind: NumberKind,978}979980#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]981pub enum NumberKind {982 Float,983 ErrorFloatJunkAfterPoint,984 ErrorFloatJunkAfterExponent,985 ErrorFloatJunkAfterExponentSign,986}987988#[derive(Debug, Clone, PartialEq, Eq, Hash)]989pub struct ImportKind {990 syntax: SyntaxToken,991 kind: ImportKindKind,992}993994#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]995pub enum ImportKindKind {996 ImportstrKw,997 ImportbinKw,998 ImportKw,999}10001001#[derive(Debug, Clone, PartialEq, Eq, Hash)]1002pub struct Visibility {1003 syntax: SyntaxToken,1004 kind: VisibilityKind,1005}10061007#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1008pub enum VisibilityKind {1009 Coloncoloncolon,1010 Coloncolon,1011 Colon,1012}10131014#[derive(Debug, Clone, PartialEq, Eq, Hash)]1015pub struct Trivia {1016 syntax: SyntaxToken,1017 kind: TriviaKind,1018}10191020#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1021pub enum TriviaKind {1022 Whitespace,1023 MultiLineComment,1024 ErrorCommentTooShort,1025 ErrorCommentUnterminated,1026 SingleLineHashComment,1027 SingleLineSlashComment,1028}10291030#[derive(Debug, Clone, PartialEq, Eq, Hash)]1031pub struct CustomError {1032 syntax: SyntaxToken,1033 kind: CustomErrorKind,1034}10351036#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1037pub enum CustomErrorKind {1038 ErrorMissingToken,1039 ErrorUnexpectedToken,1040 ErrorCustom,1041}1042impl AstNode for SourceFile {1043 fn can_cast(kind: SyntaxKind) -> bool {1044 kind == SOURCE_FILE1045 }1046 fn cast(syntax: SyntaxNode) -> Option<Self> {1047 if Self::can_cast(syntax.kind()) {1048 Some(Self { syntax })1049 } else {1050 None1051 }1052 }1053 fn syntax(&self) -> &SyntaxNode {1054 &self.syntax1055 }1056}1057impl AstNode for ExprBinary {1058 fn can_cast(kind: SyntaxKind) -> bool {1059 kind == EXPR_BINARY1060 }1061 fn cast(syntax: SyntaxNode) -> Option<Self> {1062 if Self::can_cast(syntax.kind()) {1063 Some(Self { syntax })1064 } else {1065 None1066 }1067 }1068 fn syntax(&self) -> &SyntaxNode {1069 &self.syntax1070 }1071}1072impl AstNode for LhsExpr {1073 fn can_cast(kind: SyntaxKind) -> bool {1074 kind == LHS_EXPR1075 }1076 fn cast(syntax: SyntaxNode) -> Option<Self> {1077 if Self::can_cast(syntax.kind()) {1078 Some(Self { syntax })1079 } else {1080 None1081 }1082 }1083 fn syntax(&self) -> &SyntaxNode {1084 &self.syntax1085 }1086}1087impl AstNode for ExprUnary {1088 fn can_cast(kind: SyntaxKind) -> bool {1089 kind == EXPR_UNARY1090 }1091 fn cast(syntax: SyntaxNode) -> Option<Self> {1092 if Self::can_cast(syntax.kind()) {1093 Some(Self { syntax })1094 } else {1095 None1096 }1097 }1098 fn syntax(&self) -> &SyntaxNode {1099 &self.syntax1100 }1101}1102impl AstNode for ExprSlice {1103 fn can_cast(kind: SyntaxKind) -> bool {1104 kind == EXPR_SLICE1105 }1106 fn cast(syntax: SyntaxNode) -> Option<Self> {1107 if Self::can_cast(syntax.kind()) {1108 Some(Self { syntax })1109 } else {1110 None1111 }1112 }1113 fn syntax(&self) -> &SyntaxNode {1114 &self.syntax1115 }1116}1117impl AstNode for SliceDesc {1118 fn can_cast(kind: SyntaxKind) -> bool {1119 kind == SLICE_DESC1120 }1121 fn cast(syntax: SyntaxNode) -> Option<Self> {1122 if Self::can_cast(syntax.kind()) {1123 Some(Self { syntax })1124 } else {1125 None1126 }1127 }1128 fn syntax(&self) -> &SyntaxNode {1129 &self.syntax1130 }1131}1132impl AstNode for ExprIndex {1133 fn can_cast(kind: SyntaxKind) -> bool {1134 kind == EXPR_INDEX1135 }1136 fn cast(syntax: SyntaxNode) -> Option<Self> {1137 if Self::can_cast(syntax.kind()) {1138 Some(Self { syntax })1139 } else {1140 None1141 }1142 }1143 fn syntax(&self) -> &SyntaxNode {1144 &self.syntax1145 }1146}1147impl AstNode for Name {1148 fn can_cast(kind: SyntaxKind) -> bool {1149 kind == NAME1150 }1151 fn cast(syntax: SyntaxNode) -> Option<Self> {1152 if Self::can_cast(syntax.kind()) {1153 Some(Self { syntax })1154 } else {1155 None1156 }1157 }1158 fn syntax(&self) -> &SyntaxNode {1159 &self.syntax1160 }1161}1162impl AstNode for ExprIndexExpr {1163 fn can_cast(kind: SyntaxKind) -> bool {1164 kind == EXPR_INDEX_EXPR1165 }1166 fn cast(syntax: SyntaxNode) -> Option<Self> {1167 if Self::can_cast(syntax.kind()) {1168 Some(Self { syntax })1169 } else {1170 None1171 }1172 }1173 fn syntax(&self) -> &SyntaxNode {1174 &self.syntax1175 }1176}1177impl AstNode for ExprApply {1178 fn can_cast(kind: SyntaxKind) -> bool {1179 kind == EXPR_APPLY1180 }1181 fn cast(syntax: SyntaxNode) -> Option<Self> {1182 if Self::can_cast(syntax.kind()) {1183 Some(Self { syntax })1184 } else {1185 None1186 }1187 }1188 fn syntax(&self) -> &SyntaxNode {1189 &self.syntax1190 }1191}1192impl AstNode for ArgsDesc {1193 fn can_cast(kind: SyntaxKind) -> bool {1194 kind == ARGS_DESC1195 }1196 fn cast(syntax: SyntaxNode) -> Option<Self> {1197 if Self::can_cast(syntax.kind()) {1198 Some(Self { syntax })1199 } else {1200 None1201 }1202 }1203 fn syntax(&self) -> &SyntaxNode {1204 &self.syntax1205 }1206}1207impl AstNode for ExprObjExtend {1208 fn can_cast(kind: SyntaxKind) -> bool {1209 kind == EXPR_OBJ_EXTEND1210 }1211 fn cast(syntax: SyntaxNode) -> Option<Self> {1212 if Self::can_cast(syntax.kind()) {1213 Some(Self { syntax })1214 } else {1215 None1216 }1217 }1218 fn syntax(&self) -> &SyntaxNode {1219 &self.syntax1220 }1221}1222impl AstNode for ExprParened {1223 fn can_cast(kind: SyntaxKind) -> bool {1224 kind == EXPR_PARENED1225 }1226 fn cast(syntax: SyntaxNode) -> Option<Self> {1227 if Self::can_cast(syntax.kind()) {1228 Some(Self { syntax })1229 } else {1230 None1231 }1232 }1233 fn syntax(&self) -> &SyntaxNode {1234 &self.syntax1235 }1236}1237impl AstNode for ExprLiteral {1238 fn can_cast(kind: SyntaxKind) -> bool {1239 kind == EXPR_LITERAL1240 }1241 fn cast(syntax: SyntaxNode) -> Option<Self> {1242 if Self::can_cast(syntax.kind()) {1243 Some(Self { syntax })1244 } else {1245 None1246 }1247 }1248 fn syntax(&self) -> &SyntaxNode {1249 &self.syntax1250 }1251}1252impl AstNode for ExprString {1253 fn can_cast(kind: SyntaxKind) -> bool {1254 kind == EXPR_STRING1255 }1256 fn cast(syntax: SyntaxNode) -> Option<Self> {1257 if Self::can_cast(syntax.kind()) {1258 Some(Self { syntax })1259 } else {1260 None1261 }1262 }1263 fn syntax(&self) -> &SyntaxNode {1264 &self.syntax1265 }1266}1267impl AstNode for ExprNumber {1268 fn can_cast(kind: SyntaxKind) -> bool {1269 kind == EXPR_NUMBER1270 }1271 fn cast(syntax: SyntaxNode) -> Option<Self> {1272 if Self::can_cast(syntax.kind()) {1273 Some(Self { syntax })1274 } else {1275 None1276 }1277 }1278 fn syntax(&self) -> &SyntaxNode {1279 &self.syntax1280 }1281}1282impl AstNode for ExprArray {1283 fn can_cast(kind: SyntaxKind) -> bool {1284 kind == EXPR_ARRAY1285 }1286 fn cast(syntax: SyntaxNode) -> Option<Self> {1287 if Self::can_cast(syntax.kind()) {1288 Some(Self { syntax })1289 } else {1290 None1291 }1292 }1293 fn syntax(&self) -> &SyntaxNode {1294 &self.syntax1295 }1296}1297impl AstNode for ExprObject {1298 fn can_cast(kind: SyntaxKind) -> bool {1299 kind == EXPR_OBJECT1300 }1301 fn cast(syntax: SyntaxNode) -> Option<Self> {1302 if Self::can_cast(syntax.kind()) {1303 Some(Self { syntax })1304 } else {1305 None1306 }1307 }1308 fn syntax(&self) -> &SyntaxNode {1309 &self.syntax1310 }1311}1312impl AstNode for ExprArrayComp {1313 fn can_cast(kind: SyntaxKind) -> bool {1314 kind == EXPR_ARRAY_COMP1315 }1316 fn cast(syntax: SyntaxNode) -> Option<Self> {1317 if Self::can_cast(syntax.kind()) {1318 Some(Self { syntax })1319 } else {1320 None1321 }1322 }1323 fn syntax(&self) -> &SyntaxNode {1324 &self.syntax1325 }1326}1327impl AstNode for ExprImport {1328 fn can_cast(kind: SyntaxKind) -> bool {1329 kind == EXPR_IMPORT1330 }1331 fn cast(syntax: SyntaxNode) -> Option<Self> {1332 if Self::can_cast(syntax.kind()) {1333 Some(Self { syntax })1334 } else {1335 None1336 }1337 }1338 fn syntax(&self) -> &SyntaxNode {1339 &self.syntax1340 }1341}1342impl AstNode for ExprVar {1343 fn can_cast(kind: SyntaxKind) -> bool {1344 kind == EXPR_VAR1345 }1346 fn cast(syntax: SyntaxNode) -> Option<Self> {1347 if Self::can_cast(syntax.kind()) {1348 Some(Self { syntax })1349 } else {1350 None1351 }1352 }1353 fn syntax(&self) -> &SyntaxNode {1354 &self.syntax1355 }1356}1357impl AstNode for ExprLocal {1358 fn can_cast(kind: SyntaxKind) -> bool {1359 kind == EXPR_LOCAL1360 }1361 fn cast(syntax: SyntaxNode) -> Option<Self> {1362 if Self::can_cast(syntax.kind()) {1363 Some(Self { syntax })1364 } else {1365 None1366 }1367 }1368 fn syntax(&self) -> &SyntaxNode {1369 &self.syntax1370 }1371}1372impl AstNode for ExprIfThenElse {1373 fn can_cast(kind: SyntaxKind) -> bool {1374 kind == EXPR_IF_THEN_ELSE1375 }1376 fn cast(syntax: SyntaxNode) -> Option<Self> {1377 if Self::can_cast(syntax.kind()) {1378 Some(Self { syntax })1379 } else {1380 None1381 }1382 }1383 fn syntax(&self) -> &SyntaxNode {1384 &self.syntax1385 }1386}1387impl AstNode for TrueExpr {1388 fn can_cast(kind: SyntaxKind) -> bool {1389 kind == TRUE_EXPR1390 }1391 fn cast(syntax: SyntaxNode) -> Option<Self> {1392 if Self::can_cast(syntax.kind()) {1393 Some(Self { syntax })1394 } else {1395 None1396 }1397 }1398 fn syntax(&self) -> &SyntaxNode {1399 &self.syntax1400 }1401}1402impl AstNode for FalseExpr {1403 fn can_cast(kind: SyntaxKind) -> bool {1404 kind == FALSE_EXPR1405 }1406 fn cast(syntax: SyntaxNode) -> Option<Self> {1407 if Self::can_cast(syntax.kind()) {1408 Some(Self { syntax })1409 } else {1410 None1411 }1412 }1413 fn syntax(&self) -> &SyntaxNode {1414 &self.syntax1415 }1416}1417impl AstNode for ExprFunction {1418 fn can_cast(kind: SyntaxKind) -> bool {1419 kind == EXPR_FUNCTION1420 }1421 fn cast(syntax: SyntaxNode) -> Option<Self> {1422 if Self::can_cast(syntax.kind()) {1423 Some(Self { syntax })1424 } else {1425 None1426 }1427 }1428 fn syntax(&self) -> &SyntaxNode {1429 &self.syntax1430 }1431}1432impl AstNode for ParamsDesc {1433 fn can_cast(kind: SyntaxKind) -> bool {1434 kind == PARAMS_DESC1435 }1436 fn cast(syntax: SyntaxNode) -> Option<Self> {1437 if Self::can_cast(syntax.kind()) {1438 Some(Self { syntax })1439 } else {1440 None1441 }1442 }1443 fn syntax(&self) -> &SyntaxNode {1444 &self.syntax1445 }1446}1447impl AstNode for ExprAssert {1448 fn can_cast(kind: SyntaxKind) -> bool {1449 kind == EXPR_ASSERT1450 }1451 fn cast(syntax: SyntaxNode) -> Option<Self> {1452 if Self::can_cast(syntax.kind()) {1453 Some(Self { syntax })1454 } else {1455 None1456 }1457 }1458 fn syntax(&self) -> &SyntaxNode {1459 &self.syntax1460 }1461}1462impl AstNode for Assertion {1463 fn can_cast(kind: SyntaxKind) -> bool {1464 kind == ASSERTION1465 }1466 fn cast(syntax: SyntaxNode) -> Option<Self> {1467 if Self::can_cast(syntax.kind()) {1468 Some(Self { syntax })1469 } else {1470 None1471 }1472 }1473 fn syntax(&self) -> &SyntaxNode {1474 &self.syntax1475 }1476}1477impl AstNode for ExprError {1478 fn can_cast(kind: SyntaxKind) -> bool {1479 kind == EXPR_ERROR1480 }1481 fn cast(syntax: SyntaxNode) -> Option<Self> {1482 if Self::can_cast(syntax.kind()) {1483 Some(Self { syntax })1484 } else {1485 None1486 }1487 }1488 fn syntax(&self) -> &SyntaxNode {1489 &self.syntax1490 }1491}1492impl AstNode for SliceDescEnd {1493 fn can_cast(kind: SyntaxKind) -> bool {1494 kind == SLICE_DESC_END1495 }1496 fn cast(syntax: SyntaxNode) -> Option<Self> {1497 if Self::can_cast(syntax.kind()) {1498 Some(Self { syntax })1499 } else {1500 None1501 }1502 }1503 fn syntax(&self) -> &SyntaxNode {1504 &self.syntax1505 }1506}1507impl AstNode for SliceDescStep {1508 fn can_cast(kind: SyntaxKind) -> bool {1509 kind == SLICE_DESC_STEP1510 }1511 fn cast(syntax: SyntaxNode) -> Option<Self> {1512 if Self::can_cast(syntax.kind()) {1513 Some(Self { syntax })1514 } else {1515 None1516 }1517 }1518 fn syntax(&self) -> &SyntaxNode {1519 &self.syntax1520 }1521}1522impl AstNode for Arg {1523 fn can_cast(kind: SyntaxKind) -> bool {1524 kind == ARG1525 }1526 fn cast(syntax: SyntaxNode) -> Option<Self> {1527 if Self::can_cast(syntax.kind()) {1528 Some(Self { syntax })1529 } else {1530 None1531 }1532 }1533 fn syntax(&self) -> &SyntaxNode {1534 &self.syntax1535 }1536}1537impl AstNode for ObjBodyComp {1538 fn can_cast(kind: SyntaxKind) -> bool {1539 kind == OBJ_BODY_COMP1540 }1541 fn cast(syntax: SyntaxNode) -> Option<Self> {1542 if Self::can_cast(syntax.kind()) {1543 Some(Self { syntax })1544 } else {1545 None1546 }1547 }1548 fn syntax(&self) -> &SyntaxNode {1549 &self.syntax1550 }1551}1552impl AstNode for ObjBodyMemberList {1553 fn can_cast(kind: SyntaxKind) -> bool {1554 kind == OBJ_BODY_MEMBER_LIST1555 }1556 fn cast(syntax: SyntaxNode) -> Option<Self> {1557 if Self::can_cast(syntax.kind()) {1558 Some(Self { syntax })1559 } else {1560 None1561 }1562 }1563 fn syntax(&self) -> &SyntaxNode {1564 &self.syntax1565 }1566}1567impl AstNode for MemberBindStmt {1568 fn can_cast(kind: SyntaxKind) -> bool {1569 kind == MEMBER_BIND_STMT1570 }1571 fn cast(syntax: SyntaxNode) -> Option<Self> {1572 if Self::can_cast(syntax.kind()) {1573 Some(Self { syntax })1574 } else {1575 None1576 }1577 }1578 fn syntax(&self) -> &SyntaxNode {1579 &self.syntax1580 }1581}1582impl AstNode for ObjLocal {1583 fn can_cast(kind: SyntaxKind) -> bool {1584 kind == OBJ_LOCAL1585 }1586 fn cast(syntax: SyntaxNode) -> Option<Self> {1587 if Self::can_cast(syntax.kind()) {1588 Some(Self { syntax })1589 } else {1590 None1591 }1592 }1593 fn syntax(&self) -> &SyntaxNode {1594 &self.syntax1595 }1596}1597impl AstNode for MemberAssertStmt {1598 fn can_cast(kind: SyntaxKind) -> bool {1599 kind == MEMBER_ASSERT_STMT1600 }1601 fn cast(syntax: SyntaxNode) -> Option<Self> {1602 if Self::can_cast(syntax.kind()) {1603 Some(Self { syntax })1604 } else {1605 None1606 }1607 }1608 fn syntax(&self) -> &SyntaxNode {1609 &self.syntax1610 }1611}1612impl AstNode for MemberFieldNormal {1613 fn can_cast(kind: SyntaxKind) -> bool {1614 kind == MEMBER_FIELD_NORMAL1615 }1616 fn cast(syntax: SyntaxNode) -> Option<Self> {1617 if Self::can_cast(syntax.kind()) {1618 Some(Self { syntax })1619 } else {1620 None1621 }1622 }1623 fn syntax(&self) -> &SyntaxNode {1624 &self.syntax1625 }1626}1627impl AstNode for MemberFieldMethod {1628 fn can_cast(kind: SyntaxKind) -> bool {1629 kind == MEMBER_FIELD_METHOD1630 }1631 fn cast(syntax: SyntaxNode) -> Option<Self> {1632 if Self::can_cast(syntax.kind()) {1633 Some(Self { syntax })1634 } else {1635 None1636 }1637 }1638 fn syntax(&self) -> &SyntaxNode {1639 &self.syntax1640 }1641}1642impl AstNode for FieldNameFixed {1643 fn can_cast(kind: SyntaxKind) -> bool {1644 kind == FIELD_NAME_FIXED1645 }1646 fn cast(syntax: SyntaxNode) -> Option<Self> {1647 if Self::can_cast(syntax.kind()) {1648 Some(Self { syntax })1649 } else {1650 None1651 }1652 }1653 fn syntax(&self) -> &SyntaxNode {1654 &self.syntax1655 }1656}1657impl AstNode for FieldNameDynamic {1658 fn can_cast(kind: SyntaxKind) -> bool {1659 kind == FIELD_NAME_DYNAMIC1660 }1661 fn cast(syntax: SyntaxNode) -> Option<Self> {1662 if Self::can_cast(syntax.kind()) {1663 Some(Self { syntax })1664 } else {1665 None1666 }1667 }1668 fn syntax(&self) -> &SyntaxNode {1669 &self.syntax1670 }1671}1672impl AstNode for ForSpec {1673 fn can_cast(kind: SyntaxKind) -> bool {1674 kind == FOR_SPEC1675 }1676 fn cast(syntax: SyntaxNode) -> Option<Self> {1677 if Self::can_cast(syntax.kind()) {1678 Some(Self { syntax })1679 } else {1680 None1681 }1682 }1683 fn syntax(&self) -> &SyntaxNode {1684 &self.syntax1685 }1686}1687impl AstNode for IfSpec {1688 fn can_cast(kind: SyntaxKind) -> bool {1689 kind == IF_SPEC1690 }1691 fn cast(syntax: SyntaxNode) -> Option<Self> {1692 if Self::can_cast(syntax.kind()) {1693 Some(Self { syntax })1694 } else {1695 None1696 }1697 }1698 fn syntax(&self) -> &SyntaxNode {1699 &self.syntax1700 }1701}1702impl AstNode for BindDestruct {1703 fn can_cast(kind: SyntaxKind) -> bool {1704 kind == BIND_DESTRUCT1705 }1706 fn cast(syntax: SyntaxNode) -> Option<Self> {1707 if Self::can_cast(syntax.kind()) {1708 Some(Self { syntax })1709 } else {1710 None1711 }1712 }1713 fn syntax(&self) -> &SyntaxNode {1714 &self.syntax1715 }1716}1717impl AstNode for BindFunction {1718 fn can_cast(kind: SyntaxKind) -> bool {1719 kind == BIND_FUNCTION1720 }1721 fn cast(syntax: SyntaxNode) -> Option<Self> {1722 if Self::can_cast(syntax.kind()) {1723 Some(Self { syntax })1724 } else {1725 None1726 }1727 }1728 fn syntax(&self) -> &SyntaxNode {1729 &self.syntax1730 }1731}1732impl AstNode for Param {1733 fn can_cast(kind: SyntaxKind) -> bool {1734 kind == PARAM1735 }1736 fn cast(syntax: SyntaxNode) -> Option<Self> {1737 if Self::can_cast(syntax.kind()) {1738 Some(Self { syntax })1739 } else {1740 None1741 }1742 }1743 fn syntax(&self) -> &SyntaxNode {1744 &self.syntax1745 }1746}1747impl AstNode for DestructFull {1748 fn can_cast(kind: SyntaxKind) -> bool {1749 kind == DESTRUCT_FULL1750 }1751 fn cast(syntax: SyntaxNode) -> Option<Self> {1752 if Self::can_cast(syntax.kind()) {1753 Some(Self { syntax })1754 } else {1755 None1756 }1757 }1758 fn syntax(&self) -> &SyntaxNode {1759 &self.syntax1760 }1761}1762impl AstNode for DestructSkip {1763 fn can_cast(kind: SyntaxKind) -> bool {1764 kind == DESTRUCT_SKIP1765 }1766 fn cast(syntax: SyntaxNode) -> Option<Self> {1767 if Self::can_cast(syntax.kind()) {1768 Some(Self { syntax })1769 } else {1770 None1771 }1772 }1773 fn syntax(&self) -> &SyntaxNode {1774 &self.syntax1775 }1776}1777impl AstNode for DestructArray {1778 fn can_cast(kind: SyntaxKind) -> bool {1779 kind == DESTRUCT_ARRAY1780 }1781 fn cast(syntax: SyntaxNode) -> Option<Self> {1782 if Self::can_cast(syntax.kind()) {1783 Some(Self { syntax })1784 } else {1785 None1786 }1787 }1788 fn syntax(&self) -> &SyntaxNode {1789 &self.syntax1790 }1791}1792impl AstNode for DestructObject {1793 fn can_cast(kind: SyntaxKind) -> bool {1794 kind == DESTRUCT_OBJECT1795 }1796 fn cast(syntax: SyntaxNode) -> Option<Self> {1797 if Self::can_cast(syntax.kind()) {1798 Some(Self { syntax })1799 } else {1800 None1801 }1802 }1803 fn syntax(&self) -> &SyntaxNode {1804 &self.syntax1805 }1806}1807impl AstNode for DestructObjectField {1808 fn can_cast(kind: SyntaxKind) -> bool {1809 kind == DESTRUCT_OBJECT_FIELD1810 }1811 fn cast(syntax: SyntaxNode) -> Option<Self> {1812 if Self::can_cast(syntax.kind()) {1813 Some(Self { syntax })1814 } else {1815 None1816 }1817 }1818 fn syntax(&self) -> &SyntaxNode {1819 &self.syntax1820 }1821}1822impl AstNode for DestructRest {1823 fn can_cast(kind: SyntaxKind) -> bool {1824 kind == DESTRUCT_REST1825 }1826 fn cast(syntax: SyntaxNode) -> Option<Self> {1827 if Self::can_cast(syntax.kind()) {1828 Some(Self { syntax })1829 } else {1830 None1831 }1832 }1833 fn syntax(&self) -> &SyntaxNode {1834 &self.syntax1835 }1836}1837impl AstNode for DestructArrayElement {1838 fn can_cast(kind: SyntaxKind) -> bool {1839 kind == DESTRUCT_ARRAY_ELEMENT1840 }1841 fn cast(syntax: SyntaxNode) -> Option<Self> {1842 if Self::can_cast(syntax.kind()) {1843 Some(Self { syntax })1844 } else {1845 None1846 }1847 }1848 fn syntax(&self) -> &SyntaxNode {1849 &self.syntax1850 }1851}1852impl From<ExprBinary> for Expr {1853 fn from(node: ExprBinary) -> Expr {1854 Expr::ExprBinary(node)1855 }1856}1857impl From<ExprUnary> for Expr {1858 fn from(node: ExprUnary) -> Expr {1859 Expr::ExprUnary(node)1860 }1861}1862impl From<ExprSlice> for Expr {1863 fn from(node: ExprSlice) -> Expr {1864 Expr::ExprSlice(node)1865 }1866}1867impl From<ExprIndex> for Expr {1868 fn from(node: ExprIndex) -> Expr {1869 Expr::ExprIndex(node)1870 }1871}1872impl From<ExprIndexExpr> for Expr {1873 fn from(node: ExprIndexExpr) -> Expr {1874 Expr::ExprIndexExpr(node)1875 }1876}1877impl From<ExprApply> for Expr {1878 fn from(node: ExprApply) -> Expr {1879 Expr::ExprApply(node)1880 }1881}1882impl From<ExprObjExtend> for Expr {1883 fn from(node: ExprObjExtend) -> Expr {1884 Expr::ExprObjExtend(node)1885 }1886}1887impl From<ExprParened> for Expr {1888 fn from(node: ExprParened) -> Expr {1889 Expr::ExprParened(node)1890 }1891}1892impl From<ExprString> for Expr {1893 fn from(node: ExprString) -> Expr {1894 Expr::ExprString(node)1895 }1896}1897impl From<ExprNumber> for Expr {1898 fn from(node: ExprNumber) -> Expr {1899 Expr::ExprNumber(node)1900 }1901}1902impl From<ExprLiteral> for Expr {1903 fn from(node: ExprLiteral) -> Expr {1904 Expr::ExprLiteral(node)1905 }1906}1907impl From<ExprArray> for Expr {1908 fn from(node: ExprArray) -> Expr {1909 Expr::ExprArray(node)1910 }1911}1912impl From<ExprObject> for Expr {1913 fn from(node: ExprObject) -> Expr {1914 Expr::ExprObject(node)1915 }1916}1917impl From<ExprArrayComp> for Expr {1918 fn from(node: ExprArrayComp) -> Expr {1919 Expr::ExprArrayComp(node)1920 }1921}1922impl From<ExprImport> for Expr {1923 fn from(node: ExprImport) -> Expr {1924 Expr::ExprImport(node)1925 }1926}1927impl From<ExprVar> for Expr {1928 fn from(node: ExprVar) -> Expr {1929 Expr::ExprVar(node)1930 }1931}1932impl From<ExprLocal> for Expr {1933 fn from(node: ExprLocal) -> Expr {1934 Expr::ExprLocal(node)1935 }1936}1937impl From<ExprIfThenElse> for Expr {1938 fn from(node: ExprIfThenElse) -> Expr {1939 Expr::ExprIfThenElse(node)1940 }1941}1942impl From<ExprFunction> for Expr {1943 fn from(node: ExprFunction) -> Expr {1944 Expr::ExprFunction(node)1945 }1946}1947impl From<ExprAssert> for Expr {1948 fn from(node: ExprAssert) -> Expr {1949 Expr::ExprAssert(node)1950 }1951}1952impl From<ExprError> for Expr {1953 fn from(node: ExprError) -> Expr {1954 Expr::ExprError(node)1955 }1956}1957impl AstNode for Expr {1958 fn can_cast(kind: SyntaxKind) -> bool {1959 match kind {1960 EXPR_BINARY | EXPR_UNARY | EXPR_SLICE | EXPR_INDEX | EXPR_INDEX_EXPR | EXPR_APPLY1961 | EXPR_OBJ_EXTEND | EXPR_PARENED | EXPR_STRING | EXPR_NUMBER | EXPR_LITERAL1962 | EXPR_ARRAY | EXPR_OBJECT | EXPR_ARRAY_COMP | EXPR_IMPORT | EXPR_VAR | EXPR_LOCAL1963 | EXPR_IF_THEN_ELSE | EXPR_FUNCTION | EXPR_ASSERT | EXPR_ERROR => true,1964 _ => false,1965 }1966 }1967 fn cast(syntax: SyntaxNode) -> Option<Self> {1968 let res = match syntax.kind() {1969 EXPR_BINARY => Expr::ExprBinary(ExprBinary { syntax }),1970 EXPR_UNARY => Expr::ExprUnary(ExprUnary { syntax }),1971 EXPR_SLICE => Expr::ExprSlice(ExprSlice { syntax }),1972 EXPR_INDEX => Expr::ExprIndex(ExprIndex { syntax }),1973 EXPR_INDEX_EXPR => Expr::ExprIndexExpr(ExprIndexExpr { syntax }),1974 EXPR_APPLY => Expr::ExprApply(ExprApply { syntax }),1975 EXPR_OBJ_EXTEND => Expr::ExprObjExtend(ExprObjExtend { syntax }),1976 EXPR_PARENED => Expr::ExprParened(ExprParened { syntax }),1977 EXPR_STRING => Expr::ExprString(ExprString { syntax }),1978 EXPR_NUMBER => Expr::ExprNumber(ExprNumber { syntax }),1979 EXPR_LITERAL => Expr::ExprLiteral(ExprLiteral { syntax }),1980 EXPR_ARRAY => Expr::ExprArray(ExprArray { syntax }),1981 EXPR_OBJECT => Expr::ExprObject(ExprObject { syntax }),1982 EXPR_ARRAY_COMP => Expr::ExprArrayComp(ExprArrayComp { syntax }),1983 EXPR_IMPORT => Expr::ExprImport(ExprImport { syntax }),1984 EXPR_VAR => Expr::ExprVar(ExprVar { syntax }),1985 EXPR_LOCAL => Expr::ExprLocal(ExprLocal { syntax }),1986 EXPR_IF_THEN_ELSE => Expr::ExprIfThenElse(ExprIfThenElse { syntax }),1987 EXPR_FUNCTION => Expr::ExprFunction(ExprFunction { syntax }),1988 EXPR_ASSERT => Expr::ExprAssert(ExprAssert { syntax }),1989 EXPR_ERROR => Expr::ExprError(ExprError { syntax }),1990 _ => return None,1991 };1992 Some(res)1993 }1994 fn syntax(&self) -> &SyntaxNode {1995 match self {1996 Expr::ExprBinary(it) => &it.syntax,1997 Expr::ExprUnary(it) => &it.syntax,1998 Expr::ExprSlice(it) => &it.syntax,1999 Expr::ExprIndex(it) => &it.syntax,2000 Expr::ExprIndexExpr(it) => &it.syntax,2001 Expr::ExprApply(it) => &it.syntax,2002 Expr::ExprObjExtend(it) => &it.syntax,2003 Expr::ExprParened(it) => &it.syntax,2004 Expr::ExprString(it) => &it.syntax,2005 Expr::ExprNumber(it) => &it.syntax,2006 Expr::ExprLiteral(it) => &it.syntax,2007 Expr::ExprArray(it) => &it.syntax,2008 Expr::ExprObject(it) => &it.syntax,2009 Expr::ExprArrayComp(it) => &it.syntax,2010 Expr::ExprImport(it) => &it.syntax,2011 Expr::ExprVar(it) => &it.syntax,2012 Expr::ExprLocal(it) => &it.syntax,2013 Expr::ExprIfThenElse(it) => &it.syntax,2014 Expr::ExprFunction(it) => &it.syntax,2015 Expr::ExprAssert(it) => &it.syntax,2016 Expr::ExprError(it) => &it.syntax,2017 }2018 }2019}2020impl From<ObjBodyComp> for ObjBody {2021 fn from(node: ObjBodyComp) -> ObjBody {2022 ObjBody::ObjBodyComp(node)2023 }2024}2025impl From<ObjBodyMemberList> for ObjBody {2026 fn from(node: ObjBodyMemberList) -> ObjBody {2027 ObjBody::ObjBodyMemberList(node)2028 }2029}2030impl AstNode for ObjBody {2031 fn can_cast(kind: SyntaxKind) -> bool {2032 match kind {2033 OBJ_BODY_COMP | OBJ_BODY_MEMBER_LIST => true,2034 _ => false,2035 }2036 }2037 fn cast(syntax: SyntaxNode) -> Option<Self> {2038 let res = match syntax.kind() {2039 OBJ_BODY_COMP => ObjBody::ObjBodyComp(ObjBodyComp { syntax }),2040 OBJ_BODY_MEMBER_LIST => ObjBody::ObjBodyMemberList(ObjBodyMemberList { syntax }),2041 _ => return None,2042 };2043 Some(res)2044 }2045 fn syntax(&self) -> &SyntaxNode {2046 match self {2047 ObjBody::ObjBodyComp(it) => &it.syntax,2048 ObjBody::ObjBodyMemberList(it) => &it.syntax,2049 }2050 }2051}2052impl From<ForSpec> for CompSpec {2053 fn from(node: ForSpec) -> CompSpec {2054 CompSpec::ForSpec(node)2055 }2056}2057impl From<IfSpec> for CompSpec {2058 fn from(node: IfSpec) -> CompSpec {2059 CompSpec::IfSpec(node)2060 }2061}2062impl AstNode for CompSpec {2063 fn can_cast(kind: SyntaxKind) -> bool {2064 match kind {2065 FOR_SPEC | IF_SPEC => true,2066 _ => false,2067 }2068 }2069 fn cast(syntax: SyntaxNode) -> Option<Self> {2070 let res = match syntax.kind() {2071 FOR_SPEC => CompSpec::ForSpec(ForSpec { syntax }),2072 IF_SPEC => CompSpec::IfSpec(IfSpec { syntax }),2073 _ => return None,2074 };2075 Some(res)2076 }2077 fn syntax(&self) -> &SyntaxNode {2078 match self {2079 CompSpec::ForSpec(it) => &it.syntax,2080 CompSpec::IfSpec(it) => &it.syntax,2081 }2082 }2083}2084impl From<BindDestruct> for Bind {2085 fn from(node: BindDestruct) -> Bind {2086 Bind::BindDestruct(node)2087 }2088}2089impl From<BindFunction> for Bind {2090 fn from(node: BindFunction) -> Bind {2091 Bind::BindFunction(node)2092 }2093}2094impl AstNode for Bind {2095 fn can_cast(kind: SyntaxKind) -> bool {2096 match kind {2097 BIND_DESTRUCT | BIND_FUNCTION => true,2098 _ => false,2099 }2100 }2101 fn cast(syntax: SyntaxNode) -> Option<Self> {2102 let res = match syntax.kind() {2103 BIND_DESTRUCT => Bind::BindDestruct(BindDestruct { syntax }),2104 BIND_FUNCTION => Bind::BindFunction(BindFunction { syntax }),2105 _ => return None,2106 };2107 Some(res)2108 }2109 fn syntax(&self) -> &SyntaxNode {2110 match self {2111 Bind::BindDestruct(it) => &it.syntax,2112 Bind::BindFunction(it) => &it.syntax,2113 }2114 }2115}2116impl From<MemberBindStmt> for MemberComp {2117 fn from(node: MemberBindStmt) -> MemberComp {2118 MemberComp::MemberBindStmt(node)2119 }2120}2121impl From<MemberFieldNormal> for MemberComp {2122 fn from(node: MemberFieldNormal) -> MemberComp {2123 MemberComp::MemberFieldNormal(node)2124 }2125}2126impl From<MemberFieldMethod> for MemberComp {2127 fn from(node: MemberFieldMethod) -> MemberComp {2128 MemberComp::MemberFieldMethod(node)2129 }2130}2131impl AstNode for MemberComp {2132 fn can_cast(kind: SyntaxKind) -> bool {2133 match kind {2134 MEMBER_BIND_STMT | MEMBER_FIELD_NORMAL | MEMBER_FIELD_METHOD => true,2135 _ => false,2136 }2137 }2138 fn cast(syntax: SyntaxNode) -> Option<Self> {2139 let res = match syntax.kind() {2140 MEMBER_BIND_STMT => MemberComp::MemberBindStmt(MemberBindStmt { syntax }),2141 MEMBER_FIELD_NORMAL => MemberComp::MemberFieldNormal(MemberFieldNormal { syntax }),2142 MEMBER_FIELD_METHOD => MemberComp::MemberFieldMethod(MemberFieldMethod { syntax }),2143 _ => return None,2144 };2145 Some(res)2146 }2147 fn syntax(&self) -> &SyntaxNode {2148 match self {2149 MemberComp::MemberBindStmt(it) => &it.syntax,2150 MemberComp::MemberFieldNormal(it) => &it.syntax,2151 MemberComp::MemberFieldMethod(it) => &it.syntax,2152 }2153 }2154}2155impl From<MemberBindStmt> for Member {2156 fn from(node: MemberBindStmt) -> Member {2157 Member::MemberBindStmt(node)2158 }2159}2160impl From<MemberAssertStmt> for Member {2161 fn from(node: MemberAssertStmt) -> Member {2162 Member::MemberAssertStmt(node)2163 }2164}2165impl From<MemberFieldNormal> for Member {2166 fn from(node: MemberFieldNormal) -> Member {2167 Member::MemberFieldNormal(node)2168 }2169}2170impl From<MemberFieldMethod> for Member {2171 fn from(node: MemberFieldMethod) -> Member {2172 Member::MemberFieldMethod(node)2173 }2174}2175impl AstNode for Member {2176 fn can_cast(kind: SyntaxKind) -> bool {2177 match kind {2178 MEMBER_BIND_STMT | MEMBER_ASSERT_STMT | MEMBER_FIELD_NORMAL | MEMBER_FIELD_METHOD => {2179 true2180 }2181 _ => false,2182 }2183 }2184 fn cast(syntax: SyntaxNode) -> Option<Self> {2185 let res = match syntax.kind() {2186 MEMBER_BIND_STMT => Member::MemberBindStmt(MemberBindStmt { syntax }),2187 MEMBER_ASSERT_STMT => Member::MemberAssertStmt(MemberAssertStmt { syntax }),2188 MEMBER_FIELD_NORMAL => Member::MemberFieldNormal(MemberFieldNormal { syntax }),2189 MEMBER_FIELD_METHOD => Member::MemberFieldMethod(MemberFieldMethod { syntax }),2190 _ => return None,2191 };2192 Some(res)2193 }2194 fn syntax(&self) -> &SyntaxNode {2195 match self {2196 Member::MemberBindStmt(it) => &it.syntax,2197 Member::MemberAssertStmt(it) => &it.syntax,2198 Member::MemberFieldNormal(it) => &it.syntax,2199 Member::MemberFieldMethod(it) => &it.syntax,2200 }2201 }2202}2203impl From<FieldNameFixed> for FieldName {2204 fn from(node: FieldNameFixed) -> FieldName {2205 FieldName::FieldNameFixed(node)2206 }2207}2208impl From<FieldNameDynamic> for FieldName {2209 fn from(node: FieldNameDynamic) -> FieldName {2210 FieldName::FieldNameDynamic(node)2211 }2212}2213impl AstNode for FieldName {2214 fn can_cast(kind: SyntaxKind) -> bool {2215 match kind {2216 FIELD_NAME_FIXED | FIELD_NAME_DYNAMIC => true,2217 _ => false,2218 }2219 }2220 fn cast(syntax: SyntaxNode) -> Option<Self> {2221 let res = match syntax.kind() {2222 FIELD_NAME_FIXED => FieldName::FieldNameFixed(FieldNameFixed { syntax }),2223 FIELD_NAME_DYNAMIC => FieldName::FieldNameDynamic(FieldNameDynamic { syntax }),2224 _ => return None,2225 };2226 Some(res)2227 }2228 fn syntax(&self) -> &SyntaxNode {2229 match self {2230 FieldName::FieldNameFixed(it) => &it.syntax,2231 FieldName::FieldNameDynamic(it) => &it.syntax,2232 }2233 }2234}2235impl From<DestructFull> for Destruct {2236 fn from(node: DestructFull) -> Destruct {2237 Destruct::DestructFull(node)2238 }2239}2240impl From<DestructSkip> for Destruct {2241 fn from(node: DestructSkip) -> Destruct {2242 Destruct::DestructSkip(node)2243 }2244}2245impl From<DestructArray> for Destruct {2246 fn from(node: DestructArray) -> Destruct {2247 Destruct::DestructArray(node)2248 }2249}2250impl From<DestructObject> for Destruct {2251 fn from(node: DestructObject) -> Destruct {2252 Destruct::DestructObject(node)2253 }2254}2255impl AstNode for Destruct {2256 fn can_cast(kind: SyntaxKind) -> bool {2257 match kind {2258 DESTRUCT_FULL | DESTRUCT_SKIP | DESTRUCT_ARRAY | DESTRUCT_OBJECT => true,2259 _ => false,2260 }2261 }2262 fn cast(syntax: SyntaxNode) -> Option<Self> {2263 let res = match syntax.kind() {2264 DESTRUCT_FULL => Destruct::DestructFull(DestructFull { syntax }),2265 DESTRUCT_SKIP => Destruct::DestructSkip(DestructSkip { syntax }),2266 DESTRUCT_ARRAY => Destruct::DestructArray(DestructArray { syntax }),2267 DESTRUCT_OBJECT => Destruct::DestructObject(DestructObject { syntax }),2268 _ => return None,2269 };2270 Some(res)2271 }2272 fn syntax(&self) -> &SyntaxNode {2273 match self {2274 Destruct::DestructFull(it) => &it.syntax,2275 Destruct::DestructSkip(it) => &it.syntax,2276 Destruct::DestructArray(it) => &it.syntax,2277 Destruct::DestructObject(it) => &it.syntax,2278 }2279 }2280}2281impl From<DestructArrayElement> for DestructArrayPart {2282 fn from(node: DestructArrayElement) -> DestructArrayPart {2283 DestructArrayPart::DestructArrayElement(node)2284 }2285}2286impl From<DestructRest> for DestructArrayPart {2287 fn from(node: DestructRest) -> DestructArrayPart {2288 DestructArrayPart::DestructRest(node)2289 }2290}2291impl AstNode for DestructArrayPart {2292 fn can_cast(kind: SyntaxKind) -> bool {2293 match kind {2294 DESTRUCT_ARRAY_ELEMENT | DESTRUCT_REST => true,2295 _ => false,2296 }2297 }2298 fn cast(syntax: SyntaxNode) -> Option<Self> {2299 let res = match syntax.kind() {2300 DESTRUCT_ARRAY_ELEMENT => {2301 DestructArrayPart::DestructArrayElement(DestructArrayElement { syntax })2302 }2303 DESTRUCT_REST => DestructArrayPart::DestructRest(DestructRest { syntax }),2304 _ => return None,2305 };2306 Some(res)2307 }2308 fn syntax(&self) -> &SyntaxNode {2309 match self {2310 DestructArrayPart::DestructArrayElement(it) => &it.syntax,2311 DestructArrayPart::DestructRest(it) => &it.syntax,2312 }2313 }2314}2315impl AstToken for BinaryOperator {2316 fn can_cast(kind: SyntaxKind) -> bool {2317 BinaryOperatorKind::can_cast(kind)2318 }2319 fn cast(syntax: SyntaxToken) -> Option<Self> {2320 let kind = BinaryOperatorKind::cast(syntax.kind())?;2321 Some(BinaryOperator { syntax, kind })2322 }2323 fn syntax(&self) -> &SyntaxToken {2324 &self.syntax2325 }2326}2327impl BinaryOperatorKind {2328 fn can_cast(kind: SyntaxKind) -> bool {2329 match kind {2330 OR | AND | BIT_OR | BIT_XOR | BIT_AND | EQ | NE | LT | GT | LE | GE | IN_KW | LHS2331 | RHS | PLUS | MINUS | MUL | DIV | MODULO | META_OBJECT_APPLY | ERROR_NO_OPERATOR => true,2332 _ => false,2333 }2334 }2335 pub fn cast(kind: SyntaxKind) -> Option<Self> {2336 let res = match kind {2337 OR => Self::Or,2338 AND => Self::And,2339 BIT_OR => Self::BitOr,2340 BIT_XOR => Self::BitXor,2341 BIT_AND => Self::BitAnd,2342 EQ => Self::Eq,2343 NE => Self::Ne,2344 LT => Self::Lt,2345 GT => Self::Gt,2346 LE => Self::Le,2347 GE => Self::Ge,2348 IN_KW => Self::InKw,2349 LHS => Self::Lhs,2350 RHS => Self::Rhs,2351 PLUS => Self::Plus,2352 MINUS => Self::Minus,2353 MUL => Self::Mul,2354 DIV => Self::Div,2355 MODULO => Self::Modulo,2356 META_OBJECT_APPLY => Self::MetaObjectApply,2357 ERROR_NO_OPERATOR => Self::ErrorNoOperator,2358 _ => return None,2359 };2360 Some(res)2361 }2362}2363impl BinaryOperator {2364 pub fn kind(&self) -> BinaryOperatorKind {2365 self.kind2366 }2367}2368impl std::fmt::Display for BinaryOperator {2369 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2370 std::fmt::Display::fmt(self.syntax(), f)2371 }2372}2373impl AstToken for UnaryOperator {2374 fn can_cast(kind: SyntaxKind) -> bool {2375 UnaryOperatorKind::can_cast(kind)2376 }2377 fn cast(syntax: SyntaxToken) -> Option<Self> {2378 let kind = UnaryOperatorKind::cast(syntax.kind())?;2379 Some(UnaryOperator { syntax, kind })2380 }2381 fn syntax(&self) -> &SyntaxToken {2382 &self.syntax2383 }2384}2385impl UnaryOperatorKind {2386 fn can_cast(kind: SyntaxKind) -> bool {2387 match kind {2388 MINUS | NOT | BIT_NOT => true,2389 _ => false,2390 }2391 }2392 pub fn cast(kind: SyntaxKind) -> Option<Self> {2393 let res = match kind {2394 MINUS => Self::Minus,2395 NOT => Self::Not,2396 BIT_NOT => Self::BitNot,2397 _ => return None,2398 };2399 Some(res)2400 }2401}2402impl UnaryOperator {2403 pub fn kind(&self) -> UnaryOperatorKind {2404 self.kind2405 }2406}2407impl std::fmt::Display for UnaryOperator {2408 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2409 std::fmt::Display::fmt(self.syntax(), f)2410 }2411}2412impl AstToken for Literal {2413 fn can_cast(kind: SyntaxKind) -> bool {2414 LiteralKind::can_cast(kind)2415 }2416 fn cast(syntax: SyntaxToken) -> Option<Self> {2417 let kind = LiteralKind::cast(syntax.kind())?;2418 Some(Literal { syntax, kind })2419 }2420 fn syntax(&self) -> &SyntaxToken {2421 &self.syntax2422 }2423}2424impl LiteralKind {2425 fn can_cast(kind: SyntaxKind) -> bool {2426 match kind {2427 NULL_KW | TRUE_KW | FALSE_KW | SELF_KW | DOLLAR | SUPER_KW => true,2428 _ => false,2429 }2430 }2431 pub fn cast(kind: SyntaxKind) -> Option<Self> {2432 let res = match kind {2433 NULL_KW => Self::NullKw,2434 TRUE_KW => Self::TrueKw,2435 FALSE_KW => Self::FalseKw,2436 SELF_KW => Self::SelfKw,2437 DOLLAR => Self::Dollar,2438 SUPER_KW => Self::SuperKw,2439 _ => return None,2440 };2441 Some(res)2442 }2443}2444impl Literal {2445 pub fn kind(&self) -> LiteralKind {2446 self.kind2447 }2448}2449impl std::fmt::Display for Literal {2450 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2451 std::fmt::Display::fmt(self.syntax(), f)2452 }2453}2454impl AstToken for Text {2455 fn can_cast(kind: SyntaxKind) -> bool {2456 TextKind::can_cast(kind)2457 }2458 fn cast(syntax: SyntaxToken) -> Option<Self> {2459 let kind = TextKind::cast(syntax.kind())?;2460 Some(Text { syntax, kind })2461 }2462 fn syntax(&self) -> &SyntaxToken {2463 &self.syntax2464 }2465}2466impl TextKind {2467 fn can_cast(kind: SyntaxKind) -> bool {2468 match kind {2469 STRING_DOUBLE2470 | ERROR_STRING_DOUBLE_UNTERMINATED2471 | STRING_SINGLE2472 | ERROR_STRING_SINGLE_UNTERMINATED2473 | STRING_DOUBLE_VERBATIM2474 | ERROR_STRING_DOUBLE_VERBATIM_UNTERMINATED2475 | STRING_SINGLE_VERBATIM2476 | ERROR_STRING_SINGLE_VERBATIM_UNTERMINATED2477 | ERROR_STRING_VERBATIM_MISSING_QUOTES2478 | STRING_BLOCK2479 | ERROR_STRING_BLOCK_UNEXPECTED_END2480 | ERROR_STRING_BLOCK_MISSING_NEW_LINE2481 | ERROR_STRING_BLOCK_MISSING_TERMINATION2482 | ERROR_STRING_BLOCK_MISSING_INDENT => true,2483 _ => false,2484 }2485 }2486 pub fn cast(kind: SyntaxKind) -> Option<Self> {2487 let res = match kind {2488 STRING_DOUBLE => Self::StringDouble,2489 ERROR_STRING_DOUBLE_UNTERMINATED => Self::ErrorStringDoubleUnterminated,2490 STRING_SINGLE => Self::StringSingle,2491 ERROR_STRING_SINGLE_UNTERMINATED => Self::ErrorStringSingleUnterminated,2492 STRING_DOUBLE_VERBATIM => Self::StringDoubleVerbatim,2493 ERROR_STRING_DOUBLE_VERBATIM_UNTERMINATED => {2494 Self::ErrorStringDoubleVerbatimUnterminated2495 }2496 STRING_SINGLE_VERBATIM => Self::StringSingleVerbatim,2497 ERROR_STRING_SINGLE_VERBATIM_UNTERMINATED => {2498 Self::ErrorStringSingleVerbatimUnterminated2499 }2500 ERROR_STRING_VERBATIM_MISSING_QUOTES => Self::ErrorStringVerbatimMissingQuotes,2501 STRING_BLOCK => Self::StringBlock,2502 ERROR_STRING_BLOCK_UNEXPECTED_END => Self::ErrorStringBlockUnexpectedEnd,2503 ERROR_STRING_BLOCK_MISSING_NEW_LINE => Self::ErrorStringBlockMissingNewLine,2504 ERROR_STRING_BLOCK_MISSING_TERMINATION => Self::ErrorStringBlockMissingTermination,2505 ERROR_STRING_BLOCK_MISSING_INDENT => Self::ErrorStringBlockMissingIndent,2506 _ => return None,2507 };2508 Some(res)2509 }2510}2511impl Text {2512 pub fn kind(&self) -> TextKind {2513 self.kind2514 }2515}2516impl std::fmt::Display for Text {2517 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2518 std::fmt::Display::fmt(self.syntax(), f)2519 }2520}2521impl AstToken for Number {2522 fn can_cast(kind: SyntaxKind) -> bool {2523 NumberKind::can_cast(kind)2524 }2525 fn cast(syntax: SyntaxToken) -> Option<Self> {2526 let kind = NumberKind::cast(syntax.kind())?;2527 Some(Number { syntax, kind })2528 }2529 fn syntax(&self) -> &SyntaxToken {2530 &self.syntax2531 }2532}2533impl NumberKind {2534 fn can_cast(kind: SyntaxKind) -> bool {2535 match kind {2536 FLOAT2537 | ERROR_FLOAT_JUNK_AFTER_POINT2538 | ERROR_FLOAT_JUNK_AFTER_EXPONENT2539 | ERROR_FLOAT_JUNK_AFTER_EXPONENT_SIGN => true,2540 _ => false,2541 }2542 }2543 pub fn cast(kind: SyntaxKind) -> Option<Self> {2544 let res = match kind {2545 FLOAT => Self::Float,2546 ERROR_FLOAT_JUNK_AFTER_POINT => Self::ErrorFloatJunkAfterPoint,2547 ERROR_FLOAT_JUNK_AFTER_EXPONENT => Self::ErrorFloatJunkAfterExponent,2548 ERROR_FLOAT_JUNK_AFTER_EXPONENT_SIGN => Self::ErrorFloatJunkAfterExponentSign,2549 _ => return None,2550 };2551 Some(res)2552 }2553}2554impl Number {2555 pub fn kind(&self) -> NumberKind {2556 self.kind2557 }2558}2559impl std::fmt::Display for Number {2560 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2561 std::fmt::Display::fmt(self.syntax(), f)2562 }2563}2564impl AstToken for ImportKind {2565 fn can_cast(kind: SyntaxKind) -> bool {2566 ImportKindKind::can_cast(kind)2567 }2568 fn cast(syntax: SyntaxToken) -> Option<Self> {2569 let kind = ImportKindKind::cast(syntax.kind())?;2570 Some(ImportKind { syntax, kind })2571 }2572 fn syntax(&self) -> &SyntaxToken {2573 &self.syntax2574 }2575}2576impl ImportKindKind {2577 fn can_cast(kind: SyntaxKind) -> bool {2578 match kind {2579 IMPORTSTR_KW | IMPORTBIN_KW | IMPORT_KW => true,2580 _ => false,2581 }2582 }2583 pub fn cast(kind: SyntaxKind) -> Option<Self> {2584 let res = match kind {2585 IMPORTSTR_KW => Self::ImportstrKw,2586 IMPORTBIN_KW => Self::ImportbinKw,2587 IMPORT_KW => Self::ImportKw,2588 _ => return None,2589 };2590 Some(res)2591 }2592}2593impl ImportKind {2594 pub fn kind(&self) -> ImportKindKind {2595 self.kind2596 }2597}2598impl std::fmt::Display for ImportKind {2599 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2600 std::fmt::Display::fmt(self.syntax(), f)2601 }2602}2603impl AstToken for Visibility {2604 fn can_cast(kind: SyntaxKind) -> bool {2605 VisibilityKind::can_cast(kind)2606 }2607 fn cast(syntax: SyntaxToken) -> Option<Self> {2608 let kind = VisibilityKind::cast(syntax.kind())?;2609 Some(Visibility { syntax, kind })2610 }2611 fn syntax(&self) -> &SyntaxToken {2612 &self.syntax2613 }2614}2615impl VisibilityKind {2616 fn can_cast(kind: SyntaxKind) -> bool {2617 match kind {2618 COLONCOLONCOLON | COLONCOLON | COLON => true,2619 _ => false,2620 }2621 }2622 pub fn cast(kind: SyntaxKind) -> Option<Self> {2623 let res = match kind {2624 COLONCOLONCOLON => Self::Coloncoloncolon,2625 COLONCOLON => Self::Coloncolon,2626 COLON => Self::Colon,2627 _ => return None,2628 };2629 Some(res)2630 }2631}2632impl Visibility {2633 pub fn kind(&self) -> VisibilityKind {2634 self.kind2635 }2636}2637impl std::fmt::Display for Visibility {2638 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2639 std::fmt::Display::fmt(self.syntax(), f)2640 }2641}2642impl AstToken for Trivia {2643 fn can_cast(kind: SyntaxKind) -> bool {2644 TriviaKind::can_cast(kind)2645 }2646 fn cast(syntax: SyntaxToken) -> Option<Self> {2647 let kind = TriviaKind::cast(syntax.kind())?;2648 Some(Trivia { syntax, kind })2649 }2650 fn syntax(&self) -> &SyntaxToken {2651 &self.syntax2652 }2653}2654impl TriviaKind {2655 fn can_cast(kind: SyntaxKind) -> bool {2656 match kind {2657 WHITESPACE2658 | MULTI_LINE_COMMENT2659 | ERROR_COMMENT_TOO_SHORT2660 | ERROR_COMMENT_UNTERMINATED2661 | SINGLE_LINE_HASH_COMMENT2662 | SINGLE_LINE_SLASH_COMMENT => true,2663 _ => false,2664 }2665 }2666 pub fn cast(kind: SyntaxKind) -> Option<Self> {2667 let res = match kind {2668 WHITESPACE => Self::Whitespace,2669 MULTI_LINE_COMMENT => Self::MultiLineComment,2670 ERROR_COMMENT_TOO_SHORT => Self::ErrorCommentTooShort,2671 ERROR_COMMENT_UNTERMINATED => Self::ErrorCommentUnterminated,2672 SINGLE_LINE_HASH_COMMENT => Self::SingleLineHashComment,2673 SINGLE_LINE_SLASH_COMMENT => Self::SingleLineSlashComment,2674 _ => return None,2675 };2676 Some(res)2677 }2678}2679impl Trivia {2680 pub fn kind(&self) -> TriviaKind {2681 self.kind2682 }2683}2684impl std::fmt::Display for Trivia {2685 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2686 std::fmt::Display::fmt(self.syntax(), f)2687 }2688}2689impl AstToken for CustomError {2690 fn can_cast(kind: SyntaxKind) -> bool {2691 CustomErrorKind::can_cast(kind)2692 }2693 fn cast(syntax: SyntaxToken) -> Option<Self> {2694 let kind = CustomErrorKind::cast(syntax.kind())?;2695 Some(CustomError { syntax, kind })2696 }2697 fn syntax(&self) -> &SyntaxToken {2698 &self.syntax2699 }2700}2701impl CustomErrorKind {2702 fn can_cast(kind: SyntaxKind) -> bool {2703 match kind {2704 ERROR_MISSING_TOKEN | ERROR_UNEXPECTED_TOKEN | ERROR_CUSTOM => true,2705 _ => false,2706 }2707 }2708 pub fn cast(kind: SyntaxKind) -> Option<Self> {2709 let res = match kind {2710 ERROR_MISSING_TOKEN => Self::ErrorMissingToken,2711 ERROR_UNEXPECTED_TOKEN => Self::ErrorUnexpectedToken,2712 ERROR_CUSTOM => Self::ErrorCustom,2713 _ => return None,2714 };2715 Some(res)2716 }2717}2718impl CustomError {2719 pub fn kind(&self) -> CustomErrorKind {2720 self.kind2721 }2722}2723impl std::fmt::Display for CustomError {2724 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2725 std::fmt::Display::fmt(self.syntax(), f)2726 }2727}2728impl std::fmt::Display for Expr {2729 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2730 std::fmt::Display::fmt(self.syntax(), f)2731 }2732}2733impl std::fmt::Display for ObjBody {2734 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2735 std::fmt::Display::fmt(self.syntax(), f)2736 }2737}2738impl std::fmt::Display for CompSpec {2739 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2740 std::fmt::Display::fmt(self.syntax(), f)2741 }2742}2743impl std::fmt::Display for Bind {2744 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2745 std::fmt::Display::fmt(self.syntax(), f)2746 }2747}2748impl std::fmt::Display for MemberComp {2749 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2750 std::fmt::Display::fmt(self.syntax(), f)2751 }2752}2753impl std::fmt::Display for Member {2754 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2755 std::fmt::Display::fmt(self.syntax(), f)2756 }2757}2758impl std::fmt::Display for FieldName {2759 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2760 std::fmt::Display::fmt(self.syntax(), f)2761 }2762}2763impl std::fmt::Display for Destruct {2764 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2765 std::fmt::Display::fmt(self.syntax(), f)2766 }2767}2768impl std::fmt::Display for DestructArrayPart {2769 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2770 std::fmt::Display::fmt(self.syntax(), f)2771 }2772}2773impl std::fmt::Display for SourceFile {2774 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2775 std::fmt::Display::fmt(self.syntax(), f)2776 }2777}2778impl std::fmt::Display for ExprBinary {2779 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2780 std::fmt::Display::fmt(self.syntax(), f)2781 }2782}2783impl std::fmt::Display for LhsExpr {2784 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2785 std::fmt::Display::fmt(self.syntax(), f)2786 }2787}2788impl std::fmt::Display for ExprUnary {2789 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2790 std::fmt::Display::fmt(self.syntax(), f)2791 }2792}2793impl std::fmt::Display for ExprSlice {2794 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2795 std::fmt::Display::fmt(self.syntax(), f)2796 }2797}2798impl std::fmt::Display for SliceDesc {2799 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2800 std::fmt::Display::fmt(self.syntax(), f)2801 }2802}2803impl std::fmt::Display for ExprIndex {2804 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2805 std::fmt::Display::fmt(self.syntax(), f)2806 }2807}2808impl std::fmt::Display for Name {2809 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2810 std::fmt::Display::fmt(self.syntax(), f)2811 }2812}2813impl std::fmt::Display for ExprIndexExpr {2814 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2815 std::fmt::Display::fmt(self.syntax(), f)2816 }2817}2818impl std::fmt::Display for ExprApply {2819 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2820 std::fmt::Display::fmt(self.syntax(), f)2821 }2822}2823impl std::fmt::Display for ArgsDesc {2824 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2825 std::fmt::Display::fmt(self.syntax(), f)2826 }2827}2828impl std::fmt::Display for ExprObjExtend {2829 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2830 std::fmt::Display::fmt(self.syntax(), f)2831 }2832}2833impl std::fmt::Display for ExprParened {2834 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2835 std::fmt::Display::fmt(self.syntax(), f)2836 }2837}2838impl std::fmt::Display for ExprLiteral {2839 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2840 std::fmt::Display::fmt(self.syntax(), f)2841 }2842}2843impl std::fmt::Display for ExprString {2844 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2845 std::fmt::Display::fmt(self.syntax(), f)2846 }2847}2848impl std::fmt::Display for ExprNumber {2849 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2850 std::fmt::Display::fmt(self.syntax(), f)2851 }2852}2853impl std::fmt::Display for ExprArray {2854 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2855 std::fmt::Display::fmt(self.syntax(), f)2856 }2857}2858impl std::fmt::Display for ExprObject {2859 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2860 std::fmt::Display::fmt(self.syntax(), f)2861 }2862}2863impl std::fmt::Display for ExprArrayComp {2864 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2865 std::fmt::Display::fmt(self.syntax(), f)2866 }2867}2868impl std::fmt::Display for ExprImport {2869 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2870 std::fmt::Display::fmt(self.syntax(), f)2871 }2872}2873impl std::fmt::Display for ExprVar {2874 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2875 std::fmt::Display::fmt(self.syntax(), f)2876 }2877}2878impl std::fmt::Display for ExprLocal {2879 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2880 std::fmt::Display::fmt(self.syntax(), f)2881 }2882}2883impl std::fmt::Display for ExprIfThenElse {2884 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2885 std::fmt::Display::fmt(self.syntax(), f)2886 }2887}2888impl std::fmt::Display for TrueExpr {2889 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2890 std::fmt::Display::fmt(self.syntax(), f)2891 }2892}2893impl std::fmt::Display for FalseExpr {2894 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2895 std::fmt::Display::fmt(self.syntax(), f)2896 }2897}2898impl std::fmt::Display for ExprFunction {2899 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2900 std::fmt::Display::fmt(self.syntax(), f)2901 }2902}2903impl std::fmt::Display for ParamsDesc {2904 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2905 std::fmt::Display::fmt(self.syntax(), f)2906 }2907}2908impl std::fmt::Display for ExprAssert {2909 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2910 std::fmt::Display::fmt(self.syntax(), f)2911 }2912}2913impl std::fmt::Display for Assertion {2914 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2915 std::fmt::Display::fmt(self.syntax(), f)2916 }2917}2918impl std::fmt::Display for ExprError {2919 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2920 std::fmt::Display::fmt(self.syntax(), f)2921 }2922}2923impl std::fmt::Display for SliceDescEnd {2924 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2925 std::fmt::Display::fmt(self.syntax(), f)2926 }2927}2928impl std::fmt::Display for SliceDescStep {2929 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2930 std::fmt::Display::fmt(self.syntax(), f)2931 }2932}2933impl std::fmt::Display for Arg {2934 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2935 std::fmt::Display::fmt(self.syntax(), f)2936 }2937}2938impl std::fmt::Display for ObjBodyComp {2939 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2940 std::fmt::Display::fmt(self.syntax(), f)2941 }2942}2943impl std::fmt::Display for ObjBodyMemberList {2944 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2945 std::fmt::Display::fmt(self.syntax(), f)2946 }2947}2948impl std::fmt::Display for MemberBindStmt {2949 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2950 std::fmt::Display::fmt(self.syntax(), f)2951 }2952}2953impl std::fmt::Display for ObjLocal {2954 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2955 std::fmt::Display::fmt(self.syntax(), f)2956 }2957}2958impl std::fmt::Display for MemberAssertStmt {2959 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2960 std::fmt::Display::fmt(self.syntax(), f)2961 }2962}2963impl std::fmt::Display for MemberFieldNormal {2964 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2965 std::fmt::Display::fmt(self.syntax(), f)2966 }2967}2968impl std::fmt::Display for MemberFieldMethod {2969 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2970 std::fmt::Display::fmt(self.syntax(), f)2971 }2972}2973impl std::fmt::Display for FieldNameFixed {2974 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2975 std::fmt::Display::fmt(self.syntax(), f)2976 }2977}2978impl std::fmt::Display for FieldNameDynamic {2979 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2980 std::fmt::Display::fmt(self.syntax(), f)2981 }2982}2983impl std::fmt::Display for ForSpec {2984 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2985 std::fmt::Display::fmt(self.syntax(), f)2986 }2987}2988impl std::fmt::Display for IfSpec {2989 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2990 std::fmt::Display::fmt(self.syntax(), f)2991 }2992}2993impl std::fmt::Display for BindDestruct {2994 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2995 std::fmt::Display::fmt(self.syntax(), f)2996 }2997}2998impl std::fmt::Display for BindFunction {2999 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3000 std::fmt::Display::fmt(self.syntax(), f)3001 }3002}3003impl std::fmt::Display for Param {3004 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3005 std::fmt::Display::fmt(self.syntax(), f)3006 }3007}3008impl std::fmt::Display for DestructFull {3009 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3010 std::fmt::Display::fmt(self.syntax(), f)3011 }3012}3013impl std::fmt::Display for DestructSkip {3014 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3015 std::fmt::Display::fmt(self.syntax(), f)3016 }3017}3018impl std::fmt::Display for DestructArray {3019 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3020 std::fmt::Display::fmt(self.syntax(), f)3021 }3022}3023impl std::fmt::Display for DestructObject {3024 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3025 std::fmt::Display::fmt(self.syntax(), f)3026 }3027}3028impl std::fmt::Display for DestructObjectField {3029 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3030 std::fmt::Display::fmt(self.syntax(), f)3031 }3032}3033impl std::fmt::Display for DestructRest {3034 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3035 std::fmt::Display::fmt(self.syntax(), f)3036 }3037}3038impl std::fmt::Display for DestructArrayElement {3039 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3040 std::fmt::Display::fmt(self.syntax(), f)3041 }3042}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 Expr {23 pub(crate) syntax: SyntaxNode,24}25impl Expr {26 pub fn stmt_locals(&self) -> AstChildren<StmtLocal> {27 support::children(&self.syntax)28 }29 pub fn expr_base(&self) -> Option<ExprBase> {30 support::child(&self.syntax)31 }32}3334#[derive(Debug, Clone, PartialEq, Eq, Hash)]35pub struct ExprBinary {36 pub(crate) syntax: SyntaxNode,37}38impl ExprBinary {39 pub fn lhs(&self) -> Option<LhsExpr> {40 support::child(&self.syntax)41 }42 pub fn binary_operator(&self) -> Option<BinaryOperator> {43 support::token_child(&self.syntax)44 }45 pub fn rhs(&self) -> Option<Expr> {46 support::child(&self.syntax)47 }48}4950#[derive(Debug, Clone, PartialEq, Eq, Hash)]51pub struct LhsExpr {52 pub(crate) syntax: SyntaxNode,53}54impl LhsExpr {55 pub fn expr(&self) -> Option<Expr> {56 support::child(&self.syntax)57 }58}5960#[derive(Debug, Clone, PartialEq, Eq, Hash)]61pub struct ExprUnary {62 pub(crate) syntax: SyntaxNode,63}64impl ExprUnary {65 pub fn unary_operator(&self) -> Option<UnaryOperator> {66 support::token_child(&self.syntax)67 }68 pub fn rhs(&self) -> Option<Expr> {69 support::child(&self.syntax)70 }71}7273#[derive(Debug, Clone, PartialEq, Eq, Hash)]74pub struct ExprSlice {75 pub(crate) syntax: SyntaxNode,76}77impl ExprSlice {78 pub fn expr(&self) -> Option<Expr> {79 support::child(&self.syntax)80 }81 pub fn slice_desc(&self) -> Option<SliceDesc> {82 support::child(&self.syntax)83 }84}8586#[derive(Debug, Clone, PartialEq, Eq, Hash)]87pub struct SliceDesc {88 pub(crate) syntax: SyntaxNode,89}90impl SliceDesc {91 pub fn l_brack_token(&self) -> Option<SyntaxToken> {92 support::token(&self.syntax, T!['['])93 }94 pub fn from(&self) -> Option<Expr> {95 support::child(&self.syntax)96 }97 pub fn colon_token(&self) -> Option<SyntaxToken> {98 support::token(&self.syntax, T![:])99 }100 pub fn end(&self) -> Option<SliceDescEnd> {101 support::child(&self.syntax)102 }103 pub fn step(&self) -> Option<SliceDescStep> {104 support::child(&self.syntax)105 }106 pub fn r_brack_token(&self) -> Option<SyntaxToken> {107 support::token(&self.syntax, T![']'])108 }109}110111#[derive(Debug, Clone, PartialEq, Eq, Hash)]112pub struct ExprIndex {113 pub(crate) syntax: SyntaxNode,114}115impl ExprIndex {116 pub fn expr(&self) -> Option<Expr> {117 support::child(&self.syntax)118 }119 pub fn dot_token(&self) -> Option<SyntaxToken> {120 support::token(&self.syntax, T![.])121 }122 pub fn index(&self) -> Option<Name> {123 support::child(&self.syntax)124 }125}126127#[derive(Debug, Clone, PartialEq, Eq, Hash)]128pub struct Name {129 pub(crate) syntax: SyntaxNode,130}131impl Name {132 pub fn ident_lit(&self) -> Option<SyntaxToken> {133 support::token(&self.syntax, IDENT)134 }135}136137#[derive(Debug, Clone, PartialEq, Eq, Hash)]138pub struct ExprIndexExpr {139 pub(crate) syntax: SyntaxNode,140}141impl ExprIndexExpr {142 pub fn base(&self) -> Option<LhsExpr> {143 support::child(&self.syntax)144 }145 pub fn l_brack_token(&self) -> Option<SyntaxToken> {146 support::token(&self.syntax, T!['['])147 }148 pub fn index(&self) -> Option<Expr> {149 support::child(&self.syntax)150 }151 pub fn r_brack_token(&self) -> Option<SyntaxToken> {152 support::token(&self.syntax, T![']'])153 }154}155156#[derive(Debug, Clone, PartialEq, Eq, Hash)]157pub struct ExprApply {158 pub(crate) syntax: SyntaxNode,159}160impl ExprApply {161 pub fn expr(&self) -> Option<Expr> {162 support::child(&self.syntax)163 }164 pub fn args_desc(&self) -> Option<ArgsDesc> {165 support::child(&self.syntax)166 }167 pub fn tailstrict_kw_token(&self) -> Option<SyntaxToken> {168 support::token(&self.syntax, T![tailstrict])169 }170}171172#[derive(Debug, Clone, PartialEq, Eq, Hash)]173pub struct ArgsDesc {174 pub(crate) syntax: SyntaxNode,175}176impl ArgsDesc {177 pub fn l_paren_token(&self) -> Option<SyntaxToken> {178 support::token(&self.syntax, T!['('])179 }180 pub fn args(&self) -> AstChildren<Arg> {181 support::children(&self.syntax)182 }183 pub fn r_paren_token(&self) -> Option<SyntaxToken> {184 support::token(&self.syntax, T![')'])185 }186}187188#[derive(Debug, Clone, PartialEq, Eq, Hash)]189pub struct ExprObjExtend {190 pub(crate) syntax: SyntaxNode,191}192impl ExprObjExtend {193 pub fn lhs_expr(&self) -> Option<LhsExpr> {194 support::child(&self.syntax)195 }196 pub fn expr(&self) -> Option<Expr> {197 support::child(&self.syntax)198 }199}200201#[derive(Debug, Clone, PartialEq, Eq, Hash)]202pub struct ExprParened {203 pub(crate) syntax: SyntaxNode,204}205impl ExprParened {206 pub fn l_paren_token(&self) -> Option<SyntaxToken> {207 support::token(&self.syntax, T!['('])208 }209 pub fn expr(&self) -> Option<Expr> {210 support::child(&self.syntax)211 }212 pub fn r_paren_token(&self) -> Option<SyntaxToken> {213 support::token(&self.syntax, T![')'])214 }215}216217#[derive(Debug, Clone, PartialEq, Eq, Hash)]218pub struct ExprLiteral {219 pub(crate) syntax: SyntaxNode,220}221impl ExprLiteral {222 pub fn literal(&self) -> Option<Literal> {223 support::token_child(&self.syntax)224 }225}226227#[derive(Debug, Clone, PartialEq, Eq, Hash)]228pub struct ExprString {229 pub(crate) syntax: SyntaxNode,230}231impl ExprString {232 pub fn text(&self) -> Option<Text> {233 support::token_child(&self.syntax)234 }235}236237#[derive(Debug, Clone, PartialEq, Eq, Hash)]238pub struct ExprNumber {239 pub(crate) syntax: SyntaxNode,240}241impl ExprNumber {242 pub fn number(&self) -> Option<Number> {243 support::token_child(&self.syntax)244 }245}246247#[derive(Debug, Clone, PartialEq, Eq, Hash)]248pub struct ExprArray {249 pub(crate) syntax: SyntaxNode,250}251impl ExprArray {252 pub fn l_brack_token(&self) -> Option<SyntaxToken> {253 support::token(&self.syntax, T!['['])254 }255 pub fn exprs(&self) -> AstChildren<Expr> {256 support::children(&self.syntax)257 }258 pub fn r_brack_token(&self) -> Option<SyntaxToken> {259 support::token(&self.syntax, T![']'])260 }261}262263#[derive(Debug, Clone, PartialEq, Eq, Hash)]264pub struct ExprObject {265 pub(crate) syntax: SyntaxNode,266}267impl ExprObject {268 pub fn obj_body(&self) -> Option<ObjBody> {269 support::child(&self.syntax)270 }271}272273#[derive(Debug, Clone, PartialEq, Eq, Hash)]274pub struct ExprArrayComp {275 pub(crate) syntax: SyntaxNode,276}277impl ExprArrayComp {278 pub fn l_brack_token(&self) -> Option<SyntaxToken> {279 support::token(&self.syntax, T!['['])280 }281 pub fn expr(&self) -> Option<Expr> {282 support::child(&self.syntax)283 }284 pub fn comma_token(&self) -> Option<SyntaxToken> {285 support::token(&self.syntax, T![,])286 }287 pub fn comp_specs(&self) -> AstChildren<CompSpec> {288 support::children(&self.syntax)289 }290 pub fn r_brack_token(&self) -> Option<SyntaxToken> {291 support::token(&self.syntax, T![']'])292 }293}294295#[derive(Debug, Clone, PartialEq, Eq, Hash)]296pub struct ExprImport {297 pub(crate) syntax: SyntaxNode,298}299impl ExprImport {300 pub fn import_kind(&self) -> Option<ImportKind> {301 support::token_child(&self.syntax)302 }303 pub fn text(&self) -> Option<Text> {304 support::token_child(&self.syntax)305 }306}307308#[derive(Debug, Clone, PartialEq, Eq, Hash)]309pub struct ExprVar {310 pub(crate) syntax: SyntaxNode,311}312impl ExprVar {313 pub fn name(&self) -> Option<Name> {314 support::child(&self.syntax)315 }316}317318#[derive(Debug, Clone, PartialEq, Eq, Hash)]319pub struct ExprIfThenElse {320 pub(crate) syntax: SyntaxNode,321}322impl ExprIfThenElse {323 pub fn if_kw_token(&self) -> Option<SyntaxToken> {324 support::token(&self.syntax, T![if])325 }326 pub fn cond(&self) -> Option<Expr> {327 support::child(&self.syntax)328 }329 pub fn then_kw_token(&self) -> Option<SyntaxToken> {330 support::token(&self.syntax, T![then])331 }332 pub fn then(&self) -> Option<TrueExpr> {333 support::child(&self.syntax)334 }335 pub fn else_kw_token(&self) -> Option<SyntaxToken> {336 support::token(&self.syntax, T![else])337 }338 pub fn else_(&self) -> Option<FalseExpr> {339 support::child(&self.syntax)340 }341}342343#[derive(Debug, Clone, PartialEq, Eq, Hash)]344pub struct TrueExpr {345 pub(crate) syntax: SyntaxNode,346}347impl TrueExpr {348 pub fn expr(&self) -> Option<Expr> {349 support::child(&self.syntax)350 }351}352353#[derive(Debug, Clone, PartialEq, Eq, Hash)]354pub struct FalseExpr {355 pub(crate) syntax: SyntaxNode,356}357impl FalseExpr {358 pub fn expr(&self) -> Option<Expr> {359 support::child(&self.syntax)360 }361}362363#[derive(Debug, Clone, PartialEq, Eq, Hash)]364pub struct ExprFunction {365 pub(crate) syntax: SyntaxNode,366}367impl ExprFunction {368 pub fn function_kw_token(&self) -> Option<SyntaxToken> {369 support::token(&self.syntax, T![function])370 }371 pub fn l_paren_token(&self) -> Option<SyntaxToken> {372 support::token(&self.syntax, T!['('])373 }374 pub fn params_desc(&self) -> Option<ParamsDesc> {375 support::child(&self.syntax)376 }377 pub fn r_paren_token(&self) -> Option<SyntaxToken> {378 support::token(&self.syntax, T![')'])379 }380 pub fn expr(&self) -> Option<Expr> {381 support::child(&self.syntax)382 }383}384385#[derive(Debug, Clone, PartialEq, Eq, Hash)]386pub struct ParamsDesc {387 pub(crate) syntax: SyntaxNode,388}389impl ParamsDesc {390 pub fn l_paren_token(&self) -> Option<SyntaxToken> {391 support::token(&self.syntax, T!['('])392 }393 pub fn params(&self) -> AstChildren<Param> {394 support::children(&self.syntax)395 }396 pub fn r_paren_token(&self) -> Option<SyntaxToken> {397 support::token(&self.syntax, T![')'])398 }399}400401#[derive(Debug, Clone, PartialEq, Eq, Hash)]402pub struct ExprAssert {403 pub(crate) syntax: SyntaxNode,404}405impl ExprAssert {406 pub fn assertion(&self) -> Option<Assertion> {407 support::child(&self.syntax)408 }409 pub fn semi_token(&self) -> Option<SyntaxToken> {410 support::token(&self.syntax, T![;])411 }412 pub fn expr(&self) -> Option<Expr> {413 support::child(&self.syntax)414 }415}416417#[derive(Debug, Clone, PartialEq, Eq, Hash)]418pub struct Assertion {419 pub(crate) syntax: SyntaxNode,420}421impl Assertion {422 pub fn assert_kw_token(&self) -> Option<SyntaxToken> {423 support::token(&self.syntax, T![assert])424 }425 pub fn condition(&self) -> Option<LhsExpr> {426 support::child(&self.syntax)427 }428 pub fn colon_token(&self) -> Option<SyntaxToken> {429 support::token(&self.syntax, T![:])430 }431 pub fn message(&self) -> Option<Expr> {432 support::child(&self.syntax)433 }434}435436#[derive(Debug, Clone, PartialEq, Eq, Hash)]437pub struct ExprError {438 pub(crate) syntax: SyntaxNode,439}440impl ExprError {441 pub fn error_kw_token(&self) -> Option<SyntaxToken> {442 support::token(&self.syntax, T![error])443 }444 pub fn expr(&self) -> Option<Expr> {445 support::child(&self.syntax)446 }447}448449#[derive(Debug, Clone, PartialEq, Eq, Hash)]450pub struct StmtLocal {451 pub(crate) syntax: SyntaxNode,452}453impl StmtLocal {454 pub fn local_kw_token(&self) -> Option<SyntaxToken> {455 support::token(&self.syntax, T![local])456 }457 pub fn binds(&self) -> AstChildren<Bind> {458 support::children(&self.syntax)459 }460 pub fn semi_token(&self) -> Option<SyntaxToken> {461 support::token(&self.syntax, T![;])462 }463}464465#[derive(Debug, Clone, PartialEq, Eq, Hash)]466pub struct SliceDescEnd {467 pub(crate) syntax: SyntaxNode,468}469impl SliceDescEnd {470 pub fn expr(&self) -> Option<Expr> {471 support::child(&self.syntax)472 }473}474475#[derive(Debug, Clone, PartialEq, Eq, Hash)]476pub struct SliceDescStep {477 pub(crate) syntax: SyntaxNode,478}479impl SliceDescStep {480 pub fn expr(&self) -> Option<Expr> {481 support::child(&self.syntax)482 }483}484485#[derive(Debug, Clone, PartialEq, Eq, Hash)]486pub struct Arg {487 pub(crate) syntax: SyntaxNode,488}489impl Arg {490 pub fn name(&self) -> Option<Name> {491 support::child(&self.syntax)492 }493 pub fn assign_token(&self) -> Option<SyntaxToken> {494 support::token(&self.syntax, T![=])495 }496 pub fn expr(&self) -> Option<Expr> {497 support::child(&self.syntax)498 }499}500501#[derive(Debug, Clone, PartialEq, Eq, Hash)]502pub struct ObjBodyComp {503 pub(crate) syntax: SyntaxNode,504}505impl ObjBodyComp {506 pub fn l_brace_token(&self) -> Option<SyntaxToken> {507 support::token(&self.syntax, T!['{'])508 }509 pub fn member_comps(&self) -> AstChildren<MemberComp> {510 support::children(&self.syntax)511 }512 pub fn comp_specs(&self) -> AstChildren<CompSpec> {513 support::children(&self.syntax)514 }515 pub fn r_brace_token(&self) -> Option<SyntaxToken> {516 support::token(&self.syntax, T!['}'])517 }518}519520#[derive(Debug, Clone, PartialEq, Eq, Hash)]521pub struct ObjBodyMemberList {522 pub(crate) syntax: SyntaxNode,523}524impl ObjBodyMemberList {525 pub fn l_brace_token(&self) -> Option<SyntaxToken> {526 support::token(&self.syntax, T!['{'])527 }528 pub fn members(&self) -> AstChildren<Member> {529 support::children(&self.syntax)530 }531 pub fn r_brace_token(&self) -> Option<SyntaxToken> {532 support::token(&self.syntax, T!['}'])533 }534}535536#[derive(Debug, Clone, PartialEq, Eq, Hash)]537pub struct MemberBindStmt {538 pub(crate) syntax: SyntaxNode,539}540impl MemberBindStmt {541 pub fn obj_local(&self) -> Option<ObjLocal> {542 support::child(&self.syntax)543 }544}545546#[derive(Debug, Clone, PartialEq, Eq, Hash)]547pub struct ObjLocal {548 pub(crate) syntax: SyntaxNode,549}550impl ObjLocal {551 pub fn local_kw_token(&self) -> Option<SyntaxToken> {552 support::token(&self.syntax, T![local])553 }554 pub fn bind(&self) -> Option<Bind> {555 support::child(&self.syntax)556 }557}558559#[derive(Debug, Clone, PartialEq, Eq, Hash)]560pub struct MemberAssertStmt {561 pub(crate) syntax: SyntaxNode,562}563impl MemberAssertStmt {564 pub fn assertion(&self) -> Option<Assertion> {565 support::child(&self.syntax)566 }567}568569#[derive(Debug, Clone, PartialEq, Eq, Hash)]570pub struct MemberFieldNormal {571 pub(crate) syntax: SyntaxNode,572}573impl MemberFieldNormal {574 pub fn field_name(&self) -> Option<FieldName> {575 support::child(&self.syntax)576 }577 pub fn plus_token(&self) -> Option<SyntaxToken> {578 support::token(&self.syntax, T![+])579 }580 pub fn visibility(&self) -> Option<Visibility> {581 support::token_child(&self.syntax)582 }583 pub fn expr(&self) -> Option<Expr> {584 support::child(&self.syntax)585 }586}587588#[derive(Debug, Clone, PartialEq, Eq, Hash)]589pub struct MemberFieldMethod {590 pub(crate) syntax: SyntaxNode,591}592impl MemberFieldMethod {593 pub fn field_name(&self) -> Option<FieldName> {594 support::child(&self.syntax)595 }596 pub fn params_desc(&self) -> Option<ParamsDesc> {597 support::child(&self.syntax)598 }599 pub fn visibility(&self) -> Option<Visibility> {600 support::token_child(&self.syntax)601 }602 pub fn expr(&self) -> Option<Expr> {603 support::child(&self.syntax)604 }605}606607#[derive(Debug, Clone, PartialEq, Eq, Hash)]608pub struct FieldNameFixed {609 pub(crate) syntax: SyntaxNode,610}611impl FieldNameFixed {612 pub fn id(&self) -> Option<Name> {613 support::child(&self.syntax)614 }615 pub fn text(&self) -> Option<Text> {616 support::token_child(&self.syntax)617 }618}619620#[derive(Debug, Clone, PartialEq, Eq, Hash)]621pub struct FieldNameDynamic {622 pub(crate) syntax: SyntaxNode,623}624impl FieldNameDynamic {625 pub fn l_brack_token(&self) -> Option<SyntaxToken> {626 support::token(&self.syntax, T!['['])627 }628 pub fn expr(&self) -> Option<Expr> {629 support::child(&self.syntax)630 }631 pub fn r_brack_token(&self) -> Option<SyntaxToken> {632 support::token(&self.syntax, T![']'])633 }634}635636#[derive(Debug, Clone, PartialEq, Eq, Hash)]637pub struct ForSpec {638 pub(crate) syntax: SyntaxNode,639}640impl ForSpec {641 pub fn for_kw_token(&self) -> Option<SyntaxToken> {642 support::token(&self.syntax, T![for])643 }644 pub fn bind(&self) -> Option<Name> {645 support::child(&self.syntax)646 }647 pub fn in_kw_token(&self) -> Option<SyntaxToken> {648 support::token(&self.syntax, T![in])649 }650 pub fn expr(&self) -> Option<Expr> {651 support::child(&self.syntax)652 }653}654655#[derive(Debug, Clone, PartialEq, Eq, Hash)]656pub struct IfSpec {657 pub(crate) syntax: SyntaxNode,658}659impl IfSpec {660 pub fn if_kw_token(&self) -> Option<SyntaxToken> {661 support::token(&self.syntax, T![if])662 }663 pub fn expr(&self) -> Option<Expr> {664 support::child(&self.syntax)665 }666}667668#[derive(Debug, Clone, PartialEq, Eq, Hash)]669pub struct BindDestruct {670 pub(crate) syntax: SyntaxNode,671}672impl BindDestruct {673 pub fn into(&self) -> Option<Destruct> {674 support::child(&self.syntax)675 }676 pub fn assign_token(&self) -> Option<SyntaxToken> {677 support::token(&self.syntax, T![=])678 }679 pub fn value(&self) -> Option<Expr> {680 support::child(&self.syntax)681 }682}683684#[derive(Debug, Clone, PartialEq, Eq, Hash)]685pub struct BindFunction {686 pub(crate) syntax: SyntaxNode,687}688impl BindFunction {689 pub fn name(&self) -> Option<Name> {690 support::child(&self.syntax)691 }692 pub fn params(&self) -> Option<ParamsDesc> {693 support::child(&self.syntax)694 }695 pub fn assign_token(&self) -> Option<SyntaxToken> {696 support::token(&self.syntax, T![=])697 }698 pub fn value(&self) -> Option<Expr> {699 support::child(&self.syntax)700 }701}702703#[derive(Debug, Clone, PartialEq, Eq, Hash)]704pub struct Param {705 pub(crate) syntax: SyntaxNode,706}707impl Param {708 pub fn destruct(&self) -> Option<Destruct> {709 support::child(&self.syntax)710 }711 pub fn assign_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}718719#[derive(Debug, Clone, PartialEq, Eq, Hash)]720pub struct DestructFull {721 pub(crate) syntax: SyntaxNode,722}723impl DestructFull {724 pub fn name(&self) -> Option<Name> {725 support::child(&self.syntax)726 }727}728729#[derive(Debug, Clone, PartialEq, Eq, Hash)]730pub struct DestructSkip {731 pub(crate) syntax: SyntaxNode,732}733impl DestructSkip {734 pub fn question_mark_token(&self) -> Option<SyntaxToken> {735 support::token(&self.syntax, T![?])736 }737}738739#[derive(Debug, Clone, PartialEq, Eq, Hash)]740pub struct DestructArray {741 pub(crate) syntax: SyntaxNode,742}743impl DestructArray {744 pub fn l_brack_token(&self) -> Option<SyntaxToken> {745 support::token(&self.syntax, T!['['])746 }747 pub fn destruct_array_parts(&self) -> AstChildren<DestructArrayPart> {748 support::children(&self.syntax)749 }750 pub fn r_brack_token(&self) -> Option<SyntaxToken> {751 support::token(&self.syntax, T![']'])752 }753}754755#[derive(Debug, Clone, PartialEq, Eq, Hash)]756pub struct DestructObject {757 pub(crate) syntax: SyntaxNode,758}759impl DestructObject {760 pub fn l_brace_token(&self) -> Option<SyntaxToken> {761 support::token(&self.syntax, T!['{'])762 }763 pub fn destruct_object_fields(&self) -> AstChildren<DestructObjectField> {764 support::children(&self.syntax)765 }766 pub fn destruct_rest(&self) -> Option<DestructRest> {767 support::child(&self.syntax)768 }769 pub fn comma_token(&self) -> Option<SyntaxToken> {770 support::token(&self.syntax, T![,])771 }772 pub fn r_brace_token(&self) -> Option<SyntaxToken> {773 support::token(&self.syntax, T!['}'])774 }775}776777#[derive(Debug, Clone, PartialEq, Eq, Hash)]778pub struct DestructObjectField {779 pub(crate) syntax: SyntaxNode,780}781impl DestructObjectField {782 pub fn field(&self) -> Option<Name> {783 support::child(&self.syntax)784 }785 pub fn colon_token(&self) -> Option<SyntaxToken> {786 support::token(&self.syntax, T![:])787 }788 pub fn destruct(&self) -> Option<Destruct> {789 support::child(&self.syntax)790 }791 pub fn assign_token(&self) -> Option<SyntaxToken> {792 support::token(&self.syntax, T![=])793 }794 pub fn expr(&self) -> Option<Expr> {795 support::child(&self.syntax)796 }797}798799#[derive(Debug, Clone, PartialEq, Eq, Hash)]800pub struct DestructRest {801 pub(crate) syntax: SyntaxNode,802}803impl DestructRest {804 pub fn dotdotdot_token(&self) -> Option<SyntaxToken> {805 support::token(&self.syntax, T![...])806 }807 pub fn into(&self) -> Option<Name> {808 support::child(&self.syntax)809 }810}811812#[derive(Debug, Clone, PartialEq, Eq, Hash)]813pub struct DestructArrayElement {814 pub(crate) syntax: SyntaxNode,815}816impl DestructArrayElement {817 pub fn destruct(&self) -> Option<Destruct> {818 support::child(&self.syntax)819 }820}821822#[derive(Debug, Clone, PartialEq, Eq, Hash)]823pub enum ObjBody {824 ObjBodyComp(ObjBodyComp),825 ObjBodyMemberList(ObjBodyMemberList),826}827828#[derive(Debug, Clone, PartialEq, Eq, Hash)]829pub enum CompSpec {830 ForSpec(ForSpec),831 IfSpec(IfSpec),832}833834#[derive(Debug, Clone, PartialEq, Eq, Hash)]835pub enum Bind {836 BindDestruct(BindDestruct),837 BindFunction(BindFunction),838}839840#[derive(Debug, Clone, PartialEq, Eq, Hash)]841pub enum ExprBase {842 ExprBinary(ExprBinary),843 ExprUnary(ExprUnary),844 ExprSlice(ExprSlice),845 ExprIndex(ExprIndex),846 ExprIndexExpr(ExprIndexExpr),847 ExprApply(ExprApply),848 ExprObjExtend(ExprObjExtend),849 ExprParened(ExprParened),850 ExprString(ExprString),851 ExprNumber(ExprNumber),852 ExprLiteral(ExprLiteral),853 ExprArray(ExprArray),854 ExprObject(ExprObject),855 ExprArrayComp(ExprArrayComp),856 ExprImport(ExprImport),857 ExprVar(ExprVar),858 ExprIfThenElse(ExprIfThenElse),859 ExprFunction(ExprFunction),860 ExprAssert(ExprAssert),861 ExprError(ExprError),862}863864#[derive(Debug, Clone, PartialEq, Eq, Hash)]865pub enum MemberComp {866 MemberBindStmt(MemberBindStmt),867 MemberFieldNormal(MemberFieldNormal),868 MemberFieldMethod(MemberFieldMethod),869}870871#[derive(Debug, Clone, PartialEq, Eq, Hash)]872pub enum Member {873 MemberBindStmt(MemberBindStmt),874 MemberAssertStmt(MemberAssertStmt),875 MemberFieldNormal(MemberFieldNormal),876 MemberFieldMethod(MemberFieldMethod),877}878879#[derive(Debug, Clone, PartialEq, Eq, Hash)]880pub enum FieldName {881 FieldNameFixed(FieldNameFixed),882 FieldNameDynamic(FieldNameDynamic),883}884885#[derive(Debug, Clone, PartialEq, Eq, Hash)]886pub enum Destruct {887 DestructFull(DestructFull),888 DestructSkip(DestructSkip),889 DestructArray(DestructArray),890 DestructObject(DestructObject),891}892893#[derive(Debug, Clone, PartialEq, Eq, Hash)]894pub enum DestructArrayPart {895 DestructArrayElement(DestructArrayElement),896 DestructRest(DestructRest),897}898899#[derive(Debug, Clone, PartialEq, Eq, Hash)]900pub struct BinaryOperator {901 syntax: SyntaxToken,902 kind: BinaryOperatorKind,903}904905#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]906pub enum BinaryOperatorKind {907 Or,908 And,909 BitOr,910 BitXor,911 BitAnd,912 Eq,913 Ne,914 Lt,915 Gt,916 Le,917 Ge,918 InKw,919 Lhs,920 Rhs,921 Plus,922 Minus,923 Mul,924 Div,925 Modulo,926 MetaObjectApply,927 ErrorNoOperator,928}929930#[derive(Debug, Clone, PartialEq, Eq, Hash)]931pub struct UnaryOperator {932 syntax: SyntaxToken,933 kind: UnaryOperatorKind,934}935936#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]937pub enum UnaryOperatorKind {938 Minus,939 Not,940 BitNot,941}942943#[derive(Debug, Clone, PartialEq, Eq, Hash)]944pub struct Literal {945 syntax: SyntaxToken,946 kind: LiteralKind,947}948949#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]950pub enum LiteralKind {951 NullKw,952 TrueKw,953 FalseKw,954 SelfKw,955 Dollar,956 SuperKw,957}958959#[derive(Debug, Clone, PartialEq, Eq, Hash)]960pub struct Text {961 syntax: SyntaxToken,962 kind: TextKind,963}964965#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]966pub enum TextKind {967 StringDouble,968 ErrorStringDoubleUnterminated,969 StringSingle,970 ErrorStringSingleUnterminated,971 StringDoubleVerbatim,972 ErrorStringDoubleVerbatimUnterminated,973 StringSingleVerbatim,974 ErrorStringSingleVerbatimUnterminated,975 ErrorStringVerbatimMissingQuotes,976 StringBlock,977 ErrorStringBlockUnexpectedEnd,978 ErrorStringBlockMissingNewLine,979 ErrorStringBlockMissingTermination,980 ErrorStringBlockMissingIndent,981}982983#[derive(Debug, Clone, PartialEq, Eq, Hash)]984pub struct Number {985 syntax: SyntaxToken,986 kind: NumberKind,987}988989#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]990pub enum NumberKind {991 Float,992 ErrorFloatJunkAfterPoint,993 ErrorFloatJunkAfterExponent,994 ErrorFloatJunkAfterExponentSign,995}996997#[derive(Debug, Clone, PartialEq, Eq, Hash)]998pub struct ImportKind {999 syntax: SyntaxToken,1000 kind: ImportKindKind,1001}10021003#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1004pub enum ImportKindKind {1005 ImportstrKw,1006 ImportbinKw,1007 ImportKw,1008}10091010#[derive(Debug, Clone, PartialEq, Eq, Hash)]1011pub struct Visibility {1012 syntax: SyntaxToken,1013 kind: VisibilityKind,1014}10151016#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1017pub enum VisibilityKind {1018 Coloncoloncolon,1019 Coloncolon,1020 Colon,1021}10221023#[derive(Debug, Clone, PartialEq, Eq, Hash)]1024pub struct Trivia {1025 syntax: SyntaxToken,1026 kind: TriviaKind,1027}10281029#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1030pub enum TriviaKind {1031 Whitespace,1032 MultiLineComment,1033 ErrorCommentTooShort,1034 ErrorCommentUnterminated,1035 SingleLineHashComment,1036 SingleLineSlashComment,1037}10381039#[derive(Debug, Clone, PartialEq, Eq, Hash)]1040pub struct CustomError {1041 syntax: SyntaxToken,1042 kind: CustomErrorKind,1043}10441045#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1046pub enum CustomErrorKind {1047 ErrorMissingToken,1048 ErrorUnexpectedToken,1049 ErrorCustom,1050}1051impl AstNode for SourceFile {1052 fn can_cast(kind: SyntaxKind) -> bool {1053 kind == SOURCE_FILE1054 }1055 fn cast(syntax: SyntaxNode) -> Option<Self> {1056 if Self::can_cast(syntax.kind()) {1057 Some(Self { syntax })1058 } else {1059 None1060 }1061 }1062 fn syntax(&self) -> &SyntaxNode {1063 &self.syntax1064 }1065}1066impl AstNode for Expr {1067 fn can_cast(kind: SyntaxKind) -> bool {1068 kind == EXPR1069 }1070 fn cast(syntax: SyntaxNode) -> Option<Self> {1071 if Self::can_cast(syntax.kind()) {1072 Some(Self { syntax })1073 } else {1074 None1075 }1076 }1077 fn syntax(&self) -> &SyntaxNode {1078 &self.syntax1079 }1080}1081impl AstNode for ExprBinary {1082 fn can_cast(kind: SyntaxKind) -> bool {1083 kind == EXPR_BINARY1084 }1085 fn cast(syntax: SyntaxNode) -> Option<Self> {1086 if Self::can_cast(syntax.kind()) {1087 Some(Self { syntax })1088 } else {1089 None1090 }1091 }1092 fn syntax(&self) -> &SyntaxNode {1093 &self.syntax1094 }1095}1096impl AstNode for LhsExpr {1097 fn can_cast(kind: SyntaxKind) -> bool {1098 kind == LHS_EXPR1099 }1100 fn cast(syntax: SyntaxNode) -> Option<Self> {1101 if Self::can_cast(syntax.kind()) {1102 Some(Self { syntax })1103 } else {1104 None1105 }1106 }1107 fn syntax(&self) -> &SyntaxNode {1108 &self.syntax1109 }1110}1111impl AstNode for ExprUnary {1112 fn can_cast(kind: SyntaxKind) -> bool {1113 kind == EXPR_UNARY1114 }1115 fn cast(syntax: SyntaxNode) -> Option<Self> {1116 if Self::can_cast(syntax.kind()) {1117 Some(Self { syntax })1118 } else {1119 None1120 }1121 }1122 fn syntax(&self) -> &SyntaxNode {1123 &self.syntax1124 }1125}1126impl AstNode for ExprSlice {1127 fn can_cast(kind: SyntaxKind) -> bool {1128 kind == EXPR_SLICE1129 }1130 fn cast(syntax: SyntaxNode) -> Option<Self> {1131 if Self::can_cast(syntax.kind()) {1132 Some(Self { syntax })1133 } else {1134 None1135 }1136 }1137 fn syntax(&self) -> &SyntaxNode {1138 &self.syntax1139 }1140}1141impl AstNode for SliceDesc {1142 fn can_cast(kind: SyntaxKind) -> bool {1143 kind == SLICE_DESC1144 }1145 fn cast(syntax: SyntaxNode) -> Option<Self> {1146 if Self::can_cast(syntax.kind()) {1147 Some(Self { syntax })1148 } else {1149 None1150 }1151 }1152 fn syntax(&self) -> &SyntaxNode {1153 &self.syntax1154 }1155}1156impl AstNode for ExprIndex {1157 fn can_cast(kind: SyntaxKind) -> bool {1158 kind == EXPR_INDEX1159 }1160 fn cast(syntax: SyntaxNode) -> Option<Self> {1161 if Self::can_cast(syntax.kind()) {1162 Some(Self { syntax })1163 } else {1164 None1165 }1166 }1167 fn syntax(&self) -> &SyntaxNode {1168 &self.syntax1169 }1170}1171impl AstNode for Name {1172 fn can_cast(kind: SyntaxKind) -> bool {1173 kind == NAME1174 }1175 fn cast(syntax: SyntaxNode) -> Option<Self> {1176 if Self::can_cast(syntax.kind()) {1177 Some(Self { syntax })1178 } else {1179 None1180 }1181 }1182 fn syntax(&self) -> &SyntaxNode {1183 &self.syntax1184 }1185}1186impl AstNode for ExprIndexExpr {1187 fn can_cast(kind: SyntaxKind) -> bool {1188 kind == EXPR_INDEX_EXPR1189 }1190 fn cast(syntax: SyntaxNode) -> Option<Self> {1191 if Self::can_cast(syntax.kind()) {1192 Some(Self { syntax })1193 } else {1194 None1195 }1196 }1197 fn syntax(&self) -> &SyntaxNode {1198 &self.syntax1199 }1200}1201impl AstNode for ExprApply {1202 fn can_cast(kind: SyntaxKind) -> bool {1203 kind == EXPR_APPLY1204 }1205 fn cast(syntax: SyntaxNode) -> Option<Self> {1206 if Self::can_cast(syntax.kind()) {1207 Some(Self { syntax })1208 } else {1209 None1210 }1211 }1212 fn syntax(&self) -> &SyntaxNode {1213 &self.syntax1214 }1215}1216impl AstNode for ArgsDesc {1217 fn can_cast(kind: SyntaxKind) -> bool {1218 kind == ARGS_DESC1219 }1220 fn cast(syntax: SyntaxNode) -> Option<Self> {1221 if Self::can_cast(syntax.kind()) {1222 Some(Self { syntax })1223 } else {1224 None1225 }1226 }1227 fn syntax(&self) -> &SyntaxNode {1228 &self.syntax1229 }1230}1231impl AstNode for ExprObjExtend {1232 fn can_cast(kind: SyntaxKind) -> bool {1233 kind == EXPR_OBJ_EXTEND1234 }1235 fn cast(syntax: SyntaxNode) -> Option<Self> {1236 if Self::can_cast(syntax.kind()) {1237 Some(Self { syntax })1238 } else {1239 None1240 }1241 }1242 fn syntax(&self) -> &SyntaxNode {1243 &self.syntax1244 }1245}1246impl AstNode for ExprParened {1247 fn can_cast(kind: SyntaxKind) -> bool {1248 kind == EXPR_PARENED1249 }1250 fn cast(syntax: SyntaxNode) -> Option<Self> {1251 if Self::can_cast(syntax.kind()) {1252 Some(Self { syntax })1253 } else {1254 None1255 }1256 }1257 fn syntax(&self) -> &SyntaxNode {1258 &self.syntax1259 }1260}1261impl AstNode for ExprLiteral {1262 fn can_cast(kind: SyntaxKind) -> bool {1263 kind == EXPR_LITERAL1264 }1265 fn cast(syntax: SyntaxNode) -> Option<Self> {1266 if Self::can_cast(syntax.kind()) {1267 Some(Self { syntax })1268 } else {1269 None1270 }1271 }1272 fn syntax(&self) -> &SyntaxNode {1273 &self.syntax1274 }1275}1276impl AstNode for ExprString {1277 fn can_cast(kind: SyntaxKind) -> bool {1278 kind == EXPR_STRING1279 }1280 fn cast(syntax: SyntaxNode) -> Option<Self> {1281 if Self::can_cast(syntax.kind()) {1282 Some(Self { syntax })1283 } else {1284 None1285 }1286 }1287 fn syntax(&self) -> &SyntaxNode {1288 &self.syntax1289 }1290}1291impl AstNode for ExprNumber {1292 fn can_cast(kind: SyntaxKind) -> bool {1293 kind == EXPR_NUMBER1294 }1295 fn cast(syntax: SyntaxNode) -> Option<Self> {1296 if Self::can_cast(syntax.kind()) {1297 Some(Self { syntax })1298 } else {1299 None1300 }1301 }1302 fn syntax(&self) -> &SyntaxNode {1303 &self.syntax1304 }1305}1306impl AstNode for ExprArray {1307 fn can_cast(kind: SyntaxKind) -> bool {1308 kind == EXPR_ARRAY1309 }1310 fn cast(syntax: SyntaxNode) -> Option<Self> {1311 if Self::can_cast(syntax.kind()) {1312 Some(Self { syntax })1313 } else {1314 None1315 }1316 }1317 fn syntax(&self) -> &SyntaxNode {1318 &self.syntax1319 }1320}1321impl AstNode for ExprObject {1322 fn can_cast(kind: SyntaxKind) -> bool {1323 kind == EXPR_OBJECT1324 }1325 fn cast(syntax: SyntaxNode) -> Option<Self> {1326 if Self::can_cast(syntax.kind()) {1327 Some(Self { syntax })1328 } else {1329 None1330 }1331 }1332 fn syntax(&self) -> &SyntaxNode {1333 &self.syntax1334 }1335}1336impl AstNode for ExprArrayComp {1337 fn can_cast(kind: SyntaxKind) -> bool {1338 kind == EXPR_ARRAY_COMP1339 }1340 fn cast(syntax: SyntaxNode) -> Option<Self> {1341 if Self::can_cast(syntax.kind()) {1342 Some(Self { syntax })1343 } else {1344 None1345 }1346 }1347 fn syntax(&self) -> &SyntaxNode {1348 &self.syntax1349 }1350}1351impl AstNode for ExprImport {1352 fn can_cast(kind: SyntaxKind) -> bool {1353 kind == EXPR_IMPORT1354 }1355 fn cast(syntax: SyntaxNode) -> Option<Self> {1356 if Self::can_cast(syntax.kind()) {1357 Some(Self { syntax })1358 } else {1359 None1360 }1361 }1362 fn syntax(&self) -> &SyntaxNode {1363 &self.syntax1364 }1365}1366impl AstNode for ExprVar {1367 fn can_cast(kind: SyntaxKind) -> bool {1368 kind == EXPR_VAR1369 }1370 fn cast(syntax: SyntaxNode) -> Option<Self> {1371 if Self::can_cast(syntax.kind()) {1372 Some(Self { syntax })1373 } else {1374 None1375 }1376 }1377 fn syntax(&self) -> &SyntaxNode {1378 &self.syntax1379 }1380}1381impl AstNode for ExprIfThenElse {1382 fn can_cast(kind: SyntaxKind) -> bool {1383 kind == EXPR_IF_THEN_ELSE1384 }1385 fn cast(syntax: SyntaxNode) -> Option<Self> {1386 if Self::can_cast(syntax.kind()) {1387 Some(Self { syntax })1388 } else {1389 None1390 }1391 }1392 fn syntax(&self) -> &SyntaxNode {1393 &self.syntax1394 }1395}1396impl AstNode for TrueExpr {1397 fn can_cast(kind: SyntaxKind) -> bool {1398 kind == TRUE_EXPR1399 }1400 fn cast(syntax: SyntaxNode) -> Option<Self> {1401 if Self::can_cast(syntax.kind()) {1402 Some(Self { syntax })1403 } else {1404 None1405 }1406 }1407 fn syntax(&self) -> &SyntaxNode {1408 &self.syntax1409 }1410}1411impl AstNode for FalseExpr {1412 fn can_cast(kind: SyntaxKind) -> bool {1413 kind == FALSE_EXPR1414 }1415 fn cast(syntax: SyntaxNode) -> Option<Self> {1416 if Self::can_cast(syntax.kind()) {1417 Some(Self { syntax })1418 } else {1419 None1420 }1421 }1422 fn syntax(&self) -> &SyntaxNode {1423 &self.syntax1424 }1425}1426impl AstNode for ExprFunction {1427 fn can_cast(kind: SyntaxKind) -> bool {1428 kind == EXPR_FUNCTION1429 }1430 fn cast(syntax: SyntaxNode) -> Option<Self> {1431 if Self::can_cast(syntax.kind()) {1432 Some(Self { syntax })1433 } else {1434 None1435 }1436 }1437 fn syntax(&self) -> &SyntaxNode {1438 &self.syntax1439 }1440}1441impl AstNode for ParamsDesc {1442 fn can_cast(kind: SyntaxKind) -> bool {1443 kind == PARAMS_DESC1444 }1445 fn cast(syntax: SyntaxNode) -> Option<Self> {1446 if Self::can_cast(syntax.kind()) {1447 Some(Self { syntax })1448 } else {1449 None1450 }1451 }1452 fn syntax(&self) -> &SyntaxNode {1453 &self.syntax1454 }1455}1456impl AstNode for ExprAssert {1457 fn can_cast(kind: SyntaxKind) -> bool {1458 kind == EXPR_ASSERT1459 }1460 fn cast(syntax: SyntaxNode) -> Option<Self> {1461 if Self::can_cast(syntax.kind()) {1462 Some(Self { syntax })1463 } else {1464 None1465 }1466 }1467 fn syntax(&self) -> &SyntaxNode {1468 &self.syntax1469 }1470}1471impl AstNode for Assertion {1472 fn can_cast(kind: SyntaxKind) -> bool {1473 kind == ASSERTION1474 }1475 fn cast(syntax: SyntaxNode) -> Option<Self> {1476 if Self::can_cast(syntax.kind()) {1477 Some(Self { syntax })1478 } else {1479 None1480 }1481 }1482 fn syntax(&self) -> &SyntaxNode {1483 &self.syntax1484 }1485}1486impl AstNode for ExprError {1487 fn can_cast(kind: SyntaxKind) -> bool {1488 kind == EXPR_ERROR1489 }1490 fn cast(syntax: SyntaxNode) -> Option<Self> {1491 if Self::can_cast(syntax.kind()) {1492 Some(Self { syntax })1493 } else {1494 None1495 }1496 }1497 fn syntax(&self) -> &SyntaxNode {1498 &self.syntax1499 }1500}1501impl AstNode for StmtLocal {1502 fn can_cast(kind: SyntaxKind) -> bool {1503 kind == STMT_LOCAL1504 }1505 fn cast(syntax: SyntaxNode) -> Option<Self> {1506 if Self::can_cast(syntax.kind()) {1507 Some(Self { syntax })1508 } else {1509 None1510 }1511 }1512 fn syntax(&self) -> &SyntaxNode {1513 &self.syntax1514 }1515}1516impl AstNode for SliceDescEnd {1517 fn can_cast(kind: SyntaxKind) -> bool {1518 kind == SLICE_DESC_END1519 }1520 fn cast(syntax: SyntaxNode) -> Option<Self> {1521 if Self::can_cast(syntax.kind()) {1522 Some(Self { syntax })1523 } else {1524 None1525 }1526 }1527 fn syntax(&self) -> &SyntaxNode {1528 &self.syntax1529 }1530}1531impl AstNode for SliceDescStep {1532 fn can_cast(kind: SyntaxKind) -> bool {1533 kind == SLICE_DESC_STEP1534 }1535 fn cast(syntax: SyntaxNode) -> Option<Self> {1536 if Self::can_cast(syntax.kind()) {1537 Some(Self { syntax })1538 } else {1539 None1540 }1541 }1542 fn syntax(&self) -> &SyntaxNode {1543 &self.syntax1544 }1545}1546impl AstNode for Arg {1547 fn can_cast(kind: SyntaxKind) -> bool {1548 kind == ARG1549 }1550 fn cast(syntax: SyntaxNode) -> Option<Self> {1551 if Self::can_cast(syntax.kind()) {1552 Some(Self { syntax })1553 } else {1554 None1555 }1556 }1557 fn syntax(&self) -> &SyntaxNode {1558 &self.syntax1559 }1560}1561impl AstNode for ObjBodyComp {1562 fn can_cast(kind: SyntaxKind) -> bool {1563 kind == OBJ_BODY_COMP1564 }1565 fn cast(syntax: SyntaxNode) -> Option<Self> {1566 if Self::can_cast(syntax.kind()) {1567 Some(Self { syntax })1568 } else {1569 None1570 }1571 }1572 fn syntax(&self) -> &SyntaxNode {1573 &self.syntax1574 }1575}1576impl AstNode for ObjBodyMemberList {1577 fn can_cast(kind: SyntaxKind) -> bool {1578 kind == OBJ_BODY_MEMBER_LIST1579 }1580 fn cast(syntax: SyntaxNode) -> Option<Self> {1581 if Self::can_cast(syntax.kind()) {1582 Some(Self { syntax })1583 } else {1584 None1585 }1586 }1587 fn syntax(&self) -> &SyntaxNode {1588 &self.syntax1589 }1590}1591impl AstNode for MemberBindStmt {1592 fn can_cast(kind: SyntaxKind) -> bool {1593 kind == MEMBER_BIND_STMT1594 }1595 fn cast(syntax: SyntaxNode) -> Option<Self> {1596 if Self::can_cast(syntax.kind()) {1597 Some(Self { syntax })1598 } else {1599 None1600 }1601 }1602 fn syntax(&self) -> &SyntaxNode {1603 &self.syntax1604 }1605}1606impl AstNode for ObjLocal {1607 fn can_cast(kind: SyntaxKind) -> bool {1608 kind == OBJ_LOCAL1609 }1610 fn cast(syntax: SyntaxNode) -> Option<Self> {1611 if Self::can_cast(syntax.kind()) {1612 Some(Self { syntax })1613 } else {1614 None1615 }1616 }1617 fn syntax(&self) -> &SyntaxNode {1618 &self.syntax1619 }1620}1621impl AstNode for MemberAssertStmt {1622 fn can_cast(kind: SyntaxKind) -> bool {1623 kind == MEMBER_ASSERT_STMT1624 }1625 fn cast(syntax: SyntaxNode) -> Option<Self> {1626 if Self::can_cast(syntax.kind()) {1627 Some(Self { syntax })1628 } else {1629 None1630 }1631 }1632 fn syntax(&self) -> &SyntaxNode {1633 &self.syntax1634 }1635}1636impl AstNode for MemberFieldNormal {1637 fn can_cast(kind: SyntaxKind) -> bool {1638 kind == MEMBER_FIELD_NORMAL1639 }1640 fn cast(syntax: SyntaxNode) -> Option<Self> {1641 if Self::can_cast(syntax.kind()) {1642 Some(Self { syntax })1643 } else {1644 None1645 }1646 }1647 fn syntax(&self) -> &SyntaxNode {1648 &self.syntax1649 }1650}1651impl AstNode for MemberFieldMethod {1652 fn can_cast(kind: SyntaxKind) -> bool {1653 kind == MEMBER_FIELD_METHOD1654 }1655 fn cast(syntax: SyntaxNode) -> Option<Self> {1656 if Self::can_cast(syntax.kind()) {1657 Some(Self { syntax })1658 } else {1659 None1660 }1661 }1662 fn syntax(&self) -> &SyntaxNode {1663 &self.syntax1664 }1665}1666impl AstNode for FieldNameFixed {1667 fn can_cast(kind: SyntaxKind) -> bool {1668 kind == FIELD_NAME_FIXED1669 }1670 fn cast(syntax: SyntaxNode) -> Option<Self> {1671 if Self::can_cast(syntax.kind()) {1672 Some(Self { syntax })1673 } else {1674 None1675 }1676 }1677 fn syntax(&self) -> &SyntaxNode {1678 &self.syntax1679 }1680}1681impl AstNode for FieldNameDynamic {1682 fn can_cast(kind: SyntaxKind) -> bool {1683 kind == FIELD_NAME_DYNAMIC1684 }1685 fn cast(syntax: SyntaxNode) -> Option<Self> {1686 if Self::can_cast(syntax.kind()) {1687 Some(Self { syntax })1688 } else {1689 None1690 }1691 }1692 fn syntax(&self) -> &SyntaxNode {1693 &self.syntax1694 }1695}1696impl AstNode for ForSpec {1697 fn can_cast(kind: SyntaxKind) -> bool {1698 kind == FOR_SPEC1699 }1700 fn cast(syntax: SyntaxNode) -> Option<Self> {1701 if Self::can_cast(syntax.kind()) {1702 Some(Self { syntax })1703 } else {1704 None1705 }1706 }1707 fn syntax(&self) -> &SyntaxNode {1708 &self.syntax1709 }1710}1711impl AstNode for IfSpec {1712 fn can_cast(kind: SyntaxKind) -> bool {1713 kind == IF_SPEC1714 }1715 fn cast(syntax: SyntaxNode) -> Option<Self> {1716 if Self::can_cast(syntax.kind()) {1717 Some(Self { syntax })1718 } else {1719 None1720 }1721 }1722 fn syntax(&self) -> &SyntaxNode {1723 &self.syntax1724 }1725}1726impl AstNode for BindDestruct {1727 fn can_cast(kind: SyntaxKind) -> bool {1728 kind == BIND_DESTRUCT1729 }1730 fn cast(syntax: SyntaxNode) -> Option<Self> {1731 if Self::can_cast(syntax.kind()) {1732 Some(Self { syntax })1733 } else {1734 None1735 }1736 }1737 fn syntax(&self) -> &SyntaxNode {1738 &self.syntax1739 }1740}1741impl AstNode for BindFunction {1742 fn can_cast(kind: SyntaxKind) -> bool {1743 kind == BIND_FUNCTION1744 }1745 fn cast(syntax: SyntaxNode) -> Option<Self> {1746 if Self::can_cast(syntax.kind()) {1747 Some(Self { syntax })1748 } else {1749 None1750 }1751 }1752 fn syntax(&self) -> &SyntaxNode {1753 &self.syntax1754 }1755}1756impl AstNode for Param {1757 fn can_cast(kind: SyntaxKind) -> bool {1758 kind == PARAM1759 }1760 fn cast(syntax: SyntaxNode) -> Option<Self> {1761 if Self::can_cast(syntax.kind()) {1762 Some(Self { syntax })1763 } else {1764 None1765 }1766 }1767 fn syntax(&self) -> &SyntaxNode {1768 &self.syntax1769 }1770}1771impl AstNode for DestructFull {1772 fn can_cast(kind: SyntaxKind) -> bool {1773 kind == DESTRUCT_FULL1774 }1775 fn cast(syntax: SyntaxNode) -> Option<Self> {1776 if Self::can_cast(syntax.kind()) {1777 Some(Self { syntax })1778 } else {1779 None1780 }1781 }1782 fn syntax(&self) -> &SyntaxNode {1783 &self.syntax1784 }1785}1786impl AstNode for DestructSkip {1787 fn can_cast(kind: SyntaxKind) -> bool {1788 kind == DESTRUCT_SKIP1789 }1790 fn cast(syntax: SyntaxNode) -> Option<Self> {1791 if Self::can_cast(syntax.kind()) {1792 Some(Self { syntax })1793 } else {1794 None1795 }1796 }1797 fn syntax(&self) -> &SyntaxNode {1798 &self.syntax1799 }1800}1801impl AstNode for DestructArray {1802 fn can_cast(kind: SyntaxKind) -> bool {1803 kind == DESTRUCT_ARRAY1804 }1805 fn cast(syntax: SyntaxNode) -> Option<Self> {1806 if Self::can_cast(syntax.kind()) {1807 Some(Self { syntax })1808 } else {1809 None1810 }1811 }1812 fn syntax(&self) -> &SyntaxNode {1813 &self.syntax1814 }1815}1816impl AstNode for DestructObject {1817 fn can_cast(kind: SyntaxKind) -> bool {1818 kind == DESTRUCT_OBJECT1819 }1820 fn cast(syntax: SyntaxNode) -> Option<Self> {1821 if Self::can_cast(syntax.kind()) {1822 Some(Self { syntax })1823 } else {1824 None1825 }1826 }1827 fn syntax(&self) -> &SyntaxNode {1828 &self.syntax1829 }1830}1831impl AstNode for DestructObjectField {1832 fn can_cast(kind: SyntaxKind) -> bool {1833 kind == DESTRUCT_OBJECT_FIELD1834 }1835 fn cast(syntax: SyntaxNode) -> Option<Self> {1836 if Self::can_cast(syntax.kind()) {1837 Some(Self { syntax })1838 } else {1839 None1840 }1841 }1842 fn syntax(&self) -> &SyntaxNode {1843 &self.syntax1844 }1845}1846impl AstNode for DestructRest {1847 fn can_cast(kind: SyntaxKind) -> bool {1848 kind == DESTRUCT_REST1849 }1850 fn cast(syntax: SyntaxNode) -> Option<Self> {1851 if Self::can_cast(syntax.kind()) {1852 Some(Self { syntax })1853 } else {1854 None1855 }1856 }1857 fn syntax(&self) -> &SyntaxNode {1858 &self.syntax1859 }1860}1861impl AstNode for DestructArrayElement {1862 fn can_cast(kind: SyntaxKind) -> bool {1863 kind == DESTRUCT_ARRAY_ELEMENT1864 }1865 fn cast(syntax: SyntaxNode) -> Option<Self> {1866 if Self::can_cast(syntax.kind()) {1867 Some(Self { syntax })1868 } else {1869 None1870 }1871 }1872 fn syntax(&self) -> &SyntaxNode {1873 &self.syntax1874 }1875}1876impl From<ObjBodyComp> for ObjBody {1877 fn from(node: ObjBodyComp) -> ObjBody {1878 ObjBody::ObjBodyComp(node)1879 }1880}1881impl From<ObjBodyMemberList> for ObjBody {1882 fn from(node: ObjBodyMemberList) -> ObjBody {1883 ObjBody::ObjBodyMemberList(node)1884 }1885}1886impl AstNode for ObjBody {1887 fn can_cast(kind: SyntaxKind) -> bool {1888 match kind {1889 OBJ_BODY_COMP | OBJ_BODY_MEMBER_LIST => true,1890 _ => false,1891 }1892 }1893 fn cast(syntax: SyntaxNode) -> Option<Self> {1894 let res = match syntax.kind() {1895 OBJ_BODY_COMP => ObjBody::ObjBodyComp(ObjBodyComp { syntax }),1896 OBJ_BODY_MEMBER_LIST => ObjBody::ObjBodyMemberList(ObjBodyMemberList { syntax }),1897 _ => return None,1898 };1899 Some(res)1900 }1901 fn syntax(&self) -> &SyntaxNode {1902 match self {1903 ObjBody::ObjBodyComp(it) => &it.syntax,1904 ObjBody::ObjBodyMemberList(it) => &it.syntax,1905 }1906 }1907}1908impl From<ForSpec> for CompSpec {1909 fn from(node: ForSpec) -> CompSpec {1910 CompSpec::ForSpec(node)1911 }1912}1913impl From<IfSpec> for CompSpec {1914 fn from(node: IfSpec) -> CompSpec {1915 CompSpec::IfSpec(node)1916 }1917}1918impl AstNode for CompSpec {1919 fn can_cast(kind: SyntaxKind) -> bool {1920 match kind {1921 FOR_SPEC | IF_SPEC => true,1922 _ => false,1923 }1924 }1925 fn cast(syntax: SyntaxNode) -> Option<Self> {1926 let res = match syntax.kind() {1927 FOR_SPEC => CompSpec::ForSpec(ForSpec { syntax }),1928 IF_SPEC => CompSpec::IfSpec(IfSpec { syntax }),1929 _ => return None,1930 };1931 Some(res)1932 }1933 fn syntax(&self) -> &SyntaxNode {1934 match self {1935 CompSpec::ForSpec(it) => &it.syntax,1936 CompSpec::IfSpec(it) => &it.syntax,1937 }1938 }1939}1940impl From<BindDestruct> for Bind {1941 fn from(node: BindDestruct) -> Bind {1942 Bind::BindDestruct(node)1943 }1944}1945impl From<BindFunction> for Bind {1946 fn from(node: BindFunction) -> Bind {1947 Bind::BindFunction(node)1948 }1949}1950impl AstNode for Bind {1951 fn can_cast(kind: SyntaxKind) -> bool {1952 match kind {1953 BIND_DESTRUCT | BIND_FUNCTION => true,1954 _ => false,1955 }1956 }1957 fn cast(syntax: SyntaxNode) -> Option<Self> {1958 let res = match syntax.kind() {1959 BIND_DESTRUCT => Bind::BindDestruct(BindDestruct { syntax }),1960 BIND_FUNCTION => Bind::BindFunction(BindFunction { syntax }),1961 _ => return None,1962 };1963 Some(res)1964 }1965 fn syntax(&self) -> &SyntaxNode {1966 match self {1967 Bind::BindDestruct(it) => &it.syntax,1968 Bind::BindFunction(it) => &it.syntax,1969 }1970 }1971}1972impl From<ExprBinary> for ExprBase {1973 fn from(node: ExprBinary) -> ExprBase {1974 ExprBase::ExprBinary(node)1975 }1976}1977impl From<ExprUnary> for ExprBase {1978 fn from(node: ExprUnary) -> ExprBase {1979 ExprBase::ExprUnary(node)1980 }1981}1982impl From<ExprSlice> for ExprBase {1983 fn from(node: ExprSlice) -> ExprBase {1984 ExprBase::ExprSlice(node)1985 }1986}1987impl From<ExprIndex> for ExprBase {1988 fn from(node: ExprIndex) -> ExprBase {1989 ExprBase::ExprIndex(node)1990 }1991}1992impl From<ExprIndexExpr> for ExprBase {1993 fn from(node: ExprIndexExpr) -> ExprBase {1994 ExprBase::ExprIndexExpr(node)1995 }1996}1997impl From<ExprApply> for ExprBase {1998 fn from(node: ExprApply) -> ExprBase {1999 ExprBase::ExprApply(node)2000 }2001}2002impl From<ExprObjExtend> for ExprBase {2003 fn from(node: ExprObjExtend) -> ExprBase {2004 ExprBase::ExprObjExtend(node)2005 }2006}2007impl From<ExprParened> for ExprBase {2008 fn from(node: ExprParened) -> ExprBase {2009 ExprBase::ExprParened(node)2010 }2011}2012impl From<ExprString> for ExprBase {2013 fn from(node: ExprString) -> ExprBase {2014 ExprBase::ExprString(node)2015 }2016}2017impl From<ExprNumber> for ExprBase {2018 fn from(node: ExprNumber) -> ExprBase {2019 ExprBase::ExprNumber(node)2020 }2021}2022impl From<ExprLiteral> for ExprBase {2023 fn from(node: ExprLiteral) -> ExprBase {2024 ExprBase::ExprLiteral(node)2025 }2026}2027impl From<ExprArray> for ExprBase {2028 fn from(node: ExprArray) -> ExprBase {2029 ExprBase::ExprArray(node)2030 }2031}2032impl From<ExprObject> for ExprBase {2033 fn from(node: ExprObject) -> ExprBase {2034 ExprBase::ExprObject(node)2035 }2036}2037impl From<ExprArrayComp> for ExprBase {2038 fn from(node: ExprArrayComp) -> ExprBase {2039 ExprBase::ExprArrayComp(node)2040 }2041}2042impl From<ExprImport> for ExprBase {2043 fn from(node: ExprImport) -> ExprBase {2044 ExprBase::ExprImport(node)2045 }2046}2047impl From<ExprVar> for ExprBase {2048 fn from(node: ExprVar) -> ExprBase {2049 ExprBase::ExprVar(node)2050 }2051}2052impl From<ExprIfThenElse> for ExprBase {2053 fn from(node: ExprIfThenElse) -> ExprBase {2054 ExprBase::ExprIfThenElse(node)2055 }2056}2057impl From<ExprFunction> for ExprBase {2058 fn from(node: ExprFunction) -> ExprBase {2059 ExprBase::ExprFunction(node)2060 }2061}2062impl From<ExprAssert> for ExprBase {2063 fn from(node: ExprAssert) -> ExprBase {2064 ExprBase::ExprAssert(node)2065 }2066}2067impl From<ExprError> for ExprBase {2068 fn from(node: ExprError) -> ExprBase {2069 ExprBase::ExprError(node)2070 }2071}2072impl AstNode for ExprBase {2073 fn can_cast(kind: SyntaxKind) -> bool {2074 match kind {2075 EXPR_BINARY | EXPR_UNARY | EXPR_SLICE | EXPR_INDEX | EXPR_INDEX_EXPR | EXPR_APPLY2076 | EXPR_OBJ_EXTEND | EXPR_PARENED | EXPR_STRING | EXPR_NUMBER | EXPR_LITERAL2077 | EXPR_ARRAY | EXPR_OBJECT | EXPR_ARRAY_COMP | EXPR_IMPORT | EXPR_VAR2078 | EXPR_IF_THEN_ELSE | EXPR_FUNCTION | EXPR_ASSERT | EXPR_ERROR => true,2079 _ => false,2080 }2081 }2082 fn cast(syntax: SyntaxNode) -> Option<Self> {2083 let res = match syntax.kind() {2084 EXPR_BINARY => ExprBase::ExprBinary(ExprBinary { syntax }),2085 EXPR_UNARY => ExprBase::ExprUnary(ExprUnary { syntax }),2086 EXPR_SLICE => ExprBase::ExprSlice(ExprSlice { syntax }),2087 EXPR_INDEX => ExprBase::ExprIndex(ExprIndex { syntax }),2088 EXPR_INDEX_EXPR => ExprBase::ExprIndexExpr(ExprIndexExpr { syntax }),2089 EXPR_APPLY => ExprBase::ExprApply(ExprApply { syntax }),2090 EXPR_OBJ_EXTEND => ExprBase::ExprObjExtend(ExprObjExtend { syntax }),2091 EXPR_PARENED => ExprBase::ExprParened(ExprParened { syntax }),2092 EXPR_STRING => ExprBase::ExprString(ExprString { syntax }),2093 EXPR_NUMBER => ExprBase::ExprNumber(ExprNumber { syntax }),2094 EXPR_LITERAL => ExprBase::ExprLiteral(ExprLiteral { syntax }),2095 EXPR_ARRAY => ExprBase::ExprArray(ExprArray { syntax }),2096 EXPR_OBJECT => ExprBase::ExprObject(ExprObject { syntax }),2097 EXPR_ARRAY_COMP => ExprBase::ExprArrayComp(ExprArrayComp { syntax }),2098 EXPR_IMPORT => ExprBase::ExprImport(ExprImport { syntax }),2099 EXPR_VAR => ExprBase::ExprVar(ExprVar { syntax }),2100 EXPR_IF_THEN_ELSE => ExprBase::ExprIfThenElse(ExprIfThenElse { syntax }),2101 EXPR_FUNCTION => ExprBase::ExprFunction(ExprFunction { syntax }),2102 EXPR_ASSERT => ExprBase::ExprAssert(ExprAssert { syntax }),2103 EXPR_ERROR => ExprBase::ExprError(ExprError { syntax }),2104 _ => return None,2105 };2106 Some(res)2107 }2108 fn syntax(&self) -> &SyntaxNode {2109 match self {2110 ExprBase::ExprBinary(it) => &it.syntax,2111 ExprBase::ExprUnary(it) => &it.syntax,2112 ExprBase::ExprSlice(it) => &it.syntax,2113 ExprBase::ExprIndex(it) => &it.syntax,2114 ExprBase::ExprIndexExpr(it) => &it.syntax,2115 ExprBase::ExprApply(it) => &it.syntax,2116 ExprBase::ExprObjExtend(it) => &it.syntax,2117 ExprBase::ExprParened(it) => &it.syntax,2118 ExprBase::ExprString(it) => &it.syntax,2119 ExprBase::ExprNumber(it) => &it.syntax,2120 ExprBase::ExprLiteral(it) => &it.syntax,2121 ExprBase::ExprArray(it) => &it.syntax,2122 ExprBase::ExprObject(it) => &it.syntax,2123 ExprBase::ExprArrayComp(it) => &it.syntax,2124 ExprBase::ExprImport(it) => &it.syntax,2125 ExprBase::ExprVar(it) => &it.syntax,2126 ExprBase::ExprIfThenElse(it) => &it.syntax,2127 ExprBase::ExprFunction(it) => &it.syntax,2128 ExprBase::ExprAssert(it) => &it.syntax,2129 ExprBase::ExprError(it) => &it.syntax,2130 }2131 }2132}2133impl From<MemberBindStmt> for MemberComp {2134 fn from(node: MemberBindStmt) -> MemberComp {2135 MemberComp::MemberBindStmt(node)2136 }2137}2138impl From<MemberFieldNormal> for MemberComp {2139 fn from(node: MemberFieldNormal) -> MemberComp {2140 MemberComp::MemberFieldNormal(node)2141 }2142}2143impl From<MemberFieldMethod> for MemberComp {2144 fn from(node: MemberFieldMethod) -> MemberComp {2145 MemberComp::MemberFieldMethod(node)2146 }2147}2148impl AstNode for MemberComp {2149 fn can_cast(kind: SyntaxKind) -> bool {2150 match kind {2151 MEMBER_BIND_STMT | MEMBER_FIELD_NORMAL | MEMBER_FIELD_METHOD => true,2152 _ => false,2153 }2154 }2155 fn cast(syntax: SyntaxNode) -> Option<Self> {2156 let res = match syntax.kind() {2157 MEMBER_BIND_STMT => MemberComp::MemberBindStmt(MemberBindStmt { syntax }),2158 MEMBER_FIELD_NORMAL => MemberComp::MemberFieldNormal(MemberFieldNormal { syntax }),2159 MEMBER_FIELD_METHOD => MemberComp::MemberFieldMethod(MemberFieldMethod { syntax }),2160 _ => return None,2161 };2162 Some(res)2163 }2164 fn syntax(&self) -> &SyntaxNode {2165 match self {2166 MemberComp::MemberBindStmt(it) => &it.syntax,2167 MemberComp::MemberFieldNormal(it) => &it.syntax,2168 MemberComp::MemberFieldMethod(it) => &it.syntax,2169 }2170 }2171}2172impl From<MemberBindStmt> for Member {2173 fn from(node: MemberBindStmt) -> Member {2174 Member::MemberBindStmt(node)2175 }2176}2177impl From<MemberAssertStmt> for Member {2178 fn from(node: MemberAssertStmt) -> Member {2179 Member::MemberAssertStmt(node)2180 }2181}2182impl From<MemberFieldNormal> for Member {2183 fn from(node: MemberFieldNormal) -> Member {2184 Member::MemberFieldNormal(node)2185 }2186}2187impl From<MemberFieldMethod> for Member {2188 fn from(node: MemberFieldMethod) -> Member {2189 Member::MemberFieldMethod(node)2190 }2191}2192impl AstNode for Member {2193 fn can_cast(kind: SyntaxKind) -> bool {2194 match kind {2195 MEMBER_BIND_STMT | MEMBER_ASSERT_STMT | MEMBER_FIELD_NORMAL | MEMBER_FIELD_METHOD => {2196 true2197 }2198 _ => false,2199 }2200 }2201 fn cast(syntax: SyntaxNode) -> Option<Self> {2202 let res = match syntax.kind() {2203 MEMBER_BIND_STMT => Member::MemberBindStmt(MemberBindStmt { syntax }),2204 MEMBER_ASSERT_STMT => Member::MemberAssertStmt(MemberAssertStmt { syntax }),2205 MEMBER_FIELD_NORMAL => Member::MemberFieldNormal(MemberFieldNormal { syntax }),2206 MEMBER_FIELD_METHOD => Member::MemberFieldMethod(MemberFieldMethod { syntax }),2207 _ => return None,2208 };2209 Some(res)2210 }2211 fn syntax(&self) -> &SyntaxNode {2212 match self {2213 Member::MemberBindStmt(it) => &it.syntax,2214 Member::MemberAssertStmt(it) => &it.syntax,2215 Member::MemberFieldNormal(it) => &it.syntax,2216 Member::MemberFieldMethod(it) => &it.syntax,2217 }2218 }2219}2220impl From<FieldNameFixed> for FieldName {2221 fn from(node: FieldNameFixed) -> FieldName {2222 FieldName::FieldNameFixed(node)2223 }2224}2225impl From<FieldNameDynamic> for FieldName {2226 fn from(node: FieldNameDynamic) -> FieldName {2227 FieldName::FieldNameDynamic(node)2228 }2229}2230impl AstNode for FieldName {2231 fn can_cast(kind: SyntaxKind) -> bool {2232 match kind {2233 FIELD_NAME_FIXED | FIELD_NAME_DYNAMIC => true,2234 _ => false,2235 }2236 }2237 fn cast(syntax: SyntaxNode) -> Option<Self> {2238 let res = match syntax.kind() {2239 FIELD_NAME_FIXED => FieldName::FieldNameFixed(FieldNameFixed { syntax }),2240 FIELD_NAME_DYNAMIC => FieldName::FieldNameDynamic(FieldNameDynamic { syntax }),2241 _ => return None,2242 };2243 Some(res)2244 }2245 fn syntax(&self) -> &SyntaxNode {2246 match self {2247 FieldName::FieldNameFixed(it) => &it.syntax,2248 FieldName::FieldNameDynamic(it) => &it.syntax,2249 }2250 }2251}2252impl From<DestructFull> for Destruct {2253 fn from(node: DestructFull) -> Destruct {2254 Destruct::DestructFull(node)2255 }2256}2257impl From<DestructSkip> for Destruct {2258 fn from(node: DestructSkip) -> Destruct {2259 Destruct::DestructSkip(node)2260 }2261}2262impl From<DestructArray> for Destruct {2263 fn from(node: DestructArray) -> Destruct {2264 Destruct::DestructArray(node)2265 }2266}2267impl From<DestructObject> for Destruct {2268 fn from(node: DestructObject) -> Destruct {2269 Destruct::DestructObject(node)2270 }2271}2272impl AstNode for Destruct {2273 fn can_cast(kind: SyntaxKind) -> bool {2274 match kind {2275 DESTRUCT_FULL | DESTRUCT_SKIP | DESTRUCT_ARRAY | DESTRUCT_OBJECT => true,2276 _ => false,2277 }2278 }2279 fn cast(syntax: SyntaxNode) -> Option<Self> {2280 let res = match syntax.kind() {2281 DESTRUCT_FULL => Destruct::DestructFull(DestructFull { syntax }),2282 DESTRUCT_SKIP => Destruct::DestructSkip(DestructSkip { syntax }),2283 DESTRUCT_ARRAY => Destruct::DestructArray(DestructArray { syntax }),2284 DESTRUCT_OBJECT => Destruct::DestructObject(DestructObject { syntax }),2285 _ => return None,2286 };2287 Some(res)2288 }2289 fn syntax(&self) -> &SyntaxNode {2290 match self {2291 Destruct::DestructFull(it) => &it.syntax,2292 Destruct::DestructSkip(it) => &it.syntax,2293 Destruct::DestructArray(it) => &it.syntax,2294 Destruct::DestructObject(it) => &it.syntax,2295 }2296 }2297}2298impl From<DestructArrayElement> for DestructArrayPart {2299 fn from(node: DestructArrayElement) -> DestructArrayPart {2300 DestructArrayPart::DestructArrayElement(node)2301 }2302}2303impl From<DestructRest> for DestructArrayPart {2304 fn from(node: DestructRest) -> DestructArrayPart {2305 DestructArrayPart::DestructRest(node)2306 }2307}2308impl AstNode for DestructArrayPart {2309 fn can_cast(kind: SyntaxKind) -> bool {2310 match kind {2311 DESTRUCT_ARRAY_ELEMENT | DESTRUCT_REST => true,2312 _ => false,2313 }2314 }2315 fn cast(syntax: SyntaxNode) -> Option<Self> {2316 let res = match syntax.kind() {2317 DESTRUCT_ARRAY_ELEMENT => {2318 DestructArrayPart::DestructArrayElement(DestructArrayElement { syntax })2319 }2320 DESTRUCT_REST => DestructArrayPart::DestructRest(DestructRest { syntax }),2321 _ => return None,2322 };2323 Some(res)2324 }2325 fn syntax(&self) -> &SyntaxNode {2326 match self {2327 DestructArrayPart::DestructArrayElement(it) => &it.syntax,2328 DestructArrayPart::DestructRest(it) => &it.syntax,2329 }2330 }2331}2332impl AstToken for BinaryOperator {2333 fn can_cast(kind: SyntaxKind) -> bool {2334 BinaryOperatorKind::can_cast(kind)2335 }2336 fn cast(syntax: SyntaxToken) -> Option<Self> {2337 let kind = BinaryOperatorKind::cast(syntax.kind())?;2338 Some(BinaryOperator { syntax, kind })2339 }2340 fn syntax(&self) -> &SyntaxToken {2341 &self.syntax2342 }2343}2344impl BinaryOperatorKind {2345 fn can_cast(kind: SyntaxKind) -> bool {2346 match kind {2347 OR | AND | BIT_OR | BIT_XOR | BIT_AND | EQ | NE | LT | GT | LE | GE | IN_KW | LHS2348 | RHS | PLUS | MINUS | MUL | DIV | MODULO | META_OBJECT_APPLY | ERROR_NO_OPERATOR => true,2349 _ => false,2350 }2351 }2352 pub fn cast(kind: SyntaxKind) -> Option<Self> {2353 let res = match kind {2354 OR => Self::Or,2355 AND => Self::And,2356 BIT_OR => Self::BitOr,2357 BIT_XOR => Self::BitXor,2358 BIT_AND => Self::BitAnd,2359 EQ => Self::Eq,2360 NE => Self::Ne,2361 LT => Self::Lt,2362 GT => Self::Gt,2363 LE => Self::Le,2364 GE => Self::Ge,2365 IN_KW => Self::InKw,2366 LHS => Self::Lhs,2367 RHS => Self::Rhs,2368 PLUS => Self::Plus,2369 MINUS => Self::Minus,2370 MUL => Self::Mul,2371 DIV => Self::Div,2372 MODULO => Self::Modulo,2373 META_OBJECT_APPLY => Self::MetaObjectApply,2374 ERROR_NO_OPERATOR => Self::ErrorNoOperator,2375 _ => return None,2376 };2377 Some(res)2378 }2379}2380impl BinaryOperator {2381 pub fn kind(&self) -> BinaryOperatorKind {2382 self.kind2383 }2384}2385impl std::fmt::Display for BinaryOperator {2386 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2387 std::fmt::Display::fmt(self.syntax(), f)2388 }2389}2390impl AstToken for UnaryOperator {2391 fn can_cast(kind: SyntaxKind) -> bool {2392 UnaryOperatorKind::can_cast(kind)2393 }2394 fn cast(syntax: SyntaxToken) -> Option<Self> {2395 let kind = UnaryOperatorKind::cast(syntax.kind())?;2396 Some(UnaryOperator { syntax, kind })2397 }2398 fn syntax(&self) -> &SyntaxToken {2399 &self.syntax2400 }2401}2402impl UnaryOperatorKind {2403 fn can_cast(kind: SyntaxKind) -> bool {2404 match kind {2405 MINUS | NOT | BIT_NOT => true,2406 _ => false,2407 }2408 }2409 pub fn cast(kind: SyntaxKind) -> Option<Self> {2410 let res = match kind {2411 MINUS => Self::Minus,2412 NOT => Self::Not,2413 BIT_NOT => Self::BitNot,2414 _ => return None,2415 };2416 Some(res)2417 }2418}2419impl UnaryOperator {2420 pub fn kind(&self) -> UnaryOperatorKind {2421 self.kind2422 }2423}2424impl std::fmt::Display for UnaryOperator {2425 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2426 std::fmt::Display::fmt(self.syntax(), f)2427 }2428}2429impl AstToken for Literal {2430 fn can_cast(kind: SyntaxKind) -> bool {2431 LiteralKind::can_cast(kind)2432 }2433 fn cast(syntax: SyntaxToken) -> Option<Self> {2434 let kind = LiteralKind::cast(syntax.kind())?;2435 Some(Literal { syntax, kind })2436 }2437 fn syntax(&self) -> &SyntaxToken {2438 &self.syntax2439 }2440}2441impl LiteralKind {2442 fn can_cast(kind: SyntaxKind) -> bool {2443 match kind {2444 NULL_KW | TRUE_KW | FALSE_KW | SELF_KW | DOLLAR | SUPER_KW => true,2445 _ => false,2446 }2447 }2448 pub fn cast(kind: SyntaxKind) -> Option<Self> {2449 let res = match kind {2450 NULL_KW => Self::NullKw,2451 TRUE_KW => Self::TrueKw,2452 FALSE_KW => Self::FalseKw,2453 SELF_KW => Self::SelfKw,2454 DOLLAR => Self::Dollar,2455 SUPER_KW => Self::SuperKw,2456 _ => return None,2457 };2458 Some(res)2459 }2460}2461impl Literal {2462 pub fn kind(&self) -> LiteralKind {2463 self.kind2464 }2465}2466impl std::fmt::Display for Literal {2467 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2468 std::fmt::Display::fmt(self.syntax(), f)2469 }2470}2471impl AstToken for Text {2472 fn can_cast(kind: SyntaxKind) -> bool {2473 TextKind::can_cast(kind)2474 }2475 fn cast(syntax: SyntaxToken) -> Option<Self> {2476 let kind = TextKind::cast(syntax.kind())?;2477 Some(Text { syntax, kind })2478 }2479 fn syntax(&self) -> &SyntaxToken {2480 &self.syntax2481 }2482}2483impl TextKind {2484 fn can_cast(kind: SyntaxKind) -> bool {2485 match kind {2486 STRING_DOUBLE2487 | ERROR_STRING_DOUBLE_UNTERMINATED2488 | STRING_SINGLE2489 | ERROR_STRING_SINGLE_UNTERMINATED2490 | STRING_DOUBLE_VERBATIM2491 | ERROR_STRING_DOUBLE_VERBATIM_UNTERMINATED2492 | STRING_SINGLE_VERBATIM2493 | ERROR_STRING_SINGLE_VERBATIM_UNTERMINATED2494 | ERROR_STRING_VERBATIM_MISSING_QUOTES2495 | STRING_BLOCK2496 | ERROR_STRING_BLOCK_UNEXPECTED_END2497 | ERROR_STRING_BLOCK_MISSING_NEW_LINE2498 | ERROR_STRING_BLOCK_MISSING_TERMINATION2499 | ERROR_STRING_BLOCK_MISSING_INDENT => true,2500 _ => false,2501 }2502 }2503 pub fn cast(kind: SyntaxKind) -> Option<Self> {2504 let res = match kind {2505 STRING_DOUBLE => Self::StringDouble,2506 ERROR_STRING_DOUBLE_UNTERMINATED => Self::ErrorStringDoubleUnterminated,2507 STRING_SINGLE => Self::StringSingle,2508 ERROR_STRING_SINGLE_UNTERMINATED => Self::ErrorStringSingleUnterminated,2509 STRING_DOUBLE_VERBATIM => Self::StringDoubleVerbatim,2510 ERROR_STRING_DOUBLE_VERBATIM_UNTERMINATED => {2511 Self::ErrorStringDoubleVerbatimUnterminated2512 }2513 STRING_SINGLE_VERBATIM => Self::StringSingleVerbatim,2514 ERROR_STRING_SINGLE_VERBATIM_UNTERMINATED => {2515 Self::ErrorStringSingleVerbatimUnterminated2516 }2517 ERROR_STRING_VERBATIM_MISSING_QUOTES => Self::ErrorStringVerbatimMissingQuotes,2518 STRING_BLOCK => Self::StringBlock,2519 ERROR_STRING_BLOCK_UNEXPECTED_END => Self::ErrorStringBlockUnexpectedEnd,2520 ERROR_STRING_BLOCK_MISSING_NEW_LINE => Self::ErrorStringBlockMissingNewLine,2521 ERROR_STRING_BLOCK_MISSING_TERMINATION => Self::ErrorStringBlockMissingTermination,2522 ERROR_STRING_BLOCK_MISSING_INDENT => Self::ErrorStringBlockMissingIndent,2523 _ => return None,2524 };2525 Some(res)2526 }2527}2528impl Text {2529 pub fn kind(&self) -> TextKind {2530 self.kind2531 }2532}2533impl std::fmt::Display for Text {2534 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2535 std::fmt::Display::fmt(self.syntax(), f)2536 }2537}2538impl AstToken for Number {2539 fn can_cast(kind: SyntaxKind) -> bool {2540 NumberKind::can_cast(kind)2541 }2542 fn cast(syntax: SyntaxToken) -> Option<Self> {2543 let kind = NumberKind::cast(syntax.kind())?;2544 Some(Number { syntax, kind })2545 }2546 fn syntax(&self) -> &SyntaxToken {2547 &self.syntax2548 }2549}2550impl NumberKind {2551 fn can_cast(kind: SyntaxKind) -> bool {2552 match kind {2553 FLOAT2554 | ERROR_FLOAT_JUNK_AFTER_POINT2555 | ERROR_FLOAT_JUNK_AFTER_EXPONENT2556 | ERROR_FLOAT_JUNK_AFTER_EXPONENT_SIGN => true,2557 _ => false,2558 }2559 }2560 pub fn cast(kind: SyntaxKind) -> Option<Self> {2561 let res = match kind {2562 FLOAT => Self::Float,2563 ERROR_FLOAT_JUNK_AFTER_POINT => Self::ErrorFloatJunkAfterPoint,2564 ERROR_FLOAT_JUNK_AFTER_EXPONENT => Self::ErrorFloatJunkAfterExponent,2565 ERROR_FLOAT_JUNK_AFTER_EXPONENT_SIGN => Self::ErrorFloatJunkAfterExponentSign,2566 _ => return None,2567 };2568 Some(res)2569 }2570}2571impl Number {2572 pub fn kind(&self) -> NumberKind {2573 self.kind2574 }2575}2576impl std::fmt::Display for Number {2577 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2578 std::fmt::Display::fmt(self.syntax(), f)2579 }2580}2581impl AstToken for ImportKind {2582 fn can_cast(kind: SyntaxKind) -> bool {2583 ImportKindKind::can_cast(kind)2584 }2585 fn cast(syntax: SyntaxToken) -> Option<Self> {2586 let kind = ImportKindKind::cast(syntax.kind())?;2587 Some(ImportKind { syntax, kind })2588 }2589 fn syntax(&self) -> &SyntaxToken {2590 &self.syntax2591 }2592}2593impl ImportKindKind {2594 fn can_cast(kind: SyntaxKind) -> bool {2595 match kind {2596 IMPORTSTR_KW | IMPORTBIN_KW | IMPORT_KW => true,2597 _ => false,2598 }2599 }2600 pub fn cast(kind: SyntaxKind) -> Option<Self> {2601 let res = match kind {2602 IMPORTSTR_KW => Self::ImportstrKw,2603 IMPORTBIN_KW => Self::ImportbinKw,2604 IMPORT_KW => Self::ImportKw,2605 _ => return None,2606 };2607 Some(res)2608 }2609}2610impl ImportKind {2611 pub fn kind(&self) -> ImportKindKind {2612 self.kind2613 }2614}2615impl std::fmt::Display for ImportKind {2616 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2617 std::fmt::Display::fmt(self.syntax(), f)2618 }2619}2620impl AstToken for Visibility {2621 fn can_cast(kind: SyntaxKind) -> bool {2622 VisibilityKind::can_cast(kind)2623 }2624 fn cast(syntax: SyntaxToken) -> Option<Self> {2625 let kind = VisibilityKind::cast(syntax.kind())?;2626 Some(Visibility { syntax, kind })2627 }2628 fn syntax(&self) -> &SyntaxToken {2629 &self.syntax2630 }2631}2632impl VisibilityKind {2633 fn can_cast(kind: SyntaxKind) -> bool {2634 match kind {2635 COLONCOLONCOLON | COLONCOLON | COLON => true,2636 _ => false,2637 }2638 }2639 pub fn cast(kind: SyntaxKind) -> Option<Self> {2640 let res = match kind {2641 COLONCOLONCOLON => Self::Coloncoloncolon,2642 COLONCOLON => Self::Coloncolon,2643 COLON => Self::Colon,2644 _ => return None,2645 };2646 Some(res)2647 }2648}2649impl Visibility {2650 pub fn kind(&self) -> VisibilityKind {2651 self.kind2652 }2653}2654impl std::fmt::Display for Visibility {2655 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2656 std::fmt::Display::fmt(self.syntax(), f)2657 }2658}2659impl AstToken for Trivia {2660 fn can_cast(kind: SyntaxKind) -> bool {2661 TriviaKind::can_cast(kind)2662 }2663 fn cast(syntax: SyntaxToken) -> Option<Self> {2664 let kind = TriviaKind::cast(syntax.kind())?;2665 Some(Trivia { syntax, kind })2666 }2667 fn syntax(&self) -> &SyntaxToken {2668 &self.syntax2669 }2670}2671impl TriviaKind {2672 fn can_cast(kind: SyntaxKind) -> bool {2673 match kind {2674 WHITESPACE2675 | MULTI_LINE_COMMENT2676 | ERROR_COMMENT_TOO_SHORT2677 | ERROR_COMMENT_UNTERMINATED2678 | SINGLE_LINE_HASH_COMMENT2679 | SINGLE_LINE_SLASH_COMMENT => true,2680 _ => false,2681 }2682 }2683 pub fn cast(kind: SyntaxKind) -> Option<Self> {2684 let res = match kind {2685 WHITESPACE => Self::Whitespace,2686 MULTI_LINE_COMMENT => Self::MultiLineComment,2687 ERROR_COMMENT_TOO_SHORT => Self::ErrorCommentTooShort,2688 ERROR_COMMENT_UNTERMINATED => Self::ErrorCommentUnterminated,2689 SINGLE_LINE_HASH_COMMENT => Self::SingleLineHashComment,2690 SINGLE_LINE_SLASH_COMMENT => Self::SingleLineSlashComment,2691 _ => return None,2692 };2693 Some(res)2694 }2695}2696impl Trivia {2697 pub fn kind(&self) -> TriviaKind {2698 self.kind2699 }2700}2701impl std::fmt::Display for Trivia {2702 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2703 std::fmt::Display::fmt(self.syntax(), f)2704 }2705}2706impl AstToken for CustomError {2707 fn can_cast(kind: SyntaxKind) -> bool {2708 CustomErrorKind::can_cast(kind)2709 }2710 fn cast(syntax: SyntaxToken) -> Option<Self> {2711 let kind = CustomErrorKind::cast(syntax.kind())?;2712 Some(CustomError { syntax, kind })2713 }2714 fn syntax(&self) -> &SyntaxToken {2715 &self.syntax2716 }2717}2718impl CustomErrorKind {2719 fn can_cast(kind: SyntaxKind) -> bool {2720 match kind {2721 ERROR_MISSING_TOKEN | ERROR_UNEXPECTED_TOKEN | ERROR_CUSTOM => true,2722 _ => false,2723 }2724 }2725 pub fn cast(kind: SyntaxKind) -> Option<Self> {2726 let res = match kind {2727 ERROR_MISSING_TOKEN => Self::ErrorMissingToken,2728 ERROR_UNEXPECTED_TOKEN => Self::ErrorUnexpectedToken,2729 ERROR_CUSTOM => Self::ErrorCustom,2730 _ => return None,2731 };2732 Some(res)2733 }2734}2735impl CustomError {2736 pub fn kind(&self) -> CustomErrorKind {2737 self.kind2738 }2739}2740impl std::fmt::Display for CustomError {2741 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2742 std::fmt::Display::fmt(self.syntax(), f)2743 }2744}2745impl std::fmt::Display for ObjBody {2746 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2747 std::fmt::Display::fmt(self.syntax(), f)2748 }2749}2750impl std::fmt::Display for CompSpec {2751 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2752 std::fmt::Display::fmt(self.syntax(), f)2753 }2754}2755impl std::fmt::Display for Bind {2756 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2757 std::fmt::Display::fmt(self.syntax(), f)2758 }2759}2760impl std::fmt::Display for ExprBase {2761 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2762 std::fmt::Display::fmt(self.syntax(), f)2763 }2764}2765impl std::fmt::Display for MemberComp {2766 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2767 std::fmt::Display::fmt(self.syntax(), f)2768 }2769}2770impl std::fmt::Display for Member {2771 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2772 std::fmt::Display::fmt(self.syntax(), f)2773 }2774}2775impl std::fmt::Display for FieldName {2776 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2777 std::fmt::Display::fmt(self.syntax(), f)2778 }2779}2780impl std::fmt::Display for Destruct {2781 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2782 std::fmt::Display::fmt(self.syntax(), f)2783 }2784}2785impl std::fmt::Display for DestructArrayPart {2786 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2787 std::fmt::Display::fmt(self.syntax(), f)2788 }2789}2790impl std::fmt::Display for SourceFile {2791 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2792 std::fmt::Display::fmt(self.syntax(), f)2793 }2794}2795impl std::fmt::Display for Expr {2796 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2797 std::fmt::Display::fmt(self.syntax(), f)2798 }2799}2800impl std::fmt::Display for ExprBinary {2801 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2802 std::fmt::Display::fmt(self.syntax(), f)2803 }2804}2805impl std::fmt::Display for LhsExpr {2806 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2807 std::fmt::Display::fmt(self.syntax(), f)2808 }2809}2810impl std::fmt::Display for ExprUnary {2811 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2812 std::fmt::Display::fmt(self.syntax(), f)2813 }2814}2815impl std::fmt::Display for ExprSlice {2816 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2817 std::fmt::Display::fmt(self.syntax(), f)2818 }2819}2820impl std::fmt::Display for SliceDesc {2821 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2822 std::fmt::Display::fmt(self.syntax(), f)2823 }2824}2825impl std::fmt::Display for ExprIndex {2826 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2827 std::fmt::Display::fmt(self.syntax(), f)2828 }2829}2830impl std::fmt::Display for Name {2831 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2832 std::fmt::Display::fmt(self.syntax(), f)2833 }2834}2835impl std::fmt::Display for ExprIndexExpr {2836 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2837 std::fmt::Display::fmt(self.syntax(), f)2838 }2839}2840impl std::fmt::Display for ExprApply {2841 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2842 std::fmt::Display::fmt(self.syntax(), f)2843 }2844}2845impl std::fmt::Display for ArgsDesc {2846 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2847 std::fmt::Display::fmt(self.syntax(), f)2848 }2849}2850impl std::fmt::Display for ExprObjExtend {2851 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2852 std::fmt::Display::fmt(self.syntax(), f)2853 }2854}2855impl std::fmt::Display for ExprParened {2856 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2857 std::fmt::Display::fmt(self.syntax(), f)2858 }2859}2860impl std::fmt::Display for ExprLiteral {2861 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2862 std::fmt::Display::fmt(self.syntax(), f)2863 }2864}2865impl std::fmt::Display for ExprString {2866 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2867 std::fmt::Display::fmt(self.syntax(), f)2868 }2869}2870impl std::fmt::Display for ExprNumber {2871 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2872 std::fmt::Display::fmt(self.syntax(), f)2873 }2874}2875impl std::fmt::Display for ExprArray {2876 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2877 std::fmt::Display::fmt(self.syntax(), f)2878 }2879}2880impl std::fmt::Display for ExprObject {2881 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2882 std::fmt::Display::fmt(self.syntax(), f)2883 }2884}2885impl std::fmt::Display for ExprArrayComp {2886 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2887 std::fmt::Display::fmt(self.syntax(), f)2888 }2889}2890impl std::fmt::Display for ExprImport {2891 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2892 std::fmt::Display::fmt(self.syntax(), f)2893 }2894}2895impl std::fmt::Display for ExprVar {2896 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2897 std::fmt::Display::fmt(self.syntax(), f)2898 }2899}2900impl std::fmt::Display for ExprIfThenElse {2901 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2902 std::fmt::Display::fmt(self.syntax(), f)2903 }2904}2905impl std::fmt::Display for TrueExpr {2906 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2907 std::fmt::Display::fmt(self.syntax(), f)2908 }2909}2910impl std::fmt::Display for FalseExpr {2911 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2912 std::fmt::Display::fmt(self.syntax(), f)2913 }2914}2915impl std::fmt::Display for ExprFunction {2916 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2917 std::fmt::Display::fmt(self.syntax(), f)2918 }2919}2920impl std::fmt::Display for ParamsDesc {2921 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2922 std::fmt::Display::fmt(self.syntax(), f)2923 }2924}2925impl std::fmt::Display for ExprAssert {2926 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2927 std::fmt::Display::fmt(self.syntax(), f)2928 }2929}2930impl std::fmt::Display for Assertion {2931 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2932 std::fmt::Display::fmt(self.syntax(), f)2933 }2934}2935impl std::fmt::Display for ExprError {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 StmtLocal {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 SliceDescEnd {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 SliceDescStep {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 Arg {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 ObjBodyComp {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 ObjBodyMemberList {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 MemberBindStmt {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 ObjLocal {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 MemberAssertStmt {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 MemberFieldNormal {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 MemberFieldMethod {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 FieldNameFixed {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 FieldNameDynamic {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 ForSpec {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 IfSpec {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 BindDestruct {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 BindFunction {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 Param {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 DestructFull {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 DestructSkip {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 DestructArray {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 DestructObject {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 DestructObjectField {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 DestructRest {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 DestructArrayElement {3061 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3062 std::fmt::Display::fmt(self.syntax(), f)3063 }3064}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
@@ -143,8 +143,6 @@
IMPORTBIN_KW,
#[token("import")]
IMPORT_KW,
- #[token("local")]
- LOCAL_KW,
#[token("if")]
IF_KW,
#[token("then")]
@@ -155,6 +153,8 @@
FUNCTION_KW,
#[token("error")]
ERROR_KW,
+ #[token("local")]
+ LOCAL_KW,
#[token("in")]
IN_KW,
META_OBJECT_APPLY,
@@ -180,6 +180,7 @@
#[error]
LEXING_ERROR,
SOURCE_FILE,
+ EXPR,
EXPR_BINARY,
LHS_EXPR,
EXPR_UNARY,
@@ -200,7 +201,6 @@
EXPR_ARRAY_COMP,
EXPR_IMPORT,
EXPR_VAR,
- EXPR_LOCAL,
EXPR_IF_THEN_ELSE,
TRUE_EXPR,
FALSE_EXPR,
@@ -209,6 +209,7 @@
EXPR_ASSERT,
ASSERTION,
EXPR_ERROR,
+ STMT_LOCAL,
SLICE_DESC_END,
SLICE_DESC_STEP,
ARG,
@@ -233,10 +234,10 @@
DESTRUCT_OBJECT_FIELD,
DESTRUCT_REST,
DESTRUCT_ARRAY_ELEMENT,
- EXPR,
OBJ_BODY,
COMP_SPEC,
BIND,
+ EXPR_BASE,
MEMBER_COMP,
MEMBER,
FIELD_NAME,
@@ -262,17 +263,17 @@
| PLUS | MINUS | MUL | DIV | MODULO | NOT | BIT_NOT | L_BRACK | R_BRACK | L_PAREN
| R_PAREN | L_BRACE | R_BRACE | COLON | COLONCOLON | COLONCOLONCOLON | SEMI | DOT
| DOTDOTDOT | COMMA | DOLLAR | ASSIGN | QUESTION_MARK | TAILSTRICT_KW
- | IMPORTSTR_KW | IMPORTBIN_KW | IMPORT_KW | LOCAL_KW | IF_KW | THEN_KW | ELSE_KW
- | FUNCTION_KW | ERROR_KW | IN_KW | NULL_KW | TRUE_KW | FALSE_KW | SELF_KW
- | SUPER_KW | FOR_KW | ASSERT_KW => true,
+ | IMPORTSTR_KW | IMPORTBIN_KW | IMPORT_KW | IF_KW | THEN_KW | ELSE_KW | FUNCTION_KW
+ | ERROR_KW | LOCAL_KW | IN_KW | NULL_KW | TRUE_KW | FALSE_KW | SELF_KW | SUPER_KW
+ | FOR_KW | ASSERT_KW => true,
_ => false,
}
}
pub fn is_enum(self) -> bool {
match self {
- EXPR | OBJ_BODY | COMP_SPEC | BIND | MEMBER_COMP | MEMBER | FIELD_NAME | DESTRUCT
- | DESTRUCT_ARRAY_PART | BINARY_OPERATOR | UNARY_OPERATOR | LITERAL | TEXT | NUMBER
- | IMPORT_KIND | VISIBILITY | TRIVIA | CUSTOM_ERROR => true,
+ OBJ_BODY | COMP_SPEC | BIND | EXPR_BASE | MEMBER_COMP | MEMBER | FIELD_NAME
+ | DESTRUCT | DESTRUCT_ARRAY_PART | BINARY_OPERATOR | UNARY_OPERATOR | LITERAL
+ | TEXT | NUMBER | IMPORT_KIND | VISIBILITY | TRIVIA | CUSTOM_ERROR => true,
_ => false,
}
}
@@ -285,5 +286,5 @@
}
}
#[macro_export]
-macro_rules ! T { [||] => { $ crate :: SyntaxKind :: OR } ; [&&] => { $ crate :: SyntaxKind :: AND } ; [|] => { $ crate :: SyntaxKind :: BIT_OR } ; [^] => { $ crate :: SyntaxKind :: BIT_XOR } ; [&] => { $ crate :: SyntaxKind :: BIT_AND } ; [==] => { $ crate :: SyntaxKind :: EQ } ; [!=] => { $ crate :: SyntaxKind :: NE } ; [<] => { $ crate :: SyntaxKind :: LT } ; [>] => { $ crate :: SyntaxKind :: GT } ; [<=] => { $ crate :: SyntaxKind :: LE } ; [>=] => { $ crate :: SyntaxKind :: GE } ; [<<] => { $ crate :: SyntaxKind :: LHS } ; [>>] => { $ crate :: SyntaxKind :: RHS } ; [+] => { $ crate :: SyntaxKind :: PLUS } ; [-] => { $ crate :: SyntaxKind :: MINUS } ; [*] => { $ crate :: SyntaxKind :: MUL } ; [/] => { $ crate :: SyntaxKind :: DIV } ; [%] => { $ crate :: SyntaxKind :: MODULO } ; [!] => { $ crate :: SyntaxKind :: NOT } ; [~] => { $ crate :: SyntaxKind :: BIT_NOT } ; ['['] => { $ crate :: SyntaxKind :: L_BRACK } ; [']'] => { $ crate :: SyntaxKind :: R_BRACK } ; ['('] => { $ crate :: SyntaxKind :: L_PAREN } ; [')'] => { $ crate :: SyntaxKind :: R_PAREN } ; ['{'] => { $ crate :: SyntaxKind :: L_BRACE } ; ['}'] => { $ crate :: SyntaxKind :: R_BRACE } ; [:] => { $ crate :: SyntaxKind :: COLON } ; [::] => { $ crate :: SyntaxKind :: COLONCOLON } ; [:::] => { $ crate :: SyntaxKind :: COLONCOLONCOLON } ; [;] => { $ crate :: SyntaxKind :: SEMI } ; [.] => { $ crate :: SyntaxKind :: DOT } ; [...] => { $ crate :: SyntaxKind :: DOTDOTDOT } ; [,] => { $ crate :: SyntaxKind :: COMMA } ; ['$'] => { $ crate :: SyntaxKind :: DOLLAR } ; [=] => { $ crate :: SyntaxKind :: ASSIGN } ; [?] => { $ crate :: SyntaxKind :: QUESTION_MARK } ; [tailstrict] => { $ crate :: SyntaxKind :: TAILSTRICT_KW } ; [importstr] => { $ crate :: SyntaxKind :: IMPORTSTR_KW } ; [importbin] => { $ crate :: SyntaxKind :: IMPORTBIN_KW } ; [import] => { $ crate :: SyntaxKind :: IMPORT_KW } ; [local] => { $ crate :: SyntaxKind :: LOCAL_KW } ; [if] => { $ crate :: SyntaxKind :: IF_KW } ; [then] => { $ crate :: SyntaxKind :: THEN_KW } ; [else] => { $ crate :: SyntaxKind :: ELSE_KW } ; [function] => { $ crate :: SyntaxKind :: FUNCTION_KW } ; [error] => { $ crate :: SyntaxKind :: ERROR_KW } ; [in] => { $ crate :: SyntaxKind :: IN_KW } ; [null] => { $ crate :: SyntaxKind :: NULL_KW } ; [true] => { $ crate :: SyntaxKind :: TRUE_KW } ; [false] => { $ crate :: SyntaxKind :: FALSE_KW } ; [self] => { $ crate :: SyntaxKind :: SELF_KW } ; [super] => { $ crate :: SyntaxKind :: SUPER_KW } ; [for] => { $ crate :: SyntaxKind :: FOR_KW } ; [assert] => { $ crate :: SyntaxKind :: ASSERT_KW } }
+macro_rules ! T { [||] => { $ crate :: SyntaxKind :: OR } ; [&&] => { $ crate :: SyntaxKind :: AND } ; [|] => { $ crate :: SyntaxKind :: BIT_OR } ; [^] => { $ crate :: SyntaxKind :: BIT_XOR } ; [&] => { $ crate :: SyntaxKind :: BIT_AND } ; [==] => { $ crate :: SyntaxKind :: EQ } ; [!=] => { $ crate :: SyntaxKind :: NE } ; [<] => { $ crate :: SyntaxKind :: LT } ; [>] => { $ crate :: SyntaxKind :: GT } ; [<=] => { $ crate :: SyntaxKind :: LE } ; [>=] => { $ crate :: SyntaxKind :: GE } ; [<<] => { $ crate :: SyntaxKind :: LHS } ; [>>] => { $ crate :: SyntaxKind :: RHS } ; [+] => { $ crate :: SyntaxKind :: PLUS } ; [-] => { $ crate :: SyntaxKind :: MINUS } ; [*] => { $ crate :: SyntaxKind :: MUL } ; [/] => { $ crate :: SyntaxKind :: DIV } ; [%] => { $ crate :: SyntaxKind :: MODULO } ; [!] => { $ crate :: SyntaxKind :: NOT } ; [~] => { $ crate :: SyntaxKind :: BIT_NOT } ; ['['] => { $ crate :: SyntaxKind :: L_BRACK } ; [']'] => { $ crate :: SyntaxKind :: R_BRACK } ; ['('] => { $ crate :: SyntaxKind :: L_PAREN } ; [')'] => { $ crate :: SyntaxKind :: R_PAREN } ; ['{'] => { $ crate :: SyntaxKind :: L_BRACE } ; ['}'] => { $ crate :: SyntaxKind :: R_BRACE } ; [:] => { $ crate :: SyntaxKind :: COLON } ; [::] => { $ crate :: SyntaxKind :: COLONCOLON } ; [:::] => { $ crate :: SyntaxKind :: COLONCOLONCOLON } ; [;] => { $ crate :: SyntaxKind :: SEMI } ; [.] => { $ crate :: SyntaxKind :: DOT } ; [...] => { $ crate :: SyntaxKind :: DOTDOTDOT } ; [,] => { $ crate :: SyntaxKind :: COMMA } ; ['$'] => { $ crate :: SyntaxKind :: DOLLAR } ; [=] => { $ crate :: SyntaxKind :: ASSIGN } ; [?] => { $ crate :: SyntaxKind :: QUESTION_MARK } ; [tailstrict] => { $ crate :: SyntaxKind :: TAILSTRICT_KW } ; [importstr] => { $ crate :: SyntaxKind :: IMPORTSTR_KW } ; [importbin] => { $ crate :: SyntaxKind :: IMPORTBIN_KW } ; [import] => { $ crate :: SyntaxKind :: IMPORT_KW } ; [if] => { $ crate :: SyntaxKind :: IF_KW } ; [then] => { $ crate :: SyntaxKind :: THEN_KW } ; [else] => { $ crate :: SyntaxKind :: ELSE_KW } ; [function] => { $ crate :: SyntaxKind :: FUNCTION_KW } ; [error] => { $ crate :: SyntaxKind :: ERROR_KW } ; [local] => { $ crate :: SyntaxKind :: LOCAL_KW } ; [in] => { $ crate :: SyntaxKind :: IN_KW } ; [null] => { $ crate :: SyntaxKind :: NULL_KW } ; [true] => { $ crate :: SyntaxKind :: TRUE_KW } ; [false] => { $ crate :: SyntaxKind :: FALSE_KW } ; [self] => { $ crate :: SyntaxKind :: SELF_KW } ; [super] => { $ crate :: SyntaxKind :: SUPER_KW } ; [for] => { $ crate :: SyntaxKind :: FOR_KW } ; [assert] => { $ crate :: SyntaxKind :: ASSERT_KW } }
pub use T;
crates/jrsonnet-rowan-parser/src/parser.rsdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/parser.rs
+++ b/crates/jrsonnet-rowan-parser/src/parser.rs
@@ -293,6 +293,26 @@
}
fn expr(p: &mut Parser) -> CompletedMarker {
+ while p.at(T![local]) {
+ let m = p.start();
+
+ p.bump();
+ loop {
+ if p.at(T![;]) {
+ p.bump();
+ break;
+ }
+ bind(p);
+
+ if p.at(T![,]) {
+ p.bump();
+ continue;
+ }
+ p.expect(T![;]);
+ break;
+ }
+ m.complete(p, STMT_LOCAL);
+ }
match expr_binding_power(p, 0) {
Ok(m) => m,
Err(m) => m,
@@ -658,6 +678,7 @@
m.complete(p, SLICE_DESC);
true
}
+
fn lhs(p: &mut Parser) -> Result<CompletedMarker, CompletedMarker> {
let mut lhs = lhs_basic(p)?;
@@ -853,25 +874,6 @@
array(p)
} else if p.at(T!['{']) {
object(p)
- } else if p.at(T![local]) {
- let m = p.start();
- p.bump();
- loop {
- if p.at(T![;]) {
- p.bump();
- break;
- }
- bind(p);
-
- if p.at(T![,]) {
- p.bump();
- continue;
- }
- p.expect(T![;]);
- break;
- }
- expr(p);
- m.complete(p, EXPR_LOCAL)
} else if p.at(T![function]) {
let m = p.start();
p.bump();
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__continue_after_total_failure.snapdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__continue_after_total_failure.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__continue_after_total_failure.snap
@@ -3,7 +3,7 @@
expression: "local intr = $intrinsic(test);\n\nlocal a = 1, b = 2, c = a + b;\n\n[c]\n"
---
SOURCE_FILE@0..68
- EXPR_LOCAL@0..29
+ STMT_LOCAL@0..23
LOCAL_KW@0..5 "local"
WHITESPACE@5..6 " "
BIND_DESTRUCT@6..14
@@ -17,12 +17,12 @@
DOLLAR@13..14 "$"
ERROR_UNEXPECTED_TOKEN@14..23
IDENT@14..23 "intrinsic"
- EXPR_PARENED@23..29
- L_PAREN@23..24 "("
- EXPR_VAR@24..28
- NAME@24..28
- IDENT@24..28 "test"
- R_PAREN@28..29 ")"
+ EXPR_PARENED@23..29
+ L_PAREN@23..24 "("
+ EXPR_VAR@24..28
+ NAME@24..28
+ IDENT@24..28 "test"
+ R_PAREN@28..29 ")"
ERROR_CUSTOM@29..67
SEMI@29..30 ";"
WHITESPACE@30..32 "\n\n"
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__destruct.snapdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__destruct.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__destruct.snap
@@ -3,7 +3,7 @@
expression: "local [a, b, c] = arr;\nlocal [a, ...] = arr_rest;\nlocal [..., a] = rest_arr;\nlocal [...] = rest_in_arr;\nlocal [a, ...n] = arr_rest_n;\nlocal [...n, a] = rest_arr_n;\nlocal [...n] = rest_in_arr_n;\n\nlocal {a, b, c} = obj;\nlocal {a, b, c, ...} = obj_rest;\nlocal {a, b, c, ...n} = obj_rest_n;\n\nnull\n"
---
SOURCE_FILE@0..293
- EXPR_LOCAL@0..292
+ STMT_LOCAL@0..22
LOCAL_KW@0..5 "local"
WHITESPACE@5..6 " "
BIND_DESTRUCT@6..21
@@ -30,226 +30,225 @@
NAME@18..21
IDENT@18..21 "arr"
SEMI@21..22 ";"
- WHITESPACE@22..23 "\n"
- EXPR_LOCAL@23..292
- LOCAL_KW@23..28 "local"
- WHITESPACE@28..29 " "
- BIND_DESTRUCT@29..48
- DESTRUCT_ARRAY@29..37
- L_BRACK@29..30 "["
- DESTRUCT_FULL@30..31
- NAME@30..31
- IDENT@30..31 "a"
- COMMA@31..32 ","
- WHITESPACE@32..33 " "
- DESTRUCT_REST@33..36
- DOTDOTDOT@33..36 "..."
- R_BRACK@36..37 "]"
- WHITESPACE@37..38 " "
- ASSIGN@38..39 "="
- WHITESPACE@39..40 " "
- EXPR_VAR@40..48
- NAME@40..48
- IDENT@40..48 "arr_rest"
- SEMI@48..49 ";"
- WHITESPACE@49..50 "\n"
- EXPR_LOCAL@50..292
- LOCAL_KW@50..55 "local"
- WHITESPACE@55..56 " "
- BIND_DESTRUCT@56..75
- DESTRUCT_ARRAY@56..64
- L_BRACK@56..57 "["
- DESTRUCT_REST@57..60
- DOTDOTDOT@57..60 "..."
- COMMA@60..61 ","
- WHITESPACE@61..62 " "
- DESTRUCT_FULL@62..63
- NAME@62..63
- IDENT@62..63 "a"
- R_BRACK@63..64 "]"
- WHITESPACE@64..65 " "
- ASSIGN@65..66 "="
- WHITESPACE@66..67 " "
- EXPR_VAR@67..75
- NAME@67..75
- IDENT@67..75 "rest_arr"
- SEMI@75..76 ";"
- WHITESPACE@76..77 "\n"
- EXPR_LOCAL@77..292
- LOCAL_KW@77..82 "local"
- WHITESPACE@82..83 " "
- BIND_DESTRUCT@83..102
- DESTRUCT_ARRAY@83..88
- L_BRACK@83..84 "["
- DESTRUCT_REST@84..87
- DOTDOTDOT@84..87 "..."
- R_BRACK@87..88 "]"
- WHITESPACE@88..89 " "
- ASSIGN@89..90 "="
- WHITESPACE@90..91 " "
- EXPR_VAR@91..102
- NAME@91..102
- IDENT@91..102 "rest_in_arr"
- SEMI@102..103 ";"
- WHITESPACE@103..104 "\n"
- EXPR_LOCAL@104..292
- LOCAL_KW@104..109 "local"
- WHITESPACE@109..110 " "
- BIND_DESTRUCT@110..132
- DESTRUCT_ARRAY@110..119
- L_BRACK@110..111 "["
- DESTRUCT_FULL@111..112
- NAME@111..112
- IDENT@111..112 "a"
- COMMA@112..113 ","
- WHITESPACE@113..114 " "
- DESTRUCT_REST@114..118
- DOTDOTDOT@114..117 "..."
- IDENT@117..118 "n"
- R_BRACK@118..119 "]"
- WHITESPACE@119..120 " "
- ASSIGN@120..121 "="
- WHITESPACE@121..122 " "
- EXPR_VAR@122..132
- NAME@122..132
- IDENT@122..132 "arr_rest_n"
- SEMI@132..133 ";"
- WHITESPACE@133..134 "\n"
- EXPR_LOCAL@134..292
- LOCAL_KW@134..139 "local"
- WHITESPACE@139..140 " "
- BIND_DESTRUCT@140..162
- DESTRUCT_ARRAY@140..149
- L_BRACK@140..141 "["
- DESTRUCT_REST@141..145
- DOTDOTDOT@141..144 "..."
- IDENT@144..145 "n"
- COMMA@145..146 ","
- WHITESPACE@146..147 " "
- DESTRUCT_FULL@147..148
- NAME@147..148
- IDENT@147..148 "a"
- R_BRACK@148..149 "]"
- WHITESPACE@149..150 " "
- ASSIGN@150..151 "="
- WHITESPACE@151..152 " "
- EXPR_VAR@152..162
- NAME@152..162
- IDENT@152..162 "rest_arr_n"
- SEMI@162..163 ";"
- WHITESPACE@163..164 "\n"
- EXPR_LOCAL@164..292
- LOCAL_KW@164..169 "local"
- WHITESPACE@169..170 " "
- BIND_DESTRUCT@170..192
- DESTRUCT_ARRAY@170..176
- L_BRACK@170..171 "["
- DESTRUCT_REST@171..175
- DOTDOTDOT@171..174 "..."
- IDENT@174..175 "n"
- R_BRACK@175..176 "]"
- WHITESPACE@176..177 " "
- ASSIGN@177..178 "="
- WHITESPACE@178..179 " "
- EXPR_VAR@179..192
- NAME@179..192
- IDENT@179..192 "rest_in_arr_n"
- SEMI@192..193 ";"
- WHITESPACE@193..195 "\n\n"
- EXPR_LOCAL@195..292
- LOCAL_KW@195..200 "local"
- WHITESPACE@200..201 " "
- BIND_DESTRUCT@201..216
- DESTRUCT_OBJECT@201..210
- L_BRACE@201..202 "{"
- DESTRUCT_OBJECT_FIELD@202..203
- NAME@202..203
- IDENT@202..203 "a"
- COMMA@203..204 ","
- WHITESPACE@204..205 " "
- DESTRUCT_OBJECT_FIELD@205..206
- NAME@205..206
- IDENT@205..206 "b"
- COMMA@206..207 ","
- WHITESPACE@207..208 " "
- DESTRUCT_OBJECT_FIELD@208..209
- NAME@208..209
- IDENT@208..209 "c"
- R_BRACE@209..210 "}"
- WHITESPACE@210..211 " "
- ASSIGN@211..212 "="
- WHITESPACE@212..213 " "
- EXPR_VAR@213..216
- NAME@213..216
- IDENT@213..216 "obj"
- SEMI@216..217 ";"
- WHITESPACE@217..218 "\n"
- EXPR_LOCAL@218..292
- LOCAL_KW@218..223 "local"
- WHITESPACE@223..224 " "
- BIND_DESTRUCT@224..249
- DESTRUCT_OBJECT@224..238
- L_BRACE@224..225 "{"
- DESTRUCT_OBJECT_FIELD@225..226
- NAME@225..226
- IDENT@225..226 "a"
- COMMA@226..227 ","
- WHITESPACE@227..228 " "
- DESTRUCT_OBJECT_FIELD@228..229
- NAME@228..229
- IDENT@228..229 "b"
- COMMA@229..230 ","
- WHITESPACE@230..231 " "
- DESTRUCT_OBJECT_FIELD@231..232
- NAME@231..232
- IDENT@231..232 "c"
- COMMA@232..233 ","
- WHITESPACE@233..234 " "
- DESTRUCT_REST@234..237
- DOTDOTDOT@234..237 "..."
- R_BRACE@237..238 "}"
- WHITESPACE@238..239 " "
- ASSIGN@239..240 "="
- WHITESPACE@240..241 " "
- EXPR_VAR@241..249
- NAME@241..249
- IDENT@241..249 "obj_rest"
- SEMI@249..250 ";"
- WHITESPACE@250..251 "\n"
- EXPR_LOCAL@251..292
- LOCAL_KW@251..256 "local"
- WHITESPACE@256..257 " "
- BIND_DESTRUCT@257..285
- DESTRUCT_OBJECT@257..272
- L_BRACE@257..258 "{"
- DESTRUCT_OBJECT_FIELD@258..259
- NAME@258..259
- IDENT@258..259 "a"
- COMMA@259..260 ","
- WHITESPACE@260..261 " "
- DESTRUCT_OBJECT_FIELD@261..262
- NAME@261..262
- IDENT@261..262 "b"
- COMMA@262..263 ","
- WHITESPACE@263..264 " "
- DESTRUCT_OBJECT_FIELD@264..265
- NAME@264..265
- IDENT@264..265 "c"
- COMMA@265..266 ","
- WHITESPACE@266..267 " "
- DESTRUCT_REST@267..271
- DOTDOTDOT@267..270 "..."
- IDENT@270..271 "n"
- R_BRACE@271..272 "}"
- WHITESPACE@272..273 " "
- ASSIGN@273..274 "="
- WHITESPACE@274..275 " "
- EXPR_VAR@275..285
- NAME@275..285
- IDENT@275..285 "obj_rest_n"
- SEMI@285..286 ";"
- WHITESPACE@286..288 "\n\n"
- EXPR_LITERAL@288..292
- NULL_KW@288..292 "null"
+ WHITESPACE@22..23 "\n"
+ STMT_LOCAL@23..49
+ LOCAL_KW@23..28 "local"
+ WHITESPACE@28..29 " "
+ BIND_DESTRUCT@29..48
+ DESTRUCT_ARRAY@29..37
+ L_BRACK@29..30 "["
+ DESTRUCT_FULL@30..31
+ NAME@30..31
+ IDENT@30..31 "a"
+ COMMA@31..32 ","
+ WHITESPACE@32..33 " "
+ DESTRUCT_REST@33..36
+ DOTDOTDOT@33..36 "..."
+ R_BRACK@36..37 "]"
+ WHITESPACE@37..38 " "
+ ASSIGN@38..39 "="
+ WHITESPACE@39..40 " "
+ EXPR_VAR@40..48
+ NAME@40..48
+ IDENT@40..48 "arr_rest"
+ SEMI@48..49 ";"
+ WHITESPACE@49..50 "\n"
+ STMT_LOCAL@50..76
+ LOCAL_KW@50..55 "local"
+ WHITESPACE@55..56 " "
+ BIND_DESTRUCT@56..75
+ DESTRUCT_ARRAY@56..64
+ L_BRACK@56..57 "["
+ DESTRUCT_REST@57..60
+ DOTDOTDOT@57..60 "..."
+ COMMA@60..61 ","
+ WHITESPACE@61..62 " "
+ DESTRUCT_FULL@62..63
+ NAME@62..63
+ IDENT@62..63 "a"
+ R_BRACK@63..64 "]"
+ WHITESPACE@64..65 " "
+ ASSIGN@65..66 "="
+ WHITESPACE@66..67 " "
+ EXPR_VAR@67..75
+ NAME@67..75
+ IDENT@67..75 "rest_arr"
+ SEMI@75..76 ";"
+ WHITESPACE@76..77 "\n"
+ STMT_LOCAL@77..103
+ LOCAL_KW@77..82 "local"
+ WHITESPACE@82..83 " "
+ BIND_DESTRUCT@83..102
+ DESTRUCT_ARRAY@83..88
+ L_BRACK@83..84 "["
+ DESTRUCT_REST@84..87
+ DOTDOTDOT@84..87 "..."
+ R_BRACK@87..88 "]"
+ WHITESPACE@88..89 " "
+ ASSIGN@89..90 "="
+ WHITESPACE@90..91 " "
+ EXPR_VAR@91..102
+ NAME@91..102
+ IDENT@91..102 "rest_in_arr"
+ SEMI@102..103 ";"
+ WHITESPACE@103..104 "\n"
+ STMT_LOCAL@104..133
+ LOCAL_KW@104..109 "local"
+ WHITESPACE@109..110 " "
+ BIND_DESTRUCT@110..132
+ DESTRUCT_ARRAY@110..119
+ L_BRACK@110..111 "["
+ DESTRUCT_FULL@111..112
+ NAME@111..112
+ IDENT@111..112 "a"
+ COMMA@112..113 ","
+ WHITESPACE@113..114 " "
+ DESTRUCT_REST@114..118
+ DOTDOTDOT@114..117 "..."
+ IDENT@117..118 "n"
+ R_BRACK@118..119 "]"
+ WHITESPACE@119..120 " "
+ ASSIGN@120..121 "="
+ WHITESPACE@121..122 " "
+ EXPR_VAR@122..132
+ NAME@122..132
+ IDENT@122..132 "arr_rest_n"
+ SEMI@132..133 ";"
+ WHITESPACE@133..134 "\n"
+ STMT_LOCAL@134..163
+ LOCAL_KW@134..139 "local"
+ WHITESPACE@139..140 " "
+ BIND_DESTRUCT@140..162
+ DESTRUCT_ARRAY@140..149
+ L_BRACK@140..141 "["
+ DESTRUCT_REST@141..145
+ DOTDOTDOT@141..144 "..."
+ IDENT@144..145 "n"
+ COMMA@145..146 ","
+ WHITESPACE@146..147 " "
+ DESTRUCT_FULL@147..148
+ NAME@147..148
+ IDENT@147..148 "a"
+ R_BRACK@148..149 "]"
+ WHITESPACE@149..150 " "
+ ASSIGN@150..151 "="
+ WHITESPACE@151..152 " "
+ EXPR_VAR@152..162
+ NAME@152..162
+ IDENT@152..162 "rest_arr_n"
+ SEMI@162..163 ";"
+ WHITESPACE@163..164 "\n"
+ STMT_LOCAL@164..193
+ LOCAL_KW@164..169 "local"
+ WHITESPACE@169..170 " "
+ BIND_DESTRUCT@170..192
+ DESTRUCT_ARRAY@170..176
+ L_BRACK@170..171 "["
+ DESTRUCT_REST@171..175
+ DOTDOTDOT@171..174 "..."
+ IDENT@174..175 "n"
+ R_BRACK@175..176 "]"
+ WHITESPACE@176..177 " "
+ ASSIGN@177..178 "="
+ WHITESPACE@178..179 " "
+ EXPR_VAR@179..192
+ NAME@179..192
+ IDENT@179..192 "rest_in_arr_n"
+ SEMI@192..193 ";"
+ WHITESPACE@193..195 "\n\n"
+ STMT_LOCAL@195..217
+ LOCAL_KW@195..200 "local"
+ WHITESPACE@200..201 " "
+ BIND_DESTRUCT@201..216
+ DESTRUCT_OBJECT@201..210
+ L_BRACE@201..202 "{"
+ DESTRUCT_OBJECT_FIELD@202..203
+ NAME@202..203
+ IDENT@202..203 "a"
+ COMMA@203..204 ","
+ WHITESPACE@204..205 " "
+ DESTRUCT_OBJECT_FIELD@205..206
+ NAME@205..206
+ IDENT@205..206 "b"
+ COMMA@206..207 ","
+ WHITESPACE@207..208 " "
+ DESTRUCT_OBJECT_FIELD@208..209
+ NAME@208..209
+ IDENT@208..209 "c"
+ R_BRACE@209..210 "}"
+ WHITESPACE@210..211 " "
+ ASSIGN@211..212 "="
+ WHITESPACE@212..213 " "
+ EXPR_VAR@213..216
+ NAME@213..216
+ IDENT@213..216 "obj"
+ SEMI@216..217 ";"
+ WHITESPACE@217..218 "\n"
+ STMT_LOCAL@218..250
+ LOCAL_KW@218..223 "local"
+ WHITESPACE@223..224 " "
+ BIND_DESTRUCT@224..249
+ DESTRUCT_OBJECT@224..238
+ L_BRACE@224..225 "{"
+ DESTRUCT_OBJECT_FIELD@225..226
+ NAME@225..226
+ IDENT@225..226 "a"
+ COMMA@226..227 ","
+ WHITESPACE@227..228 " "
+ DESTRUCT_OBJECT_FIELD@228..229
+ NAME@228..229
+ IDENT@228..229 "b"
+ COMMA@229..230 ","
+ WHITESPACE@230..231 " "
+ DESTRUCT_OBJECT_FIELD@231..232
+ NAME@231..232
+ IDENT@231..232 "c"
+ COMMA@232..233 ","
+ WHITESPACE@233..234 " "
+ DESTRUCT_REST@234..237
+ DOTDOTDOT@234..237 "..."
+ R_BRACE@237..238 "}"
+ WHITESPACE@238..239 " "
+ ASSIGN@239..240 "="
+ WHITESPACE@240..241 " "
+ EXPR_VAR@241..249
+ NAME@241..249
+ IDENT@241..249 "obj_rest"
+ SEMI@249..250 ";"
+ WHITESPACE@250..251 "\n"
+ STMT_LOCAL@251..286
+ LOCAL_KW@251..256 "local"
+ WHITESPACE@256..257 " "
+ BIND_DESTRUCT@257..285
+ DESTRUCT_OBJECT@257..272
+ L_BRACE@257..258 "{"
+ DESTRUCT_OBJECT_FIELD@258..259
+ NAME@258..259
+ IDENT@258..259 "a"
+ COMMA@259..260 ","
+ WHITESPACE@260..261 " "
+ DESTRUCT_OBJECT_FIELD@261..262
+ NAME@261..262
+ IDENT@261..262 "b"
+ COMMA@262..263 ","
+ WHITESPACE@263..264 " "
+ DESTRUCT_OBJECT_FIELD@264..265
+ NAME@264..265
+ IDENT@264..265 "c"
+ COMMA@265..266 ","
+ WHITESPACE@266..267 " "
+ DESTRUCT_REST@267..271
+ DOTDOTDOT@267..270 "..."
+ IDENT@270..271 "n"
+ R_BRACE@271..272 "}"
+ WHITESPACE@272..273 " "
+ ASSIGN@273..274 "="
+ WHITESPACE@274..275 " "
+ EXPR_VAR@275..285
+ NAME@275..285
+ IDENT@275..285 "obj_rest_n"
+ SEMI@285..286 ";"
+ WHITESPACE@286..288 "\n\n"
+ EXPR_LITERAL@288..292
+ NULL_KW@288..292 "null"
WHITESPACE@292..293 "\n"
-
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_method.snapdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_method.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_method.snap
@@ -3,7 +3,7 @@
expression: "local\n\ta(x) = x,\n\ta = function(x) x,\n; c\n"
---
SOURCE_FILE@0..41
- EXPR_LOCAL@0..40
+ STMT_LOCAL@0..38
LOCAL_KW@0..5 "local"
WHITESPACE@5..7 "\n\t"
BIND_FUNCTION@7..15
@@ -45,8 +45,8 @@
COMMA@35..36 ","
WHITESPACE@36..37 "\n"
SEMI@37..38 ";"
- WHITESPACE@38..39 " "
- EXPR_VAR@39..40
- NAME@39..40
- IDENT@39..40 "c"
+ WHITESPACE@38..39 " "
+ EXPR_VAR@39..40
+ NAME@39..40
+ IDENT@39..40 "c"
WHITESPACE@40..41 "\n"
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_no_value_recovery.snapdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_no_value_recovery.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_no_value_recovery.snap
@@ -3,7 +3,7 @@
expression: "local a =\nlocal b = 3;\n1\n"
---
SOURCE_FILE@0..25
- EXPR_LOCAL@0..25
+ STMT_LOCAL@0..25
LOCAL_KW@0..5 "local"
WHITESPACE@5..6 " "
BIND_DESTRUCT@6..24
@@ -13,7 +13,7 @@
WHITESPACE@7..8 " "
ASSIGN@8..9 "="
WHITESPACE@9..10 "\n"
- EXPR_LOCAL@10..24
+ STMT_LOCAL@10..22
LOCAL_KW@10..15 "local"
WHITESPACE@15..16 " "
BIND_DESTRUCT@16..21
@@ -26,12 +26,12 @@
EXPR_NUMBER@20..21
FLOAT@20..21 "3"
SEMI@21..22 ";"
- WHITESPACE@22..23 "\n"
- EXPR_NUMBER@23..24
- FLOAT@23..24 "1"
+ WHITESPACE@22..23 "\n"
+ EXPR_NUMBER@23..24
+ FLOAT@23..24 "1"
WHITESPACE@24..25 "\n"
- ERROR_MISSING_TOKEN@25..25
ERROR_MISSING_TOKEN@25..25
+ ERROR_MISSING_TOKEN@25..25
===
LocatedSyntaxError { error: Missing { expected: Unnamed(SyntaxKindSet([L_BRACK, L_PAREN, L_BRACE, SEMI, DOT, COMMA])) }, range: 25..25 }
LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 25..25 }
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_novalue.snapdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_novalue.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_novalue.snap
@@ -3,7 +3,7 @@
expression: "local a =\n"
---
SOURCE_FILE@0..10
- EXPR_LOCAL@0..10
+ STMT_LOCAL@0..10
LOCAL_KW@0..5 "local"
WHITESPACE@5..6 " "
BIND_DESTRUCT@6..10
@@ -15,7 +15,7 @@
WHITESPACE@9..10 "\n"
ERROR_MISSING_TOKEN@10..10
ERROR_MISSING_TOKEN@10..10
- ERROR_MISSING_TOKEN@10..10
+ ERROR_MISSING_TOKEN@10..10
===
LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 10..10 }
LocatedSyntaxError { error: Missing { expected: Unnamed(SyntaxKindSet([SEMI, COMMA])) }, range: 10..10 }
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
@@ -1,10 +1,10 @@
---
source: crates/jrsonnet-rowan-parser/src/tests.rs
-expression: "{\n local std = self,\n local id = std.id,\n\n thisFile:: error 'std.thisFile is deprecated, to enable its support in jrsonnet - recompile it with \"legacy-this-file\" support.\\nThis will slow down stdlib caching a bit, though',\n\n toString(a):: '' + a,\n\n lstripChars(str, chars)::\n if std.length(str) > 0 && std.member(chars, str[0]) then\n std.lstripChars(str[1:], chars)\n else\n str,\n\n rstripChars(str, chars)::\n local len = std.length(str);\n if len > 0 && std.member(chars, str[len - 1]) then\n std.rstripChars(str[:len - 1], chars)\n else\n str,\n\n stripChars(str, chars)::\n std.lstripChars(std.rstripChars(str, chars), chars),\n\n stringChars(str)::\n std.makeArray(std.length(str), function(i) str[i]),\n\n splitLimitR(str, c, maxsplits)::\n if maxsplits == -1 then\n std.splitLimit(str, c, -1)\n else\n local revStr(str) = std.join('', std.reverse(std.stringChars(str)));\n std.map(function(e) revStr(e), std.reverse(std.splitLimit(revStr(str), revStr(c), maxsplits))),\n\n split(str, c):: std.splitLimit(str, c, -1),\n\n mapWithIndex(func, arr)::\n if !std.isFunction(func) then\n error ('std.mapWithIndex first param must be function, got ' + std.type(func))\n else if !std.isArray(arr) && !std.isString(arr) then\n error ('std.mapWithIndex second param must be array, got ' + std.type(arr))\n else\n std.makeArray(std.length(arr), function(i) func(i, arr[i])),\n\n mapWithKey(func, obj)::\n if !std.isFunction(func) then\n error ('std.mapWithKey first param must be function, got ' + std.type(func))\n else if !std.isObject(obj) then\n error ('std.mapWithKey second param must be object, got ' + std.type(obj))\n else\n { [k]: func(k, obj[k]) for k in std.objectFields(obj) },\n\n lines(arr)::\n std.join('\\n', arr + ['']),\n\n deepJoin(arr)::\n if std.isString(arr) then\n arr\n else if std.isArray(arr) then\n std.join('', [std.deepJoin(x) for x in arr])\n else\n error 'Expected string or array, got %s' % std.type(arr),\n\n filterMap(filter_func, map_func, arr)::\n if !std.isFunction(filter_func) then\n error ('std.filterMap first param must be function, got ' + std.type(filter_func))\n else if !std.isFunction(map_func) then\n error ('std.filterMap second param must be function, got ' + std.type(map_func))\n else if !std.isArray(arr) then\n error ('std.filterMap third param must be array, got ' + std.type(arr))\n else\n std.map(map_func, std.filter(filter_func, arr)),\n\n assertEqual(a, b)::\n if a == b then\n true\n else\n error 'Assertion failed. ' + a + ' != ' + b,\n\n clamp(x, minVal, maxVal)::\n if x < minVal then minVal\n else if x > maxVal then maxVal\n else x,\n\n flattenArrays(arrs)::\n std.foldl(function(a, b) a + b, arrs, []),\n\n manifestIni(ini)::\n local body_lines(body) =\n std.join([], [\n local value_or_values = body[k];\n if std.isArray(value_or_values) then\n ['%s = %s' % [k, value] for value in value_or_values]\n else\n ['%s = %s' % [k, value_or_values]]\n\n for k in std.objectFields(body)\n ]);\n\n local section_lines(sname, sbody) = ['[%s]' % [sname]] + body_lines(sbody),\n main_body = if std.objectHas(ini, 'main') then body_lines(ini.main) else [],\n all_sections = [\n section_lines(k, ini.sections[k])\n for k in std.objectFields(ini.sections)\n ];\n std.join('\\n', main_body + std.flattenArrays(all_sections) + ['']),\n\n manifestToml(value):: std.manifestTomlEx(value, ' '),\n\n escapeStringPython(str)::\n std.escapeStringJson(str),\n\n escapeStringBash(str_)::\n local str = std.toString(str_);\n local trans(ch) =\n if ch == \"'\" then\n \"'\\\"'\\\"'\"\n else\n ch;\n \"'%s'\" % std.join('', [trans(ch) for ch in std.stringChars(str)]),\n\n escapeStringDollars(str_)::\n local str = std.toString(str_);\n local trans(ch) =\n if ch == '$' then\n '$$'\n else\n ch;\n std.foldl(function(a, b) a + trans(b), std.stringChars(str), ''),\n\n local xml_escapes = {\n '<': '<',\n '>': '>',\n '&': '&',\n '\"': '"',\n \"'\": ''',\n },\n\n escapeStringXML(str_)::\n local str = std.toString(str_);\n std.join('', [std.get(xml_escapes, ch, ch) for ch in std.stringChars(str)]),\n\n manifestJson(value):: std.manifestJsonEx(value, ' ') tailstrict,\n\n manifestJsonMinified(value):: std.manifestJsonEx(value, '', '', ':'),\n\n manifestYamlStream(value, indent_array_in_object=false, c_document_end=true, quote_keys=true)::\n if !std.isArray(value) then\n error 'manifestYamlStream only takes arrays, got ' + std.type(value)\n else\n '---\\n' + std.join(\n '\\n---\\n', [std.manifestYamlDoc(e, indent_array_in_object, quote_keys) for e in value]\n ) + if c_document_end then '\\n...\\n' else '\\n',\n\n manifestPython(v)::\n if std.isObject(v) then\n local fields = [\n '%s: %s' % [std.escapeStringPython(k), std.manifestPython(v[k])]\n for k in std.objectFields(v)\n ];\n '{%s}' % [std.join(', ', fields)]\n else if std.isArray(v) then\n '[%s]' % [std.join(', ', [std.manifestPython(v2) for v2 in v])]\n else if std.isString(v) then\n '%s' % [std.escapeStringPython(v)]\n else if std.isFunction(v) then\n error 'cannot manifest function'\n else if std.isNumber(v) then\n std.toString(v)\n else if v == true then\n 'True'\n else if v == false then\n 'False'\n else if v == null then\n 'None',\n\n manifestPythonVars(conf)::\n local vars = ['%s = %s' % [k, std.manifestPython(conf[k])] for k in std.objectFields(conf)];\n std.join('\\n', vars + ['']),\n\n manifestXmlJsonml(value)::\n if !std.isArray(value) then\n error 'Expected a JSONML value (an array), got %s' % std.type(value)\n else\n local aux(v) =\n if std.isString(v) then\n v\n else\n local tag = v[0];\n local has_attrs = std.length(v) > 1 && std.isObject(v[1]);\n local attrs = if has_attrs then v[1] else {};\n local children = if has_attrs then v[2:] else v[1:];\n local attrs_str =\n std.join('', [' %s=\"%s\"' % [k, attrs[k]] for k in std.objectFields(attrs)]);\n std.deepJoin(['<', tag, attrs_str, '>', [aux(x) for x in children], '</', tag, '>']);\n\n aux(value),\n\n uniq(arr, keyF=id)::\n local f(a, b) =\n if std.length(a) == 0 then\n [b]\n else if keyF(a[std.length(a) - 1]) == keyF(b) then\n a\n else\n a + [b];\n std.foldl(f, arr, []),\n\n set(arr, keyF=id)::\n std.uniq(std.sort(arr, keyF), keyF),\n\n setMember(x, arr, keyF=id)::\n // TODO(dcunnin): Binary chop for O(log n) complexity\n std.length(std.setInter([x], arr, keyF)) > 0,\n\n setUnion(a, b, keyF=id)::\n // NOTE: order matters, values in `a` win\n local aux(a, b, i, j, acc) =\n if i >= std.length(a) then\n acc + b[j:]\n else if j >= std.length(b) then\n acc + a[i:]\n else\n local ak = keyF(a[i]);\n local bk = keyF(b[j]);\n if ak == bk then\n aux(a, b, i + 1, j + 1, acc + [a[i]]) tailstrict\n else if ak < bk then\n aux(a, b, i + 1, j, acc + [a[i]]) tailstrict\n else\n aux(a, b, i, j + 1, acc + [b[j]]) tailstrict;\n aux(a, b, 0, 0, []),\n\n setInter(a, b, keyF=id)::\n local aux(a, b, i, j, acc) =\n if i >= std.length(a) || j >= std.length(b) then\n acc\n else\n if keyF(a[i]) == keyF(b[j]) then\n aux(a, b, i + 1, j + 1, acc + [a[i]]) tailstrict\n else if keyF(a[i]) < keyF(b[j]) then\n aux(a, b, i + 1, j, acc) tailstrict\n else\n aux(a, b, i, j + 1, acc) tailstrict;\n aux(a, b, 0, 0, []) tailstrict,\n\n setDiff(a, b, keyF=id)::\n local aux(a, b, i, j, acc) =\n if i >= std.length(a) then\n acc\n else if j >= std.length(b) then\n acc + a[i:]\n else\n if keyF(a[i]) == keyF(b[j]) then\n aux(a, b, i + 1, j + 1, acc) tailstrict\n else if keyF(a[i]) < keyF(b[j]) then\n aux(a, b, i + 1, j, acc + [a[i]]) tailstrict\n else\n aux(a, b, i, j + 1, acc) tailstrict;\n aux(a, b, 0, 0, []) tailstrict,\n\n mergePatch(target, patch)::\n if std.isObject(patch) then\n local target_object =\n if std.isObject(target) then target else {};\n\n local target_fields =\n if std.isObject(target_object) then std.objectFields(target_object) else [];\n\n local null_fields = [k for k in std.objectFields(patch) if patch[k] == null];\n local both_fields = std.setUnion(target_fields, std.objectFields(patch));\n\n {\n [k]:\n if !std.objectHas(patch, k) then\n target_object[k]\n else if !std.objectHas(target_object, k) then\n std.mergePatch(null, patch[k]) tailstrict\n else\n std.mergePatch(target_object[k], patch[k]) tailstrict\n for k in std.setDiff(both_fields, null_fields)\n }\n else\n patch,\n\n get(o, f, default=null, inc_hidden=true)::\n if std.objectHasEx(o, f, inc_hidden) then o[f] else default,\n\n objectFields(o)::\n std.objectFieldsEx(o, false),\n\n objectFieldsAll(o)::\n std.objectFieldsEx(o, true),\n\n objectHas(o, f)::\n std.objectHasEx(o, f, false),\n\n objectHasAll(o, f)::\n std.objectHasEx(o, f, true),\n\n objectValues(o)::\n [o[k] for k in std.objectFields(o)],\n\n objectValuesAll(o)::\n [o[k] for k in std.objectFieldsAll(o)],\n\n resolvePath(f, r)::\n local arr = std.split(f, '/');\n std.join('/', std.makeArray(std.length(arr) - 1, function(i) arr[i]) + [r]),\n\n prune(a)::\n local isContent(b) =\n if b == null then\n false\n else if std.isArray(b) then\n std.length(b) > 0\n else if std.isObject(b) then\n std.length(b) > 0\n else\n true;\n if std.isArray(a) then\n [std.prune(x) for x in a if isContent($.prune(x))]\n else if std.isObject(a) then {\n [x]: $.prune(a[x])\n for x in std.objectFields(a)\n if isContent(std.prune(a[x]))\n } else\n a,\n\n find(value, arr)::\n if !std.isArray(arr) then\n error 'find second parameter should be an array, got ' + std.type(arr)\n else\n std.filter(function(i) arr[i] == value, std.range(0, std.length(arr) - 1)),\n}\n"
+expression: "{\n local std = self,\n local id = std.id,\n\n thisFile:: error 'std.thisFile is deprecated, to enable its support in jrsonnet - recompile it with \"legacy-this-file\" support.\\nThis will slow down stdlib caching a bit, though',\n\n toString(a):: '' + a,\n\n lstripChars(str, chars)::\n if std.length(str) > 0 && std.member(chars, str[0]) then\n std.lstripChars(str[1:], chars)\n else\n str,\n\n rstripChars(str, chars)::\n local len = std.length(str);\n if len > 0 && std.member(chars, str[len - 1]) then\n std.rstripChars(str[:len - 1], chars)\n else\n str,\n\n stripChars(str, chars)::\n std.lstripChars(std.rstripChars(str, chars), chars),\n\n stringChars(str)::\n std.makeArray(std.length(str), function(i) str[i]),\n\n splitLimitR(str, c, maxsplits)::\n if maxsplits == -1 then\n std.splitLimit(str, c, -1)\n else\n local revStr(str) = std.join('', std.reverse(std.stringChars(str)));\n std.map(function(e) revStr(e), std.reverse(std.splitLimit(revStr(str), revStr(c), maxsplits))),\n\n split(str, c):: std.splitLimit(str, c, -1),\n\n mapWithIndex(func, arr)::\n if !std.isFunction(func) then\n error ('std.mapWithIndex first param must be function, got ' + std.type(func))\n else if !std.isArray(arr) && !std.isString(arr) then\n error ('std.mapWithIndex second param must be array, got ' + std.type(arr))\n else\n std.makeArray(std.length(arr), function(i) func(i, arr[i])),\n\n mapWithKey(func, obj)::\n if !std.isFunction(func) then\n error ('std.mapWithKey first param must be function, got ' + std.type(func))\n else if !std.isObject(obj) then\n error ('std.mapWithKey second param must be object, got ' + std.type(obj))\n else\n { [k]: func(k, obj[k]) for k in std.objectFields(obj) },\n\n lines(arr)::\n std.join('\\n', arr + ['']),\n\n deepJoin(arr)::\n if std.isString(arr) then\n arr\n else if std.isArray(arr) then\n std.join('', [std.deepJoin(x) for x in arr])\n else\n error 'Expected string or array, got %s' % std.type(arr),\n\n filterMap(filter_func, map_func, arr)::\n if !std.isFunction(filter_func) then\n error ('std.filterMap first param must be function, got ' + std.type(filter_func))\n else if !std.isFunction(map_func) then\n error ('std.filterMap second param must be function, got ' + std.type(map_func))\n else if !std.isArray(arr) then\n error ('std.filterMap third param must be array, got ' + std.type(arr))\n else\n std.map(map_func, std.filter(filter_func, arr)),\n\n assertEqual(a, b)::\n if a == b then\n true\n else\n error 'Assertion failed. ' + a + ' != ' + b,\n\n clamp(x, minVal, maxVal)::\n if x < minVal then minVal\n else if x > maxVal then maxVal\n else x,\n\n flattenArrays(arrs)::\n std.foldl(function(a, b) a + b, arrs, []),\n\n manifestIni(ini)::\n local body_lines(body) =\n std.join([], [\n local value_or_values = body[k];\n if std.isArray(value_or_values) then\n ['%s = %s' % [k, value] for value in value_or_values]\n else\n ['%s = %s' % [k, value_or_values]]\n\n for k in std.objectFields(body)\n ]);\n\n local section_lines(sname, sbody) = ['[%s]' % [sname]] + body_lines(sbody),\n main_body = if std.objectHas(ini, 'main') then body_lines(ini.main) else [],\n all_sections = [\n section_lines(k, ini.sections[k])\n for k in std.objectFields(ini.sections)\n ];\n std.join('\\n', main_body + std.flattenArrays(all_sections) + ['']),\n\n manifestToml(value):: std.manifestTomlEx(value, ' '),\n\n escapeStringPython(str)::\n std.escapeStringJson(str),\n\n escapeStringBash(str_)::\n local str = std.toString(str_);\n local trans(ch) =\n if ch == \"'\" then\n \"'\\\"'\\\"'\"\n else\n ch;\n \"'%s'\" % std.join('', [trans(ch) for ch in std.stringChars(str)]),\n\n escapeStringDollars(str_)::\n local str = std.toString(str_);\n local trans(ch) =\n if ch == '$' then\n '$$'\n else\n ch;\n std.foldl(function(a, b) a + trans(b), std.stringChars(str), ''),\n\n local xml_escapes = {\n '<': '<',\n '>': '>',\n '&': '&',\n '\"': '"',\n \"'\": ''',\n },\n\n escapeStringXML(str_)::\n local str = std.toString(str_);\n std.join('', [std.get(xml_escapes, ch, ch) for ch in std.stringChars(str)]),\n\n manifestJson(value):: std.manifestJsonEx(value, ' ') tailstrict,\n\n manifestJsonMinified(value):: std.manifestJsonEx(value, '', '', ':'),\n\n manifestYamlStream(value, indent_array_in_object=false, c_document_end=true, quote_keys=true)::\n if !std.isArray(value) then\n error 'manifestYamlStream only takes arrays, got ' + std.type(value)\n else\n '---\\n' + std.join(\n '\\n---\\n', [std.manifestYamlDoc(e, indent_array_in_object, quote_keys) for e in value]\n ) + if c_document_end then '\\n...\\n' else '\\n',\n\n manifestPython(v)::\n if std.isObject(v) then\n local fields = [\n '%s: %s' % [std.escapeStringPython(k), std.manifestPython(v[k])]\n for k in std.objectFields(v)\n ];\n '{%s}' % [std.join(', ', fields)]\n else if std.isArray(v) then\n '[%s]' % [std.join(', ', [std.manifestPython(v2) for v2 in v])]\n else if std.isString(v) then\n '%s' % [std.escapeStringPython(v)]\n else if std.isFunction(v) then\n error 'cannot manifest function'\n else if std.isNumber(v) then\n std.toString(v)\n else if v == true then\n 'True'\n else if v == false then\n 'False'\n else if v == null then\n 'None',\n\n manifestPythonVars(conf)::\n local vars = ['%s = %s' % [k, std.manifestPython(conf[k])] for k in std.objectFields(conf)];\n std.join('\\n', vars + ['']),\n\n manifestXmlJsonml(value)::\n if !std.isArray(value) then\n error 'Expected a JSONML value (an array), got %s' % std.type(value)\n else\n local aux(v) =\n if std.isString(v) then\n v\n else\n local tag = v[0];\n local has_attrs = std.length(v) > 1 && std.isObject(v[1]);\n local attrs = if has_attrs then v[1] else {};\n local children = if has_attrs then v[2:] else v[1:];\n local attrs_str =\n std.join('', [' %s=\"%s\"' % [k, attrs[k]] for k in std.objectFields(attrs)]);\n std.deepJoin(['<', tag, attrs_str, '>', [aux(x) for x in children], '</', tag, '>']);\n\n aux(value),\n\n setUnion(a, b, keyF=id)::\n // NOTE: order matters, values in `a` win\n local aux(a, b, i, j, acc) =\n if i >= std.length(a) then\n acc + b[j:]\n else if j >= std.length(b) then\n acc + a[i:]\n else\n local ak = keyF(a[i]);\n local bk = keyF(b[j]);\n if ak == bk then\n aux(a, b, i + 1, j + 1, acc + [a[i]]) tailstrict\n else if ak < bk then\n aux(a, b, i + 1, j, acc + [a[i]]) tailstrict\n else\n aux(a, b, i, j + 1, acc + [b[j]]) tailstrict;\n aux(a, b, 0, 0, []),\n\n setDiff(a, b, keyF=id)::\n local aux(a, b, i, j, acc) =\n if i >= std.length(a) then\n acc\n else if j >= std.length(b) then\n acc + a[i:]\n else\n if keyF(a[i]) == keyF(b[j]) then\n aux(a, b, i + 1, j + 1, acc) tailstrict\n else if keyF(a[i]) < keyF(b[j]) then\n aux(a, b, i + 1, j, acc + [a[i]]) tailstrict\n else\n aux(a, b, i, j + 1, acc) tailstrict;\n aux(a, b, 0, 0, []) tailstrict,\n\n mergePatch(target, patch)::\n if std.isObject(patch) then\n local target_object =\n if std.isObject(target) then target else {};\n\n local target_fields =\n if std.isObject(target_object) then std.objectFields(target_object) else [];\n\n local null_fields = [k for k in std.objectFields(patch) if patch[k] == null];\n local both_fields = std.setUnion(target_fields, std.objectFields(patch));\n\n {\n [k]:\n if !std.objectHas(patch, k) then\n target_object[k]\n else if !std.objectHas(target_object, k) then\n std.mergePatch(null, patch[k]) tailstrict\n else\n std.mergePatch(target_object[k], patch[k]) tailstrict\n for k in std.setDiff(both_fields, null_fields)\n }\n else\n patch,\n\n get(o, f, default=null, inc_hidden=true)::\n if std.objectHasEx(o, f, inc_hidden) then o[f] else default,\n\n objectFields(o)::\n std.objectFieldsEx(o, false),\n\n objectFieldsAll(o)::\n std.objectFieldsEx(o, true),\n\n objectHas(o, f)::\n std.objectHasEx(o, f, false),\n\n objectHasAll(o, f)::\n std.objectHasEx(o, f, true),\n\n objectValues(o)::\n [o[k] for k in std.objectFields(o)],\n\n objectValuesAll(o)::\n [o[k] for k in std.objectFieldsAll(o)],\n\n resolvePath(f, r)::\n local arr = std.split(f, '/');\n std.join('/', std.makeArray(std.length(arr) - 1, function(i) arr[i]) + [r]),\n\n prune(a)::\n local isContent(b) =\n if b == null then\n false\n else if std.isArray(b) then\n std.length(b) > 0\n else if std.isObject(b) then\n std.length(b) > 0\n else\n true;\n if std.isArray(a) then\n [std.prune(x) for x in a if isContent($.prune(x))]\n else if std.isObject(a) then {\n [x]: $.prune(a[x])\n for x in std.objectFields(a)\n if isContent(std.prune(a[x]))\n } else\n a,\n\n find(value, arr)::\n if !std.isArray(arr) then\n error 'find second parameter should be an array, got ' + std.type(arr)\n else\n std.filter(function(i) arr[i] == value, std.range(0, std.length(arr) - 1)),\n\n // Compat\n __compare_array(arr1, arr2)::\n assert std.isArray(arr1) && std.isArray(arr2);\n std.__compare(arr1, arr2),\n __array_less(arr1, arr2):: std.__compare_array(arr1, arr2) == -1,\n __array_greater(arr1, arr2):: std.__compare_array(arr1, arr2) == 1,\n __array_less_or_equal(arr1, arr2):: std.__compare_array(arr1, arr2) <= 0,\n __array_greater_or_equal(arr1, arr2):: std.__compare_array(arr1, arr2) >= 0,\n}\n"
---
-SOURCE_FILE@0..10282
- EXPR_OBJECT@0..10281
- OBJ_BODY_MEMBER_LIST@0..10281
+SOURCE_FILE@0..9860
+ EXPR_OBJECT@0..9859
+ OBJ_BODY_MEMBER_LIST@0..9859
L_BRACE@0..1 "{"
WHITESPACE@1..4 "\n "
MEMBER_BIND_STMT@4..20
@@ -216,7 +216,7 @@
R_PAREN@424..425 ")"
COLONCOLON@425..427 "::"
WHITESPACE@427..432 "\n "
- EXPR_LOCAL@432..578
+ STMT_LOCAL@432..460
LOCAL_KW@432..437 "local"
WHITESPACE@437..438 " "
BIND_DESTRUCT@438..459
@@ -242,108 +242,108 @@
IDENT@455..458 "str"
R_PAREN@458..459 ")"
SEMI@459..460 ";"
- WHITESPACE@460..465 "\n "
- EXPR_IF_THEN_ELSE@465..578
- IF_KW@465..467 "if"
- WHITESPACE@467..468 " "
- EXPR_BINARY@468..510
- LHS_EXPR@468..475
- EXPR_BINARY@468..475
- LHS_EXPR@468..471
- EXPR_VAR@468..471
- NAME@468..471
- IDENT@468..471 "len"
- WHITESPACE@471..472 " "
- GT@472..473 ">"
- WHITESPACE@473..474 " "
- EXPR_NUMBER@474..475
- FLOAT@474..475 "0"
- WHITESPACE@475..476 " "
- AND@476..478 "&&"
- WHITESPACE@478..479 " "
- EXPR_APPLY@479..510
- EXPR_INDEX@479..489
- EXPR_VAR@479..482
- NAME@479..482
- IDENT@479..482 "std"
- DOT@482..483 "."
- NAME@483..489
- IDENT@483..489 "member"
- ARGS_DESC@489..510
- L_PAREN@489..490 "("
- ARG@490..495
- EXPR_VAR@490..495
- NAME@490..495
- IDENT@490..495 "chars"
- COMMA@495..496 ","
- WHITESPACE@496..497 " "
- ARG@497..509
- EXPR_INDEX_EXPR@497..509
- LHS_EXPR@497..500
- EXPR_VAR@497..500
- NAME@497..500
- IDENT@497..500 "str"
- L_BRACK@500..501 "["
- EXPR_BINARY@501..508
- LHS_EXPR@501..504
- EXPR_VAR@501..504
- NAME@501..504
- IDENT@501..504 "len"
- WHITESPACE@504..505 " "
- MINUS@505..506 "-"
- WHITESPACE@506..507 " "
- EXPR_NUMBER@507..508
- FLOAT@507..508 "1"
- R_BRACK@508..509 "]"
- R_PAREN@509..510 ")"
- WHITESPACE@510..511 " "
- THEN_KW@511..515 "then"
- WHITESPACE@515..522 "\n "
- TRUE_EXPR@522..559
- EXPR_APPLY@522..559
- EXPR_INDEX@522..537
- EXPR_VAR@522..525
- NAME@522..525
- IDENT@522..525 "std"
- DOT@525..526 "."
- NAME@526..537
- IDENT@526..537 "rstripChars"
- ARGS_DESC@537..559
- L_PAREN@537..538 "("
- ARG@538..551
- EXPR_SLICE@538..551
- EXPR_VAR@538..541
- NAME@538..541
- IDENT@538..541 "str"
- SLICE_DESC@541..551
- L_BRACK@541..542 "["
- COLON@542..543 ":"
- SLICE_DESC_END@543..550
- EXPR_BINARY@543..550
- LHS_EXPR@543..546
- EXPR_VAR@543..546
- NAME@543..546
- IDENT@543..546 "len"
- WHITESPACE@546..547 " "
- MINUS@547..548 "-"
- WHITESPACE@548..549 " "
- EXPR_NUMBER@549..550
- FLOAT@549..550 "1"
- R_BRACK@550..551 "]"
- COMMA@551..552 ","
- WHITESPACE@552..553 " "
- ARG@553..558
- EXPR_VAR@553..558
- NAME@553..558
- IDENT@553..558 "chars"
- R_PAREN@558..559 ")"
- WHITESPACE@559..564 "\n "
- ELSE_KW@564..568 "else"
- WHITESPACE@568..575 "\n "
- FALSE_EXPR@575..578
- EXPR_VAR@575..578
- NAME@575..578
- IDENT@575..578 "str"
+ WHITESPACE@460..465 "\n "
+ EXPR_IF_THEN_ELSE@465..578
+ IF_KW@465..467 "if"
+ WHITESPACE@467..468 " "
+ EXPR_BINARY@468..510
+ LHS_EXPR@468..475
+ EXPR_BINARY@468..475
+ LHS_EXPR@468..471
+ EXPR_VAR@468..471
+ NAME@468..471
+ IDENT@468..471 "len"
+ WHITESPACE@471..472 " "
+ GT@472..473 ">"
+ WHITESPACE@473..474 " "
+ EXPR_NUMBER@474..475
+ FLOAT@474..475 "0"
+ WHITESPACE@475..476 " "
+ AND@476..478 "&&"
+ WHITESPACE@478..479 " "
+ EXPR_APPLY@479..510
+ EXPR_INDEX@479..489
+ EXPR_VAR@479..482
+ NAME@479..482
+ IDENT@479..482 "std"
+ DOT@482..483 "."
+ NAME@483..489
+ IDENT@483..489 "member"
+ ARGS_DESC@489..510
+ L_PAREN@489..490 "("
+ ARG@490..495
+ EXPR_VAR@490..495
+ NAME@490..495
+ IDENT@490..495 "chars"
+ COMMA@495..496 ","
+ WHITESPACE@496..497 " "
+ ARG@497..509
+ EXPR_INDEX_EXPR@497..509
+ LHS_EXPR@497..500
+ EXPR_VAR@497..500
+ NAME@497..500
+ IDENT@497..500 "str"
+ L_BRACK@500..501 "["
+ EXPR_BINARY@501..508
+ LHS_EXPR@501..504
+ EXPR_VAR@501..504
+ NAME@501..504
+ IDENT@501..504 "len"
+ WHITESPACE@504..505 " "
+ MINUS@505..506 "-"
+ WHITESPACE@506..507 " "
+ EXPR_NUMBER@507..508
+ FLOAT@507..508 "1"
+ R_BRACK@508..509 "]"
+ R_PAREN@509..510 ")"
+ WHITESPACE@510..511 " "
+ THEN_KW@511..515 "then"
+ WHITESPACE@515..522 "\n "
+ TRUE_EXPR@522..559
+ EXPR_APPLY@522..559
+ EXPR_INDEX@522..537
+ EXPR_VAR@522..525
+ NAME@522..525
+ IDENT@522..525 "std"
+ DOT@525..526 "."
+ NAME@526..537
+ IDENT@526..537 "rstripChars"
+ ARGS_DESC@537..559
+ L_PAREN@537..538 "("
+ ARG@538..551
+ EXPR_SLICE@538..551
+ EXPR_VAR@538..541
+ NAME@538..541
+ IDENT@538..541 "str"
+ SLICE_DESC@541..551
+ L_BRACK@541..542 "["
+ COLON@542..543 ":"
+ SLICE_DESC_END@543..550
+ EXPR_BINARY@543..550
+ LHS_EXPR@543..546
+ EXPR_VAR@543..546
+ NAME@543..546
+ IDENT@543..546 "len"
+ WHITESPACE@546..547 " "
+ MINUS@547..548 "-"
+ WHITESPACE@548..549 " "
+ EXPR_NUMBER@549..550
+ FLOAT@549..550 "1"
+ R_BRACK@550..551 "]"
+ COMMA@551..552 ","
+ WHITESPACE@552..553 " "
+ ARG@553..558
+ EXPR_VAR@553..558
+ NAME@553..558
+ IDENT@553..558 "chars"
+ R_PAREN@558..559 ")"
+ WHITESPACE@559..564 "\n "
+ ELSE_KW@564..568 "else"
+ WHITESPACE@568..575 "\n "
+ FALSE_EXPR@575..578
+ EXPR_VAR@575..578
+ NAME@575..578
+ IDENT@575..578 "str"
COMMA@578..579 ","
WHITESPACE@579..583 "\n\n "
MEMBER_FIELD_METHOD@583..663
@@ -546,160 +546,160 @@
WHITESPACE@839..844 "\n "
ELSE_KW@844..848 "else"
WHITESPACE@848..855 "\n "
- FALSE_EXPR@855..1024
- EXPR_LOCAL@855..1024
- LOCAL_KW@855..860 "local"
- WHITESPACE@860..861 " "
- BIND_FUNCTION@861..922
- NAME@861..867
- IDENT@861..867 "revStr"
- PARAMS_DESC@867..872
- L_PAREN@867..868 "("
- PARAM@868..871
- DESTRUCT_FULL@868..871
- NAME@868..871
- IDENT@868..871 "str"
- R_PAREN@871..872 ")"
- WHITESPACE@872..873 " "
- ASSIGN@873..874 "="
- WHITESPACE@874..875 " "
- EXPR_APPLY@875..922
- EXPR_INDEX@875..883
- EXPR_VAR@875..878
- NAME@875..878
- IDENT@875..878 "std"
- DOT@878..879 "."
- NAME@879..883
- IDENT@879..883 "join"
- ARGS_DESC@883..922
- L_PAREN@883..884 "("
- ARG@884..886
- EXPR_STRING@884..886
- STRING_SINGLE@884..886 "''"
- COMMA@886..887 ","
- WHITESPACE@887..888 " "
- ARG@888..921
- EXPR_APPLY@888..921
- EXPR_INDEX@888..899
- EXPR_VAR@888..891
- NAME@888..891
- IDENT@888..891 "std"
- DOT@891..892 "."
- NAME@892..899
- IDENT@892..899 "reverse"
- ARGS_DESC@899..921
- L_PAREN@899..900 "("
- ARG@900..920
- EXPR_APPLY@900..920
- EXPR_INDEX@900..915
- EXPR_VAR@900..903
- NAME@900..903
- IDENT@900..903 "std"
- DOT@903..904 "."
- NAME@904..915
- IDENT@904..915 "stringChars"
- ARGS_DESC@915..920
- L_PAREN@915..916 "("
- ARG@916..919
- EXPR_VAR@916..919
- NAME@916..919
- IDENT@916..919 "str"
- R_PAREN@919..920 ")"
- R_PAREN@920..921 ")"
- R_PAREN@921..922 ")"
- SEMI@922..923 ";"
- WHITESPACE@923..930 "\n "
- EXPR_APPLY@930..1024
- EXPR_INDEX@930..937
- EXPR_VAR@930..933
- NAME@930..933
- IDENT@930..933 "std"
- DOT@933..934 "."
- NAME@934..937
- IDENT@934..937 "map"
- ARGS_DESC@937..1024
- L_PAREN@937..938 "("
- ARG@938..959
- EXPR_FUNCTION@938..959
- FUNCTION_KW@938..946 "function"
- PARAMS_DESC@946..949
- L_PAREN@946..947 "("
- PARAM@947..948
- DESTRUCT_FULL@947..948
- NAME@947..948
- IDENT@947..948 "e"
- R_PAREN@948..949 ")"
- WHITESPACE@949..950 " "
- EXPR_APPLY@950..959
- EXPR_VAR@950..956
- NAME@950..956
- IDENT@950..956 "revStr"
- ARGS_DESC@956..959
- L_PAREN@956..957 "("
- ARG@957..958
- EXPR_VAR@957..958
- NAME@957..958
- IDENT@957..958 "e"
- R_PAREN@958..959 ")"
- COMMA@959..960 ","
- WHITESPACE@960..961 " "
- ARG@961..1023
- EXPR_APPLY@961..1023
- EXPR_INDEX@961..972
- EXPR_VAR@961..964
- NAME@961..964
- IDENT@961..964 "std"
- DOT@964..965 "."
- NAME@965..972
- IDENT@965..972 "reverse"
- ARGS_DESC@972..1023
- L_PAREN@972..973 "("
- ARG@973..1022
- EXPR_APPLY@973..1022
- EXPR_INDEX@973..987
- EXPR_VAR@973..976
- NAME@973..976
- IDENT@973..976 "std"
- DOT@976..977 "."
- NAME@977..987
- IDENT@977..987 "splitLimit"
- ARGS_DESC@987..1022
- L_PAREN@987..988 "("
- ARG@988..999
- EXPR_APPLY@988..999
- EXPR_VAR@988..994
- NAME@988..994
- IDENT@988..994 "revStr"
- ARGS_DESC@994..999
- L_PAREN@994..995 "("
- ARG@995..998
- EXPR_VAR@995..998
- NAME@995..998
- IDENT@995..998 "str"
- R_PAREN@998..999 ")"
- COMMA@999..1000 ","
- WHITESPACE@1000..1001 " "
- ARG@1001..1010
- EXPR_APPLY@1001..1010
- EXPR_VAR@1001..1007
- NAME@1001..1007
- IDENT@1001..1007 "revStr"
- ARGS_DESC@1007..1010
- L_PAREN@1007..1008 "("
- ARG@1008..1009
- EXPR_VAR@1008..1009
- NAME@1008..1009
- IDENT@1008..1009 "c"
- R_PAREN@1009..1010 ")"
- COMMA@1010..1011 ","
- WHITESPACE@1011..1012 " "
- ARG@1012..1021
- EXPR_VAR@1012..1021
- NAME@1012..1021
- IDENT@1012..1021 "maxsplits"
- R_PAREN@1021..1022 ")"
- R_PAREN@1022..1023 ")"
- R_PAREN@1023..1024 ")"
+ STMT_LOCAL@855..923
+ LOCAL_KW@855..860 "local"
+ WHITESPACE@860..861 " "
+ BIND_FUNCTION@861..922
+ NAME@861..867
+ IDENT@861..867 "revStr"
+ PARAMS_DESC@867..872
+ L_PAREN@867..868 "("
+ PARAM@868..871
+ DESTRUCT_FULL@868..871
+ NAME@868..871
+ IDENT@868..871 "str"
+ R_PAREN@871..872 ")"
+ WHITESPACE@872..873 " "
+ ASSIGN@873..874 "="
+ WHITESPACE@874..875 " "
+ EXPR_APPLY@875..922
+ EXPR_INDEX@875..883
+ EXPR_VAR@875..878
+ NAME@875..878
+ IDENT@875..878 "std"
+ DOT@878..879 "."
+ NAME@879..883
+ IDENT@879..883 "join"
+ ARGS_DESC@883..922
+ L_PAREN@883..884 "("
+ ARG@884..886
+ EXPR_STRING@884..886
+ STRING_SINGLE@884..886 "''"
+ COMMA@886..887 ","
+ WHITESPACE@887..888 " "
+ ARG@888..921
+ EXPR_APPLY@888..921
+ EXPR_INDEX@888..899
+ EXPR_VAR@888..891
+ NAME@888..891
+ IDENT@888..891 "std"
+ DOT@891..892 "."
+ NAME@892..899
+ IDENT@892..899 "reverse"
+ ARGS_DESC@899..921
+ L_PAREN@899..900 "("
+ ARG@900..920
+ EXPR_APPLY@900..920
+ EXPR_INDEX@900..915
+ EXPR_VAR@900..903
+ NAME@900..903
+ IDENT@900..903 "std"
+ DOT@903..904 "."
+ NAME@904..915
+ IDENT@904..915 "stringChars"
+ ARGS_DESC@915..920
+ L_PAREN@915..916 "("
+ ARG@916..919
+ EXPR_VAR@916..919
+ NAME@916..919
+ IDENT@916..919 "str"
+ R_PAREN@919..920 ")"
+ R_PAREN@920..921 ")"
+ R_PAREN@921..922 ")"
+ SEMI@922..923 ";"
+ WHITESPACE@923..930 "\n "
+ FALSE_EXPR@930..1024
+ EXPR_APPLY@930..1024
+ EXPR_INDEX@930..937
+ EXPR_VAR@930..933
+ NAME@930..933
+ IDENT@930..933 "std"
+ DOT@933..934 "."
+ NAME@934..937
+ IDENT@934..937 "map"
+ ARGS_DESC@937..1024
+ L_PAREN@937..938 "("
+ ARG@938..959
+ EXPR_FUNCTION@938..959
+ FUNCTION_KW@938..946 "function"
+ PARAMS_DESC@946..949
+ L_PAREN@946..947 "("
+ PARAM@947..948
+ DESTRUCT_FULL@947..948
+ NAME@947..948
+ IDENT@947..948 "e"
+ R_PAREN@948..949 ")"
+ WHITESPACE@949..950 " "
+ EXPR_APPLY@950..959
+ EXPR_VAR@950..956
+ NAME@950..956
+ IDENT@950..956 "revStr"
+ ARGS_DESC@956..959
+ L_PAREN@956..957 "("
+ ARG@957..958
+ EXPR_VAR@957..958
+ NAME@957..958
+ IDENT@957..958 "e"
+ R_PAREN@958..959 ")"
+ COMMA@959..960 ","
+ WHITESPACE@960..961 " "
+ ARG@961..1023
+ EXPR_APPLY@961..1023
+ EXPR_INDEX@961..972
+ EXPR_VAR@961..964
+ NAME@961..964
+ IDENT@961..964 "std"
+ DOT@964..965 "."
+ NAME@965..972
+ IDENT@965..972 "reverse"
+ ARGS_DESC@972..1023
+ L_PAREN@972..973 "("
+ ARG@973..1022
+ EXPR_APPLY@973..1022
+ EXPR_INDEX@973..987
+ EXPR_VAR@973..976
+ NAME@973..976
+ IDENT@973..976 "std"
+ DOT@976..977 "."
+ NAME@977..987
+ IDENT@977..987 "splitLimit"
+ ARGS_DESC@987..1022
+ L_PAREN@987..988 "("
+ ARG@988..999
+ EXPR_APPLY@988..999
+ EXPR_VAR@988..994
+ NAME@988..994
+ IDENT@988..994 "revStr"
+ ARGS_DESC@994..999
+ L_PAREN@994..995 "("
+ ARG@995..998
+ EXPR_VAR@995..998
+ NAME@995..998
+ IDENT@995..998 "str"
+ R_PAREN@998..999 ")"
+ COMMA@999..1000 ","
+ WHITESPACE@1000..1001 " "
+ ARG@1001..1010
+ EXPR_APPLY@1001..1010
+ EXPR_VAR@1001..1007
+ NAME@1001..1007
+ IDENT@1001..1007 "revStr"
+ ARGS_DESC@1007..1010
+ L_PAREN@1007..1008 "("
+ ARG@1008..1009
+ EXPR_VAR@1008..1009
+ NAME@1008..1009
+ IDENT@1008..1009 "c"
+ R_PAREN@1009..1010 ")"
+ COMMA@1010..1011 ","
+ WHITESPACE@1011..1012 " "
+ ARG@1012..1021
+ EXPR_VAR@1012..1021
+ NAME@1012..1021
+ IDENT@1012..1021 "maxsplits"
+ R_PAREN@1021..1022 ")"
+ R_PAREN@1022..1023 ")"
+ R_PAREN@1023..1024 ")"
COMMA@1024..1025 ","
WHITESPACE@1025..1029 "\n\n "
MEMBER_FIELD_METHOD@1029..1071
@@ -1819,7 +1819,7 @@
R_PAREN@2824..2825 ")"
COLONCOLON@2825..2827 "::"
WHITESPACE@2827..2832 "\n "
- EXPR_LOCAL@2832..3495
+ STMT_LOCAL@2832..3136
LOCAL_KW@2832..2837 "local"
WHITESPACE@2837..2838 " "
BIND_FUNCTION@2838..3135
@@ -1855,7 +1855,7 @@
EXPR_ARRAY_COMP@2876..3134
L_BRACK@2876..2877 "["
WHITESPACE@2877..2886 "\n "
- EXPR_LOCAL@2886..3085
+ STMT_LOCAL@2886..2918
LOCAL_KW@2886..2891 "local"
WHITESPACE@2891..2892 " "
BIND_DESTRUCT@2892..2917
@@ -1876,87 +1876,87 @@
IDENT@2915..2916 "k"
R_BRACK@2916..2917 "]"
SEMI@2917..2918 ";"
- WHITESPACE@2918..2927 "\n "
- EXPR_IF_THEN_ELSE@2927..3085
- IF_KW@2927..2929 "if"
- WHITESPACE@2929..2930 " "
- EXPR_APPLY@2930..2958
- EXPR_INDEX@2930..2941
- EXPR_VAR@2930..2933
- NAME@2930..2933
- IDENT@2930..2933 "std"
- DOT@2933..2934 "."
- NAME@2934..2941
- IDENT@2934..2941 "isArray"
- ARGS_DESC@2941..2958
- L_PAREN@2941..2942 "("
- ARG@2942..2957
- EXPR_VAR@2942..2957
- NAME@2942..2957
- IDENT@2942..2957 "value_or_values"
- R_PAREN@2957..2958 ")"
- WHITESPACE@2958..2959 " "
- THEN_KW@2959..2963 "then"
- WHITESPACE@2963..2974 "\n "
- TRUE_EXPR@2974..3027
- EXPR_ARRAY_COMP@2974..3027
- L_BRACK@2974..2975 "["
- EXPR_BINARY@2975..2997
- LHS_EXPR@2975..2984
- EXPR_STRING@2975..2984
- STRING_SINGLE@2975..2984 "'%s = %s'"
- WHITESPACE@2984..2985 " "
- MODULO@2985..2986 "%"
- WHITESPACE@2986..2987 " "
- EXPR_ARRAY@2987..2997
- L_BRACK@2987..2988 "["
- EXPR_VAR@2988..2989
- NAME@2988..2989
- IDENT@2988..2989 "k"
- COMMA@2989..2990 ","
- WHITESPACE@2990..2991 " "
- EXPR_VAR@2991..2996
- NAME@2991..2996
- IDENT@2991..2996 "value"
- R_BRACK@2996..2997 "]"
- WHITESPACE@2997..2998 " "
- FOR_SPEC@2998..3026
- FOR_KW@2998..3001 "for"
- WHITESPACE@3001..3002 " "
- NAME@3002..3007
- IDENT@3002..3007 "value"
- WHITESPACE@3007..3008 " "
- IN_KW@3008..3010 "in"
- WHITESPACE@3010..3011 " "
- EXPR_VAR@3011..3026
- NAME@3011..3026
- IDENT@3011..3026 "value_or_values"
- R_BRACK@3026..3027 "]"
- WHITESPACE@3027..3036 "\n "
- ELSE_KW@3036..3040 "else"
- WHITESPACE@3040..3051 "\n "
- FALSE_EXPR@3051..3085
- EXPR_ARRAY@3051..3085
- L_BRACK@3051..3052 "["
- EXPR_BINARY@3052..3084
- LHS_EXPR@3052..3061
- EXPR_STRING@3052..3061
- STRING_SINGLE@3052..3061 "'%s = %s'"
- WHITESPACE@3061..3062 " "
- MODULO@3062..3063 "%"
- WHITESPACE@3063..3064 " "
- EXPR_ARRAY@3064..3084
- L_BRACK@3064..3065 "["
- EXPR_VAR@3065..3066
- NAME@3065..3066
- IDENT@3065..3066 "k"
- COMMA@3066..3067 ","
- WHITESPACE@3067..3068 " "
- EXPR_VAR@3068..3083
- NAME@3068..3083
- IDENT@3068..3083 "value_or_values"
- R_BRACK@3083..3084 "]"
- R_BRACK@3084..3085 "]"
+ WHITESPACE@2918..2927 "\n "
+ EXPR_IF_THEN_ELSE@2927..3085
+ IF_KW@2927..2929 "if"
+ WHITESPACE@2929..2930 " "
+ EXPR_APPLY@2930..2958
+ EXPR_INDEX@2930..2941
+ EXPR_VAR@2930..2933
+ NAME@2930..2933
+ IDENT@2930..2933 "std"
+ DOT@2933..2934 "."
+ NAME@2934..2941
+ IDENT@2934..2941 "isArray"
+ ARGS_DESC@2941..2958
+ L_PAREN@2941..2942 "("
+ ARG@2942..2957
+ EXPR_VAR@2942..2957
+ NAME@2942..2957
+ IDENT@2942..2957 "value_or_values"
+ R_PAREN@2957..2958 ")"
+ WHITESPACE@2958..2959 " "
+ THEN_KW@2959..2963 "then"
+ WHITESPACE@2963..2974 "\n "
+ TRUE_EXPR@2974..3027
+ EXPR_ARRAY_COMP@2974..3027
+ L_BRACK@2974..2975 "["
+ EXPR_BINARY@2975..2997
+ LHS_EXPR@2975..2984
+ EXPR_STRING@2975..2984
+ STRING_SINGLE@2975..2984 "'%s = %s'"
+ WHITESPACE@2984..2985 " "
+ MODULO@2985..2986 "%"
+ WHITESPACE@2986..2987 " "
+ EXPR_ARRAY@2987..2997
+ L_BRACK@2987..2988 "["
+ EXPR_VAR@2988..2989
+ NAME@2988..2989
+ IDENT@2988..2989 "k"
+ COMMA@2989..2990 ","
+ WHITESPACE@2990..2991 " "
+ EXPR_VAR@2991..2996
+ NAME@2991..2996
+ IDENT@2991..2996 "value"
+ R_BRACK@2996..2997 "]"
+ WHITESPACE@2997..2998 " "
+ FOR_SPEC@2998..3026
+ FOR_KW@2998..3001 "for"
+ WHITESPACE@3001..3002 " "
+ NAME@3002..3007
+ IDENT@3002..3007 "value"
+ WHITESPACE@3007..3008 " "
+ IN_KW@3008..3010 "in"
+ WHITESPACE@3010..3011 " "
+ EXPR_VAR@3011..3026
+ NAME@3011..3026
+ IDENT@3011..3026 "value_or_values"
+ R_BRACK@3026..3027 "]"
+ WHITESPACE@3027..3036 "\n "
+ ELSE_KW@3036..3040 "else"
+ WHITESPACE@3040..3051 "\n "
+ FALSE_EXPR@3051..3085
+ EXPR_ARRAY@3051..3085
+ L_BRACK@3051..3052 "["
+ EXPR_BINARY@3052..3084
+ LHS_EXPR@3052..3061
+ EXPR_STRING@3052..3061
+ STRING_SINGLE@3052..3061 "'%s = %s'"
+ WHITESPACE@3061..3062 " "
+ MODULO@3062..3063 "%"
+ WHITESPACE@3063..3064 " "
+ EXPR_ARRAY@3064..3084
+ L_BRACK@3064..3065 "["
+ EXPR_VAR@3065..3066
+ NAME@3065..3066
+ IDENT@3065..3066 "k"
+ COMMA@3066..3067 ","
+ WHITESPACE@3067..3068 " "
+ EXPR_VAR@3068..3083
+ NAME@3068..3083
+ IDENT@3068..3083 "value_or_values"
+ R_BRACK@3083..3084 "]"
+ R_BRACK@3084..3085 "]"
WHITESPACE@3085..3095 "\n\n "
FOR_SPEC@3095..3126
FOR_KW@3095..3098 "for"
@@ -1985,241 +1985,241 @@
R_BRACK@3133..3134 "]"
R_PAREN@3134..3135 ")"
SEMI@3135..3136 ";"
- WHITESPACE@3136..3142 "\n\n "
- EXPR_LOCAL@3142..3495
- LOCAL_KW@3142..3147 "local"
- WHITESPACE@3147..3148 " "
- BIND_FUNCTION@3148..3216
- NAME@3148..3161
- IDENT@3148..3161 "section_lines"
- PARAMS_DESC@3161..3175
- L_PAREN@3161..3162 "("
- PARAM@3162..3167
- DESTRUCT_FULL@3162..3167
- NAME@3162..3167
- IDENT@3162..3167 "sname"
- COMMA@3167..3168 ","
- WHITESPACE@3168..3169 " "
- PARAM@3169..3174
- DESTRUCT_FULL@3169..3174
- NAME@3169..3174
- IDENT@3169..3174 "sbody"
- R_PAREN@3174..3175 ")"
- WHITESPACE@3175..3176 " "
- ASSIGN@3176..3177 "="
- WHITESPACE@3177..3178 " "
- EXPR_BINARY@3178..3216
- LHS_EXPR@3178..3196
- EXPR_ARRAY@3178..3196
- L_BRACK@3178..3179 "["
- EXPR_BINARY@3179..3195
- LHS_EXPR@3179..3185
- EXPR_STRING@3179..3185
- STRING_SINGLE@3179..3185 "'[%s]'"
- WHITESPACE@3185..3186 " "
- MODULO@3186..3187 "%"
- WHITESPACE@3187..3188 " "
- EXPR_ARRAY@3188..3195
- L_BRACK@3188..3189 "["
- EXPR_VAR@3189..3194
- NAME@3189..3194
- IDENT@3189..3194 "sname"
- R_BRACK@3194..3195 "]"
- R_BRACK@3195..3196 "]"
- WHITESPACE@3196..3197 " "
- PLUS@3197..3198 "+"
- WHITESPACE@3198..3199 " "
- EXPR_APPLY@3199..3216
- EXPR_VAR@3199..3209
- NAME@3199..3209
- IDENT@3199..3209 "body_lines"
- ARGS_DESC@3209..3216
- L_PAREN@3209..3210 "("
- ARG@3210..3215
- EXPR_VAR@3210..3215
- NAME@3210..3215
- IDENT@3210..3215 "sbody"
- R_PAREN@3215..3216 ")"
- COMMA@3216..3217 ","
- WHITESPACE@3217..3228 "\n "
- BIND_DESTRUCT@3228..3303
- DESTRUCT_FULL@3228..3237
- NAME@3228..3237
- IDENT@3228..3237 "main_body"
- WHITESPACE@3237..3238 " "
- ASSIGN@3238..3239 "="
- WHITESPACE@3239..3240 " "
- EXPR_IF_THEN_ELSE@3240..3303
- IF_KW@3240..3242 "if"
- WHITESPACE@3242..3243 " "
- EXPR_APPLY@3243..3269
- EXPR_INDEX@3243..3256
- EXPR_VAR@3243..3246
- NAME@3243..3246
- IDENT@3243..3246 "std"
- DOT@3246..3247 "."
- NAME@3247..3256
- IDENT@3247..3256 "objectHas"
- ARGS_DESC@3256..3269
- L_PAREN@3256..3257 "("
- ARG@3257..3260
- EXPR_VAR@3257..3260
- NAME@3257..3260
- IDENT@3257..3260 "ini"
- COMMA@3260..3261 ","
- WHITESPACE@3261..3262 " "
- ARG@3262..3268
- EXPR_STRING@3262..3268
- STRING_SINGLE@3262..3268 "'main'"
- R_PAREN@3268..3269 ")"
- WHITESPACE@3269..3270 " "
- THEN_KW@3270..3274 "then"
- WHITESPACE@3274..3275 " "
- TRUE_EXPR@3275..3295
- EXPR_APPLY@3275..3295
- EXPR_VAR@3275..3285
- NAME@3275..3285
- IDENT@3275..3285 "body_lines"
- ARGS_DESC@3285..3295
- L_PAREN@3285..3286 "("
- ARG@3286..3294
- EXPR_INDEX@3286..3294
- EXPR_VAR@3286..3289
- NAME@3286..3289
- IDENT@3286..3289 "ini"
- DOT@3289..3290 "."
- NAME@3290..3294
- IDENT@3290..3294 "main"
- R_PAREN@3294..3295 ")"
- WHITESPACE@3295..3296 " "
- ELSE_KW@3296..3300 "else"
- WHITESPACE@3300..3301 " "
- FALSE_EXPR@3301..3303
- EXPR_ARRAY@3301..3303
- L_BRACK@3301..3302 "["
- R_BRACK@3302..3303 "]"
- COMMA@3303..3304 ","
- WHITESPACE@3304..3315 "\n "
- BIND_DESTRUCT@3315..3423
- DESTRUCT_FULL@3315..3327
- NAME@3315..3327
- IDENT@3315..3327 "all_sections"
- WHITESPACE@3327..3328 " "
- ASSIGN@3328..3329 "="
- WHITESPACE@3329..3330 " "
- EXPR_ARRAY_COMP@3330..3423
- L_BRACK@3330..3331 "["
- WHITESPACE@3331..3338 "\n "
- EXPR_APPLY@3338..3371
- EXPR_VAR@3338..3351
- NAME@3338..3351
- IDENT@3338..3351 "section_lines"
- ARGS_DESC@3351..3371
- L_PAREN@3351..3352 "("
- ARG@3352..3353
- EXPR_VAR@3352..3353
- NAME@3352..3353
- IDENT@3352..3353 "k"
- COMMA@3353..3354 ","
- WHITESPACE@3354..3355 " "
- ARG@3355..3370
- EXPR_INDEX_EXPR@3355..3370
- LHS_EXPR@3355..3367
- EXPR_INDEX@3355..3367
- EXPR_VAR@3355..3358
- NAME@3355..3358
- IDENT@3355..3358 "ini"
- DOT@3358..3359 "."
- NAME@3359..3367
- IDENT@3359..3367 "sections"
- L_BRACK@3367..3368 "["
- EXPR_VAR@3368..3369
- NAME@3368..3369
- IDENT@3368..3369 "k"
- R_BRACK@3369..3370 "]"
- R_PAREN@3370..3371 ")"
- WHITESPACE@3371..3378 "\n "
- FOR_SPEC@3378..3417
- FOR_KW@3378..3381 "for"
- WHITESPACE@3381..3382 " "
- NAME@3382..3383
- IDENT@3382..3383 "k"
- WHITESPACE@3383..3384 " "
- IN_KW@3384..3386 "in"
- WHITESPACE@3386..3387 " "
- EXPR_APPLY@3387..3417
- EXPR_INDEX@3387..3403
- EXPR_VAR@3387..3390
- NAME@3387..3390
- IDENT@3387..3390 "std"
- DOT@3390..3391 "."
- NAME@3391..3403
- IDENT@3391..3403 "objectFields"
- ARGS_DESC@3403..3417
- L_PAREN@3403..3404 "("
- ARG@3404..3416
- EXPR_INDEX@3404..3416
- EXPR_VAR@3404..3407
- NAME@3404..3407
- IDENT@3404..3407 "ini"
- DOT@3407..3408 "."
- NAME@3408..3416
- IDENT@3408..3416 "sections"
- R_PAREN@3416..3417 ")"
- WHITESPACE@3417..3422 "\n "
- R_BRACK@3422..3423 "]"
- SEMI@3423..3424 ";"
- WHITESPACE@3424..3429 "\n "
- EXPR_APPLY@3429..3495
- EXPR_INDEX@3429..3437
- EXPR_VAR@3429..3432
- NAME@3429..3432
- IDENT@3429..3432 "std"
- DOT@3432..3433 "."
- NAME@3433..3437
- IDENT@3433..3437 "join"
- ARGS_DESC@3437..3495
- L_PAREN@3437..3438 "("
- ARG@3438..3442
- EXPR_STRING@3438..3442
- STRING_SINGLE@3438..3442 "'\\n'"
- COMMA@3442..3443 ","
- WHITESPACE@3443..3444 " "
- ARG@3444..3494
- EXPR_BINARY@3444..3494
- LHS_EXPR@3444..3487
- EXPR_BINARY@3444..3487
- LHS_EXPR@3444..3453
- EXPR_VAR@3444..3453
- NAME@3444..3453
- IDENT@3444..3453 "main_body"
- WHITESPACE@3453..3454 " "
- PLUS@3454..3455 "+"
- WHITESPACE@3455..3456 " "
- EXPR_APPLY@3456..3487
- EXPR_INDEX@3456..3473
- EXPR_VAR@3456..3459
- NAME@3456..3459
- IDENT@3456..3459 "std"
- DOT@3459..3460 "."
- NAME@3460..3473
- IDENT@3460..3473 "flattenArrays"
- ARGS_DESC@3473..3487
- L_PAREN@3473..3474 "("
- ARG@3474..3486
- EXPR_VAR@3474..3486
- NAME@3474..3486
- IDENT@3474..3486 "all_sections"
- R_PAREN@3486..3487 ")"
- WHITESPACE@3487..3488 " "
- PLUS@3488..3489 "+"
- WHITESPACE@3489..3490 " "
- EXPR_ARRAY@3490..3494
- L_BRACK@3490..3491 "["
- EXPR_STRING@3491..3493
- STRING_SINGLE@3491..3493 "''"
- R_BRACK@3493..3494 "]"
- R_PAREN@3494..3495 ")"
+ WHITESPACE@3136..3142 "\n\n "
+ STMT_LOCAL@3142..3424
+ LOCAL_KW@3142..3147 "local"
+ WHITESPACE@3147..3148 " "
+ BIND_FUNCTION@3148..3216
+ NAME@3148..3161
+ IDENT@3148..3161 "section_lines"
+ PARAMS_DESC@3161..3175
+ L_PAREN@3161..3162 "("
+ PARAM@3162..3167
+ DESTRUCT_FULL@3162..3167
+ NAME@3162..3167
+ IDENT@3162..3167 "sname"
+ COMMA@3167..3168 ","
+ WHITESPACE@3168..3169 " "
+ PARAM@3169..3174
+ DESTRUCT_FULL@3169..3174
+ NAME@3169..3174
+ IDENT@3169..3174 "sbody"
+ R_PAREN@3174..3175 ")"
+ WHITESPACE@3175..3176 " "
+ ASSIGN@3176..3177 "="
+ WHITESPACE@3177..3178 " "
+ EXPR_BINARY@3178..3216
+ LHS_EXPR@3178..3196
+ EXPR_ARRAY@3178..3196
+ L_BRACK@3178..3179 "["
+ EXPR_BINARY@3179..3195
+ LHS_EXPR@3179..3185
+ EXPR_STRING@3179..3185
+ STRING_SINGLE@3179..3185 "'[%s]'"
+ WHITESPACE@3185..3186 " "
+ MODULO@3186..3187 "%"
+ WHITESPACE@3187..3188 " "
+ EXPR_ARRAY@3188..3195
+ L_BRACK@3188..3189 "["
+ EXPR_VAR@3189..3194
+ NAME@3189..3194
+ IDENT@3189..3194 "sname"
+ R_BRACK@3194..3195 "]"
+ R_BRACK@3195..3196 "]"
+ WHITESPACE@3196..3197 " "
+ PLUS@3197..3198 "+"
+ WHITESPACE@3198..3199 " "
+ EXPR_APPLY@3199..3216
+ EXPR_VAR@3199..3209
+ NAME@3199..3209
+ IDENT@3199..3209 "body_lines"
+ ARGS_DESC@3209..3216
+ L_PAREN@3209..3210 "("
+ ARG@3210..3215
+ EXPR_VAR@3210..3215
+ NAME@3210..3215
+ IDENT@3210..3215 "sbody"
+ R_PAREN@3215..3216 ")"
+ COMMA@3216..3217 ","
+ WHITESPACE@3217..3228 "\n "
+ BIND_DESTRUCT@3228..3303
+ DESTRUCT_FULL@3228..3237
+ NAME@3228..3237
+ IDENT@3228..3237 "main_body"
+ WHITESPACE@3237..3238 " "
+ ASSIGN@3238..3239 "="
+ WHITESPACE@3239..3240 " "
+ EXPR_IF_THEN_ELSE@3240..3303
+ IF_KW@3240..3242 "if"
+ WHITESPACE@3242..3243 " "
+ EXPR_APPLY@3243..3269
+ EXPR_INDEX@3243..3256
+ EXPR_VAR@3243..3246
+ NAME@3243..3246
+ IDENT@3243..3246 "std"
+ DOT@3246..3247 "."
+ NAME@3247..3256
+ IDENT@3247..3256 "objectHas"
+ ARGS_DESC@3256..3269
+ L_PAREN@3256..3257 "("
+ ARG@3257..3260
+ EXPR_VAR@3257..3260
+ NAME@3257..3260
+ IDENT@3257..3260 "ini"
+ COMMA@3260..3261 ","
+ WHITESPACE@3261..3262 " "
+ ARG@3262..3268
+ EXPR_STRING@3262..3268
+ STRING_SINGLE@3262..3268 "'main'"
+ R_PAREN@3268..3269 ")"
+ WHITESPACE@3269..3270 " "
+ THEN_KW@3270..3274 "then"
+ WHITESPACE@3274..3275 " "
+ TRUE_EXPR@3275..3295
+ EXPR_APPLY@3275..3295
+ EXPR_VAR@3275..3285
+ NAME@3275..3285
+ IDENT@3275..3285 "body_lines"
+ ARGS_DESC@3285..3295
+ L_PAREN@3285..3286 "("
+ ARG@3286..3294
+ EXPR_INDEX@3286..3294
+ EXPR_VAR@3286..3289
+ NAME@3286..3289
+ IDENT@3286..3289 "ini"
+ DOT@3289..3290 "."
+ NAME@3290..3294
+ IDENT@3290..3294 "main"
+ R_PAREN@3294..3295 ")"
+ WHITESPACE@3295..3296 " "
+ ELSE_KW@3296..3300 "else"
+ WHITESPACE@3300..3301 " "
+ FALSE_EXPR@3301..3303
+ EXPR_ARRAY@3301..3303
+ L_BRACK@3301..3302 "["
+ R_BRACK@3302..3303 "]"
+ COMMA@3303..3304 ","
+ WHITESPACE@3304..3315 "\n "
+ BIND_DESTRUCT@3315..3423
+ DESTRUCT_FULL@3315..3327
+ NAME@3315..3327
+ IDENT@3315..3327 "all_sections"
+ WHITESPACE@3327..3328 " "
+ ASSIGN@3328..3329 "="
+ WHITESPACE@3329..3330 " "
+ EXPR_ARRAY_COMP@3330..3423
+ L_BRACK@3330..3331 "["
+ WHITESPACE@3331..3338 "\n "
+ EXPR_APPLY@3338..3371
+ EXPR_VAR@3338..3351
+ NAME@3338..3351
+ IDENT@3338..3351 "section_lines"
+ ARGS_DESC@3351..3371
+ L_PAREN@3351..3352 "("
+ ARG@3352..3353
+ EXPR_VAR@3352..3353
+ NAME@3352..3353
+ IDENT@3352..3353 "k"
+ COMMA@3353..3354 ","
+ WHITESPACE@3354..3355 " "
+ ARG@3355..3370
+ EXPR_INDEX_EXPR@3355..3370
+ LHS_EXPR@3355..3367
+ EXPR_INDEX@3355..3367
+ EXPR_VAR@3355..3358
+ NAME@3355..3358
+ IDENT@3355..3358 "ini"
+ DOT@3358..3359 "."
+ NAME@3359..3367
+ IDENT@3359..3367 "sections"
+ L_BRACK@3367..3368 "["
+ EXPR_VAR@3368..3369
+ NAME@3368..3369
+ IDENT@3368..3369 "k"
+ R_BRACK@3369..3370 "]"
+ R_PAREN@3370..3371 ")"
+ WHITESPACE@3371..3378 "\n "
+ FOR_SPEC@3378..3417
+ FOR_KW@3378..3381 "for"
+ WHITESPACE@3381..3382 " "
+ NAME@3382..3383
+ IDENT@3382..3383 "k"
+ WHITESPACE@3383..3384 " "
+ IN_KW@3384..3386 "in"
+ WHITESPACE@3386..3387 " "
+ EXPR_APPLY@3387..3417
+ EXPR_INDEX@3387..3403
+ EXPR_VAR@3387..3390
+ NAME@3387..3390
+ IDENT@3387..3390 "std"
+ DOT@3390..3391 "."
+ NAME@3391..3403
+ IDENT@3391..3403 "objectFields"
+ ARGS_DESC@3403..3417
+ L_PAREN@3403..3404 "("
+ ARG@3404..3416
+ EXPR_INDEX@3404..3416
+ EXPR_VAR@3404..3407
+ NAME@3404..3407
+ IDENT@3404..3407 "ini"
+ DOT@3407..3408 "."
+ NAME@3408..3416
+ IDENT@3408..3416 "sections"
+ R_PAREN@3416..3417 ")"
+ WHITESPACE@3417..3422 "\n "
+ R_BRACK@3422..3423 "]"
+ SEMI@3423..3424 ";"
+ WHITESPACE@3424..3429 "\n "
+ EXPR_APPLY@3429..3495
+ EXPR_INDEX@3429..3437
+ EXPR_VAR@3429..3432
+ NAME@3429..3432
+ IDENT@3429..3432 "std"
+ DOT@3432..3433 "."
+ NAME@3433..3437
+ IDENT@3433..3437 "join"
+ ARGS_DESC@3437..3495
+ L_PAREN@3437..3438 "("
+ ARG@3438..3442
+ EXPR_STRING@3438..3442
+ STRING_SINGLE@3438..3442 "'\\n'"
+ COMMA@3442..3443 ","
+ WHITESPACE@3443..3444 " "
+ ARG@3444..3494
+ EXPR_BINARY@3444..3494
+ LHS_EXPR@3444..3487
+ EXPR_BINARY@3444..3487
+ LHS_EXPR@3444..3453
+ EXPR_VAR@3444..3453
+ NAME@3444..3453
+ IDENT@3444..3453 "main_body"
+ WHITESPACE@3453..3454 " "
+ PLUS@3454..3455 "+"
+ WHITESPACE@3455..3456 " "
+ EXPR_APPLY@3456..3487
+ EXPR_INDEX@3456..3473
+ EXPR_VAR@3456..3459
+ NAME@3456..3459
+ IDENT@3456..3459 "std"
+ DOT@3459..3460 "."
+ NAME@3460..3473
+ IDENT@3460..3473 "flattenArrays"
+ ARGS_DESC@3473..3487
+ L_PAREN@3473..3474 "("
+ ARG@3474..3486
+ EXPR_VAR@3474..3486
+ NAME@3474..3486
+ IDENT@3474..3486 "all_sections"
+ R_PAREN@3486..3487 ")"
+ WHITESPACE@3487..3488 " "
+ PLUS@3488..3489 "+"
+ WHITESPACE@3489..3490 " "
+ EXPR_ARRAY@3490..3494
+ L_BRACK@3490..3491 "["
+ EXPR_STRING@3491..3493
+ STRING_SINGLE@3491..3493 "''"
+ R_BRACK@3493..3494 "]"
+ R_PAREN@3494..3495 ")"
COMMA@3495..3496 ","
WHITESPACE@3496..3500 "\n\n "
MEMBER_FIELD_METHOD@3500..3553
@@ -2300,7 +2300,7 @@
R_PAREN@3639..3640 ")"
COLONCOLON@3640..3642 "::"
WHITESPACE@3642..3647 "\n "
- EXPR_LOCAL@3647..3835
+ STMT_LOCAL@3647..3678
LOCAL_KW@3647..3652 "local"
WHITESPACE@3652..3653 " "
BIND_DESTRUCT@3653..3677
@@ -2326,113 +2326,113 @@
IDENT@3672..3676 "str_"
R_PAREN@3676..3677 ")"
SEMI@3677..3678 ";"
- WHITESPACE@3678..3683 "\n "
- EXPR_LOCAL@3683..3835
- LOCAL_KW@3683..3688 "local"
- WHITESPACE@3688..3689 " "
- BIND_FUNCTION@3689..3764
- NAME@3689..3694
- IDENT@3689..3694 "trans"
- PARAMS_DESC@3694..3698
- L_PAREN@3694..3695 "("
- PARAM@3695..3697
- DESTRUCT_FULL@3695..3697
- NAME@3695..3697
- IDENT@3695..3697 "ch"
- R_PAREN@3697..3698 ")"
- WHITESPACE@3698..3699 " "
- ASSIGN@3699..3700 "="
- WHITESPACE@3700..3707 "\n "
- EXPR_IF_THEN_ELSE@3707..3764
- IF_KW@3707..3709 "if"
- WHITESPACE@3709..3710 " "
- EXPR_BINARY@3710..3719
- LHS_EXPR@3710..3712
- EXPR_VAR@3710..3712
- NAME@3710..3712
- IDENT@3710..3712 "ch"
- WHITESPACE@3712..3713 " "
- EQ@3713..3715 "=="
- WHITESPACE@3715..3716 " "
- EXPR_STRING@3716..3719
- STRING_DOUBLE@3716..3719 "\"'\""
- WHITESPACE@3719..3720 " "
- THEN_KW@3720..3724 "then"
- WHITESPACE@3724..3733 "\n "
- TRUE_EXPR@3733..3742
- EXPR_STRING@3733..3742
- STRING_DOUBLE@3733..3742 "\"'\\\"'\\\"'\""
- WHITESPACE@3742..3749 "\n "
- ELSE_KW@3749..3753 "else"
- WHITESPACE@3753..3762 "\n "
- FALSE_EXPR@3762..3764
- EXPR_VAR@3762..3764
- NAME@3762..3764
- IDENT@3762..3764 "ch"
- SEMI@3764..3765 ";"
- WHITESPACE@3765..3770 "\n "
- EXPR_BINARY@3770..3835
- LHS_EXPR@3770..3776
- EXPR_STRING@3770..3776
- STRING_DOUBLE@3770..3776 "\"'%s'\""
- WHITESPACE@3776..3777 " "
- MODULO@3777..3778 "%"
- WHITESPACE@3778..3779 " "
- EXPR_APPLY@3779..3835
- EXPR_INDEX@3779..3787
- EXPR_VAR@3779..3782
- NAME@3779..3782
- IDENT@3779..3782 "std"
- DOT@3782..3783 "."
- NAME@3783..3787
- IDENT@3783..3787 "join"
- ARGS_DESC@3787..3835
- L_PAREN@3787..3788 "("
- ARG@3788..3790
- EXPR_STRING@3788..3790
- STRING_SINGLE@3788..3790 "''"
- COMMA@3790..3791 ","
- WHITESPACE@3791..3792 " "
- ARG@3792..3834
- EXPR_ARRAY_COMP@3792..3834
- L_BRACK@3792..3793 "["
- EXPR_APPLY@3793..3802
- EXPR_VAR@3793..3798
- NAME@3793..3798
- IDENT@3793..3798 "trans"
- ARGS_DESC@3798..3802
- L_PAREN@3798..3799 "("
- ARG@3799..3801
- EXPR_VAR@3799..3801
- NAME@3799..3801
- IDENT@3799..3801 "ch"
- R_PAREN@3801..3802 ")"
- WHITESPACE@3802..3803 " "
- FOR_SPEC@3803..3833
- FOR_KW@3803..3806 "for"
- WHITESPACE@3806..3807 " "
- NAME@3807..3809
- IDENT@3807..3809 "ch"
- WHITESPACE@3809..3810 " "
- IN_KW@3810..3812 "in"
- WHITESPACE@3812..3813 " "
- EXPR_APPLY@3813..3833
- EXPR_INDEX@3813..3828
- EXPR_VAR@3813..3816
- NAME@3813..3816
- IDENT@3813..3816 "std"
- DOT@3816..3817 "."
- NAME@3817..3828
- IDENT@3817..3828 "stringChars"
- ARGS_DESC@3828..3833
- L_PAREN@3828..3829 "("
- ARG@3829..3832
- EXPR_VAR@3829..3832
- NAME@3829..3832
- IDENT@3829..3832 "str"
- R_PAREN@3832..3833 ")"
- R_BRACK@3833..3834 "]"
- R_PAREN@3834..3835 ")"
+ WHITESPACE@3678..3683 "\n "
+ STMT_LOCAL@3683..3765
+ LOCAL_KW@3683..3688 "local"
+ WHITESPACE@3688..3689 " "
+ BIND_FUNCTION@3689..3764
+ NAME@3689..3694
+ IDENT@3689..3694 "trans"
+ PARAMS_DESC@3694..3698
+ L_PAREN@3694..3695 "("
+ PARAM@3695..3697
+ DESTRUCT_FULL@3695..3697
+ NAME@3695..3697
+ IDENT@3695..3697 "ch"
+ R_PAREN@3697..3698 ")"
+ WHITESPACE@3698..3699 " "
+ ASSIGN@3699..3700 "="
+ WHITESPACE@3700..3707 "\n "
+ EXPR_IF_THEN_ELSE@3707..3764
+ IF_KW@3707..3709 "if"
+ WHITESPACE@3709..3710 " "
+ EXPR_BINARY@3710..3719
+ LHS_EXPR@3710..3712
+ EXPR_VAR@3710..3712
+ NAME@3710..3712
+ IDENT@3710..3712 "ch"
+ WHITESPACE@3712..3713 " "
+ EQ@3713..3715 "=="
+ WHITESPACE@3715..3716 " "
+ EXPR_STRING@3716..3719
+ STRING_DOUBLE@3716..3719 "\"'\""
+ WHITESPACE@3719..3720 " "
+ THEN_KW@3720..3724 "then"
+ WHITESPACE@3724..3733 "\n "
+ TRUE_EXPR@3733..3742
+ EXPR_STRING@3733..3742
+ STRING_DOUBLE@3733..3742 "\"'\\\"'\\\"'\""
+ WHITESPACE@3742..3749 "\n "
+ ELSE_KW@3749..3753 "else"
+ WHITESPACE@3753..3762 "\n "
+ FALSE_EXPR@3762..3764
+ EXPR_VAR@3762..3764
+ NAME@3762..3764
+ IDENT@3762..3764 "ch"
+ SEMI@3764..3765 ";"
+ WHITESPACE@3765..3770 "\n "
+ EXPR_BINARY@3770..3835
+ LHS_EXPR@3770..3776
+ EXPR_STRING@3770..3776
+ STRING_DOUBLE@3770..3776 "\"'%s'\""
+ WHITESPACE@3776..3777 " "
+ MODULO@3777..3778 "%"
+ WHITESPACE@3778..3779 " "
+ EXPR_APPLY@3779..3835
+ EXPR_INDEX@3779..3787
+ EXPR_VAR@3779..3782
+ NAME@3779..3782
+ IDENT@3779..3782 "std"
+ DOT@3782..3783 "."
+ NAME@3783..3787
+ IDENT@3783..3787 "join"
+ ARGS_DESC@3787..3835
+ L_PAREN@3787..3788 "("
+ ARG@3788..3790
+ EXPR_STRING@3788..3790
+ STRING_SINGLE@3788..3790 "''"
+ COMMA@3790..3791 ","
+ WHITESPACE@3791..3792 " "
+ ARG@3792..3834
+ EXPR_ARRAY_COMP@3792..3834
+ L_BRACK@3792..3793 "["
+ EXPR_APPLY@3793..3802
+ EXPR_VAR@3793..3798
+ NAME@3793..3798
+ IDENT@3793..3798 "trans"
+ ARGS_DESC@3798..3802
+ L_PAREN@3798..3799 "("
+ ARG@3799..3801
+ EXPR_VAR@3799..3801
+ NAME@3799..3801
+ IDENT@3799..3801 "ch"
+ R_PAREN@3801..3802 ")"
+ WHITESPACE@3802..3803 " "
+ FOR_SPEC@3803..3833
+ FOR_KW@3803..3806 "for"
+ WHITESPACE@3806..3807 " "
+ NAME@3807..3809
+ IDENT@3807..3809 "ch"
+ WHITESPACE@3809..3810 " "
+ IN_KW@3810..3812 "in"
+ WHITESPACE@3812..3813 " "
+ EXPR_APPLY@3813..3833
+ EXPR_INDEX@3813..3828
+ EXPR_VAR@3813..3816
+ NAME@3813..3816
+ IDENT@3813..3816 "std"
+ DOT@3816..3817 "."
+ NAME@3817..3828
+ IDENT@3817..3828 "stringChars"
+ ARGS_DESC@3828..3833
+ L_PAREN@3828..3829 "("
+ ARG@3829..3832
+ EXPR_VAR@3829..3832
+ NAME@3829..3832
+ IDENT@3829..3832 "str"
+ R_PAREN@3832..3833 ")"
+ R_BRACK@3833..3834 "]"
+ R_PAREN@3834..3835 ")"
COMMA@3835..3836 ","
WHITESPACE@3836..3840 "\n\n "
MEMBER_FIELD_METHOD@3840..4054
@@ -2448,7 +2448,7 @@
R_PAREN@3864..3865 ")"
COLONCOLON@3865..3867 "::"
WHITESPACE@3867..3872 "\n "
- EXPR_LOCAL@3872..4054
+ STMT_LOCAL@3872..3903
LOCAL_KW@3872..3877 "local"
WHITESPACE@3877..3878 " "
BIND_DESTRUCT@3878..3902
@@ -2474,121 +2474,121 @@
IDENT@3897..3901 "str_"
R_PAREN@3901..3902 ")"
SEMI@3902..3903 ";"
- WHITESPACE@3903..3908 "\n "
- EXPR_LOCAL@3908..4054
- LOCAL_KW@3908..3913 "local"
- WHITESPACE@3913..3914 " "
- BIND_FUNCTION@3914..3984
- NAME@3914..3919
- IDENT@3914..3919 "trans"
- PARAMS_DESC@3919..3923
- L_PAREN@3919..3920 "("
- PARAM@3920..3922
- DESTRUCT_FULL@3920..3922
- NAME@3920..3922
- IDENT@3920..3922 "ch"
- R_PAREN@3922..3923 ")"
- WHITESPACE@3923..3924 " "
- ASSIGN@3924..3925 "="
- WHITESPACE@3925..3932 "\n "
- EXPR_IF_THEN_ELSE@3932..3984
- IF_KW@3932..3934 "if"
- WHITESPACE@3934..3935 " "
- EXPR_BINARY@3935..3944
- LHS_EXPR@3935..3937
- EXPR_VAR@3935..3937
- NAME@3935..3937
- IDENT@3935..3937 "ch"
- WHITESPACE@3937..3938 " "
- EQ@3938..3940 "=="
- WHITESPACE@3940..3941 " "
- EXPR_STRING@3941..3944
- STRING_SINGLE@3941..3944 "'$'"
- WHITESPACE@3944..3945 " "
- THEN_KW@3945..3949 "then"
- WHITESPACE@3949..3958 "\n "
- TRUE_EXPR@3958..3962
- EXPR_STRING@3958..3962
- STRING_SINGLE@3958..3962 "'$$'"
- WHITESPACE@3962..3969 "\n "
- ELSE_KW@3969..3973 "else"
- WHITESPACE@3973..3982 "\n "
- FALSE_EXPR@3982..3984
- EXPR_VAR@3982..3984
- NAME@3982..3984
- IDENT@3982..3984 "ch"
- SEMI@3984..3985 ";"
- WHITESPACE@3985..3990 "\n "
- EXPR_APPLY@3990..4054
- EXPR_INDEX@3990..3999
- EXPR_VAR@3990..3993
- NAME@3990..3993
- IDENT@3990..3993 "std"
- DOT@3993..3994 "."
- NAME@3994..3999
- IDENT@3994..3999 "foldl"
- ARGS_DESC@3999..4054
- L_PAREN@3999..4000 "("
- ARG@4000..4027
- EXPR_FUNCTION@4000..4027
- FUNCTION_KW@4000..4008 "function"
- PARAMS_DESC@4008..4014
- L_PAREN@4008..4009 "("
- PARAM@4009..4010
- DESTRUCT_FULL@4009..4010
- NAME@4009..4010
- IDENT@4009..4010 "a"
- COMMA@4010..4011 ","
- WHITESPACE@4011..4012 " "
- PARAM@4012..4013
- DESTRUCT_FULL@4012..4013
- NAME@4012..4013
- IDENT@4012..4013 "b"
- R_PAREN@4013..4014 ")"
- WHITESPACE@4014..4015 " "
- EXPR_BINARY@4015..4027
- LHS_EXPR@4015..4016
- EXPR_VAR@4015..4016
- NAME@4015..4016
- IDENT@4015..4016 "a"
- WHITESPACE@4016..4017 " "
- PLUS@4017..4018 "+"
- WHITESPACE@4018..4019 " "
- EXPR_APPLY@4019..4027
- EXPR_VAR@4019..4024
- NAME@4019..4024
- IDENT@4019..4024 "trans"
- ARGS_DESC@4024..4027
- L_PAREN@4024..4025 "("
- ARG@4025..4026
- EXPR_VAR@4025..4026
- NAME@4025..4026
- IDENT@4025..4026 "b"
- R_PAREN@4026..4027 ")"
- COMMA@4027..4028 ","
- WHITESPACE@4028..4029 " "
- ARG@4029..4049
- EXPR_APPLY@4029..4049
- EXPR_INDEX@4029..4044
- EXPR_VAR@4029..4032
- NAME@4029..4032
- IDENT@4029..4032 "std"
- DOT@4032..4033 "."
- NAME@4033..4044
- IDENT@4033..4044 "stringChars"
- ARGS_DESC@4044..4049
- L_PAREN@4044..4045 "("
- ARG@4045..4048
- EXPR_VAR@4045..4048
- NAME@4045..4048
- IDENT@4045..4048 "str"
- R_PAREN@4048..4049 ")"
- COMMA@4049..4050 ","
- WHITESPACE@4050..4051 " "
- ARG@4051..4053
- EXPR_STRING@4051..4053
- STRING_SINGLE@4051..4053 "''"
- R_PAREN@4053..4054 ")"
+ WHITESPACE@3903..3908 "\n "
+ STMT_LOCAL@3908..3985
+ LOCAL_KW@3908..3913 "local"
+ WHITESPACE@3913..3914 " "
+ BIND_FUNCTION@3914..3984
+ NAME@3914..3919
+ IDENT@3914..3919 "trans"
+ PARAMS_DESC@3919..3923
+ L_PAREN@3919..3920 "("
+ PARAM@3920..3922
+ DESTRUCT_FULL@3920..3922
+ NAME@3920..3922
+ IDENT@3920..3922 "ch"
+ R_PAREN@3922..3923 ")"
+ WHITESPACE@3923..3924 " "
+ ASSIGN@3924..3925 "="
+ WHITESPACE@3925..3932 "\n "
+ EXPR_IF_THEN_ELSE@3932..3984
+ IF_KW@3932..3934 "if"
+ WHITESPACE@3934..3935 " "
+ EXPR_BINARY@3935..3944
+ LHS_EXPR@3935..3937
+ EXPR_VAR@3935..3937
+ NAME@3935..3937
+ IDENT@3935..3937 "ch"
+ WHITESPACE@3937..3938 " "
+ EQ@3938..3940 "=="
+ WHITESPACE@3940..3941 " "
+ EXPR_STRING@3941..3944
+ STRING_SINGLE@3941..3944 "'$'"
+ WHITESPACE@3944..3945 " "
+ THEN_KW@3945..3949 "then"
+ WHITESPACE@3949..3958 "\n "
+ TRUE_EXPR@3958..3962
+ EXPR_STRING@3958..3962
+ STRING_SINGLE@3958..3962 "'$$'"
+ WHITESPACE@3962..3969 "\n "
+ ELSE_KW@3969..3973 "else"
+ WHITESPACE@3973..3982 "\n "
+ FALSE_EXPR@3982..3984
+ EXPR_VAR@3982..3984
+ NAME@3982..3984
+ IDENT@3982..3984 "ch"
+ SEMI@3984..3985 ";"
+ WHITESPACE@3985..3990 "\n "
+ EXPR_APPLY@3990..4054
+ EXPR_INDEX@3990..3999
+ EXPR_VAR@3990..3993
+ NAME@3990..3993
+ IDENT@3990..3993 "std"
+ DOT@3993..3994 "."
+ NAME@3994..3999
+ IDENT@3994..3999 "foldl"
+ ARGS_DESC@3999..4054
+ L_PAREN@3999..4000 "("
+ ARG@4000..4027
+ EXPR_FUNCTION@4000..4027
+ FUNCTION_KW@4000..4008 "function"
+ PARAMS_DESC@4008..4014
+ L_PAREN@4008..4009 "("
+ PARAM@4009..4010
+ DESTRUCT_FULL@4009..4010
+ NAME@4009..4010
+ IDENT@4009..4010 "a"
+ COMMA@4010..4011 ","
+ WHITESPACE@4011..4012 " "
+ PARAM@4012..4013
+ DESTRUCT_FULL@4012..4013
+ NAME@4012..4013
+ IDENT@4012..4013 "b"
+ R_PAREN@4013..4014 ")"
+ WHITESPACE@4014..4015 " "
+ EXPR_BINARY@4015..4027
+ LHS_EXPR@4015..4016
+ EXPR_VAR@4015..4016
+ NAME@4015..4016
+ IDENT@4015..4016 "a"
+ WHITESPACE@4016..4017 " "
+ PLUS@4017..4018 "+"
+ WHITESPACE@4018..4019 " "
+ EXPR_APPLY@4019..4027
+ EXPR_VAR@4019..4024
+ NAME@4019..4024
+ IDENT@4019..4024 "trans"
+ ARGS_DESC@4024..4027
+ L_PAREN@4024..4025 "("
+ ARG@4025..4026
+ EXPR_VAR@4025..4026
+ NAME@4025..4026
+ IDENT@4025..4026 "b"
+ R_PAREN@4026..4027 ")"
+ COMMA@4027..4028 ","
+ WHITESPACE@4028..4029 " "
+ ARG@4029..4049
+ EXPR_APPLY@4029..4049
+ EXPR_INDEX@4029..4044
+ EXPR_VAR@4029..4032
+ NAME@4029..4032
+ IDENT@4029..4032 "std"
+ DOT@4032..4033 "."
+ NAME@4033..4044
+ IDENT@4033..4044 "stringChars"
+ ARGS_DESC@4044..4049
+ L_PAREN@4044..4045 "("
+ ARG@4045..4048
+ EXPR_VAR@4045..4048
+ NAME@4045..4048
+ IDENT@4045..4048 "str"
+ R_PAREN@4048..4049 ")"
+ COMMA@4049..4050 ","
+ WHITESPACE@4050..4051 " "
+ ARG@4051..4053
+ EXPR_STRING@4051..4053
+ STRING_SINGLE@4051..4053 "''"
+ R_PAREN@4053..4054 ")"
COMMA@4054..4055 ","
WHITESPACE@4055..4059 "\n\n "
MEMBER_BIND_STMT@4059..4174
@@ -2667,7 +2667,7 @@
R_PAREN@4199..4200 ")"
COLONCOLON@4200..4202 "::"
WHITESPACE@4202..4207 "\n "
- EXPR_LOCAL@4207..4318
+ STMT_LOCAL@4207..4238
LOCAL_KW@4207..4212 "local"
WHITESPACE@4212..4213 " "
BIND_DESTRUCT@4213..4237
@@ -2693,78 +2693,78 @@
IDENT@4232..4236 "str_"
R_PAREN@4236..4237 ")"
SEMI@4237..4238 ";"
- WHITESPACE@4238..4243 "\n "
- EXPR_APPLY@4243..4318
- EXPR_INDEX@4243..4251
- EXPR_VAR@4243..4246
- NAME@4243..4246
- IDENT@4243..4246 "std"
- DOT@4246..4247 "."
- NAME@4247..4251
- IDENT@4247..4251 "join"
- ARGS_DESC@4251..4318
- L_PAREN@4251..4252 "("
- ARG@4252..4254
- EXPR_STRING@4252..4254
- STRING_SINGLE@4252..4254 "''"
- COMMA@4254..4255 ","
- WHITESPACE@4255..4256 " "
- ARG@4256..4317
- EXPR_ARRAY_COMP@4256..4317
- L_BRACK@4256..4257 "["
- EXPR_APPLY@4257..4285
- EXPR_INDEX@4257..4264
- EXPR_VAR@4257..4260
- NAME@4257..4260
- IDENT@4257..4260 "std"
- DOT@4260..4261 "."
- NAME@4261..4264
- IDENT@4261..4264 "get"
- ARGS_DESC@4264..4285
- L_PAREN@4264..4265 "("
- ARG@4265..4276
- EXPR_VAR@4265..4276
- NAME@4265..4276
- IDENT@4265..4276 "xml_escapes"
- COMMA@4276..4277 ","
- WHITESPACE@4277..4278 " "
- ARG@4278..4280
- EXPR_VAR@4278..4280
- NAME@4278..4280
- IDENT@4278..4280 "ch"
- COMMA@4280..4281 ","
- WHITESPACE@4281..4282 " "
- ARG@4282..4284
- EXPR_VAR@4282..4284
- NAME@4282..4284
- IDENT@4282..4284 "ch"
- R_PAREN@4284..4285 ")"
- WHITESPACE@4285..4286 " "
- FOR_SPEC@4286..4316
- FOR_KW@4286..4289 "for"
- WHITESPACE@4289..4290 " "
- NAME@4290..4292
- IDENT@4290..4292 "ch"
- WHITESPACE@4292..4293 " "
- IN_KW@4293..4295 "in"
- WHITESPACE@4295..4296 " "
- EXPR_APPLY@4296..4316
- EXPR_INDEX@4296..4311
- EXPR_VAR@4296..4299
- NAME@4296..4299
- IDENT@4296..4299 "std"
- DOT@4299..4300 "."
- NAME@4300..4311
- IDENT@4300..4311 "stringChars"
- ARGS_DESC@4311..4316
- L_PAREN@4311..4312 "("
- ARG@4312..4315
- EXPR_VAR@4312..4315
- NAME@4312..4315
- IDENT@4312..4315 "str"
- R_PAREN@4315..4316 ")"
- R_BRACK@4316..4317 "]"
- R_PAREN@4317..4318 ")"
+ WHITESPACE@4238..4243 "\n "
+ EXPR_APPLY@4243..4318
+ EXPR_INDEX@4243..4251
+ EXPR_VAR@4243..4246
+ NAME@4243..4246
+ IDENT@4243..4246 "std"
+ DOT@4246..4247 "."
+ NAME@4247..4251
+ IDENT@4247..4251 "join"
+ ARGS_DESC@4251..4318
+ L_PAREN@4251..4252 "("
+ ARG@4252..4254
+ EXPR_STRING@4252..4254
+ STRING_SINGLE@4252..4254 "''"
+ COMMA@4254..4255 ","
+ WHITESPACE@4255..4256 " "
+ ARG@4256..4317
+ EXPR_ARRAY_COMP@4256..4317
+ L_BRACK@4256..4257 "["
+ EXPR_APPLY@4257..4285
+ EXPR_INDEX@4257..4264
+ EXPR_VAR@4257..4260
+ NAME@4257..4260
+ IDENT@4257..4260 "std"
+ DOT@4260..4261 "."
+ NAME@4261..4264
+ IDENT@4261..4264 "get"
+ ARGS_DESC@4264..4285
+ L_PAREN@4264..4265 "("
+ ARG@4265..4276
+ EXPR_VAR@4265..4276
+ NAME@4265..4276
+ IDENT@4265..4276 "xml_escapes"
+ COMMA@4276..4277 ","
+ WHITESPACE@4277..4278 " "
+ ARG@4278..4280
+ EXPR_VAR@4278..4280
+ NAME@4278..4280
+ IDENT@4278..4280 "ch"
+ COMMA@4280..4281 ","
+ WHITESPACE@4281..4282 " "
+ ARG@4282..4284
+ EXPR_VAR@4282..4284
+ NAME@4282..4284
+ IDENT@4282..4284 "ch"
+ R_PAREN@4284..4285 ")"
+ WHITESPACE@4285..4286 " "
+ FOR_SPEC@4286..4316
+ FOR_KW@4286..4289 "for"
+ WHITESPACE@4289..4290 " "
+ NAME@4290..4292
+ IDENT@4290..4292 "ch"
+ WHITESPACE@4292..4293 " "
+ IN_KW@4293..4295 "in"
+ WHITESPACE@4295..4296 " "
+ EXPR_APPLY@4296..4316
+ EXPR_INDEX@4296..4311
+ EXPR_VAR@4296..4299
+ NAME@4296..4299
+ IDENT@4296..4299 "std"
+ DOT@4299..4300 "."
+ NAME@4300..4311
+ IDENT@4300..4311 "stringChars"
+ ARGS_DESC@4311..4316
+ L_PAREN@4311..4312 "("
+ ARG@4312..4315
+ EXPR_VAR@4312..4315
+ NAME@4312..4315
+ IDENT@4312..4315 "str"
+ R_PAREN@4315..4316 ")"
+ R_BRACK@4316..4317 "]"
+ R_PAREN@4317..4318 ")"
COMMA@4318..4319 ","
WHITESPACE@4319..4323 "\n\n "
MEMBER_FIELD_METHOD@4323..4389
@@ -3069,127 +3069,127 @@
WHITESPACE@4899..4900 " "
THEN_KW@4900..4904 "then"
WHITESPACE@4904..4911 "\n "
- TRUE_EXPR@4911..5086
- EXPR_LOCAL@4911..5086
- LOCAL_KW@4911..4916 "local"
- WHITESPACE@4916..4917 " "
- BIND_DESTRUCT@4917..5045
- DESTRUCT_FULL@4917..4923
- NAME@4917..4923
- IDENT@4917..4923 "fields"
- WHITESPACE@4923..4924 " "
- ASSIGN@4924..4925 "="
- WHITESPACE@4925..4926 " "
- EXPR_ARRAY_COMP@4926..5045
- L_BRACK@4926..4927 "["
- WHITESPACE@4927..4936 "\n "
- EXPR_BINARY@4936..5000
- LHS_EXPR@4936..4944
- EXPR_STRING@4936..4944
- STRING_SINGLE@4936..4944 "'%s: %s'"
- WHITESPACE@4944..4945 " "
- MODULO@4945..4946 "%"
- WHITESPACE@4946..4947 " "
- EXPR_ARRAY@4947..5000
- L_BRACK@4947..4948 "["
- EXPR_APPLY@4948..4973
- EXPR_INDEX@4948..4970
- EXPR_VAR@4948..4951
- NAME@4948..4951
- IDENT@4948..4951 "std"
- DOT@4951..4952 "."
- NAME@4952..4970
- IDENT@4952..4970 "escapeStringPython"
- ARGS_DESC@4970..4973
- L_PAREN@4970..4971 "("
- ARG@4971..4972
- EXPR_VAR@4971..4972
- NAME@4971..4972
- IDENT@4971..4972 "k"
- R_PAREN@4972..4973 ")"
- COMMA@4973..4974 ","
- WHITESPACE@4974..4975 " "
- EXPR_APPLY@4975..4999
- EXPR_INDEX@4975..4993
- EXPR_VAR@4975..4978
- NAME@4975..4978
- IDENT@4975..4978 "std"
- DOT@4978..4979 "."
- NAME@4979..4993
- IDENT@4979..4993 "manifestPython"
- ARGS_DESC@4993..4999
- L_PAREN@4993..4994 "("
- ARG@4994..4998
- EXPR_INDEX_EXPR@4994..4998
- LHS_EXPR@4994..4995
- EXPR_VAR@4994..4995
- NAME@4994..4995
- IDENT@4994..4995 "v"
- L_BRACK@4995..4996 "["
- EXPR_VAR@4996..4997
- NAME@4996..4997
- IDENT@4996..4997 "k"
- R_BRACK@4997..4998 "]"
- R_PAREN@4998..4999 ")"
- R_BRACK@4999..5000 "]"
- WHITESPACE@5000..5009 "\n "
- FOR_SPEC@5009..5037
- FOR_KW@5009..5012 "for"
- WHITESPACE@5012..5013 " "
- NAME@5013..5014
- IDENT@5013..5014 "k"
- WHITESPACE@5014..5015 " "
- IN_KW@5015..5017 "in"
- WHITESPACE@5017..5018 " "
- EXPR_APPLY@5018..5037
- EXPR_INDEX@5018..5034
- EXPR_VAR@5018..5021
- NAME@5018..5021
- IDENT@5018..5021 "std"
- DOT@5021..5022 "."
- NAME@5022..5034
- IDENT@5022..5034 "objectFields"
- ARGS_DESC@5034..5037
- L_PAREN@5034..5035 "("
- ARG@5035..5036
- EXPR_VAR@5035..5036
- NAME@5035..5036
- IDENT@5035..5036 "v"
- R_PAREN@5036..5037 ")"
- WHITESPACE@5037..5044 "\n "
- R_BRACK@5044..5045 "]"
- SEMI@5045..5046 ";"
- WHITESPACE@5046..5053 "\n "
- EXPR_BINARY@5053..5086
- LHS_EXPR@5053..5059
- EXPR_STRING@5053..5059
- STRING_SINGLE@5053..5059 "'{%s}'"
- WHITESPACE@5059..5060 " "
- MODULO@5060..5061 "%"
- WHITESPACE@5061..5062 " "
- EXPR_ARRAY@5062..5086
- L_BRACK@5062..5063 "["
- EXPR_APPLY@5063..5085
- EXPR_INDEX@5063..5071
- EXPR_VAR@5063..5066
- NAME@5063..5066
- IDENT@5063..5066 "std"
- DOT@5066..5067 "."
- NAME@5067..5071
- IDENT@5067..5071 "join"
- ARGS_DESC@5071..5085
- L_PAREN@5071..5072 "("
- ARG@5072..5076
- EXPR_STRING@5072..5076
- STRING_SINGLE@5072..5076 "', '"
- COMMA@5076..5077 ","
- WHITESPACE@5077..5078 " "
- ARG@5078..5084
- EXPR_VAR@5078..5084
- NAME@5078..5084
- IDENT@5078..5084 "fields"
- R_PAREN@5084..5085 ")"
- R_BRACK@5085..5086 "]"
+ STMT_LOCAL@4911..5046
+ LOCAL_KW@4911..4916 "local"
+ WHITESPACE@4916..4917 " "
+ BIND_DESTRUCT@4917..5045
+ DESTRUCT_FULL@4917..4923
+ NAME@4917..4923
+ IDENT@4917..4923 "fields"
+ WHITESPACE@4923..4924 " "
+ ASSIGN@4924..4925 "="
+ WHITESPACE@4925..4926 " "
+ EXPR_ARRAY_COMP@4926..5045
+ L_BRACK@4926..4927 "["
+ WHITESPACE@4927..4936 "\n "
+ EXPR_BINARY@4936..5000
+ LHS_EXPR@4936..4944
+ EXPR_STRING@4936..4944
+ STRING_SINGLE@4936..4944 "'%s: %s'"
+ WHITESPACE@4944..4945 " "
+ MODULO@4945..4946 "%"
+ WHITESPACE@4946..4947 " "
+ EXPR_ARRAY@4947..5000
+ L_BRACK@4947..4948 "["
+ EXPR_APPLY@4948..4973
+ EXPR_INDEX@4948..4970
+ EXPR_VAR@4948..4951
+ NAME@4948..4951
+ IDENT@4948..4951 "std"
+ DOT@4951..4952 "."
+ NAME@4952..4970
+ IDENT@4952..4970 "escapeStringPython"
+ ARGS_DESC@4970..4973
+ L_PAREN@4970..4971 "("
+ ARG@4971..4972
+ EXPR_VAR@4971..4972
+ NAME@4971..4972
+ IDENT@4971..4972 "k"
+ R_PAREN@4972..4973 ")"
+ COMMA@4973..4974 ","
+ WHITESPACE@4974..4975 " "
+ EXPR_APPLY@4975..4999
+ EXPR_INDEX@4975..4993
+ EXPR_VAR@4975..4978
+ NAME@4975..4978
+ IDENT@4975..4978 "std"
+ DOT@4978..4979 "."
+ NAME@4979..4993
+ IDENT@4979..4993 "manifestPython"
+ ARGS_DESC@4993..4999
+ L_PAREN@4993..4994 "("
+ ARG@4994..4998
+ EXPR_INDEX_EXPR@4994..4998
+ LHS_EXPR@4994..4995
+ EXPR_VAR@4994..4995
+ NAME@4994..4995
+ IDENT@4994..4995 "v"
+ L_BRACK@4995..4996 "["
+ EXPR_VAR@4996..4997
+ NAME@4996..4997
+ IDENT@4996..4997 "k"
+ R_BRACK@4997..4998 "]"
+ R_PAREN@4998..4999 ")"
+ R_BRACK@4999..5000 "]"
+ WHITESPACE@5000..5009 "\n "
+ FOR_SPEC@5009..5037
+ FOR_KW@5009..5012 "for"
+ WHITESPACE@5012..5013 " "
+ NAME@5013..5014
+ IDENT@5013..5014 "k"
+ WHITESPACE@5014..5015 " "
+ IN_KW@5015..5017 "in"
+ WHITESPACE@5017..5018 " "
+ EXPR_APPLY@5018..5037
+ EXPR_INDEX@5018..5034
+ EXPR_VAR@5018..5021
+ NAME@5018..5021
+ IDENT@5018..5021 "std"
+ DOT@5021..5022 "."
+ NAME@5022..5034
+ IDENT@5022..5034 "objectFields"
+ ARGS_DESC@5034..5037
+ L_PAREN@5034..5035 "("
+ ARG@5035..5036
+ EXPR_VAR@5035..5036
+ NAME@5035..5036
+ IDENT@5035..5036 "v"
+ R_PAREN@5036..5037 ")"
+ WHITESPACE@5037..5044 "\n "
+ R_BRACK@5044..5045 "]"
+ SEMI@5045..5046 ";"
+ WHITESPACE@5046..5053 "\n "
+ TRUE_EXPR@5053..5086
+ EXPR_BINARY@5053..5086
+ LHS_EXPR@5053..5059
+ EXPR_STRING@5053..5059
+ STRING_SINGLE@5053..5059 "'{%s}'"
+ WHITESPACE@5059..5060 " "
+ MODULO@5060..5061 "%"
+ WHITESPACE@5061..5062 " "
+ EXPR_ARRAY@5062..5086
+ L_BRACK@5062..5063 "["
+ EXPR_APPLY@5063..5085
+ EXPR_INDEX@5063..5071
+ EXPR_VAR@5063..5066
+ NAME@5063..5066
+ IDENT@5063..5066 "std"
+ DOT@5066..5067 "."
+ NAME@5067..5071
+ IDENT@5067..5071 "join"
+ ARGS_DESC@5071..5085
+ L_PAREN@5071..5072 "("
+ ARG@5072..5076
+ EXPR_STRING@5072..5076
+ STRING_SINGLE@5072..5076 "', '"
+ COMMA@5076..5077 ","
+ WHITESPACE@5077..5078 " "
+ ARG@5078..5084
+ EXPR_VAR@5078..5084
+ NAME@5078..5084
+ IDENT@5078..5084 "fields"
+ R_PAREN@5084..5085 ")"
+ R_BRACK@5085..5086 "]"
WHITESPACE@5086..5091 "\n "
ELSE_KW@5091..5095 "else"
WHITESPACE@5095..5096 " "
@@ -3480,7 +3480,7 @@
R_PAREN@5541..5542 ")"
COLONCOLON@5542..5544 "::"
WHITESPACE@5544..5549 "\n "
- EXPR_LOCAL@5549..5673
+ STMT_LOCAL@5549..5641
LOCAL_KW@5549..5554 "local"
WHITESPACE@5554..5555 " "
BIND_DESTRUCT@5555..5640
@@ -3555,37 +3555,37 @@
R_PAREN@5638..5639 ")"
R_BRACK@5639..5640 "]"
SEMI@5640..5641 ";"
- WHITESPACE@5641..5646 "\n "
- EXPR_APPLY@5646..5673
- EXPR_INDEX@5646..5654
- EXPR_VAR@5646..5649
- NAME@5646..5649
- IDENT@5646..5649 "std"
- DOT@5649..5650 "."
- NAME@5650..5654
- IDENT@5650..5654 "join"
- ARGS_DESC@5654..5673
- L_PAREN@5654..5655 "("
- ARG@5655..5659
- EXPR_STRING@5655..5659
- STRING_SINGLE@5655..5659 "'\\n'"
- COMMA@5659..5660 ","
- WHITESPACE@5660..5661 " "
- ARG@5661..5672
- EXPR_BINARY@5661..5672
- LHS_EXPR@5661..5665
- EXPR_VAR@5661..5665
- NAME@5661..5665
- IDENT@5661..5665 "vars"
- WHITESPACE@5665..5666 " "
- PLUS@5666..5667 "+"
- WHITESPACE@5667..5668 " "
- EXPR_ARRAY@5668..5672
- L_BRACK@5668..5669 "["
- EXPR_STRING@5669..5671
- STRING_SINGLE@5669..5671 "''"
- R_BRACK@5671..5672 "]"
- R_PAREN@5672..5673 ")"
+ WHITESPACE@5641..5646 "\n "
+ EXPR_APPLY@5646..5673
+ EXPR_INDEX@5646..5654
+ EXPR_VAR@5646..5649
+ NAME@5646..5649
+ IDENT@5646..5649 "std"
+ DOT@5649..5650 "."
+ NAME@5650..5654
+ IDENT@5650..5654 "join"
+ ARGS_DESC@5654..5673
+ L_PAREN@5654..5655 "("
+ ARG@5655..5659
+ EXPR_STRING@5655..5659
+ STRING_SINGLE@5655..5659 "'\\n'"
+ COMMA@5659..5660 ","
+ WHITESPACE@5660..5661 " "
+ ARG@5661..5672
+ EXPR_BINARY@5661..5672
+ LHS_EXPR@5661..5665
+ EXPR_VAR@5661..5665
+ NAME@5661..5665
+ IDENT@5661..5665 "vars"
+ WHITESPACE@5665..5666 " "
+ PLUS@5666..5667 "+"
+ WHITESPACE@5667..5668 " "
+ EXPR_ARRAY@5668..5672
+ L_BRACK@5668..5669 "["
+ EXPR_STRING@5669..5671
+ STRING_SINGLE@5669..5671 "''"
+ R_BRACK@5671..5672 "]"
+ R_PAREN@5672..5673 ")"
COMMA@5673..5674 ","
WHITESPACE@5674..5678 "\n\n "
MEMBER_FIELD_METHOD@5678..6345
@@ -3653,3590 +3653,3098 @@
WHITESPACE@5811..5816 "\n "
ELSE_KW@5816..5820 "else"
WHITESPACE@5820..5827 "\n "
- FALSE_EXPR@5827..6345
- EXPR_LOCAL@5827..6345
- LOCAL_KW@5827..5832 "local"
- WHITESPACE@5832..5833 " "
- BIND_FUNCTION@5833..6326
- NAME@5833..5836
- IDENT@5833..5836 "aux"
- PARAMS_DESC@5836..5839
- L_PAREN@5836..5837 "("
- PARAM@5837..5838
- DESTRUCT_FULL@5837..5838
- NAME@5837..5838
- IDENT@5837..5838 "v"
- R_PAREN@5838..5839 ")"
- WHITESPACE@5839..5840 " "
- ASSIGN@5840..5841 "="
- WHITESPACE@5841..5850 "\n "
- EXPR_IF_THEN_ELSE@5850..6326
- IF_KW@5850..5852 "if"
- WHITESPACE@5852..5853 " "
- EXPR_APPLY@5853..5868
- EXPR_INDEX@5853..5865
- EXPR_VAR@5853..5856
- NAME@5853..5856
- IDENT@5853..5856 "std"
- DOT@5856..5857 "."
- NAME@5857..5865
- IDENT@5857..5865 "isString"
- ARGS_DESC@5865..5868
- L_PAREN@5865..5866 "("
- ARG@5866..5867
- EXPR_VAR@5866..5867
- NAME@5866..5867
- IDENT@5866..5867 "v"
- R_PAREN@5867..5868 ")"
- WHITESPACE@5868..5869 " "
- THEN_KW@5869..5873 "then"
- WHITESPACE@5873..5884 "\n "
- TRUE_EXPR@5884..5885
- EXPR_VAR@5884..5885
- NAME@5884..5885
- IDENT@5884..5885 "v"
- WHITESPACE@5885..5894 "\n "
- ELSE_KW@5894..5898 "else"
- WHITESPACE@5898..5909 "\n "
- FALSE_EXPR@5909..6326
- EXPR_LOCAL@5909..6326
- LOCAL_KW@5909..5914 "local"
- WHITESPACE@5914..5915 " "
- BIND_DESTRUCT@5915..5925
- DESTRUCT_FULL@5915..5918
- NAME@5915..5918
- IDENT@5915..5918 "tag"
- WHITESPACE@5918..5919 " "
- ASSIGN@5919..5920 "="
- WHITESPACE@5920..5921 " "
- EXPR_INDEX_EXPR@5921..5925
- LHS_EXPR@5921..5922
- EXPR_VAR@5921..5922
- NAME@5921..5922
- IDENT@5921..5922 "v"
- L_BRACK@5922..5923 "["
- EXPR_NUMBER@5923..5924
- FLOAT@5923..5924 "0"
- R_BRACK@5924..5925 "]"
- SEMI@5925..5926 ";"
- WHITESPACE@5926..5937 "\n "
- EXPR_LOCAL@5937..6326
- LOCAL_KW@5937..5942 "local"
- WHITESPACE@5942..5943 " "
- BIND_DESTRUCT@5943..5994
- DESTRUCT_FULL@5943..5952
- NAME@5943..5952
- IDENT@5943..5952 "has_attrs"
- WHITESPACE@5952..5953 " "
- ASSIGN@5953..5954 "="
- WHITESPACE@5954..5955 " "
- EXPR_BINARY@5955..5994
- LHS_EXPR@5955..5972
- EXPR_BINARY@5955..5972
- LHS_EXPR@5955..5968
- EXPR_APPLY@5955..5968
- EXPR_INDEX@5955..5965
- EXPR_VAR@5955..5958
- NAME@5955..5958
- IDENT@5955..5958 "std"
- DOT@5958..5959 "."
- NAME@5959..5965
- IDENT@5959..5965 "length"
- ARGS_DESC@5965..5968
- L_PAREN@5965..5966 "("
- ARG@5966..5967
- EXPR_VAR@5966..5967
- NAME@5966..5967
- IDENT@5966..5967 "v"
- R_PAREN@5967..5968 ")"
- WHITESPACE@5968..5969 " "
- GT@5969..5970 ">"
- WHITESPACE@5970..5971 " "
- EXPR_NUMBER@5971..5972
- FLOAT@5971..5972 "1"
- WHITESPACE@5972..5973 " "
- AND@5973..5975 "&&"
- WHITESPACE@5975..5976 " "
- EXPR_APPLY@5976..5994
- EXPR_INDEX@5976..5988
- EXPR_VAR@5976..5979
- NAME@5976..5979
- IDENT@5976..5979 "std"
- DOT@5979..5980 "."
- NAME@5980..5988
- IDENT@5980..5988 "isObject"
- ARGS_DESC@5988..5994
- L_PAREN@5988..5989 "("
- ARG@5989..5993
- EXPR_INDEX_EXPR@5989..5993
- LHS_EXPR@5989..5990
- EXPR_VAR@5989..5990
- NAME@5989..5990
- IDENT@5989..5990 "v"
- L_BRACK@5990..5991 "["
- EXPR_NUMBER@5991..5992
- FLOAT@5991..5992 "1"
- R_BRACK@5992..5993 "]"
- R_PAREN@5993..5994 ")"
- SEMI@5994..5995 ";"
- WHITESPACE@5995..6006 "\n "
- EXPR_LOCAL@6006..6326
- LOCAL_KW@6006..6011 "local"
- WHITESPACE@6011..6012 " "
- BIND_DESTRUCT@6012..6050
- DESTRUCT_FULL@6012..6017
- NAME@6012..6017
- IDENT@6012..6017 "attrs"
- WHITESPACE@6017..6018 " "
- ASSIGN@6018..6019 "="
- WHITESPACE@6019..6020 " "
- EXPR_IF_THEN_ELSE@6020..6050
- IF_KW@6020..6022 "if"
- WHITESPACE@6022..6023 " "
- EXPR_VAR@6023..6032
- NAME@6023..6032
- IDENT@6023..6032 "has_attrs"
- WHITESPACE@6032..6033 " "
- THEN_KW@6033..6037 "then"
- WHITESPACE@6037..6038 " "
- TRUE_EXPR@6038..6042
- EXPR_INDEX_EXPR@6038..6042
- LHS_EXPR@6038..6039
- EXPR_VAR@6038..6039
- NAME@6038..6039
- IDENT@6038..6039 "v"
- L_BRACK@6039..6040 "["
- EXPR_NUMBER@6040..6041
- FLOAT@6040..6041 "1"
- R_BRACK@6041..6042 "]"
- WHITESPACE@6042..6043 " "
- ELSE_KW@6043..6047 "else"
- WHITESPACE@6047..6048 " "
- FALSE_EXPR@6048..6050
- EXPR_OBJECT@6048..6050
- OBJ_BODY_MEMBER_LIST@6048..6050
- L_BRACE@6048..6049 "{"
- R_BRACE@6049..6050 "}"
- SEMI@6050..6051 ";"
- WHITESPACE@6051..6062 "\n "
- EXPR_LOCAL@6062..6326
- LOCAL_KW@6062..6067 "local"
- WHITESPACE@6067..6068 " "
- BIND_DESTRUCT@6068..6113
- DESTRUCT_FULL@6068..6076
- NAME@6068..6076
- IDENT@6068..6076 "children"
- WHITESPACE@6076..6077 " "
- ASSIGN@6077..6078 "="
- WHITESPACE@6078..6079 " "
- EXPR_IF_THEN_ELSE@6079..6113
- IF_KW@6079..6081 "if"
- WHITESPACE@6081..6082 " "
- EXPR_VAR@6082..6091
- NAME@6082..6091
- IDENT@6082..6091 "has_attrs"
- WHITESPACE@6091..6092 " "
- THEN_KW@6092..6096 "then"
- WHITESPACE@6096..6097 " "
- TRUE_EXPR@6097..6102
- EXPR_SLICE@6097..6102
- EXPR_VAR@6097..6098
- NAME@6097..6098
- IDENT@6097..6098 "v"
- SLICE_DESC@6098..6102
- L_BRACK@6098..6099 "["
- EXPR_NUMBER@6099..6100
- FLOAT@6099..6100 "2"
- COLON@6100..6101 ":"
- R_BRACK@6101..6102 "]"
- WHITESPACE@6102..6103 " "
- ELSE_KW@6103..6107 "else"
- WHITESPACE@6107..6108 " "
- FALSE_EXPR@6108..6113
- EXPR_SLICE@6108..6113
- EXPR_VAR@6108..6109
- NAME@6108..6109
- IDENT@6108..6109 "v"
- SLICE_DESC@6109..6113
- L_BRACK@6109..6110 "["
- EXPR_NUMBER@6110..6111
- FLOAT@6110..6111 "1"
- COLON@6111..6112 ":"
- R_BRACK@6112..6113 "]"
- SEMI@6113..6114 ";"
- WHITESPACE@6114..6125 "\n "
- EXPR_LOCAL@6125..6326
- LOCAL_KW@6125..6130 "local"
- WHITESPACE@6130..6131 " "
- BIND_DESTRUCT@6131..6230
- DESTRUCT_FULL@6131..6140
- NAME@6131..6140
- IDENT@6131..6140 "attrs_str"
- WHITESPACE@6140..6141 " "
- ASSIGN@6141..6142 "="
- WHITESPACE@6142..6155 "\n "
- EXPR_APPLY@6155..6230
- EXPR_INDEX@6155..6163
- EXPR_VAR@6155..6158
- NAME@6155..6158
- IDENT@6155..6158 "std"
- DOT@6158..6159 "."
- NAME@6159..6163
- IDENT@6159..6163 "join"
- ARGS_DESC@6163..6230
- L_PAREN@6163..6164 "("
- ARG@6164..6166
- EXPR_STRING@6164..6166
- STRING_SINGLE@6164..6166 "''"
- COMMA@6166..6167 ","
- WHITESPACE@6167..6168 " "
- ARG@6168..6229
- EXPR_ARRAY_COMP@6168..6229
- L_BRACK@6168..6169 "["
- EXPR_BINARY@6169..6195
- LHS_EXPR@6169..6179
- EXPR_STRING@6169..6179
- STRING_SINGLE@6169..6179 "' %s=\"%s\"'"
- WHITESPACE@6179..6180 " "
- MODULO@6180..6181 "%"
- WHITESPACE@6181..6182 " "
- EXPR_ARRAY@6182..6195
- L_BRACK@6182..6183 "["
- EXPR_VAR@6183..6184
- NAME@6183..6184
- IDENT@6183..6184 "k"
- COMMA@6184..6185 ","
- WHITESPACE@6185..6186 " "
- EXPR_INDEX_EXPR@6186..6194
- LHS_EXPR@6186..6191
- EXPR_VAR@6186..6191
- NAME@6186..6191
- IDENT@6186..6191 "attrs"
- L_BRACK@6191..6192 "["
- EXPR_VAR@6192..6193
- NAME@6192..6193
- IDENT@6192..6193 "k"
- R_BRACK@6193..6194 "]"
- R_BRACK@6194..6195 "]"
- WHITESPACE@6195..6196 " "
- FOR_SPEC@6196..6228
- FOR_KW@6196..6199 "for"
- WHITESPACE@6199..6200 " "
- NAME@6200..6201
- IDENT@6200..6201 "k"
- WHITESPACE@6201..6202 " "
- IN_KW@6202..6204 "in"
- WHITESPACE@6204..6205 " "
- EXPR_APPLY@6205..6228
- EXPR_INDEX@6205..6221
- EXPR_VAR@6205..6208
- NAME@6205..6208
- IDENT@6205..6208 "std"
- DOT@6208..6209 "."
- NAME@6209..6221
- IDENT@6209..6221 "objectFields"
- ARGS_DESC@6221..6228
- L_PAREN@6221..6222 "("
- ARG@6222..6227
- EXPR_VAR@6222..6227
- NAME@6222..6227
- IDENT@6222..6227 "attrs"
- R_PAREN@6227..6228 ")"
- R_BRACK@6228..6229 "]"
- R_PAREN@6229..6230 ")"
- SEMI@6230..6231 ";"
- WHITESPACE@6231..6242 "\n "
- EXPR_APPLY@6242..6326
- EXPR_INDEX@6242..6254
- EXPR_VAR@6242..6245
- NAME@6242..6245
- IDENT@6242..6245 "std"
- DOT@6245..6246 "."
- NAME@6246..6254
- IDENT@6246..6254 "deepJoin"
- ARGS_DESC@6254..6326
- L_PAREN@6254..6255 "("
- ARG@6255..6325
- EXPR_ARRAY@6255..6325
- L_BRACK@6255..6256 "["
- EXPR_STRING@6256..6259
- STRING_SINGLE@6256..6259 "'<'"
- COMMA@6259..6260 ","
- WHITESPACE@6260..6261 " "
- EXPR_VAR@6261..6264
- NAME@6261..6264
- IDENT@6261..6264 "tag"
- COMMA@6264..6265 ","
- WHITESPACE@6265..6266 " "
- EXPR_VAR@6266..6275
- NAME@6266..6275
- IDENT@6266..6275 "attrs_str"
- COMMA@6275..6276 ","
- WHITESPACE@6276..6277 " "
- EXPR_STRING@6277..6280
- STRING_SINGLE@6277..6280 "'>'"
- COMMA@6280..6281 ","
- WHITESPACE@6281..6282 " "
- EXPR_ARRAY_COMP@6282..6308
- L_BRACK@6282..6283 "["
- EXPR_APPLY@6283..6289
- EXPR_VAR@6283..6286
- NAME@6283..6286
- IDENT@6283..6286 "aux"
- ARGS_DESC@6286..6289
- L_PAREN@6286..6287 "("
- ARG@6287..6288
- EXPR_VAR@6287..6288
- NAME@6287..6288
- IDENT@6287..6288 "x"
- R_PAREN@6288..6289 ")"
- WHITESPACE@6289..6290 " "
- FOR_SPEC@6290..6307
- FOR_KW@6290..6293 "for"
- WHITESPACE@6293..6294 " "
- NAME@6294..6295
- IDENT@6294..6295 "x"
- WHITESPACE@6295..6296 " "
- IN_KW@6296..6298 "in"
- WHITESPACE@6298..6299 " "
- EXPR_VAR@6299..6307
- NAME@6299..6307
- IDENT@6299..6307 "children"
- R_BRACK@6307..6308 "]"
- COMMA@6308..6309 ","
- WHITESPACE@6309..6310 " "
- EXPR_STRING@6310..6314
- STRING_SINGLE@6310..6314 "'</'"
- COMMA@6314..6315 ","
- WHITESPACE@6315..6316 " "
- EXPR_VAR@6316..6319
- NAME@6316..6319
- IDENT@6316..6319 "tag"
- COMMA@6319..6320 ","
- WHITESPACE@6320..6321 " "
- EXPR_STRING@6321..6324
- STRING_SINGLE@6321..6324 "'>'"
- R_BRACK@6324..6325 "]"
- R_PAREN@6325..6326 ")"
- SEMI@6326..6327 ";"
- WHITESPACE@6327..6335 "\n\n "
- EXPR_APPLY@6335..6345
- EXPR_VAR@6335..6338
- NAME@6335..6338
- IDENT@6335..6338 "aux"
- ARGS_DESC@6338..6345
- L_PAREN@6338..6339 "("
- ARG@6339..6344
- EXPR_VAR@6339..6344
- NAME@6339..6344
- IDENT@6339..6344 "value"
- R_PAREN@6344..6345 ")"
+ STMT_LOCAL@5827..6327
+ LOCAL_KW@5827..5832 "local"
+ WHITESPACE@5832..5833 " "
+ BIND_FUNCTION@5833..6326
+ NAME@5833..5836
+ IDENT@5833..5836 "aux"
+ PARAMS_DESC@5836..5839
+ L_PAREN@5836..5837 "("
+ PARAM@5837..5838
+ DESTRUCT_FULL@5837..5838
+ NAME@5837..5838
+ IDENT@5837..5838 "v"
+ R_PAREN@5838..5839 ")"
+ WHITESPACE@5839..5840 " "
+ ASSIGN@5840..5841 "="
+ WHITESPACE@5841..5850 "\n "
+ EXPR_IF_THEN_ELSE@5850..6326
+ IF_KW@5850..5852 "if"
+ WHITESPACE@5852..5853 " "
+ EXPR_APPLY@5853..5868
+ EXPR_INDEX@5853..5865
+ EXPR_VAR@5853..5856
+ NAME@5853..5856
+ IDENT@5853..5856 "std"
+ DOT@5856..5857 "."
+ NAME@5857..5865
+ IDENT@5857..5865 "isString"
+ ARGS_DESC@5865..5868
+ L_PAREN@5865..5866 "("
+ ARG@5866..5867
+ EXPR_VAR@5866..5867
+ NAME@5866..5867
+ IDENT@5866..5867 "v"
+ R_PAREN@5867..5868 ")"
+ WHITESPACE@5868..5869 " "
+ THEN_KW@5869..5873 "then"
+ WHITESPACE@5873..5884 "\n "
+ TRUE_EXPR@5884..5885
+ EXPR_VAR@5884..5885
+ NAME@5884..5885
+ IDENT@5884..5885 "v"
+ WHITESPACE@5885..5894 "\n "
+ ELSE_KW@5894..5898 "else"
+ WHITESPACE@5898..5909 "\n "
+ STMT_LOCAL@5909..5926
+ LOCAL_KW@5909..5914 "local"
+ WHITESPACE@5914..5915 " "
+ BIND_DESTRUCT@5915..5925
+ DESTRUCT_FULL@5915..5918
+ NAME@5915..5918
+ IDENT@5915..5918 "tag"
+ WHITESPACE@5918..5919 " "
+ ASSIGN@5919..5920 "="
+ WHITESPACE@5920..5921 " "
+ EXPR_INDEX_EXPR@5921..5925
+ LHS_EXPR@5921..5922
+ EXPR_VAR@5921..5922
+ NAME@5921..5922
+ IDENT@5921..5922 "v"
+ L_BRACK@5922..5923 "["
+ EXPR_NUMBER@5923..5924
+ FLOAT@5923..5924 "0"
+ R_BRACK@5924..5925 "]"
+ SEMI@5925..5926 ";"
+ WHITESPACE@5926..5937 "\n "
+ STMT_LOCAL@5937..5995
+ LOCAL_KW@5937..5942 "local"
+ WHITESPACE@5942..5943 " "
+ BIND_DESTRUCT@5943..5994
+ DESTRUCT_FULL@5943..5952
+ NAME@5943..5952
+ IDENT@5943..5952 "has_attrs"
+ WHITESPACE@5952..5953 " "
+ ASSIGN@5953..5954 "="
+ WHITESPACE@5954..5955 " "
+ EXPR_BINARY@5955..5994
+ LHS_EXPR@5955..5972
+ EXPR_BINARY@5955..5972
+ LHS_EXPR@5955..5968
+ EXPR_APPLY@5955..5968
+ EXPR_INDEX@5955..5965
+ EXPR_VAR@5955..5958
+ NAME@5955..5958
+ IDENT@5955..5958 "std"
+ DOT@5958..5959 "."
+ NAME@5959..5965
+ IDENT@5959..5965 "length"
+ ARGS_DESC@5965..5968
+ L_PAREN@5965..5966 "("
+ ARG@5966..5967
+ EXPR_VAR@5966..5967
+ NAME@5966..5967
+ IDENT@5966..5967 "v"
+ R_PAREN@5967..5968 ")"
+ WHITESPACE@5968..5969 " "
+ GT@5969..5970 ">"
+ WHITESPACE@5970..5971 " "
+ EXPR_NUMBER@5971..5972
+ FLOAT@5971..5972 "1"
+ WHITESPACE@5972..5973 " "
+ AND@5973..5975 "&&"
+ WHITESPACE@5975..5976 " "
+ EXPR_APPLY@5976..5994
+ EXPR_INDEX@5976..5988
+ EXPR_VAR@5976..5979
+ NAME@5976..5979
+ IDENT@5976..5979 "std"
+ DOT@5979..5980 "."
+ NAME@5980..5988
+ IDENT@5980..5988 "isObject"
+ ARGS_DESC@5988..5994
+ L_PAREN@5988..5989 "("
+ ARG@5989..5993
+ EXPR_INDEX_EXPR@5989..5993
+ LHS_EXPR@5989..5990
+ EXPR_VAR@5989..5990
+ NAME@5989..5990
+ IDENT@5989..5990 "v"
+ L_BRACK@5990..5991 "["
+ EXPR_NUMBER@5991..5992
+ FLOAT@5991..5992 "1"
+ R_BRACK@5992..5993 "]"
+ R_PAREN@5993..5994 ")"
+ SEMI@5994..5995 ";"
+ WHITESPACE@5995..6006 "\n "
+ STMT_LOCAL@6006..6051
+ LOCAL_KW@6006..6011 "local"
+ WHITESPACE@6011..6012 " "
+ BIND_DESTRUCT@6012..6050
+ DESTRUCT_FULL@6012..6017
+ NAME@6012..6017
+ IDENT@6012..6017 "attrs"
+ WHITESPACE@6017..6018 " "
+ ASSIGN@6018..6019 "="
+ WHITESPACE@6019..6020 " "
+ EXPR_IF_THEN_ELSE@6020..6050
+ IF_KW@6020..6022 "if"
+ WHITESPACE@6022..6023 " "
+ EXPR_VAR@6023..6032
+ NAME@6023..6032
+ IDENT@6023..6032 "has_attrs"
+ WHITESPACE@6032..6033 " "
+ THEN_KW@6033..6037 "then"
+ WHITESPACE@6037..6038 " "
+ TRUE_EXPR@6038..6042
+ EXPR_INDEX_EXPR@6038..6042
+ LHS_EXPR@6038..6039
+ EXPR_VAR@6038..6039
+ NAME@6038..6039
+ IDENT@6038..6039 "v"
+ L_BRACK@6039..6040 "["
+ EXPR_NUMBER@6040..6041
+ FLOAT@6040..6041 "1"
+ R_BRACK@6041..6042 "]"
+ WHITESPACE@6042..6043 " "
+ ELSE_KW@6043..6047 "else"
+ WHITESPACE@6047..6048 " "
+ FALSE_EXPR@6048..6050
+ EXPR_OBJECT@6048..6050
+ OBJ_BODY_MEMBER_LIST@6048..6050
+ L_BRACE@6048..6049 "{"
+ R_BRACE@6049..6050 "}"
+ SEMI@6050..6051 ";"
+ WHITESPACE@6051..6062 "\n "
+ STMT_LOCAL@6062..6114
+ LOCAL_KW@6062..6067 "local"
+ WHITESPACE@6067..6068 " "
+ BIND_DESTRUCT@6068..6113
+ DESTRUCT_FULL@6068..6076
+ NAME@6068..6076
+ IDENT@6068..6076 "children"
+ WHITESPACE@6076..6077 " "
+ ASSIGN@6077..6078 "="
+ WHITESPACE@6078..6079 " "
+ EXPR_IF_THEN_ELSE@6079..6113
+ IF_KW@6079..6081 "if"
+ WHITESPACE@6081..6082 " "
+ EXPR_VAR@6082..6091
+ NAME@6082..6091
+ IDENT@6082..6091 "has_attrs"
+ WHITESPACE@6091..6092 " "
+ THEN_KW@6092..6096 "then"
+ WHITESPACE@6096..6097 " "
+ TRUE_EXPR@6097..6102
+ EXPR_SLICE@6097..6102
+ EXPR_VAR@6097..6098
+ NAME@6097..6098
+ IDENT@6097..6098 "v"
+ SLICE_DESC@6098..6102
+ L_BRACK@6098..6099 "["
+ EXPR_NUMBER@6099..6100
+ FLOAT@6099..6100 "2"
+ COLON@6100..6101 ":"
+ R_BRACK@6101..6102 "]"
+ WHITESPACE@6102..6103 " "
+ ELSE_KW@6103..6107 "else"
+ WHITESPACE@6107..6108 " "
+ FALSE_EXPR@6108..6113
+ EXPR_SLICE@6108..6113
+ EXPR_VAR@6108..6109
+ NAME@6108..6109
+ IDENT@6108..6109 "v"
+ SLICE_DESC@6109..6113
+ L_BRACK@6109..6110 "["
+ EXPR_NUMBER@6110..6111
+ FLOAT@6110..6111 "1"
+ COLON@6111..6112 ":"
+ R_BRACK@6112..6113 "]"
+ SEMI@6113..6114 ";"
+ WHITESPACE@6114..6125 "\n "
+ STMT_LOCAL@6125..6231
+ LOCAL_KW@6125..6130 "local"
+ WHITESPACE@6130..6131 " "
+ BIND_DESTRUCT@6131..6230
+ DESTRUCT_FULL@6131..6140
+ NAME@6131..6140
+ IDENT@6131..6140 "attrs_str"
+ WHITESPACE@6140..6141 " "
+ ASSIGN@6141..6142 "="
+ WHITESPACE@6142..6155 "\n "
+ EXPR_APPLY@6155..6230
+ EXPR_INDEX@6155..6163
+ EXPR_VAR@6155..6158
+ NAME@6155..6158
+ IDENT@6155..6158 "std"
+ DOT@6158..6159 "."
+ NAME@6159..6163
+ IDENT@6159..6163 "join"
+ ARGS_DESC@6163..6230
+ L_PAREN@6163..6164 "("
+ ARG@6164..6166
+ EXPR_STRING@6164..6166
+ STRING_SINGLE@6164..6166 "''"
+ COMMA@6166..6167 ","
+ WHITESPACE@6167..6168 " "
+ ARG@6168..6229
+ EXPR_ARRAY_COMP@6168..6229
+ L_BRACK@6168..6169 "["
+ EXPR_BINARY@6169..6195
+ LHS_EXPR@6169..6179
+ EXPR_STRING@6169..6179
+ STRING_SINGLE@6169..6179 "' %s=\"%s\"'"
+ WHITESPACE@6179..6180 " "
+ MODULO@6180..6181 "%"
+ WHITESPACE@6181..6182 " "
+ EXPR_ARRAY@6182..6195
+ L_BRACK@6182..6183 "["
+ EXPR_VAR@6183..6184
+ NAME@6183..6184
+ IDENT@6183..6184 "k"
+ COMMA@6184..6185 ","
+ WHITESPACE@6185..6186 " "
+ EXPR_INDEX_EXPR@6186..6194
+ LHS_EXPR@6186..6191
+ EXPR_VAR@6186..6191
+ NAME@6186..6191
+ IDENT@6186..6191 "attrs"
+ L_BRACK@6191..6192 "["
+ EXPR_VAR@6192..6193
+ NAME@6192..6193
+ IDENT@6192..6193 "k"
+ R_BRACK@6193..6194 "]"
+ R_BRACK@6194..6195 "]"
+ WHITESPACE@6195..6196 " "
+ FOR_SPEC@6196..6228
+ FOR_KW@6196..6199 "for"
+ WHITESPACE@6199..6200 " "
+ NAME@6200..6201
+ IDENT@6200..6201 "k"
+ WHITESPACE@6201..6202 " "
+ IN_KW@6202..6204 "in"
+ WHITESPACE@6204..6205 " "
+ EXPR_APPLY@6205..6228
+ EXPR_INDEX@6205..6221
+ EXPR_VAR@6205..6208
+ NAME@6205..6208
+ IDENT@6205..6208 "std"
+ DOT@6208..6209 "."
+ NAME@6209..6221
+ IDENT@6209..6221 "objectFields"
+ ARGS_DESC@6221..6228
+ L_PAREN@6221..6222 "("
+ ARG@6222..6227
+ EXPR_VAR@6222..6227
+ NAME@6222..6227
+ IDENT@6222..6227 "attrs"
+ R_PAREN@6227..6228 ")"
+ R_BRACK@6228..6229 "]"
+ R_PAREN@6229..6230 ")"
+ SEMI@6230..6231 ";"
+ WHITESPACE@6231..6242 "\n "
+ FALSE_EXPR@6242..6326
+ EXPR_APPLY@6242..6326
+ EXPR_INDEX@6242..6254
+ EXPR_VAR@6242..6245
+ NAME@6242..6245
+ IDENT@6242..6245 "std"
+ DOT@6245..6246 "."
+ NAME@6246..6254
+ IDENT@6246..6254 "deepJoin"
+ ARGS_DESC@6254..6326
+ L_PAREN@6254..6255 "("
+ ARG@6255..6325
+ EXPR_ARRAY@6255..6325
+ L_BRACK@6255..6256 "["
+ EXPR_STRING@6256..6259
+ STRING_SINGLE@6256..6259 "'<'"
+ COMMA@6259..6260 ","
+ WHITESPACE@6260..6261 " "
+ EXPR_VAR@6261..6264
+ NAME@6261..6264
+ IDENT@6261..6264 "tag"
+ COMMA@6264..6265 ","
+ WHITESPACE@6265..6266 " "
+ EXPR_VAR@6266..6275
+ NAME@6266..6275
+ IDENT@6266..6275 "attrs_str"
+ COMMA@6275..6276 ","
+ WHITESPACE@6276..6277 " "
+ EXPR_STRING@6277..6280
+ STRING_SINGLE@6277..6280 "'>'"
+ COMMA@6280..6281 ","
+ WHITESPACE@6281..6282 " "
+ EXPR_ARRAY_COMP@6282..6308
+ L_BRACK@6282..6283 "["
+ EXPR_APPLY@6283..6289
+ EXPR_VAR@6283..6286
+ NAME@6283..6286
+ IDENT@6283..6286 "aux"
+ ARGS_DESC@6286..6289
+ L_PAREN@6286..6287 "("
+ ARG@6287..6288
+ EXPR_VAR@6287..6288
+ NAME@6287..6288
+ IDENT@6287..6288 "x"
+ R_PAREN@6288..6289 ")"
+ WHITESPACE@6289..6290 " "
+ FOR_SPEC@6290..6307
+ FOR_KW@6290..6293 "for"
+ WHITESPACE@6293..6294 " "
+ NAME@6294..6295
+ IDENT@6294..6295 "x"
+ WHITESPACE@6295..6296 " "
+ IN_KW@6296..6298 "in"
+ WHITESPACE@6298..6299 " "
+ EXPR_VAR@6299..6307
+ NAME@6299..6307
+ IDENT@6299..6307 "children"
+ R_BRACK@6307..6308 "]"
+ COMMA@6308..6309 ","
+ WHITESPACE@6309..6310 " "
+ EXPR_STRING@6310..6314
+ STRING_SINGLE@6310..6314 "'</'"
+ COMMA@6314..6315 ","
+ WHITESPACE@6315..6316 " "
+ EXPR_VAR@6316..6319
+ NAME@6316..6319
+ IDENT@6316..6319 "tag"
+ COMMA@6319..6320 ","
+ WHITESPACE@6320..6321 " "
+ EXPR_STRING@6321..6324
+ STRING_SINGLE@6321..6324 "'>'"
+ R_BRACK@6324..6325 "]"
+ R_PAREN@6325..6326 ")"
+ SEMI@6326..6327 ";"
+ WHITESPACE@6327..6335 "\n\n "
+ FALSE_EXPR@6335..6345
+ EXPR_APPLY@6335..6345
+ EXPR_VAR@6335..6338
+ NAME@6335..6338
+ IDENT@6335..6338 "aux"
+ ARGS_DESC@6338..6345
+ L_PAREN@6338..6339 "("
+ ARG@6339..6344
+ EXPR_VAR@6339..6344
+ NAME@6339..6344
+ IDENT@6339..6344 "value"
+ R_PAREN@6344..6345 ")"
COMMA@6345..6346 ","
WHITESPACE@6346..6350 "\n\n "
- MEMBER_FIELD_METHOD@6350..6556
- FIELD_NAME_FIXED@6350..6354
- NAME@6350..6354
- IDENT@6350..6354 "uniq"
- PARAMS_DESC@6354..6368
- L_PAREN@6354..6355 "("
- PARAM@6355..6358
- DESTRUCT_FULL@6355..6358
- NAME@6355..6358
- IDENT@6355..6358 "arr"
- COMMA@6358..6359 ","
- WHITESPACE@6359..6360 " "
- PARAM@6360..6367
- DESTRUCT_FULL@6360..6364
- NAME@6360..6364
- IDENT@6360..6364 "keyF"
- ASSIGN@6364..6365 "="
- EXPR_VAR@6365..6367
- NAME@6365..6367
- IDENT@6365..6367 "id"
- R_PAREN@6367..6368 ")"
- COLONCOLON@6368..6370 "::"
- WHITESPACE@6370..6375 "\n "
- EXPR_LOCAL@6375..6556
- LOCAL_KW@6375..6380 "local"
- WHITESPACE@6380..6381 " "
- BIND_FUNCTION@6381..6529
- NAME@6381..6382
- IDENT@6381..6382 "f"
- PARAMS_DESC@6382..6388
- L_PAREN@6382..6383 "("
- PARAM@6383..6384
- DESTRUCT_FULL@6383..6384
- NAME@6383..6384
- IDENT@6383..6384 "a"
- COMMA@6384..6385 ","
- WHITESPACE@6385..6386 " "
- PARAM@6386..6387
- DESTRUCT_FULL@6386..6387
- NAME@6386..6387
- IDENT@6386..6387 "b"
- R_PAREN@6387..6388 ")"
- WHITESPACE@6388..6389 " "
- ASSIGN@6389..6390 "="
- WHITESPACE@6390..6397 "\n "
- EXPR_IF_THEN_ELSE@6397..6529
- IF_KW@6397..6399 "if"
- WHITESPACE@6399..6400 " "
- EXPR_BINARY@6400..6418
- LHS_EXPR@6400..6413
- EXPR_APPLY@6400..6413
- EXPR_INDEX@6400..6410
- EXPR_VAR@6400..6403
- NAME@6400..6403
- IDENT@6400..6403 "std"
- DOT@6403..6404 "."
- NAME@6404..6410
- IDENT@6404..6410 "length"
- ARGS_DESC@6410..6413
- L_PAREN@6410..6411 "("
- ARG@6411..6412
- EXPR_VAR@6411..6412
- NAME@6411..6412
- IDENT@6411..6412 "a"
- R_PAREN@6412..6413 ")"
- WHITESPACE@6413..6414 " "
- EQ@6414..6416 "=="
- WHITESPACE@6416..6417 " "
- EXPR_NUMBER@6417..6418
- FLOAT@6417..6418 "0"
- WHITESPACE@6418..6419 " "
- THEN_KW@6419..6423 "then"
- WHITESPACE@6423..6432 "\n "
- TRUE_EXPR@6432..6435
- EXPR_ARRAY@6432..6435
- L_BRACK@6432..6433 "["
- EXPR_VAR@6433..6434
- NAME@6433..6434
- IDENT@6433..6434 "b"
- R_BRACK@6434..6435 "]"
- WHITESPACE@6435..6442 "\n "
- ELSE_KW@6442..6446 "else"
- WHITESPACE@6446..6447 " "
- FALSE_EXPR@6447..6529
- EXPR_IF_THEN_ELSE@6447..6529
- IF_KW@6447..6449 "if"
- WHITESPACE@6449..6450 " "
- EXPR_BINARY@6450..6487
- LHS_EXPR@6450..6476
- EXPR_APPLY@6450..6476
- EXPR_VAR@6450..6454
- NAME@6450..6454
- IDENT@6450..6454 "keyF"
- ARGS_DESC@6454..6476
- L_PAREN@6454..6455 "("
- ARG@6455..6475
- EXPR_INDEX_EXPR@6455..6475
- LHS_EXPR@6455..6456
- EXPR_VAR@6455..6456
- NAME@6455..6456
- IDENT@6455..6456 "a"
- L_BRACK@6456..6457 "["
- EXPR_BINARY@6457..6474
- LHS_EXPR@6457..6470
- EXPR_APPLY@6457..6470
- EXPR_INDEX@6457..6467
- EXPR_VAR@6457..6460
- NAME@6457..6460
- IDENT@6457..6460 "std"
- DOT@6460..6461 "."
- NAME@6461..6467
- IDENT@6461..6467 "length"
- ARGS_DESC@6467..6470
- L_PAREN@6467..6468 "("
- ARG@6468..6469
- EXPR_VAR@6468..6469
- NAME@6468..6469
- IDENT@6468..6469 "a"
- R_PAREN@6469..6470 ")"
- WHITESPACE@6470..6471 " "
- MINUS@6471..6472 "-"
- WHITESPACE@6472..6473 " "
- EXPR_NUMBER@6473..6474
- FLOAT@6473..6474 "1"
- R_BRACK@6474..6475 "]"
- R_PAREN@6475..6476 ")"
- WHITESPACE@6476..6477 " "
- EQ@6477..6479 "=="
- WHITESPACE@6479..6480 " "
- EXPR_APPLY@6480..6487
- EXPR_VAR@6480..6484
- NAME@6480..6484
- IDENT@6480..6484 "keyF"
- ARGS_DESC@6484..6487
- L_PAREN@6484..6485 "("
- ARG@6485..6486
- EXPR_VAR@6485..6486
- NAME@6485..6486
- IDENT@6485..6486 "b"
- R_PAREN@6486..6487 ")"
- WHITESPACE@6487..6488 " "
- THEN_KW@6488..6492 "then"
- WHITESPACE@6492..6501 "\n "
- TRUE_EXPR@6501..6502
- EXPR_VAR@6501..6502
- NAME@6501..6502
- IDENT@6501..6502 "a"
- WHITESPACE@6502..6509 "\n "
- ELSE_KW@6509..6513 "else"
- WHITESPACE@6513..6522 "\n "
- FALSE_EXPR@6522..6529
- EXPR_BINARY@6522..6529
- LHS_EXPR@6522..6523
- EXPR_VAR@6522..6523
- NAME@6522..6523
- IDENT@6522..6523 "a"
- WHITESPACE@6523..6524 " "
- PLUS@6524..6525 "+"
- WHITESPACE@6525..6526 " "
- EXPR_ARRAY@6526..6529
- L_BRACK@6526..6527 "["
- EXPR_VAR@6527..6528
- NAME@6527..6528
- IDENT@6527..6528 "b"
- R_BRACK@6528..6529 "]"
- SEMI@6529..6530 ";"
- WHITESPACE@6530..6535 "\n "
- EXPR_APPLY@6535..6556
- EXPR_INDEX@6535..6544
- EXPR_VAR@6535..6538
- NAME@6535..6538
- IDENT@6535..6538 "std"
- DOT@6538..6539 "."
- NAME@6539..6544
- IDENT@6539..6544 "foldl"
- ARGS_DESC@6544..6556
- L_PAREN@6544..6545 "("
- ARG@6545..6546
- EXPR_VAR@6545..6546
- NAME@6545..6546
- IDENT@6545..6546 "f"
- COMMA@6546..6547 ","
- WHITESPACE@6547..6548 " "
- ARG@6548..6551
- EXPR_VAR@6548..6551
- NAME@6548..6551
- IDENT@6548..6551 "arr"
- COMMA@6551..6552 ","
- WHITESPACE@6552..6553 " "
- ARG@6553..6555
- EXPR_ARRAY@6553..6555
- L_BRACK@6553..6554 "["
- R_BRACK@6554..6555 "]"
- R_PAREN@6555..6556 ")"
- COMMA@6556..6557 ","
- WHITESPACE@6557..6561 "\n\n "
- MEMBER_FIELD_METHOD@6561..6620
- FIELD_NAME_FIXED@6561..6564
- NAME@6561..6564
- IDENT@6561..6564 "set"
- PARAMS_DESC@6564..6578
- L_PAREN@6564..6565 "("
- PARAM@6565..6568
- DESTRUCT_FULL@6565..6568
- NAME@6565..6568
- IDENT@6565..6568 "arr"
- COMMA@6568..6569 ","
- WHITESPACE@6569..6570 " "
- PARAM@6570..6577
- DESTRUCT_FULL@6570..6574
- NAME@6570..6574
- IDENT@6570..6574 "keyF"
- ASSIGN@6574..6575 "="
- EXPR_VAR@6575..6577
- NAME@6575..6577
- IDENT@6575..6577 "id"
- R_PAREN@6577..6578 ")"
- COLONCOLON@6578..6580 "::"
- WHITESPACE@6580..6585 "\n "
- EXPR_APPLY@6585..6620
- EXPR_INDEX@6585..6593
- EXPR_VAR@6585..6588
- NAME@6585..6588
- IDENT@6585..6588 "std"
- DOT@6588..6589 "."
- NAME@6589..6593
- IDENT@6589..6593 "uniq"
- ARGS_DESC@6593..6620
- L_PAREN@6593..6594 "("
- ARG@6594..6613
- EXPR_APPLY@6594..6613
- EXPR_INDEX@6594..6602
- EXPR_VAR@6594..6597
- NAME@6594..6597
- IDENT@6594..6597 "std"
- DOT@6597..6598 "."
- NAME@6598..6602
- IDENT@6598..6602 "sort"
- ARGS_DESC@6602..6613
- L_PAREN@6602..6603 "("
- ARG@6603..6606
- EXPR_VAR@6603..6606
- NAME@6603..6606
- IDENT@6603..6606 "arr"
- COMMA@6606..6607 ","
- WHITESPACE@6607..6608 " "
- ARG@6608..6612
- EXPR_VAR@6608..6612
- NAME@6608..6612
- IDENT@6608..6612 "keyF"
- R_PAREN@6612..6613 ")"
- COMMA@6613..6614 ","
- WHITESPACE@6614..6615 " "
- ARG@6615..6619
- EXPR_VAR@6615..6619
- NAME@6615..6619
- IDENT@6615..6619 "keyF"
- R_PAREN@6619..6620 ")"
- COMMA@6620..6621 ","
- WHITESPACE@6621..6625 "\n\n "
- MEMBER_FIELD_METHOD@6625..6760
- FIELD_NAME_FIXED@6625..6634
- NAME@6625..6634
- IDENT@6625..6634 "setMember"
- PARAMS_DESC@6634..6651
- L_PAREN@6634..6635 "("
- PARAM@6635..6636
- DESTRUCT_FULL@6635..6636
- NAME@6635..6636
- IDENT@6635..6636 "x"
- COMMA@6636..6637 ","
- WHITESPACE@6637..6638 " "
- PARAM@6638..6641
- DESTRUCT_FULL@6638..6641
- NAME@6638..6641
- IDENT@6638..6641 "arr"
- COMMA@6641..6642 ","
- WHITESPACE@6642..6643 " "
- PARAM@6643..6650
- DESTRUCT_FULL@6643..6647
- NAME@6643..6647
- IDENT@6643..6647 "keyF"
- ASSIGN@6647..6648 "="
- EXPR_VAR@6648..6650
- NAME@6648..6650
- IDENT@6648..6650 "id"
- R_PAREN@6650..6651 ")"
- COLONCOLON@6651..6653 "::"
- WHITESPACE@6653..6658 "\n "
- SINGLE_LINE_SLASH_COMMENT@6658..6712 "// TODO(dcunnin): Bin ..."
- WHITESPACE@6712..6716 " "
- EXPR_BINARY@6716..6760
- LHS_EXPR@6716..6756
- EXPR_APPLY@6716..6756
- EXPR_INDEX@6716..6726
- EXPR_VAR@6716..6719
- NAME@6716..6719
- IDENT@6716..6719 "std"
- DOT@6719..6720 "."
- NAME@6720..6726
- IDENT@6720..6726 "length"
- ARGS_DESC@6726..6756
- L_PAREN@6726..6727 "("
- ARG@6727..6755
- EXPR_APPLY@6727..6755
- EXPR_INDEX@6727..6739
- EXPR_VAR@6727..6730
- NAME@6727..6730
- IDENT@6727..6730 "std"
- DOT@6730..6731 "."
- NAME@6731..6739
- IDENT@6731..6739 "setInter"
- ARGS_DESC@6739..6755
- L_PAREN@6739..6740 "("
- ARG@6740..6743
- EXPR_ARRAY@6740..6743
- L_BRACK@6740..6741 "["
- EXPR_VAR@6741..6742
- NAME@6741..6742
- IDENT@6741..6742 "x"
- R_BRACK@6742..6743 "]"
- COMMA@6743..6744 ","
- WHITESPACE@6744..6745 " "
- ARG@6745..6748
- EXPR_VAR@6745..6748
- NAME@6745..6748
- IDENT@6745..6748 "arr"
- COMMA@6748..6749 ","
- WHITESPACE@6749..6750 " "
- ARG@6750..6754
- EXPR_VAR@6750..6754
- NAME@6750..6754
- IDENT@6750..6754 "keyF"
- R_PAREN@6754..6755 ")"
- R_PAREN@6755..6756 ")"
- WHITESPACE@6756..6757 " "
- GT@6757..6758 ">"
- WHITESPACE@6758..6759 " "
- EXPR_NUMBER@6759..6760
- FLOAT@6759..6760 "0"
- COMMA@6760..6761 ","
- WHITESPACE@6761..6765 "\n\n "
- MEMBER_FIELD_METHOD@6765..7314
- FIELD_NAME_FIXED@6765..6773
- NAME@6765..6773
- IDENT@6765..6773 "setUnion"
- PARAMS_DESC@6773..6788
- L_PAREN@6773..6774 "("
- PARAM@6774..6775
- DESTRUCT_FULL@6774..6775
- NAME@6774..6775
- IDENT@6774..6775 "a"
- COMMA@6775..6776 ","
- WHITESPACE@6776..6777 " "
- PARAM@6777..6778
- DESTRUCT_FULL@6777..6778
- NAME@6777..6778
- IDENT@6777..6778 "b"
- COMMA@6778..6779 ","
- WHITESPACE@6779..6780 " "
- PARAM@6780..6787
- DESTRUCT_FULL@6780..6784
- NAME@6780..6784
- IDENT@6780..6784 "keyF"
- ASSIGN@6784..6785 "="
- EXPR_VAR@6785..6787
- NAME@6785..6787
- IDENT@6785..6787 "id"
- R_PAREN@6787..6788 ")"
- COLONCOLON@6788..6790 "::"
- WHITESPACE@6790..6795 "\n "
- SINGLE_LINE_SLASH_COMMENT@6795..6837 "// NOTE: order matter ..."
- WHITESPACE@6837..6841 " "
- EXPR_LOCAL@6841..7314
- LOCAL_KW@6841..6846 "local"
- WHITESPACE@6846..6847 " "
- BIND_FUNCTION@6847..7289
- NAME@6847..6850
- IDENT@6847..6850 "aux"
- PARAMS_DESC@6850..6867
- L_PAREN@6850..6851 "("
- PARAM@6851..6852
- DESTRUCT_FULL@6851..6852
- NAME@6851..6852
- IDENT@6851..6852 "a"
- COMMA@6852..6853 ","
- WHITESPACE@6853..6854 " "
- PARAM@6854..6855
- DESTRUCT_FULL@6854..6855
- NAME@6854..6855
- IDENT@6854..6855 "b"
- COMMA@6855..6856 ","
- WHITESPACE@6856..6857 " "
- PARAM@6857..6858
- DESTRUCT_FULL@6857..6858
- NAME@6857..6858
- IDENT@6857..6858 "i"
- COMMA@6858..6859 ","
- WHITESPACE@6859..6860 " "
- PARAM@6860..6861
- DESTRUCT_FULL@6860..6861
- NAME@6860..6861
- IDENT@6860..6861 "j"
- COMMA@6861..6862 ","
- WHITESPACE@6862..6863 " "
- PARAM@6863..6866
- DESTRUCT_FULL@6863..6866
- NAME@6863..6866
- IDENT@6863..6866 "acc"
- R_PAREN@6866..6867 ")"
- WHITESPACE@6867..6868 " "
- ASSIGN@6868..6869 "="
- WHITESPACE@6869..6876 "\n "
- EXPR_IF_THEN_ELSE@6876..7289
- IF_KW@6876..6878 "if"
- WHITESPACE@6878..6879 " "
- EXPR_BINARY@6879..6897
- LHS_EXPR@6879..6880
- EXPR_VAR@6879..6880
- NAME@6879..6880
- IDENT@6879..6880 "i"
- WHITESPACE@6880..6881 " "
- GE@6881..6883 ">="
- WHITESPACE@6883..6884 " "
- EXPR_APPLY@6884..6897
- EXPR_INDEX@6884..6894
- EXPR_VAR@6884..6887
- NAME@6884..6887
- IDENT@6884..6887 "std"
- DOT@6887..6888 "."
- NAME@6888..6894
- IDENT@6888..6894 "length"
- ARGS_DESC@6894..6897
- L_PAREN@6894..6895 "("
- ARG@6895..6896
- EXPR_VAR@6895..6896
- NAME@6895..6896
- IDENT@6895..6896 "a"
- R_PAREN@6896..6897 ")"
- WHITESPACE@6897..6898 " "
- THEN_KW@6898..6902 "then"
- WHITESPACE@6902..6911 "\n "
- TRUE_EXPR@6911..6922
- EXPR_BINARY@6911..6922
- LHS_EXPR@6911..6914
- EXPR_VAR@6911..6914
- NAME@6911..6914
- IDENT@6911..6914 "acc"
- WHITESPACE@6914..6915 " "
- PLUS@6915..6916 "+"
- WHITESPACE@6916..6917 " "
- EXPR_SLICE@6917..6922
- EXPR_VAR@6917..6918
- NAME@6917..6918
- IDENT@6917..6918 "b"
- SLICE_DESC@6918..6922
- L_BRACK@6918..6919 "["
- EXPR_VAR@6919..6920
- NAME@6919..6920
- IDENT@6919..6920 "j"
- COLON@6920..6921 ":"
- R_BRACK@6921..6922 "]"
- WHITESPACE@6922..6929 "\n "
- ELSE_KW@6929..6933 "else"
- WHITESPACE@6933..6934 " "
- FALSE_EXPR@6934..7289
- EXPR_IF_THEN_ELSE@6934..7289
- IF_KW@6934..6936 "if"
- WHITESPACE@6936..6937 " "
- EXPR_BINARY@6937..6955
- LHS_EXPR@6937..6938
- EXPR_VAR@6937..6938
- NAME@6937..6938
- IDENT@6937..6938 "j"
- WHITESPACE@6938..6939 " "
- GE@6939..6941 ">="
- WHITESPACE@6941..6942 " "
- EXPR_APPLY@6942..6955
- EXPR_INDEX@6942..6952
- EXPR_VAR@6942..6945
- NAME@6942..6945
- IDENT@6942..6945 "std"
- DOT@6945..6946 "."
- NAME@6946..6952
- IDENT@6946..6952 "length"
- ARGS_DESC@6952..6955
- L_PAREN@6952..6953 "("
- ARG@6953..6954
- EXPR_VAR@6953..6954
- NAME@6953..6954
- IDENT@6953..6954 "b"
- R_PAREN@6954..6955 ")"
- WHITESPACE@6955..6956 " "
- THEN_KW@6956..6960 "then"
- WHITESPACE@6960..6969 "\n "
- TRUE_EXPR@6969..6980
- EXPR_BINARY@6969..6980
- LHS_EXPR@6969..6972
- EXPR_VAR@6969..6972
- NAME@6969..6972
- IDENT@6969..6972 "acc"
- WHITESPACE@6972..6973 " "
- PLUS@6973..6974 "+"
- WHITESPACE@6974..6975 " "
- EXPR_SLICE@6975..6980
- EXPR_VAR@6975..6976
- NAME@6975..6976
- IDENT@6975..6976 "a"
- SLICE_DESC@6976..6980
- L_BRACK@6976..6977 "["
- EXPR_VAR@6977..6978
- NAME@6977..6978
- IDENT@6977..6978 "i"
- COLON@6978..6979 ":"
- R_BRACK@6979..6980 "]"
- WHITESPACE@6980..6987 "\n "
- ELSE_KW@6987..6991 "else"
- WHITESPACE@6991..7000 "\n "
- FALSE_EXPR@7000..7289
- EXPR_LOCAL@7000..7289
- LOCAL_KW@7000..7005 "local"
- WHITESPACE@7005..7006 " "
- BIND_DESTRUCT@7006..7021
- DESTRUCT_FULL@7006..7008
- NAME@7006..7008
- IDENT@7006..7008 "ak"
- WHITESPACE@7008..7009 " "
- ASSIGN@7009..7010 "="
- WHITESPACE@7010..7011 " "
- EXPR_APPLY@7011..7021
- EXPR_VAR@7011..7015
- NAME@7011..7015
- IDENT@7011..7015 "keyF"
- ARGS_DESC@7015..7021
- L_PAREN@7015..7016 "("
- ARG@7016..7020
- EXPR_INDEX_EXPR@7016..7020
- LHS_EXPR@7016..7017
- EXPR_VAR@7016..7017
- NAME@7016..7017
- IDENT@7016..7017 "a"
- L_BRACK@7017..7018 "["
- EXPR_VAR@7018..7019
- NAME@7018..7019
- IDENT@7018..7019 "i"
- R_BRACK@7019..7020 "]"
- R_PAREN@7020..7021 ")"
- SEMI@7021..7022 ";"
- WHITESPACE@7022..7031 "\n "
- EXPR_LOCAL@7031..7289
- LOCAL_KW@7031..7036 "local"
- WHITESPACE@7036..7037 " "
- BIND_DESTRUCT@7037..7052
- DESTRUCT_FULL@7037..7039
- NAME@7037..7039
- IDENT@7037..7039 "bk"
- WHITESPACE@7039..7040 " "
- ASSIGN@7040..7041 "="
- WHITESPACE@7041..7042 " "
- EXPR_APPLY@7042..7052
- EXPR_VAR@7042..7046
- NAME@7042..7046
- IDENT@7042..7046 "keyF"
- ARGS_DESC@7046..7052
- L_PAREN@7046..7047 "("
- ARG@7047..7051
- EXPR_INDEX_EXPR@7047..7051
- LHS_EXPR@7047..7048
- EXPR_VAR@7047..7048
- NAME@7047..7048
- IDENT@7047..7048 "b"
- L_BRACK@7048..7049 "["
- EXPR_VAR@7049..7050
- NAME@7049..7050
- IDENT@7049..7050 "j"
- R_BRACK@7050..7051 "]"
- R_PAREN@7051..7052 ")"
- SEMI@7052..7053 ";"
- WHITESPACE@7053..7062 "\n "
- EXPR_IF_THEN_ELSE@7062..7289
- IF_KW@7062..7064 "if"
- WHITESPACE@7064..7065 " "
- EXPR_BINARY@7065..7073
- LHS_EXPR@7065..7067
- EXPR_VAR@7065..7067
- NAME@7065..7067
- IDENT@7065..7067 "ak"
- WHITESPACE@7067..7068 " "
- EQ@7068..7070 "=="
- WHITESPACE@7070..7071 " "
- EXPR_VAR@7071..7073
- NAME@7071..7073
- IDENT@7071..7073 "bk"
- WHITESPACE@7073..7074 " "
- THEN_KW@7074..7078 "then"
- WHITESPACE@7078..7089 "\n "
- TRUE_EXPR@7089..7137
- EXPR_APPLY@7089..7137
- EXPR_VAR@7089..7092
- NAME@7089..7092
- IDENT@7089..7092 "aux"
- ARGS_DESC@7092..7137
- L_PAREN@7092..7093 "("
- ARG@7093..7094
- EXPR_VAR@7093..7094
- NAME@7093..7094
- IDENT@7093..7094 "a"
- COMMA@7094..7095 ","
- WHITESPACE@7095..7096 " "
- ARG@7096..7097
- EXPR_VAR@7096..7097
- NAME@7096..7097
- IDENT@7096..7097 "b"
- COMMA@7097..7098 ","
- WHITESPACE@7098..7099 " "
- ARG@7099..7104
- EXPR_BINARY@7099..7104
- LHS_EXPR@7099..7100
- EXPR_VAR@7099..7100
- NAME@7099..7100
- IDENT@7099..7100 "i"
- WHITESPACE@7100..7101 " "
- PLUS@7101..7102 "+"
- WHITESPACE@7102..7103 " "
- EXPR_NUMBER@7103..7104
- FLOAT@7103..7104 "1"
- COMMA@7104..7105 ","
- WHITESPACE@7105..7106 " "
- ARG@7106..7111
- EXPR_BINARY@7106..7111
- LHS_EXPR@7106..7107
- EXPR_VAR@7106..7107
- NAME@7106..7107
- IDENT@7106..7107 "j"
- WHITESPACE@7107..7108 " "
- PLUS@7108..7109 "+"
- WHITESPACE@7109..7110 " "
- EXPR_NUMBER@7110..7111
- FLOAT@7110..7111 "1"
- COMMA@7111..7112 ","
- WHITESPACE@7112..7113 " "
- ARG@7113..7125
- EXPR_BINARY@7113..7125
- LHS_EXPR@7113..7116
- EXPR_VAR@7113..7116
- NAME@7113..7116
- IDENT@7113..7116 "acc"
- WHITESPACE@7116..7117 " "
- PLUS@7117..7118 "+"
- WHITESPACE@7118..7119 " "
- EXPR_ARRAY@7119..7125
- L_BRACK@7119..7120 "["
- EXPR_INDEX_EXPR@7120..7124
- LHS_EXPR@7120..7121
- EXPR_VAR@7120..7121
- NAME@7120..7121
- IDENT@7120..7121 "a"
- L_BRACK@7121..7122 "["
- EXPR_VAR@7122..7123
- NAME@7122..7123
- IDENT@7122..7123 "i"
- R_BRACK@7123..7124 "]"
- R_BRACK@7124..7125 "]"
- R_PAREN@7125..7126 ")"
- WHITESPACE@7126..7127 " "
- TAILSTRICT_KW@7127..7137 "tailstrict"
- WHITESPACE@7137..7146 "\n "
- ELSE_KW@7146..7150 "else"
- WHITESPACE@7150..7151 " "
- FALSE_EXPR@7151..7289
- EXPR_IF_THEN_ELSE@7151..7289
- IF_KW@7151..7153 "if"
- WHITESPACE@7153..7154 " "
- EXPR_BINARY@7154..7161
- LHS_EXPR@7154..7156
- EXPR_VAR@7154..7156
- NAME@7154..7156
- IDENT@7154..7156 "ak"
- WHITESPACE@7156..7157 " "
- LT@7157..7158 "<"
- WHITESPACE@7158..7159 " "
- EXPR_VAR@7159..7161
- NAME@7159..7161
- IDENT@7159..7161 "bk"
- WHITESPACE@7161..7162 " "
- THEN_KW@7162..7166 "then"
- WHITESPACE@7166..7177 "\n "
- TRUE_EXPR@7177..7221
- EXPR_APPLY@7177..7221
- EXPR_VAR@7177..7180
- NAME@7177..7180
- IDENT@7177..7180 "aux"
- ARGS_DESC@7180..7221
- L_PAREN@7180..7181 "("
- ARG@7181..7182
- EXPR_VAR@7181..7182
- NAME@7181..7182
- IDENT@7181..7182 "a"
- COMMA@7182..7183 ","
- WHITESPACE@7183..7184 " "
- ARG@7184..7185
- EXPR_VAR@7184..7185
- NAME@7184..7185
- IDENT@7184..7185 "b"
- COMMA@7185..7186 ","
- WHITESPACE@7186..7187 " "
- ARG@7187..7192
- EXPR_BINARY@7187..7192
- LHS_EXPR@7187..7188
- EXPR_VAR@7187..7188
- NAME@7187..7188
- IDENT@7187..7188 "i"
- WHITESPACE@7188..7189 " "
- PLUS@7189..7190 "+"
- WHITESPACE@7190..7191 " "
- EXPR_NUMBER@7191..7192
- FLOAT@7191..7192 "1"
- COMMA@7192..7193 ","
- WHITESPACE@7193..7194 " "
- ARG@7194..7195
- EXPR_VAR@7194..7195
- NAME@7194..7195
- IDENT@7194..7195 "j"
- COMMA@7195..7196 ","
- WHITESPACE@7196..7197 " "
- ARG@7197..7209
- EXPR_BINARY@7197..7209
- LHS_EXPR@7197..7200
- EXPR_VAR@7197..7200
- NAME@7197..7200
- IDENT@7197..7200 "acc"
- WHITESPACE@7200..7201 " "
- PLUS@7201..7202 "+"
- WHITESPACE@7202..7203 " "
- EXPR_ARRAY@7203..7209
- L_BRACK@7203..7204 "["
- EXPR_INDEX_EXPR@7204..7208
- LHS_EXPR@7204..7205
- EXPR_VAR@7204..7205
- NAME@7204..7205
- IDENT@7204..7205 "a"
- L_BRACK@7205..7206 "["
- EXPR_VAR@7206..7207
- NAME@7206..7207
- IDENT@7206..7207 "i"
- R_BRACK@7207..7208 "]"
- R_BRACK@7208..7209 "]"
- R_PAREN@7209..7210 ")"
- WHITESPACE@7210..7211 " "
- TAILSTRICT_KW@7211..7221 "tailstrict"
- WHITESPACE@7221..7230 "\n "
- ELSE_KW@7230..7234 "else"
- WHITESPACE@7234..7245 "\n "
- FALSE_EXPR@7245..7289
- EXPR_APPLY@7245..7289
- EXPR_VAR@7245..7248
- NAME@7245..7248
- IDENT@7245..7248 "aux"
- ARGS_DESC@7248..7289
- L_PAREN@7248..7249 "("
- ARG@7249..7250
- EXPR_VAR@7249..7250
- NAME@7249..7250
- IDENT@7249..7250 "a"
- COMMA@7250..7251 ","
- WHITESPACE@7251..7252 " "
- ARG@7252..7253
- EXPR_VAR@7252..7253
- NAME@7252..7253
- IDENT@7252..7253 "b"
- COMMA@7253..7254 ","
- WHITESPACE@7254..7255 " "
- ARG@7255..7256
- EXPR_VAR@7255..7256
- NAME@7255..7256
- IDENT@7255..7256 "i"
- COMMA@7256..7257 ","
- WHITESPACE@7257..7258 " "
- ARG@7258..7263
- EXPR_BINARY@7258..7263
- LHS_EXPR@7258..7259
- EXPR_VAR@7258..7259
- NAME@7258..7259
- IDENT@7258..7259 "j"
- WHITESPACE@7259..7260 " "
- PLUS@7260..7261 "+"
- WHITESPACE@7261..7262 " "
- EXPR_NUMBER@7262..7263
- FLOAT@7262..7263 "1"
- COMMA@7263..7264 ","
- WHITESPACE@7264..7265 " "
- ARG@7265..7277
- EXPR_BINARY@7265..7277
- LHS_EXPR@7265..7268
- EXPR_VAR@7265..7268
- NAME@7265..7268
- IDENT@7265..7268 "acc"
- WHITESPACE@7268..7269 " "
- PLUS@7269..7270 "+"
- WHITESPACE@7270..7271 " "
- EXPR_ARRAY@7271..7277
- L_BRACK@7271..7272 "["
- EXPR_INDEX_EXPR@7272..7276
- LHS_EXPR@7272..7273
- EXPR_VAR@7272..7273
- NAME@7272..7273
- IDENT@7272..7273 "b"
- L_BRACK@7273..7274 "["
- EXPR_VAR@7274..7275
- NAME@7274..7275
- IDENT@7274..7275 "j"
- R_BRACK@7275..7276 "]"
- R_BRACK@7276..7277 "]"
- R_PAREN@7277..7278 ")"
- WHITESPACE@7278..7279 " "
- TAILSTRICT_KW@7279..7289 "tailstrict"
- SEMI@7289..7290 ";"
- WHITESPACE@7290..7295 "\n "
- EXPR_APPLY@7295..7314
- EXPR_VAR@7295..7298
- NAME@7295..7298
- IDENT@7295..7298 "aux"
- ARGS_DESC@7298..7314
- L_PAREN@7298..7299 "("
- ARG@7299..7300
- EXPR_VAR@7299..7300
- NAME@7299..7300
- IDENT@7299..7300 "a"
- COMMA@7300..7301 ","
- WHITESPACE@7301..7302 " "
- ARG@7302..7303
- EXPR_VAR@7302..7303
- NAME@7302..7303
- IDENT@7302..7303 "b"
- COMMA@7303..7304 ","
- WHITESPACE@7304..7305 " "
- ARG@7305..7306
- EXPR_NUMBER@7305..7306
- FLOAT@7305..7306 "0"
- COMMA@7306..7307 ","
- WHITESPACE@7307..7308 " "
- ARG@7308..7309
- EXPR_NUMBER@7308..7309
- FLOAT@7308..7309 "0"
- COMMA@7309..7310 ","
- WHITESPACE@7310..7311 " "
- ARG@7311..7313
- EXPR_ARRAY@7311..7313
- L_BRACK@7311..7312 "["
- R_BRACK@7312..7313 "]"
- R_PAREN@7313..7314 ")"
- COMMA@7314..7315 ","
- WHITESPACE@7315..7319 "\n\n "
- MEMBER_FIELD_METHOD@7319..7741
- FIELD_NAME_FIXED@7319..7327
- NAME@7319..7327
- IDENT@7319..7327 "setInter"
- PARAMS_DESC@7327..7342
- L_PAREN@7327..7328 "("
- PARAM@7328..7329
- DESTRUCT_FULL@7328..7329
- NAME@7328..7329
- IDENT@7328..7329 "a"
- COMMA@7329..7330 ","
- WHITESPACE@7330..7331 " "
- PARAM@7331..7332
- DESTRUCT_FULL@7331..7332
- NAME@7331..7332
- IDENT@7331..7332 "b"
- COMMA@7332..7333 ","
- WHITESPACE@7333..7334 " "
- PARAM@7334..7341
- DESTRUCT_FULL@7334..7338
- NAME@7334..7338
- IDENT@7334..7338 "keyF"
- ASSIGN@7338..7339 "="
- EXPR_VAR@7339..7341
- NAME@7339..7341
- IDENT@7339..7341 "id"
- R_PAREN@7341..7342 ")"
- COLONCOLON@7342..7344 "::"
- WHITESPACE@7344..7349 "\n "
- EXPR_LOCAL@7349..7741
- LOCAL_KW@7349..7354 "local"
- WHITESPACE@7354..7355 " "
- BIND_FUNCTION@7355..7705
- NAME@7355..7358
- IDENT@7355..7358 "aux"
- PARAMS_DESC@7358..7375
- L_PAREN@7358..7359 "("
- PARAM@7359..7360
- DESTRUCT_FULL@7359..7360
- NAME@7359..7360
- IDENT@7359..7360 "a"
- COMMA@7360..7361 ","
- WHITESPACE@7361..7362 " "
- PARAM@7362..7363
- DESTRUCT_FULL@7362..7363
- NAME@7362..7363
- IDENT@7362..7363 "b"
- COMMA@7363..7364 ","
- WHITESPACE@7364..7365 " "
- PARAM@7365..7366
- DESTRUCT_FULL@7365..7366
- NAME@7365..7366
- IDENT@7365..7366 "i"
- COMMA@7366..7367 ","
- WHITESPACE@7367..7368 " "
- PARAM@7368..7369
- DESTRUCT_FULL@7368..7369
- NAME@7368..7369
- IDENT@7368..7369 "j"
- COMMA@7369..7370 ","
- WHITESPACE@7370..7371 " "
- PARAM@7371..7374
- DESTRUCT_FULL@7371..7374
- NAME@7371..7374
- IDENT@7371..7374 "acc"
- R_PAREN@7374..7375 ")"
- WHITESPACE@7375..7376 " "
- ASSIGN@7376..7377 "="
- WHITESPACE@7377..7384 "\n "
- EXPR_IF_THEN_ELSE@7384..7705
- IF_KW@7384..7386 "if"
- WHITESPACE@7386..7387 " "
- EXPR_BINARY@7387..7427
- LHS_EXPR@7387..7405
- EXPR_BINARY@7387..7405
- LHS_EXPR@7387..7388
- EXPR_VAR@7387..7388
- NAME@7387..7388
- IDENT@7387..7388 "i"
- WHITESPACE@7388..7389 " "
- GE@7389..7391 ">="
- WHITESPACE@7391..7392 " "
- EXPR_APPLY@7392..7405
- EXPR_INDEX@7392..7402
- EXPR_VAR@7392..7395
- NAME@7392..7395
- IDENT@7392..7395 "std"
- DOT@7395..7396 "."
- NAME@7396..7402
- IDENT@7396..7402 "length"
- ARGS_DESC@7402..7405
- L_PAREN@7402..7403 "("
- ARG@7403..7404
- EXPR_VAR@7403..7404
- NAME@7403..7404
- IDENT@7403..7404 "a"
- R_PAREN@7404..7405 ")"
- WHITESPACE@7405..7406 " "
- OR@7406..7408 "||"
- WHITESPACE@7408..7409 " "
- EXPR_BINARY@7409..7427
- LHS_EXPR@7409..7410
- EXPR_VAR@7409..7410
- NAME@7409..7410
- IDENT@7409..7410 "j"
- WHITESPACE@7410..7411 " "
- GE@7411..7413 ">="
- WHITESPACE@7413..7414 " "
- EXPR_APPLY@7414..7427
- EXPR_INDEX@7414..7424
- EXPR_VAR@7414..7417
- NAME@7414..7417
- IDENT@7414..7417 "std"
- DOT@7417..7418 "."
- NAME@7418..7424
- IDENT@7418..7424 "length"
- ARGS_DESC@7424..7427
- L_PAREN@7424..7425 "("
- ARG@7425..7426
- EXPR_VAR@7425..7426
- NAME@7425..7426
- IDENT@7425..7426 "b"
- R_PAREN@7426..7427 ")"
- WHITESPACE@7427..7428 " "
- THEN_KW@7428..7432 "then"
- WHITESPACE@7432..7441 "\n "
- TRUE_EXPR@7441..7444
- EXPR_VAR@7441..7444
- NAME@7441..7444
- IDENT@7441..7444 "acc"
- WHITESPACE@7444..7451 "\n "
- ELSE_KW@7451..7455 "else"
- WHITESPACE@7455..7464 "\n "
- FALSE_EXPR@7464..7705
- EXPR_IF_THEN_ELSE@7464..7705
- IF_KW@7464..7466 "if"
- WHITESPACE@7466..7467 " "
- EXPR_BINARY@7467..7491
- LHS_EXPR@7467..7477
- EXPR_APPLY@7467..7477
- EXPR_VAR@7467..7471
- NAME@7467..7471
- IDENT@7467..7471 "keyF"
- ARGS_DESC@7471..7477
- L_PAREN@7471..7472 "("
- ARG@7472..7476
- EXPR_INDEX_EXPR@7472..7476
- LHS_EXPR@7472..7473
- EXPR_VAR@7472..7473
- NAME@7472..7473
- IDENT@7472..7473 "a"
- L_BRACK@7473..7474 "["
- EXPR_VAR@7474..7475
- NAME@7474..7475
- IDENT@7474..7475 "i"
- R_BRACK@7475..7476 "]"
- R_PAREN@7476..7477 ")"
- WHITESPACE@7477..7478 " "
- EQ@7478..7480 "=="
- WHITESPACE@7480..7481 " "
- EXPR_APPLY@7481..7491
- EXPR_VAR@7481..7485
- NAME@7481..7485
- IDENT@7481..7485 "keyF"
- ARGS_DESC@7485..7491
- L_PAREN@7485..7486 "("
- ARG@7486..7490
- EXPR_INDEX_EXPR@7486..7490
- LHS_EXPR@7486..7487
- EXPR_VAR@7486..7487
- NAME@7486..7487
- IDENT@7486..7487 "b"
- L_BRACK@7487..7488 "["
- EXPR_VAR@7488..7489
- NAME@7488..7489
- IDENT@7488..7489 "j"
- R_BRACK@7489..7490 "]"
- R_PAREN@7490..7491 ")"
- WHITESPACE@7491..7492 " "
- THEN_KW@7492..7496 "then"
- WHITESPACE@7496..7507 "\n "
- TRUE_EXPR@7507..7555
- EXPR_APPLY@7507..7555
- EXPR_VAR@7507..7510
- NAME@7507..7510
- IDENT@7507..7510 "aux"
- ARGS_DESC@7510..7555
- L_PAREN@7510..7511 "("
- ARG@7511..7512
- EXPR_VAR@7511..7512
- NAME@7511..7512
- IDENT@7511..7512 "a"
- COMMA@7512..7513 ","
- WHITESPACE@7513..7514 " "
- ARG@7514..7515
- EXPR_VAR@7514..7515
- NAME@7514..7515
- IDENT@7514..7515 "b"
- COMMA@7515..7516 ","
- WHITESPACE@7516..7517 " "
- ARG@7517..7522
- EXPR_BINARY@7517..7522
- LHS_EXPR@7517..7518
- EXPR_VAR@7517..7518
- NAME@7517..7518
- IDENT@7517..7518 "i"
- WHITESPACE@7518..7519 " "
- PLUS@7519..7520 "+"
- WHITESPACE@7520..7521 " "
- EXPR_NUMBER@7521..7522
- FLOAT@7521..7522 "1"
- COMMA@7522..7523 ","
- WHITESPACE@7523..7524 " "
- ARG@7524..7529
- EXPR_BINARY@7524..7529
- LHS_EXPR@7524..7525
- EXPR_VAR@7524..7525
- NAME@7524..7525
- IDENT@7524..7525 "j"
- WHITESPACE@7525..7526 " "
- PLUS@7526..7527 "+"
- WHITESPACE@7527..7528 " "
- EXPR_NUMBER@7528..7529
- FLOAT@7528..7529 "1"
- COMMA@7529..7530 ","
- WHITESPACE@7530..7531 " "
- ARG@7531..7543
- EXPR_BINARY@7531..7543
- LHS_EXPR@7531..7534
- EXPR_VAR@7531..7534
- NAME@7531..7534
- IDENT@7531..7534 "acc"
- WHITESPACE@7534..7535 " "
- PLUS@7535..7536 "+"
- WHITESPACE@7536..7537 " "
- EXPR_ARRAY@7537..7543
- L_BRACK@7537..7538 "["
- EXPR_INDEX_EXPR@7538..7542
- LHS_EXPR@7538..7539
- EXPR_VAR@7538..7539
- NAME@7538..7539
- IDENT@7538..7539 "a"
- L_BRACK@7539..7540 "["
- EXPR_VAR@7540..7541
- NAME@7540..7541
- IDENT@7540..7541 "i"
- R_BRACK@7541..7542 "]"
- R_BRACK@7542..7543 "]"
- R_PAREN@7543..7544 ")"
- WHITESPACE@7544..7545 " "
- TAILSTRICT_KW@7545..7555 "tailstrict"
- WHITESPACE@7555..7564 "\n "
- ELSE_KW@7564..7568 "else"
- WHITESPACE@7568..7569 " "
- FALSE_EXPR@7569..7705
- EXPR_IF_THEN_ELSE@7569..7705
- IF_KW@7569..7571 "if"
- WHITESPACE@7571..7572 " "
- EXPR_BINARY@7572..7595
- LHS_EXPR@7572..7582
- EXPR_APPLY@7572..7582
- EXPR_VAR@7572..7576
- NAME@7572..7576
- IDENT@7572..7576 "keyF"
- ARGS_DESC@7576..7582
- L_PAREN@7576..7577 "("
- ARG@7577..7581
- EXPR_INDEX_EXPR@7577..7581
- LHS_EXPR@7577..7578
- EXPR_VAR@7577..7578
- NAME@7577..7578
- IDENT@7577..7578 "a"
- L_BRACK@7578..7579 "["
- EXPR_VAR@7579..7580
- NAME@7579..7580
- IDENT@7579..7580 "i"
- R_BRACK@7580..7581 "]"
- R_PAREN@7581..7582 ")"
- WHITESPACE@7582..7583 " "
- LT@7583..7584 "<"
- WHITESPACE@7584..7585 " "
- EXPR_APPLY@7585..7595
- EXPR_VAR@7585..7589
- NAME@7585..7589
- IDENT@7585..7589 "keyF"
- ARGS_DESC@7589..7595
- L_PAREN@7589..7590 "("
- ARG@7590..7594
- EXPR_INDEX_EXPR@7590..7594
- LHS_EXPR@7590..7591
- EXPR_VAR@7590..7591
- NAME@7590..7591
- IDENT@7590..7591 "b"
- L_BRACK@7591..7592 "["
- EXPR_VAR@7592..7593
- NAME@7592..7593
- IDENT@7592..7593 "j"
- R_BRACK@7593..7594 "]"
- R_PAREN@7594..7595 ")"
- WHITESPACE@7595..7596 " "
- THEN_KW@7596..7600 "then"
- WHITESPACE@7600..7611 "\n "
- TRUE_EXPR@7611..7646
- EXPR_APPLY@7611..7646
- EXPR_VAR@7611..7614
- NAME@7611..7614
- IDENT@7611..7614 "aux"
- ARGS_DESC@7614..7646
- L_PAREN@7614..7615 "("
- ARG@7615..7616
- EXPR_VAR@7615..7616
- NAME@7615..7616
- IDENT@7615..7616 "a"
- COMMA@7616..7617 ","
- WHITESPACE@7617..7618 " "
- ARG@7618..7619
- EXPR_VAR@7618..7619
- NAME@7618..7619
- IDENT@7618..7619 "b"
- COMMA@7619..7620 ","
- WHITESPACE@7620..7621 " "
- ARG@7621..7626
- EXPR_BINARY@7621..7626
- LHS_EXPR@7621..7622
- EXPR_VAR@7621..7622
- NAME@7621..7622
- IDENT@7621..7622 "i"
- WHITESPACE@7622..7623 " "
- PLUS@7623..7624 "+"
- WHITESPACE@7624..7625 " "
- EXPR_NUMBER@7625..7626
- FLOAT@7625..7626 "1"
- COMMA@7626..7627 ","
- WHITESPACE@7627..7628 " "
- ARG@7628..7629
- EXPR_VAR@7628..7629
- NAME@7628..7629
- IDENT@7628..7629 "j"
- COMMA@7629..7630 ","
- WHITESPACE@7630..7631 " "
- ARG@7631..7634
- EXPR_VAR@7631..7634
- NAME@7631..7634
- IDENT@7631..7634 "acc"
- R_PAREN@7634..7635 ")"
- WHITESPACE@7635..7636 " "
- TAILSTRICT_KW@7636..7646 "tailstrict"
- WHITESPACE@7646..7655 "\n "
- ELSE_KW@7655..7659 "else"
- WHITESPACE@7659..7670 "\n "
- FALSE_EXPR@7670..7705
- EXPR_APPLY@7670..7705
- EXPR_VAR@7670..7673
- NAME@7670..7673
- IDENT@7670..7673 "aux"
- ARGS_DESC@7673..7705
- L_PAREN@7673..7674 "("
- ARG@7674..7675
- EXPR_VAR@7674..7675
- NAME@7674..7675
- IDENT@7674..7675 "a"
- COMMA@7675..7676 ","
- WHITESPACE@7676..7677 " "
- ARG@7677..7678
- EXPR_VAR@7677..7678
- NAME@7677..7678
- IDENT@7677..7678 "b"
- COMMA@7678..7679 ","
- WHITESPACE@7679..7680 " "
- ARG@7680..7681
- EXPR_VAR@7680..7681
- NAME@7680..7681
- IDENT@7680..7681 "i"
- COMMA@7681..7682 ","
- WHITESPACE@7682..7683 " "
- ARG@7683..7688
- EXPR_BINARY@7683..7688
- LHS_EXPR@7683..7684
- EXPR_VAR@7683..7684
- NAME@7683..7684
- IDENT@7683..7684 "j"
- WHITESPACE@7684..7685 " "
- PLUS@7685..7686 "+"
- WHITESPACE@7686..7687 " "
- EXPR_NUMBER@7687..7688
- FLOAT@7687..7688 "1"
- COMMA@7688..7689 ","
- WHITESPACE@7689..7690 " "
- ARG@7690..7693
- EXPR_VAR@7690..7693
- NAME@7690..7693
- IDENT@7690..7693 "acc"
- R_PAREN@7693..7694 ")"
- WHITESPACE@7694..7695 " "
- TAILSTRICT_KW@7695..7705 "tailstrict"
- SEMI@7705..7706 ";"
- WHITESPACE@7706..7711 "\n "
- EXPR_APPLY@7711..7741
- EXPR_VAR@7711..7714
- NAME@7711..7714
- IDENT@7711..7714 "aux"
- ARGS_DESC@7714..7741
- L_PAREN@7714..7715 "("
- ARG@7715..7716
- EXPR_VAR@7715..7716
- NAME@7715..7716
- IDENT@7715..7716 "a"
- COMMA@7716..7717 ","
- WHITESPACE@7717..7718 " "
- ARG@7718..7719
- EXPR_VAR@7718..7719
- NAME@7718..7719
- IDENT@7718..7719 "b"
- COMMA@7719..7720 ","
- WHITESPACE@7720..7721 " "
- ARG@7721..7722
- EXPR_NUMBER@7721..7722
- FLOAT@7721..7722 "0"
- COMMA@7722..7723 ","
- WHITESPACE@7723..7724 " "
- ARG@7724..7725
- EXPR_NUMBER@7724..7725
- FLOAT@7724..7725 "0"
- COMMA@7725..7726 ","
- WHITESPACE@7726..7727 " "
- ARG@7727..7729
- EXPR_ARRAY@7727..7729
- L_BRACK@7727..7728 "["
- R_BRACK@7728..7729 "]"
- R_PAREN@7729..7730 ")"
- WHITESPACE@7730..7731 " "
- TAILSTRICT_KW@7731..7741 "tailstrict"
- COMMA@7741..7742 ","
- WHITESPACE@7742..7746 "\n\n "
- MEMBER_FIELD_METHOD@7746..8203
- FIELD_NAME_FIXED@7746..7753
- NAME@7746..7753
- IDENT@7746..7753 "setDiff"
- PARAMS_DESC@7753..7768
- L_PAREN@7753..7754 "("
- PARAM@7754..7755
- DESTRUCT_FULL@7754..7755
- NAME@7754..7755
- IDENT@7754..7755 "a"
- COMMA@7755..7756 ","
- WHITESPACE@7756..7757 " "
- PARAM@7757..7758
- DESTRUCT_FULL@7757..7758
- NAME@7757..7758
- IDENT@7757..7758 "b"
- COMMA@7758..7759 ","
- WHITESPACE@7759..7760 " "
- PARAM@7760..7767
- DESTRUCT_FULL@7760..7764
- NAME@7760..7764
- IDENT@7760..7764 "keyF"
- ASSIGN@7764..7765 "="
- EXPR_VAR@7765..7767
- NAME@7765..7767
- IDENT@7765..7767 "id"
- R_PAREN@7767..7768 ")"
- COLONCOLON@7768..7770 "::"
- WHITESPACE@7770..7775 "\n "
- EXPR_LOCAL@7775..8203
- LOCAL_KW@7775..7780 "local"
- WHITESPACE@7780..7781 " "
- BIND_FUNCTION@7781..8167
- NAME@7781..7784
- IDENT@7781..7784 "aux"
- PARAMS_DESC@7784..7801
- L_PAREN@7784..7785 "("
- PARAM@7785..7786
- DESTRUCT_FULL@7785..7786
- NAME@7785..7786
- IDENT@7785..7786 "a"
- COMMA@7786..7787 ","
- WHITESPACE@7787..7788 " "
- PARAM@7788..7789
- DESTRUCT_FULL@7788..7789
- NAME@7788..7789
- IDENT@7788..7789 "b"
- COMMA@7789..7790 ","
- WHITESPACE@7790..7791 " "
- PARAM@7791..7792
- DESTRUCT_FULL@7791..7792
- NAME@7791..7792
- IDENT@7791..7792 "i"
- COMMA@7792..7793 ","
- WHITESPACE@7793..7794 " "
- PARAM@7794..7795
- DESTRUCT_FULL@7794..7795
- NAME@7794..7795
- IDENT@7794..7795 "j"
- COMMA@7795..7796 ","
- WHITESPACE@7796..7797 " "
- PARAM@7797..7800
- DESTRUCT_FULL@7797..7800
- NAME@7797..7800
- IDENT@7797..7800 "acc"
- R_PAREN@7800..7801 ")"
- WHITESPACE@7801..7802 " "
- ASSIGN@7802..7803 "="
- WHITESPACE@7803..7810 "\n "
- EXPR_IF_THEN_ELSE@7810..8167
- IF_KW@7810..7812 "if"
- WHITESPACE@7812..7813 " "
- EXPR_BINARY@7813..7831
- LHS_EXPR@7813..7814
- EXPR_VAR@7813..7814
- NAME@7813..7814
- IDENT@7813..7814 "i"
- WHITESPACE@7814..7815 " "
- GE@7815..7817 ">="
- WHITESPACE@7817..7818 " "
- EXPR_APPLY@7818..7831
- EXPR_INDEX@7818..7828
- EXPR_VAR@7818..7821
- NAME@7818..7821
- IDENT@7818..7821 "std"
- DOT@7821..7822 "."
- NAME@7822..7828
- IDENT@7822..7828 "length"
- ARGS_DESC@7828..7831
- L_PAREN@7828..7829 "("
- ARG@7829..7830
- EXPR_VAR@7829..7830
- NAME@7829..7830
- IDENT@7829..7830 "a"
- R_PAREN@7830..7831 ")"
- WHITESPACE@7831..7832 " "
- THEN_KW@7832..7836 "then"
- WHITESPACE@7836..7845 "\n "
- TRUE_EXPR@7845..7848
- EXPR_VAR@7845..7848
- NAME@7845..7848
- IDENT@7845..7848 "acc"
- WHITESPACE@7848..7855 "\n "
- ELSE_KW@7855..7859 "else"
- WHITESPACE@7859..7860 " "
- FALSE_EXPR@7860..8167
- EXPR_IF_THEN_ELSE@7860..8167
- IF_KW@7860..7862 "if"
- WHITESPACE@7862..7863 " "
- EXPR_BINARY@7863..7881
- LHS_EXPR@7863..7864
- EXPR_VAR@7863..7864
- NAME@7863..7864
- IDENT@7863..7864 "j"
- WHITESPACE@7864..7865 " "
- GE@7865..7867 ">="
- WHITESPACE@7867..7868 " "
- EXPR_APPLY@7868..7881
- EXPR_INDEX@7868..7878
- EXPR_VAR@7868..7871
- NAME@7868..7871
- IDENT@7868..7871 "std"
- DOT@7871..7872 "."
- NAME@7872..7878
- IDENT@7872..7878 "length"
- ARGS_DESC@7878..7881
- L_PAREN@7878..7879 "("
- ARG@7879..7880
- EXPR_VAR@7879..7880
- NAME@7879..7880
- IDENT@7879..7880 "b"
- R_PAREN@7880..7881 ")"
- WHITESPACE@7881..7882 " "
- THEN_KW@7882..7886 "then"
- WHITESPACE@7886..7895 "\n "
- TRUE_EXPR@7895..7906
- EXPR_BINARY@7895..7906
- LHS_EXPR@7895..7898
- EXPR_VAR@7895..7898
- NAME@7895..7898
- IDENT@7895..7898 "acc"
- WHITESPACE@7898..7899 " "
- PLUS@7899..7900 "+"
- WHITESPACE@7900..7901 " "
- EXPR_SLICE@7901..7906
- EXPR_VAR@7901..7902
- NAME@7901..7902
- IDENT@7901..7902 "a"
- SLICE_DESC@7902..7906
- L_BRACK@7902..7903 "["
- EXPR_VAR@7903..7904
- NAME@7903..7904
- IDENT@7903..7904 "i"
- COLON@7904..7905 ":"
- R_BRACK@7905..7906 "]"
- WHITESPACE@7906..7913 "\n "
- ELSE_KW@7913..7917 "else"
- WHITESPACE@7917..7926 "\n "
- FALSE_EXPR@7926..8167
- EXPR_IF_THEN_ELSE@7926..8167
- IF_KW@7926..7928 "if"
- WHITESPACE@7928..7929 " "
- EXPR_BINARY@7929..7953
- LHS_EXPR@7929..7939
- EXPR_APPLY@7929..7939
- EXPR_VAR@7929..7933
- NAME@7929..7933
- IDENT@7929..7933 "keyF"
- ARGS_DESC@7933..7939
- L_PAREN@7933..7934 "("
- ARG@7934..7938
- EXPR_INDEX_EXPR@7934..7938
- LHS_EXPR@7934..7935
- EXPR_VAR@7934..7935
- NAME@7934..7935
- IDENT@7934..7935 "a"
- L_BRACK@7935..7936 "["
- EXPR_VAR@7936..7937
- NAME@7936..7937
- IDENT@7936..7937 "i"
- R_BRACK@7937..7938 "]"
- R_PAREN@7938..7939 ")"
- WHITESPACE@7939..7940 " "
- EQ@7940..7942 "=="
- WHITESPACE@7942..7943 " "
- EXPR_APPLY@7943..7953
- EXPR_VAR@7943..7947
- NAME@7943..7947
- IDENT@7943..7947 "keyF"
- ARGS_DESC@7947..7953
- L_PAREN@7947..7948 "("
- ARG@7948..7952
- EXPR_INDEX_EXPR@7948..7952
- LHS_EXPR@7948..7949
- EXPR_VAR@7948..7949
- NAME@7948..7949
- IDENT@7948..7949 "b"
- L_BRACK@7949..7950 "["
- EXPR_VAR@7950..7951
- NAME@7950..7951
- IDENT@7950..7951 "j"
- R_BRACK@7951..7952 "]"
- R_PAREN@7952..7953 ")"
- WHITESPACE@7953..7954 " "
- THEN_KW@7954..7958 "then"
- WHITESPACE@7958..7969 "\n "
- TRUE_EXPR@7969..8008
- EXPR_APPLY@7969..8008
- EXPR_VAR@7969..7972
- NAME@7969..7972
- IDENT@7969..7972 "aux"
- ARGS_DESC@7972..8008
- L_PAREN@7972..7973 "("
- ARG@7973..7974
- EXPR_VAR@7973..7974
- NAME@7973..7974
- IDENT@7973..7974 "a"
- COMMA@7974..7975 ","
- WHITESPACE@7975..7976 " "
- ARG@7976..7977
- EXPR_VAR@7976..7977
- NAME@7976..7977
- IDENT@7976..7977 "b"
- COMMA@7977..7978 ","
- WHITESPACE@7978..7979 " "
- ARG@7979..7984
- EXPR_BINARY@7979..7984
- LHS_EXPR@7979..7980
- EXPR_VAR@7979..7980
- NAME@7979..7980
- IDENT@7979..7980 "i"
- WHITESPACE@7980..7981 " "
- PLUS@7981..7982 "+"
- WHITESPACE@7982..7983 " "
- EXPR_NUMBER@7983..7984
- FLOAT@7983..7984 "1"
- COMMA@7984..7985 ","
- WHITESPACE@7985..7986 " "
- ARG@7986..7991
- EXPR_BINARY@7986..7991
- LHS_EXPR@7986..7987
- EXPR_VAR@7986..7987
- NAME@7986..7987
- IDENT@7986..7987 "j"
- WHITESPACE@7987..7988 " "
- PLUS@7988..7989 "+"
- WHITESPACE@7989..7990 " "
- EXPR_NUMBER@7990..7991
- FLOAT@7990..7991 "1"
- COMMA@7991..7992 ","
- WHITESPACE@7992..7993 " "
- ARG@7993..7996
- EXPR_VAR@7993..7996
- NAME@7993..7996
- IDENT@7993..7996 "acc"
- R_PAREN@7996..7997 ")"
- WHITESPACE@7997..7998 " "
- TAILSTRICT_KW@7998..8008 "tailstrict"
- WHITESPACE@8008..8017 "\n "
- ELSE_KW@8017..8021 "else"
- WHITESPACE@8021..8022 " "
- FALSE_EXPR@8022..8167
- EXPR_IF_THEN_ELSE@8022..8167
- IF_KW@8022..8024 "if"
- WHITESPACE@8024..8025 " "
- EXPR_BINARY@8025..8048
- LHS_EXPR@8025..8035
- EXPR_APPLY@8025..8035
- EXPR_VAR@8025..8029
- NAME@8025..8029
- IDENT@8025..8029 "keyF"
- ARGS_DESC@8029..8035
- L_PAREN@8029..8030 "("
- ARG@8030..8034
- EXPR_INDEX_EXPR@8030..8034
- LHS_EXPR@8030..8031
- EXPR_VAR@8030..8031
- NAME@8030..8031
- IDENT@8030..8031 "a"
- L_BRACK@8031..8032 "["
- EXPR_VAR@8032..8033
- NAME@8032..8033
- IDENT@8032..8033 "i"
- R_BRACK@8033..8034 "]"
- R_PAREN@8034..8035 ")"
- WHITESPACE@8035..8036 " "
- LT@8036..8037 "<"
- WHITESPACE@8037..8038 " "
- EXPR_APPLY@8038..8048
- EXPR_VAR@8038..8042
- NAME@8038..8042
- IDENT@8038..8042 "keyF"
- ARGS_DESC@8042..8048
- L_PAREN@8042..8043 "("
- ARG@8043..8047
- EXPR_INDEX_EXPR@8043..8047
- LHS_EXPR@8043..8044
- EXPR_VAR@8043..8044
- NAME@8043..8044
- IDENT@8043..8044 "b"
- L_BRACK@8044..8045 "["
- EXPR_VAR@8045..8046
- NAME@8045..8046
- IDENT@8045..8046 "j"
- R_BRACK@8046..8047 "]"
- R_PAREN@8047..8048 ")"
- WHITESPACE@8048..8049 " "
- THEN_KW@8049..8053 "then"
- WHITESPACE@8053..8064 "\n "
- TRUE_EXPR@8064..8108
- EXPR_APPLY@8064..8108
- EXPR_VAR@8064..8067
- NAME@8064..8067
- IDENT@8064..8067 "aux"
- ARGS_DESC@8067..8108
- L_PAREN@8067..8068 "("
- ARG@8068..8069
- EXPR_VAR@8068..8069
- NAME@8068..8069
- IDENT@8068..8069 "a"
- COMMA@8069..8070 ","
- WHITESPACE@8070..8071 " "
- ARG@8071..8072
- EXPR_VAR@8071..8072
- NAME@8071..8072
- IDENT@8071..8072 "b"
- COMMA@8072..8073 ","
- WHITESPACE@8073..8074 " "
- ARG@8074..8079
- EXPR_BINARY@8074..8079
- LHS_EXPR@8074..8075
- EXPR_VAR@8074..8075
- NAME@8074..8075
- IDENT@8074..8075 "i"
- WHITESPACE@8075..8076 " "
- PLUS@8076..8077 "+"
- WHITESPACE@8077..8078 " "
- EXPR_NUMBER@8078..8079
- FLOAT@8078..8079 "1"
- COMMA@8079..8080 ","
- WHITESPACE@8080..8081 " "
- ARG@8081..8082
- EXPR_VAR@8081..8082
- NAME@8081..8082
- IDENT@8081..8082 "j"
- COMMA@8082..8083 ","
- WHITESPACE@8083..8084 " "
- ARG@8084..8096
- EXPR_BINARY@8084..8096
- LHS_EXPR@8084..8087
- EXPR_VAR@8084..8087
- NAME@8084..8087
- IDENT@8084..8087 "acc"
- WHITESPACE@8087..8088 " "
- PLUS@8088..8089 "+"
- WHITESPACE@8089..8090 " "
- EXPR_ARRAY@8090..8096
- L_BRACK@8090..8091 "["
- EXPR_INDEX_EXPR@8091..8095
- LHS_EXPR@8091..8092
- EXPR_VAR@8091..8092
- NAME@8091..8092
- IDENT@8091..8092 "a"
- L_BRACK@8092..8093 "["
- EXPR_VAR@8093..8094
- NAME@8093..8094
- IDENT@8093..8094 "i"
- R_BRACK@8094..8095 "]"
- R_BRACK@8095..8096 "]"
- R_PAREN@8096..8097 ")"
- WHITESPACE@8097..8098 " "
- TAILSTRICT_KW@8098..8108 "tailstrict"
- WHITESPACE@8108..8117 "\n "
- ELSE_KW@8117..8121 "else"
- WHITESPACE@8121..8132 "\n "
- FALSE_EXPR@8132..8167
- EXPR_APPLY@8132..8167
- EXPR_VAR@8132..8135
- NAME@8132..8135
- IDENT@8132..8135 "aux"
- ARGS_DESC@8135..8167
- L_PAREN@8135..8136 "("
- ARG@8136..8137
- EXPR_VAR@8136..8137
- NAME@8136..8137
- IDENT@8136..8137 "a"
- COMMA@8137..8138 ","
- WHITESPACE@8138..8139 " "
- ARG@8139..8140
- EXPR_VAR@8139..8140
- NAME@8139..8140
- IDENT@8139..8140 "b"
- COMMA@8140..8141 ","
- WHITESPACE@8141..8142 " "
- ARG@8142..8143
- EXPR_VAR@8142..8143
- NAME@8142..8143
- IDENT@8142..8143 "i"
- COMMA@8143..8144 ","
- WHITESPACE@8144..8145 " "
- ARG@8145..8150
- EXPR_BINARY@8145..8150
- LHS_EXPR@8145..8146
- EXPR_VAR@8145..8146
- NAME@8145..8146
- IDENT@8145..8146 "j"
- WHITESPACE@8146..8147 " "
- PLUS@8147..8148 "+"
- WHITESPACE@8148..8149 " "
- EXPR_NUMBER@8149..8150
- FLOAT@8149..8150 "1"
- COMMA@8150..8151 ","
- WHITESPACE@8151..8152 " "
- ARG@8152..8155
- EXPR_VAR@8152..8155
- NAME@8152..8155
- IDENT@8152..8155 "acc"
- R_PAREN@8155..8156 ")"
- WHITESPACE@8156..8157 " "
- TAILSTRICT_KW@8157..8167 "tailstrict"
- SEMI@8167..8168 ";"
- WHITESPACE@8168..8173 "\n "
- EXPR_APPLY@8173..8203
- EXPR_VAR@8173..8176
- NAME@8173..8176
- IDENT@8173..8176 "aux"
- ARGS_DESC@8176..8203
- L_PAREN@8176..8177 "("
- ARG@8177..8178
- EXPR_VAR@8177..8178
- NAME@8177..8178
- IDENT@8177..8178 "a"
- COMMA@8178..8179 ","
- WHITESPACE@8179..8180 " "
- ARG@8180..8181
- EXPR_VAR@8180..8181
- NAME@8180..8181
- IDENT@8180..8181 "b"
- COMMA@8181..8182 ","
- WHITESPACE@8182..8183 " "
- ARG@8183..8184
- EXPR_NUMBER@8183..8184
- FLOAT@8183..8184 "0"
- COMMA@8184..8185 ","
- WHITESPACE@8185..8186 " "
- ARG@8186..8187
- EXPR_NUMBER@8186..8187
- FLOAT@8186..8187 "0"
- COMMA@8187..8188 ","
- WHITESPACE@8188..8189 " "
- ARG@8189..8191
- EXPR_ARRAY@8189..8191
- L_BRACK@8189..8190 "["
- R_BRACK@8190..8191 "]"
- R_PAREN@8191..8192 ")"
- WHITESPACE@8192..8193 " "
- TAILSTRICT_KW@8193..8203 "tailstrict"
- COMMA@8203..8204 ","
- WHITESPACE@8204..8208 "\n\n "
- MEMBER_FIELD_METHOD@8208..8996
- FIELD_NAME_FIXED@8208..8218
- NAME@8208..8218
- IDENT@8208..8218 "mergePatch"
- PARAMS_DESC@8218..8233
- L_PAREN@8218..8219 "("
- PARAM@8219..8225
- DESTRUCT_FULL@8219..8225
- NAME@8219..8225
- IDENT@8219..8225 "target"
- COMMA@8225..8226 ","
- WHITESPACE@8226..8227 " "
- PARAM@8227..8232
- DESTRUCT_FULL@8227..8232
- NAME@8227..8232
- IDENT@8227..8232 "patch"
- R_PAREN@8232..8233 ")"
- COLONCOLON@8233..8235 "::"
- WHITESPACE@8235..8240 "\n "
- EXPR_IF_THEN_ELSE@8240..8996
- IF_KW@8240..8242 "if"
+ MEMBER_FIELD_METHOD@6350..6899
+ FIELD_NAME_FIXED@6350..6358
+ NAME@6350..6358
+ IDENT@6350..6358 "setUnion"
+ PARAMS_DESC@6358..6373
+ L_PAREN@6358..6359 "("
+ PARAM@6359..6360
+ DESTRUCT_FULL@6359..6360
+ NAME@6359..6360
+ IDENT@6359..6360 "a"
+ COMMA@6360..6361 ","
+ WHITESPACE@6361..6362 " "
+ PARAM@6362..6363
+ DESTRUCT_FULL@6362..6363
+ NAME@6362..6363
+ IDENT@6362..6363 "b"
+ COMMA@6363..6364 ","
+ WHITESPACE@6364..6365 " "
+ PARAM@6365..6372
+ DESTRUCT_FULL@6365..6369
+ NAME@6365..6369
+ IDENT@6365..6369 "keyF"
+ ASSIGN@6369..6370 "="
+ EXPR_VAR@6370..6372
+ NAME@6370..6372
+ IDENT@6370..6372 "id"
+ R_PAREN@6372..6373 ")"
+ COLONCOLON@6373..6375 "::"
+ WHITESPACE@6375..6380 "\n "
+ SINGLE_LINE_SLASH_COMMENT@6380..6422 "// NOTE: order matter ..."
+ WHITESPACE@6422..6426 " "
+ STMT_LOCAL@6426..6875
+ LOCAL_KW@6426..6431 "local"
+ WHITESPACE@6431..6432 " "
+ BIND_FUNCTION@6432..6874
+ NAME@6432..6435
+ IDENT@6432..6435 "aux"
+ PARAMS_DESC@6435..6452
+ L_PAREN@6435..6436 "("
+ PARAM@6436..6437
+ DESTRUCT_FULL@6436..6437
+ NAME@6436..6437
+ IDENT@6436..6437 "a"
+ COMMA@6437..6438 ","
+ WHITESPACE@6438..6439 " "
+ PARAM@6439..6440
+ DESTRUCT_FULL@6439..6440
+ NAME@6439..6440
+ IDENT@6439..6440 "b"
+ COMMA@6440..6441 ","
+ WHITESPACE@6441..6442 " "
+ PARAM@6442..6443
+ DESTRUCT_FULL@6442..6443
+ NAME@6442..6443
+ IDENT@6442..6443 "i"
+ COMMA@6443..6444 ","
+ WHITESPACE@6444..6445 " "
+ PARAM@6445..6446
+ DESTRUCT_FULL@6445..6446
+ NAME@6445..6446
+ IDENT@6445..6446 "j"
+ COMMA@6446..6447 ","
+ WHITESPACE@6447..6448 " "
+ PARAM@6448..6451
+ DESTRUCT_FULL@6448..6451
+ NAME@6448..6451
+ IDENT@6448..6451 "acc"
+ R_PAREN@6451..6452 ")"
+ WHITESPACE@6452..6453 " "
+ ASSIGN@6453..6454 "="
+ WHITESPACE@6454..6461 "\n "
+ EXPR_IF_THEN_ELSE@6461..6874
+ IF_KW@6461..6463 "if"
+ WHITESPACE@6463..6464 " "
+ EXPR_BINARY@6464..6482
+ LHS_EXPR@6464..6465
+ EXPR_VAR@6464..6465
+ NAME@6464..6465
+ IDENT@6464..6465 "i"
+ WHITESPACE@6465..6466 " "
+ GE@6466..6468 ">="
+ WHITESPACE@6468..6469 " "
+ EXPR_APPLY@6469..6482
+ EXPR_INDEX@6469..6479
+ EXPR_VAR@6469..6472
+ NAME@6469..6472
+ IDENT@6469..6472 "std"
+ DOT@6472..6473 "."
+ NAME@6473..6479
+ IDENT@6473..6479 "length"
+ ARGS_DESC@6479..6482
+ L_PAREN@6479..6480 "("
+ ARG@6480..6481
+ EXPR_VAR@6480..6481
+ NAME@6480..6481
+ IDENT@6480..6481 "a"
+ R_PAREN@6481..6482 ")"
+ WHITESPACE@6482..6483 " "
+ THEN_KW@6483..6487 "then"
+ WHITESPACE@6487..6496 "\n "
+ TRUE_EXPR@6496..6507
+ EXPR_BINARY@6496..6507
+ LHS_EXPR@6496..6499
+ EXPR_VAR@6496..6499
+ NAME@6496..6499
+ IDENT@6496..6499 "acc"
+ WHITESPACE@6499..6500 " "
+ PLUS@6500..6501 "+"
+ WHITESPACE@6501..6502 " "
+ EXPR_SLICE@6502..6507
+ EXPR_VAR@6502..6503
+ NAME@6502..6503
+ IDENT@6502..6503 "b"
+ SLICE_DESC@6503..6507
+ L_BRACK@6503..6504 "["
+ EXPR_VAR@6504..6505
+ NAME@6504..6505
+ IDENT@6504..6505 "j"
+ COLON@6505..6506 ":"
+ R_BRACK@6506..6507 "]"
+ WHITESPACE@6507..6514 "\n "
+ ELSE_KW@6514..6518 "else"
+ WHITESPACE@6518..6519 " "
+ FALSE_EXPR@6519..6874
+ EXPR_IF_THEN_ELSE@6519..6874
+ IF_KW@6519..6521 "if"
+ WHITESPACE@6521..6522 " "
+ EXPR_BINARY@6522..6540
+ LHS_EXPR@6522..6523
+ EXPR_VAR@6522..6523
+ NAME@6522..6523
+ IDENT@6522..6523 "j"
+ WHITESPACE@6523..6524 " "
+ GE@6524..6526 ">="
+ WHITESPACE@6526..6527 " "
+ EXPR_APPLY@6527..6540
+ EXPR_INDEX@6527..6537
+ EXPR_VAR@6527..6530
+ NAME@6527..6530
+ IDENT@6527..6530 "std"
+ DOT@6530..6531 "."
+ NAME@6531..6537
+ IDENT@6531..6537 "length"
+ ARGS_DESC@6537..6540
+ L_PAREN@6537..6538 "("
+ ARG@6538..6539
+ EXPR_VAR@6538..6539
+ NAME@6538..6539
+ IDENT@6538..6539 "b"
+ R_PAREN@6539..6540 ")"
+ WHITESPACE@6540..6541 " "
+ THEN_KW@6541..6545 "then"
+ WHITESPACE@6545..6554 "\n "
+ TRUE_EXPR@6554..6565
+ EXPR_BINARY@6554..6565
+ LHS_EXPR@6554..6557
+ EXPR_VAR@6554..6557
+ NAME@6554..6557
+ IDENT@6554..6557 "acc"
+ WHITESPACE@6557..6558 " "
+ PLUS@6558..6559 "+"
+ WHITESPACE@6559..6560 " "
+ EXPR_SLICE@6560..6565
+ EXPR_VAR@6560..6561
+ NAME@6560..6561
+ IDENT@6560..6561 "a"
+ SLICE_DESC@6561..6565
+ L_BRACK@6561..6562 "["
+ EXPR_VAR@6562..6563
+ NAME@6562..6563
+ IDENT@6562..6563 "i"
+ COLON@6563..6564 ":"
+ R_BRACK@6564..6565 "]"
+ WHITESPACE@6565..6572 "\n "
+ ELSE_KW@6572..6576 "else"
+ WHITESPACE@6576..6585 "\n "
+ STMT_LOCAL@6585..6607
+ LOCAL_KW@6585..6590 "local"
+ WHITESPACE@6590..6591 " "
+ BIND_DESTRUCT@6591..6606
+ DESTRUCT_FULL@6591..6593
+ NAME@6591..6593
+ IDENT@6591..6593 "ak"
+ WHITESPACE@6593..6594 " "
+ ASSIGN@6594..6595 "="
+ WHITESPACE@6595..6596 " "
+ EXPR_APPLY@6596..6606
+ EXPR_VAR@6596..6600
+ NAME@6596..6600
+ IDENT@6596..6600 "keyF"
+ ARGS_DESC@6600..6606
+ L_PAREN@6600..6601 "("
+ ARG@6601..6605
+ EXPR_INDEX_EXPR@6601..6605
+ LHS_EXPR@6601..6602
+ EXPR_VAR@6601..6602
+ NAME@6601..6602
+ IDENT@6601..6602 "a"
+ L_BRACK@6602..6603 "["
+ EXPR_VAR@6603..6604
+ NAME@6603..6604
+ IDENT@6603..6604 "i"
+ R_BRACK@6604..6605 "]"
+ R_PAREN@6605..6606 ")"
+ SEMI@6606..6607 ";"
+ WHITESPACE@6607..6616 "\n "
+ STMT_LOCAL@6616..6638
+ LOCAL_KW@6616..6621 "local"
+ WHITESPACE@6621..6622 " "
+ BIND_DESTRUCT@6622..6637
+ DESTRUCT_FULL@6622..6624
+ NAME@6622..6624
+ IDENT@6622..6624 "bk"
+ WHITESPACE@6624..6625 " "
+ ASSIGN@6625..6626 "="
+ WHITESPACE@6626..6627 " "
+ EXPR_APPLY@6627..6637
+ EXPR_VAR@6627..6631
+ NAME@6627..6631
+ IDENT@6627..6631 "keyF"
+ ARGS_DESC@6631..6637
+ L_PAREN@6631..6632 "("
+ ARG@6632..6636
+ EXPR_INDEX_EXPR@6632..6636
+ LHS_EXPR@6632..6633
+ EXPR_VAR@6632..6633
+ NAME@6632..6633
+ IDENT@6632..6633 "b"
+ L_BRACK@6633..6634 "["
+ EXPR_VAR@6634..6635
+ NAME@6634..6635
+ IDENT@6634..6635 "j"
+ R_BRACK@6635..6636 "]"
+ R_PAREN@6636..6637 ")"
+ SEMI@6637..6638 ";"
+ WHITESPACE@6638..6647 "\n "
+ FALSE_EXPR@6647..6874
+ EXPR_IF_THEN_ELSE@6647..6874
+ IF_KW@6647..6649 "if"
+ WHITESPACE@6649..6650 " "
+ EXPR_BINARY@6650..6658
+ LHS_EXPR@6650..6652
+ EXPR_VAR@6650..6652
+ NAME@6650..6652
+ IDENT@6650..6652 "ak"
+ WHITESPACE@6652..6653 " "
+ EQ@6653..6655 "=="
+ WHITESPACE@6655..6656 " "
+ EXPR_VAR@6656..6658
+ NAME@6656..6658
+ IDENT@6656..6658 "bk"
+ WHITESPACE@6658..6659 " "
+ THEN_KW@6659..6663 "then"
+ WHITESPACE@6663..6674 "\n "
+ TRUE_EXPR@6674..6722
+ EXPR_APPLY@6674..6722
+ EXPR_VAR@6674..6677
+ NAME@6674..6677
+ IDENT@6674..6677 "aux"
+ ARGS_DESC@6677..6722
+ L_PAREN@6677..6678 "("
+ ARG@6678..6679
+ EXPR_VAR@6678..6679
+ NAME@6678..6679
+ IDENT@6678..6679 "a"
+ COMMA@6679..6680 ","
+ WHITESPACE@6680..6681 " "
+ ARG@6681..6682
+ EXPR_VAR@6681..6682
+ NAME@6681..6682
+ IDENT@6681..6682 "b"
+ COMMA@6682..6683 ","
+ WHITESPACE@6683..6684 " "
+ ARG@6684..6689
+ EXPR_BINARY@6684..6689
+ LHS_EXPR@6684..6685
+ EXPR_VAR@6684..6685
+ NAME@6684..6685
+ IDENT@6684..6685 "i"
+ WHITESPACE@6685..6686 " "
+ PLUS@6686..6687 "+"
+ WHITESPACE@6687..6688 " "
+ EXPR_NUMBER@6688..6689
+ FLOAT@6688..6689 "1"
+ COMMA@6689..6690 ","
+ WHITESPACE@6690..6691 " "
+ ARG@6691..6696
+ EXPR_BINARY@6691..6696
+ LHS_EXPR@6691..6692
+ EXPR_VAR@6691..6692
+ NAME@6691..6692
+ IDENT@6691..6692 "j"
+ WHITESPACE@6692..6693 " "
+ PLUS@6693..6694 "+"
+ WHITESPACE@6694..6695 " "
+ EXPR_NUMBER@6695..6696
+ FLOAT@6695..6696 "1"
+ COMMA@6696..6697 ","
+ WHITESPACE@6697..6698 " "
+ ARG@6698..6710
+ EXPR_BINARY@6698..6710
+ LHS_EXPR@6698..6701
+ EXPR_VAR@6698..6701
+ NAME@6698..6701
+ IDENT@6698..6701 "acc"
+ WHITESPACE@6701..6702 " "
+ PLUS@6702..6703 "+"
+ WHITESPACE@6703..6704 " "
+ EXPR_ARRAY@6704..6710
+ L_BRACK@6704..6705 "["
+ EXPR_INDEX_EXPR@6705..6709
+ LHS_EXPR@6705..6706
+ EXPR_VAR@6705..6706
+ NAME@6705..6706
+ IDENT@6705..6706 "a"
+ L_BRACK@6706..6707 "["
+ EXPR_VAR@6707..6708
+ NAME@6707..6708
+ IDENT@6707..6708 "i"
+ R_BRACK@6708..6709 "]"
+ R_BRACK@6709..6710 "]"
+ R_PAREN@6710..6711 ")"
+ WHITESPACE@6711..6712 " "
+ TAILSTRICT_KW@6712..6722 "tailstrict"
+ WHITESPACE@6722..6731 "\n "
+ ELSE_KW@6731..6735 "else"
+ WHITESPACE@6735..6736 " "
+ FALSE_EXPR@6736..6874
+ EXPR_IF_THEN_ELSE@6736..6874
+ IF_KW@6736..6738 "if"
+ WHITESPACE@6738..6739 " "
+ EXPR_BINARY@6739..6746
+ LHS_EXPR@6739..6741
+ EXPR_VAR@6739..6741
+ NAME@6739..6741
+ IDENT@6739..6741 "ak"
+ WHITESPACE@6741..6742 " "
+ LT@6742..6743 "<"
+ WHITESPACE@6743..6744 " "
+ EXPR_VAR@6744..6746
+ NAME@6744..6746
+ IDENT@6744..6746 "bk"
+ WHITESPACE@6746..6747 " "
+ THEN_KW@6747..6751 "then"
+ WHITESPACE@6751..6762 "\n "
+ TRUE_EXPR@6762..6806
+ EXPR_APPLY@6762..6806
+ EXPR_VAR@6762..6765
+ NAME@6762..6765
+ IDENT@6762..6765 "aux"
+ ARGS_DESC@6765..6806
+ L_PAREN@6765..6766 "("
+ ARG@6766..6767
+ EXPR_VAR@6766..6767
+ NAME@6766..6767
+ IDENT@6766..6767 "a"
+ COMMA@6767..6768 ","
+ WHITESPACE@6768..6769 " "
+ ARG@6769..6770
+ EXPR_VAR@6769..6770
+ NAME@6769..6770
+ IDENT@6769..6770 "b"
+ COMMA@6770..6771 ","
+ WHITESPACE@6771..6772 " "
+ ARG@6772..6777
+ EXPR_BINARY@6772..6777
+ LHS_EXPR@6772..6773
+ EXPR_VAR@6772..6773
+ NAME@6772..6773
+ IDENT@6772..6773 "i"
+ WHITESPACE@6773..6774 " "
+ PLUS@6774..6775 "+"
+ WHITESPACE@6775..6776 " "
+ EXPR_NUMBER@6776..6777
+ FLOAT@6776..6777 "1"
+ COMMA@6777..6778 ","
+ WHITESPACE@6778..6779 " "
+ ARG@6779..6780
+ EXPR_VAR@6779..6780
+ NAME@6779..6780
+ IDENT@6779..6780 "j"
+ COMMA@6780..6781 ","
+ WHITESPACE@6781..6782 " "
+ ARG@6782..6794
+ EXPR_BINARY@6782..6794
+ LHS_EXPR@6782..6785
+ EXPR_VAR@6782..6785
+ NAME@6782..6785
+ IDENT@6782..6785 "acc"
+ WHITESPACE@6785..6786 " "
+ PLUS@6786..6787 "+"
+ WHITESPACE@6787..6788 " "
+ EXPR_ARRAY@6788..6794
+ L_BRACK@6788..6789 "["
+ EXPR_INDEX_EXPR@6789..6793
+ LHS_EXPR@6789..6790
+ EXPR_VAR@6789..6790
+ NAME@6789..6790
+ IDENT@6789..6790 "a"
+ L_BRACK@6790..6791 "["
+ EXPR_VAR@6791..6792
+ NAME@6791..6792
+ IDENT@6791..6792 "i"
+ R_BRACK@6792..6793 "]"
+ R_BRACK@6793..6794 "]"
+ R_PAREN@6794..6795 ")"
+ WHITESPACE@6795..6796 " "
+ TAILSTRICT_KW@6796..6806 "tailstrict"
+ WHITESPACE@6806..6815 "\n "
+ ELSE_KW@6815..6819 "else"
+ WHITESPACE@6819..6830 "\n "
+ FALSE_EXPR@6830..6874
+ EXPR_APPLY@6830..6874
+ EXPR_VAR@6830..6833
+ NAME@6830..6833
+ IDENT@6830..6833 "aux"
+ ARGS_DESC@6833..6874
+ L_PAREN@6833..6834 "("
+ ARG@6834..6835
+ EXPR_VAR@6834..6835
+ NAME@6834..6835
+ IDENT@6834..6835 "a"
+ COMMA@6835..6836 ","
+ WHITESPACE@6836..6837 " "
+ ARG@6837..6838
+ EXPR_VAR@6837..6838
+ NAME@6837..6838
+ IDENT@6837..6838 "b"
+ COMMA@6838..6839 ","
+ WHITESPACE@6839..6840 " "
+ ARG@6840..6841
+ EXPR_VAR@6840..6841
+ NAME@6840..6841
+ IDENT@6840..6841 "i"
+ COMMA@6841..6842 ","
+ WHITESPACE@6842..6843 " "
+ ARG@6843..6848
+ EXPR_BINARY@6843..6848
+ LHS_EXPR@6843..6844
+ EXPR_VAR@6843..6844
+ NAME@6843..6844
+ IDENT@6843..6844 "j"
+ WHITESPACE@6844..6845 " "
+ PLUS@6845..6846 "+"
+ WHITESPACE@6846..6847 " "
+ EXPR_NUMBER@6847..6848
+ FLOAT@6847..6848 "1"
+ COMMA@6848..6849 ","
+ WHITESPACE@6849..6850 " "
+ ARG@6850..6862
+ EXPR_BINARY@6850..6862
+ LHS_EXPR@6850..6853
+ EXPR_VAR@6850..6853
+ NAME@6850..6853
+ IDENT@6850..6853 "acc"
+ WHITESPACE@6853..6854 " "
+ PLUS@6854..6855 "+"
+ WHITESPACE@6855..6856 " "
+ EXPR_ARRAY@6856..6862
+ L_BRACK@6856..6857 "["
+ EXPR_INDEX_EXPR@6857..6861
+ LHS_EXPR@6857..6858
+ EXPR_VAR@6857..6858
+ NAME@6857..6858
+ IDENT@6857..6858 "b"
+ L_BRACK@6858..6859 "["
+ EXPR_VAR@6859..6860
+ NAME@6859..6860
+ IDENT@6859..6860 "j"
+ R_BRACK@6860..6861 "]"
+ R_BRACK@6861..6862 "]"
+ R_PAREN@6862..6863 ")"
+ WHITESPACE@6863..6864 " "
+ TAILSTRICT_KW@6864..6874 "tailstrict"
+ SEMI@6874..6875 ";"
+ WHITESPACE@6875..6880 "\n "
+ EXPR_APPLY@6880..6899
+ EXPR_VAR@6880..6883
+ NAME@6880..6883
+ IDENT@6880..6883 "aux"
+ ARGS_DESC@6883..6899
+ L_PAREN@6883..6884 "("
+ ARG@6884..6885
+ EXPR_VAR@6884..6885
+ NAME@6884..6885
+ IDENT@6884..6885 "a"
+ COMMA@6885..6886 ","
+ WHITESPACE@6886..6887 " "
+ ARG@6887..6888
+ EXPR_VAR@6887..6888
+ NAME@6887..6888
+ IDENT@6887..6888 "b"
+ COMMA@6888..6889 ","
+ WHITESPACE@6889..6890 " "
+ ARG@6890..6891
+ EXPR_NUMBER@6890..6891
+ FLOAT@6890..6891 "0"
+ COMMA@6891..6892 ","
+ WHITESPACE@6892..6893 " "
+ ARG@6893..6894
+ EXPR_NUMBER@6893..6894
+ FLOAT@6893..6894 "0"
+ COMMA@6894..6895 ","
+ WHITESPACE@6895..6896 " "
+ ARG@6896..6898
+ EXPR_ARRAY@6896..6898
+ L_BRACK@6896..6897 "["
+ R_BRACK@6897..6898 "]"
+ R_PAREN@6898..6899 ")"
+ COMMA@6899..6900 ","
+ WHITESPACE@6900..6904 "\n\n "
+ MEMBER_FIELD_METHOD@6904..7361
+ FIELD_NAME_FIXED@6904..6911
+ NAME@6904..6911
+ IDENT@6904..6911 "setDiff"
+ PARAMS_DESC@6911..6926
+ L_PAREN@6911..6912 "("
+ PARAM@6912..6913
+ DESTRUCT_FULL@6912..6913
+ NAME@6912..6913
+ IDENT@6912..6913 "a"
+ COMMA@6913..6914 ","
+ WHITESPACE@6914..6915 " "
+ PARAM@6915..6916
+ DESTRUCT_FULL@6915..6916
+ NAME@6915..6916
+ IDENT@6915..6916 "b"
+ COMMA@6916..6917 ","
+ WHITESPACE@6917..6918 " "
+ PARAM@6918..6925
+ DESTRUCT_FULL@6918..6922
+ NAME@6918..6922
+ IDENT@6918..6922 "keyF"
+ ASSIGN@6922..6923 "="
+ EXPR_VAR@6923..6925
+ NAME@6923..6925
+ IDENT@6923..6925 "id"
+ R_PAREN@6925..6926 ")"
+ COLONCOLON@6926..6928 "::"
+ WHITESPACE@6928..6933 "\n "
+ STMT_LOCAL@6933..7326
+ LOCAL_KW@6933..6938 "local"
+ WHITESPACE@6938..6939 " "
+ BIND_FUNCTION@6939..7325
+ NAME@6939..6942
+ IDENT@6939..6942 "aux"
+ PARAMS_DESC@6942..6959
+ L_PAREN@6942..6943 "("
+ PARAM@6943..6944
+ DESTRUCT_FULL@6943..6944
+ NAME@6943..6944
+ IDENT@6943..6944 "a"
+ COMMA@6944..6945 ","
+ WHITESPACE@6945..6946 " "
+ PARAM@6946..6947
+ DESTRUCT_FULL@6946..6947
+ NAME@6946..6947
+ IDENT@6946..6947 "b"
+ COMMA@6947..6948 ","
+ WHITESPACE@6948..6949 " "
+ PARAM@6949..6950
+ DESTRUCT_FULL@6949..6950
+ NAME@6949..6950
+ IDENT@6949..6950 "i"
+ COMMA@6950..6951 ","
+ WHITESPACE@6951..6952 " "
+ PARAM@6952..6953
+ DESTRUCT_FULL@6952..6953
+ NAME@6952..6953
+ IDENT@6952..6953 "j"
+ COMMA@6953..6954 ","
+ WHITESPACE@6954..6955 " "
+ PARAM@6955..6958
+ DESTRUCT_FULL@6955..6958
+ NAME@6955..6958
+ IDENT@6955..6958 "acc"
+ R_PAREN@6958..6959 ")"
+ WHITESPACE@6959..6960 " "
+ ASSIGN@6960..6961 "="
+ WHITESPACE@6961..6968 "\n "
+ EXPR_IF_THEN_ELSE@6968..7325
+ IF_KW@6968..6970 "if"
+ WHITESPACE@6970..6971 " "
+ EXPR_BINARY@6971..6989
+ LHS_EXPR@6971..6972
+ EXPR_VAR@6971..6972
+ NAME@6971..6972
+ IDENT@6971..6972 "i"
+ WHITESPACE@6972..6973 " "
+ GE@6973..6975 ">="
+ WHITESPACE@6975..6976 " "
+ EXPR_APPLY@6976..6989
+ EXPR_INDEX@6976..6986
+ EXPR_VAR@6976..6979
+ NAME@6976..6979
+ IDENT@6976..6979 "std"
+ DOT@6979..6980 "."
+ NAME@6980..6986
+ IDENT@6980..6986 "length"
+ ARGS_DESC@6986..6989
+ L_PAREN@6986..6987 "("
+ ARG@6987..6988
+ EXPR_VAR@6987..6988
+ NAME@6987..6988
+ IDENT@6987..6988 "a"
+ R_PAREN@6988..6989 ")"
+ WHITESPACE@6989..6990 " "
+ THEN_KW@6990..6994 "then"
+ WHITESPACE@6994..7003 "\n "
+ TRUE_EXPR@7003..7006
+ EXPR_VAR@7003..7006
+ NAME@7003..7006
+ IDENT@7003..7006 "acc"
+ WHITESPACE@7006..7013 "\n "
+ ELSE_KW@7013..7017 "else"
+ WHITESPACE@7017..7018 " "
+ FALSE_EXPR@7018..7325
+ EXPR_IF_THEN_ELSE@7018..7325
+ IF_KW@7018..7020 "if"
+ WHITESPACE@7020..7021 " "
+ EXPR_BINARY@7021..7039
+ LHS_EXPR@7021..7022
+ EXPR_VAR@7021..7022
+ NAME@7021..7022
+ IDENT@7021..7022 "j"
+ WHITESPACE@7022..7023 " "
+ GE@7023..7025 ">="
+ WHITESPACE@7025..7026 " "
+ EXPR_APPLY@7026..7039
+ EXPR_INDEX@7026..7036
+ EXPR_VAR@7026..7029
+ NAME@7026..7029
+ IDENT@7026..7029 "std"
+ DOT@7029..7030 "."
+ NAME@7030..7036
+ IDENT@7030..7036 "length"
+ ARGS_DESC@7036..7039
+ L_PAREN@7036..7037 "("
+ ARG@7037..7038
+ EXPR_VAR@7037..7038
+ NAME@7037..7038
+ IDENT@7037..7038 "b"
+ R_PAREN@7038..7039 ")"
+ WHITESPACE@7039..7040 " "
+ THEN_KW@7040..7044 "then"
+ WHITESPACE@7044..7053 "\n "
+ TRUE_EXPR@7053..7064
+ EXPR_BINARY@7053..7064
+ LHS_EXPR@7053..7056
+ EXPR_VAR@7053..7056
+ NAME@7053..7056
+ IDENT@7053..7056 "acc"
+ WHITESPACE@7056..7057 " "
+ PLUS@7057..7058 "+"
+ WHITESPACE@7058..7059 " "
+ EXPR_SLICE@7059..7064
+ EXPR_VAR@7059..7060
+ NAME@7059..7060
+ IDENT@7059..7060 "a"
+ SLICE_DESC@7060..7064
+ L_BRACK@7060..7061 "["
+ EXPR_VAR@7061..7062
+ NAME@7061..7062
+ IDENT@7061..7062 "i"
+ COLON@7062..7063 ":"
+ R_BRACK@7063..7064 "]"
+ WHITESPACE@7064..7071 "\n "
+ ELSE_KW@7071..7075 "else"
+ WHITESPACE@7075..7084 "\n "
+ FALSE_EXPR@7084..7325
+ EXPR_IF_THEN_ELSE@7084..7325
+ IF_KW@7084..7086 "if"
+ WHITESPACE@7086..7087 " "
+ EXPR_BINARY@7087..7111
+ LHS_EXPR@7087..7097
+ EXPR_APPLY@7087..7097
+ EXPR_VAR@7087..7091
+ NAME@7087..7091
+ IDENT@7087..7091 "keyF"
+ ARGS_DESC@7091..7097
+ L_PAREN@7091..7092 "("
+ ARG@7092..7096
+ EXPR_INDEX_EXPR@7092..7096
+ LHS_EXPR@7092..7093
+ EXPR_VAR@7092..7093
+ NAME@7092..7093
+ IDENT@7092..7093 "a"
+ L_BRACK@7093..7094 "["
+ EXPR_VAR@7094..7095
+ NAME@7094..7095
+ IDENT@7094..7095 "i"
+ R_BRACK@7095..7096 "]"
+ R_PAREN@7096..7097 ")"
+ WHITESPACE@7097..7098 " "
+ EQ@7098..7100 "=="
+ WHITESPACE@7100..7101 " "
+ EXPR_APPLY@7101..7111
+ EXPR_VAR@7101..7105
+ NAME@7101..7105
+ IDENT@7101..7105 "keyF"
+ ARGS_DESC@7105..7111
+ L_PAREN@7105..7106 "("
+ ARG@7106..7110
+ EXPR_INDEX_EXPR@7106..7110
+ LHS_EXPR@7106..7107
+ EXPR_VAR@7106..7107
+ NAME@7106..7107
+ IDENT@7106..7107 "b"
+ L_BRACK@7107..7108 "["
+ EXPR_VAR@7108..7109
+ NAME@7108..7109
+ IDENT@7108..7109 "j"
+ R_BRACK@7109..7110 "]"
+ R_PAREN@7110..7111 ")"
+ WHITESPACE@7111..7112 " "
+ THEN_KW@7112..7116 "then"
+ WHITESPACE@7116..7127 "\n "
+ TRUE_EXPR@7127..7166
+ EXPR_APPLY@7127..7166
+ EXPR_VAR@7127..7130
+ NAME@7127..7130
+ IDENT@7127..7130 "aux"
+ ARGS_DESC@7130..7166
+ L_PAREN@7130..7131 "("
+ ARG@7131..7132
+ EXPR_VAR@7131..7132
+ NAME@7131..7132
+ IDENT@7131..7132 "a"
+ COMMA@7132..7133 ","
+ WHITESPACE@7133..7134 " "
+ ARG@7134..7135
+ EXPR_VAR@7134..7135
+ NAME@7134..7135
+ IDENT@7134..7135 "b"
+ COMMA@7135..7136 ","
+ WHITESPACE@7136..7137 " "
+ ARG@7137..7142
+ EXPR_BINARY@7137..7142
+ LHS_EXPR@7137..7138
+ EXPR_VAR@7137..7138
+ NAME@7137..7138
+ IDENT@7137..7138 "i"
+ WHITESPACE@7138..7139 " "
+ PLUS@7139..7140 "+"
+ WHITESPACE@7140..7141 " "
+ EXPR_NUMBER@7141..7142
+ FLOAT@7141..7142 "1"
+ COMMA@7142..7143 ","
+ WHITESPACE@7143..7144 " "
+ ARG@7144..7149
+ EXPR_BINARY@7144..7149
+ LHS_EXPR@7144..7145
+ EXPR_VAR@7144..7145
+ NAME@7144..7145
+ IDENT@7144..7145 "j"
+ WHITESPACE@7145..7146 " "
+ PLUS@7146..7147 "+"
+ WHITESPACE@7147..7148 " "
+ EXPR_NUMBER@7148..7149
+ FLOAT@7148..7149 "1"
+ COMMA@7149..7150 ","
+ WHITESPACE@7150..7151 " "
+ ARG@7151..7154
+ EXPR_VAR@7151..7154
+ NAME@7151..7154
+ IDENT@7151..7154 "acc"
+ R_PAREN@7154..7155 ")"
+ WHITESPACE@7155..7156 " "
+ TAILSTRICT_KW@7156..7166 "tailstrict"
+ WHITESPACE@7166..7175 "\n "
+ ELSE_KW@7175..7179 "else"
+ WHITESPACE@7179..7180 " "
+ FALSE_EXPR@7180..7325
+ EXPR_IF_THEN_ELSE@7180..7325
+ IF_KW@7180..7182 "if"
+ WHITESPACE@7182..7183 " "
+ EXPR_BINARY@7183..7206
+ LHS_EXPR@7183..7193
+ EXPR_APPLY@7183..7193
+ EXPR_VAR@7183..7187
+ NAME@7183..7187
+ IDENT@7183..7187 "keyF"
+ ARGS_DESC@7187..7193
+ L_PAREN@7187..7188 "("
+ ARG@7188..7192
+ EXPR_INDEX_EXPR@7188..7192
+ LHS_EXPR@7188..7189
+ EXPR_VAR@7188..7189
+ NAME@7188..7189
+ IDENT@7188..7189 "a"
+ L_BRACK@7189..7190 "["
+ EXPR_VAR@7190..7191
+ NAME@7190..7191
+ IDENT@7190..7191 "i"
+ R_BRACK@7191..7192 "]"
+ R_PAREN@7192..7193 ")"
+ WHITESPACE@7193..7194 " "
+ LT@7194..7195 "<"
+ WHITESPACE@7195..7196 " "
+ EXPR_APPLY@7196..7206
+ EXPR_VAR@7196..7200
+ NAME@7196..7200
+ IDENT@7196..7200 "keyF"
+ ARGS_DESC@7200..7206
+ L_PAREN@7200..7201 "("
+ ARG@7201..7205
+ EXPR_INDEX_EXPR@7201..7205
+ LHS_EXPR@7201..7202
+ EXPR_VAR@7201..7202
+ NAME@7201..7202
+ IDENT@7201..7202 "b"
+ L_BRACK@7202..7203 "["
+ EXPR_VAR@7203..7204
+ NAME@7203..7204
+ IDENT@7203..7204 "j"
+ R_BRACK@7204..7205 "]"
+ R_PAREN@7205..7206 ")"
+ WHITESPACE@7206..7207 " "
+ THEN_KW@7207..7211 "then"
+ WHITESPACE@7211..7222 "\n "
+ TRUE_EXPR@7222..7266
+ EXPR_APPLY@7222..7266
+ EXPR_VAR@7222..7225
+ NAME@7222..7225
+ IDENT@7222..7225 "aux"
+ ARGS_DESC@7225..7266
+ L_PAREN@7225..7226 "("
+ ARG@7226..7227
+ EXPR_VAR@7226..7227
+ NAME@7226..7227
+ IDENT@7226..7227 "a"
+ COMMA@7227..7228 ","
+ WHITESPACE@7228..7229 " "
+ ARG@7229..7230
+ EXPR_VAR@7229..7230
+ NAME@7229..7230
+ IDENT@7229..7230 "b"
+ COMMA@7230..7231 ","
+ WHITESPACE@7231..7232 " "
+ ARG@7232..7237
+ EXPR_BINARY@7232..7237
+ LHS_EXPR@7232..7233
+ EXPR_VAR@7232..7233
+ NAME@7232..7233
+ IDENT@7232..7233 "i"
+ WHITESPACE@7233..7234 " "
+ PLUS@7234..7235 "+"
+ WHITESPACE@7235..7236 " "
+ EXPR_NUMBER@7236..7237
+ FLOAT@7236..7237 "1"
+ COMMA@7237..7238 ","
+ WHITESPACE@7238..7239 " "
+ ARG@7239..7240
+ EXPR_VAR@7239..7240
+ NAME@7239..7240
+ IDENT@7239..7240 "j"
+ COMMA@7240..7241 ","
+ WHITESPACE@7241..7242 " "
+ ARG@7242..7254
+ EXPR_BINARY@7242..7254
+ LHS_EXPR@7242..7245
+ EXPR_VAR@7242..7245
+ NAME@7242..7245
+ IDENT@7242..7245 "acc"
+ WHITESPACE@7245..7246 " "
+ PLUS@7246..7247 "+"
+ WHITESPACE@7247..7248 " "
+ EXPR_ARRAY@7248..7254
+ L_BRACK@7248..7249 "["
+ EXPR_INDEX_EXPR@7249..7253
+ LHS_EXPR@7249..7250
+ EXPR_VAR@7249..7250
+ NAME@7249..7250
+ IDENT@7249..7250 "a"
+ L_BRACK@7250..7251 "["
+ EXPR_VAR@7251..7252
+ NAME@7251..7252
+ IDENT@7251..7252 "i"
+ R_BRACK@7252..7253 "]"
+ R_BRACK@7253..7254 "]"
+ R_PAREN@7254..7255 ")"
+ WHITESPACE@7255..7256 " "
+ TAILSTRICT_KW@7256..7266 "tailstrict"
+ WHITESPACE@7266..7275 "\n "
+ ELSE_KW@7275..7279 "else"
+ WHITESPACE@7279..7290 "\n "
+ FALSE_EXPR@7290..7325
+ EXPR_APPLY@7290..7325
+ EXPR_VAR@7290..7293
+ NAME@7290..7293
+ IDENT@7290..7293 "aux"
+ ARGS_DESC@7293..7325
+ L_PAREN@7293..7294 "("
+ ARG@7294..7295
+ EXPR_VAR@7294..7295
+ NAME@7294..7295
+ IDENT@7294..7295 "a"
+ COMMA@7295..7296 ","
+ WHITESPACE@7296..7297 " "
+ ARG@7297..7298
+ EXPR_VAR@7297..7298
+ NAME@7297..7298
+ IDENT@7297..7298 "b"
+ COMMA@7298..7299 ","
+ WHITESPACE@7299..7300 " "
+ ARG@7300..7301
+ EXPR_VAR@7300..7301
+ NAME@7300..7301
+ IDENT@7300..7301 "i"
+ COMMA@7301..7302 ","
+ WHITESPACE@7302..7303 " "
+ ARG@7303..7308
+ EXPR_BINARY@7303..7308
+ LHS_EXPR@7303..7304
+ EXPR_VAR@7303..7304
+ NAME@7303..7304
+ IDENT@7303..7304 "j"
+ WHITESPACE@7304..7305 " "
+ PLUS@7305..7306 "+"
+ WHITESPACE@7306..7307 " "
+ EXPR_NUMBER@7307..7308
+ FLOAT@7307..7308 "1"
+ COMMA@7308..7309 ","
+ WHITESPACE@7309..7310 " "
+ ARG@7310..7313
+ EXPR_VAR@7310..7313
+ NAME@7310..7313
+ IDENT@7310..7313 "acc"
+ R_PAREN@7313..7314 ")"
+ WHITESPACE@7314..7315 " "
+ TAILSTRICT_KW@7315..7325 "tailstrict"
+ SEMI@7325..7326 ";"
+ WHITESPACE@7326..7331 "\n "
+ EXPR_APPLY@7331..7361
+ EXPR_VAR@7331..7334
+ NAME@7331..7334
+ IDENT@7331..7334 "aux"
+ ARGS_DESC@7334..7361
+ L_PAREN@7334..7335 "("
+ ARG@7335..7336
+ EXPR_VAR@7335..7336
+ NAME@7335..7336
+ IDENT@7335..7336 "a"
+ COMMA@7336..7337 ","
+ WHITESPACE@7337..7338 " "
+ ARG@7338..7339
+ EXPR_VAR@7338..7339
+ NAME@7338..7339
+ IDENT@7338..7339 "b"
+ COMMA@7339..7340 ","
+ WHITESPACE@7340..7341 " "
+ ARG@7341..7342
+ EXPR_NUMBER@7341..7342
+ FLOAT@7341..7342 "0"
+ COMMA@7342..7343 ","
+ WHITESPACE@7343..7344 " "
+ ARG@7344..7345
+ EXPR_NUMBER@7344..7345
+ FLOAT@7344..7345 "0"
+ COMMA@7345..7346 ","
+ WHITESPACE@7346..7347 " "
+ ARG@7347..7349
+ EXPR_ARRAY@7347..7349
+ L_BRACK@7347..7348 "["
+ R_BRACK@7348..7349 "]"
+ R_PAREN@7349..7350 ")"
+ WHITESPACE@7350..7351 " "
+ TAILSTRICT_KW@7351..7361 "tailstrict"
+ COMMA@7361..7362 ","
+ WHITESPACE@7362..7366 "\n\n "
+ MEMBER_FIELD_METHOD@7366..8154
+ FIELD_NAME_FIXED@7366..7376
+ NAME@7366..7376
+ IDENT@7366..7376 "mergePatch"
+ PARAMS_DESC@7376..7391
+ L_PAREN@7376..7377 "("
+ PARAM@7377..7383
+ DESTRUCT_FULL@7377..7383
+ NAME@7377..7383
+ IDENT@7377..7383 "target"
+ COMMA@7383..7384 ","
+ WHITESPACE@7384..7385 " "
+ PARAM@7385..7390
+ DESTRUCT_FULL@7385..7390
+ NAME@7385..7390
+ IDENT@7385..7390 "patch"
+ R_PAREN@7390..7391 ")"
+ COLONCOLON@7391..7393 "::"
+ WHITESPACE@7393..7398 "\n "
+ EXPR_IF_THEN_ELSE@7398..8154
+ IF_KW@7398..7400 "if"
+ WHITESPACE@7400..7401 " "
+ EXPR_APPLY@7401..7420
+ EXPR_INDEX@7401..7413
+ EXPR_VAR@7401..7404
+ NAME@7401..7404
+ IDENT@7401..7404 "std"
+ DOT@7404..7405 "."
+ NAME@7405..7413
+ IDENT@7405..7413 "isObject"
+ ARGS_DESC@7413..7420
+ L_PAREN@7413..7414 "("
+ ARG@7414..7419
+ EXPR_VAR@7414..7419
+ NAME@7414..7419
+ IDENT@7414..7419 "patch"
+ R_PAREN@7419..7420 ")"
+ WHITESPACE@7420..7421 " "
+ THEN_KW@7421..7425 "then"
+ WHITESPACE@7425..7432 "\n "
+ STMT_LOCAL@7432..7506
+ LOCAL_KW@7432..7437 "local"
+ WHITESPACE@7437..7438 " "
+ BIND_DESTRUCT@7438..7505
+ DESTRUCT_FULL@7438..7451
+ NAME@7438..7451
+ IDENT@7438..7451 "target_object"
+ WHITESPACE@7451..7452 " "
+ ASSIGN@7452..7453 "="
+ WHITESPACE@7453..7462 "\n "
+ EXPR_IF_THEN_ELSE@7462..7505
+ IF_KW@7462..7464 "if"
+ WHITESPACE@7464..7465 " "
+ EXPR_APPLY@7465..7485
+ EXPR_INDEX@7465..7477
+ EXPR_VAR@7465..7468
+ NAME@7465..7468
+ IDENT@7465..7468 "std"
+ DOT@7468..7469 "."
+ NAME@7469..7477
+ IDENT@7469..7477 "isObject"
+ ARGS_DESC@7477..7485
+ L_PAREN@7477..7478 "("
+ ARG@7478..7484
+ EXPR_VAR@7478..7484
+ NAME@7478..7484
+ IDENT@7478..7484 "target"
+ R_PAREN@7484..7485 ")"
+ WHITESPACE@7485..7486 " "
+ THEN_KW@7486..7490 "then"
+ WHITESPACE@7490..7491 " "
+ TRUE_EXPR@7491..7497
+ EXPR_VAR@7491..7497
+ NAME@7491..7497
+ IDENT@7491..7497 "target"
+ WHITESPACE@7497..7498 " "
+ ELSE_KW@7498..7502 "else"
+ WHITESPACE@7502..7503 " "
+ FALSE_EXPR@7503..7505
+ EXPR_OBJECT@7503..7505
+ OBJ_BODY_MEMBER_LIST@7503..7505
+ L_BRACE@7503..7504 "{"
+ R_BRACE@7504..7505 "}"
+ SEMI@7505..7506 ";"
+ WHITESPACE@7506..7514 "\n\n "
+ STMT_LOCAL@7514..7620
+ LOCAL_KW@7514..7519 "local"
+ WHITESPACE@7519..7520 " "
+ BIND_DESTRUCT@7520..7619
+ DESTRUCT_FULL@7520..7533
+ NAME@7520..7533
+ IDENT@7520..7533 "target_fields"
+ WHITESPACE@7533..7534 " "
+ ASSIGN@7534..7535 "="
+ WHITESPACE@7535..7544 "\n "
+ EXPR_IF_THEN_ELSE@7544..7619
+ IF_KW@7544..7546 "if"
+ WHITESPACE@7546..7547 " "
+ EXPR_APPLY@7547..7574
+ EXPR_INDEX@7547..7559
+ EXPR_VAR@7547..7550
+ NAME@7547..7550
+ IDENT@7547..7550 "std"
+ DOT@7550..7551 "."
+ NAME@7551..7559
+ IDENT@7551..7559 "isObject"
+ ARGS_DESC@7559..7574
+ L_PAREN@7559..7560 "("
+ ARG@7560..7573
+ EXPR_VAR@7560..7573
+ NAME@7560..7573
+ IDENT@7560..7573 "target_object"
+ R_PAREN@7573..7574 ")"
+ WHITESPACE@7574..7575 " "
+ THEN_KW@7575..7579 "then"
+ WHITESPACE@7579..7580 " "
+ TRUE_EXPR@7580..7611
+ EXPR_APPLY@7580..7611
+ EXPR_INDEX@7580..7596
+ EXPR_VAR@7580..7583
+ NAME@7580..7583
+ IDENT@7580..7583 "std"
+ DOT@7583..7584 "."
+ NAME@7584..7596
+ IDENT@7584..7596 "objectFields"
+ ARGS_DESC@7596..7611
+ L_PAREN@7596..7597 "("
+ ARG@7597..7610
+ EXPR_VAR@7597..7610
+ NAME@7597..7610
+ IDENT@7597..7610 "target_object"
+ R_PAREN@7610..7611 ")"
+ WHITESPACE@7611..7612 " "
+ ELSE_KW@7612..7616 "else"
+ WHITESPACE@7616..7617 " "
+ FALSE_EXPR@7617..7619
+ EXPR_ARRAY@7617..7619
+ L_BRACK@7617..7618 "["
+ R_BRACK@7618..7619 "]"
+ SEMI@7619..7620 ";"
+ WHITESPACE@7620..7628 "\n\n "
+ STMT_LOCAL@7628..7705
+ LOCAL_KW@7628..7633 "local"
+ WHITESPACE@7633..7634 " "
+ BIND_DESTRUCT@7634..7704
+ DESTRUCT_FULL@7634..7645
+ NAME@7634..7645
+ IDENT@7634..7645 "null_fields"
+ WHITESPACE@7645..7646 " "
+ ASSIGN@7646..7647 "="
+ WHITESPACE@7647..7648 " "
+ EXPR_ARRAY_COMP@7648..7704
+ L_BRACK@7648..7649 "["
+ EXPR_VAR@7649..7650
+ NAME@7649..7650
+ IDENT@7649..7650 "k"
+ WHITESPACE@7650..7651 " "
+ FOR_SPEC@7651..7683
+ FOR_KW@7651..7654 "for"
+ WHITESPACE@7654..7655 " "
+ NAME@7655..7656
+ IDENT@7655..7656 "k"
+ WHITESPACE@7656..7657 " "
+ IN_KW@7657..7659 "in"
+ WHITESPACE@7659..7660 " "
+ EXPR_APPLY@7660..7683
+ EXPR_INDEX@7660..7676
+ EXPR_VAR@7660..7663
+ NAME@7660..7663
+ IDENT@7660..7663 "std"
+ DOT@7663..7664 "."
+ NAME@7664..7676
+ IDENT@7664..7676 "objectFields"
+ ARGS_DESC@7676..7683
+ L_PAREN@7676..7677 "("
+ ARG@7677..7682
+ EXPR_VAR@7677..7682
+ NAME@7677..7682
+ IDENT@7677..7682 "patch"
+ R_PAREN@7682..7683 ")"
+ WHITESPACE@7683..7684 " "
+ IF_SPEC@7684..7703
+ IF_KW@7684..7686 "if"
+ WHITESPACE@7686..7687 " "
+ EXPR_BINARY@7687..7703
+ LHS_EXPR@7687..7695
+ EXPR_INDEX_EXPR@7687..7695
+ LHS_EXPR@7687..7692
+ EXPR_VAR@7687..7692
+ NAME@7687..7692
+ IDENT@7687..7692 "patch"
+ L_BRACK@7692..7693 "["
+ EXPR_VAR@7693..7694
+ NAME@7693..7694
+ IDENT@7693..7694 "k"
+ R_BRACK@7694..7695 "]"
+ WHITESPACE@7695..7696 " "
+ EQ@7696..7698 "=="
+ WHITESPACE@7698..7699 " "
+ EXPR_LITERAL@7699..7703
+ NULL_KW@7699..7703 "null"
+ R_BRACK@7703..7704 "]"
+ SEMI@7704..7705 ";"
+ WHITESPACE@7705..7712 "\n "
+ STMT_LOCAL@7712..7785
+ LOCAL_KW@7712..7717 "local"
+ WHITESPACE@7717..7718 " "
+ BIND_DESTRUCT@7718..7784
+ DESTRUCT_FULL@7718..7729
+ NAME@7718..7729
+ IDENT@7718..7729 "both_fields"
+ WHITESPACE@7729..7730 " "
+ ASSIGN@7730..7731 "="
+ WHITESPACE@7731..7732 " "
+ EXPR_APPLY@7732..7784
+ EXPR_INDEX@7732..7744
+ EXPR_VAR@7732..7735
+ NAME@7732..7735
+ IDENT@7732..7735 "std"
+ DOT@7735..7736 "."
+ NAME@7736..7744
+ IDENT@7736..7744 "setUnion"
+ ARGS_DESC@7744..7784
+ L_PAREN@7744..7745 "("
+ ARG@7745..7758
+ EXPR_VAR@7745..7758
+ NAME@7745..7758
+ IDENT@7745..7758 "target_fields"
+ COMMA@7758..7759 ","
+ WHITESPACE@7759..7760 " "
+ ARG@7760..7783
+ EXPR_APPLY@7760..7783
+ EXPR_INDEX@7760..7776
+ EXPR_VAR@7760..7763
+ NAME@7760..7763
+ IDENT@7760..7763 "std"
+ DOT@7763..7764 "."
+ NAME@7764..7776
+ IDENT@7764..7776 "objectFields"
+ ARGS_DESC@7776..7783
+ L_PAREN@7776..7777 "("
+ ARG@7777..7782
+ EXPR_VAR@7777..7782
+ NAME@7777..7782
+ IDENT@7777..7782 "patch"
+ R_PAREN@7782..7783 ")"
+ R_PAREN@7783..7784 ")"
+ SEMI@7784..7785 ";"
+ WHITESPACE@7785..7793 "\n\n "
+ TRUE_EXPR@7793..8133
+ EXPR_OBJECT@7793..8133
+ OBJ_BODY_COMP@7793..8133
+ L_BRACE@7793..7794 "{"
+ WHITESPACE@7794..7803 "\n "
+ MEMBER_FIELD_NORMAL@7803..8070
+ FIELD_NAME_DYNAMIC@7803..7806
+ L_BRACK@7803..7804 "["
+ EXPR_VAR@7804..7805
+ NAME@7804..7805
+ IDENT@7804..7805 "k"
+ R_BRACK@7805..7806 "]"
+ COLON@7806..7807 ":"
+ WHITESPACE@7807..7818 "\n "
+ EXPR_IF_THEN_ELSE@7818..8070
+ IF_KW@7818..7820 "if"
+ WHITESPACE@7820..7821 " "
+ EXPR_UNARY@7821..7845
+ NOT@7821..7822 "!"
+ EXPR_APPLY@7822..7845
+ EXPR_INDEX@7822..7835
+ EXPR_VAR@7822..7825
+ NAME@7822..7825
+ IDENT@7822..7825 "std"
+ DOT@7825..7826 "."
+ NAME@7826..7835
+ IDENT@7826..7835 "objectHas"
+ ARGS_DESC@7835..7845
+ L_PAREN@7835..7836 "("
+ ARG@7836..7841
+ EXPR_VAR@7836..7841
+ NAME@7836..7841
+ IDENT@7836..7841 "patch"
+ COMMA@7841..7842 ","
+ WHITESPACE@7842..7843 " "
+ ARG@7843..7844
+ EXPR_VAR@7843..7844
+ NAME@7843..7844
+ IDENT@7843..7844 "k"
+ R_PAREN@7844..7845 ")"
+ WHITESPACE@7845..7846 " "
+ THEN_KW@7846..7850 "then"
+ WHITESPACE@7850..7863 "\n "
+ TRUE_EXPR@7863..7879
+ EXPR_INDEX_EXPR@7863..7879
+ LHS_EXPR@7863..7876
+ EXPR_VAR@7863..7876
+ NAME@7863..7876
+ IDENT@7863..7876 "target_object"
+ L_BRACK@7876..7877 "["
+ EXPR_VAR@7877..7878
+ NAME@7877..7878
+ IDENT@7877..7878 "k"
+ R_BRACK@7878..7879 "]"
+ WHITESPACE@7879..7890 "\n "
+ ELSE_KW@7890..7894 "else"
+ WHITESPACE@7894..7895 " "
+ FALSE_EXPR@7895..8070
+ EXPR_IF_THEN_ELSE@7895..8070
+ IF_KW@7895..7897 "if"
+ WHITESPACE@7897..7898 " "
+ EXPR_UNARY@7898..7930
+ NOT@7898..7899 "!"
+ EXPR_APPLY@7899..7930
+ EXPR_INDEX@7899..7912
+ EXPR_VAR@7899..7902
+ NAME@7899..7902
+ IDENT@7899..7902 "std"
+ DOT@7902..7903 "."
+ NAME@7903..7912
+ IDENT@7903..7912 "objectHas"
+ ARGS_DESC@7912..7930
+ L_PAREN@7912..7913 "("
+ ARG@7913..7926
+ EXPR_VAR@7913..7926
+ NAME@7913..7926
+ IDENT@7913..7926 "target_object"
+ COMMA@7926..7927 ","
+ WHITESPACE@7927..7928 " "
+ ARG@7928..7929
+ EXPR_VAR@7928..7929
+ NAME@7928..7929
+ IDENT@7928..7929 "k"
+ R_PAREN@7929..7930 ")"
+ WHITESPACE@7930..7931 " "
+ THEN_KW@7931..7935 "then"
+ WHITESPACE@7935..7948 "\n "
+ TRUE_EXPR@7948..7989
+ EXPR_APPLY@7948..7989
+ EXPR_INDEX@7948..7962
+ EXPR_VAR@7948..7951
+ NAME@7948..7951
+ IDENT@7948..7951 "std"
+ DOT@7951..7952 "."
+ NAME@7952..7962
+ IDENT@7952..7962 "mergePatch"
+ ARGS_DESC@7962..7989
+ L_PAREN@7962..7963 "("
+ ARG@7963..7967
+ EXPR_LITERAL@7963..7967
+ NULL_KW@7963..7967 "null"
+ COMMA@7967..7968 ","
+ WHITESPACE@7968..7969 " "
+ ARG@7969..7977
+ EXPR_INDEX_EXPR@7969..7977
+ LHS_EXPR@7969..7974
+ EXPR_VAR@7969..7974
+ NAME@7969..7974
+ IDENT@7969..7974 "patch"
+ L_BRACK@7974..7975 "["
+ EXPR_VAR@7975..7976
+ NAME@7975..7976
+ IDENT@7975..7976 "k"
+ R_BRACK@7976..7977 "]"
+ R_PAREN@7977..7978 ")"
+ WHITESPACE@7978..7979 " "
+ TAILSTRICT_KW@7979..7989 "tailstrict"
+ WHITESPACE@7989..8000 "\n "
+ ELSE_KW@8000..8004 "else"
+ WHITESPACE@8004..8017 "\n "
+ FALSE_EXPR@8017..8070
+ EXPR_APPLY@8017..8070
+ EXPR_INDEX@8017..8031
+ EXPR_VAR@8017..8020
+ NAME@8017..8020
+ IDENT@8017..8020 "std"
+ DOT@8020..8021 "."
+ NAME@8021..8031
+ IDENT@8021..8031 "mergePatch"
+ ARGS_DESC@8031..8070
+ L_PAREN@8031..8032 "("
+ ARG@8032..8048
+ EXPR_INDEX_EXPR@8032..8048
+ LHS_EXPR@8032..8045
+ EXPR_VAR@8032..8045
+ NAME@8032..8045
+ IDENT@8032..8045 "target_object"
+ L_BRACK@8045..8046 "["
+ EXPR_VAR@8046..8047
+ NAME@8046..8047
+ IDENT@8046..8047 "k"
+ R_BRACK@8047..8048 "]"
+ COMMA@8048..8049 ","
+ WHITESPACE@8049..8050 " "
+ ARG@8050..8058
+ EXPR_INDEX_EXPR@8050..8058
+ LHS_EXPR@8050..8055
+ EXPR_VAR@8050..8055
+ NAME@8050..8055
+ IDENT@8050..8055 "patch"
+ L_BRACK@8055..8056 "["
+ EXPR_VAR@8056..8057
+ NAME@8056..8057
+ IDENT@8056..8057 "k"
+ R_BRACK@8057..8058 "]"
+ R_PAREN@8058..8059 ")"
+ WHITESPACE@8059..8060 " "
+ TAILSTRICT_KW@8060..8070 "tailstrict"
+ WHITESPACE@8070..8079 "\n "
+ FOR_SPEC@8079..8125
+ FOR_KW@8079..8082 "for"
+ WHITESPACE@8082..8083 " "
+ NAME@8083..8084
+ IDENT@8083..8084 "k"
+ WHITESPACE@8084..8085 " "
+ IN_KW@8085..8087 "in"
+ WHITESPACE@8087..8088 " "
+ EXPR_APPLY@8088..8125
+ EXPR_INDEX@8088..8099
+ EXPR_VAR@8088..8091
+ NAME@8088..8091
+ IDENT@8088..8091 "std"
+ DOT@8091..8092 "."
+ NAME@8092..8099
+ IDENT@8092..8099 "setDiff"
+ ARGS_DESC@8099..8125
+ L_PAREN@8099..8100 "("
+ ARG@8100..8111
+ EXPR_VAR@8100..8111
+ NAME@8100..8111
+ IDENT@8100..8111 "both_fields"
+ COMMA@8111..8112 ","
+ WHITESPACE@8112..8113 " "
+ ARG@8113..8124
+ EXPR_VAR@8113..8124
+ NAME@8113..8124
+ IDENT@8113..8124 "null_fields"
+ R_PAREN@8124..8125 ")"
+ WHITESPACE@8125..8132 "\n "
+ R_BRACE@8132..8133 "}"
+ WHITESPACE@8133..8138 "\n "
+ ELSE_KW@8138..8142 "else"
+ WHITESPACE@8142..8149 "\n "
+ FALSE_EXPR@8149..8154
+ EXPR_VAR@8149..8154
+ NAME@8149..8154
+ IDENT@8149..8154 "patch"
+ COMMA@8154..8155 ","
+ WHITESPACE@8155..8159 "\n\n "
+ MEMBER_FIELD_METHOD@8159..8265
+ FIELD_NAME_FIXED@8159..8162
+ NAME@8159..8162
+ IDENT@8159..8162 "get"
+ PARAMS_DESC@8162..8199
+ L_PAREN@8162..8163 "("
+ PARAM@8163..8164
+ DESTRUCT_FULL@8163..8164
+ NAME@8163..8164
+ IDENT@8163..8164 "o"
+ COMMA@8164..8165 ","
+ WHITESPACE@8165..8166 " "
+ PARAM@8166..8167
+ DESTRUCT_FULL@8166..8167
+ NAME@8166..8167
+ IDENT@8166..8167 "f"
+ COMMA@8167..8168 ","
+ WHITESPACE@8168..8169 " "
+ PARAM@8169..8181
+ DESTRUCT_FULL@8169..8176
+ NAME@8169..8176
+ IDENT@8169..8176 "default"
+ ASSIGN@8176..8177 "="
+ EXPR_LITERAL@8177..8181
+ NULL_KW@8177..8181 "null"
+ COMMA@8181..8182 ","
+ WHITESPACE@8182..8183 " "
+ PARAM@8183..8198
+ DESTRUCT_FULL@8183..8193
+ NAME@8183..8193
+ IDENT@8183..8193 "inc_hidden"
+ ASSIGN@8193..8194 "="
+ EXPR_LITERAL@8194..8198
+ TRUE_KW@8194..8198 "true"
+ R_PAREN@8198..8199 ")"
+ COLONCOLON@8199..8201 "::"
+ WHITESPACE@8201..8206 "\n "
+ EXPR_IF_THEN_ELSE@8206..8265
+ IF_KW@8206..8208 "if"
+ WHITESPACE@8208..8209 " "
+ EXPR_APPLY@8209..8242
+ EXPR_INDEX@8209..8224
+ EXPR_VAR@8209..8212
+ NAME@8209..8212
+ IDENT@8209..8212 "std"
+ DOT@8212..8213 "."
+ NAME@8213..8224
+ IDENT@8213..8224 "objectHasEx"
+ ARGS_DESC@8224..8242
+ L_PAREN@8224..8225 "("
+ ARG@8225..8226
+ EXPR_VAR@8225..8226
+ NAME@8225..8226
+ IDENT@8225..8226 "o"
+ COMMA@8226..8227 ","
+ WHITESPACE@8227..8228 " "
+ ARG@8228..8229
+ EXPR_VAR@8228..8229
+ NAME@8228..8229
+ IDENT@8228..8229 "f"
+ COMMA@8229..8230 ","
+ WHITESPACE@8230..8231 " "
+ ARG@8231..8241
+ EXPR_VAR@8231..8241
+ NAME@8231..8241
+ IDENT@8231..8241 "inc_hidden"
+ R_PAREN@8241..8242 ")"
WHITESPACE@8242..8243 " "
- EXPR_APPLY@8243..8262
- EXPR_INDEX@8243..8255
- EXPR_VAR@8243..8246
- NAME@8243..8246
- IDENT@8243..8246 "std"
- DOT@8246..8247 "."
- NAME@8247..8255
- IDENT@8247..8255 "isObject"
- ARGS_DESC@8255..8262
- L_PAREN@8255..8256 "("
- ARG@8256..8261
- EXPR_VAR@8256..8261
- NAME@8256..8261
- IDENT@8256..8261 "patch"
- R_PAREN@8261..8262 ")"
- WHITESPACE@8262..8263 " "
- THEN_KW@8263..8267 "then"
- WHITESPACE@8267..8274 "\n "
- TRUE_EXPR@8274..8975
- EXPR_LOCAL@8274..8975
- LOCAL_KW@8274..8279 "local"
- WHITESPACE@8279..8280 " "
- BIND_DESTRUCT@8280..8347
- DESTRUCT_FULL@8280..8293
- NAME@8280..8293
- IDENT@8280..8293 "target_object"
- WHITESPACE@8293..8294 " "
- ASSIGN@8294..8295 "="
- WHITESPACE@8295..8304 "\n "
- EXPR_IF_THEN_ELSE@8304..8347
- IF_KW@8304..8306 "if"
- WHITESPACE@8306..8307 " "
- EXPR_APPLY@8307..8327
- EXPR_INDEX@8307..8319
- EXPR_VAR@8307..8310
- NAME@8307..8310
- IDENT@8307..8310 "std"
- DOT@8310..8311 "."
- NAME@8311..8319
- IDENT@8311..8319 "isObject"
- ARGS_DESC@8319..8327
- L_PAREN@8319..8320 "("
- ARG@8320..8326
- EXPR_VAR@8320..8326
- NAME@8320..8326
- IDENT@8320..8326 "target"
- R_PAREN@8326..8327 ")"
- WHITESPACE@8327..8328 " "
- THEN_KW@8328..8332 "then"
- WHITESPACE@8332..8333 " "
- TRUE_EXPR@8333..8339
- EXPR_VAR@8333..8339
- NAME@8333..8339
- IDENT@8333..8339 "target"
- WHITESPACE@8339..8340 " "
- ELSE_KW@8340..8344 "else"
- WHITESPACE@8344..8345 " "
- FALSE_EXPR@8345..8347
- EXPR_OBJECT@8345..8347
- OBJ_BODY_MEMBER_LIST@8345..8347
- L_BRACE@8345..8346 "{"
- R_BRACE@8346..8347 "}"
- SEMI@8347..8348 ";"
- WHITESPACE@8348..8356 "\n\n "
- EXPR_LOCAL@8356..8975
- LOCAL_KW@8356..8361 "local"
- WHITESPACE@8361..8362 " "
- BIND_DESTRUCT@8362..8461
- DESTRUCT_FULL@8362..8375
- NAME@8362..8375
- IDENT@8362..8375 "target_fields"
- WHITESPACE@8375..8376 " "
- ASSIGN@8376..8377 "="
- WHITESPACE@8377..8386 "\n "
- EXPR_IF_THEN_ELSE@8386..8461
- IF_KW@8386..8388 "if"
- WHITESPACE@8388..8389 " "
- EXPR_APPLY@8389..8416
- EXPR_INDEX@8389..8401
- EXPR_VAR@8389..8392
- NAME@8389..8392
- IDENT@8389..8392 "std"
- DOT@8392..8393 "."
- NAME@8393..8401
- IDENT@8393..8401 "isObject"
- ARGS_DESC@8401..8416
- L_PAREN@8401..8402 "("
- ARG@8402..8415
- EXPR_VAR@8402..8415
- NAME@8402..8415
- IDENT@8402..8415 "target_object"
- R_PAREN@8415..8416 ")"
- WHITESPACE@8416..8417 " "
- THEN_KW@8417..8421 "then"
- WHITESPACE@8421..8422 " "
- TRUE_EXPR@8422..8453
- EXPR_APPLY@8422..8453
- EXPR_INDEX@8422..8438
- EXPR_VAR@8422..8425
- NAME@8422..8425
- IDENT@8422..8425 "std"
- DOT@8425..8426 "."
- NAME@8426..8438
- IDENT@8426..8438 "objectFields"
- ARGS_DESC@8438..8453
- L_PAREN@8438..8439 "("
- ARG@8439..8452
- EXPR_VAR@8439..8452
- NAME@8439..8452
- IDENT@8439..8452 "target_object"
- R_PAREN@8452..8453 ")"
- WHITESPACE@8453..8454 " "
- ELSE_KW@8454..8458 "else"
- WHITESPACE@8458..8459 " "
- FALSE_EXPR@8459..8461
- EXPR_ARRAY@8459..8461
- L_BRACK@8459..8460 "["
- R_BRACK@8460..8461 "]"
- SEMI@8461..8462 ";"
- WHITESPACE@8462..8470 "\n\n "
- EXPR_LOCAL@8470..8975
- LOCAL_KW@8470..8475 "local"
- WHITESPACE@8475..8476 " "
- BIND_DESTRUCT@8476..8546
- DESTRUCT_FULL@8476..8487
- NAME@8476..8487
- IDENT@8476..8487 "null_fields"
- WHITESPACE@8487..8488 " "
- ASSIGN@8488..8489 "="
- WHITESPACE@8489..8490 " "
- EXPR_ARRAY_COMP@8490..8546
- L_BRACK@8490..8491 "["
- EXPR_VAR@8491..8492
- NAME@8491..8492
- IDENT@8491..8492 "k"
- WHITESPACE@8492..8493 " "
- FOR_SPEC@8493..8525
- FOR_KW@8493..8496 "for"
- WHITESPACE@8496..8497 " "
- NAME@8497..8498
- IDENT@8497..8498 "k"
- WHITESPACE@8498..8499 " "
- IN_KW@8499..8501 "in"
- WHITESPACE@8501..8502 " "
- EXPR_APPLY@8502..8525
- EXPR_INDEX@8502..8518
- EXPR_VAR@8502..8505
- NAME@8502..8505
- IDENT@8502..8505 "std"
- DOT@8505..8506 "."
- NAME@8506..8518
- IDENT@8506..8518 "objectFields"
- ARGS_DESC@8518..8525
- L_PAREN@8518..8519 "("
- ARG@8519..8524
- EXPR_VAR@8519..8524
- NAME@8519..8524
- IDENT@8519..8524 "patch"
- R_PAREN@8524..8525 ")"
- WHITESPACE@8525..8526 " "
- IF_SPEC@8526..8545
- IF_KW@8526..8528 "if"
- WHITESPACE@8528..8529 " "
- EXPR_BINARY@8529..8545
- LHS_EXPR@8529..8537
- EXPR_INDEX_EXPR@8529..8537
- LHS_EXPR@8529..8534
- EXPR_VAR@8529..8534
- NAME@8529..8534
- IDENT@8529..8534 "patch"
- L_BRACK@8534..8535 "["
- EXPR_VAR@8535..8536
- NAME@8535..8536
- IDENT@8535..8536 "k"
- R_BRACK@8536..8537 "]"
- WHITESPACE@8537..8538 " "
- EQ@8538..8540 "=="
- WHITESPACE@8540..8541 " "
- EXPR_LITERAL@8541..8545
- NULL_KW@8541..8545 "null"
- R_BRACK@8545..8546 "]"
- SEMI@8546..8547 ";"
- WHITESPACE@8547..8554 "\n "
- EXPR_LOCAL@8554..8975
- LOCAL_KW@8554..8559 "local"
- WHITESPACE@8559..8560 " "
- BIND_DESTRUCT@8560..8626
- DESTRUCT_FULL@8560..8571
- NAME@8560..8571
- IDENT@8560..8571 "both_fields"
- WHITESPACE@8571..8572 " "
- ASSIGN@8572..8573 "="
- WHITESPACE@8573..8574 " "
- EXPR_APPLY@8574..8626
- EXPR_INDEX@8574..8586
- EXPR_VAR@8574..8577
- NAME@8574..8577
- IDENT@8574..8577 "std"
- DOT@8577..8578 "."
- NAME@8578..8586
- IDENT@8578..8586 "setUnion"
- ARGS_DESC@8586..8626
- L_PAREN@8586..8587 "("
- ARG@8587..8600
- EXPR_VAR@8587..8600
- NAME@8587..8600
- IDENT@8587..8600 "target_fields"
- COMMA@8600..8601 ","
- WHITESPACE@8601..8602 " "
- ARG@8602..8625
- EXPR_APPLY@8602..8625
- EXPR_INDEX@8602..8618
- EXPR_VAR@8602..8605
- NAME@8602..8605
- IDENT@8602..8605 "std"
- DOT@8605..8606 "."
- NAME@8606..8618
- IDENT@8606..8618 "objectFields"
- ARGS_DESC@8618..8625
- L_PAREN@8618..8619 "("
- ARG@8619..8624
- EXPR_VAR@8619..8624
- NAME@8619..8624
- IDENT@8619..8624 "patch"
- R_PAREN@8624..8625 ")"
- R_PAREN@8625..8626 ")"
- SEMI@8626..8627 ";"
- WHITESPACE@8627..8635 "\n\n "
- EXPR_OBJECT@8635..8975
- OBJ_BODY_COMP@8635..8975
- L_BRACE@8635..8636 "{"
- WHITESPACE@8636..8645 "\n "
- MEMBER_FIELD_NORMAL@8645..8912
- FIELD_NAME_DYNAMIC@8645..8648
- L_BRACK@8645..8646 "["
- EXPR_VAR@8646..8647
- NAME@8646..8647
- IDENT@8646..8647 "k"
- R_BRACK@8647..8648 "]"
- COLON@8648..8649 ":"
- WHITESPACE@8649..8660 "\n "
- EXPR_IF_THEN_ELSE@8660..8912
- IF_KW@8660..8662 "if"
- WHITESPACE@8662..8663 " "
- EXPR_UNARY@8663..8687
- NOT@8663..8664 "!"
- EXPR_APPLY@8664..8687
- EXPR_INDEX@8664..8677
- EXPR_VAR@8664..8667
- NAME@8664..8667
- IDENT@8664..8667 "std"
- DOT@8667..8668 "."
- NAME@8668..8677
- IDENT@8668..8677 "objectHas"
- ARGS_DESC@8677..8687
- L_PAREN@8677..8678 "("
- ARG@8678..8683
- EXPR_VAR@8678..8683
- NAME@8678..8683
- IDENT@8678..8683 "patch"
- COMMA@8683..8684 ","
- WHITESPACE@8684..8685 " "
- ARG@8685..8686
- EXPR_VAR@8685..8686
- NAME@8685..8686
- IDENT@8685..8686 "k"
- R_PAREN@8686..8687 ")"
- WHITESPACE@8687..8688 " "
- THEN_KW@8688..8692 "then"
- WHITESPACE@8692..8705 "\n "
- TRUE_EXPR@8705..8721
- EXPR_INDEX_EXPR@8705..8721
- LHS_EXPR@8705..8718
- EXPR_VAR@8705..8718
- NAME@8705..8718
- IDENT@8705..8718 "target_object"
- L_BRACK@8718..8719 "["
- EXPR_VAR@8719..8720
- NAME@8719..8720
- IDENT@8719..8720 "k"
- R_BRACK@8720..8721 "]"
- WHITESPACE@8721..8732 "\n "
- ELSE_KW@8732..8736 "else"
- WHITESPACE@8736..8737 " "
- FALSE_EXPR@8737..8912
- EXPR_IF_THEN_ELSE@8737..8912
- IF_KW@8737..8739 "if"
- WHITESPACE@8739..8740 " "
- EXPR_UNARY@8740..8772
- NOT@8740..8741 "!"
- EXPR_APPLY@8741..8772
- EXPR_INDEX@8741..8754
- EXPR_VAR@8741..8744
- NAME@8741..8744
- IDENT@8741..8744 "std"
- DOT@8744..8745 "."
- NAME@8745..8754
- IDENT@8745..8754 "objectHas"
- ARGS_DESC@8754..8772
- L_PAREN@8754..8755 "("
- ARG@8755..8768
- EXPR_VAR@8755..8768
- NAME@8755..8768
- IDENT@8755..8768 "target_object"
- COMMA@8768..8769 ","
- WHITESPACE@8769..8770 " "
- ARG@8770..8771
- EXPR_VAR@8770..8771
- NAME@8770..8771
- IDENT@8770..8771 "k"
- R_PAREN@8771..8772 ")"
- WHITESPACE@8772..8773 " "
- THEN_KW@8773..8777 "then"
- WHITESPACE@8777..8790 "\n "
- TRUE_EXPR@8790..8831
- EXPR_APPLY@8790..8831
- EXPR_INDEX@8790..8804
- EXPR_VAR@8790..8793
- NAME@8790..8793
- IDENT@8790..8793 "std"
- DOT@8793..8794 "."
- NAME@8794..8804
- IDENT@8794..8804 "mergePatch"
- ARGS_DESC@8804..8831
- L_PAREN@8804..8805 "("
- ARG@8805..8809
- EXPR_LITERAL@8805..8809
- NULL_KW@8805..8809 "null"
- COMMA@8809..8810 ","
- WHITESPACE@8810..8811 " "
- ARG@8811..8819
- EXPR_INDEX_EXPR@8811..8819
- LHS_EXPR@8811..8816
- EXPR_VAR@8811..8816
- NAME@8811..8816
- IDENT@8811..8816 "patch"
- L_BRACK@8816..8817 "["
- EXPR_VAR@8817..8818
- NAME@8817..8818
- IDENT@8817..8818 "k"
- R_BRACK@8818..8819 "]"
- R_PAREN@8819..8820 ")"
- WHITESPACE@8820..8821 " "
- TAILSTRICT_KW@8821..8831 "tailstrict"
- WHITESPACE@8831..8842 "\n "
- ELSE_KW@8842..8846 "else"
- WHITESPACE@8846..8859 "\n "
- FALSE_EXPR@8859..8912
- EXPR_APPLY@8859..8912
- EXPR_INDEX@8859..8873
- EXPR_VAR@8859..8862
- NAME@8859..8862
- IDENT@8859..8862 "std"
- DOT@8862..8863 "."
- NAME@8863..8873
- IDENT@8863..8873 "mergePatch"
- ARGS_DESC@8873..8912
- L_PAREN@8873..8874 "("
- ARG@8874..8890
- EXPR_INDEX_EXPR@8874..8890
- LHS_EXPR@8874..8887
- EXPR_VAR@8874..8887
- NAME@8874..8887
- IDENT@8874..8887 "target_object"
- L_BRACK@8887..8888 "["
- EXPR_VAR@8888..8889
- NAME@8888..8889
- IDENT@8888..8889 "k"
- R_BRACK@8889..8890 "]"
- COMMA@8890..8891 ","
- WHITESPACE@8891..8892 " "
- ARG@8892..8900
- EXPR_INDEX_EXPR@8892..8900
- LHS_EXPR@8892..8897
- EXPR_VAR@8892..8897
- NAME@8892..8897
- IDENT@8892..8897 "patch"
- L_BRACK@8897..8898 "["
- EXPR_VAR@8898..8899
- NAME@8898..8899
- IDENT@8898..8899 "k"
- R_BRACK@8899..8900 "]"
- R_PAREN@8900..8901 ")"
- WHITESPACE@8901..8902 " "
- TAILSTRICT_KW@8902..8912 "tailstrict"
- WHITESPACE@8912..8921 "\n "
- FOR_SPEC@8921..8967
- FOR_KW@8921..8924 "for"
- WHITESPACE@8924..8925 " "
- NAME@8925..8926
- IDENT@8925..8926 "k"
- WHITESPACE@8926..8927 " "
- IN_KW@8927..8929 "in"
- WHITESPACE@8929..8930 " "
- EXPR_APPLY@8930..8967
- EXPR_INDEX@8930..8941
- EXPR_VAR@8930..8933
- NAME@8930..8933
- IDENT@8930..8933 "std"
- DOT@8933..8934 "."
- NAME@8934..8941
- IDENT@8934..8941 "setDiff"
- ARGS_DESC@8941..8967
- L_PAREN@8941..8942 "("
- ARG@8942..8953
- EXPR_VAR@8942..8953
- NAME@8942..8953
- IDENT@8942..8953 "both_fields"
- COMMA@8953..8954 ","
- WHITESPACE@8954..8955 " "
- ARG@8955..8966
- EXPR_VAR@8955..8966
- NAME@8955..8966
- IDENT@8955..8966 "null_fields"
- R_PAREN@8966..8967 ")"
- WHITESPACE@8967..8974 "\n "
- R_BRACE@8974..8975 "}"
- WHITESPACE@8975..8980 "\n "
- ELSE_KW@8980..8984 "else"
- WHITESPACE@8984..8991 "\n "
- FALSE_EXPR@8991..8996
- EXPR_VAR@8991..8996
- NAME@8991..8996
- IDENT@8991..8996 "patch"
- COMMA@8996..8997 ","
- WHITESPACE@8997..9001 "\n\n "
- MEMBER_FIELD_METHOD@9001..9107
- FIELD_NAME_FIXED@9001..9004
- NAME@9001..9004
- IDENT@9001..9004 "get"
- PARAMS_DESC@9004..9041
- L_PAREN@9004..9005 "("
- PARAM@9005..9006
- DESTRUCT_FULL@9005..9006
- NAME@9005..9006
- IDENT@9005..9006 "o"
- COMMA@9006..9007 ","
- WHITESPACE@9007..9008 " "
- PARAM@9008..9009
- DESTRUCT_FULL@9008..9009
- NAME@9008..9009
- IDENT@9008..9009 "f"
- COMMA@9009..9010 ","
- WHITESPACE@9010..9011 " "
- PARAM@9011..9023
- DESTRUCT_FULL@9011..9018
- NAME@9011..9018
- IDENT@9011..9018 "default"
- ASSIGN@9018..9019 "="
- EXPR_LITERAL@9019..9023
- NULL_KW@9019..9023 "null"
- COMMA@9023..9024 ","
- WHITESPACE@9024..9025 " "
- PARAM@9025..9040
- DESTRUCT_FULL@9025..9035
- NAME@9025..9035
- IDENT@9025..9035 "inc_hidden"
- ASSIGN@9035..9036 "="
- EXPR_LITERAL@9036..9040
- TRUE_KW@9036..9040 "true"
- R_PAREN@9040..9041 ")"
- COLONCOLON@9041..9043 "::"
- WHITESPACE@9043..9048 "\n "
- EXPR_IF_THEN_ELSE@9048..9107
- IF_KW@9048..9050 "if"
- WHITESPACE@9050..9051 " "
- EXPR_APPLY@9051..9084
- EXPR_INDEX@9051..9066
- EXPR_VAR@9051..9054
- NAME@9051..9054
- IDENT@9051..9054 "std"
- DOT@9054..9055 "."
- NAME@9055..9066
- IDENT@9055..9066 "objectHasEx"
- ARGS_DESC@9066..9084
- L_PAREN@9066..9067 "("
- ARG@9067..9068
- EXPR_VAR@9067..9068
- NAME@9067..9068
- IDENT@9067..9068 "o"
- COMMA@9068..9069 ","
- WHITESPACE@9069..9070 " "
- ARG@9070..9071
- EXPR_VAR@9070..9071
- NAME@9070..9071
- IDENT@9070..9071 "f"
- COMMA@9071..9072 ","
- WHITESPACE@9072..9073 " "
- ARG@9073..9083
- EXPR_VAR@9073..9083
- NAME@9073..9083
- IDENT@9073..9083 "inc_hidden"
- R_PAREN@9083..9084 ")"
- WHITESPACE@9084..9085 " "
- THEN_KW@9085..9089 "then"
- WHITESPACE@9089..9090 " "
- TRUE_EXPR@9090..9094
- EXPR_INDEX_EXPR@9090..9094
- LHS_EXPR@9090..9091
- EXPR_VAR@9090..9091
- NAME@9090..9091
- IDENT@9090..9091 "o"
- L_BRACK@9091..9092 "["
- EXPR_VAR@9092..9093
- NAME@9092..9093
- IDENT@9092..9093 "f"
- R_BRACK@9093..9094 "]"
- WHITESPACE@9094..9095 " "
- ELSE_KW@9095..9099 "else"
- WHITESPACE@9099..9100 " "
- FALSE_EXPR@9100..9107
- EXPR_VAR@9100..9107
- NAME@9100..9107
- IDENT@9100..9107 "default"
- COMMA@9107..9108 ","
- WHITESPACE@9108..9112 "\n\n "
- MEMBER_FIELD_METHOD@9112..9162
- FIELD_NAME_FIXED@9112..9124
- NAME@9112..9124
- IDENT@9112..9124 "objectFields"
- PARAMS_DESC@9124..9127
- L_PAREN@9124..9125 "("
- PARAM@9125..9126
- DESTRUCT_FULL@9125..9126
- NAME@9125..9126
- IDENT@9125..9126 "o"
- R_PAREN@9126..9127 ")"
- COLONCOLON@9127..9129 "::"
- WHITESPACE@9129..9134 "\n "
- EXPR_APPLY@9134..9162
- EXPR_INDEX@9134..9152
- EXPR_VAR@9134..9137
- NAME@9134..9137
- IDENT@9134..9137 "std"
- DOT@9137..9138 "."
- NAME@9138..9152
- IDENT@9138..9152 "objectFieldsEx"
- ARGS_DESC@9152..9162
- L_PAREN@9152..9153 "("
- ARG@9153..9154
- EXPR_VAR@9153..9154
- NAME@9153..9154
- IDENT@9153..9154 "o"
- COMMA@9154..9155 ","
- WHITESPACE@9155..9156 " "
- ARG@9156..9161
- EXPR_LITERAL@9156..9161
- FALSE_KW@9156..9161 "false"
- R_PAREN@9161..9162 ")"
- COMMA@9162..9163 ","
- WHITESPACE@9163..9167 "\n\n "
- MEMBER_FIELD_METHOD@9167..9219
- FIELD_NAME_FIXED@9167..9182
- NAME@9167..9182
- IDENT@9167..9182 "objectFieldsAll"
- PARAMS_DESC@9182..9185
- L_PAREN@9182..9183 "("
- PARAM@9183..9184
- DESTRUCT_FULL@9183..9184
- NAME@9183..9184
- IDENT@9183..9184 "o"
- R_PAREN@9184..9185 ")"
- COLONCOLON@9185..9187 "::"
- WHITESPACE@9187..9192 "\n "
- EXPR_APPLY@9192..9219
- EXPR_INDEX@9192..9210
- EXPR_VAR@9192..9195
- NAME@9192..9195
- IDENT@9192..9195 "std"
- DOT@9195..9196 "."
- NAME@9196..9210
- IDENT@9196..9210 "objectFieldsEx"
- ARGS_DESC@9210..9219
- L_PAREN@9210..9211 "("
- ARG@9211..9212
- EXPR_VAR@9211..9212
- NAME@9211..9212
- IDENT@9211..9212 "o"
- COMMA@9212..9213 ","
- WHITESPACE@9213..9214 " "
- ARG@9214..9218
- EXPR_LITERAL@9214..9218
- TRUE_KW@9214..9218 "true"
- R_PAREN@9218..9219 ")"
- COMMA@9219..9220 ","
- WHITESPACE@9220..9224 "\n\n "
- MEMBER_FIELD_METHOD@9224..9274
- FIELD_NAME_FIXED@9224..9233
- NAME@9224..9233
- IDENT@9224..9233 "objectHas"
- PARAMS_DESC@9233..9239
- L_PAREN@9233..9234 "("
- PARAM@9234..9235
- DESTRUCT_FULL@9234..9235
- NAME@9234..9235
- IDENT@9234..9235 "o"
- COMMA@9235..9236 ","
- WHITESPACE@9236..9237 " "
- PARAM@9237..9238
- DESTRUCT_FULL@9237..9238
- NAME@9237..9238
- IDENT@9237..9238 "f"
- R_PAREN@9238..9239 ")"
- COLONCOLON@9239..9241 "::"
- WHITESPACE@9241..9246 "\n "
- EXPR_APPLY@9246..9274
- EXPR_INDEX@9246..9261
- EXPR_VAR@9246..9249
- NAME@9246..9249
- IDENT@9246..9249 "std"
- DOT@9249..9250 "."
- NAME@9250..9261
- IDENT@9250..9261 "objectHasEx"
- ARGS_DESC@9261..9274
- L_PAREN@9261..9262 "("
- ARG@9262..9263
- EXPR_VAR@9262..9263
- NAME@9262..9263
- IDENT@9262..9263 "o"
- COMMA@9263..9264 ","
- WHITESPACE@9264..9265 " "
- ARG@9265..9266
- EXPR_VAR@9265..9266
- NAME@9265..9266
- IDENT@9265..9266 "f"
- COMMA@9266..9267 ","
- WHITESPACE@9267..9268 " "
- ARG@9268..9273
- EXPR_LITERAL@9268..9273
- FALSE_KW@9268..9273 "false"
- R_PAREN@9273..9274 ")"
- COMMA@9274..9275 ","
- WHITESPACE@9275..9279 "\n\n "
- MEMBER_FIELD_METHOD@9279..9331
- FIELD_NAME_FIXED@9279..9291
- NAME@9279..9291
- IDENT@9279..9291 "objectHasAll"
- PARAMS_DESC@9291..9297
- L_PAREN@9291..9292 "("
- PARAM@9292..9293
- DESTRUCT_FULL@9292..9293
- NAME@9292..9293
- IDENT@9292..9293 "o"
- COMMA@9293..9294 ","
- WHITESPACE@9294..9295 " "
- PARAM@9295..9296
- DESTRUCT_FULL@9295..9296
- NAME@9295..9296
- IDENT@9295..9296 "f"
- R_PAREN@9296..9297 ")"
- COLONCOLON@9297..9299 "::"
- WHITESPACE@9299..9304 "\n "
- EXPR_APPLY@9304..9331
- EXPR_INDEX@9304..9319
- EXPR_VAR@9304..9307
- NAME@9304..9307
- IDENT@9304..9307 "std"
- DOT@9307..9308 "."
- NAME@9308..9319
- IDENT@9308..9319 "objectHasEx"
- ARGS_DESC@9319..9331
- L_PAREN@9319..9320 "("
- ARG@9320..9321
- EXPR_VAR@9320..9321
- NAME@9320..9321
- IDENT@9320..9321 "o"
- COMMA@9321..9322 ","
- WHITESPACE@9322..9323 " "
- ARG@9323..9324
- EXPR_VAR@9323..9324
- NAME@9323..9324
- IDENT@9323..9324 "f"
- COMMA@9324..9325 ","
- WHITESPACE@9325..9326 " "
- ARG@9326..9330
- EXPR_LITERAL@9326..9330
- TRUE_KW@9326..9330 "true"
- R_PAREN@9330..9331 ")"
- COMMA@9331..9332 ","
- WHITESPACE@9332..9336 "\n\n "
- MEMBER_FIELD_METHOD@9336..9393
- FIELD_NAME_FIXED@9336..9348
- NAME@9336..9348
- IDENT@9336..9348 "objectValues"
- PARAMS_DESC@9348..9351
- L_PAREN@9348..9349 "("
- PARAM@9349..9350
- DESTRUCT_FULL@9349..9350
- NAME@9349..9350
- IDENT@9349..9350 "o"
- R_PAREN@9350..9351 ")"
- COLONCOLON@9351..9353 "::"
- WHITESPACE@9353..9358 "\n "
- EXPR_ARRAY_COMP@9358..9393
- L_BRACK@9358..9359 "["
- EXPR_INDEX_EXPR@9359..9363
- LHS_EXPR@9359..9360
- EXPR_VAR@9359..9360
- NAME@9359..9360
- IDENT@9359..9360 "o"
- L_BRACK@9360..9361 "["
- EXPR_VAR@9361..9362
- NAME@9361..9362
- IDENT@9361..9362 "k"
- R_BRACK@9362..9363 "]"
- WHITESPACE@9363..9364 " "
- FOR_SPEC@9364..9392
- FOR_KW@9364..9367 "for"
- WHITESPACE@9367..9368 " "
- NAME@9368..9369
- IDENT@9368..9369 "k"
- WHITESPACE@9369..9370 " "
- IN_KW@9370..9372 "in"
- WHITESPACE@9372..9373 " "
- EXPR_APPLY@9373..9392
- EXPR_INDEX@9373..9389
- EXPR_VAR@9373..9376
- NAME@9373..9376
- IDENT@9373..9376 "std"
- DOT@9376..9377 "."
- NAME@9377..9389
- IDENT@9377..9389 "objectFields"
- ARGS_DESC@9389..9392
- L_PAREN@9389..9390 "("
- ARG@9390..9391
- EXPR_VAR@9390..9391
- NAME@9390..9391
- IDENT@9390..9391 "o"
- R_PAREN@9391..9392 ")"
- R_BRACK@9392..9393 "]"
- COMMA@9393..9394 ","
- WHITESPACE@9394..9398 "\n\n "
- MEMBER_FIELD_METHOD@9398..9461
- FIELD_NAME_FIXED@9398..9413
- NAME@9398..9413
- IDENT@9398..9413 "objectValuesAll"
- PARAMS_DESC@9413..9416
- L_PAREN@9413..9414 "("
- PARAM@9414..9415
- DESTRUCT_FULL@9414..9415
- NAME@9414..9415
- IDENT@9414..9415 "o"
- R_PAREN@9415..9416 ")"
- COLONCOLON@9416..9418 "::"
- WHITESPACE@9418..9423 "\n "
- EXPR_ARRAY_COMP@9423..9461
- L_BRACK@9423..9424 "["
- EXPR_INDEX_EXPR@9424..9428
- LHS_EXPR@9424..9425
- EXPR_VAR@9424..9425
- NAME@9424..9425
- IDENT@9424..9425 "o"
- L_BRACK@9425..9426 "["
- EXPR_VAR@9426..9427
- NAME@9426..9427
- IDENT@9426..9427 "k"
- R_BRACK@9427..9428 "]"
- WHITESPACE@9428..9429 " "
- FOR_SPEC@9429..9460
- FOR_KW@9429..9432 "for"
- WHITESPACE@9432..9433 " "
- NAME@9433..9434
- IDENT@9433..9434 "k"
- WHITESPACE@9434..9435 " "
- IN_KW@9435..9437 "in"
- WHITESPACE@9437..9438 " "
- EXPR_APPLY@9438..9460
- EXPR_INDEX@9438..9457
- EXPR_VAR@9438..9441
- NAME@9438..9441
- IDENT@9438..9441 "std"
- DOT@9441..9442 "."
- NAME@9442..9457
- IDENT@9442..9457 "objectFieldsAll"
- ARGS_DESC@9457..9460
- L_PAREN@9457..9458 "("
- ARG@9458..9459
- EXPR_VAR@9458..9459
- NAME@9458..9459
- IDENT@9458..9459 "o"
- R_PAREN@9459..9460 ")"
- R_BRACK@9460..9461 "]"
- COMMA@9461..9462 ","
- WHITESPACE@9462..9466 "\n\n "
- MEMBER_FIELD_METHOD@9466..9600
- FIELD_NAME_FIXED@9466..9477
- NAME@9466..9477
- IDENT@9466..9477 "resolvePath"
- PARAMS_DESC@9477..9483
- L_PAREN@9477..9478 "("
- PARAM@9478..9479
- DESTRUCT_FULL@9478..9479
- NAME@9478..9479
- IDENT@9478..9479 "f"
- COMMA@9479..9480 ","
- WHITESPACE@9480..9481 " "
- PARAM@9481..9482
- DESTRUCT_FULL@9481..9482
- NAME@9481..9482
- IDENT@9481..9482 "r"
- R_PAREN@9482..9483 ")"
- COLONCOLON@9483..9485 "::"
- WHITESPACE@9485..9490 "\n "
- EXPR_LOCAL@9490..9600
- LOCAL_KW@9490..9495 "local"
- WHITESPACE@9495..9496 " "
- BIND_DESTRUCT@9496..9519
- DESTRUCT_FULL@9496..9499
- NAME@9496..9499
- IDENT@9496..9499 "arr"
- WHITESPACE@9499..9500 " "
- ASSIGN@9500..9501 "="
- WHITESPACE@9501..9502 " "
- EXPR_APPLY@9502..9519
- EXPR_INDEX@9502..9511
- EXPR_VAR@9502..9505
- NAME@9502..9505
- IDENT@9502..9505 "std"
- DOT@9505..9506 "."
- NAME@9506..9511
- IDENT@9506..9511 "split"
- ARGS_DESC@9511..9519
- L_PAREN@9511..9512 "("
- ARG@9512..9513
- EXPR_VAR@9512..9513
- NAME@9512..9513
- IDENT@9512..9513 "f"
- COMMA@9513..9514 ","
+ THEN_KW@8243..8247 "then"
+ WHITESPACE@8247..8248 " "
+ TRUE_EXPR@8248..8252
+ EXPR_INDEX_EXPR@8248..8252
+ LHS_EXPR@8248..8249
+ EXPR_VAR@8248..8249
+ NAME@8248..8249
+ IDENT@8248..8249 "o"
+ L_BRACK@8249..8250 "["
+ EXPR_VAR@8250..8251
+ NAME@8250..8251
+ IDENT@8250..8251 "f"
+ R_BRACK@8251..8252 "]"
+ WHITESPACE@8252..8253 " "
+ ELSE_KW@8253..8257 "else"
+ WHITESPACE@8257..8258 " "
+ FALSE_EXPR@8258..8265
+ EXPR_VAR@8258..8265
+ NAME@8258..8265
+ IDENT@8258..8265 "default"
+ COMMA@8265..8266 ","
+ WHITESPACE@8266..8270 "\n\n "
+ MEMBER_FIELD_METHOD@8270..8320
+ FIELD_NAME_FIXED@8270..8282
+ NAME@8270..8282
+ IDENT@8270..8282 "objectFields"
+ PARAMS_DESC@8282..8285
+ L_PAREN@8282..8283 "("
+ PARAM@8283..8284
+ DESTRUCT_FULL@8283..8284
+ NAME@8283..8284
+ IDENT@8283..8284 "o"
+ R_PAREN@8284..8285 ")"
+ COLONCOLON@8285..8287 "::"
+ WHITESPACE@8287..8292 "\n "
+ EXPR_APPLY@8292..8320
+ EXPR_INDEX@8292..8310
+ EXPR_VAR@8292..8295
+ NAME@8292..8295
+ IDENT@8292..8295 "std"
+ DOT@8295..8296 "."
+ NAME@8296..8310
+ IDENT@8296..8310 "objectFieldsEx"
+ ARGS_DESC@8310..8320
+ L_PAREN@8310..8311 "("
+ ARG@8311..8312
+ EXPR_VAR@8311..8312
+ NAME@8311..8312
+ IDENT@8311..8312 "o"
+ COMMA@8312..8313 ","
+ WHITESPACE@8313..8314 " "
+ ARG@8314..8319
+ EXPR_LITERAL@8314..8319
+ FALSE_KW@8314..8319 "false"
+ R_PAREN@8319..8320 ")"
+ COMMA@8320..8321 ","
+ WHITESPACE@8321..8325 "\n\n "
+ MEMBER_FIELD_METHOD@8325..8377
+ FIELD_NAME_FIXED@8325..8340
+ NAME@8325..8340
+ IDENT@8325..8340 "objectFieldsAll"
+ PARAMS_DESC@8340..8343
+ L_PAREN@8340..8341 "("
+ PARAM@8341..8342
+ DESTRUCT_FULL@8341..8342
+ NAME@8341..8342
+ IDENT@8341..8342 "o"
+ R_PAREN@8342..8343 ")"
+ COLONCOLON@8343..8345 "::"
+ WHITESPACE@8345..8350 "\n "
+ EXPR_APPLY@8350..8377
+ EXPR_INDEX@8350..8368
+ EXPR_VAR@8350..8353
+ NAME@8350..8353
+ IDENT@8350..8353 "std"
+ DOT@8353..8354 "."
+ NAME@8354..8368
+ IDENT@8354..8368 "objectFieldsEx"
+ ARGS_DESC@8368..8377
+ L_PAREN@8368..8369 "("
+ ARG@8369..8370
+ EXPR_VAR@8369..8370
+ NAME@8369..8370
+ IDENT@8369..8370 "o"
+ COMMA@8370..8371 ","
+ WHITESPACE@8371..8372 " "
+ ARG@8372..8376
+ EXPR_LITERAL@8372..8376
+ TRUE_KW@8372..8376 "true"
+ R_PAREN@8376..8377 ")"
+ COMMA@8377..8378 ","
+ WHITESPACE@8378..8382 "\n\n "
+ MEMBER_FIELD_METHOD@8382..8432
+ FIELD_NAME_FIXED@8382..8391
+ NAME@8382..8391
+ IDENT@8382..8391 "objectHas"
+ PARAMS_DESC@8391..8397
+ L_PAREN@8391..8392 "("
+ PARAM@8392..8393
+ DESTRUCT_FULL@8392..8393
+ NAME@8392..8393
+ IDENT@8392..8393 "o"
+ COMMA@8393..8394 ","
+ WHITESPACE@8394..8395 " "
+ PARAM@8395..8396
+ DESTRUCT_FULL@8395..8396
+ NAME@8395..8396
+ IDENT@8395..8396 "f"
+ R_PAREN@8396..8397 ")"
+ COLONCOLON@8397..8399 "::"
+ WHITESPACE@8399..8404 "\n "
+ EXPR_APPLY@8404..8432
+ EXPR_INDEX@8404..8419
+ EXPR_VAR@8404..8407
+ NAME@8404..8407
+ IDENT@8404..8407 "std"
+ DOT@8407..8408 "."
+ NAME@8408..8419
+ IDENT@8408..8419 "objectHasEx"
+ ARGS_DESC@8419..8432
+ L_PAREN@8419..8420 "("
+ ARG@8420..8421
+ EXPR_VAR@8420..8421
+ NAME@8420..8421
+ IDENT@8420..8421 "o"
+ COMMA@8421..8422 ","
+ WHITESPACE@8422..8423 " "
+ ARG@8423..8424
+ EXPR_VAR@8423..8424
+ NAME@8423..8424
+ IDENT@8423..8424 "f"
+ COMMA@8424..8425 ","
+ WHITESPACE@8425..8426 " "
+ ARG@8426..8431
+ EXPR_LITERAL@8426..8431
+ FALSE_KW@8426..8431 "false"
+ R_PAREN@8431..8432 ")"
+ COMMA@8432..8433 ","
+ WHITESPACE@8433..8437 "\n\n "
+ MEMBER_FIELD_METHOD@8437..8489
+ FIELD_NAME_FIXED@8437..8449
+ NAME@8437..8449
+ IDENT@8437..8449 "objectHasAll"
+ PARAMS_DESC@8449..8455
+ L_PAREN@8449..8450 "("
+ PARAM@8450..8451
+ DESTRUCT_FULL@8450..8451
+ NAME@8450..8451
+ IDENT@8450..8451 "o"
+ COMMA@8451..8452 ","
+ WHITESPACE@8452..8453 " "
+ PARAM@8453..8454
+ DESTRUCT_FULL@8453..8454
+ NAME@8453..8454
+ IDENT@8453..8454 "f"
+ R_PAREN@8454..8455 ")"
+ COLONCOLON@8455..8457 "::"
+ WHITESPACE@8457..8462 "\n "
+ EXPR_APPLY@8462..8489
+ EXPR_INDEX@8462..8477
+ EXPR_VAR@8462..8465
+ NAME@8462..8465
+ IDENT@8462..8465 "std"
+ DOT@8465..8466 "."
+ NAME@8466..8477
+ IDENT@8466..8477 "objectHasEx"
+ ARGS_DESC@8477..8489
+ L_PAREN@8477..8478 "("
+ ARG@8478..8479
+ EXPR_VAR@8478..8479
+ NAME@8478..8479
+ IDENT@8478..8479 "o"
+ COMMA@8479..8480 ","
+ WHITESPACE@8480..8481 " "
+ ARG@8481..8482
+ EXPR_VAR@8481..8482
+ NAME@8481..8482
+ IDENT@8481..8482 "f"
+ COMMA@8482..8483 ","
+ WHITESPACE@8483..8484 " "
+ ARG@8484..8488
+ EXPR_LITERAL@8484..8488
+ TRUE_KW@8484..8488 "true"
+ R_PAREN@8488..8489 ")"
+ COMMA@8489..8490 ","
+ WHITESPACE@8490..8494 "\n\n "
+ MEMBER_FIELD_METHOD@8494..8551
+ FIELD_NAME_FIXED@8494..8506
+ NAME@8494..8506
+ IDENT@8494..8506 "objectValues"
+ PARAMS_DESC@8506..8509
+ L_PAREN@8506..8507 "("
+ PARAM@8507..8508
+ DESTRUCT_FULL@8507..8508
+ NAME@8507..8508
+ IDENT@8507..8508 "o"
+ R_PAREN@8508..8509 ")"
+ COLONCOLON@8509..8511 "::"
+ WHITESPACE@8511..8516 "\n "
+ EXPR_ARRAY_COMP@8516..8551
+ L_BRACK@8516..8517 "["
+ EXPR_INDEX_EXPR@8517..8521
+ LHS_EXPR@8517..8518
+ EXPR_VAR@8517..8518
+ NAME@8517..8518
+ IDENT@8517..8518 "o"
+ L_BRACK@8518..8519 "["
+ EXPR_VAR@8519..8520
+ NAME@8519..8520
+ IDENT@8519..8520 "k"
+ R_BRACK@8520..8521 "]"
+ WHITESPACE@8521..8522 " "
+ FOR_SPEC@8522..8550
+ FOR_KW@8522..8525 "for"
+ WHITESPACE@8525..8526 " "
+ NAME@8526..8527
+ IDENT@8526..8527 "k"
+ WHITESPACE@8527..8528 " "
+ IN_KW@8528..8530 "in"
+ WHITESPACE@8530..8531 " "
+ EXPR_APPLY@8531..8550
+ EXPR_INDEX@8531..8547
+ EXPR_VAR@8531..8534
+ NAME@8531..8534
+ IDENT@8531..8534 "std"
+ DOT@8534..8535 "."
+ NAME@8535..8547
+ IDENT@8535..8547 "objectFields"
+ ARGS_DESC@8547..8550
+ L_PAREN@8547..8548 "("
+ ARG@8548..8549
+ EXPR_VAR@8548..8549
+ NAME@8548..8549
+ IDENT@8548..8549 "o"
+ R_PAREN@8549..8550 ")"
+ R_BRACK@8550..8551 "]"
+ COMMA@8551..8552 ","
+ WHITESPACE@8552..8556 "\n\n "
+ MEMBER_FIELD_METHOD@8556..8619
+ FIELD_NAME_FIXED@8556..8571
+ NAME@8556..8571
+ IDENT@8556..8571 "objectValuesAll"
+ PARAMS_DESC@8571..8574
+ L_PAREN@8571..8572 "("
+ PARAM@8572..8573
+ DESTRUCT_FULL@8572..8573
+ NAME@8572..8573
+ IDENT@8572..8573 "o"
+ R_PAREN@8573..8574 ")"
+ COLONCOLON@8574..8576 "::"
+ WHITESPACE@8576..8581 "\n "
+ EXPR_ARRAY_COMP@8581..8619
+ L_BRACK@8581..8582 "["
+ EXPR_INDEX_EXPR@8582..8586
+ LHS_EXPR@8582..8583
+ EXPR_VAR@8582..8583
+ NAME@8582..8583
+ IDENT@8582..8583 "o"
+ L_BRACK@8583..8584 "["
+ EXPR_VAR@8584..8585
+ NAME@8584..8585
+ IDENT@8584..8585 "k"
+ R_BRACK@8585..8586 "]"
+ WHITESPACE@8586..8587 " "
+ FOR_SPEC@8587..8618
+ FOR_KW@8587..8590 "for"
+ WHITESPACE@8590..8591 " "
+ NAME@8591..8592
+ IDENT@8591..8592 "k"
+ WHITESPACE@8592..8593 " "
+ IN_KW@8593..8595 "in"
+ WHITESPACE@8595..8596 " "
+ EXPR_APPLY@8596..8618
+ EXPR_INDEX@8596..8615
+ EXPR_VAR@8596..8599
+ NAME@8596..8599
+ IDENT@8596..8599 "std"
+ DOT@8599..8600 "."
+ NAME@8600..8615
+ IDENT@8600..8615 "objectFieldsAll"
+ ARGS_DESC@8615..8618
+ L_PAREN@8615..8616 "("
+ ARG@8616..8617
+ EXPR_VAR@8616..8617
+ NAME@8616..8617
+ IDENT@8616..8617 "o"
+ R_PAREN@8617..8618 ")"
+ R_BRACK@8618..8619 "]"
+ COMMA@8619..8620 ","
+ WHITESPACE@8620..8624 "\n\n "
+ MEMBER_FIELD_METHOD@8624..8758
+ FIELD_NAME_FIXED@8624..8635
+ NAME@8624..8635
+ IDENT@8624..8635 "resolvePath"
+ PARAMS_DESC@8635..8641
+ L_PAREN@8635..8636 "("
+ PARAM@8636..8637
+ DESTRUCT_FULL@8636..8637
+ NAME@8636..8637
+ IDENT@8636..8637 "f"
+ COMMA@8637..8638 ","
+ WHITESPACE@8638..8639 " "
+ PARAM@8639..8640
+ DESTRUCT_FULL@8639..8640
+ NAME@8639..8640
+ IDENT@8639..8640 "r"
+ R_PAREN@8640..8641 ")"
+ COLONCOLON@8641..8643 "::"
+ WHITESPACE@8643..8648 "\n "
+ STMT_LOCAL@8648..8678
+ LOCAL_KW@8648..8653 "local"
+ WHITESPACE@8653..8654 " "
+ BIND_DESTRUCT@8654..8677
+ DESTRUCT_FULL@8654..8657
+ NAME@8654..8657
+ IDENT@8654..8657 "arr"
+ WHITESPACE@8657..8658 " "
+ ASSIGN@8658..8659 "="
+ WHITESPACE@8659..8660 " "
+ EXPR_APPLY@8660..8677
+ EXPR_INDEX@8660..8669
+ EXPR_VAR@8660..8663
+ NAME@8660..8663
+ IDENT@8660..8663 "std"
+ DOT@8663..8664 "."
+ NAME@8664..8669
+ IDENT@8664..8669 "split"
+ ARGS_DESC@8669..8677
+ L_PAREN@8669..8670 "("
+ ARG@8670..8671
+ EXPR_VAR@8670..8671
+ NAME@8670..8671
+ IDENT@8670..8671 "f"
+ COMMA@8671..8672 ","
+ WHITESPACE@8672..8673 " "
+ ARG@8673..8676
+ EXPR_STRING@8673..8676
+ STRING_SINGLE@8673..8676 "'/'"
+ R_PAREN@8676..8677 ")"
+ SEMI@8677..8678 ";"
+ WHITESPACE@8678..8683 "\n "
+ EXPR_APPLY@8683..8758
+ EXPR_INDEX@8683..8691
+ EXPR_VAR@8683..8686
+ NAME@8683..8686
+ IDENT@8683..8686 "std"
+ DOT@8686..8687 "."
+ NAME@8687..8691
+ IDENT@8687..8691 "join"
+ ARGS_DESC@8691..8758
+ L_PAREN@8691..8692 "("
+ ARG@8692..8695
+ EXPR_STRING@8692..8695
+ STRING_SINGLE@8692..8695 "'/'"
+ COMMA@8695..8696 ","
+ WHITESPACE@8696..8697 " "
+ ARG@8697..8757
+ EXPR_BINARY@8697..8757
+ LHS_EXPR@8697..8751
+ EXPR_APPLY@8697..8751
+ EXPR_INDEX@8697..8710
+ EXPR_VAR@8697..8700
+ NAME@8697..8700
+ IDENT@8697..8700 "std"
+ DOT@8700..8701 "."
+ NAME@8701..8710
+ IDENT@8701..8710 "makeArray"
+ ARGS_DESC@8710..8751
+ L_PAREN@8710..8711 "("
+ ARG@8711..8730
+ EXPR_BINARY@8711..8730
+ LHS_EXPR@8711..8726
+ EXPR_APPLY@8711..8726
+ EXPR_INDEX@8711..8721
+ EXPR_VAR@8711..8714
+ NAME@8711..8714
+ IDENT@8711..8714 "std"
+ DOT@8714..8715 "."
+ NAME@8715..8721
+ IDENT@8715..8721 "length"
+ ARGS_DESC@8721..8726
+ L_PAREN@8721..8722 "("
+ ARG@8722..8725
+ EXPR_VAR@8722..8725
+ NAME@8722..8725
+ IDENT@8722..8725 "arr"
+ R_PAREN@8725..8726 ")"
+ WHITESPACE@8726..8727 " "
+ MINUS@8727..8728 "-"
+ WHITESPACE@8728..8729 " "
+ EXPR_NUMBER@8729..8730
+ FLOAT@8729..8730 "1"
+ COMMA@8730..8731 ","
+ WHITESPACE@8731..8732 " "
+ ARG@8732..8750
+ EXPR_FUNCTION@8732..8750
+ FUNCTION_KW@8732..8740 "function"
+ PARAMS_DESC@8740..8743
+ L_PAREN@8740..8741 "("
+ PARAM@8741..8742
+ DESTRUCT_FULL@8741..8742
+ NAME@8741..8742
+ IDENT@8741..8742 "i"
+ R_PAREN@8742..8743 ")"
+ WHITESPACE@8743..8744 " "
+ EXPR_INDEX_EXPR@8744..8750
+ LHS_EXPR@8744..8747
+ EXPR_VAR@8744..8747
+ NAME@8744..8747
+ IDENT@8744..8747 "arr"
+ L_BRACK@8747..8748 "["
+ EXPR_VAR@8748..8749
+ NAME@8748..8749
+ IDENT@8748..8749 "i"
+ R_BRACK@8749..8750 "]"
+ R_PAREN@8750..8751 ")"
+ WHITESPACE@8751..8752 " "
+ PLUS@8752..8753 "+"
+ WHITESPACE@8753..8754 " "
+ EXPR_ARRAY@8754..8757
+ L_BRACK@8754..8755 "["
+ EXPR_VAR@8755..8756
+ NAME@8755..8756
+ IDENT@8755..8756 "r"
+ R_BRACK@8756..8757 "]"
+ R_PAREN@8757..8758 ")"
+ COMMA@8758..8759 ","
+ WHITESPACE@8759..8763 "\n\n "
+ MEMBER_FIELD_METHOD@8763..9216
+ FIELD_NAME_FIXED@8763..8768
+ NAME@8763..8768
+ IDENT@8763..8768 "prune"
+ PARAMS_DESC@8768..8771
+ L_PAREN@8768..8769 "("
+ PARAM@8769..8770
+ DESTRUCT_FULL@8769..8770
+ NAME@8769..8770
+ IDENT@8769..8770 "a"
+ R_PAREN@8770..8771 ")"
+ COLONCOLON@8771..8773 "::"
+ WHITESPACE@8773..8778 "\n "
+ STMT_LOCAL@8778..8982
+ LOCAL_KW@8778..8783 "local"
+ WHITESPACE@8783..8784 " "
+ BIND_FUNCTION@8784..8981
+ NAME@8784..8793
+ IDENT@8784..8793 "isContent"
+ PARAMS_DESC@8793..8796
+ L_PAREN@8793..8794 "("
+ PARAM@8794..8795
+ DESTRUCT_FULL@8794..8795
+ NAME@8794..8795
+ IDENT@8794..8795 "b"
+ R_PAREN@8795..8796 ")"
+ WHITESPACE@8796..8797 " "
+ ASSIGN@8797..8798 "="
+ WHITESPACE@8798..8805 "\n "
+ EXPR_IF_THEN_ELSE@8805..8981
+ IF_KW@8805..8807 "if"
+ WHITESPACE@8807..8808 " "
+ EXPR_BINARY@8808..8817
+ LHS_EXPR@8808..8809
+ EXPR_VAR@8808..8809
+ NAME@8808..8809
+ IDENT@8808..8809 "b"
+ WHITESPACE@8809..8810 " "
+ EQ@8810..8812 "=="
+ WHITESPACE@8812..8813 " "
+ EXPR_LITERAL@8813..8817
+ NULL_KW@8813..8817 "null"
+ WHITESPACE@8817..8818 " "
+ THEN_KW@8818..8822 "then"
+ WHITESPACE@8822..8831 "\n "
+ TRUE_EXPR@8831..8836
+ EXPR_LITERAL@8831..8836
+ FALSE_KW@8831..8836 "false"
+ WHITESPACE@8836..8843 "\n "
+ ELSE_KW@8843..8847 "else"
+ WHITESPACE@8847..8848 " "
+ FALSE_EXPR@8848..8981
+ EXPR_IF_THEN_ELSE@8848..8981
+ IF_KW@8848..8850 "if"
+ WHITESPACE@8850..8851 " "
+ EXPR_APPLY@8851..8865
+ EXPR_INDEX@8851..8862
+ EXPR_VAR@8851..8854
+ NAME@8851..8854
+ IDENT@8851..8854 "std"
+ DOT@8854..8855 "."
+ NAME@8855..8862
+ IDENT@8855..8862 "isArray"
+ ARGS_DESC@8862..8865
+ L_PAREN@8862..8863 "("
+ ARG@8863..8864
+ EXPR_VAR@8863..8864
+ NAME@8863..8864
+ IDENT@8863..8864 "b"
+ R_PAREN@8864..8865 ")"
+ WHITESPACE@8865..8866 " "
+ THEN_KW@8866..8870 "then"
+ WHITESPACE@8870..8879 "\n "
+ TRUE_EXPR@8879..8896
+ EXPR_BINARY@8879..8896
+ LHS_EXPR@8879..8892
+ EXPR_APPLY@8879..8892
+ EXPR_INDEX@8879..8889
+ EXPR_VAR@8879..8882
+ NAME@8879..8882
+ IDENT@8879..8882 "std"
+ DOT@8882..8883 "."
+ NAME@8883..8889
+ IDENT@8883..8889 "length"
+ ARGS_DESC@8889..8892
+ L_PAREN@8889..8890 "("
+ ARG@8890..8891
+ EXPR_VAR@8890..8891
+ NAME@8890..8891
+ IDENT@8890..8891 "b"
+ R_PAREN@8891..8892 ")"
+ WHITESPACE@8892..8893 " "
+ GT@8893..8894 ">"
+ WHITESPACE@8894..8895 " "
+ EXPR_NUMBER@8895..8896
+ FLOAT@8895..8896 "0"
+ WHITESPACE@8896..8903 "\n "
+ ELSE_KW@8903..8907 "else"
+ WHITESPACE@8907..8908 " "
+ FALSE_EXPR@8908..8981
+ EXPR_IF_THEN_ELSE@8908..8981
+ IF_KW@8908..8910 "if"
+ WHITESPACE@8910..8911 " "
+ EXPR_APPLY@8911..8926
+ EXPR_INDEX@8911..8923
+ EXPR_VAR@8911..8914
+ NAME@8911..8914
+ IDENT@8911..8914 "std"
+ DOT@8914..8915 "."
+ NAME@8915..8923
+ IDENT@8915..8923 "isObject"
+ ARGS_DESC@8923..8926
+ L_PAREN@8923..8924 "("
+ ARG@8924..8925
+ EXPR_VAR@8924..8925
+ NAME@8924..8925
+ IDENT@8924..8925 "b"
+ R_PAREN@8925..8926 ")"
+ WHITESPACE@8926..8927 " "
+ THEN_KW@8927..8931 "then"
+ WHITESPACE@8931..8940 "\n "
+ TRUE_EXPR@8940..8957
+ EXPR_BINARY@8940..8957
+ LHS_EXPR@8940..8953
+ EXPR_APPLY@8940..8953
+ EXPR_INDEX@8940..8950
+ EXPR_VAR@8940..8943
+ NAME@8940..8943
+ IDENT@8940..8943 "std"
+ DOT@8943..8944 "."
+ NAME@8944..8950
+ IDENT@8944..8950 "length"
+ ARGS_DESC@8950..8953
+ L_PAREN@8950..8951 "("
+ ARG@8951..8952
+ EXPR_VAR@8951..8952
+ NAME@8951..8952
+ IDENT@8951..8952 "b"
+ R_PAREN@8952..8953 ")"
+ WHITESPACE@8953..8954 " "
+ GT@8954..8955 ">"
+ WHITESPACE@8955..8956 " "
+ EXPR_NUMBER@8956..8957
+ FLOAT@8956..8957 "0"
+ WHITESPACE@8957..8964 "\n "
+ ELSE_KW@8964..8968 "else"
+ WHITESPACE@8968..8977 "\n "
+ FALSE_EXPR@8977..8981
+ EXPR_LITERAL@8977..8981
+ TRUE_KW@8977..8981 "true"
+ SEMI@8981..8982 ";"
+ WHITESPACE@8982..8987 "\n "
+ EXPR_IF_THEN_ELSE@8987..9216
+ IF_KW@8987..8989 "if"
+ WHITESPACE@8989..8990 " "
+ EXPR_APPLY@8990..9004
+ EXPR_INDEX@8990..9001
+ EXPR_VAR@8990..8993
+ NAME@8990..8993
+ IDENT@8990..8993 "std"
+ DOT@8993..8994 "."
+ NAME@8994..9001
+ IDENT@8994..9001 "isArray"
+ ARGS_DESC@9001..9004
+ L_PAREN@9001..9002 "("
+ ARG@9002..9003
+ EXPR_VAR@9002..9003
+ NAME@9002..9003
+ IDENT@9002..9003 "a"
+ R_PAREN@9003..9004 ")"
+ WHITESPACE@9004..9005 " "
+ THEN_KW@9005..9009 "then"
+ WHITESPACE@9009..9016 "\n "
+ TRUE_EXPR@9016..9066
+ EXPR_ARRAY_COMP@9016..9066
+ L_BRACK@9016..9017 "["
+ EXPR_APPLY@9017..9029
+ EXPR_INDEX@9017..9026
+ EXPR_VAR@9017..9020
+ NAME@9017..9020
+ IDENT@9017..9020 "std"
+ DOT@9020..9021 "."
+ NAME@9021..9026
+ IDENT@9021..9026 "prune"
+ ARGS_DESC@9026..9029
+ L_PAREN@9026..9027 "("
+ ARG@9027..9028
+ EXPR_VAR@9027..9028
+ NAME@9027..9028
+ IDENT@9027..9028 "x"
+ R_PAREN@9028..9029 ")"
+ WHITESPACE@9029..9030 " "
+ FOR_SPEC@9030..9040
+ FOR_KW@9030..9033 "for"
+ WHITESPACE@9033..9034 " "
+ NAME@9034..9035
+ IDENT@9034..9035 "x"
+ WHITESPACE@9035..9036 " "
+ IN_KW@9036..9038 "in"
+ WHITESPACE@9038..9039 " "
+ EXPR_VAR@9039..9040
+ NAME@9039..9040
+ IDENT@9039..9040 "a"
+ WHITESPACE@9040..9041 " "
+ IF_SPEC@9041..9065
+ IF_KW@9041..9043 "if"
+ WHITESPACE@9043..9044 " "
+ EXPR_APPLY@9044..9065
+ EXPR_VAR@9044..9053
+ NAME@9044..9053
+ IDENT@9044..9053 "isContent"
+ ARGS_DESC@9053..9065
+ L_PAREN@9053..9054 "("
+ ARG@9054..9064
+ EXPR_APPLY@9054..9064
+ EXPR_INDEX@9054..9061
+ EXPR_LITERAL@9054..9055
+ DOLLAR@9054..9055 "$"
+ DOT@9055..9056 "."
+ NAME@9056..9061
+ IDENT@9056..9061 "prune"
+ ARGS_DESC@9061..9064
+ L_PAREN@9061..9062 "("
+ ARG@9062..9063
+ EXPR_VAR@9062..9063
+ NAME@9062..9063
+ IDENT@9062..9063 "x"
+ R_PAREN@9063..9064 ")"
+ R_PAREN@9064..9065 ")"
+ R_BRACK@9065..9066 "]"
+ WHITESPACE@9066..9071 "\n "
+ ELSE_KW@9071..9075 "else"
+ WHITESPACE@9075..9076 " "
+ FALSE_EXPR@9076..9216
+ EXPR_IF_THEN_ELSE@9076..9216
+ IF_KW@9076..9078 "if"
+ WHITESPACE@9078..9079 " "
+ EXPR_APPLY@9079..9094
+ EXPR_INDEX@9079..9091
+ EXPR_VAR@9079..9082
+ NAME@9079..9082
+ IDENT@9079..9082 "std"
+ DOT@9082..9083 "."
+ NAME@9083..9091
+ IDENT@9083..9091 "isObject"
+ ARGS_DESC@9091..9094
+ L_PAREN@9091..9092 "("
+ ARG@9092..9093
+ EXPR_VAR@9092..9093
+ NAME@9092..9093
+ IDENT@9092..9093 "a"
+ R_PAREN@9093..9094 ")"
+ WHITESPACE@9094..9095 " "
+ THEN_KW@9095..9099 "then"
+ WHITESPACE@9099..9100 " "
+ TRUE_EXPR@9100..9203
+ EXPR_OBJECT@9100..9203
+ OBJ_BODY_COMP@9100..9203
+ L_BRACE@9100..9101 "{"
+ WHITESPACE@9101..9108 "\n "
+ MEMBER_FIELD_NORMAL@9108..9126
+ FIELD_NAME_DYNAMIC@9108..9111
+ L_BRACK@9108..9109 "["
+ EXPR_VAR@9109..9110
+ NAME@9109..9110
+ IDENT@9109..9110 "x"
+ R_BRACK@9110..9111 "]"
+ COLON@9111..9112 ":"
+ WHITESPACE@9112..9113 " "
+ EXPR_APPLY@9113..9126
+ EXPR_INDEX@9113..9120
+ EXPR_LITERAL@9113..9114
+ DOLLAR@9113..9114 "$"
+ DOT@9114..9115 "."
+ NAME@9115..9120
+ IDENT@9115..9120 "prune"
+ ARGS_DESC@9120..9126
+ L_PAREN@9120..9121 "("
+ ARG@9121..9125
+ EXPR_INDEX_EXPR@9121..9125
+ LHS_EXPR@9121..9122
+ EXPR_VAR@9121..9122
+ NAME@9121..9122
+ IDENT@9121..9122 "a"
+ L_BRACK@9122..9123 "["
+ EXPR_VAR@9123..9124
+ NAME@9123..9124
+ IDENT@9123..9124 "x"
+ R_BRACK@9124..9125 "]"
+ R_PAREN@9125..9126 ")"
+ WHITESPACE@9126..9133 "\n "
+ FOR_SPEC@9133..9161
+ FOR_KW@9133..9136 "for"
+ WHITESPACE@9136..9137 " "
+ NAME@9137..9138
+ IDENT@9137..9138 "x"
+ WHITESPACE@9138..9139 " "
+ IN_KW@9139..9141 "in"
+ WHITESPACE@9141..9142 " "
+ EXPR_APPLY@9142..9161
+ EXPR_INDEX@9142..9158
+ EXPR_VAR@9142..9145
+ NAME@9142..9145
+ IDENT@9142..9145 "std"
+ DOT@9145..9146 "."
+ NAME@9146..9158
+ IDENT@9146..9158 "objectFields"
+ ARGS_DESC@9158..9161
+ L_PAREN@9158..9159 "("
+ ARG@9159..9160
+ EXPR_VAR@9159..9160
+ NAME@9159..9160
+ IDENT@9159..9160 "a"
+ R_PAREN@9160..9161 ")"
+ WHITESPACE@9161..9168 "\n "
+ IF_SPEC@9168..9197
+ IF_KW@9168..9170 "if"
+ WHITESPACE@9170..9171 " "
+ EXPR_APPLY@9171..9197
+ EXPR_VAR@9171..9180
+ NAME@9171..9180
+ IDENT@9171..9180 "isContent"
+ ARGS_DESC@9180..9197
+ L_PAREN@9180..9181 "("
+ ARG@9181..9196
+ EXPR_APPLY@9181..9196
+ EXPR_INDEX@9181..9190
+ EXPR_VAR@9181..9184
+ NAME@9181..9184
+ IDENT@9181..9184 "std"
+ DOT@9184..9185 "."
+ NAME@9185..9190
+ IDENT@9185..9190 "prune"
+ ARGS_DESC@9190..9196
+ L_PAREN@9190..9191 "("
+ ARG@9191..9195
+ EXPR_INDEX_EXPR@9191..9195
+ LHS_EXPR@9191..9192
+ EXPR_VAR@9191..9192
+ NAME@9191..9192
+ IDENT@9191..9192 "a"
+ L_BRACK@9192..9193 "["
+ EXPR_VAR@9193..9194
+ NAME@9193..9194
+ IDENT@9193..9194 "x"
+ R_BRACK@9194..9195 "]"
+ R_PAREN@9195..9196 ")"
+ R_PAREN@9196..9197 ")"
+ WHITESPACE@9197..9202 "\n "
+ R_BRACE@9202..9203 "}"
+ WHITESPACE@9203..9204 " "
+ ELSE_KW@9204..9208 "else"
+ WHITESPACE@9208..9215 "\n "
+ FALSE_EXPR@9215..9216
+ EXPR_VAR@9215..9216
+ NAME@9215..9216
+ IDENT@9215..9216 "a"
+ COMMA@9216..9217 ","
+ WHITESPACE@9217..9221 "\n\n "
+ MEMBER_FIELD_METHOD@9221..9436
+ FIELD_NAME_FIXED@9221..9225
+ NAME@9221..9225
+ IDENT@9221..9225 "find"
+ PARAMS_DESC@9225..9237
+ L_PAREN@9225..9226 "("
+ PARAM@9226..9231
+ DESTRUCT_FULL@9226..9231
+ NAME@9226..9231
+ IDENT@9226..9231 "value"
+ COMMA@9231..9232 ","
+ WHITESPACE@9232..9233 " "
+ PARAM@9233..9236
+ DESTRUCT_FULL@9233..9236
+ NAME@9233..9236
+ IDENT@9233..9236 "arr"
+ R_PAREN@9236..9237 ")"
+ COLONCOLON@9237..9239 "::"
+ WHITESPACE@9239..9244 "\n "
+ EXPR_IF_THEN_ELSE@9244..9436
+ IF_KW@9244..9246 "if"
+ WHITESPACE@9246..9247 " "
+ EXPR_UNARY@9247..9264
+ NOT@9247..9248 "!"
+ EXPR_APPLY@9248..9264
+ EXPR_INDEX@9248..9259
+ EXPR_VAR@9248..9251
+ NAME@9248..9251
+ IDENT@9248..9251 "std"
+ DOT@9251..9252 "."
+ NAME@9252..9259
+ IDENT@9252..9259 "isArray"
+ ARGS_DESC@9259..9264
+ L_PAREN@9259..9260 "("
+ ARG@9260..9263
+ EXPR_VAR@9260..9263
+ NAME@9260..9263
+ IDENT@9260..9263 "arr"
+ R_PAREN@9263..9264 ")"
+ WHITESPACE@9264..9265 " "
+ THEN_KW@9265..9269 "then"
+ WHITESPACE@9269..9276 "\n "
+ TRUE_EXPR@9276..9346
+ EXPR_ERROR@9276..9346
+ ERROR_KW@9276..9281 "error"
+ WHITESPACE@9281..9282 " "
+ EXPR_BINARY@9282..9346
+ LHS_EXPR@9282..9330
+ EXPR_STRING@9282..9330
+ STRING_SINGLE@9282..9330 "'find second paramete ..."
+ WHITESPACE@9330..9331 " "
+ PLUS@9331..9332 "+"
+ WHITESPACE@9332..9333 " "
+ EXPR_APPLY@9333..9346
+ EXPR_INDEX@9333..9341
+ EXPR_VAR@9333..9336
+ NAME@9333..9336
+ IDENT@9333..9336 "std"
+ DOT@9336..9337 "."
+ NAME@9337..9341
+ IDENT@9337..9341 "type"
+ ARGS_DESC@9341..9346
+ L_PAREN@9341..9342 "("
+ ARG@9342..9345
+ EXPR_VAR@9342..9345
+ NAME@9342..9345
+ IDENT@9342..9345 "arr"
+ R_PAREN@9345..9346 ")"
+ WHITESPACE@9346..9351 "\n "
+ ELSE_KW@9351..9355 "else"
+ WHITESPACE@9355..9362 "\n "
+ FALSE_EXPR@9362..9436
+ EXPR_APPLY@9362..9436
+ EXPR_INDEX@9362..9372
+ EXPR_VAR@9362..9365
+ NAME@9362..9365
+ IDENT@9362..9365 "std"
+ DOT@9365..9366 "."
+ NAME@9366..9372
+ IDENT@9366..9372 "filter"
+ ARGS_DESC@9372..9436
+ L_PAREN@9372..9373 "("
+ ARG@9373..9400
+ EXPR_FUNCTION@9373..9400
+ FUNCTION_KW@9373..9381 "function"
+ PARAMS_DESC@9381..9384
+ L_PAREN@9381..9382 "("
+ PARAM@9382..9383
+ DESTRUCT_FULL@9382..9383
+ NAME@9382..9383
+ IDENT@9382..9383 "i"
+ R_PAREN@9383..9384 ")"
+ WHITESPACE@9384..9385 " "
+ EXPR_BINARY@9385..9400
+ LHS_EXPR@9385..9391
+ EXPR_INDEX_EXPR@9385..9391
+ LHS_EXPR@9385..9388
+ EXPR_VAR@9385..9388
+ NAME@9385..9388
+ IDENT@9385..9388 "arr"
+ L_BRACK@9388..9389 "["
+ EXPR_VAR@9389..9390
+ NAME@9389..9390
+ IDENT@9389..9390 "i"
+ R_BRACK@9390..9391 "]"
+ WHITESPACE@9391..9392 " "
+ EQ@9392..9394 "=="
+ WHITESPACE@9394..9395 " "
+ EXPR_VAR@9395..9400
+ NAME@9395..9400
+ IDENT@9395..9400 "value"
+ COMMA@9400..9401 ","
+ WHITESPACE@9401..9402 " "
+ ARG@9402..9435
+ EXPR_APPLY@9402..9435
+ EXPR_INDEX@9402..9411
+ EXPR_VAR@9402..9405
+ NAME@9402..9405
+ IDENT@9402..9405 "std"
+ DOT@9405..9406 "."
+ NAME@9406..9411
+ IDENT@9406..9411 "range"
+ ARGS_DESC@9411..9435
+ L_PAREN@9411..9412 "("
+ ARG@9412..9413
+ EXPR_NUMBER@9412..9413
+ FLOAT@9412..9413 "0"
+ COMMA@9413..9414 ","
+ WHITESPACE@9414..9415 " "
+ ARG@9415..9434
+ EXPR_BINARY@9415..9434
+ LHS_EXPR@9415..9430
+ EXPR_APPLY@9415..9430
+ EXPR_INDEX@9415..9425
+ EXPR_VAR@9415..9418
+ NAME@9415..9418
+ IDENT@9415..9418 "std"
+ DOT@9418..9419 "."
+ NAME@9419..9425
+ IDENT@9419..9425 "length"
+ ARGS_DESC@9425..9430
+ L_PAREN@9425..9426 "("
+ ARG@9426..9429
+ EXPR_VAR@9426..9429
+ NAME@9426..9429
+ IDENT@9426..9429 "arr"
+ R_PAREN@9429..9430 ")"
+ WHITESPACE@9430..9431 " "
+ MINUS@9431..9432 "-"
+ WHITESPACE@9432..9433 " "
+ EXPR_NUMBER@9433..9434
+ FLOAT@9433..9434 "1"
+ R_PAREN@9434..9435 ")"
+ R_PAREN@9435..9436 ")"
+ COMMA@9436..9437 ","
+ WHITESPACE@9437..9441 "\n\n "
+ SINGLE_LINE_SLASH_COMMENT@9441..9451 "// Compat\n"
+ WHITESPACE@9451..9453 " "
+ MEMBER_FIELD_METHOD@9453..9563
+ FIELD_NAME_FIXED@9453..9468
+ NAME@9453..9468
+ IDENT@9453..9468 "__compare_array"
+ PARAMS_DESC@9468..9480
+ L_PAREN@9468..9469 "("
+ PARAM@9469..9473
+ DESTRUCT_FULL@9469..9473
+ NAME@9469..9473
+ IDENT@9469..9473 "arr1"
+ COMMA@9473..9474 ","
+ WHITESPACE@9474..9475 " "
+ PARAM@9475..9479
+ DESTRUCT_FULL@9475..9479
+ NAME@9475..9479
+ IDENT@9475..9479 "arr2"
+ R_PAREN@9479..9480 ")"
+ COLONCOLON@9480..9482 "::"
+ WHITESPACE@9482..9487 "\n "
+ EXPR_ASSERT@9487..9563
+ ASSERTION@9487..9532
+ ASSERT_KW@9487..9493 "assert"
+ WHITESPACE@9493..9494 " "
+ LHS_EXPR@9494..9532
+ EXPR_BINARY@9494..9532
+ LHS_EXPR@9494..9511
+ EXPR_APPLY@9494..9511
+ EXPR_INDEX@9494..9505
+ EXPR_VAR@9494..9497
+ NAME@9494..9497
+ IDENT@9494..9497 "std"
+ DOT@9497..9498 "."
+ NAME@9498..9505
+ IDENT@9498..9505 "isArray"
+ ARGS_DESC@9505..9511
+ L_PAREN@9505..9506 "("
+ ARG@9506..9510
+ EXPR_VAR@9506..9510
+ NAME@9506..9510
+ IDENT@9506..9510 "arr1"
+ R_PAREN@9510..9511 ")"
+ WHITESPACE@9511..9512 " "
+ AND@9512..9514 "&&"
WHITESPACE@9514..9515 " "
- ARG@9515..9518
- EXPR_STRING@9515..9518
- STRING_SINGLE@9515..9518 "'/'"
- R_PAREN@9518..9519 ")"
- SEMI@9519..9520 ";"
- WHITESPACE@9520..9525 "\n "
- EXPR_APPLY@9525..9600
- EXPR_INDEX@9525..9533
- EXPR_VAR@9525..9528
- NAME@9525..9528
- IDENT@9525..9528 "std"
- DOT@9528..9529 "."
- NAME@9529..9533
- IDENT@9529..9533 "join"
- ARGS_DESC@9533..9600
- L_PAREN@9533..9534 "("
- ARG@9534..9537
- EXPR_STRING@9534..9537
- STRING_SINGLE@9534..9537 "'/'"
- COMMA@9537..9538 ","
- WHITESPACE@9538..9539 " "
- ARG@9539..9599
- EXPR_BINARY@9539..9599
- LHS_EXPR@9539..9593
- EXPR_APPLY@9539..9593
- EXPR_INDEX@9539..9552
- EXPR_VAR@9539..9542
- NAME@9539..9542
- IDENT@9539..9542 "std"
- DOT@9542..9543 "."
- NAME@9543..9552
- IDENT@9543..9552 "makeArray"
- ARGS_DESC@9552..9593
- L_PAREN@9552..9553 "("
- ARG@9553..9572
- EXPR_BINARY@9553..9572
- LHS_EXPR@9553..9568
- EXPR_APPLY@9553..9568
- EXPR_INDEX@9553..9563
- EXPR_VAR@9553..9556
- NAME@9553..9556
- IDENT@9553..9556 "std"
- DOT@9556..9557 "."
- NAME@9557..9563
- IDENT@9557..9563 "length"
- ARGS_DESC@9563..9568
- L_PAREN@9563..9564 "("
- ARG@9564..9567
- EXPR_VAR@9564..9567
- NAME@9564..9567
- IDENT@9564..9567 "arr"
- R_PAREN@9567..9568 ")"
- WHITESPACE@9568..9569 " "
- MINUS@9569..9570 "-"
- WHITESPACE@9570..9571 " "
- EXPR_NUMBER@9571..9572
- FLOAT@9571..9572 "1"
- COMMA@9572..9573 ","
- WHITESPACE@9573..9574 " "
- ARG@9574..9592
- EXPR_FUNCTION@9574..9592
- FUNCTION_KW@9574..9582 "function"
- PARAMS_DESC@9582..9585
- L_PAREN@9582..9583 "("
- PARAM@9583..9584
- DESTRUCT_FULL@9583..9584
- NAME@9583..9584
- IDENT@9583..9584 "i"
- R_PAREN@9584..9585 ")"
- WHITESPACE@9585..9586 " "
- EXPR_INDEX_EXPR@9586..9592
- LHS_EXPR@9586..9589
- EXPR_VAR@9586..9589
- NAME@9586..9589
- IDENT@9586..9589 "arr"
- L_BRACK@9589..9590 "["
- EXPR_VAR@9590..9591
- NAME@9590..9591
- IDENT@9590..9591 "i"
- R_BRACK@9591..9592 "]"
- R_PAREN@9592..9593 ")"
- WHITESPACE@9593..9594 " "
- PLUS@9594..9595 "+"
- WHITESPACE@9595..9596 " "
- EXPR_ARRAY@9596..9599
- L_BRACK@9596..9597 "["
- EXPR_VAR@9597..9598
- NAME@9597..9598
- IDENT@9597..9598 "r"
- R_BRACK@9598..9599 "]"
- R_PAREN@9599..9600 ")"
- COMMA@9600..9601 ","
- WHITESPACE@9601..9605 "\n\n "
- MEMBER_FIELD_METHOD@9605..10058
- FIELD_NAME_FIXED@9605..9610
- NAME@9605..9610
- IDENT@9605..9610 "prune"
- PARAMS_DESC@9610..9613
- L_PAREN@9610..9611 "("
- PARAM@9611..9612
- DESTRUCT_FULL@9611..9612
- NAME@9611..9612
- IDENT@9611..9612 "a"
- R_PAREN@9612..9613 ")"
- COLONCOLON@9613..9615 "::"
- WHITESPACE@9615..9620 "\n "
- EXPR_LOCAL@9620..10058
- LOCAL_KW@9620..9625 "local"
+ EXPR_APPLY@9515..9532
+ EXPR_INDEX@9515..9526
+ EXPR_VAR@9515..9518
+ NAME@9515..9518
+ IDENT@9515..9518 "std"
+ DOT@9518..9519 "."
+ NAME@9519..9526
+ IDENT@9519..9526 "isArray"
+ ARGS_DESC@9526..9532
+ L_PAREN@9526..9527 "("
+ ARG@9527..9531
+ EXPR_VAR@9527..9531
+ NAME@9527..9531
+ IDENT@9527..9531 "arr2"
+ R_PAREN@9531..9532 ")"
+ SEMI@9532..9533 ";"
+ WHITESPACE@9533..9538 "\n "
+ EXPR_APPLY@9538..9563
+ EXPR_INDEX@9538..9551
+ EXPR_VAR@9538..9541
+ NAME@9538..9541
+ IDENT@9538..9541 "std"
+ DOT@9541..9542 "."
+ NAME@9542..9551
+ IDENT@9542..9551 "__compare"
+ ARGS_DESC@9551..9563
+ L_PAREN@9551..9552 "("
+ ARG@9552..9556
+ EXPR_VAR@9552..9556
+ NAME@9552..9556
+ IDENT@9552..9556 "arr1"
+ COMMA@9556..9557 ","
+ WHITESPACE@9557..9558 " "
+ ARG@9558..9562
+ EXPR_VAR@9558..9562
+ NAME@9558..9562
+ IDENT@9558..9562 "arr2"
+ R_PAREN@9562..9563 ")"
+ COMMA@9563..9564 ","
+ WHITESPACE@9564..9567 "\n "
+ MEMBER_FIELD_METHOD@9567..9631
+ FIELD_NAME_FIXED@9567..9579
+ NAME@9567..9579
+ IDENT@9567..9579 "__array_less"
+ PARAMS_DESC@9579..9591
+ L_PAREN@9579..9580 "("
+ PARAM@9580..9584
+ DESTRUCT_FULL@9580..9584
+ NAME@9580..9584
+ IDENT@9580..9584 "arr1"
+ COMMA@9584..9585 ","
+ WHITESPACE@9585..9586 " "
+ PARAM@9586..9590
+ DESTRUCT_FULL@9586..9590
+ NAME@9586..9590
+ IDENT@9586..9590 "arr2"
+ R_PAREN@9590..9591 ")"
+ COLONCOLON@9591..9593 "::"
+ WHITESPACE@9593..9594 " "
+ EXPR_BINARY@9594..9631
+ LHS_EXPR@9594..9625
+ EXPR_APPLY@9594..9625
+ EXPR_INDEX@9594..9613
+ EXPR_VAR@9594..9597
+ NAME@9594..9597
+ IDENT@9594..9597 "std"
+ DOT@9597..9598 "."
+ NAME@9598..9613
+ IDENT@9598..9613 "__compare_array"
+ ARGS_DESC@9613..9625
+ L_PAREN@9613..9614 "("
+ ARG@9614..9618
+ EXPR_VAR@9614..9618
+ NAME@9614..9618
+ IDENT@9614..9618 "arr1"
+ COMMA@9618..9619 ","
+ WHITESPACE@9619..9620 " "
+ ARG@9620..9624
+ EXPR_VAR@9620..9624
+ NAME@9620..9624
+ IDENT@9620..9624 "arr2"
+ R_PAREN@9624..9625 ")"
WHITESPACE@9625..9626 " "
- BIND_FUNCTION@9626..9823
- NAME@9626..9635
- IDENT@9626..9635 "isContent"
- PARAMS_DESC@9635..9638
- L_PAREN@9635..9636 "("
- PARAM@9636..9637
- DESTRUCT_FULL@9636..9637
- NAME@9636..9637
- IDENT@9636..9637 "b"
- R_PAREN@9637..9638 ")"
- WHITESPACE@9638..9639 " "
- ASSIGN@9639..9640 "="
- WHITESPACE@9640..9647 "\n "
- EXPR_IF_THEN_ELSE@9647..9823
- IF_KW@9647..9649 "if"
- WHITESPACE@9649..9650 " "
- EXPR_BINARY@9650..9659
- LHS_EXPR@9650..9651
- EXPR_VAR@9650..9651
- NAME@9650..9651
- IDENT@9650..9651 "b"
- WHITESPACE@9651..9652 " "
- EQ@9652..9654 "=="
- WHITESPACE@9654..9655 " "
- EXPR_LITERAL@9655..9659
- NULL_KW@9655..9659 "null"
- WHITESPACE@9659..9660 " "
- THEN_KW@9660..9664 "then"
- WHITESPACE@9664..9673 "\n "
- TRUE_EXPR@9673..9678
- EXPR_LITERAL@9673..9678
- FALSE_KW@9673..9678 "false"
- WHITESPACE@9678..9685 "\n "
- ELSE_KW@9685..9689 "else"
- WHITESPACE@9689..9690 " "
- FALSE_EXPR@9690..9823
- EXPR_IF_THEN_ELSE@9690..9823
- IF_KW@9690..9692 "if"
- WHITESPACE@9692..9693 " "
- EXPR_APPLY@9693..9707
- EXPR_INDEX@9693..9704
- EXPR_VAR@9693..9696
- NAME@9693..9696
- IDENT@9693..9696 "std"
- DOT@9696..9697 "."
- NAME@9697..9704
- IDENT@9697..9704 "isArray"
- ARGS_DESC@9704..9707
- L_PAREN@9704..9705 "("
- ARG@9705..9706
- EXPR_VAR@9705..9706
- NAME@9705..9706
- IDENT@9705..9706 "b"
- R_PAREN@9706..9707 ")"
- WHITESPACE@9707..9708 " "
- THEN_KW@9708..9712 "then"
- WHITESPACE@9712..9721 "\n "
- TRUE_EXPR@9721..9738
- EXPR_BINARY@9721..9738
- LHS_EXPR@9721..9734
- EXPR_APPLY@9721..9734
- EXPR_INDEX@9721..9731
- EXPR_VAR@9721..9724
- NAME@9721..9724
- IDENT@9721..9724 "std"
- DOT@9724..9725 "."
- NAME@9725..9731
- IDENT@9725..9731 "length"
- ARGS_DESC@9731..9734
- L_PAREN@9731..9732 "("
- ARG@9732..9733
- EXPR_VAR@9732..9733
- NAME@9732..9733
- IDENT@9732..9733 "b"
- R_PAREN@9733..9734 ")"
- WHITESPACE@9734..9735 " "
- GT@9735..9736 ">"
- WHITESPACE@9736..9737 " "
- EXPR_NUMBER@9737..9738
- FLOAT@9737..9738 "0"
- WHITESPACE@9738..9745 "\n "
- ELSE_KW@9745..9749 "else"
- WHITESPACE@9749..9750 " "
- FALSE_EXPR@9750..9823
- EXPR_IF_THEN_ELSE@9750..9823
- IF_KW@9750..9752 "if"
- WHITESPACE@9752..9753 " "
- EXPR_APPLY@9753..9768
- EXPR_INDEX@9753..9765
- EXPR_VAR@9753..9756
- NAME@9753..9756
- IDENT@9753..9756 "std"
- DOT@9756..9757 "."
- NAME@9757..9765
- IDENT@9757..9765 "isObject"
- ARGS_DESC@9765..9768
- L_PAREN@9765..9766 "("
- ARG@9766..9767
- EXPR_VAR@9766..9767
- NAME@9766..9767
- IDENT@9766..9767 "b"
- R_PAREN@9767..9768 ")"
- WHITESPACE@9768..9769 " "
- THEN_KW@9769..9773 "then"
- WHITESPACE@9773..9782 "\n "
- TRUE_EXPR@9782..9799
- EXPR_BINARY@9782..9799
- LHS_EXPR@9782..9795
- EXPR_APPLY@9782..9795
- EXPR_INDEX@9782..9792
- EXPR_VAR@9782..9785
- NAME@9782..9785
- IDENT@9782..9785 "std"
- DOT@9785..9786 "."
- NAME@9786..9792
- IDENT@9786..9792 "length"
- ARGS_DESC@9792..9795
- L_PAREN@9792..9793 "("
- ARG@9793..9794
- EXPR_VAR@9793..9794
- NAME@9793..9794
- IDENT@9793..9794 "b"
- R_PAREN@9794..9795 ")"
- WHITESPACE@9795..9796 " "
- GT@9796..9797 ">"
- WHITESPACE@9797..9798 " "
- EXPR_NUMBER@9798..9799
- FLOAT@9798..9799 "0"
- WHITESPACE@9799..9806 "\n "
- ELSE_KW@9806..9810 "else"
- WHITESPACE@9810..9819 "\n "
- FALSE_EXPR@9819..9823
- EXPR_LITERAL@9819..9823
- TRUE_KW@9819..9823 "true"
- SEMI@9823..9824 ";"
- WHITESPACE@9824..9829 "\n "
- EXPR_IF_THEN_ELSE@9829..10058
- IF_KW@9829..9831 "if"
- WHITESPACE@9831..9832 " "
- EXPR_APPLY@9832..9846
- EXPR_INDEX@9832..9843
- EXPR_VAR@9832..9835
- NAME@9832..9835
- IDENT@9832..9835 "std"
- DOT@9835..9836 "."
- NAME@9836..9843
- IDENT@9836..9843 "isArray"
- ARGS_DESC@9843..9846
- L_PAREN@9843..9844 "("
- ARG@9844..9845
- EXPR_VAR@9844..9845
- NAME@9844..9845
- IDENT@9844..9845 "a"
- R_PAREN@9845..9846 ")"
- WHITESPACE@9846..9847 " "
- THEN_KW@9847..9851 "then"
- WHITESPACE@9851..9858 "\n "
- TRUE_EXPR@9858..9908
- EXPR_ARRAY_COMP@9858..9908
- L_BRACK@9858..9859 "["
- EXPR_APPLY@9859..9871
- EXPR_INDEX@9859..9868
- EXPR_VAR@9859..9862
- NAME@9859..9862
- IDENT@9859..9862 "std"
- DOT@9862..9863 "."
- NAME@9863..9868
- IDENT@9863..9868 "prune"
- ARGS_DESC@9868..9871
- L_PAREN@9868..9869 "("
- ARG@9869..9870
- EXPR_VAR@9869..9870
- NAME@9869..9870
- IDENT@9869..9870 "x"
- R_PAREN@9870..9871 ")"
- WHITESPACE@9871..9872 " "
- FOR_SPEC@9872..9882
- FOR_KW@9872..9875 "for"
- WHITESPACE@9875..9876 " "
- NAME@9876..9877
- IDENT@9876..9877 "x"
- WHITESPACE@9877..9878 " "
- IN_KW@9878..9880 "in"
- WHITESPACE@9880..9881 " "
- EXPR_VAR@9881..9882
- NAME@9881..9882
- IDENT@9881..9882 "a"
- WHITESPACE@9882..9883 " "
- IF_SPEC@9883..9907
- IF_KW@9883..9885 "if"
- WHITESPACE@9885..9886 " "
- EXPR_APPLY@9886..9907
- EXPR_VAR@9886..9895
- NAME@9886..9895
- IDENT@9886..9895 "isContent"
- ARGS_DESC@9895..9907
- L_PAREN@9895..9896 "("
- ARG@9896..9906
- EXPR_APPLY@9896..9906
- EXPR_INDEX@9896..9903
- EXPR_LITERAL@9896..9897
- DOLLAR@9896..9897 "$"
- DOT@9897..9898 "."
- NAME@9898..9903
- IDENT@9898..9903 "prune"
- ARGS_DESC@9903..9906
- L_PAREN@9903..9904 "("
- ARG@9904..9905
- EXPR_VAR@9904..9905
- NAME@9904..9905
- IDENT@9904..9905 "x"
- R_PAREN@9905..9906 ")"
- R_PAREN@9906..9907 ")"
- R_BRACK@9907..9908 "]"
- WHITESPACE@9908..9913 "\n "
- ELSE_KW@9913..9917 "else"
- WHITESPACE@9917..9918 " "
- FALSE_EXPR@9918..10058
- EXPR_IF_THEN_ELSE@9918..10058
- IF_KW@9918..9920 "if"
- WHITESPACE@9920..9921 " "
- EXPR_APPLY@9921..9936
- EXPR_INDEX@9921..9933
- EXPR_VAR@9921..9924
- NAME@9921..9924
- IDENT@9921..9924 "std"
- DOT@9924..9925 "."
- NAME@9925..9933
- IDENT@9925..9933 "isObject"
- ARGS_DESC@9933..9936
- L_PAREN@9933..9934 "("
- ARG@9934..9935
- EXPR_VAR@9934..9935
- NAME@9934..9935
- IDENT@9934..9935 "a"
- R_PAREN@9935..9936 ")"
- WHITESPACE@9936..9937 " "
- THEN_KW@9937..9941 "then"
- WHITESPACE@9941..9942 " "
- TRUE_EXPR@9942..10045
- EXPR_OBJECT@9942..10045
- OBJ_BODY_COMP@9942..10045
- L_BRACE@9942..9943 "{"
- WHITESPACE@9943..9950 "\n "
- MEMBER_FIELD_NORMAL@9950..9968
- FIELD_NAME_DYNAMIC@9950..9953
- L_BRACK@9950..9951 "["
- EXPR_VAR@9951..9952
- NAME@9951..9952
- IDENT@9951..9952 "x"
- R_BRACK@9952..9953 "]"
- COLON@9953..9954 ":"
- WHITESPACE@9954..9955 " "
- EXPR_APPLY@9955..9968
- EXPR_INDEX@9955..9962
- EXPR_LITERAL@9955..9956
- DOLLAR@9955..9956 "$"
- DOT@9956..9957 "."
- NAME@9957..9962
- IDENT@9957..9962 "prune"
- ARGS_DESC@9962..9968
- L_PAREN@9962..9963 "("
- ARG@9963..9967
- EXPR_INDEX_EXPR@9963..9967
- LHS_EXPR@9963..9964
- EXPR_VAR@9963..9964
- NAME@9963..9964
- IDENT@9963..9964 "a"
- L_BRACK@9964..9965 "["
- EXPR_VAR@9965..9966
- NAME@9965..9966
- IDENT@9965..9966 "x"
- R_BRACK@9966..9967 "]"
- R_PAREN@9967..9968 ")"
- WHITESPACE@9968..9975 "\n "
- FOR_SPEC@9975..10003
- FOR_KW@9975..9978 "for"
- WHITESPACE@9978..9979 " "
- NAME@9979..9980
- IDENT@9979..9980 "x"
- WHITESPACE@9980..9981 " "
- IN_KW@9981..9983 "in"
- WHITESPACE@9983..9984 " "
- EXPR_APPLY@9984..10003
- EXPR_INDEX@9984..10000
- EXPR_VAR@9984..9987
- NAME@9984..9987
- IDENT@9984..9987 "std"
- DOT@9987..9988 "."
- NAME@9988..10000
- IDENT@9988..10000 "objectFields"
- ARGS_DESC@10000..10003
- L_PAREN@10000..10001 "("
- ARG@10001..10002
- EXPR_VAR@10001..10002
- NAME@10001..10002
- IDENT@10001..10002 "a"
- R_PAREN@10002..10003 ")"
- WHITESPACE@10003..10010 "\n "
- IF_SPEC@10010..10039
- IF_KW@10010..10012 "if"
- WHITESPACE@10012..10013 " "
- EXPR_APPLY@10013..10039
- EXPR_VAR@10013..10022
- NAME@10013..10022
- IDENT@10013..10022 "isContent"
- ARGS_DESC@10022..10039
- L_PAREN@10022..10023 "("
- ARG@10023..10038
- EXPR_APPLY@10023..10038
- EXPR_INDEX@10023..10032
- EXPR_VAR@10023..10026
- NAME@10023..10026
- IDENT@10023..10026 "std"
- DOT@10026..10027 "."
- NAME@10027..10032
- IDENT@10027..10032 "prune"
- ARGS_DESC@10032..10038
- L_PAREN@10032..10033 "("
- ARG@10033..10037
- EXPR_INDEX_EXPR@10033..10037
- LHS_EXPR@10033..10034
- EXPR_VAR@10033..10034
- NAME@10033..10034
- IDENT@10033..10034 "a"
- L_BRACK@10034..10035 "["
- EXPR_VAR@10035..10036
- NAME@10035..10036
- IDENT@10035..10036 "x"
- R_BRACK@10036..10037 "]"
- R_PAREN@10037..10038 ")"
- R_PAREN@10038..10039 ")"
- WHITESPACE@10039..10044 "\n "
- R_BRACE@10044..10045 "}"
- WHITESPACE@10045..10046 " "
- ELSE_KW@10046..10050 "else"
- WHITESPACE@10050..10057 "\n "
- FALSE_EXPR@10057..10058
- EXPR_VAR@10057..10058
- NAME@10057..10058
- IDENT@10057..10058 "a"
- COMMA@10058..10059 ","
- WHITESPACE@10059..10063 "\n\n "
- MEMBER_FIELD_METHOD@10063..10278
- FIELD_NAME_FIXED@10063..10067
- NAME@10063..10067
- IDENT@10063..10067 "find"
- PARAMS_DESC@10067..10079
- L_PAREN@10067..10068 "("
- PARAM@10068..10073
- DESTRUCT_FULL@10068..10073
- NAME@10068..10073
- IDENT@10068..10073 "value"
- COMMA@10073..10074 ","
- WHITESPACE@10074..10075 " "
- PARAM@10075..10078
- DESTRUCT_FULL@10075..10078
- NAME@10075..10078
- IDENT@10075..10078 "arr"
- R_PAREN@10078..10079 ")"
- COLONCOLON@10079..10081 "::"
- WHITESPACE@10081..10086 "\n "
- EXPR_IF_THEN_ELSE@10086..10278
- IF_KW@10086..10088 "if"
- WHITESPACE@10088..10089 " "
- EXPR_UNARY@10089..10106
- NOT@10089..10090 "!"
- EXPR_APPLY@10090..10106
- EXPR_INDEX@10090..10101
- EXPR_VAR@10090..10093
- NAME@10090..10093
- IDENT@10090..10093 "std"
- DOT@10093..10094 "."
- NAME@10094..10101
- IDENT@10094..10101 "isArray"
- ARGS_DESC@10101..10106
- L_PAREN@10101..10102 "("
- ARG@10102..10105
- EXPR_VAR@10102..10105
- NAME@10102..10105
- IDENT@10102..10105 "arr"
- R_PAREN@10105..10106 ")"
- WHITESPACE@10106..10107 " "
- THEN_KW@10107..10111 "then"
- WHITESPACE@10111..10118 "\n "
- TRUE_EXPR@10118..10188
- EXPR_ERROR@10118..10188
- ERROR_KW@10118..10123 "error"
- WHITESPACE@10123..10124 " "
- EXPR_BINARY@10124..10188
- LHS_EXPR@10124..10172
- EXPR_STRING@10124..10172
- STRING_SINGLE@10124..10172 "'find second paramete ..."
- WHITESPACE@10172..10173 " "
- PLUS@10173..10174 "+"
- WHITESPACE@10174..10175 " "
- EXPR_APPLY@10175..10188
- EXPR_INDEX@10175..10183
- EXPR_VAR@10175..10178
- NAME@10175..10178
- IDENT@10175..10178 "std"
- DOT@10178..10179 "."
- NAME@10179..10183
- IDENT@10179..10183 "type"
- ARGS_DESC@10183..10188
- L_PAREN@10183..10184 "("
- ARG@10184..10187
- EXPR_VAR@10184..10187
- NAME@10184..10187
- IDENT@10184..10187 "arr"
- R_PAREN@10187..10188 ")"
- WHITESPACE@10188..10193 "\n "
- ELSE_KW@10193..10197 "else"
- WHITESPACE@10197..10204 "\n "
- FALSE_EXPR@10204..10278
- EXPR_APPLY@10204..10278
- EXPR_INDEX@10204..10214
- EXPR_VAR@10204..10207
- NAME@10204..10207
- IDENT@10204..10207 "std"
- DOT@10207..10208 "."
- NAME@10208..10214
- IDENT@10208..10214 "filter"
- ARGS_DESC@10214..10278
- L_PAREN@10214..10215 "("
- ARG@10215..10242
- EXPR_FUNCTION@10215..10242
- FUNCTION_KW@10215..10223 "function"
- PARAMS_DESC@10223..10226
- L_PAREN@10223..10224 "("
- PARAM@10224..10225
- DESTRUCT_FULL@10224..10225
- NAME@10224..10225
- IDENT@10224..10225 "i"
- R_PAREN@10225..10226 ")"
- WHITESPACE@10226..10227 " "
- EXPR_BINARY@10227..10242
- LHS_EXPR@10227..10233
- EXPR_INDEX_EXPR@10227..10233
- LHS_EXPR@10227..10230
- EXPR_VAR@10227..10230
- NAME@10227..10230
- IDENT@10227..10230 "arr"
- L_BRACK@10230..10231 "["
- EXPR_VAR@10231..10232
- NAME@10231..10232
- IDENT@10231..10232 "i"
- R_BRACK@10232..10233 "]"
- WHITESPACE@10233..10234 " "
- EQ@10234..10236 "=="
- WHITESPACE@10236..10237 " "
- EXPR_VAR@10237..10242
- NAME@10237..10242
- IDENT@10237..10242 "value"
- COMMA@10242..10243 ","
- WHITESPACE@10243..10244 " "
- ARG@10244..10277
- EXPR_APPLY@10244..10277
- EXPR_INDEX@10244..10253
- EXPR_VAR@10244..10247
- NAME@10244..10247
- IDENT@10244..10247 "std"
- DOT@10247..10248 "."
- NAME@10248..10253
- IDENT@10248..10253 "range"
- ARGS_DESC@10253..10277
- L_PAREN@10253..10254 "("
- ARG@10254..10255
- EXPR_NUMBER@10254..10255
- FLOAT@10254..10255 "0"
- COMMA@10255..10256 ","
- WHITESPACE@10256..10257 " "
- ARG@10257..10276
- EXPR_BINARY@10257..10276
- LHS_EXPR@10257..10272
- EXPR_APPLY@10257..10272
- EXPR_INDEX@10257..10267
- EXPR_VAR@10257..10260
- NAME@10257..10260
- IDENT@10257..10260 "std"
- DOT@10260..10261 "."
- NAME@10261..10267
- IDENT@10261..10267 "length"
- ARGS_DESC@10267..10272
- L_PAREN@10267..10268 "("
- ARG@10268..10271
- EXPR_VAR@10268..10271
- NAME@10268..10271
- IDENT@10268..10271 "arr"
- R_PAREN@10271..10272 ")"
- WHITESPACE@10272..10273 " "
- MINUS@10273..10274 "-"
- WHITESPACE@10274..10275 " "
- EXPR_NUMBER@10275..10276
- FLOAT@10275..10276 "1"
- R_PAREN@10276..10277 ")"
- R_PAREN@10277..10278 ")"
- COMMA@10278..10279 ","
- WHITESPACE@10279..10280 "\n"
- R_BRACE@10280..10281 "}"
- WHITESPACE@10281..10282 "\n"
+ EQ@9626..9628 "=="
+ WHITESPACE@9628..9629 " "
+ EXPR_UNARY@9629..9631
+ MINUS@9629..9630 "-"
+ EXPR_NUMBER@9630..9631
+ FLOAT@9630..9631 "1"
+ COMMA@9631..9632 ","
+ WHITESPACE@9632..9635 "\n "
+ MEMBER_FIELD_METHOD@9635..9701
+ FIELD_NAME_FIXED@9635..9650
+ NAME@9635..9650
+ IDENT@9635..9650 "__array_greater"
+ PARAMS_DESC@9650..9662
+ L_PAREN@9650..9651 "("
+ PARAM@9651..9655
+ DESTRUCT_FULL@9651..9655
+ NAME@9651..9655
+ IDENT@9651..9655 "arr1"
+ COMMA@9655..9656 ","
+ WHITESPACE@9656..9657 " "
+ PARAM@9657..9661
+ DESTRUCT_FULL@9657..9661
+ NAME@9657..9661
+ IDENT@9657..9661 "arr2"
+ R_PAREN@9661..9662 ")"
+ COLONCOLON@9662..9664 "::"
+ WHITESPACE@9664..9665 " "
+ EXPR_BINARY@9665..9701
+ LHS_EXPR@9665..9696
+ EXPR_APPLY@9665..9696
+ EXPR_INDEX@9665..9684
+ EXPR_VAR@9665..9668
+ NAME@9665..9668
+ IDENT@9665..9668 "std"
+ DOT@9668..9669 "."
+ NAME@9669..9684
+ IDENT@9669..9684 "__compare_array"
+ ARGS_DESC@9684..9696
+ L_PAREN@9684..9685 "("
+ ARG@9685..9689
+ EXPR_VAR@9685..9689
+ NAME@9685..9689
+ IDENT@9685..9689 "arr1"
+ COMMA@9689..9690 ","
+ WHITESPACE@9690..9691 " "
+ ARG@9691..9695
+ EXPR_VAR@9691..9695
+ NAME@9691..9695
+ IDENT@9691..9695 "arr2"
+ R_PAREN@9695..9696 ")"
+ WHITESPACE@9696..9697 " "
+ EQ@9697..9699 "=="
+ WHITESPACE@9699..9700 " "
+ EXPR_NUMBER@9700..9701
+ FLOAT@9700..9701 "1"
+ COMMA@9701..9702 ","
+ WHITESPACE@9702..9705 "\n "
+ MEMBER_FIELD_METHOD@9705..9777
+ FIELD_NAME_FIXED@9705..9726
+ NAME@9705..9726
+ IDENT@9705..9726 "__array_less_or_equal"
+ PARAMS_DESC@9726..9738
+ L_PAREN@9726..9727 "("
+ PARAM@9727..9731
+ DESTRUCT_FULL@9727..9731
+ NAME@9727..9731
+ IDENT@9727..9731 "arr1"
+ COMMA@9731..9732 ","
+ WHITESPACE@9732..9733 " "
+ PARAM@9733..9737
+ DESTRUCT_FULL@9733..9737
+ NAME@9733..9737
+ IDENT@9733..9737 "arr2"
+ R_PAREN@9737..9738 ")"
+ COLONCOLON@9738..9740 "::"
+ WHITESPACE@9740..9741 " "
+ EXPR_BINARY@9741..9777
+ LHS_EXPR@9741..9772
+ EXPR_APPLY@9741..9772
+ EXPR_INDEX@9741..9760
+ EXPR_VAR@9741..9744
+ NAME@9741..9744
+ IDENT@9741..9744 "std"
+ DOT@9744..9745 "."
+ NAME@9745..9760
+ IDENT@9745..9760 "__compare_array"
+ ARGS_DESC@9760..9772
+ L_PAREN@9760..9761 "("
+ ARG@9761..9765
+ EXPR_VAR@9761..9765
+ NAME@9761..9765
+ IDENT@9761..9765 "arr1"
+ COMMA@9765..9766 ","
+ WHITESPACE@9766..9767 " "
+ ARG@9767..9771
+ EXPR_VAR@9767..9771
+ NAME@9767..9771
+ IDENT@9767..9771 "arr2"
+ R_PAREN@9771..9772 ")"
+ WHITESPACE@9772..9773 " "
+ LE@9773..9775 "<="
+ WHITESPACE@9775..9776 " "
+ EXPR_NUMBER@9776..9777
+ FLOAT@9776..9777 "0"
+ COMMA@9777..9778 ","
+ WHITESPACE@9778..9781 "\n "
+ MEMBER_FIELD_METHOD@9781..9856
+ FIELD_NAME_FIXED@9781..9805
+ NAME@9781..9805
+ IDENT@9781..9805 "__array_greater_or_equal"
+ PARAMS_DESC@9805..9817
+ L_PAREN@9805..9806 "("
+ PARAM@9806..9810
+ DESTRUCT_FULL@9806..9810
+ NAME@9806..9810
+ IDENT@9806..9810 "arr1"
+ COMMA@9810..9811 ","
+ WHITESPACE@9811..9812 " "
+ PARAM@9812..9816
+ DESTRUCT_FULL@9812..9816
+ NAME@9812..9816
+ IDENT@9812..9816 "arr2"
+ R_PAREN@9816..9817 ")"
+ COLONCOLON@9817..9819 "::"
+ WHITESPACE@9819..9820 " "
+ EXPR_BINARY@9820..9856
+ LHS_EXPR@9820..9851
+ EXPR_APPLY@9820..9851
+ EXPR_INDEX@9820..9839
+ EXPR_VAR@9820..9823
+ NAME@9820..9823
+ IDENT@9820..9823 "std"
+ DOT@9823..9824 "."
+ NAME@9824..9839
+ IDENT@9824..9839 "__compare_array"
+ ARGS_DESC@9839..9851
+ L_PAREN@9839..9840 "("
+ ARG@9840..9844
+ EXPR_VAR@9840..9844
+ NAME@9840..9844
+ IDENT@9840..9844 "arr1"
+ COMMA@9844..9845 ","
+ WHITESPACE@9845..9846 " "
+ ARG@9846..9850
+ EXPR_VAR@9846..9850
+ NAME@9846..9850
+ IDENT@9846..9850 "arr2"
+ R_PAREN@9850..9851 ")"
+ WHITESPACE@9851..9852 " "
+ GE@9852..9854 ">="
+ WHITESPACE@9854..9855 " "
+ EXPR_NUMBER@9855..9856
+ FLOAT@9855..9856 "0"
+ COMMA@9856..9857 ","
+ WHITESPACE@9857..9858 "\n"
+ R_BRACE@9858..9859 "}"
+ WHITESPACE@9859..9860 "\n"
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__unexpected_destruct.snapdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__unexpected_destruct.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__unexpected_destruct.snap
@@ -3,7 +3,7 @@
expression: "local * = 1;\na\n"
---
SOURCE_FILE@0..15
- EXPR_LOCAL@0..14
+ STMT_LOCAL@0..12
LOCAL_KW@0..5 "local"
WHITESPACE@5..6 " "
BIND_DESTRUCT@6..11
@@ -15,10 +15,10 @@
EXPR_NUMBER@10..11
FLOAT@10..11 "1"
SEMI@11..12 ";"
- WHITESPACE@12..13 "\n"
- EXPR_VAR@13..14
- NAME@13..14
- IDENT@13..14 "a"
+ WHITESPACE@12..13 "\n"
+ EXPR_VAR@13..14
+ NAME@13..14
+ IDENT@13..14 "a"
WHITESPACE@14..15 "\n"
===
LocatedSyntaxError { error: Unexpected { expected: Named("destruction specifier"), found: MUL }, range: 6..7 }
crates/jrsonnet-rowan-parser/src/tests.rsdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/tests.rs
+++ b/crates/jrsonnet-rowan-parser/src/tests.rs
@@ -244,3 +244,10 @@
let result = process(src);
insta::assert_snapshot!("stdlib", result, src);
}
+#[test]
+fn eval_simple() {
+ let src = "local a = 1, b = 2; a + local c = 1; c";
+ let (node, errors) = parse(src);
+
+ dbg!(node);
+}
flake.nixdiffbeforeafterboth--- a/flake.nix
+++ b/flake.nix
@@ -132,6 +132,7 @@
cargo-asm
cargo-outdated
cargo-watch
+ cargo-insta
lld
hyperfine
graphviz