rust/crates/syntax/test_data/parser/ok/0035_weird_exprs.rast
Aleksey Kladov 2bf81922f7 internal: more reasonable grammar for blocks
Consider these expples

        { 92 }
  async { 92 }
    'a: { 92 }
   #[a] { 92 }

Previously the tree for them were

  BLOCK_EXPR
    { ... }

  EFFECT_EXPR
    async
    BLOCK_EXPR
      { ... }

  EFFECT_EXPR
    'a:
    BLOCK_EXPR
      { ... }

  BLOCK_EXPR
    #[a]
    { ... }

As you see, it gets progressively worse :) The last two items are
especially odd. The last one even violates the balanced curleys
invariant we have (#10357) The new approach is to say that the stuff in
`{}` is stmt_list, and the block is stmt_list + optional modifiers

  BLOCK_EXPR
    STMT_LIST
      { ... }

  BLOCK_EXPR
    async
    STMT_LIST
      { ... }

  BLOCK_EXPR
    'a:
    STMT_LIST
      { ... }

  BLOCK_EXPR
    #[a]
    STMT_LIST
      { ... }
2021-09-26 19:16:09 +03:00

2338 lines
117 KiB
Plaintext

SOURCE_FILE@0..3813
COMMENT@0..55 "//! Adapted from a `r ..."
WHITESPACE@55..56 "\n"
COMMENT@56..173 "//! https://github.co ..."
WHITESPACE@173..174 "\n"
COMMENT@174..178 "//! "
WHITESPACE@178..179 "\n"
COMMENT@179..269 "//! Reported to rust- ..."
WHITESPACE@269..271 "\n\n"
ATTR@271..302
POUND@271..272 "#"
BANG@272..273 "!"
L_BRACK@273..274 "["
META@274..301
PATH@274..279
PATH_SEGMENT@274..279
NAME_REF@274..279
IDENT@274..279 "allow"
TOKEN_TREE@279..301
L_PAREN@279..280 "("
IDENT@280..300 "non_camel_case_types"
R_PAREN@300..301 ")"
R_BRACK@301..302 "]"
WHITESPACE@302..303 "\n"
ATTR@303..323
POUND@303..304 "#"
BANG@304..305 "!"
L_BRACK@305..306 "["
META@306..322
PATH@306..311
PATH_SEGMENT@306..311
NAME_REF@306..311
IDENT@306..311 "allow"
TOKEN_TREE@311..322
L_PAREN@311..312 "("
IDENT@312..321 "dead_code"
R_PAREN@321..322 ")"
R_BRACK@322..323 "]"
WHITESPACE@323..324 "\n"
ATTR@324..351
POUND@324..325 "#"
BANG@325..326 "!"
L_BRACK@326..327 "["
META@327..350
PATH@327..332
PATH_SEGMENT@327..332
NAME_REF@327..332
IDENT@327..332 "allow"
TOKEN_TREE@332..350
L_PAREN@332..333 "("
IDENT@333..349 "unreachable_code"
R_PAREN@349..350 ")"
R_BRACK@350..351 "]"
WHITESPACE@351..352 "\n"
ATTR@352..376
POUND@352..353 "#"
BANG@353..354 "!"
L_BRACK@354..355 "["
META@355..375
PATH@355..360
PATH_SEGMENT@355..360
NAME_REF@355..360
IDENT@355..360 "allow"
TOKEN_TREE@360..375
L_PAREN@360..361 "("
IDENT@361..374 "unused_parens"
R_PAREN@374..375 ")"
R_BRACK@375..376 "]"
WHITESPACE@376..378 "\n\n"
ATTR@378..405
POUND@378..379 "#"
BANG@379..380 "!"
L_BRACK@380..381 "["
META@381..404
PATH@381..396
PATH_SEGMENT@381..396
NAME_REF@381..396
IDENT@381..396 "recursion_limit"
WHITESPACE@396..397 " "
EQ@397..398 "="
WHITESPACE@398..399 " "
LITERAL@399..404
STRING@399..404 "\"128\""
R_BRACK@404..405 "]"
WHITESPACE@405..407 "\n\n"
USE@407..427
USE_KW@407..410 "use"
WHITESPACE@410..411 " "
USE_TREE@411..426
PATH@411..426
PATH@411..420
PATH@411..414
PATH_SEGMENT@411..414
NAME_REF@411..414
IDENT@411..414 "std"
COLON2@414..416 "::"
PATH_SEGMENT@416..420
NAME_REF@416..420
IDENT@416..420 "cell"
COLON2@420..422 "::"
PATH_SEGMENT@422..426
NAME_REF@422..426
IDENT@422..426 "Cell"
SEMICOLON@426..427 ";"
WHITESPACE@427..428 "\n"
USE@428..447
USE_KW@428..431 "use"
WHITESPACE@431..432 " "
USE_TREE@432..446
PATH@432..446
PATH@432..440
PATH@432..435
PATH_SEGMENT@432..435
NAME_REF@432..435
IDENT@432..435 "std"
COLON2@435..437 "::"
PATH_SEGMENT@437..440
NAME_REF@437..440
IDENT@437..440 "mem"
COLON2@440..442 "::"
PATH_SEGMENT@442..446
NAME_REF@442..446
IDENT@442..446 "swap"
SEMICOLON@446..447 ";"
WHITESPACE@447..449 "\n\n"
COMMENT@449..518 "// Just a grab bag of ..."
WHITESPACE@518..520 "\n\n"
FN@520..572
FN_KW@520..522 "fn"
WHITESPACE@522..523 " "
NAME@523..530
IDENT@523..530 "strange"
PARAM_LIST@530..532
L_PAREN@530..531 "("
R_PAREN@531..532 ")"
WHITESPACE@532..533 " "
RET_TYPE@533..540
THIN_ARROW@533..535 "->"
WHITESPACE@535..536 " "
PATH_TYPE@536..540
PATH@536..540
PATH_SEGMENT@536..540
NAME_REF@536..540
IDENT@536..540 "bool"
WHITESPACE@540..541 " "
BLOCK_EXPR@541..572
STMT_LIST@541..572
L_CURLY@541..542 "{"
WHITESPACE@542..543 " "
LET_STMT@543..570
LET_KW@543..546 "let"
WHITESPACE@546..547 " "
IDENT_PAT@547..549
NAME@547..549
IDENT@547..549 "_x"
COLON@549..550 ":"
WHITESPACE@550..551 " "
PATH_TYPE@551..555
PATH@551..555
PATH_SEGMENT@551..555
NAME_REF@551..555
IDENT@551..555 "bool"
WHITESPACE@555..556 " "
EQ@556..557 "="
WHITESPACE@557..558 " "
RETURN_EXPR@558..569
RETURN_KW@558..564 "return"
WHITESPACE@564..565 " "
LITERAL@565..569
TRUE_KW@565..569 "true"
SEMICOLON@569..570 ";"
WHITESPACE@570..571 " "
R_CURLY@571..572 "}"
WHITESPACE@572..574 "\n\n"
FN@574..624
FN_KW@574..576 "fn"
WHITESPACE@576..577 " "
NAME@577..582
IDENT@577..582 "funny"
PARAM_LIST@582..584
L_PAREN@582..583 "("
R_PAREN@583..584 ")"
WHITESPACE@584..585 " "
BLOCK_EXPR@585..624
STMT_LIST@585..624
L_CURLY@585..586 "{"
WHITESPACE@586..591 "\n "
FN@591..607
FN_KW@591..593 "fn"
WHITESPACE@593..594 " "
NAME@594..595
IDENT@594..595 "f"
PARAM_LIST@595..603
L_PAREN@595..596 "("
PARAM@596..602
IDENT_PAT@596..598
NAME@596..598
IDENT@596..598 "_x"
COLON@598..599 ":"
WHITESPACE@599..600 " "
TUPLE_TYPE@600..602
L_PAREN@600..601 "("
R_PAREN@601..602 ")"
R_PAREN@602..603 ")"
WHITESPACE@603..604 " "
BLOCK_EXPR@604..607
STMT_LIST@604..607
L_CURLY@604..605 "{"
WHITESPACE@605..606 " "
R_CURLY@606..607 "}"
WHITESPACE@607..612 "\n "
EXPR_STMT@612..622
CALL_EXPR@612..621
PATH_EXPR@612..613
PATH@612..613
PATH_SEGMENT@612..613
NAME_REF@612..613
IDENT@612..613 "f"
ARG_LIST@613..621
L_PAREN@613..614 "("
RETURN_EXPR@614..620
RETURN_KW@614..620 "return"
R_PAREN@620..621 ")"
SEMICOLON@621..622 ";"
WHITESPACE@622..623 "\n"
R_CURLY@623..624 "}"
WHITESPACE@624..626 "\n\n"
FN@626..816
FN_KW@626..628 "fn"
WHITESPACE@628..629 " "
NAME@629..633
IDENT@629..633 "what"
PARAM_LIST@633..635
L_PAREN@633..634 "("
R_PAREN@634..635 ")"
WHITESPACE@635..636 " "
BLOCK_EXPR@636..816
STMT_LIST@636..816
L_CURLY@636..637 "{"
WHITESPACE@637..642 "\n "
FN@642..720
FN_KW@642..644 "fn"
WHITESPACE@644..645 " "
NAME@645..648
IDENT@645..648 "the"
PARAM_LIST@648..664
L_PAREN@648..649 "("
PARAM@649..663
IDENT_PAT@649..650
NAME@649..650
IDENT@649..650 "x"
COLON@650..651 ":"
WHITESPACE@651..652 " "
REF_TYPE@652..663
AMP@652..653 "&"
PATH_TYPE@653..663
PATH@653..663
PATH_SEGMENT@653..663
NAME_REF@653..657
IDENT@653..657 "Cell"
GENERIC_ARG_LIST@657..663
L_ANGLE@657..658 "<"
TYPE_ARG@658..662
PATH_TYPE@658..662
PATH@658..662
PATH_SEGMENT@658..662
NAME_REF@658..662
IDENT@658..662 "bool"
R_ANGLE@662..663 ">"
R_PAREN@663..664 ")"
WHITESPACE@664..665 " "
BLOCK_EXPR@665..720
STMT_LIST@665..720
L_CURLY@665..666 "{"
WHITESPACE@666..675 "\n "
EXPR_STMT@675..714
RETURN_EXPR@675..713
RETURN_KW@675..681 "return"
WHITESPACE@681..682 " "
WHILE_EXPR@682..713
WHILE_KW@682..687 "while"
WHITESPACE@687..688 " "
CONDITION@688..696
PREFIX_EXPR@688..696
BANG@688..689 "!"
METHOD_CALL_EXPR@689..696
PATH_EXPR@689..690
PATH@689..690
PATH_SEGMENT@689..690
NAME_REF@689..690
IDENT@689..690 "x"
DOT@690..691 "."
NAME_REF@691..694
IDENT@691..694 "get"
ARG_LIST@694..696
L_PAREN@694..695 "("
R_PAREN@695..696 ")"
WHITESPACE@696..697 " "
BLOCK_EXPR@697..713
STMT_LIST@697..713
L_CURLY@697..698 "{"
WHITESPACE@698..699 " "
EXPR_STMT@699..711
METHOD_CALL_EXPR@699..710
PATH_EXPR@699..700
PATH@699..700
PATH_SEGMENT@699..700
NAME_REF@699..700
IDENT@699..700 "x"
DOT@700..701 "."
NAME_REF@701..704
IDENT@701..704 "set"
ARG_LIST@704..710
L_PAREN@704..705 "("
LITERAL@705..709
TRUE_KW@705..709 "true"
R_PAREN@709..710 ")"
SEMICOLON@710..711 ";"
WHITESPACE@711..712 " "
R_CURLY@712..713 "}"
SEMICOLON@713..714 ";"
WHITESPACE@714..719 "\n "
R_CURLY@719..720 "}"
WHITESPACE@720..725 "\n "
LET_STMT@725..751
LET_KW@725..728 "let"
WHITESPACE@728..729 " "
IDENT_PAT@729..730
NAME@729..730
IDENT@729..730 "i"
WHITESPACE@730..731 " "
EQ@731..732 "="
WHITESPACE@732..733 " "
REF_EXPR@733..750
AMP@733..734 "&"
CALL_EXPR@734..750
PATH_EXPR@734..743
PATH@734..743
PATH@734..738
PATH_SEGMENT@734..738
NAME_REF@734..738
IDENT@734..738 "Cell"
COLON2@738..740 "::"
PATH_SEGMENT@740..743
NAME_REF@740..743
IDENT@740..743 "new"
ARG_LIST@743..750
L_PAREN@743..744 "("
LITERAL@744..749
FALSE_KW@744..749 "false"
R_PAREN@749..750 ")"
SEMICOLON@750..751 ";"
WHITESPACE@751..756 "\n "
LET_STMT@756..778
LET_KW@756..759 "let"
WHITESPACE@759..760 " "
IDENT_PAT@760..764
NAME@760..764
IDENT@760..764 "dont"
WHITESPACE@764..765 " "
EQ@765..766 "="
WHITESPACE@766..767 " "
BLOCK_EXPR@767..777
STMT_LIST@767..777
L_CURLY@767..768 "{"
CLOSURE_EXPR@768..776
PARAM_LIST@768..770
PIPE@768..769 "|"
PIPE@769..770 "|"
CALL_EXPR@770..776
PATH_EXPR@770..773
PATH@770..773
PATH_SEGMENT@770..773
NAME_REF@770..773
IDENT@770..773 "the"
ARG_LIST@773..776
L_PAREN@773..774 "("
PATH_EXPR@774..775
PATH@774..775
PATH_SEGMENT@774..775
NAME_REF@774..775
IDENT@774..775 "i"
R_PAREN@775..776 ")"
R_CURLY@776..777 "}"
SEMICOLON@777..778 ";"
WHITESPACE@778..783 "\n "
EXPR_STMT@783..790
CALL_EXPR@783..789
PATH_EXPR@783..787
PATH@783..787
PATH_SEGMENT@783..787
NAME_REF@783..787
IDENT@783..787 "dont"
ARG_LIST@787..789
L_PAREN@787..788 "("
R_PAREN@788..789 ")"
SEMICOLON@789..790 ";"
WHITESPACE@790..795 "\n "
EXPR_STMT@795..814
MACRO_CALL@795..813
PATH@795..801
PATH_SEGMENT@795..801
NAME_REF@795..801
IDENT@795..801 "assert"
BANG@801..802 "!"
TOKEN_TREE@802..813
L_PAREN@802..803 "("
TOKEN_TREE@803..812
L_PAREN@803..804 "("
IDENT@804..805 "i"
DOT@805..806 "."
IDENT@806..809 "get"
TOKEN_TREE@809..811
L_PAREN@809..810 "("
R_PAREN@810..811 ")"
R_PAREN@811..812 ")"
R_PAREN@812..813 ")"
SEMICOLON@813..814 ";"
WHITESPACE@814..815 "\n"
R_CURLY@815..816 "}"
WHITESPACE@816..818 "\n\n"
FN@818..1322
FN_KW@818..820 "fn"
WHITESPACE@820..821 " "
NAME@821..832
IDENT@821..832 "zombiejesus"
PARAM_LIST@832..834
L_PAREN@832..833 "("
R_PAREN@833..834 ")"
WHITESPACE@834..835 " "
BLOCK_EXPR@835..1322
STMT_LIST@835..1322
L_CURLY@835..836 "{"
WHITESPACE@836..841 "\n "
LOOP_EXPR@841..1320
LOOP_KW@841..845 "loop"
WHITESPACE@845..846 " "
BLOCK_EXPR@846..1320
STMT_LIST@846..1320
L_CURLY@846..847 "{"
WHITESPACE@847..856 "\n "
EXPR_STMT@856..1283
WHILE_EXPR@856..1283
WHILE_KW@856..861 "while"
WHITESPACE@861..862 " "
CONDITION@862..870
PAREN_EXPR@862..870
L_PAREN@862..863 "("
RETURN_EXPR@863..869
RETURN_KW@863..869 "return"
R_PAREN@869..870 ")"
WHITESPACE@870..871 " "
BLOCK_EXPR@871..1283
STMT_LIST@871..1283
L_CURLY@871..872 "{"
WHITESPACE@872..885 "\n "
IF_EXPR@885..1273
IF_KW@885..887 "if"
WHITESPACE@887..888 " "
CONDITION@888..896
PAREN_EXPR@888..896
L_PAREN@888..889 "("
RETURN_EXPR@889..895
RETURN_KW@889..895 "return"
R_PAREN@895..896 ")"
WHITESPACE@896..897 " "
BLOCK_EXPR@897..1216
STMT_LIST@897..1216
L_CURLY@897..898 "{"
WHITESPACE@898..915 "\n "
EXPR_STMT@915..1202
MATCH_EXPR@915..1201
MATCH_KW@915..920 "match"
WHITESPACE@920..921 " "
PAREN_EXPR@921..929
L_PAREN@921..922 "("
RETURN_EXPR@922..928
RETURN_KW@922..928 "return"
R_PAREN@928..929 ")"
WHITESPACE@929..930 " "
MATCH_ARM_LIST@930..1201
L_CURLY@930..931 "{"
WHITESPACE@931..952 "\n "
MATCH_ARM@952..1147
LITERAL_PAT@952..953
LITERAL@952..953
INT_NUMBER@952..953 "1"
WHITESPACE@953..954 " "
FAT_ARROW@954..956 "=>"
WHITESPACE@956..957 " "
BLOCK_EXPR@957..1147
STMT_LIST@957..1147
L_CURLY@957..958 "{"
WHITESPACE@958..983 "\n ..."
IF_EXPR@983..1125
IF_KW@983..985 "if"
WHITESPACE@985..986 " "
CONDITION@986..994
PAREN_EXPR@986..994
L_PAREN@986..987 "("
RETURN_EXPR@987..993
RETURN_KW@987..993 "return"
R_PAREN@993..994 ")"
WHITESPACE@994..995 " "
BLOCK_EXPR@995..1057
STMT_LIST@995..1057
L_CURLY@995..996 "{"
WHITESPACE@996..1025 "\n ..."
RETURN_EXPR@1025..1031
RETURN_KW@1025..1031 "return"
WHITESPACE@1031..1056 "\n ..."
R_CURLY@1056..1057 "}"
WHITESPACE@1057..1058 " "
ELSE_KW@1058..1062 "else"
WHITESPACE@1062..1063 " "
BLOCK_EXPR@1063..1125
STMT_LIST@1063..1125
L_CURLY@1063..1064 "{"
WHITESPACE@1064..1093 "\n ..."
RETURN_EXPR@1093..1099
RETURN_KW@1093..1099 "return"
WHITESPACE@1099..1124 "\n ..."
R_CURLY@1124..1125 "}"
WHITESPACE@1125..1146 "\n "
R_CURLY@1146..1147 "}"
WHITESPACE@1147..1168 "\n "
MATCH_ARM@1168..1183
WILDCARD_PAT@1168..1169
UNDERSCORE@1168..1169 "_"
WHITESPACE@1169..1170 " "
FAT_ARROW@1170..1172 "=>"
WHITESPACE@1172..1173 " "
BLOCK_EXPR@1173..1183
STMT_LIST@1173..1183
L_CURLY@1173..1174 "{"
WHITESPACE@1174..1175 " "
RETURN_EXPR@1175..1181
RETURN_KW@1175..1181 "return"
WHITESPACE@1181..1182 " "
R_CURLY@1182..1183 "}"
WHITESPACE@1183..1200 "\n "
R_CURLY@1200..1201 "}"
SEMICOLON@1201..1202 ";"
WHITESPACE@1202..1215 "\n "
R_CURLY@1215..1216 "}"
WHITESPACE@1216..1217 " "
ELSE_KW@1217..1221 "else"
WHITESPACE@1221..1222 " "
IF_EXPR@1222..1273
IF_KW@1222..1224 "if"
WHITESPACE@1224..1225 " "
CONDITION@1225..1233
PAREN_EXPR@1225..1233
L_PAREN@1225..1226 "("
RETURN_EXPR@1226..1232
RETURN_KW@1226..1232 "return"
R_PAREN@1232..1233 ")"
WHITESPACE@1233..1234 " "
BLOCK_EXPR@1234..1273
STMT_LIST@1234..1273
L_CURLY@1234..1235 "{"
WHITESPACE@1235..1252 "\n "
EXPR_STMT@1252..1259
RETURN_EXPR@1252..1258
RETURN_KW@1252..1258 "return"
SEMICOLON@1258..1259 ";"
WHITESPACE@1259..1272 "\n "
R_CURLY@1272..1273 "}"
WHITESPACE@1273..1282 "\n "
R_CURLY@1282..1283 "}"
WHITESPACE@1283..1292 "\n "
IF_EXPR@1292..1314
IF_KW@1292..1294 "if"
WHITESPACE@1294..1295 " "
CONDITION@1295..1303
PAREN_EXPR@1295..1303
L_PAREN@1295..1296 "("
RETURN_EXPR@1296..1302
RETURN_KW@1296..1302 "return"
R_PAREN@1302..1303 ")"
WHITESPACE@1303..1304 " "
BLOCK_EXPR@1304..1314
STMT_LIST@1304..1314
L_CURLY@1304..1305 "{"
WHITESPACE@1305..1306 " "
EXPR_STMT@1306..1312
BREAK_EXPR@1306..1311
BREAK_KW@1306..1311 "break"
SEMICOLON@1311..1312 ";"
WHITESPACE@1312..1313 " "
R_CURLY@1313..1314 "}"
WHITESPACE@1314..1319 "\n "
R_CURLY@1319..1320 "}"
WHITESPACE@1320..1321 "\n"
R_CURLY@1321..1322 "}"
WHITESPACE@1322..1324 "\n\n"
FN@1324..1539
FN_KW@1324..1326 "fn"
WHITESPACE@1326..1327 " "
NAME@1327..1334
IDENT@1327..1334 "notsure"
PARAM_LIST@1334..1336
L_PAREN@1334..1335 "("
R_PAREN@1335..1336 ")"
WHITESPACE@1336..1337 " "
BLOCK_EXPR@1337..1539
STMT_LIST@1337..1539
L_CURLY@1337..1338 "{"
WHITESPACE@1338..1343 "\n "
LET_STMT@1343..1361
LET_KW@1343..1346 "let"
WHITESPACE@1346..1347 " "
IDENT_PAT@1347..1353
MUT_KW@1347..1350 "mut"
WHITESPACE@1350..1351 " "
NAME@1351..1353
IDENT@1351..1353 "_x"
COLON@1353..1354 ":"
WHITESPACE@1354..1355 " "
PATH_TYPE@1355..1360
PATH@1355..1360
PATH_SEGMENT@1355..1360
NAME_REF@1355..1360
IDENT@1355..1360 "isize"
SEMICOLON@1360..1361 ";"
WHITESPACE@1361..1366 "\n "
LET_STMT@1366..1400
LET_KW@1366..1369 "let"
WHITESPACE@1369..1370 " "
IDENT_PAT@1370..1376
MUT_KW@1370..1373 "mut"
WHITESPACE@1373..1374 " "
NAME@1374..1376
IDENT@1374..1376 "_y"
WHITESPACE@1376..1377 " "
EQ@1377..1378 "="
WHITESPACE@1378..1379 " "
BIN_EXPR@1379..1399
PAREN_EXPR@1379..1387
L_PAREN@1379..1380 "("
BIN_EXPR@1380..1386
PATH_EXPR@1380..1382
PATH@1380..1382
PATH_SEGMENT@1380..1382
NAME_REF@1380..1382
IDENT@1380..1382 "_x"
WHITESPACE@1382..1383 " "
EQ@1383..1384 "="
WHITESPACE@1384..1385 " "
LITERAL@1385..1386
INT_NUMBER@1385..1386 "0"
R_PAREN@1386..1387 ")"
WHITESPACE@1387..1388 " "
EQ2@1388..1390 "=="
WHITESPACE@1390..1391 " "
PAREN_EXPR@1391..1399
L_PAREN@1391..1392 "("
BIN_EXPR@1392..1398
PATH_EXPR@1392..1394
PATH@1392..1394
PATH_SEGMENT@1392..1394
NAME_REF@1392..1394
IDENT@1392..1394 "_x"
WHITESPACE@1394..1395 " "
EQ@1395..1396 "="
WHITESPACE@1396..1397 " "
LITERAL@1397..1398
INT_NUMBER@1397..1398 "0"
R_PAREN@1398..1399 ")"
SEMICOLON@1399..1400 ";"
WHITESPACE@1400..1405 "\n "
LET_STMT@1405..1438
LET_KW@1405..1408 "let"
WHITESPACE@1408..1409 " "
IDENT_PAT@1409..1415
MUT_KW@1409..1412 "mut"
WHITESPACE@1412..1413 " "
NAME@1413..1415
IDENT@1413..1415 "_z"
WHITESPACE@1415..1416 " "
EQ@1416..1417 "="
WHITESPACE@1417..1418 " "
BIN_EXPR@1418..1437
PAREN_EXPR@1418..1426
L_PAREN@1418..1419 "("
BIN_EXPR@1419..1425
PATH_EXPR@1419..1421
PATH@1419..1421
PATH_SEGMENT@1419..1421
NAME_REF@1419..1421
IDENT@1419..1421 "_x"
WHITESPACE@1421..1422 " "
EQ@1422..1423 "="
WHITESPACE@1423..1424 " "
LITERAL@1424..1425
INT_NUMBER@1424..1425 "0"
R_PAREN@1425..1426 ")"
WHITESPACE@1426..1427 " "
L_ANGLE@1427..1428 "<"
WHITESPACE@1428..1429 " "
PAREN_EXPR@1429..1437
L_PAREN@1429..1430 "("
BIN_EXPR@1430..1436
PATH_EXPR@1430..1432
PATH@1430..1432
PATH_SEGMENT@1430..1432
NAME_REF@1430..1432
IDENT@1430..1432 "_x"
WHITESPACE@1432..1433 " "
EQ@1433..1434 "="
WHITESPACE@1434..1435 " "
LITERAL@1435..1436
INT_NUMBER@1435..1436 "0"
R_PAREN@1436..1437 ")"
SEMICOLON@1437..1438 ";"
WHITESPACE@1438..1443 "\n "
LET_STMT@1443..1474
LET_KW@1443..1446 "let"
WHITESPACE@1446..1447 " "
IDENT_PAT@1447..1449
NAME@1447..1449
IDENT@1447..1449 "_a"
WHITESPACE@1449..1450 " "
EQ@1450..1451 "="
WHITESPACE@1451..1452 " "
BIN_EXPR@1452..1473
PAREN_EXPR@1452..1461
L_PAREN@1452..1453 "("
BIN_EXPR@1453..1460
PATH_EXPR@1453..1455
PATH@1453..1455
PATH_SEGMENT@1453..1455
NAME_REF@1453..1455
IDENT@1453..1455 "_x"
WHITESPACE@1455..1456 " "
PLUSEQ@1456..1458 "+="
WHITESPACE@1458..1459 " "
LITERAL@1459..1460
INT_NUMBER@1459..1460 "0"
R_PAREN@1460..1461 ")"
WHITESPACE@1461..1462 " "
EQ2@1462..1464 "=="
WHITESPACE@1464..1465 " "
PAREN_EXPR@1465..1473
L_PAREN@1465..1466 "("
BIN_EXPR@1466..1472
PATH_EXPR@1466..1468
PATH@1466..1468
PATH_SEGMENT@1466..1468
NAME_REF@1466..1468
IDENT@1466..1468 "_x"
WHITESPACE@1468..1469 " "
EQ@1469..1470 "="
WHITESPACE@1470..1471 " "
LITERAL@1471..1472
INT_NUMBER@1471..1472 "0"
R_PAREN@1472..1473 ")"
SEMICOLON@1473..1474 ";"
WHITESPACE@1474..1479 "\n "
LET_STMT@1479..1537
LET_KW@1479..1482 "let"
WHITESPACE@1482..1483 " "
IDENT_PAT@1483..1485
NAME@1483..1485
IDENT@1483..1485 "_b"
WHITESPACE@1485..1486 " "
EQ@1486..1487 "="
WHITESPACE@1487..1488 " "
BIN_EXPR@1488..1536
CALL_EXPR@1488..1510
PATH_EXPR@1488..1492
PATH@1488..1492
PATH_SEGMENT@1488..1492
NAME_REF@1488..1492
IDENT@1488..1492 "swap"
ARG_LIST@1492..1510
L_PAREN@1492..1493 "("
REF_EXPR@1493..1500
AMP@1493..1494 "&"
MUT_KW@1494..1497 "mut"
WHITESPACE@1497..1498 " "
PATH_EXPR@1498..1500
PATH@1498..1500
PATH_SEGMENT@1498..1500
NAME_REF@1498..1500
IDENT@1498..1500 "_y"
COMMA@1500..1501 ","
WHITESPACE@1501..1502 " "
REF_EXPR@1502..1509
AMP@1502..1503 "&"
MUT_KW@1503..1506 "mut"
WHITESPACE@1506..1507 " "
PATH_EXPR@1507..1509
PATH@1507..1509
PATH_SEGMENT@1507..1509
NAME_REF@1507..1509
IDENT@1507..1509 "_z"
R_PAREN@1509..1510 ")"
WHITESPACE@1510..1511 " "
EQ2@1511..1513 "=="
WHITESPACE@1513..1514 " "
CALL_EXPR@1514..1536
PATH_EXPR@1514..1518
PATH@1514..1518
PATH_SEGMENT@1514..1518
NAME_REF@1514..1518
IDENT@1514..1518 "swap"
ARG_LIST@1518..1536
L_PAREN@1518..1519 "("
REF_EXPR@1519..1526
AMP@1519..1520 "&"
MUT_KW@1520..1523 "mut"
WHITESPACE@1523..1524 " "
PATH_EXPR@1524..1526
PATH@1524..1526
PATH_SEGMENT@1524..1526
NAME_REF@1524..1526
IDENT@1524..1526 "_y"
COMMA@1526..1527 ","
WHITESPACE@1527..1528 " "
REF_EXPR@1528..1535
AMP@1528..1529 "&"
MUT_KW@1529..1532 "mut"
WHITESPACE@1532..1533 " "
PATH_EXPR@1533..1535
PATH@1533..1535
PATH_SEGMENT@1533..1535
NAME_REF@1533..1535
IDENT@1533..1535 "_z"
R_PAREN@1535..1536 ")"
SEMICOLON@1536..1537 ";"
WHITESPACE@1537..1538 "\n"
R_CURLY@1538..1539 "}"
WHITESPACE@1539..1541 "\n\n"
FN@1541..1741
FN_KW@1541..1543 "fn"
WHITESPACE@1543..1544 " "
NAME@1544..1557
IDENT@1544..1557 "canttouchthis"
PARAM_LIST@1557..1559
L_PAREN@1557..1558 "("
R_PAREN@1558..1559 ")"
WHITESPACE@1559..1560 " "
RET_TYPE@1560..1568
THIN_ARROW@1560..1562 "->"
WHITESPACE@1562..1563 " "
PATH_TYPE@1563..1568
PATH@1563..1568
PATH_SEGMENT@1563..1568
NAME_REF@1563..1568
IDENT@1563..1568 "usize"
WHITESPACE@1568..1569 " "
BLOCK_EXPR@1569..1741
STMT_LIST@1569..1741
L_CURLY@1569..1570 "{"
WHITESPACE@1570..1575 "\n "
FN@1575..1598
FN_KW@1575..1577 "fn"
WHITESPACE@1577..1578 " "
NAME@1578..1579
IDENT@1578..1579 "p"
PARAM_LIST@1579..1581
L_PAREN@1579..1580 "("
R_PAREN@1580..1581 ")"
WHITESPACE@1581..1582 " "
RET_TYPE@1582..1589
THIN_ARROW@1582..1584 "->"
WHITESPACE@1584..1585 " "
PATH_TYPE@1585..1589
PATH@1585..1589
PATH_SEGMENT@1585..1589
NAME_REF@1585..1589
IDENT@1585..1589 "bool"
WHITESPACE@1589..1590 " "
BLOCK_EXPR@1590..1598
STMT_LIST@1590..1598
L_CURLY@1590..1591 "{"
WHITESPACE@1591..1592 " "
LITERAL@1592..1596
TRUE_KW@1592..1596 "true"
WHITESPACE@1596..1597 " "
R_CURLY@1597..1598 "}"
WHITESPACE@1598..1603 "\n "
LET_STMT@1603..1648
LET_KW@1603..1606 "let"
WHITESPACE@1606..1607 " "
IDENT_PAT@1607..1609
NAME@1607..1609
IDENT@1607..1609 "_a"
WHITESPACE@1609..1610 " "
EQ@1610..1611 "="
WHITESPACE@1611..1612 " "
PAREN_EXPR@1612..1647
L_PAREN@1612..1613 "("
BIN_EXPR@1613..1646
MACRO_CALL@1613..1628
PATH@1613..1619
PATH_SEGMENT@1613..1619
NAME_REF@1613..1619
IDENT@1613..1619 "assert"
BANG@1619..1620 "!"
TOKEN_TREE@1620..1628
L_PAREN@1620..1621 "("
TOKEN_TREE@1621..1627
L_PAREN@1621..1622 "("
TRUE_KW@1622..1626 "true"
R_PAREN@1626..1627 ")"
R_PAREN@1627..1628 ")"
WHITESPACE@1628..1629 " "
EQ2@1629..1631 "=="
WHITESPACE@1631..1632 " "
PAREN_EXPR@1632..1646
L_PAREN@1632..1633 "("
MACRO_CALL@1633..1645
PATH@1633..1639
PATH_SEGMENT@1633..1639
NAME_REF@1633..1639
IDENT@1633..1639 "assert"
BANG@1639..1640 "!"
TOKEN_TREE@1640..1645
L_PAREN@1640..1641 "("
IDENT@1641..1642 "p"
TOKEN_TREE@1642..1644
L_PAREN@1642..1643 "("
R_PAREN@1643..1644 ")"
R_PAREN@1644..1645 ")"
R_PAREN@1645..1646 ")"
R_PAREN@1646..1647 ")"
SEMICOLON@1647..1648 ";"
WHITESPACE@1648..1653 "\n "
LET_STMT@1653..1685
LET_KW@1653..1656 "let"
WHITESPACE@1656..1657 " "
IDENT_PAT@1657..1659
NAME@1657..1659
IDENT@1657..1659 "_c"
WHITESPACE@1659..1660 " "
EQ@1660..1661 "="
WHITESPACE@1661..1662 " "
PAREN_EXPR@1662..1684
L_PAREN@1662..1663 "("
BIN_EXPR@1663..1683
MACRO_CALL@1663..1677
PATH@1663..1669
PATH_SEGMENT@1663..1669
NAME_REF@1663..1669
IDENT@1663..1669 "assert"
BANG@1669..1670 "!"
TOKEN_TREE@1670..1677
L_PAREN@1670..1671 "("
TOKEN_TREE@1671..1676
L_PAREN@1671..1672 "("
IDENT@1672..1673 "p"
TOKEN_TREE@1673..1675
L_PAREN@1673..1674 "("
R_PAREN@1674..1675 ")"
R_PAREN@1675..1676 ")"
R_PAREN@1676..1677 ")"
WHITESPACE@1677..1678 " "
EQ2@1678..1680 "=="
WHITESPACE@1680..1681 " "
TUPLE_EXPR@1681..1683
L_PAREN@1681..1682 "("
R_PAREN@1682..1683 ")"
R_PAREN@1683..1684 ")"
SEMICOLON@1684..1685 ";"
WHITESPACE@1685..1690 "\n "
LET_STMT@1690..1739
LET_KW@1690..1693 "let"
WHITESPACE@1693..1694 " "
IDENT_PAT@1694..1696
NAME@1694..1696
IDENT@1694..1696 "_b"
COLON@1696..1697 ":"
WHITESPACE@1697..1698 " "
PATH_TYPE@1698..1702
PATH@1698..1702
PATH_SEGMENT@1698..1702
NAME_REF@1698..1702
IDENT@1698..1702 "bool"
WHITESPACE@1702..1703 " "
EQ@1703..1704 "="
WHITESPACE@1704..1705 " "
PAREN_EXPR@1705..1738
L_PAREN@1705..1706 "("
BIN_EXPR@1706..1737
MACRO_CALL@1706..1723
PATH@1706..1713
PATH_SEGMENT@1706..1713
NAME_REF@1706..1713
IDENT@1706..1713 "println"
BANG@1713..1714 "!"
TOKEN_TREE@1714..1723
L_PAREN@1714..1715 "("
STRING@1715..1719 "\"{}\""
COMMA@1719..1720 ","
WHITESPACE@1720..1721 " "
INT_NUMBER@1721..1722 "0"
R_PAREN@1722..1723 ")"
WHITESPACE@1723..1724 " "
EQ2@1724..1726 "=="
WHITESPACE@1726..1727 " "
PAREN_EXPR@1727..1737
L_PAREN@1727..1728 "("
RETURN_EXPR@1728..1736
RETURN_KW@1728..1734 "return"
WHITESPACE@1734..1735 " "
LITERAL@1735..1736
INT_NUMBER@1735..1736 "0"
R_PAREN@1736..1737 ")"
R_PAREN@1737..1738 ")"
SEMICOLON@1738..1739 ";"
WHITESPACE@1739..1740 "\n"
R_CURLY@1740..1741 "}"
WHITESPACE@1741..1743 "\n\n"
FN@1743..1904
FN_KW@1743..1745 "fn"
WHITESPACE@1745..1746 " "
NAME@1746..1755
IDENT@1746..1755 "angrydome"
PARAM_LIST@1755..1757
L_PAREN@1755..1756 "("
R_PAREN@1756..1757 ")"
WHITESPACE@1757..1758 " "
BLOCK_EXPR@1758..1904
STMT_LIST@1758..1904
L_CURLY@1758..1759 "{"
WHITESPACE@1759..1764 "\n "
EXPR_STMT@1764..1785
LOOP_EXPR@1764..1785
LOOP_KW@1764..1768 "loop"
WHITESPACE@1768..1769 " "
BLOCK_EXPR@1769..1785
STMT_LIST@1769..1785
L_CURLY@1769..1770 "{"
WHITESPACE@1770..1771 " "
IF_EXPR@1771..1783
IF_KW@1771..1773 "if"
WHITESPACE@1773..1774 " "
CONDITION@1774..1779
BREAK_EXPR@1774..1779
BREAK_KW@1774..1779 "break"
WHITESPACE@1779..1780 " "
BLOCK_EXPR@1780..1783
STMT_LIST@1780..1783
L_CURLY@1780..1781 "{"
WHITESPACE@1781..1782 " "
R_CURLY@1782..1783 "}"
WHITESPACE@1783..1784 " "
R_CURLY@1784..1785 "}"
WHITESPACE@1785..1790 "\n "
LET_STMT@1790..1804
LET_KW@1790..1793 "let"
WHITESPACE@1793..1794 " "
IDENT_PAT@1794..1799
MUT_KW@1794..1797 "mut"
WHITESPACE@1797..1798 " "
NAME@1798..1799
IDENT@1798..1799 "i"
WHITESPACE@1799..1800 " "
EQ@1800..1801 "="
WHITESPACE@1801..1802 " "
LITERAL@1802..1803
INT_NUMBER@1802..1803 "0"
SEMICOLON@1803..1804 ";"
WHITESPACE@1804..1809 "\n "
LOOP_EXPR@1809..1902
LOOP_KW@1809..1813 "loop"
WHITESPACE@1813..1814 " "
BLOCK_EXPR@1814..1902
STMT_LIST@1814..1902
L_CURLY@1814..1815 "{"
WHITESPACE@1815..1816 " "
EXPR_STMT@1816..1823
BIN_EXPR@1816..1822
PATH_EXPR@1816..1817
PATH@1816..1817
PATH_SEGMENT@1816..1817
NAME_REF@1816..1817
IDENT@1816..1817 "i"
WHITESPACE@1817..1818 " "
PLUSEQ@1818..1820 "+="
WHITESPACE@1820..1821 " "
LITERAL@1821..1822
INT_NUMBER@1821..1822 "1"
SEMICOLON@1822..1823 ";"
WHITESPACE@1823..1824 " "
EXPR_STMT@1824..1887
IF_EXPR@1824..1887
IF_KW@1824..1826 "if"
WHITESPACE@1826..1827 " "
CONDITION@1827..1833
BIN_EXPR@1827..1833
PATH_EXPR@1827..1828
PATH@1827..1828
PATH_SEGMENT@1827..1828
NAME_REF@1827..1828
IDENT@1827..1828 "i"
WHITESPACE@1828..1829 " "
EQ2@1829..1831 "=="
WHITESPACE@1831..1832 " "
LITERAL@1832..1833
INT_NUMBER@1832..1833 "1"
WHITESPACE@1833..1834 " "
BLOCK_EXPR@1834..1887
STMT_LIST@1834..1887
L_CURLY@1834..1835 "{"
WHITESPACE@1835..1836 " "
MATCH_EXPR@1836..1885
MATCH_KW@1836..1841 "match"
WHITESPACE@1841..1842 " "
PAREN_EXPR@1842..1852
L_PAREN@1842..1843 "("
CONTINUE_EXPR@1843..1851
CONTINUE_KW@1843..1851 "continue"
R_PAREN@1851..1852 ")"
WHITESPACE@1852..1853 " "
MATCH_ARM_LIST@1853..1885
L_CURLY@1853..1854 "{"
WHITESPACE@1854..1855 " "
MATCH_ARM@1855..1864
LITERAL_PAT@1855..1856
LITERAL@1855..1856
INT_NUMBER@1855..1856 "1"
WHITESPACE@1856..1857 " "
FAT_ARROW@1857..1859 "=>"
WHITESPACE@1859..1860 " "
BLOCK_EXPR@1860..1863
STMT_LIST@1860..1863
L_CURLY@1860..1861 "{"
WHITESPACE@1861..1862 " "
R_CURLY@1862..1863 "}"
COMMA@1863..1864 ","
WHITESPACE@1864..1865 " "
MATCH_ARM@1865..1883
WILDCARD_PAT@1865..1866
UNDERSCORE@1865..1866 "_"
WHITESPACE@1866..1867 " "
FAT_ARROW@1867..1869 "=>"
WHITESPACE@1869..1870 " "
MACRO_CALL@1870..1883
PATH@1870..1875
PATH_SEGMENT@1870..1875
NAME_REF@1870..1875
IDENT@1870..1875 "panic"
BANG@1875..1876 "!"
TOKEN_TREE@1876..1883
L_PAREN@1876..1877 "("
STRING@1877..1882 "\"wat\""
R_PAREN@1882..1883 ")"
WHITESPACE@1883..1884 " "
R_CURLY@1884..1885 "}"
WHITESPACE@1885..1886 " "
R_CURLY@1886..1887 "}"
WHITESPACE@1887..1894 "\n "
EXPR_STMT@1894..1900
BREAK_EXPR@1894..1899
BREAK_KW@1894..1899 "break"
SEMICOLON@1899..1900 ";"
WHITESPACE@1900..1901 " "
R_CURLY@1901..1902 "}"
WHITESPACE@1902..1903 "\n"
R_CURLY@1903..1904 "}"
WHITESPACE@1904..1906 "\n\n"
FN@1906..1960
FN_KW@1906..1908 "fn"
WHITESPACE@1908..1909 " "
NAME@1909..1921
IDENT@1909..1921 "evil_lincoln"
PARAM_LIST@1921..1923
L_PAREN@1921..1922 "("
R_PAREN@1922..1923 ")"
WHITESPACE@1923..1924 " "
BLOCK_EXPR@1924..1960
STMT_LIST@1924..1960
L_CURLY@1924..1925 "{"
WHITESPACE@1925..1926 " "
LET_STMT@1926..1958
LET_KW@1926..1929 "let"
WHITESPACE@1929..1930 " "
IDENT_PAT@1930..1935
NAME@1930..1935
IDENT@1930..1935 "_evil"
WHITESPACE@1935..1936 " "
EQ@1936..1937 "="
WHITESPACE@1937..1938 " "
MACRO_CALL@1938..1957
PATH@1938..1945
PATH_SEGMENT@1938..1945
NAME_REF@1938..1945
IDENT@1938..1945 "println"
BANG@1945..1946 "!"
TOKEN_TREE@1946..1957
L_PAREN@1946..1947 "("
STRING@1947..1956 "\"lincoln\""
R_PAREN@1956..1957 ")"
SEMICOLON@1957..1958 ";"
WHITESPACE@1958..1959 " "
R_CURLY@1959..1960 "}"
WHITESPACE@1960..1962 "\n\n"
FN@1962..2198
FN_KW@1962..1964 "fn"
WHITESPACE@1964..1965 " "
NAME@1965..1969
IDENT@1965..1969 "dots"
PARAM_LIST@1969..1971
L_PAREN@1969..1970 "("
R_PAREN@1970..1971 ")"
WHITESPACE@1971..1972 " "
BLOCK_EXPR@1972..2198
STMT_LIST@1972..2198
L_CURLY@1972..1973 "{"
WHITESPACE@1973..1978 "\n "
EXPR_STMT@1978..2196
MACRO_CALL@1978..2195
PATH@1978..1987
PATH_SEGMENT@1978..1987
NAME_REF@1978..1987
IDENT@1978..1987 "assert_eq"
BANG@1987..1988 "!"
TOKEN_TREE@1988..2195
L_PAREN@1988..1989 "("
IDENT@1989..1995 "String"
COLON@1995..1996 ":"
COLON@1996..1997 ":"
IDENT@1997..2001 "from"
TOKEN_TREE@2001..2055
L_PAREN@2001..2002 "("
STRING@2002..2054 "\".................... ..."
R_PAREN@2054..2055 ")"
COMMA@2055..2056 ","
WHITESPACE@2056..2072 "\n "
IDENT@2072..2078 "format"
BANG@2078..2079 "!"
TOKEN_TREE@2079..2194
L_PAREN@2079..2080 "("
STRING@2080..2086 "\"{:?}\""
COMMA@2086..2087 ","
WHITESPACE@2087..2088 " "
DOT@2088..2089 "."
DOT@2089..2090 "."
WHITESPACE@2090..2091 " "
DOT@2091..2092 "."
DOT@2092..2093 "."
WHITESPACE@2093..2094 " "
DOT@2094..2095 "."
DOT@2095..2096 "."
WHITESPACE@2096..2097 " "
DOT@2097..2098 "."
DOT@2098..2099 "."
WHITESPACE@2099..2100 " "
DOT@2100..2101 "."
DOT@2101..2102 "."
WHITESPACE@2102..2103 " "
DOT@2103..2104 "."
DOT@2104..2105 "."
WHITESPACE@2105..2106 " "
DOT@2106..2107 "."
DOT@2107..2108 "."
WHITESPACE@2108..2109 " "
DOT@2109..2110 "."
DOT@2110..2111 "."
WHITESPACE@2111..2112 " "
DOT@2112..2113 "."
DOT@2113..2114 "."
WHITESPACE@2114..2115 " "
DOT@2115..2116 "."
DOT@2116..2117 "."
WHITESPACE@2117..2118 " "
DOT@2118..2119 "."
DOT@2119..2120 "."
WHITESPACE@2120..2121 " "
DOT@2121..2122 "."
DOT@2122..2123 "."
WHITESPACE@2123..2124 " "
DOT@2124..2125 "."
DOT@2125..2126 "."
WHITESPACE@2126..2158 "\n ..."
DOT@2158..2159 "."
DOT@2159..2160 "."
WHITESPACE@2160..2161 " "
DOT@2161..2162 "."
DOT@2162..2163 "."
WHITESPACE@2163..2164 " "
DOT@2164..2165 "."
DOT@2165..2166 "."
WHITESPACE@2166..2167 " "
DOT@2167..2168 "."
DOT@2168..2169 "."
WHITESPACE@2169..2170 " "
DOT@2170..2171 "."
DOT@2171..2172 "."
WHITESPACE@2172..2173 " "
DOT@2173..2174 "."
DOT@2174..2175 "."
WHITESPACE@2175..2176 " "
DOT@2176..2177 "."
DOT@2177..2178 "."
WHITESPACE@2178..2179 " "
DOT@2179..2180 "."
DOT@2180..2181 "."
WHITESPACE@2181..2182 " "
DOT@2182..2183 "."
DOT@2183..2184 "."
WHITESPACE@2184..2185 " "
DOT@2185..2186 "."
DOT@2186..2187 "."
WHITESPACE@2187..2188 " "
DOT@2188..2189 "."
DOT@2189..2190 "."
WHITESPACE@2190..2191 " "
DOT@2191..2192 "."
DOT@2192..2193 "."
R_PAREN@2193..2194 ")"
R_PAREN@2194..2195 ")"
SEMICOLON@2195..2196 ";"
WHITESPACE@2196..2197 "\n"
R_CURLY@2197..2198 "}"
WHITESPACE@2198..2200 "\n\n"
FN@2200..2693
FN_KW@2200..2202 "fn"
WHITESPACE@2202..2203 " "
NAME@2203..2205
IDENT@2203..2205 "u8"
PARAM_LIST@2205..2213
L_PAREN@2205..2206 "("
PARAM@2206..2212
IDENT_PAT@2206..2208
NAME@2206..2208
IDENT@2206..2208 "u8"
COLON@2208..2209 ":"
WHITESPACE@2209..2210 " "
PATH_TYPE@2210..2212
PATH@2210..2212
PATH_SEGMENT@2210..2212
NAME_REF@2210..2212
IDENT@2210..2212 "u8"
R_PAREN@2212..2213 ")"
WHITESPACE@2213..2214 " "
BLOCK_EXPR@2214..2693
STMT_LIST@2214..2693
L_CURLY@2214..2215 "{"
WHITESPACE@2215..2220 "\n "
IF_EXPR@2220..2691
IF_KW@2220..2222 "if"
WHITESPACE@2222..2223 " "
CONDITION@2223..2232
BIN_EXPR@2223..2232
PATH_EXPR@2223..2225
PATH@2223..2225
PATH_SEGMENT@2223..2225
NAME_REF@2223..2225
IDENT@2223..2225 "u8"
WHITESPACE@2225..2226 " "
NEQ@2226..2228 "!="
WHITESPACE@2228..2229 " "
LITERAL@2229..2232
INT_NUMBER@2229..2232 "0u8"
WHITESPACE@2232..2233 " "
BLOCK_EXPR@2233..2691
STMT_LIST@2233..2691
L_CURLY@2233..2234 "{"
WHITESPACE@2234..2243 "\n "
EXPR_STMT@2243..2685
MACRO_CALL@2243..2684
PATH@2243..2252
PATH_SEGMENT@2243..2252
NAME_REF@2243..2252
IDENT@2243..2252 "assert_eq"
BANG@2252..2253 "!"
TOKEN_TREE@2253..2684
L_PAREN@2253..2254 "("
INT_NUMBER@2254..2257 "8u8"
COMMA@2257..2258 ","
WHITESPACE@2258..2259 " "
TOKEN_TREE@2259..2683
L_CURLY@2259..2260 "{"
WHITESPACE@2260..2273 "\n "
IDENT@2273..2284 "macro_rules"
BANG@2284..2285 "!"
WHITESPACE@2285..2286 " "
IDENT@2286..2288 "u8"
WHITESPACE@2288..2289 " "
TOKEN_TREE@2289..2567
L_CURLY@2289..2290 "{"
WHITESPACE@2290..2307 "\n "
TOKEN_TREE@2307..2311
L_PAREN@2307..2308 "("
IDENT@2308..2310 "u8"
R_PAREN@2310..2311 ")"
WHITESPACE@2311..2312 " "
EQ@2312..2313 "="
R_ANGLE@2313..2314 ">"
WHITESPACE@2314..2315 " "
TOKEN_TREE@2315..2552
L_CURLY@2315..2316 "{"
WHITESPACE@2316..2337 "\n "
MOD_KW@2337..2340 "mod"
WHITESPACE@2340..2341 " "
IDENT@2341..2343 "u8"
WHITESPACE@2343..2344 " "
TOKEN_TREE@2344..2534
L_CURLY@2344..2345 "{"
WHITESPACE@2345..2370 "\n ..."
PUB_KW@2370..2373 "pub"
WHITESPACE@2373..2374 " "
FN_KW@2374..2376 "fn"
WHITESPACE@2376..2377 " "
IDENT@2377..2379 "u8"
L_ANGLE@2379..2380 "<"
LIFETIME_IDENT@2380..2383 "'u8"
COLON@2383..2384 ":"
WHITESPACE@2384..2385 " "
LIFETIME_IDENT@2385..2388 "'u8"
WHITESPACE@2388..2389 " "
PLUS@2389..2390 "+"
WHITESPACE@2390..2391 " "
LIFETIME_IDENT@2391..2394 "'u8"
R_ANGLE@2394..2395 ">"
TOKEN_TREE@2395..2408
L_PAREN@2395..2396 "("
IDENT@2396..2398 "u8"
COLON@2398..2399 ":"
WHITESPACE@2399..2400 " "
AMP@2400..2401 "&"
LIFETIME_IDENT@2401..2404 "'u8"
WHITESPACE@2404..2405 " "
IDENT@2405..2407 "u8"
R_PAREN@2407..2408 ")"
WHITESPACE@2408..2409 " "
MINUS@2409..2410 "-"
R_ANGLE@2410..2411 ">"
WHITESPACE@2411..2412 " "
AMP@2412..2413 "&"
LIFETIME_IDENT@2413..2416 "'u8"
WHITESPACE@2416..2417 " "
IDENT@2417..2419 "u8"
WHITESPACE@2419..2420 " "
TOKEN_TREE@2420..2512
L_CURLY@2420..2421 "{"
WHITESPACE@2421..2450 "\n ..."
STRING@2450..2454 "\"u8\""
SEMICOLON@2454..2455 ";"
WHITESPACE@2455..2484 "\n ..."
IDENT@2484..2486 "u8"
WHITESPACE@2486..2511 "\n ..."
R_CURLY@2511..2512 "}"
WHITESPACE@2512..2533 "\n "
R_CURLY@2533..2534 "}"
WHITESPACE@2534..2551 "\n "
R_CURLY@2551..2552 "}"
SEMICOLON@2552..2553 ";"
WHITESPACE@2553..2566 "\n "
R_CURLY@2566..2567 "}"
WHITESPACE@2567..2581 "\n\n "
IDENT@2581..2583 "u8"
BANG@2583..2584 "!"
TOKEN_TREE@2584..2588
L_PAREN@2584..2585 "("
IDENT@2585..2587 "u8"
R_PAREN@2587..2588 ")"
SEMICOLON@2588..2589 ";"
WHITESPACE@2589..2602 "\n "
LET_KW@2602..2605 "let"
WHITESPACE@2605..2606 " "
AMP@2606..2607 "&"
IDENT@2607..2609 "u8"
COLON@2609..2610 ":"
WHITESPACE@2610..2611 " "
AMP@2611..2612 "&"
IDENT@2612..2614 "u8"
WHITESPACE@2614..2615 " "
EQ@2615..2616 "="
WHITESPACE@2616..2617 " "
IDENT@2617..2619 "u8"
COLON@2619..2620 ":"
COLON@2620..2621 ":"
IDENT@2621..2623 "u8"
TOKEN_TREE@2623..2629
L_PAREN@2623..2624 "("
AMP@2624..2625 "&"
INT_NUMBER@2625..2628 "8u8"
R_PAREN@2628..2629 ")"
SEMICOLON@2629..2630 ";"
WHITESPACE@2630..2643 "\n "
CRATE_KW@2643..2648 "crate"
COLON@2648..2649 ":"
COLON@2649..2650 ":"
IDENT@2650..2652 "u8"
TOKEN_TREE@2652..2657
L_PAREN@2652..2653 "("
INT_NUMBER@2653..2656 "0u8"
R_PAREN@2656..2657 ")"
SEMICOLON@2657..2658 ";"
WHITESPACE@2658..2671 "\n "
IDENT@2671..2673 "u8"
WHITESPACE@2673..2682 "\n "
R_CURLY@2682..2683 "}"
R_PAREN@2683..2684 ")"
SEMICOLON@2684..2685 ";"
WHITESPACE@2685..2690 "\n "
R_CURLY@2690..2691 "}"
WHITESPACE@2691..2692 "\n"
R_CURLY@2692..2693 "}"
WHITESPACE@2693..2695 "\n\n"
FN@2695..2832
FN_KW@2695..2697 "fn"
WHITESPACE@2697..2698 " "
NAME@2698..2703
IDENT@2698..2703 "fishy"
PARAM_LIST@2703..2705
L_PAREN@2703..2704 "("
R_PAREN@2704..2705 ")"
WHITESPACE@2705..2706 " "
BLOCK_EXPR@2706..2832
STMT_LIST@2706..2832
L_CURLY@2706..2707 "{"
WHITESPACE@2707..2712 "\n "
EXPR_STMT@2712..2830
MACRO_CALL@2712..2829
PATH@2712..2721
PATH_SEGMENT@2712..2721
NAME_REF@2712..2721
IDENT@2712..2721 "assert_eq"
BANG@2721..2722 "!"
TOKEN_TREE@2722..2829
L_PAREN@2722..2723 "("
IDENT@2723..2729 "String"
COLON@2729..2730 ":"
COLON@2730..2731 ":"
IDENT@2731..2735 "from"
TOKEN_TREE@2735..2742
L_PAREN@2735..2736 "("
STRING@2736..2741 "\"><>\""
R_PAREN@2741..2742 ")"
COMMA@2742..2743 ","
WHITESPACE@2743..2759 "\n "
IDENT@2759..2765 "String"
COLON@2765..2766 ":"
COLON@2766..2767 ":"
L_ANGLE@2767..2768 "<"
R_ANGLE@2768..2769 ">"
COLON@2769..2770 ":"
COLON@2770..2771 ":"
IDENT@2771..2775 "from"
COLON@2775..2776 ":"
COLON@2776..2777 ":"
L_ANGLE@2777..2778 "<"
R_ANGLE@2778..2779 ">"
TOKEN_TREE@2779..2786
L_PAREN@2779..2780 "("
STRING@2780..2785 "\"><>\""
R_PAREN@2785..2786 ")"
DOT@2786..2787 "."
IDENT@2787..2792 "chars"
COLON@2792..2793 ":"
COLON@2793..2794 ":"
L_ANGLE@2794..2795 "<"
R_ANGLE@2795..2796 ">"
TOKEN_TREE@2796..2798
L_PAREN@2796..2797 "("
R_PAREN@2797..2798 ")"
DOT@2798..2799 "."
IDENT@2799..2802 "rev"
COLON@2802..2803 ":"
COLON@2803..2804 ":"
L_ANGLE@2804..2805 "<"
R_ANGLE@2805..2806 ">"
TOKEN_TREE@2806..2808
L_PAREN@2806..2807 "("
R_PAREN@2807..2808 ")"
DOT@2808..2809 "."
IDENT@2809..2816 "collect"
COLON@2816..2817 ":"
COLON@2817..2818 ":"
L_ANGLE@2818..2819 "<"
IDENT@2819..2825 "String"
R_ANGLE@2825..2826 ">"
TOKEN_TREE@2826..2828
L_PAREN@2826..2827 "("
R_PAREN@2827..2828 ")"
R_PAREN@2828..2829 ")"
SEMICOLON@2829..2830 ";"
WHITESPACE@2830..2831 "\n"
R_CURLY@2831..2832 "}"
WHITESPACE@2832..2834 "\n\n"
FN@2834..2906
FN_KW@2834..2836 "fn"
WHITESPACE@2836..2837 " "
NAME@2837..2842
IDENT@2837..2842 "union"
PARAM_LIST@2842..2844
L_PAREN@2842..2843 "("
R_PAREN@2843..2844 ")"
WHITESPACE@2844..2845 " "
BLOCK_EXPR@2845..2906
STMT_LIST@2845..2906
L_CURLY@2845..2846 "{"
WHITESPACE@2846..2851 "\n "
UNION@2851..2904
UNION_KW@2851..2856 "union"
WHITESPACE@2856..2857 " "
NAME@2857..2862
IDENT@2857..2862 "union"
GENERIC_PARAM_LIST@2862..2870
L_ANGLE@2862..2863 "<"
LIFETIME_PARAM@2863..2869
LIFETIME@2863..2869
LIFETIME_IDENT@2863..2869 "'union"
R_ANGLE@2869..2870 ">"
WHITESPACE@2870..2871 " "
RECORD_FIELD_LIST@2871..2904
L_CURLY@2871..2872 "{"
WHITESPACE@2872..2873 " "
RECORD_FIELD@2873..2901
NAME@2873..2878
IDENT@2873..2878 "union"
COLON@2878..2879 ":"
WHITESPACE@2879..2880 " "
REF_TYPE@2880..2901
AMP@2880..2881 "&"
LIFETIME@2881..2887
LIFETIME_IDENT@2881..2887 "'union"
WHITESPACE@2887..2888 " "
PATH_TYPE@2888..2901
PATH@2888..2901
PATH_SEGMENT@2888..2901
NAME_REF@2888..2893
IDENT@2888..2893 "union"
GENERIC_ARG_LIST@2893..2901
L_ANGLE@2893..2894 "<"
LIFETIME_ARG@2894..2900
LIFETIME@2894..2900
LIFETIME_IDENT@2894..2900 "'union"
R_ANGLE@2900..2901 ">"
COMMA@2901..2902 ","
WHITESPACE@2902..2903 " "
R_CURLY@2903..2904 "}"
WHITESPACE@2904..2905 "\n"
R_CURLY@2905..2906 "}"
WHITESPACE@2906..2908 "\n\n"
FN@2908..3042
FN_KW@2908..2910 "fn"
WHITESPACE@2910..2911 " "
NAME@2911..2929
IDENT@2911..2929 "special_characters"
PARAM_LIST@2929..2931
L_PAREN@2929..2930 "("
R_PAREN@2930..2931 ")"
WHITESPACE@2931..2932 " "
BLOCK_EXPR@2932..3042
STMT_LIST@2932..3042
L_CURLY@2932..2933 "{"
WHITESPACE@2933..2938 "\n "
LET_STMT@2938..3021
LET_KW@2938..2941 "let"
WHITESPACE@2941..2942 " "
IDENT_PAT@2942..2945
NAME@2942..2945
IDENT@2942..2945 "val"
WHITESPACE@2945..2946 " "
EQ@2946..2947 "="
WHITESPACE@2947..2948 " "
PREFIX_EXPR@2948..3013
BANG@2948..2949 "!"
PAREN_EXPR@2949..3013
L_PAREN@2949..2950 "("
BIN_EXPR@2950..3012
CALL_EXPR@2950..2995
PAREN_EXPR@2950..2971
L_PAREN@2950..2951 "("
CLOSURE_EXPR@2951..2970
PARAM_LIST@2951..2968
PIPE@2951..2952 "|"
PARAM@2952..2962
TUPLE_PAT@2952..2956
L_PAREN@2952..2953 "("
REST_PAT@2953..2955
DOT2@2953..2955 ".."
R_PAREN@2955..2956 ")"
COLON@2956..2957 ":"
TUPLE_TYPE@2957..2962
L_PAREN@2957..2958 "("
INFER_TYPE@2958..2959
UNDERSCORE@2958..2959 "_"
COMMA@2959..2960 ","
INFER_TYPE@2960..2961
UNDERSCORE@2960..2961 "_"
R_PAREN@2961..2962 ")"
COMMA@2962..2963 ","
PARAM@2963..2967
IDENT_PAT@2963..2967
NAME@2963..2965
IDENT@2963..2965 "__"
AT@2965..2966 "@"
WILDCARD_PAT@2966..2967
UNDERSCORE@2966..2967 "_"
PIPE@2967..2968 "|"
PATH_EXPR@2968..2970
PATH@2968..2970
PATH_SEGMENT@2968..2970
NAME_REF@2968..2970
IDENT@2968..2970 "__"
R_PAREN@2970..2971 ")"
ARG_LIST@2971..2995
L_PAREN@2971..2972 "("
TUPLE_EXPR@2972..2987
L_PAREN@2972..2973 "("
REF_EXPR@2973..2979
AMP@2973..2974 "&"
PREFIX_EXPR@2974..2979
STAR@2974..2975 "*"
LITERAL@2975..2979
STRING@2975..2979 "\"\\\\\""
COMMA@2979..2980 ","
LITERAL@2980..2986
CHAR@2980..2986 "'🤔'"
R_PAREN@2986..2987 ")"
COMMENT@2987..2991 "/**/"
COMMA@2991..2992 ","
BLOCK_EXPR@2992..2994
STMT_LIST@2992..2994
L_CURLY@2992..2993 "{"
R_CURLY@2993..2994 "}"
R_PAREN@2994..2995 ")"
EQ2@2995..2997 "=="
BLOCK_EXPR@2997..3012
STMT_LIST@2997..3012
L_CURLY@2997..2998 "{"
EXPR_STMT@2998..3011
REF_EXPR@2998..3010
AMP@2998..2999 "&"
INDEX_EXPR@2999..3010
ARRAY_EXPR@2999..3006
L_BRACK@2999..3000 "["
RANGE_EXPR@3000..3005
DOT2EQ@3000..3003 "..="
RANGE_EXPR@3003..3005
DOT2@3003..3005 ".."
R_BRACK@3005..3006 "]"
L_BRACK@3006..3007 "["
RANGE_EXPR@3007..3009
DOT2@3007..3009 ".."
R_BRACK@3009..3010 "]"
SEMICOLON@3010..3011 ";"
R_CURLY@3011..3012 "}"
R_PAREN@3012..3013 ")"
COMMENT@3013..3015 "//"
WHITESPACE@3015..3020 "\n "
SEMICOLON@3020..3021 ";"
WHITESPACE@3021..3026 "\n "
EXPR_STMT@3026..3040
MACRO_CALL@3026..3039
PATH@3026..3032
PATH_SEGMENT@3026..3032
NAME_REF@3026..3032
IDENT@3026..3032 "assert"
BANG@3032..3033 "!"
TOKEN_TREE@3033..3039
L_PAREN@3033..3034 "("
BANG@3034..3035 "!"
IDENT@3035..3038 "val"
R_PAREN@3038..3039 ")"
SEMICOLON@3039..3040 ";"
WHITESPACE@3040..3041 "\n"
R_CURLY@3041..3042 "}"
WHITESPACE@3042..3044 "\n\n"
FN@3044..3514
FN_KW@3044..3046 "fn"
WHITESPACE@3046..3047 " "
NAME@3047..3057
IDENT@3047..3057 "punch_card"
PARAM_LIST@3057..3059
L_PAREN@3057..3058 "("
R_PAREN@3058..3059 ")"
WHITESPACE@3059..3060 " "
RET_TYPE@3060..3083
THIN_ARROW@3060..3062 "->"
WHITESPACE@3062..3063 " "
IMPL_TRAIT_TYPE@3063..3083
IMPL_KW@3063..3067 "impl"
WHITESPACE@3067..3068 " "
TYPE_BOUND_LIST@3068..3083
TYPE_BOUND@3068..3083
PATH_TYPE@3068..3083
PATH@3068..3083
PATH@3068..3076
PATH@3068..3071
PATH_SEGMENT@3068..3071
NAME_REF@3068..3071
IDENT@3068..3071 "std"
COLON2@3071..3073 "::"
PATH_SEGMENT@3073..3076
NAME_REF@3073..3076
IDENT@3073..3076 "fmt"
COLON2@3076..3078 "::"
PATH_SEGMENT@3078..3083
NAME_REF@3078..3083
IDENT@3078..3083 "Debug"
WHITESPACE@3083..3084 " "
BLOCK_EXPR@3084..3514
STMT_LIST@3084..3514
L_CURLY@3084..3085 "{"
WHITESPACE@3085..3090 "\n "
RANGE_EXPR@3090..3512
DOT2EQ@3090..3093 "..="
RANGE_EXPR@3093..3512
DOT2EQ@3093..3096 "..="
RANGE_EXPR@3096..3512
DOT2@3096..3098 ".."
WHITESPACE@3098..3099 " "
RANGE_EXPR@3099..3512
DOT2@3099..3101 ".."
WHITESPACE@3101..3105 " "
RANGE_EXPR@3105..3512
DOT2@3105..3107 ".."
WHITESPACE@3107..3108 " "
RANGE_EXPR@3108..3512
DOT2@3108..3110 ".."
WHITESPACE@3110..3111 " "
RANGE_EXPR@3111..3512
DOT2@3111..3113 ".."
WHITESPACE@3113..3114 " "
RANGE_EXPR@3114..3512
DOT2@3114..3116 ".."
WHITESPACE@3116..3120 " "
RANGE_EXPR@3120..3512
DOT2@3120..3122 ".."
WHITESPACE@3122..3123 " "
RANGE_EXPR@3123..3512
DOT2@3123..3125 ".."
WHITESPACE@3125..3126 " "
RANGE_EXPR@3126..3512
DOT2@3126..3128 ".."
WHITESPACE@3128..3129 " "
RANGE_EXPR@3129..3512
DOT2@3129..3131 ".."
WHITESPACE@3131..3135 " "
RANGE_EXPR@3135..3512
DOT2@3135..3137 ".."
WHITESPACE@3137..3138 " "
RANGE_EXPR@3138..3512
DOT2EQ@3138..3141 "..="
RANGE_EXPR@3141..3512
DOT2@3141..3143 ".."
WHITESPACE@3143..3144 " "
RANGE_EXPR@3144..3512
DOT2@3144..3146 ".."
WHITESPACE@3146..3151 "\n "
RANGE_EXPR@3151..3512
DOT2EQ@3151..3154 "..="
RANGE_EXPR@3154..3512
DOT2@3154..3156 ".."
WHITESPACE@3156..3157 " "
RANGE_EXPR@3157..3512
DOT2EQ@3157..3160 "..="
RANGE_EXPR@3160..3512
DOT2@3160..3162 ".."
WHITESPACE@3162..3166 " "
RANGE_EXPR@3166..3512
DOT2@3166..3168 ".."
WHITESPACE@3168..3169 " "
RANGE_EXPR@3169..3512
DOT2@3169..3171 ".."
WHITESPACE@3171..3172 " "
RANGE_EXPR@3172..3512
DOT2@3172..3174 ".."
WHITESPACE@3174..3175 " "
RANGE_EXPR@3175..3512
DOT2@3175..3177 ".."
WHITESPACE@3177..3181 " "
RANGE_EXPR@3181..3512
DOT2@3181..3183 ".."
WHITESPACE@3183..3184 " "
RANGE_EXPR@3184..3512
DOT2@3184..3186 ".."
WHITESPACE@3186..3187 " "
RANGE_EXPR@3187..3512
DOT2@3187..3189 ".."
WHITESPACE@3189..3190 " "
RANGE_EXPR@3190..3512
DOT2@3190..3192 ".."
WHITESPACE@3192..3196 " "
RANGE_EXPR@3196..3512
DOT2EQ@3196..3199 "..="
RANGE_EXPR@3199..3512
DOT2EQ@3199..3202 "..="
RANGE_EXPR@3202..3512
DOT2EQ@3202..3205 "..="
RANGE_EXPR@3205..3512
DOT2@3205..3207 ".."
WHITESPACE@3207..3212 "\n "
RANGE_EXPR@3212..3512
DOT2EQ@3212..3215 "..="
RANGE_EXPR@3215..3512
DOT2@3215..3217 ".."
WHITESPACE@3217..3218 " "
RANGE_EXPR@3218..3512
DOT2EQ@3218..3221 "..="
RANGE_EXPR@3221..3512
DOT2@3221..3223 ".."
WHITESPACE@3223..3227 " "
RANGE_EXPR@3227..3512
DOT2EQ@3227..3230 "..="
RANGE_EXPR@3230..3512
DOT2@3230..3232 ".."
WHITESPACE@3232..3233 " "
RANGE_EXPR@3233..3512
DOT2EQ@3233..3236 "..="
RANGE_EXPR@3236..3512
DOT2@3236..3238 ".."
WHITESPACE@3238..3242 " "
RANGE_EXPR@3242..3512
DOT2@3242..3244 ".."
WHITESPACE@3244..3245 " "
RANGE_EXPR@3245..3512
DOT2EQ@3245..3248 "..="
RANGE_EXPR@3248..3512
DOT2EQ@3248..3251 "..="
RANGE_EXPR@3251..3512
DOT2@3251..3253 ".."
WHITESPACE@3253..3257 " "
RANGE_EXPR@3257..3512
DOT2@3257..3259 ".."
WHITESPACE@3259..3260 " "
RANGE_EXPR@3260..3512
DOT2EQ@3260..3263 "..="
RANGE_EXPR@3263..3512
DOT2@3263..3265 ".."
WHITESPACE@3265..3266 " "
RANGE_EXPR@3266..3512
DOT2@3266..3268 ".."
WHITESPACE@3268..3273 "\n "
RANGE_EXPR@3273..3512
DOT2EQ@3273..3276 "..="
RANGE_EXPR@3276..3512
DOT2EQ@3276..3279 "..="
RANGE_EXPR@3279..3512
DOT2@3279..3281 ".."
WHITESPACE@3281..3282 " "
RANGE_EXPR@3282..3512
DOT2@3282..3284 ".."
WHITESPACE@3284..3288 " "
RANGE_EXPR@3288..3512
DOT2EQ@3288..3291 "..="
RANGE_EXPR@3291..3512
DOT2@3291..3293 ".."
WHITESPACE@3293..3294 " "
RANGE_EXPR@3294..3512
DOT2EQ@3294..3297 "..="
RANGE_EXPR@3297..3512
DOT2@3297..3299 ".."
WHITESPACE@3299..3303 " "
RANGE_EXPR@3303..3512
DOT2EQ@3303..3306 "..="
RANGE_EXPR@3306..3512
DOT2@3306..3308 ".."
WHITESPACE@3308..3309 " "
RANGE_EXPR@3309..3512
DOT2@3309..3311 ".."
WHITESPACE@3311..3312 " "
RANGE_EXPR@3312..3512
DOT2@3312..3314 ".."
WHITESPACE@3314..3318 " "
RANGE_EXPR@3318..3512
DOT2@3318..3320 ".."
WHITESPACE@3320..3321 " "
RANGE_EXPR@3321..3512
DOT2EQ@3321..3324 "..="
RANGE_EXPR@3324..3512
DOT2@3324..3326 ".."
WHITESPACE@3326..3327 " "
RANGE_EXPR@3327..3512
DOT2@3327..3329 ".."
WHITESPACE@3329..3334 "\n "
RANGE_EXPR@3334..3512
DOT2EQ@3334..3337 "..="
RANGE_EXPR@3337..3512
DOT2@3337..3339 ".."
WHITESPACE@3339..3340 " "
RANGE_EXPR@3340..3512
DOT2EQ@3340..3343 "..="
RANGE_EXPR@3343..3512
DOT2@3343..3345 ".."
WHITESPACE@3345..3349 " "
RANGE_EXPR@3349..3512
DOT2EQ@3349..3352 "..="
RANGE_EXPR@3352..3512
DOT2@3352..3354 ".."
WHITESPACE@3354..3355 " "
RANGE_EXPR@3355..3512
DOT2EQ@3355..3358 "..="
RANGE_EXPR@3358..3512
DOT2@3358..3360 ".."
WHITESPACE@3360..3364 " "
RANGE_EXPR@3364..3512
DOT2@3364..3366 ".."
WHITESPACE@3366..3367 " "
RANGE_EXPR@3367..3512
DOT2EQ@3367..3370 "..="
RANGE_EXPR@3370..3512
DOT2@3370..3372 ".."
WHITESPACE@3372..3373 " "
RANGE_EXPR@3373..3512
DOT2@3373..3375 ".."
WHITESPACE@3375..3379 " "
RANGE_EXPR@3379..3512
DOT2@3379..3381 ".."
WHITESPACE@3381..3382 " "
RANGE_EXPR@3382..3512
DOT2EQ@3382..3385 "..="
RANGE_EXPR@3385..3512
DOT2@3385..3387 ".."
WHITESPACE@3387..3388 " "
RANGE_EXPR@3388..3512
DOT2@3388..3390 ".."
WHITESPACE@3390..3395 "\n "
RANGE_EXPR@3395..3512
DOT2EQ@3395..3398 "..="
RANGE_EXPR@3398..3512
DOT2@3398..3400 ".."
WHITESPACE@3400..3401 " "
RANGE_EXPR@3401..3512
DOT2EQ@3401..3404 "..="
RANGE_EXPR@3404..3512
DOT2@3404..3406 ".."
WHITESPACE@3406..3410 " "
RANGE_EXPR@3410..3512
DOT2EQ@3410..3413 "..="
RANGE_EXPR@3413..3512
DOT2@3413..3415 ".."
WHITESPACE@3415..3416 " "
RANGE_EXPR@3416..3512
DOT2EQ@3416..3419 "..="
RANGE_EXPR@3419..3512
DOT2@3419..3421 ".."
WHITESPACE@3421..3425 " "
RANGE_EXPR@3425..3512
DOT2@3425..3427 ".."
WHITESPACE@3427..3428 " "
RANGE_EXPR@3428..3512
DOT2@3428..3430 ".."
WHITESPACE@3430..3431 " "
RANGE_EXPR@3431..3512
DOT2EQ@3431..3434 "..="
RANGE_EXPR@3434..3512
DOT2@3434..3436 ".."
WHITESPACE@3436..3440 " "
RANGE_EXPR@3440..3512
DOT2@3440..3442 ".."
WHITESPACE@3442..3443 " "
RANGE_EXPR@3443..3512
DOT2EQ@3443..3446 "..="
RANGE_EXPR@3446..3512
DOT2@3446..3448 ".."
WHITESPACE@3448..3449 " "
RANGE_EXPR@3449..3512
DOT2@3449..3451 ".."
WHITESPACE@3451..3456 "\n "
RANGE_EXPR@3456..3512
DOT2EQ@3456..3459 "..="
RANGE_EXPR@3459..3512
DOT2@3459..3461 ".."
WHITESPACE@3461..3462 " "
RANGE_EXPR@3462..3512
DOT2EQ@3462..3465 "..="
RANGE_EXPR@3465..3512
DOT2@3465..3467 ".."
WHITESPACE@3467..3471 " "
RANGE_EXPR@3471..3512
DOT2@3471..3473 ".."
WHITESPACE@3473..3474 " "
RANGE_EXPR@3474..3512
DOT2EQ@3474..3477 "..="
RANGE_EXPR@3477..3512
DOT2EQ@3477..3480 "..="
RANGE_EXPR@3480..3512
DOT2@3480..3482 ".."
WHITESPACE@3482..3486 " "
RANGE_EXPR@3486..3512
DOT2EQ@3486..3489 "..="
RANGE_EXPR@3489..3512
DOT2EQ@3489..3492 "..="
RANGE_EXPR@3492..3512
DOT2@3492..3494 ".."
WHITESPACE@3494..3495 " "
RANGE_EXPR@3495..3512
DOT2@3495..3497 ".."
WHITESPACE@3497..3501 " "
RANGE_EXPR@3501..3512
DOT2@3501..3503 ".."
WHITESPACE@3503..3504 " "
RANGE_EXPR@3504..3512
DOT2EQ@3504..3507 "..="
RANGE_EXPR@3507..3512
DOT2@3507..3509 ".."
WHITESPACE@3509..3510 " "
RANGE_EXPR@3510..3512
DOT2@3510..3512 ".."
WHITESPACE@3512..3513 "\n"
R_CURLY@3513..3514 "}"
WHITESPACE@3514..3516 "\n\n"
FN@3516..3552
FN_KW@3516..3518 "fn"
WHITESPACE@3518..3519 " "
NAME@3519..3525
IDENT@3519..3525 "ktulhu"
PARAM_LIST@3525..3527
L_PAREN@3525..3526 "("
R_PAREN@3526..3527 ")"
WHITESPACE@3527..3528 " "
BLOCK_EXPR@3528..3552
STMT_LIST@3528..3552
L_CURLY@3528..3529 "{"
WHITESPACE@3529..3534 "\n "
SEMICOLON@3534..3535 ";"
SEMICOLON@3535..3536 ";"
SEMICOLON@3536..3537 ";"
EXPR_STMT@3537..3540
TUPLE_EXPR@3537..3539
L_PAREN@3537..3538 "("
R_PAREN@3538..3539 ")"
SEMICOLON@3539..3540 ";"
SEMICOLON@3540..3541 ";"
SEMICOLON@3541..3542 ";"
SEMICOLON@3542..3543 ";"
SEMICOLON@3543..3544 ";"
SEMICOLON@3544..3545 ";"
SEMICOLON@3545..3546 ";"
SEMICOLON@3546..3547 ";"
SEMICOLON@3547..3548 ";"
TUPLE_EXPR@3548..3550
L_PAREN@3548..3549 "("
R_PAREN@3549..3550 ")"
WHITESPACE@3550..3551 "\n"
R_CURLY@3551..3552 "}"
WHITESPACE@3552..3554 "\n\n"
FN@3554..3812
VISIBILITY@3554..3557
PUB_KW@3554..3557 "pub"
WHITESPACE@3557..3558 " "
FN_KW@3558..3560 "fn"
WHITESPACE@3560..3561 " "
NAME@3561..3565
IDENT@3561..3565 "main"
PARAM_LIST@3565..3567
L_PAREN@3565..3566 "("
R_PAREN@3566..3567 ")"
WHITESPACE@3567..3568 " "
BLOCK_EXPR@3568..3812
STMT_LIST@3568..3812
L_CURLY@3568..3569 "{"
WHITESPACE@3569..3574 "\n "
EXPR_STMT@3574..3584
CALL_EXPR@3574..3583
PATH_EXPR@3574..3581
PATH@3574..3581
PATH_SEGMENT@3574..3581
NAME_REF@3574..3581
IDENT@3574..3581 "strange"
ARG_LIST@3581..3583
L_PAREN@3581..3582 "("
R_PAREN@3582..3583 ")"
SEMICOLON@3583..3584 ";"
WHITESPACE@3584..3589 "\n "
EXPR_STMT@3589..3597
CALL_EXPR@3589..3596
PATH_EXPR@3589..3594
PATH@3589..3594
PATH_SEGMENT@3589..3594
NAME_REF@3589..3594
IDENT@3589..3594 "funny"
ARG_LIST@3594..3596
L_PAREN@3594..3595 "("
R_PAREN@3595..3596 ")"
SEMICOLON@3596..3597 ";"
WHITESPACE@3597..3602 "\n "
EXPR_STMT@3602..3609
CALL_EXPR@3602..3608
PATH_EXPR@3602..3606
PATH@3602..3606
PATH_SEGMENT@3602..3606
NAME_REF@3602..3606
IDENT@3602..3606 "what"
ARG_LIST@3606..3608
L_PAREN@3606..3607 "("
R_PAREN@3607..3608 ")"
SEMICOLON@3608..3609 ";"
WHITESPACE@3609..3614 "\n "
EXPR_STMT@3614..3628
CALL_EXPR@3614..3627
PATH_EXPR@3614..3625
PATH@3614..3625
PATH_SEGMENT@3614..3625
NAME_REF@3614..3625
IDENT@3614..3625 "zombiejesus"
ARG_LIST@3625..3627
L_PAREN@3625..3626 "("
R_PAREN@3626..3627 ")"
SEMICOLON@3627..3628 ";"
WHITESPACE@3628..3633 "\n "
EXPR_STMT@3633..3643
CALL_EXPR@3633..3642
PATH_EXPR@3633..3640
PATH@3633..3640
PATH_SEGMENT@3633..3640
NAME_REF@3633..3640
IDENT@3633..3640 "notsure"
ARG_LIST@3640..3642
L_PAREN@3640..3641 "("
R_PAREN@3641..3642 ")"
SEMICOLON@3642..3643 ";"
WHITESPACE@3643..3648 "\n "
EXPR_STMT@3648..3664
CALL_EXPR@3648..3663
PATH_EXPR@3648..3661
PATH@3648..3661
PATH_SEGMENT@3648..3661
NAME_REF@3648..3661
IDENT@3648..3661 "canttouchthis"
ARG_LIST@3661..3663
L_PAREN@3661..3662 "("
R_PAREN@3662..3663 ")"
SEMICOLON@3663..3664 ";"
WHITESPACE@3664..3669 "\n "
EXPR_STMT@3669..3681
CALL_EXPR@3669..3680
PATH_EXPR@3669..3678
PATH@3669..3678
PATH_SEGMENT@3669..3678
NAME_REF@3669..3678
IDENT@3669..3678 "angrydome"
ARG_LIST@3678..3680
L_PAREN@3678..3679 "("
R_PAREN@3679..3680 ")"
SEMICOLON@3680..3681 ";"
WHITESPACE@3681..3686 "\n "
EXPR_STMT@3686..3701
CALL_EXPR@3686..3700
PATH_EXPR@3686..3698
PATH@3686..3698
PATH_SEGMENT@3686..3698
NAME_REF@3686..3698
IDENT@3686..3698 "evil_lincoln"
ARG_LIST@3698..3700
L_PAREN@3698..3699 "("
R_PAREN@3699..3700 ")"
SEMICOLON@3700..3701 ";"
WHITESPACE@3701..3706 "\n "
EXPR_STMT@3706..3713
CALL_EXPR@3706..3712
PATH_EXPR@3706..3710
PATH@3706..3710
PATH_SEGMENT@3706..3710
NAME_REF@3706..3710
IDENT@3706..3710 "dots"
ARG_LIST@3710..3712
L_PAREN@3710..3711 "("
R_PAREN@3711..3712 ")"
SEMICOLON@3712..3713 ";"
WHITESPACE@3713..3718 "\n "
EXPR_STMT@3718..3726
CALL_EXPR@3718..3725
PATH_EXPR@3718..3720
PATH@3718..3720
PATH_SEGMENT@3718..3720
NAME_REF@3718..3720
IDENT@3718..3720 "u8"
ARG_LIST@3720..3725
L_PAREN@3720..3721 "("
LITERAL@3721..3724
INT_NUMBER@3721..3724 "8u8"
R_PAREN@3724..3725 ")"
SEMICOLON@3725..3726 ";"
WHITESPACE@3726..3731 "\n "
EXPR_STMT@3731..3739
CALL_EXPR@3731..3738
PATH_EXPR@3731..3736
PATH@3731..3736
PATH_SEGMENT@3731..3736
NAME_REF@3731..3736
IDENT@3731..3736 "fishy"
ARG_LIST@3736..3738
L_PAREN@3736..3737 "("
R_PAREN@3737..3738 ")"
SEMICOLON@3738..3739 ";"
WHITESPACE@3739..3744 "\n "
EXPR_STMT@3744..3752
CALL_EXPR@3744..3751
PATH_EXPR@3744..3749
PATH@3744..3749
PATH_SEGMENT@3744..3749
NAME_REF@3744..3749
IDENT@3744..3749 "union"
ARG_LIST@3749..3751
L_PAREN@3749..3750 "("
R_PAREN@3750..3751 ")"
SEMICOLON@3751..3752 ";"
WHITESPACE@3752..3757 "\n "
EXPR_STMT@3757..3778
CALL_EXPR@3757..3777
PATH_EXPR@3757..3775
PATH@3757..3775
PATH_SEGMENT@3757..3775
NAME_REF@3757..3775
IDENT@3757..3775 "special_characters"
ARG_LIST@3775..3777
L_PAREN@3775..3776 "("
R_PAREN@3776..3777 ")"
SEMICOLON@3777..3778 ";"
WHITESPACE@3778..3783 "\n "
EXPR_STMT@3783..3796
CALL_EXPR@3783..3795
PATH_EXPR@3783..3793
PATH@3783..3793
PATH_SEGMENT@3783..3793
NAME_REF@3783..3793
IDENT@3783..3793 "punch_card"
ARG_LIST@3793..3795
L_PAREN@3793..3794 "("
R_PAREN@3794..3795 ")"
SEMICOLON@3795..3796 ";"
WHITESPACE@3796..3801 "\n "
EXPR_STMT@3801..3810
CALL_EXPR@3801..3809
PATH_EXPR@3801..3807
PATH@3801..3807
PATH_SEGMENT@3801..3807
NAME_REF@3801..3807
IDENT@3801..3807 "ktulhu"
ARG_LIST@3807..3809
L_PAREN@3807..3808 "("
R_PAREN@3808..3809 ")"
SEMICOLON@3809..3810 ";"
WHITESPACE@3810..3811 "\n"
R_CURLY@3811..3812 "}"
WHITESPACE@3812..3813 "\n"