rbs 4.0.3 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. checksums.yaml +4 -4
  2. data/.dockerignore +37 -0
  3. data/.github/workflows/bundle-update.yml +1 -1
  4. data/.github/workflows/c-check.yml +14 -6
  5. data/.github/workflows/comments.yml +2 -2
  6. data/.github/workflows/dependabot.yml +2 -2
  7. data/.github/workflows/jruby.yml +79 -0
  8. data/.github/workflows/milestone.yml +13 -2
  9. data/.github/workflows/ruby.yml +43 -3
  10. data/.github/workflows/rust.yml +13 -10
  11. data/.github/workflows/truffleruby.yml +54 -0
  12. data/.github/workflows/typecheck.yml +5 -2
  13. data/.github/workflows/wasm.yml +55 -0
  14. data/.github/workflows/windows.yml +5 -2
  15. data/.gitignore +8 -0
  16. data/CHANGELOG.md +84 -4
  17. data/Dockerfile.jruby +53 -0
  18. data/README.md +3 -3
  19. data/Rakefile +105 -3
  20. data/Steepfile +9 -0
  21. data/config.yml +24 -0
  22. data/core/array.rbs +243 -180
  23. data/core/builtin.rbs +7 -6
  24. data/core/class.rbs +5 -3
  25. data/core/enumerable.rbs +109 -109
  26. data/core/enumerator/product.rbs +5 -5
  27. data/core/enumerator.rbs +28 -28
  28. data/core/file.rbs +24 -1018
  29. data/core/file_constants.rbs +463 -0
  30. data/core/file_stat.rbs +534 -0
  31. data/core/float.rbs +0 -24
  32. data/core/hash.rbs +117 -101
  33. data/core/integer.rbs +21 -58
  34. data/core/io.rbs +25 -7
  35. data/core/kernel.rbs +26 -11
  36. data/core/match_data.rbs +1 -1
  37. data/core/module.rbs +88 -74
  38. data/core/numeric.rbs +3 -0
  39. data/core/object_space/weak_key_map.rbs +7 -7
  40. data/core/pathname.rbs +0 -10
  41. data/core/ractor.rbs +0 -10
  42. data/core/range.rbs +23 -23
  43. data/core/rbs/ops.rbs +154 -0
  44. data/core/rbs/unnamed/argf.rbs +3 -3
  45. data/core/ruby_vm.rbs +40 -0
  46. data/core/rubygems/errors.rbs +4 -1
  47. data/core/rubygems/requirement.rbs +0 -10
  48. data/core/rubygems/rubygems.rbs +4 -1
  49. data/core/rubygems/specification.rbs +8 -0
  50. data/core/rubygems/version.rbs +0 -160
  51. data/core/set.rbs +3 -3
  52. data/core/struct.rbs +16 -16
  53. data/core/thread.rbs +9 -14
  54. data/docs/CONTRIBUTING.md +2 -1
  55. data/docs/inline.md +65 -7
  56. data/docs/rbs_by_example.md +20 -20
  57. data/docs/release.md +69 -0
  58. data/docs/syntax.md +2 -2
  59. data/docs/wasm_serialization.md +80 -0
  60. data/ext/rbs_extension/ast_translation.c +1298 -956
  61. data/ext/rbs_extension/ast_translation.h +4 -0
  62. data/ext/rbs_extension/class_constants.c +2 -0
  63. data/ext/rbs_extension/class_constants.h +1 -0
  64. data/ext/rbs_extension/extconf.rb +1 -0
  65. data/ext/rbs_extension/legacy_location.c +11 -6
  66. data/ext/rbs_extension/main.c +139 -4
  67. data/include/rbs/ast.h +323 -298
  68. data/include/rbs/defines.h +13 -0
  69. data/include/rbs/lexer.h +1 -0
  70. data/include/rbs/serialize.h +39 -0
  71. data/lib/rbs/annotate/rdoc_annotator.rb +27 -31
  72. data/lib/rbs/ast/ruby/annotations.rb +42 -0
  73. data/lib/rbs/ast/ruby/comment_block.rb +6 -4
  74. data/lib/rbs/ast/ruby/declarations.rb +11 -1
  75. data/lib/rbs/ast/ruby/helpers/location_helper.rb +1 -1
  76. data/lib/rbs/ast/ruby/members.rb +40 -1
  77. data/lib/rbs/buffer.rb +48 -11
  78. data/lib/rbs/cli.rb +3 -5
  79. data/lib/rbs/collection/config/lockfile_generator.rb +14 -1
  80. data/lib/rbs/collection/sources/git.rb +6 -0
  81. data/lib/rbs/definition_builder/method_builder.rb +12 -6
  82. data/lib/rbs/environment.rb +10 -3
  83. data/lib/rbs/inline_parser.rb +54 -28
  84. data/lib/rbs/namespace.rb +47 -11
  85. data/lib/rbs/parser_aux.rb +4 -2
  86. data/lib/rbs/prototype/rbi.rb +193 -25
  87. data/lib/rbs/prototype/runtime.rb +2 -0
  88. data/lib/rbs/resolver/type_name_resolver.rb +12 -14
  89. data/lib/rbs/rewriter.rb +70 -0
  90. data/lib/rbs/test/type_check.rb +6 -1
  91. data/lib/rbs/type_name.rb +33 -13
  92. data/lib/rbs/unit_test/type_assertions.rb +9 -0
  93. data/lib/rbs/version.rb +1 -1
  94. data/lib/rbs/wasm/deserializer.rb +213 -0
  95. data/lib/rbs/wasm/location.rb +61 -0
  96. data/lib/rbs/wasm/parser.rb +137 -0
  97. data/lib/rbs/wasm/runtime.rb +196 -0
  98. data/lib/rbs/wasm/serialization_schema.rb +110 -0
  99. data/lib/rbs.rb +14 -2
  100. data/lib/rbs_jars.rb +39 -0
  101. data/lib/rdoc_plugin/parser.rb +5 -0
  102. data/rbs.gemspec +32 -2
  103. data/sig/annotate/rdoc_annotater.rbs +12 -9
  104. data/sig/ast/ruby/annotations.rbs +49 -0
  105. data/sig/ast/ruby/members.rbs +21 -1
  106. data/sig/buffer.rbs +19 -1
  107. data/sig/collection/config/lockfile_generator.rbs +2 -0
  108. data/sig/inline_parser.rbs +2 -0
  109. data/sig/manifest.yaml +0 -1
  110. data/sig/namespace.rbs +20 -0
  111. data/sig/parser.rbs +10 -0
  112. data/sig/prototype/rbi.rbs +33 -4
  113. data/sig/resolver/type_name_resolver.rbs +2 -4
  114. data/sig/rewriter.rbs +45 -0
  115. data/sig/typename.rbs +15 -0
  116. data/sig/unit_test/type_assertions.rbs +4 -0
  117. data/sig/wasm/deserializer.rbs +66 -0
  118. data/sig/wasm/serialization_schema.rbs +13 -0
  119. data/src/ast.c +186 -162
  120. data/src/lexer.c +220 -193
  121. data/src/lexer.re +2 -1
  122. data/src/lexstate.c +10 -1
  123. data/src/parser.c +55 -5
  124. data/src/serialize.c +958 -0
  125. data/src/util/rbs_allocator.c +14 -8
  126. data/stdlib/abbrev/0/array.rbs +1 -1
  127. data/stdlib/csv/0/csv.rbs +5 -5
  128. data/stdlib/delegate/0/delegator.rbs +2 -1
  129. data/stdlib/digest/0/digest.rbs +11 -5
  130. data/stdlib/erb/0/erb.rbs +1 -1
  131. data/stdlib/etc/0/etc.rbs +18 -4
  132. data/stdlib/fileutils/0/fileutils.rbs +21 -21
  133. data/stdlib/ipaddr/0/ipaddr.rbs +0 -5
  134. data/stdlib/json/0/json.rbs +6 -6
  135. data/stdlib/monitor/0/monitor.rbs +2 -2
  136. data/stdlib/openssl/0/openssl.rbs +46 -40
  137. data/stdlib/resolv/0/resolv.rbs +1 -1
  138. data/stdlib/shellwords/0/shellwords.rbs +1 -1
  139. data/stdlib/stringio/0/stringio.rbs +32 -10
  140. data/stdlib/strscan/0/string_scanner.rbs +74 -55
  141. data/stdlib/tempfile/0/manifest.yaml +3 -0
  142. data/stdlib/timeout/0/timeout.rbs +0 -5
  143. data/stdlib/tsort/0/cyclic.rbs +1 -1
  144. data/stdlib/tsort/0/interfaces.rbs +8 -8
  145. data/stdlib/tsort/0/tsort.rbs +9 -9
  146. data/stdlib/uri/0/generic.rbs +0 -5
  147. data/stdlib/zlib/0/gzip_reader.rbs +2 -2
  148. data/stdlib/zlib/0/zstream.rbs +0 -1
  149. data/wasm/README.md +60 -0
  150. data/wasm/rbs_wasm.c +423 -0
  151. metadata +28 -5
  152. data/.vscode/extensions.json +0 -5
  153. data/.vscode/settings.json +0 -19
data/src/lexer.c CHANGED
@@ -1,4 +1,4 @@
1
- /* Generated by re2c 4.3 */
1
+ /* Generated by re2c 4.5.1 */
2
2
  #line 1 "src/lexer.re"
3
3
  #include "rbs/lexer.h"
4
4
 
@@ -166,7 +166,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
166
166
  }
167
167
  yy1:
168
168
  rbs_skip(lexer);
169
- #line 151 "src/lexer.re"
169
+ #line 152 "src/lexer.re"
170
170
  {
171
171
  return rbs_next_eof_token(lexer);
172
172
  }
@@ -174,7 +174,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
174
174
  yy2:
175
175
  rbs_skip(lexer);
176
176
  yy3:
177
- #line 152 "src/lexer.re"
177
+ #line 153 "src/lexer.re"
178
178
  {
179
179
  return rbs_next_token(lexer, ErrorToken);
180
180
  }
@@ -185,7 +185,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
185
185
  if (yych == '\t') goto yy4;
186
186
  if (yych == ' ') goto yy4;
187
187
  yy5:
188
- #line 150 "src/lexer.re"
188
+ #line 151 "src/lexer.re"
189
189
  {
190
190
  return rbs_next_token(lexer, tTRIVIA);
191
191
  }
@@ -214,8 +214,12 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
214
214
  yy10:
215
215
  rbs_skip(lexer);
216
216
  yych = rbs_peek(lexer);
217
- if (yych <= 0x00000000) goto yy11;
218
- if (yych != '\n') goto yy10;
217
+ if (yych <= '\n') {
218
+ if (yych <= 0x00000000) goto yy11;
219
+ if (yych <= '\t') goto yy10;
220
+ } else {
221
+ if (yych != 0x0000FFFD) goto yy10;
222
+ }
219
223
  yy11:
220
224
  #line 61 "src/lexer.re"
221
225
  {
@@ -224,7 +228,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
224
228
  lexer->first_token_of_line ? tLINECOMMENT : tCOMMENT
225
229
  );
226
230
  }
227
- #line 169 "src/lexer.c"
231
+ #line 173 "src/lexer.c"
228
232
  yy12:
229
233
  rbs_skip(lexer);
230
234
  yych = rbs_peek(lexer);
@@ -284,7 +288,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
284
288
  {
285
289
  return rbs_next_token(lexer, pAMP);
286
290
  }
287
- #line 227 "src/lexer.c"
291
+ #line 231 "src/lexer.c"
288
292
  yy15:
289
293
  yyaccept = 0;
290
294
  rbs_skip(lexer);
@@ -298,14 +302,14 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
298
302
  {
299
303
  return rbs_next_token(lexer, pLPAREN);
300
304
  }
301
- #line 239 "src/lexer.c"
305
+ #line 243 "src/lexer.c"
302
306
  yy17:
303
307
  rbs_skip(lexer);
304
308
  #line 25 "src/lexer.re"
305
309
  {
306
310
  return rbs_next_token(lexer, pRPAREN);
307
311
  }
308
- #line 244 "src/lexer.c"
312
+ #line 248 "src/lexer.c"
309
313
  yy18:
310
314
  rbs_skip(lexer);
311
315
  yych = rbs_peek(lexer);
@@ -314,7 +318,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
314
318
  {
315
319
  return rbs_next_token(lexer, pSTAR);
316
320
  }
317
- #line 251 "src/lexer.c"
321
+ #line 255 "src/lexer.c"
318
322
  yy19:
319
323
  rbs_skip(lexer);
320
324
  yych = rbs_peek(lexer);
@@ -328,7 +332,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
328
332
  {
329
333
  return rbs_next_token(lexer, pCOMMA);
330
334
  }
331
- #line 263 "src/lexer.c"
335
+ #line 267 "src/lexer.c"
332
336
  yy21:
333
337
  rbs_skip(lexer);
334
338
  yych = rbs_peek(lexer);
@@ -364,7 +368,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
364
368
  {
365
369
  return rbs_next_token(lexer, pDOT);
366
370
  }
367
- #line 292 "src/lexer.c"
371
+ #line 296 "src/lexer.c"
368
372
  yy24:
369
373
  rbs_skip(lexer);
370
374
  goto yy8;
@@ -379,7 +383,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
379
383
  {
380
384
  return rbs_next_token(lexer, tINTEGER);
381
385
  }
382
- #line 305 "src/lexer.c"
386
+ #line 309 "src/lexer.c"
383
387
  yy27:
384
388
  yyaccept = 3;
385
389
  rbs_skip(lexer);
@@ -481,7 +485,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
481
485
  {
482
486
  return rbs_next_token(lexer, pCOLON);
483
487
  }
484
- #line 390 "src/lexer.c"
488
+ #line 394 "src/lexer.c"
485
489
  yy29:
486
490
  rbs_skip(lexer);
487
491
  yych = rbs_peek(lexer);
@@ -493,7 +497,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
493
497
  {
494
498
  return rbs_next_token(lexer, pLT);
495
499
  }
496
- #line 400 "src/lexer.c"
500
+ #line 404 "src/lexer.c"
497
501
  yy31:
498
502
  rbs_skip(lexer);
499
503
  yych = rbs_peek(lexer);
@@ -509,7 +513,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
509
513
  {
510
514
  return rbs_next_token(lexer, pEQ);
511
515
  }
512
- #line 414 "src/lexer.c"
516
+ #line 418 "src/lexer.c"
513
517
  yy33:
514
518
  rbs_skip(lexer);
515
519
  yych = rbs_peek(lexer);
@@ -520,14 +524,14 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
520
524
  {
521
525
  return rbs_next_token(lexer, pGT);
522
526
  }
523
- #line 423 "src/lexer.c"
527
+ #line 427 "src/lexer.c"
524
528
  yy35:
525
529
  rbs_skip(lexer);
526
530
  #line 34 "src/lexer.re"
527
531
  {
528
532
  return rbs_next_token(lexer, pQUESTION);
529
533
  }
530
- #line 428 "src/lexer.c"
534
+ #line 432 "src/lexer.c"
531
535
  yy36:
532
536
  yyaccept = 0;
533
537
  rbs_skip(lexer);
@@ -572,11 +576,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
572
576
  }
573
577
  }
574
578
  yy38:
575
- #line 136 "src/lexer.re"
579
+ #line 137 "src/lexer.re"
576
580
  {
577
581
  return rbs_next_token(lexer, tUIDENT);
578
582
  }
579
- #line 475 "src/lexer.c"
583
+ #line 479 "src/lexer.c"
580
584
  yy39:
581
585
  rbs_skip(lexer);
582
586
  yych = rbs_peek(lexer);
@@ -585,21 +589,21 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
585
589
  {
586
590
  return rbs_next_token(lexer, pLBRACKET);
587
591
  }
588
- #line 482 "src/lexer.c"
592
+ #line 486 "src/lexer.c"
589
593
  yy40:
590
594
  rbs_skip(lexer);
591
595
  #line 27 "src/lexer.re"
592
596
  {
593
597
  return rbs_next_token(lexer, pRBRACKET);
594
598
  }
595
- #line 487 "src/lexer.c"
599
+ #line 491 "src/lexer.c"
596
600
  yy41:
597
601
  rbs_skip(lexer);
598
602
  #line 32 "src/lexer.re"
599
603
  {
600
604
  return rbs_next_token(lexer, pHAT);
601
605
  }
602
- #line 492 "src/lexer.c"
606
+ #line 496 "src/lexer.c"
603
607
  yy42:
604
608
  rbs_skip(lexer);
605
609
  yych = rbs_peek(lexer);
@@ -621,11 +625,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
621
625
  }
622
626
  }
623
627
  yy43:
624
- #line 139 "src/lexer.re"
628
+ #line 140 "src/lexer.re"
625
629
  {
626
630
  return rbs_next_token(lexer, tULLIDENT);
627
631
  }
628
- #line 516 "src/lexer.c"
632
+ #line 520 "src/lexer.c"
629
633
  yy44:
630
634
  yyaccept = 4;
631
635
  rbs_skip(lexer);
@@ -642,7 +646,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
642
646
  {
643
647
  return rbs_next_token(lexer, tOPERATOR);
644
648
  }
645
- #line 531 "src/lexer.c"
649
+ #line 535 "src/lexer.c"
646
650
  yy46:
647
651
  rbs_skip(lexer);
648
652
  yych = rbs_peek(lexer);
@@ -655,11 +659,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
655
659
  goto yy54;
656
660
  }
657
661
  yy47:
658
- #line 135 "src/lexer.re"
662
+ #line 136 "src/lexer.re"
659
663
  {
660
664
  return rbs_next_token(lexer, tLIDENT);
661
665
  }
662
- #line 546 "src/lexer.c"
666
+ #line 550 "src/lexer.c"
663
667
  yy48:
664
668
  rbs_skip(lexer);
665
669
  yych = rbs_peek(lexer);
@@ -780,21 +784,21 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
780
784
  {
781
785
  return rbs_next_token(lexer, pLBRACE);
782
786
  }
783
- #line 665 "src/lexer.c"
787
+ #line 669 "src/lexer.c"
784
788
  yy66:
785
789
  rbs_skip(lexer);
786
790
  #line 31 "src/lexer.re"
787
791
  {
788
792
  return rbs_next_token(lexer, pBAR);
789
793
  }
790
- #line 670 "src/lexer.c"
794
+ #line 674 "src/lexer.c"
791
795
  yy67:
792
796
  rbs_skip(lexer);
793
797
  #line 29 "src/lexer.re"
794
798
  {
795
799
  return rbs_next_token(lexer, pRBRACE);
796
800
  }
797
- #line 675 "src/lexer.c"
801
+ #line 679 "src/lexer.c"
798
802
  yy68:
799
803
  rbs_skip(lexer);
800
804
  yych = rbs_peek(lexer);
@@ -836,11 +840,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
836
840
  }
837
841
  yy71:
838
842
  rbs_skip(lexer);
839
- #line 113 "src/lexer.re"
843
+ #line 114 "src/lexer.re"
840
844
  {
841
845
  return rbs_next_token(lexer, tDQSTRING);
842
846
  }
843
- #line 715 "src/lexer.c"
847
+ #line 719 "src/lexer.c"
844
848
  yy72:
845
849
  rbs_skip(lexer);
846
850
  yych = rbs_peek(lexer);
@@ -877,11 +881,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
877
881
  }
878
882
  }
879
883
  yy74:
880
- #line 146 "src/lexer.re"
884
+ #line 147 "src/lexer.re"
881
885
  {
882
886
  return rbs_next_token(lexer, tGIDENT);
883
887
  }
884
- #line 754 "src/lexer.c"
888
+ #line 758 "src/lexer.c"
885
889
  yy75:
886
890
  rbs_skip(lexer);
887
891
  goto yy74;
@@ -920,11 +924,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
920
924
  yy79:
921
925
  rbs_skip(lexer);
922
926
  yy80:
923
- #line 114 "src/lexer.re"
927
+ #line 115 "src/lexer.re"
924
928
  {
925
929
  return rbs_next_token(lexer, tSQSTRING);
926
930
  }
927
- #line 795 "src/lexer.c"
931
+ #line 799 "src/lexer.c"
928
932
  yy81:
929
933
  rbs_skip(lexer);
930
934
  yych = rbs_peek(lexer);
@@ -942,7 +946,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
942
946
  {
943
947
  return rbs_next_token(lexer, pSTAR2);
944
948
  }
945
- #line 811 "src/lexer.c"
949
+ #line 815 "src/lexer.c"
946
950
  yy83:
947
951
  rbs_skip(lexer);
948
952
  yych = rbs_peek(lexer);
@@ -951,14 +955,14 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
951
955
  {
952
956
  return rbs_next_token(lexer, tINLINECOMMENT);
953
957
  }
954
- #line 818 "src/lexer.c"
958
+ #line 822 "src/lexer.c"
955
959
  yy84:
956
960
  rbs_skip(lexer);
957
961
  #line 41 "src/lexer.re"
958
962
  {
959
963
  return rbs_next_token(lexer, pARROW);
960
964
  }
961
- #line 823 "src/lexer.c"
965
+ #line 827 "src/lexer.c"
962
966
  yy85:
963
967
  rbs_skip(lexer);
964
968
  yych = rbs_peek(lexer);
@@ -970,11 +974,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
970
974
  if (yych == '=') goto yy90;
971
975
  if (yych == '~') goto yy90;
972
976
  yy87:
973
- #line 133 "src/lexer.re"
977
+ #line 134 "src/lexer.re"
974
978
  {
975
979
  return rbs_next_token(lexer, tSYMBOL);
976
980
  }
977
- #line 837 "src/lexer.c"
981
+ #line 841 "src/lexer.c"
978
982
  yy88:
979
983
  rbs_skip(lexer);
980
984
  yych = rbs_peek(lexer);
@@ -1062,7 +1066,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
1062
1066
  {
1063
1067
  return rbs_next_token(lexer, pCOLON2);
1064
1068
  }
1065
- #line 923 "src/lexer.c"
1069
+ #line 927 "src/lexer.c"
1066
1070
  yy95:
1067
1071
  rbs_skip(lexer);
1068
1072
  yych = rbs_peek(lexer);
@@ -1116,11 +1120,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
1116
1120
  }
1117
1121
  }
1118
1122
  yy100:
1119
- #line 129 "src/lexer.re"
1123
+ #line 130 "src/lexer.re"
1120
1124
  {
1121
1125
  return rbs_next_token(lexer, tSYMBOL);
1122
1126
  }
1123
- #line 979 "src/lexer.c"
1127
+ #line 983 "src/lexer.c"
1124
1128
  yy101:
1125
1129
  rbs_skip(lexer);
1126
1130
  yych = rbs_peek(lexer);
@@ -1142,7 +1146,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
1142
1146
  {
1143
1147
  return rbs_next_token(lexer, pFATARROW);
1144
1148
  }
1145
- #line 999 "src/lexer.c"
1149
+ #line 1003 "src/lexer.c"
1146
1150
  yy105:
1147
1151
  rbs_skip(lexer);
1148
1152
  yych = rbs_peek(lexer);
@@ -1172,11 +1176,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
1172
1176
  }
1173
1177
  }
1174
1178
  yy108:
1175
- #line 143 "src/lexer.re"
1179
+ #line 144 "src/lexer.re"
1176
1180
  {
1177
1181
  return rbs_next_token(lexer, tAIDENT);
1178
1182
  }
1179
- #line 1031 "src/lexer.c"
1183
+ #line 1035 "src/lexer.c"
1180
1184
  yy109:
1181
1185
  rbs_skip(lexer);
1182
1186
  yych = rbs_peek(lexer);
@@ -1184,18 +1188,18 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
1184
1188
  goto yy107;
1185
1189
  yy110:
1186
1190
  rbs_skip(lexer);
1187
- #line 140 "src/lexer.re"
1191
+ #line 141 "src/lexer.re"
1188
1192
  {
1189
1193
  return rbs_next_token(lexer, tBANGIDENT);
1190
1194
  }
1191
- #line 1041 "src/lexer.c"
1195
+ #line 1045 "src/lexer.c"
1192
1196
  yy111:
1193
1197
  rbs_skip(lexer);
1194
- #line 141 "src/lexer.re"
1198
+ #line 142 "src/lexer.re"
1195
1199
  {
1196
1200
  return rbs_next_token(lexer, tEQIDENT);
1197
1201
  }
1198
- #line 1046 "src/lexer.c"
1202
+ #line 1050 "src/lexer.c"
1199
1203
  yy112:
1200
1204
  rbs_skip(lexer);
1201
1205
  yych = rbs_peek(lexer);
@@ -1204,7 +1208,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
1204
1208
  {
1205
1209
  return rbs_next_token(lexer, pAREF_OPR);
1206
1210
  }
1207
- #line 1053 "src/lexer.c"
1211
+ #line 1057 "src/lexer.c"
1208
1212
  yy113:
1209
1213
  rbs_skip(lexer);
1210
1214
  yych = rbs_peek(lexer);
@@ -1226,11 +1230,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
1226
1230
  }
1227
1231
  }
1228
1232
  yy115:
1229
- #line 137 "src/lexer.re"
1233
+ #line 138 "src/lexer.re"
1230
1234
  {
1231
1235
  return rbs_next_token(lexer, tULLIDENT);
1232
1236
  }
1233
- #line 1077 "src/lexer.c"
1237
+ #line 1081 "src/lexer.c"
1234
1238
  yy116:
1235
1239
  rbs_skip(lexer);
1236
1240
  yych = rbs_peek(lexer);
@@ -1251,11 +1255,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
1251
1255
  }
1252
1256
  }
1253
1257
  yy117:
1254
- #line 138 "src/lexer.re"
1258
+ #line 139 "src/lexer.re"
1255
1259
  {
1256
1260
  return rbs_next_token(lexer, tULIDENT);
1257
1261
  }
1258
- #line 1100 "src/lexer.c"
1262
+ #line 1104 "src/lexer.c"
1259
1263
  yy118:
1260
1264
  rbs_skip(lexer);
1261
1265
  yych = rbs_peek(lexer);
@@ -1292,11 +1296,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
1292
1296
  }
1293
1297
  }
1294
1298
  yy122:
1295
- #line 100 "src/lexer.re"
1299
+ #line 101 "src/lexer.re"
1296
1300
  {
1297
1301
  return rbs_next_token(lexer, kAS);
1298
1302
  }
1299
- #line 1139 "src/lexer.c"
1303
+ #line 1143 "src/lexer.c"
1300
1304
  yy123:
1301
1305
  rbs_skip(lexer);
1302
1306
  yych = rbs_peek(lexer);
@@ -1368,7 +1372,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
1368
1372
  {
1369
1373
  return rbs_next_token(lexer, kIN);
1370
1374
  }
1371
- #line 1209 "src/lexer.c"
1375
+ #line 1213 "src/lexer.c"
1372
1376
  yy132:
1373
1377
  rbs_skip(lexer);
1374
1378
  yych = rbs_peek(lexer);
@@ -1516,14 +1520,14 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
1516
1520
  {
1517
1521
  return rbs_next_token(lexer, pDOT3);
1518
1522
  }
1519
- #line 1355 "src/lexer.c"
1523
+ #line 1359 "src/lexer.c"
1520
1524
  yy156:
1521
1525
  rbs_skip(lexer);
1522
- #line 115 "src/lexer.re"
1526
+ #line 116 "src/lexer.re"
1523
1527
  {
1524
1528
  return rbs_next_token(lexer, tDQSYMBOL);
1525
1529
  }
1526
- #line 1360 "src/lexer.c"
1530
+ #line 1364 "src/lexer.c"
1527
1531
  yy157:
1528
1532
  rbs_skip(lexer);
1529
1533
  yych = rbs_peek(lexer);
@@ -1560,22 +1564,22 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
1560
1564
  }
1561
1565
  }
1562
1566
  yy159:
1563
- #line 132 "src/lexer.re"
1567
+ #line 133 "src/lexer.re"
1564
1568
  {
1565
1569
  return rbs_next_token(lexer, tSYMBOL);
1566
1570
  }
1567
- #line 1399 "src/lexer.c"
1571
+ #line 1403 "src/lexer.c"
1568
1572
  yy160:
1569
1573
  rbs_skip(lexer);
1570
1574
  goto yy159;
1571
1575
  yy161:
1572
1576
  rbs_skip(lexer);
1573
1577
  yy162:
1574
- #line 116 "src/lexer.re"
1578
+ #line 117 "src/lexer.re"
1575
1579
  {
1576
1580
  return rbs_next_token(lexer, tSQSYMBOL);
1577
1581
  }
1578
- #line 1408 "src/lexer.c"
1582
+ #line 1412 "src/lexer.c"
1579
1583
  yy163:
1580
1584
  rbs_skip(lexer);
1581
1585
  yych = rbs_peek(lexer);
@@ -1630,11 +1634,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
1630
1634
  }
1631
1635
  }
1632
1636
  yy168:
1633
- #line 130 "src/lexer.re"
1637
+ #line 131 "src/lexer.re"
1634
1638
  {
1635
1639
  return rbs_next_token(lexer, tSYMBOL);
1636
1640
  }
1637
- #line 1465 "src/lexer.c"
1641
+ #line 1469 "src/lexer.c"
1638
1642
  yy169:
1639
1643
  rbs_skip(lexer);
1640
1644
  goto yy100;
@@ -1654,11 +1658,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
1654
1658
  }
1655
1659
  }
1656
1660
  yy171:
1657
- #line 144 "src/lexer.re"
1661
+ #line 145 "src/lexer.re"
1658
1662
  {
1659
1663
  return rbs_next_token(lexer, tA2IDENT);
1660
1664
  }
1661
- #line 1487 "src/lexer.c"
1665
+ #line 1491 "src/lexer.c"
1662
1666
  yy172:
1663
1667
  rbs_skip(lexer);
1664
1668
  yych = rbs_peek(lexer);
@@ -1675,7 +1679,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
1675
1679
  {
1676
1680
  return rbs_next_token(lexer, tQIDENT);
1677
1681
  }
1678
- #line 1502 "src/lexer.c"
1682
+ #line 1506 "src/lexer.c"
1679
1683
  yy175:
1680
1684
  rbs_skip(lexer);
1681
1685
  yych = rbs_peek(lexer);
@@ -1715,7 +1719,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
1715
1719
  {
1716
1720
  return rbs_next_token(lexer, kBOT);
1717
1721
  }
1718
- #line 1540 "src/lexer.c"
1722
+ #line 1544 "src/lexer.c"
1719
1723
  yy180:
1720
1724
  rbs_skip(lexer);
1721
1725
  yych = rbs_peek(lexer);
@@ -1745,7 +1749,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
1745
1749
  {
1746
1750
  return rbs_next_token(lexer, kDEF);
1747
1751
  }
1748
- #line 1568 "src/lexer.c"
1752
+ #line 1572 "src/lexer.c"
1749
1753
  yy183:
1750
1754
  rbs_skip(lexer);
1751
1755
  yych = rbs_peek(lexer);
@@ -1770,7 +1774,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
1770
1774
  {
1771
1775
  return rbs_next_token(lexer, kEND);
1772
1776
  }
1773
- #line 1591 "src/lexer.c"
1777
+ #line 1595 "src/lexer.c"
1774
1778
  yy185:
1775
1779
  rbs_skip(lexer);
1776
1780
  yych = rbs_peek(lexer);
@@ -1821,11 +1825,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
1821
1825
  }
1822
1826
  }
1823
1827
  yy192:
1824
- #line 86 "src/lexer.re"
1828
+ #line 87 "src/lexer.re"
1825
1829
  {
1826
1830
  return rbs_next_token(lexer, kNIL);
1827
1831
  }
1828
- #line 1644 "src/lexer.c"
1832
+ #line 1648 "src/lexer.c"
1829
1833
  yy193:
1830
1834
  rbs_skip(lexer);
1831
1835
  yych = rbs_peek(lexer);
@@ -1846,11 +1850,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
1846
1850
  }
1847
1851
  }
1848
1852
  yy194:
1849
- #line 87 "src/lexer.re"
1853
+ #line 88 "src/lexer.re"
1850
1854
  {
1851
1855
  return rbs_next_token(lexer, kOUT);
1852
1856
  }
1853
- #line 1667 "src/lexer.c"
1857
+ #line 1671 "src/lexer.c"
1854
1858
  yy195:
1855
1859
  rbs_skip(lexer);
1856
1860
  yych = rbs_peek(lexer);
@@ -1906,11 +1910,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
1906
1910
  }
1907
1911
  }
1908
1912
  yy203:
1909
- #line 93 "src/lexer.re"
1913
+ #line 94 "src/lexer.re"
1910
1914
  {
1911
1915
  return rbs_next_token(lexer, kTOP);
1912
1916
  }
1913
- #line 1725 "src/lexer.c"
1917
+ #line 1729 "src/lexer.c"
1914
1918
  yy204:
1915
1919
  rbs_skip(lexer);
1916
1920
  yych = rbs_peek(lexer);
@@ -1951,11 +1955,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
1951
1955
  }
1952
1956
  }
1953
1957
  yy209:
1954
- #line 99 "src/lexer.re"
1958
+ #line 100 "src/lexer.re"
1955
1959
  {
1956
1960
  return rbs_next_token(lexer, kUSE);
1957
1961
  }
1958
- #line 1768 "src/lexer.c"
1962
+ #line 1772 "src/lexer.c"
1959
1963
  yy210:
1960
1964
  rbs_skip(lexer);
1961
1965
  yych = rbs_peek(lexer);
@@ -1980,35 +1984,35 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
1980
1984
  {
1981
1985
  return rbs_next_token(lexer, tANNOTATION);
1982
1986
  }
1983
- #line 1791 "src/lexer.c"
1987
+ #line 1795 "src/lexer.c"
1984
1988
  yy213:
1985
1989
  rbs_skip(lexer);
1986
1990
  #line 59 "src/lexer.re"
1987
1991
  {
1988
1992
  return rbs_next_token(lexer, tANNOTATION);
1989
1993
  }
1990
- #line 1796 "src/lexer.c"
1994
+ #line 1800 "src/lexer.c"
1991
1995
  yy214:
1992
1996
  rbs_skip(lexer);
1993
1997
  #line 57 "src/lexer.re"
1994
1998
  {
1995
1999
  return rbs_next_token(lexer, tANNOTATION);
1996
2000
  }
1997
- #line 1801 "src/lexer.c"
2001
+ #line 1805 "src/lexer.c"
1998
2002
  yy215:
1999
2003
  rbs_skip(lexer);
2000
2004
  #line 55 "src/lexer.re"
2001
2005
  {
2002
2006
  return rbs_next_token(lexer, tANNOTATION);
2003
2007
  }
2004
- #line 1806 "src/lexer.c"
2008
+ #line 1810 "src/lexer.c"
2005
2009
  yy216:
2006
2010
  rbs_skip(lexer);
2007
2011
  #line 58 "src/lexer.re"
2008
2012
  {
2009
2013
  return rbs_next_token(lexer, tANNOTATION);
2010
2014
  }
2011
- #line 1811 "src/lexer.c"
2015
+ #line 1815 "src/lexer.c"
2012
2016
  yy217:
2013
2017
  rbs_skip(lexer);
2014
2018
  yych = rbs_peek(lexer);
@@ -2064,11 +2068,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
2064
2068
  }
2065
2069
  }
2066
2070
  yy221:
2067
- #line 131 "src/lexer.re"
2071
+ #line 132 "src/lexer.re"
2068
2072
  {
2069
2073
  return rbs_next_token(lexer, tSYMBOL);
2070
2074
  }
2071
- #line 1869 "src/lexer.c"
2075
+ #line 1873 "src/lexer.c"
2072
2076
  yy222:
2073
2077
  rbs_skip(lexer);
2074
2078
  goto yy168;
@@ -2088,11 +2092,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
2088
2092
  }
2089
2093
  }
2090
2094
  yy224:
2091
- #line 102 "src/lexer.re"
2095
+ #line 103 "src/lexer.re"
2092
2096
  {
2093
2097
  return rbs_next_token(lexer, kATRBS);
2094
2098
  }
2095
- #line 1891 "src/lexer.c"
2099
+ #line 1895 "src/lexer.c"
2096
2100
  yy225:
2097
2101
  rbs_skip(lexer);
2098
2102
  yych = rbs_peek(lexer);
@@ -2132,7 +2136,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
2132
2136
  {
2133
2137
  return rbs_next_token(lexer, kBOOL);
2134
2138
  }
2135
- #line 1929 "src/lexer.c"
2139
+ #line 1933 "src/lexer.c"
2136
2140
  yy230:
2137
2141
  rbs_skip(lexer);
2138
2142
  yych = rbs_peek(lexer);
@@ -2208,11 +2212,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
2208
2212
  }
2209
2213
  }
2210
2214
  yy242:
2211
- #line 91 "src/lexer.re"
2215
+ #line 92 "src/lexer.re"
2212
2216
  {
2213
2217
  return rbs_next_token(lexer, kSELF);
2214
2218
  }
2215
- #line 2007 "src/lexer.c"
2219
+ #line 2011 "src/lexer.c"
2216
2220
  yy243:
2217
2221
  rbs_skip(lexer);
2218
2222
  yych = rbs_peek(lexer);
@@ -2238,11 +2242,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
2238
2242
  }
2239
2243
  }
2240
2244
  yy245:
2241
- #line 103 "src/lexer.re"
2245
+ #line 104 "src/lexer.re"
2242
2246
  {
2243
2247
  return rbs_next_token(lexer, kSKIP);
2244
2248
  }
2245
- #line 2035 "src/lexer.c"
2249
+ #line 2039 "src/lexer.c"
2246
2250
  yy246:
2247
2251
  rbs_skip(lexer);
2248
2252
  yych = rbs_peek(lexer);
@@ -2263,11 +2267,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
2263
2267
  }
2264
2268
  }
2265
2269
  yy247:
2266
- #line 94 "src/lexer.re"
2270
+ #line 95 "src/lexer.re"
2267
2271
  {
2268
2272
  return rbs_next_token(lexer, kTRUE);
2269
2273
  }
2270
- #line 2058 "src/lexer.c"
2274
+ #line 2062 "src/lexer.c"
2271
2275
  yy248:
2272
2276
  rbs_skip(lexer);
2273
2277
  yych = rbs_peek(lexer);
@@ -2288,11 +2292,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
2288
2292
  }
2289
2293
  }
2290
2294
  yy249:
2291
- #line 95 "src/lexer.re"
2295
+ #line 96 "src/lexer.re"
2292
2296
  {
2293
2297
  return rbs_next_token(lexer, kTYPE);
2294
2298
  }
2295
- #line 2081 "src/lexer.c"
2299
+ #line 2085 "src/lexer.c"
2296
2300
  yy250:
2297
2301
  rbs_skip(lexer);
2298
2302
  yych = rbs_peek(lexer);
@@ -2323,11 +2327,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
2323
2327
  }
2324
2328
  }
2325
2329
  yy253:
2326
- #line 98 "src/lexer.re"
2330
+ #line 99 "src/lexer.re"
2327
2331
  {
2328
2332
  return rbs_next_token(lexer, kVOID);
2329
2333
  }
2330
- #line 2114 "src/lexer.c"
2334
+ #line 2118 "src/lexer.c"
2331
2335
  yy254:
2332
2336
  rbs_skip(lexer);
2333
2337
  yych = rbs_peek(lexer);
@@ -2386,7 +2390,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
2386
2390
  {
2387
2391
  return rbs_next_token(lexer, kALIAS);
2388
2392
  }
2389
- #line 2171 "src/lexer.c"
2393
+ #line 2175 "src/lexer.c"
2390
2394
  yy260:
2391
2395
  rbs_skip(lexer);
2392
2396
  yych = rbs_peek(lexer);
@@ -2426,7 +2430,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
2426
2430
  {
2427
2431
  return rbs_next_token(lexer, kCLASS);
2428
2432
  }
2429
- #line 2209 "src/lexer.c"
2433
+ #line 2213 "src/lexer.c"
2430
2434
  yy263:
2431
2435
  rbs_skip(lexer);
2432
2436
  yych = rbs_peek(lexer);
@@ -2456,7 +2460,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
2456
2460
  {
2457
2461
  return rbs_next_token(lexer, kFALSE);
2458
2462
  }
2459
- #line 2237 "src/lexer.c"
2463
+ #line 2241 "src/lexer.c"
2460
2464
  yy266:
2461
2465
  rbs_skip(lexer);
2462
2466
  yych = rbs_peek(lexer);
@@ -2587,7 +2591,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
2587
2591
  {
2588
2592
  return rbs_next_token(lexer, kEXTEND);
2589
2593
  }
2590
- #line 2366 "src/lexer.c"
2594
+ #line 2370 "src/lexer.c"
2591
2595
  yy286:
2592
2596
  rbs_skip(lexer);
2593
2597
  yych = rbs_peek(lexer);
@@ -2631,7 +2635,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
2631
2635
  {
2632
2636
  return rbs_next_token(lexer, kMODULE);
2633
2637
  }
2634
- #line 2408 "src/lexer.c"
2638
+ #line 2412 "src/lexer.c"
2635
2639
  yy291:
2636
2640
  rbs_skip(lexer);
2637
2641
  yych = rbs_peek(lexer);
@@ -2662,11 +2666,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
2662
2666
  }
2663
2667
  }
2664
2668
  yy294:
2665
- #line 90 "src/lexer.re"
2669
+ #line 91 "src/lexer.re"
2666
2670
  {
2667
2671
  return rbs_next_token(lexer, kPUBLIC);
2668
2672
  }
2669
- #line 2441 "src/lexer.c"
2673
+ #line 2445 "src/lexer.c"
2670
2674
  yy295:
2671
2675
  rbs_skip(lexer);
2672
2676
  yych = rbs_peek(lexer);
@@ -2687,11 +2691,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
2687
2691
  }
2688
2692
  }
2689
2693
  yy296:
2690
- #line 104 "src/lexer.re"
2694
+ #line 105 "src/lexer.re"
2691
2695
  {
2692
2696
  return rbs_next_token(lexer, kRETURN);
2693
2697
  }
2694
- #line 2464 "src/lexer.c"
2698
+ #line 2468 "src/lexer.c"
2695
2699
  yy297:
2696
2700
  rbs_skip(lexer);
2697
2701
  yych = rbs_peek(lexer);
@@ -2769,7 +2773,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
2769
2773
  {
2770
2774
  return rbs_next_token(lexer, kINCLUDE);
2771
2775
  }
2772
- #line 2540 "src/lexer.c"
2776
+ #line 2544 "src/lexer.c"
2773
2777
  yy308:
2774
2778
  rbs_skip(lexer);
2775
2779
  yych = rbs_peek(lexer);
@@ -2784,6 +2788,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
2784
2788
  rbs_skip(lexer);
2785
2789
  yych = rbs_peek(lexer);
2786
2790
  if (yych == 'a') goto yy328;
2791
+ if (yych == 's') goto yy329;
2787
2792
  goto yy70;
2788
2793
  yy311:
2789
2794
  rbs_skip(lexer);
@@ -2805,11 +2810,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
2805
2810
  }
2806
2811
  }
2807
2812
  yy312:
2808
- #line 88 "src/lexer.re"
2813
+ #line 89 "src/lexer.re"
2809
2814
  {
2810
2815
  return rbs_next_token(lexer, kPREPEND);
2811
2816
  }
2812
- #line 2578 "src/lexer.c"
2817
+ #line 2583 "src/lexer.c"
2813
2818
  yy313:
2814
2819
  rbs_skip(lexer);
2815
2820
  yych = rbs_peek(lexer);
@@ -2830,20 +2835,20 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
2830
2835
  }
2831
2836
  }
2832
2837
  yy314:
2833
- #line 89 "src/lexer.re"
2838
+ #line 90 "src/lexer.re"
2834
2839
  {
2835
2840
  return rbs_next_token(lexer, kPRIVATE);
2836
2841
  }
2837
- #line 2601 "src/lexer.c"
2842
+ #line 2606 "src/lexer.c"
2838
2843
  yy315:
2839
2844
  rbs_skip(lexer);
2840
2845
  yych = rbs_peek(lexer);
2841
- if (yych == 'o') goto yy329;
2846
+ if (yych == 'o') goto yy330;
2842
2847
  goto yy54;
2843
2848
  yy316:
2844
2849
  rbs_skip(lexer);
2845
2850
  yych = rbs_peek(lexer);
2846
- if (yych == 'e') goto yy330;
2851
+ if (yych == 'e') goto yy331;
2847
2852
  goto yy54;
2848
2853
  yy317:
2849
2854
  rbs_skip(lexer);
@@ -2865,11 +2870,11 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
2865
2870
  }
2866
2871
  }
2867
2872
  yy318:
2868
- #line 97 "src/lexer.re"
2873
+ #line 98 "src/lexer.re"
2869
2874
  {
2870
2875
  return rbs_next_token(lexer, kUNTYPED);
2871
2876
  }
2872
- #line 2634 "src/lexer.c"
2877
+ #line 2639 "src/lexer.c"
2873
2878
  yy319:
2874
2879
  rbs_skip(lexer);
2875
2880
  yych = rbs_peek(lexer);
@@ -2890,30 +2895,30 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
2890
2895
  }
2891
2896
  }
2892
2897
  yy320:
2893
- #line 101 "src/lexer.re"
2898
+ #line 102 "src/lexer.re"
2894
2899
  {
2895
2900
  return rbs_next_token(lexer, k__TODO__);
2896
2901
  }
2897
- #line 2657 "src/lexer.c"
2902
+ #line 2662 "src/lexer.c"
2898
2903
  yy321:
2899
2904
  rbs_skip(lexer);
2900
2905
  yych = rbs_peek(lexer);
2901
- if (yych == 'e') goto yy331;
2906
+ if (yych == 'e') goto yy332;
2902
2907
  goto yy54;
2903
2908
  yy322:
2904
2909
  rbs_skip(lexer);
2905
2910
  yych = rbs_peek(lexer);
2906
- if (yych == 'd') goto yy332;
2911
+ if (yych == 'd') goto yy333;
2907
2912
  goto yy54;
2908
2913
  yy323:
2909
2914
  rbs_skip(lexer);
2910
2915
  yych = rbs_peek(lexer);
2911
- if (yych == 't') goto yy333;
2916
+ if (yych == 't') goto yy334;
2912
2917
  goto yy54;
2913
2918
  yy324:
2914
2919
  rbs_skip(lexer);
2915
2920
  yych = rbs_peek(lexer);
2916
- if (yych == 'i') goto yy334;
2921
+ if (yych == 'i') goto yy335;
2917
2922
  goto yy70;
2918
2923
  yy325:
2919
2924
  rbs_skip(lexer);
@@ -2939,48 +2944,53 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
2939
2944
  {
2940
2945
  return rbs_next_token(lexer, kINSTANCE);
2941
2946
  }
2942
- #line 2700 "src/lexer.c"
2947
+ #line 2705 "src/lexer.c"
2943
2948
  yy327:
2944
2949
  rbs_skip(lexer);
2945
2950
  yych = rbs_peek(lexer);
2946
- if (yych == 'e') goto yy335;
2951
+ if (yych == 'e') goto yy336;
2947
2952
  goto yy54;
2948
2953
  yy328:
2949
2954
  rbs_skip(lexer);
2950
2955
  yych = rbs_peek(lexer);
2951
- if (yych == 'l') goto yy337;
2956
+ if (yych == 'l') goto yy338;
2952
2957
  goto yy70;
2953
2958
  yy329:
2954
2959
  rbs_skip(lexer);
2955
2960
  yych = rbs_peek(lexer);
2956
- if (yych == 'n') goto yy338;
2957
- goto yy54;
2961
+ if (yych == 'e') goto yy339;
2962
+ goto yy70;
2958
2963
  yy330:
2959
2964
  rbs_skip(lexer);
2960
2965
  yych = rbs_peek(lexer);
2961
- if (yych == 'd') goto yy340;
2966
+ if (yych == 'n') goto yy340;
2962
2967
  goto yy54;
2963
2968
  yy331:
2964
2969
  rbs_skip(lexer);
2965
2970
  yych = rbs_peek(lexer);
2966
- if (yych == 's') goto yy342;
2971
+ if (yych == 'd') goto yy342;
2967
2972
  goto yy54;
2968
2973
  yy332:
2969
2974
  rbs_skip(lexer);
2970
2975
  yych = rbs_peek(lexer);
2971
- if (yych == 'e') goto yy343;
2976
+ if (yych == 's') goto yy344;
2972
2977
  goto yy54;
2973
2978
  yy333:
2974
2979
  rbs_skip(lexer);
2975
2980
  yych = rbs_peek(lexer);
2976
- if (yych == 'e') goto yy344;
2981
+ if (yych == 'e') goto yy345;
2977
2982
  goto yy54;
2978
2983
  yy334:
2979
2984
  rbs_skip(lexer);
2980
2985
  yych = rbs_peek(lexer);
2981
- if (yych == 'a') goto yy345;
2982
- goto yy70;
2986
+ if (yych == 'e') goto yy346;
2987
+ goto yy54;
2983
2988
  yy335:
2989
+ rbs_skip(lexer);
2990
+ yych = rbs_peek(lexer);
2991
+ if (yych == 'a') goto yy347;
2992
+ goto yy70;
2993
+ yy336:
2984
2994
  rbs_skip(lexer);
2985
2995
  yych = rbs_peek(lexer);
2986
2996
  if (yych <= '=') {
@@ -2992,25 +3002,30 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
2992
3002
  }
2993
3003
  } else {
2994
3004
  if (yych <= '^') {
2995
- if (yych <= '@') goto yy336;
3005
+ if (yych <= '@') goto yy337;
2996
3006
  if (yych <= 'Z') goto yy53;
2997
3007
  } else {
2998
- if (yych == '`') goto yy336;
3008
+ if (yych == '`') goto yy337;
2999
3009
  if (yych <= 'z') goto yy53;
3000
3010
  }
3001
3011
  }
3002
- yy336:
3012
+ yy337:
3003
3013
  #line 83 "src/lexer.re"
3004
3014
  {
3005
3015
  return rbs_next_token(lexer, kINTERFACE);
3006
3016
  }
3007
- #line 2763 "src/lexer.c"
3008
- yy337:
3017
+ #line 2773 "src/lexer.c"
3018
+ yy338:
3009
3019
  rbs_skip(lexer);
3010
3020
  yych = rbs_peek(lexer);
3011
- if (yych == 'i') goto yy346;
3021
+ if (yych == 'i') goto yy348;
3012
3022
  goto yy70;
3013
- yy338:
3023
+ yy339:
3024
+ rbs_skip(lexer);
3025
+ yych = rbs_peek(lexer);
3026
+ if (yych == 'l') goto yy349;
3027
+ goto yy70;
3028
+ yy340:
3014
3029
  rbs_skip(lexer);
3015
3030
  yych = rbs_peek(lexer);
3016
3031
  if (yych <= '=') {
@@ -3022,20 +3037,20 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
3022
3037
  }
3023
3038
  } else {
3024
3039
  if (yych <= '^') {
3025
- if (yych <= '@') goto yy339;
3040
+ if (yych <= '@') goto yy341;
3026
3041
  if (yych <= 'Z') goto yy53;
3027
3042
  } else {
3028
- if (yych == '`') goto yy339;
3043
+ if (yych == '`') goto yy341;
3029
3044
  if (yych <= 'z') goto yy53;
3030
3045
  }
3031
3046
  }
3032
- yy339:
3033
- #line 92 "src/lexer.re"
3047
+ yy341:
3048
+ #line 93 "src/lexer.re"
3034
3049
  {
3035
3050
  return rbs_next_token(lexer, kSINGLETON);
3036
3051
  }
3037
- #line 2791 "src/lexer.c"
3038
- yy340:
3052
+ #line 2806 "src/lexer.c"
3053
+ yy342:
3039
3054
  rbs_skip(lexer);
3040
3055
  yych = rbs_peek(lexer);
3041
3056
  if (yych <= '=') {
@@ -3047,50 +3062,55 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
3047
3062
  }
3048
3063
  } else {
3049
3064
  if (yych <= '^') {
3050
- if (yych <= '@') goto yy341;
3065
+ if (yych <= '@') goto yy343;
3051
3066
  if (yych <= 'Z') goto yy53;
3052
3067
  } else {
3053
- if (yych == '`') goto yy341;
3068
+ if (yych == '`') goto yy343;
3054
3069
  if (yych <= 'z') goto yy53;
3055
3070
  }
3056
3071
  }
3057
- yy341:
3058
- #line 96 "src/lexer.re"
3072
+ yy343:
3073
+ #line 97 "src/lexer.re"
3059
3074
  {
3060
3075
  return rbs_next_token(lexer, kUNCHECKED);
3061
3076
  }
3062
- #line 2814 "src/lexer.c"
3063
- yy342:
3077
+ #line 2829 "src/lexer.c"
3078
+ yy344:
3064
3079
  rbs_skip(lexer);
3065
3080
  yych = rbs_peek(lexer);
3066
- if (yych == 's') goto yy347;
3081
+ if (yych == 's') goto yy350;
3067
3082
  goto yy54;
3068
- yy343:
3083
+ yy345:
3069
3084
  rbs_skip(lexer);
3070
3085
  yych = rbs_peek(lexer);
3071
- if (yych == 'r') goto yy348;
3086
+ if (yych == 'r') goto yy351;
3072
3087
  goto yy54;
3073
- yy344:
3088
+ yy346:
3074
3089
  rbs_skip(lexer);
3075
3090
  yych = rbs_peek(lexer);
3076
- if (yych == 'r') goto yy350;
3091
+ if (yych == 'r') goto yy353;
3077
3092
  goto yy54;
3078
- yy345:
3093
+ yy347:
3079
3094
  rbs_skip(lexer);
3080
3095
  yych = rbs_peek(lexer);
3081
- if (yych == 's') goto yy352;
3096
+ if (yych == 's') goto yy355;
3082
3097
  goto yy70;
3083
- yy346:
3098
+ yy348:
3084
3099
  rbs_skip(lexer);
3085
3100
  yych = rbs_peek(lexer);
3086
- if (yych == 'a') goto yy353;
3101
+ if (yych == 'a') goto yy356;
3087
3102
  goto yy70;
3088
- yy347:
3103
+ yy349:
3104
+ rbs_skip(lexer);
3105
+ yych = rbs_peek(lexer);
3106
+ if (yych == 'f') goto yy357;
3107
+ goto yy70;
3108
+ yy350:
3089
3109
  rbs_skip(lexer);
3090
3110
  yych = rbs_peek(lexer);
3091
- if (yych == 'o') goto yy354;
3111
+ if (yych == 'o') goto yy358;
3092
3112
  goto yy54;
3093
- yy348:
3113
+ yy351:
3094
3114
  rbs_skip(lexer);
3095
3115
  yych = rbs_peek(lexer);
3096
3116
  if (yych <= '=') {
@@ -3102,20 +3122,20 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
3102
3122
  }
3103
3123
  } else {
3104
3124
  if (yych <= '^') {
3105
- if (yych <= '@') goto yy349;
3125
+ if (yych <= '@') goto yy352;
3106
3126
  if (yych <= 'Z') goto yy53;
3107
3127
  } else {
3108
- if (yych == '`') goto yy349;
3128
+ if (yych == '`') goto yy352;
3109
3129
  if (yych <= 'z') goto yy53;
3110
3130
  }
3111
3131
  }
3112
- yy349:
3132
+ yy352:
3113
3133
  #line 70 "src/lexer.re"
3114
3134
  {
3115
3135
  return rbs_next_token(lexer, kATTRREADER);
3116
3136
  }
3117
- #line 2867 "src/lexer.c"
3118
- yy350:
3137
+ #line 2887 "src/lexer.c"
3138
+ yy353:
3119
3139
  rbs_skip(lexer);
3120
3140
  yych = rbs_peek(lexer);
3121
3141
  if (yych <= '=') {
@@ -3127,44 +3147,51 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
3127
3147
  }
3128
3148
  } else {
3129
3149
  if (yych <= '^') {
3130
- if (yych <= '@') goto yy351;
3150
+ if (yych <= '@') goto yy354;
3131
3151
  if (yych <= 'Z') goto yy53;
3132
3152
  } else {
3133
- if (yych == '`') goto yy351;
3153
+ if (yych == '`') goto yy354;
3134
3154
  if (yych <= 'z') goto yy53;
3135
3155
  }
3136
3156
  }
3137
- yy351:
3157
+ yy354:
3138
3158
  #line 71 "src/lexer.re"
3139
3159
  {
3140
3160
  return rbs_next_token(lexer, kATTRWRITER);
3141
3161
  }
3142
- #line 2890 "src/lexer.c"
3143
- yy352:
3162
+ #line 2910 "src/lexer.c"
3163
+ yy355:
3144
3164
  rbs_skip(lexer);
3145
3165
  #line 75 "src/lexer.re"
3146
3166
  {
3147
3167
  return rbs_next_token(lexer, kCLASSALIAS);
3148
3168
  }
3149
- #line 2895 "src/lexer.c"
3150
- yy353:
3169
+ #line 2915 "src/lexer.c"
3170
+ yy356:
3151
3171
  rbs_skip(lexer);
3152
3172
  yych = rbs_peek(lexer);
3153
- if (yych == 's') goto yy355;
3173
+ if (yych == 's') goto yy359;
3154
3174
  goto yy70;
3155
- yy354:
3175
+ yy357:
3176
+ rbs_skip(lexer);
3177
+ #line 86 "src/lexer.re"
3178
+ {
3179
+ return rbs_next_token(lexer, kMODULESELF);
3180
+ }
3181
+ #line 2925 "src/lexer.c"
3182
+ yy358:
3156
3183
  rbs_skip(lexer);
3157
3184
  yych = rbs_peek(lexer);
3158
- if (yych == 'r') goto yy356;
3185
+ if (yych == 'r') goto yy360;
3159
3186
  goto yy54;
3160
- yy355:
3187
+ yy359:
3161
3188
  rbs_skip(lexer);
3162
3189
  #line 85 "src/lexer.re"
3163
3190
  {
3164
3191
  return rbs_next_token(lexer, kMODULEALIAS);
3165
3192
  }
3166
- #line 2910 "src/lexer.c"
3167
- yy356:
3193
+ #line 2935 "src/lexer.c"
3194
+ yy360:
3168
3195
  rbs_skip(lexer);
3169
3196
  yych = rbs_peek(lexer);
3170
3197
  if (yych <= '=') {
@@ -3176,19 +3203,19 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
3176
3203
  }
3177
3204
  } else {
3178
3205
  if (yych <= '^') {
3179
- if (yych <= '@') goto yy357;
3206
+ if (yych <= '@') goto yy361;
3180
3207
  if (yych <= 'Z') goto yy53;
3181
3208
  } else {
3182
- if (yych == '`') goto yy357;
3209
+ if (yych == '`') goto yy361;
3183
3210
  if (yych <= 'z') goto yy53;
3184
3211
  }
3185
3212
  }
3186
- yy357:
3213
+ yy361:
3187
3214
  #line 69 "src/lexer.re"
3188
3215
  {
3189
3216
  return rbs_next_token(lexer, kATTRACCESSOR);
3190
3217
  }
3191
- #line 2933 "src/lexer.c"
3218
+ #line 2958 "src/lexer.c"
3192
3219
  }
3193
- #line 153 "src/lexer.re"
3220
+ #line 154 "src/lexer.re"
3194
3221
  }