SOURCE_FILE@[0; 575)
  FN_DEF@[0; 574)
    FN_KW@[0; 2) "fn"
    WHITESPACE@[2; 3) " "
    NAME@[3; 7)
      IDENT@[3; 7) "main"
    PARAM_LIST@[7; 9)
      L_PAREN@[7; 8) "("
      R_PAREN@[8; 9) ")"
    WHITESPACE@[9; 10) " "
    BLOCK@[10; 574)
      L_CURLY@[10; 11) "{"
      WHITESPACE@[11; 16) "\n    "
      ENUM_DEF@[16; 152)
        ENUM_KW@[16; 20) "enum"
        WHITESPACE@[20; 21) " "
        NAME@[21; 25)
          IDENT@[21; 25) "Test"
        WHITESPACE@[25; 26) " "
        ENUM_VARIANT_LIST@[26; 152)
          L_CURLY@[26; 27) "{"
          WHITESPACE@[27; 36) "\n        "
          ENUM_VARIANT@[36; 40)
            NAME@[36; 40)
              IDENT@[36; 40) "Var1"
          COMMA@[40; 41) ","
          WHITESPACE@[41; 50) "\n        "
          ENUM_VARIANT@[50; 62)
            NAME@[50; 54)
              IDENT@[50; 54) "Var2"
            POS_FIELD_DEF_LIST@[54; 62)
              L_PAREN@[54; 55) "("
              POS_FIELD_DEF@[55; 61)
                PATH_TYPE@[55; 61)
                  PATH@[55; 61)
                    PATH_SEGMENT@[55; 61)
                      NAME_REF@[55; 61)
                        IDENT@[55; 61) "String"
              R_PAREN@[61; 62) ")"
          COMMA@[62; 63) ","
          WHITESPACE@[63; 72) "\n        "
          ENUM_VARIANT@[72; 145)
            NAME@[72; 76)
              IDENT@[72; 76) "Var3"
            WHITESPACE@[76; 77) " "
            NAMED_FIELD_DEF_LIST@[77; 145)
              L_CURLY@[77; 78) "{"
              WHITESPACE@[78; 91) "\n            "
              NAMED_FIELD_DEF@[91; 95)
                NAME@[91; 94)
                  IDENT@[91; 94) "abc"
                COLON@[94; 95) ":"
                err: `expected type`
                err: `expected COMMA`
              WHITESPACE@[95; 96) " "
              err: `expected field`
              ERROR@[96; 98)
                L_CURLY@[96; 97) "{"
                R_CURLY@[97; 98) "}"
                err: `expected field declaration`
              ERROR@[98; 99)
                COMMA@[98; 99) ","
              WHITESPACE@[99; 100) " "
              COMMENT@[100; 135) "//~ ERROR: expected t ..."
              WHITESPACE@[135; 144) "\n        "
              R_CURLY@[144; 145) "}"
          COMMA@[145; 146) ","
          WHITESPACE@[146; 151) "\n    "
          R_CURLY@[151; 152) "}"
      WHITESPACE@[152; 158) "\n\n    "
      COMMENT@[158; 171) "// recover..."
      WHITESPACE@[171; 176) "\n    "
      LET_STMT@[176; 186)
        LET_KW@[176; 179) "let"
        WHITESPACE@[179; 180) " "
        BIND_PAT@[180; 181)
          NAME@[180; 181)
            IDENT@[180; 181) "a"
        WHITESPACE@[181; 182) " "
        EQ@[182; 183) "="
        WHITESPACE@[183; 184) " "
        LITERAL@[184; 185)
          INT_NUMBER@[184; 185) "1"
        SEMI@[185; 186) ";"
      WHITESPACE@[186; 191) "\n    "
      ENUM_DEF@[191; 223)
        ENUM_KW@[191; 195) "enum"
        WHITESPACE@[195; 196) " "
        NAME@[196; 201)
          IDENT@[196; 201) "Test2"
        WHITESPACE@[201; 202) " "
        ENUM_VARIANT_LIST@[202; 223)
          L_CURLY@[202; 203) "{"
          WHITESPACE@[203; 212) "\n        "
          ENUM_VARIANT@[212; 216)
            NAME@[212; 216)
              IDENT@[212; 216) "Fine"
          COMMA@[216; 217) ","
          WHITESPACE@[217; 222) "\n    "
          R_CURLY@[222; 223) "}"
      WHITESPACE@[223; 229) "\n\n    "
      ENUM_DEF@[229; 300)
        ENUM_KW@[229; 233) "enum"
        WHITESPACE@[233; 234) " "
        NAME@[234; 239)
          IDENT@[234; 239) "Test3"
        WHITESPACE@[239; 240) " "
        ENUM_VARIANT_LIST@[240; 300)
          L_CURLY@[240; 241) "{"
          WHITESPACE@[241; 250) "\n        "
          ENUM_VARIANT@[250; 293)
            NAME@[250; 259)
              IDENT@[250; 259) "StillFine"
            WHITESPACE@[259; 260) " "
            NAMED_FIELD_DEF_LIST@[260; 293)
              L_CURLY@[260; 261) "{"
              WHITESPACE@[261; 274) "\n            "
              NAMED_FIELD_DEF@[274; 282)
                NAME@[274; 277)
                  IDENT@[274; 277) "def"
                COLON@[277; 278) ":"
                WHITESPACE@[278; 279) " "
                PATH_TYPE@[279; 282)
                  PATH@[279; 282)
                    PATH_SEGMENT@[279; 282)
                      NAME_REF@[279; 282)
                        IDENT@[279; 282) "i32"
              COMMA@[282; 283) ","
              WHITESPACE@[283; 292) "\n        "
              R_CURLY@[292; 293) "}"
          COMMA@[293; 294) ","
          WHITESPACE@[294; 299) "\n    "
          R_CURLY@[299; 300) "}"
      WHITESPACE@[300; 306) "\n\n    "
      EXPR_STMT@[306; 459)
        BLOCK_EXPR@[306; 459)
          BLOCK@[306; 459)
            L_CURLY@[306; 307) "{"
            WHITESPACE@[307; 316) "\n        "
            ENUM_DEF@[316; 453)
              COMMENT@[316; 329) "// fail again"
              WHITESPACE@[329; 338) "\n        "
              ENUM_KW@[338; 342) "enum"
              WHITESPACE@[342; 343) " "
              NAME@[343; 348)
                IDENT@[343; 348) "Test4"
              WHITESPACE@[348; 349) " "
              ENUM_VARIANT_LIST@[349; 453)
                L_CURLY@[349; 350) "{"
                WHITESPACE@[350; 363) "\n            "
                ENUM_VARIANT@[363; 372)
                  NAME@[363; 367)
                    IDENT@[363; 367) "Nope"
                  POS_FIELD_DEF_LIST@[367; 372)
                    L_PAREN@[367; 368) "("
                    POS_FIELD_DEF@[368; 371)
                      PATH_TYPE@[368; 371)
                        PATH@[368; 371)
                          PATH_SEGMENT@[368; 371)
                            NAME_REF@[368; 371)
                              IDENT@[368; 371) "i32"
                              err: `expected COMMA`
                    WHITESPACE@[371; 372) " "
                    err: `expected a type`
                    err: `expected R_PAREN`
                    err: `expected COMMA`
                    err: `expected enum variant`
                    ERROR@[372; 372)
                ERROR@[372; 374)
                  L_CURLY@[372; 373) "{"
                  R_CURLY@[373; 374) "}"
                  err: `expected enum variant`
                ERROR@[374; 375)
                  R_PAREN@[374; 375) ")"
                WHITESPACE@[375; 376) " "
                COMMENT@[376; 396) "//~ ERROR: found `{`"
                WHITESPACE@[396; 422) "\n                     ..."
                COMMENT@[422; 443) "//~^ ERROR: found `{`"
                WHITESPACE@[443; 452) "\n        "
                R_CURLY@[452; 453) "}"
            WHITESPACE@[453; 458) "\n    "
            R_CURLY@[458; 459) "}"
      WHITESPACE@[459; 464) "\n    "
      COMMENT@[464; 486) "// still recover later"
      WHITESPACE@[486; 491) "\n    "
      LET_STMT@[491; 510)
        LET_KW@[491; 494) "let"
        WHITESPACE@[494; 495) " "
        BIND_PAT@[495; 505)
          NAME@[495; 505)
            IDENT@[495; 505) "bad_syntax"
        WHITESPACE@[505; 506) " "
        EQ@[506; 507) "="
        WHITESPACE@[507; 508) " "
        err: `expected expression`
        ERROR@[508; 509)
          UNDERSCORE@[508; 509) "_"
        SEMI@[509; 510) ";"
      WHITESPACE@[510; 511) " "
      COMMENT@[511; 572) "//~ ERROR: expected e ..."
      WHITESPACE@[572; 573) "\n"
      R_CURLY@[573; 574) "}"
  WHITESPACE@[574; 575) "\n"