rbs 3.8.1 → 3.9.0.dev.1

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 (90) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/dependabot.yml +1 -1
  3. data/.github/workflows/typecheck.yml +2 -0
  4. data/.github/workflows/windows.yml +15 -0
  5. data/.rubocop.yml +13 -1
  6. data/Rakefile +5 -2
  7. data/config.yml +6 -0
  8. data/core/data.rbs +1 -1
  9. data/core/enumerator.rbs +14 -2
  10. data/core/exception.rbs +1 -1
  11. data/core/gc.rbs +1 -1
  12. data/core/io.rbs +7 -3
  13. data/core/kernel.rbs +2 -2
  14. data/core/method.rbs +2 -2
  15. data/core/module.rbs +3 -3
  16. data/core/proc.rbs +2 -2
  17. data/core/rbs/unnamed/argf.rbs +3 -3
  18. data/core/rubygems/version.rbs +2 -2
  19. data/core/string.rbs +1 -1
  20. data/core/unbound_method.rbs +1 -1
  21. data/docs/syntax.md +10 -5
  22. data/ext/rbs_extension/extconf.rb +2 -1
  23. data/ext/rbs_extension/location.c +32 -10
  24. data/ext/rbs_extension/location.h +4 -3
  25. data/ext/rbs_extension/main.c +22 -1
  26. data/ext/rbs_extension/parser.c +144 -136
  27. data/ext/rbs_extension/parserstate.c +40 -9
  28. data/ext/rbs_extension/parserstate.h +6 -4
  29. data/include/rbs/ruby_objs.h +6 -6
  30. data/include/rbs/util/rbs_constant_pool.h +219 -0
  31. data/lib/rbs/ast/declarations.rb +9 -4
  32. data/lib/rbs/ast/directives.rb +10 -0
  33. data/lib/rbs/ast/members.rb +2 -0
  34. data/lib/rbs/ast/type_param.rb +2 -2
  35. data/lib/rbs/cli/validate.rb +1 -0
  36. data/lib/rbs/cli.rb +3 -3
  37. data/lib/rbs/collection/config/lockfile_generator.rb +28 -7
  38. data/lib/rbs/collection/sources/rubygems.rb +1 -1
  39. data/lib/rbs/definition.rb +46 -31
  40. data/lib/rbs/definition_builder/ancestor_builder.rb +2 -0
  41. data/lib/rbs/definition_builder.rb +86 -30
  42. data/lib/rbs/environment.rb +33 -18
  43. data/lib/rbs/errors.rb +23 -0
  44. data/lib/rbs/locator.rb +2 -0
  45. data/lib/rbs/method_type.rb +2 -0
  46. data/lib/rbs/parser_aux.rb +38 -1
  47. data/lib/rbs/subtractor.rb +3 -3
  48. data/lib/rbs/test/hook.rb +2 -2
  49. data/lib/rbs/test/type_check.rb +7 -5
  50. data/lib/rbs/types.rb +44 -5
  51. data/lib/rbs/unit_test/spy.rb +4 -2
  52. data/lib/rbs/unit_test/type_assertions.rb +17 -11
  53. data/lib/rbs/validator.rb +4 -0
  54. data/lib/rbs/version.rb +1 -1
  55. data/lib/rbs/writer.rb +10 -5
  56. data/lib/rbs.rb +1 -0
  57. data/rbs.gemspec +1 -1
  58. data/sig/collection/config/lockfile_generator.rbs +1 -1
  59. data/sig/declarations.rbs +10 -3
  60. data/sig/definition.rbs +67 -14
  61. data/sig/definition_builder.rbs +17 -3
  62. data/sig/directives.rbs +17 -1
  63. data/sig/environment.rbs +2 -0
  64. data/sig/errors.rbs +16 -0
  65. data/sig/parser.rbs +5 -1
  66. data/sig/subtractor.rbs +1 -1
  67. data/sig/test/type_check.rbs +2 -2
  68. data/sig/type_param.rbs +1 -1
  69. data/sig/types.rbs +3 -0
  70. data/sig/unit_test/spy.rbs +2 -0
  71. data/sig/unit_test/type_assertions.rbs +2 -0
  72. data/sig/validator.rbs +4 -0
  73. data/sig/writer.rbs +1 -1
  74. data/src/ruby_objs.c +12 -6
  75. data/src/util/rbs_constant_pool.c +342 -0
  76. data/stdlib/cgi/0/core.rbs +10 -0
  77. data/stdlib/json/0/json.rbs +52 -50
  78. data/stdlib/net-http/0/net-http.rbs +2 -2
  79. data/stdlib/openssl/0/openssl.rbs +73 -73
  80. data/stdlib/resolv/0/resolv.rbs +8 -8
  81. data/stdlib/socket/0/addrinfo.rbs +1 -1
  82. data/stdlib/socket/0/unix_socket.rbs +4 -2
  83. data/stdlib/stringio/0/stringio.rbs +1 -1
  84. data/stdlib/uri/0/common.rbs +17 -0
  85. metadata +4 -7
  86. data/templates/include/rbs/constants.h.erb +0 -20
  87. data/templates/include/rbs/ruby_objs.h.erb +0 -10
  88. data/templates/src/constants.c.erb +0 -36
  89. data/templates/src/ruby_objs.c.erb +0 -27
  90. data/templates/template.rb +0 -122
@@ -1,4 +1,12 @@
1
1
  #include "rbs_extension.h"
2
+ #include "rbs/util/rbs_constant_pool.h"
3
+
4
+ #define INTERN(str) \
5
+ rbs_constant_pool_insert_constant( \
6
+ RBS_GLOBAL_CONSTANT_POOL, \
7
+ (const uint8_t *) str, \
8
+ strlen(str) \
9
+ )
2
10
 
3
11
  #define INTERN_TOKEN(parserstate, tok) \
4
12
  rb_intern3(\
@@ -277,7 +285,7 @@ static VALUE parse_function_param(parserstate *state) {
277
285
  VALUE location = rbs_new_location(state->buffer, param_range);
278
286
  rbs_loc *loc = rbs_check_location(location);
279
287
  rbs_loc_alloc_children(loc, 1);
280
- rbs_loc_add_optional_child(loc, rb_intern("name"), NULL_RANGE);
288
+ rbs_loc_add_optional_child(loc, INTERN("name"), NULL_RANGE);
281
289
 
282
290
  return rbs_function_param(type, Qnil, location);
283
291
  } else {
@@ -302,7 +310,7 @@ static VALUE parse_function_param(parserstate *state) {
302
310
  VALUE location = rbs_new_location(state->buffer, param_range);
303
311
  rbs_loc *loc = rbs_check_location(location);
304
312
  rbs_loc_alloc_children(loc, 1);
305
- rbs_loc_add_optional_child(loc, rb_intern("name"), name_range);
313
+ rbs_loc_add_optional_child(loc, INTERN("name"), name_range);
306
314
 
307
315
  return rbs_function_param(type, name, location);
308
316
  }
@@ -902,8 +910,8 @@ static VALUE parse_instance_type(parserstate *state, bool parse_alias) {
902
910
  VALUE location = rbs_new_location(state->buffer, type_range);
903
911
  rbs_loc *loc = rbs_check_location(location);
904
912
  rbs_loc_alloc_children(loc, 2);
905
- rbs_loc_add_required_child(loc, rb_intern("name"), name_range);
906
- rbs_loc_add_optional_child(loc, rb_intern("args"), args_range);
913
+ rbs_loc_add_required_child(loc, INTERN("name"), name_range);
914
+ rbs_loc_add_optional_child(loc, INTERN("args"), args_range);
907
915
 
908
916
  if (kind == CLASS_NAME) {
909
917
  return rbs_class_instance(typename, types, location);
@@ -936,7 +944,7 @@ static VALUE parse_singleton_type(parserstate *state) {
936
944
  VALUE location = rbs_new_location(state->buffer, type_range);
937
945
  rbs_loc *loc = rbs_check_location(location);
938
946
  rbs_loc_alloc_children(loc, 1);
939
- rbs_loc_add_required_child(loc, rb_intern("name"), name_range);
947
+ rbs_loc_add_required_child(loc, INTERN("name"), name_range);
940
948
 
941
949
  return rbs_class_singleton(typename, location);
942
950
  }
@@ -985,12 +993,10 @@ static VALUE parse_simple(parserstate *state) {
985
993
  return rbs_bases_void(rbs_location_current_token(state));
986
994
  }
987
995
  case kUNTYPED: {
988
- return rbs_bases_any(rbs_location_current_token(state));
996
+ return rbs_bases_any(false, rbs_location_current_token(state));
989
997
  }
990
998
  case k__TODO__: {
991
- VALUE type = rbs_bases_any(rbs_location_current_token(state));
992
- rb_funcall(type, rb_intern("todo!"), 0);
993
- return type;
999
+ return rbs_bases_any(true, rbs_location_current_token(state));
994
1000
  }
995
1001
  case tINTEGER: {
996
1002
  VALUE literal = rb_funcall(
@@ -1023,8 +1029,13 @@ static VALUE parse_simple(parserstate *state) {
1023
1029
  return parse_symbol(state);
1024
1030
  }
1025
1031
  case tUIDENT: {
1026
- ID name = INTERN_TOKEN(state, state->current_token);
1032
+ const char *name_str = peek_token(state->lexstate, state->current_token);
1033
+ size_t name_len = token_bytes(state->current_token);
1034
+
1035
+ rbs_constant_id_t name = rbs_constant_pool_find(&state->constant_pool, (const uint8_t *) name_str, name_len);
1036
+
1027
1037
  if (parser_typevar_member(state, name)) {
1038
+ ID name = rb_intern3(name_str, name_len, rb_enc_get(state->lexstate->string));
1028
1039
  return rbs_variable(ID2SYM(name), rbs_location_current_token(state));
1029
1040
  }
1030
1041
  // fallthrough for type name
@@ -1077,26 +1088,24 @@ static VALUE parse_simple(parserstate *state) {
1077
1088
  | {} <optional>
1078
1089
  */
1079
1090
  static VALUE parse_intersection(parserstate *state) {
1080
- range rg;
1081
- rg.start = state->next_token.range.start;
1082
-
1091
+ position start = state->next_token.range.start;
1083
1092
  VALUE type = parse_optional(state);
1084
- VALUE intersection_types = rb_ary_new();
1093
+ if (state->next_token.type != pAMP) {
1094
+ return type;
1095
+ }
1085
1096
 
1097
+ VALUE intersection_types = rb_ary_new();
1086
1098
  rb_ary_push(intersection_types, type);
1087
1099
  while (state->next_token.type == pAMP) {
1088
1100
  parser_advance(state);
1089
1101
  rb_ary_push(intersection_types, parse_optional(state));
1090
1102
  }
1091
-
1092
- rg.end = state->current_token.range.end;
1093
-
1094
- if (rb_array_len(intersection_types) > 1) {
1095
- VALUE location = rbs_new_location(state->buffer, rg);
1096
- type = rbs_intersection(intersection_types, location);
1097
- }
1098
-
1099
- return type;
1103
+ range rg = (range) {
1104
+ .start = start,
1105
+ .end = state->current_token.range.end,
1106
+ };
1107
+ VALUE location = rbs_new_location(state->buffer, rg);
1108
+ return rbs_intersection(intersection_types, location);
1100
1109
  }
1101
1110
 
1102
1111
  /*
@@ -1104,26 +1113,24 @@ static VALUE parse_intersection(parserstate *state) {
1104
1113
  | {} <intersection>
1105
1114
  */
1106
1115
  VALUE parse_type(parserstate *state) {
1107
- range rg;
1108
- rg.start = state->next_token.range.start;
1109
-
1116
+ position start = state->next_token.range.start;
1110
1117
  VALUE type = parse_intersection(state);
1111
- VALUE union_types = rb_ary_new();
1118
+ if (state->next_token.type != pBAR) {
1119
+ return type;
1120
+ }
1112
1121
 
1122
+ VALUE union_types = rb_ary_new();
1113
1123
  rb_ary_push(union_types, type);
1114
1124
  while (state->next_token.type == pBAR) {
1115
1125
  parser_advance(state);
1116
1126
  rb_ary_push(union_types, parse_intersection(state));
1117
1127
  }
1118
-
1119
- rg.end = state->current_token.range.end;
1120
-
1121
- if (rb_array_len(union_types) > 1) {
1122
- VALUE location = rbs_new_location(state->buffer, rg);
1123
- type = rbs_union(union_types, location);
1124
- }
1125
-
1126
- return type;
1128
+ range rg = (range) {
1129
+ .start = start,
1130
+ .end = state->current_token.range.end,
1131
+ };
1132
+ VALUE location = rbs_new_location(state->buffer, rg);
1133
+ return rbs_union(union_types, location);
1127
1134
  }
1128
1135
 
1129
1136
  /*
@@ -1145,7 +1152,7 @@ static VALUE parse_type_params(parserstate *state, range *rg, bool module_type_p
1145
1152
  rg->start = state->current_token.range.start;
1146
1153
 
1147
1154
  while (true) {
1148
- bool unchecked = false;
1155
+ VALUE unchecked = Qfalse;
1149
1156
  VALUE variance = ID2SYM(rb_intern("invariant"));
1150
1157
  VALUE upper_bound = Qnil;
1151
1158
  VALUE default_type = Qnil;
@@ -1157,7 +1164,7 @@ static VALUE parse_type_params(parserstate *state, range *rg, bool module_type_p
1157
1164
  range unchecked_range = NULL_RANGE;
1158
1165
  if (module_type_params) {
1159
1166
  if (state->next_token.type == kUNCHECKED) {
1160
- unchecked = true;
1167
+ unchecked = Qtrue;
1161
1168
  parser_advance(state);
1162
1169
  unchecked_range = state->current_token.range;
1163
1170
  }
@@ -1182,8 +1189,13 @@ static VALUE parse_type_params(parserstate *state, range *rg, bool module_type_p
1182
1189
  parser_advance_assert(state, tUIDENT);
1183
1190
  range name_range = state->current_token.range;
1184
1191
 
1185
- ID id = INTERN_TOKEN(state, state->current_token);
1186
- VALUE name = ID2SYM(id);
1192
+ rbs_constant_id_t id = rbs_constant_pool_insert_shared(
1193
+ &state->constant_pool,
1194
+ (const uint8_t *) peek_token(state->lexstate, state->current_token),
1195
+ token_bytes(state->current_token)
1196
+ );
1197
+
1198
+ VALUE name = ID2SYM(INTERN_TOKEN(state, state->current_token));
1187
1199
 
1188
1200
  parser_insert_typevar(state, id);
1189
1201
 
@@ -1221,17 +1233,13 @@ static VALUE parse_type_params(parserstate *state, range *rg, bool module_type_p
1221
1233
  VALUE location = rbs_new_location(state->buffer, param_range);
1222
1234
  rbs_loc *loc = rbs_check_location(location);
1223
1235
  rbs_loc_alloc_children(loc, 5);
1224
- rbs_loc_add_required_child(loc, rb_intern("name"), name_range);
1225
- rbs_loc_add_optional_child(loc, rb_intern("variance"), variance_range);
1226
- rbs_loc_add_optional_child(loc, rb_intern("unchecked"), unchecked_range);
1227
- rbs_loc_add_optional_child(loc, rb_intern("upper_bound"), upper_bound_range);
1228
- rbs_loc_add_optional_child(loc, rb_intern("default"), default_type_range);
1229
-
1230
- VALUE param = rbs_ast_type_param(name, variance, upper_bound, default_type, location);
1236
+ rbs_loc_add_required_child(loc, INTERN("name"), name_range);
1237
+ rbs_loc_add_optional_child(loc, INTERN("variance"), variance_range);
1238
+ rbs_loc_add_optional_child(loc, INTERN("unchecked"), unchecked_range);
1239
+ rbs_loc_add_optional_child(loc, INTERN("upper_bound"), upper_bound_range);
1240
+ rbs_loc_add_optional_child(loc, INTERN("default"), default_type_range);
1231
1241
 
1232
- if (unchecked) {
1233
- rb_funcall(param, rb_intern("unchecked!"), 0);
1234
- }
1242
+ VALUE param = rbs_ast_type_param(name, variance, upper_bound, default_type, unchecked, location);
1235
1243
 
1236
1244
  melt_array(&params);
1237
1245
  rb_ary_push(params, param);
@@ -1288,8 +1296,8 @@ VALUE parse_method_type(parserstate *state) {
1288
1296
  VALUE location = rbs_new_location(state->buffer, rg);
1289
1297
  rbs_loc *loc = rbs_check_location(location);
1290
1298
  rbs_loc_alloc_children(loc, 2);
1291
- rbs_loc_add_required_child(loc, rb_intern("type"), type_range);
1292
- rbs_loc_add_optional_child(loc, rb_intern("type_params"), params_range);
1299
+ rbs_loc_add_required_child(loc, INTERN("type"), type_range);
1300
+ rbs_loc_add_optional_child(loc, INTERN("type_params"), params_range);
1293
1301
 
1294
1302
  return rbs_method_type(
1295
1303
  type_params,
@@ -1302,7 +1310,7 @@ VALUE parse_method_type(parserstate *state) {
1302
1310
  /*
1303
1311
  global_decl ::= {tGIDENT} `:` <type>
1304
1312
  */
1305
- static VALUE parse_global_decl(parserstate *state) {
1313
+ static VALUE parse_global_decl(parserstate *state, VALUE annotations) {
1306
1314
  range decl_range;
1307
1315
  decl_range.start = state->current_token.range.start;
1308
1316
 
@@ -1319,16 +1327,16 @@ static VALUE parse_global_decl(parserstate *state) {
1319
1327
  VALUE location = rbs_new_location(state->buffer, decl_range);
1320
1328
  rbs_loc *loc = rbs_check_location(location);
1321
1329
  rbs_loc_alloc_children(loc, 2);
1322
- rbs_loc_add_required_child(loc, rb_intern("name"), name_range);
1323
- rbs_loc_add_required_child(loc, rb_intern("colon"), colon_range);
1330
+ rbs_loc_add_required_child(loc, INTERN("name"), name_range);
1331
+ rbs_loc_add_required_child(loc, INTERN("colon"), colon_range);
1324
1332
 
1325
- return rbs_ast_decl_global(typename, type, location, comment);
1333
+ return rbs_ast_decl_global(typename, type, location, comment, annotations);
1326
1334
  }
1327
1335
 
1328
1336
  /*
1329
1337
  const_decl ::= {const_name} `:` <type>
1330
1338
  */
1331
- static VALUE parse_const_decl(parserstate *state) {
1339
+ static VALUE parse_const_decl(parserstate *state, VALUE annotations) {
1332
1340
  range decl_range;
1333
1341
 
1334
1342
  decl_range.start = state->current_token.range.start;
@@ -1346,10 +1354,10 @@ static VALUE parse_const_decl(parserstate *state) {
1346
1354
  VALUE location = rbs_new_location(state->buffer, decl_range);
1347
1355
  rbs_loc *loc = rbs_check_location(location);
1348
1356
  rbs_loc_alloc_children(loc, 2);
1349
- rbs_loc_add_required_child(loc, rb_intern("name"), name_range);
1350
- rbs_loc_add_required_child(loc, rb_intern("colon"), colon_range);
1357
+ rbs_loc_add_required_child(loc, INTERN("name"), name_range);
1358
+ rbs_loc_add_required_child(loc, INTERN("colon"), colon_range);
1351
1359
 
1352
- return rbs_ast_decl_constant(typename, type, location, comment);
1360
+ return rbs_ast_decl_constant(typename, type, location, comment, annotations);
1353
1361
  }
1354
1362
 
1355
1363
  /*
@@ -1381,10 +1389,10 @@ static VALUE parse_type_decl(parserstate *state, position comment_pos, VALUE ann
1381
1389
  VALUE location = rbs_new_location(state->buffer, decl_range);
1382
1390
  rbs_loc *loc = rbs_check_location(location);
1383
1391
  rbs_loc_alloc_children(loc, 4);
1384
- rbs_loc_add_required_child(loc, rb_intern("keyword"), keyword_range);
1385
- rbs_loc_add_required_child(loc, rb_intern("name"), name_range);
1386
- rbs_loc_add_optional_child(loc, rb_intern("type_params"), params_range);
1387
- rbs_loc_add_required_child(loc, rb_intern("eq"), eq_range);
1392
+ rbs_loc_add_required_child(loc, INTERN("keyword"), keyword_range);
1393
+ rbs_loc_add_required_child(loc, INTERN("name"), name_range);
1394
+ rbs_loc_add_optional_child(loc, INTERN("type_params"), params_range);
1395
+ rbs_loc_add_required_child(loc, INTERN("eq"), eq_range);
1388
1396
 
1389
1397
  parser_pop_typevar_table(state);
1390
1398
 
@@ -1726,11 +1734,11 @@ static VALUE parse_member_def(parserstate *state, bool instance_only, bool accep
1726
1734
  VALUE location = rbs_new_location(state->buffer, member_range);
1727
1735
  rbs_loc *loc = rbs_check_location(location);
1728
1736
  rbs_loc_alloc_children(loc, 5);
1729
- rbs_loc_add_required_child(loc, rb_intern("keyword"), keyword_range);
1730
- rbs_loc_add_required_child(loc, rb_intern("name"), name_range);
1731
- rbs_loc_add_optional_child(loc, rb_intern("kind"), kind_range);
1732
- rbs_loc_add_optional_child(loc, rb_intern("overloading"), overloading_range);
1733
- rbs_loc_add_optional_child(loc, rb_intern("visibility"), visibility_range);
1737
+ rbs_loc_add_required_child(loc, INTERN("keyword"), keyword_range);
1738
+ rbs_loc_add_required_child(loc, INTERN("name"), name_range);
1739
+ rbs_loc_add_optional_child(loc, INTERN("kind"), kind_range);
1740
+ rbs_loc_add_optional_child(loc, INTERN("overloading"), overloading_range);
1741
+ rbs_loc_add_optional_child(loc, INTERN("visibility"), visibility_range);
1734
1742
 
1735
1743
  return rbs_ast_members_method_definition(
1736
1744
  name,
@@ -1826,9 +1834,9 @@ static VALUE parse_mixin_member(parserstate *state, bool from_interface, positio
1826
1834
  VALUE location = rbs_new_location(state->buffer, member_range);
1827
1835
  rbs_loc *loc = rbs_check_location(location);
1828
1836
  rbs_loc_alloc_children(loc, 3);
1829
- rbs_loc_add_required_child(loc, rb_intern("name"), name_range);
1830
- rbs_loc_add_required_child(loc, rb_intern("keyword"), keyword_range);
1831
- rbs_loc_add_optional_child(loc, rb_intern("args"), args_range);
1837
+ rbs_loc_add_required_child(loc, INTERN("name"), name_range);
1838
+ rbs_loc_add_required_child(loc, INTERN("keyword"), keyword_range);
1839
+ rbs_loc_add_optional_child(loc, INTERN("args"), args_range);
1832
1840
 
1833
1841
  VALUE comment = get_comment(state, comment_pos.line);
1834
1842
  switch (type)
@@ -1889,11 +1897,11 @@ static VALUE parse_alias_member(parserstate *state, bool instance_only, position
1889
1897
  VALUE location = rbs_new_location(state->buffer, member_range);
1890
1898
  rbs_loc *loc = rbs_check_location(location);
1891
1899
  rbs_loc_alloc_children(loc, 5);
1892
- rbs_loc_add_required_child(loc, rb_intern("keyword"), keyword_range);
1893
- rbs_loc_add_required_child(loc, rb_intern("new_name"), new_name_range);
1894
- rbs_loc_add_required_child(loc, rb_intern("old_name"), old_name_range);
1895
- rbs_loc_add_optional_child(loc, rb_intern("new_kind"), new_kind_range);
1896
- rbs_loc_add_optional_child(loc, rb_intern("old_kind"), old_kind_range);
1900
+ rbs_loc_add_required_child(loc, INTERN("keyword"), keyword_range);
1901
+ rbs_loc_add_required_child(loc, INTERN("new_name"), new_name_range);
1902
+ rbs_loc_add_required_child(loc, INTERN("old_name"), old_name_range);
1903
+ rbs_loc_add_optional_child(loc, INTERN("new_kind"), new_kind_range);
1904
+ rbs_loc_add_optional_child(loc, INTERN("old_kind"), old_kind_range);
1897
1905
 
1898
1906
  return rbs_ast_members_alias(
1899
1907
  new_name,
@@ -1939,9 +1947,9 @@ static VALUE parse_variable_member(parserstate *state, position comment_pos, VAL
1939
1947
  VALUE location = rbs_new_location(state->buffer, member_range);
1940
1948
  rbs_loc *loc = rbs_check_location(location);
1941
1949
  rbs_loc_alloc_children(loc, 3);
1942
- rbs_loc_add_required_child(loc, rb_intern("name"), name_range);
1943
- rbs_loc_add_required_child(loc, rb_intern("colon"), colon_range);
1944
- rbs_loc_add_optional_child(loc, rb_intern("kind"), NULL_RANGE);
1950
+ rbs_loc_add_required_child(loc, INTERN("name"), name_range);
1951
+ rbs_loc_add_required_child(loc, INTERN("colon"), colon_range);
1952
+ rbs_loc_add_optional_child(loc, INTERN("kind"), NULL_RANGE);
1945
1953
 
1946
1954
  return rbs_ast_members_instance_variable(name, type, location, comment);
1947
1955
  }
@@ -1960,9 +1968,9 @@ static VALUE parse_variable_member(parserstate *state, position comment_pos, VAL
1960
1968
  VALUE location = rbs_new_location(state->buffer, member_range);
1961
1969
  rbs_loc *loc = rbs_check_location(location);
1962
1970
  rbs_loc_alloc_children(loc, 3);
1963
- rbs_loc_add_required_child(loc, rb_intern("name"), name_range);
1964
- rbs_loc_add_required_child(loc, rb_intern("colon"), colon_range);
1965
- rbs_loc_add_optional_child(loc, rb_intern("kind"), NULL_RANGE);
1971
+ rbs_loc_add_required_child(loc, INTERN("name"), name_range);
1972
+ rbs_loc_add_required_child(loc, INTERN("colon"), colon_range);
1973
+ rbs_loc_add_optional_child(loc, INTERN("kind"), NULL_RANGE);
1966
1974
 
1967
1975
  return rbs_ast_members_class_variable(name, type, location, comment);
1968
1976
  }
@@ -1989,9 +1997,9 @@ static VALUE parse_variable_member(parserstate *state, position comment_pos, VAL
1989
1997
  VALUE location = rbs_new_location(state->buffer, member_range);
1990
1998
  rbs_loc *loc = rbs_check_location(location);
1991
1999
  rbs_loc_alloc_children(loc, 3);
1992
- rbs_loc_add_required_child(loc, rb_intern("name"), name_range);
1993
- rbs_loc_add_required_child(loc, rb_intern("colon"), colon_range);
1994
- rbs_loc_add_optional_child(loc, rb_intern("kind"), kind_range);
2000
+ rbs_loc_add_required_child(loc, INTERN("name"), name_range);
2001
+ rbs_loc_add_required_child(loc, INTERN("colon"), colon_range);
2002
+ rbs_loc_add_optional_child(loc, INTERN("kind"), kind_range);
1995
2003
 
1996
2004
  return rbs_ast_members_class_instance_variable(name, type, location, comment);
1997
2005
  }
@@ -2109,13 +2117,13 @@ static VALUE parse_attribute_member(parserstate *state, position comment_pos, VA
2109
2117
  VALUE location = rbs_new_location(state->buffer, member_range);
2110
2118
  rbs_loc *loc = rbs_check_location(location);
2111
2119
  rbs_loc_alloc_children(loc, 7);
2112
- rbs_loc_add_required_child(loc, rb_intern("keyword"), keyword_range);
2113
- rbs_loc_add_required_child(loc, rb_intern("name"), name_range);
2114
- rbs_loc_add_required_child(loc, rb_intern("colon"), colon_range);
2115
- rbs_loc_add_optional_child(loc, rb_intern("kind"), kind_range);
2116
- rbs_loc_add_optional_child(loc, rb_intern("ivar"), ivar_range);
2117
- rbs_loc_add_optional_child(loc, rb_intern("ivar_name"), ivar_name_range);
2118
- rbs_loc_add_optional_child(loc, rb_intern("visibility"), visibility_range);
2120
+ rbs_loc_add_required_child(loc, INTERN("keyword"), keyword_range);
2121
+ rbs_loc_add_required_child(loc, INTERN("name"), name_range);
2122
+ rbs_loc_add_required_child(loc, INTERN("colon"), colon_range);
2123
+ rbs_loc_add_optional_child(loc, INTERN("kind"), kind_range);
2124
+ rbs_loc_add_optional_child(loc, INTERN("ivar"), ivar_range);
2125
+ rbs_loc_add_optional_child(loc, INTERN("ivar_name"), ivar_name_range);
2126
+ rbs_loc_add_optional_child(loc, INTERN("visibility"), visibility_range);
2119
2127
 
2120
2128
  switch (attr_type)
2121
2129
  {
@@ -2211,10 +2219,10 @@ static VALUE parse_interface_decl(parserstate *state, position comment_pos, VALU
2211
2219
  VALUE location = rbs_new_location(state->buffer, member_range);
2212
2220
  rbs_loc *loc = rbs_check_location(location);
2213
2221
  rbs_loc_alloc_children(loc, 4);
2214
- rbs_loc_add_required_child(loc, rb_intern("keyword"), keyword_range);
2215
- rbs_loc_add_required_child(loc, rb_intern("name"), name_range);
2216
- rbs_loc_add_required_child(loc, rb_intern("end"), end_range);
2217
- rbs_loc_add_optional_child(loc, rb_intern("type_params"), type_params_range);
2222
+ rbs_loc_add_required_child(loc, INTERN("keyword"), keyword_range);
2223
+ rbs_loc_add_required_child(loc, INTERN("name"), name_range);
2224
+ rbs_loc_add_required_child(loc, INTERN("end"), end_range);
2225
+ rbs_loc_add_optional_child(loc, INTERN("type_params"), type_params_range);
2218
2226
 
2219
2227
  return rbs_ast_decl_interface(
2220
2228
  name,
@@ -2255,8 +2263,8 @@ static void parse_module_self_types(parserstate *state, VALUE *array) {
2255
2263
  VALUE location = rbs_new_location(state->buffer, self_range);
2256
2264
  rbs_loc *loc = rbs_check_location(location);
2257
2265
  rbs_loc_alloc_children(loc, 2);
2258
- rbs_loc_add_required_child(loc, rb_intern("name"), name_range);
2259
- rbs_loc_add_optional_child(loc, rb_intern("args"), args_range);
2266
+ rbs_loc_add_required_child(loc, INTERN("name"), name_range);
2267
+ rbs_loc_add_optional_child(loc, INTERN("args"), args_range);
2260
2268
 
2261
2269
  VALUE self_type = rbs_ast_decl_module_self(module_name, args, location);
2262
2270
  melt_array(array);
@@ -2397,12 +2405,12 @@ static VALUE parse_module_decl0(parserstate *state, range keyword_range, VALUE m
2397
2405
  VALUE location = rbs_new_location(state->buffer, decl_range);
2398
2406
  rbs_loc *loc = rbs_check_location(location);
2399
2407
  rbs_loc_alloc_children(loc, 6);
2400
- rbs_loc_add_required_child(loc, rb_intern("keyword"), keyword_range);
2401
- rbs_loc_add_required_child(loc, rb_intern("name"), name_range);
2402
- rbs_loc_add_required_child(loc, rb_intern("end"), end_range);
2403
- rbs_loc_add_optional_child(loc, rb_intern("type_params"), type_params_range);
2404
- rbs_loc_add_optional_child(loc, rb_intern("colon"), colon_range);
2405
- rbs_loc_add_optional_child(loc, rb_intern("self_types"), self_types_range);
2408
+ rbs_loc_add_required_child(loc, INTERN("keyword"), keyword_range);
2409
+ rbs_loc_add_required_child(loc, INTERN("name"), name_range);
2410
+ rbs_loc_add_required_child(loc, INTERN("end"), end_range);
2411
+ rbs_loc_add_optional_child(loc, INTERN("type_params"), type_params_range);
2412
+ rbs_loc_add_optional_child(loc, INTERN("colon"), colon_range);
2413
+ rbs_loc_add_optional_child(loc, INTERN("self_types"), self_types_range);
2406
2414
 
2407
2415
  parser_pop_typevar_table(state);
2408
2416
 
@@ -2448,12 +2456,12 @@ static VALUE parse_module_decl(parserstate *state, position comment_pos, VALUE a
2448
2456
  VALUE location = rbs_new_location(state->buffer, decl_range);
2449
2457
  rbs_loc *loc = rbs_check_location(location);
2450
2458
  rbs_loc_alloc_children(loc, 4);
2451
- rbs_loc_add_required_child(loc, rb_intern("keyword"), keyword_range);
2452
- rbs_loc_add_required_child(loc, rb_intern("new_name"), module_name_range);
2453
- rbs_loc_add_required_child(loc, rb_intern("eq"), eq_range);
2454
- rbs_loc_add_optional_child(loc, rb_intern("old_name"), old_name_range);
2459
+ rbs_loc_add_required_child(loc, INTERN("keyword"), keyword_range);
2460
+ rbs_loc_add_required_child(loc, INTERN("new_name"), module_name_range);
2461
+ rbs_loc_add_required_child(loc, INTERN("eq"), eq_range);
2462
+ rbs_loc_add_optional_child(loc, INTERN("old_name"), old_name_range);
2455
2463
 
2456
- return rbs_ast_decl_module_alias(module_name, old_name, location, comment);
2464
+ return rbs_ast_decl_module_alias(module_name, old_name, location, comment, annotations);
2457
2465
  } else {
2458
2466
  return parse_module_decl0(state, keyword_range, module_name, module_name_range, comment, annotations);
2459
2467
  }
@@ -2480,8 +2488,8 @@ static VALUE parse_class_decl_super(parserstate *state, range *lt_range) {
2480
2488
  VALUE location = rbs_new_location(state->buffer, super_range);
2481
2489
  rbs_loc *loc = rbs_check_location(location);
2482
2490
  rbs_loc_alloc_children(loc, 2);
2483
- rbs_loc_add_required_child(loc, rb_intern("name"), name_range);
2484
- rbs_loc_add_optional_child(loc, rb_intern("args"), args_range);
2491
+ rbs_loc_add_required_child(loc, INTERN("name"), name_range);
2492
+ rbs_loc_add_optional_child(loc, INTERN("args"), args_range);
2485
2493
 
2486
2494
  return rbs_ast_decl_class_super(name, args, location);
2487
2495
  } else {
@@ -2518,11 +2526,11 @@ static VALUE parse_class_decl0(parserstate *state, range keyword_range, VALUE na
2518
2526
  VALUE location = rbs_new_location(state->buffer, decl_range);
2519
2527
  rbs_loc *loc = rbs_check_location(location);
2520
2528
  rbs_loc_alloc_children(loc, 5);
2521
- rbs_loc_add_required_child(loc, rb_intern("keyword"), keyword_range);
2522
- rbs_loc_add_required_child(loc, rb_intern("name"), name_range);
2523
- rbs_loc_add_required_child(loc, rb_intern("end"), end_range);
2524
- rbs_loc_add_optional_child(loc, rb_intern("type_params"), type_params_range);
2525
- rbs_loc_add_optional_child(loc, rb_intern("lt"), lt_range);
2529
+ rbs_loc_add_required_child(loc, INTERN("keyword"), keyword_range);
2530
+ rbs_loc_add_required_child(loc, INTERN("name"), name_range);
2531
+ rbs_loc_add_required_child(loc, INTERN("end"), end_range);
2532
+ rbs_loc_add_optional_child(loc, INTERN("type_params"), type_params_range);
2533
+ rbs_loc_add_optional_child(loc, INTERN("lt"), lt_range);
2526
2534
 
2527
2535
  return rbs_ast_decl_class(
2528
2536
  name,
@@ -2565,12 +2573,12 @@ static VALUE parse_class_decl(parserstate *state, position comment_pos, VALUE an
2565
2573
  VALUE location = rbs_new_location(state->buffer, decl_range);
2566
2574
  rbs_loc *loc = rbs_check_location(location);
2567
2575
  rbs_loc_alloc_children(loc, 4);
2568
- rbs_loc_add_required_child(loc, rb_intern("keyword"), keyword_range);
2569
- rbs_loc_add_required_child(loc, rb_intern("new_name"), class_name_range);
2570
- rbs_loc_add_required_child(loc, rb_intern("eq"), eq_range);
2571
- rbs_loc_add_optional_child(loc, rb_intern("old_name"), old_name_range);
2576
+ rbs_loc_add_required_child(loc, INTERN("keyword"), keyword_range);
2577
+ rbs_loc_add_required_child(loc, INTERN("new_name"), class_name_range);
2578
+ rbs_loc_add_required_child(loc, INTERN("eq"), eq_range);
2579
+ rbs_loc_add_optional_child(loc, INTERN("old_name"), old_name_range);
2572
2580
 
2573
- return rbs_ast_decl_class_alias(class_name, old_name, location, comment);
2581
+ return rbs_ast_decl_class_alias(class_name, old_name, location, comment, annotations);
2574
2582
  } else {
2575
2583
  return parse_class_decl0(state, keyword_range, class_name, class_name_range, comment, annotations);
2576
2584
  }
@@ -2590,11 +2598,11 @@ static VALUE parse_nested_decl(parserstate *state, const char *nested_in, positi
2590
2598
  switch (state->current_token.type) {
2591
2599
  case tUIDENT:
2592
2600
  case pCOLON2: {
2593
- decl = parse_const_decl(state);
2601
+ decl = parse_const_decl(state, annotations);
2594
2602
  break;
2595
2603
  }
2596
2604
  case tGIDENT: {
2597
- decl = parse_global_decl(state);
2605
+ decl = parse_global_decl(state, annotations);
2598
2606
  break;
2599
2607
  }
2600
2608
  case kTYPE: {
@@ -2636,10 +2644,10 @@ static VALUE parse_decl(parserstate *state) {
2636
2644
  switch (state->current_token.type) {
2637
2645
  case tUIDENT:
2638
2646
  case pCOLON2: {
2639
- return parse_const_decl(state);
2647
+ return parse_const_decl(state, annotations);
2640
2648
  }
2641
2649
  case tGIDENT: {
2642
- return parse_global_decl(state);
2650
+ return parse_global_decl(state, annotations);
2643
2651
  }
2644
2652
  case kTYPE: {
2645
2653
  return parse_type_decl(state, annot_pos, annotations);
@@ -2747,9 +2755,9 @@ static void parse_use_clauses(parserstate *state, VALUE clauses) {
2747
2755
  VALUE location = rbs_new_location(state->buffer, clause_range);
2748
2756
  rbs_loc *loc = rbs_check_location(location);
2749
2757
  rbs_loc_alloc_children(loc, 3);
2750
- rbs_loc_add_required_child(loc, rb_intern("type_name"), type_name_range);
2751
- rbs_loc_add_optional_child(loc, rb_intern("keyword"), keyword_range);
2752
- rbs_loc_add_optional_child(loc, rb_intern("new_name"), new_name_range);
2758
+ rbs_loc_add_required_child(loc, INTERN("type_name"), type_name_range);
2759
+ rbs_loc_add_optional_child(loc, INTERN("keyword"), keyword_range);
2760
+ rbs_loc_add_optional_child(loc, INTERN("new_name"), new_name_range);
2753
2761
 
2754
2762
  rb_ary_push(clauses, rbs_ast_directives_use_single_clause(type_name, new_name, location));
2755
2763
 
@@ -2766,8 +2774,8 @@ static void parse_use_clauses(parserstate *state, VALUE clauses) {
2766
2774
  VALUE location = rbs_new_location(state->buffer, clause_range);
2767
2775
  rbs_loc *loc = rbs_check_location(location);
2768
2776
  rbs_loc_alloc_children(loc, 2);
2769
- rbs_loc_add_required_child(loc, rb_intern("namespace"), namespace_range);
2770
- rbs_loc_add_required_child(loc, rb_intern("star"), star_range);
2777
+ rbs_loc_add_required_child(loc, INTERN("namespace"), namespace_range);
2778
+ rbs_loc_add_required_child(loc, INTERN("star"), star_range);
2771
2779
 
2772
2780
  rb_ary_push(clauses, rbs_ast_directives_use_wildcard_clause(namespace, location));
2773
2781
 
@@ -2809,7 +2817,7 @@ static VALUE parse_use_directive(parserstate *state) {
2809
2817
  VALUE location = rbs_new_location(state->buffer, directive_range);
2810
2818
  rbs_loc *loc = rbs_check_location(location);
2811
2819
  rbs_loc_alloc_children(loc, 1);
2812
- rbs_loc_add_required_child(loc, rb_intern("keyword"), keyword_range);
2820
+ rbs_loc_add_required_child(loc, INTERN("keyword"), keyword_range);
2813
2821
 
2814
2822
  return rbs_ast_directives_use(clauses, location);
2815
2823
  } else {
@@ -2917,12 +2925,12 @@ parse_signature_try(VALUE a) {
2917
2925
  }
2918
2926
 
2919
2927
  static VALUE
2920
- rbsparser_parse_signature(VALUE self, VALUE buffer, VALUE end_pos)
2928
+ rbsparser_parse_signature(VALUE self, VALUE buffer, VALUE start_pos, VALUE end_pos)
2921
2929
  {
2922
2930
  VALUE string = rb_funcall(buffer, rb_intern("content"), 0);
2923
2931
  StringValue(string);
2924
- lexstate *lexer = alloc_lexer(string, 0, FIX2INT(end_pos));
2925
- parserstate *parser = alloc_parser(buffer, lexer, 0, FIX2INT(end_pos), Qnil);
2932
+ lexstate *lexer = alloc_lexer(string, FIX2INT(start_pos), FIX2INT(end_pos));
2933
+ parserstate *parser = alloc_parser(buffer, lexer, FIX2INT(start_pos), FIX2INT(end_pos), Qnil);
2926
2934
  return rb_ensure(parse_signature_try, (VALUE)parser, ensure_free_parser, (VALUE)parser);
2927
2935
  }
2928
2936
 
@@ -2956,6 +2964,6 @@ void rbs__init_parser(void) {
2956
2964
 
2957
2965
  rb_define_singleton_method(RBS_Parser, "_parse_type", rbsparser_parse_type, 5);
2958
2966
  rb_define_singleton_method(RBS_Parser, "_parse_method_type", rbsparser_parse_method_type, 5);
2959
- rb_define_singleton_method(RBS_Parser, "_parse_signature", rbsparser_parse_signature, 2);
2967
+ rb_define_singleton_method(RBS_Parser, "_parse_signature", rbsparser_parse_signature, 3);
2960
2968
  rb_define_singleton_method(RBS_Parser, "_lex", rbsparser_lex, 2);
2961
2969
  }