rbs 3.7.0.dev.1 → 3.7.0.pre.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 (83) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +1 -1
  3. data/.github/workflows/windows.yml +5 -3
  4. data/.gitignore +1 -0
  5. data/.rubocop.yml +6 -0
  6. data/CHANGELOG.md +47 -0
  7. data/Rakefile +23 -0
  8. data/config.yml +311 -0
  9. data/core/dir.rbs +1 -1
  10. data/core/kernel.rbs +2 -2
  11. data/core/process.rbs +1 -1
  12. data/core/set.rbs +1 -1
  13. data/docs/syntax.md +6 -4
  14. data/ext/rbs_extension/extconf.rb +10 -0
  15. data/ext/rbs_extension/parser.c +103 -110
  16. data/ext/rbs_extension/rbs_extension.h +1 -2
  17. data/{ext/rbs_extension → include/rbs}/constants.h +21 -19
  18. data/include/rbs/ruby_objs.h +72 -0
  19. data/include/rbs.h +7 -0
  20. data/lib/rbs/collection/config/lockfile_generator.rb +34 -5
  21. data/lib/rbs/collection/config.rb +2 -2
  22. data/lib/rbs/environment_loader.rb +5 -0
  23. data/lib/rbs/prototype/rb.rb +7 -3
  24. data/lib/rbs/types.rb +10 -3
  25. data/lib/rbs/version.rb +1 -1
  26. data/sig/ancestor_graph.rbs +1 -1
  27. data/sig/collection/config/lockfile_generator.rbs +9 -1
  28. data/sig/definition.rbs +1 -1
  29. data/sig/definition_builder.rbs +1 -1
  30. data/sig/environment.rbs +1 -1
  31. data/sig/prototype/rb.rbs +1 -1
  32. data/sig/type_alias_dependency.rbs +2 -2
  33. data/sig/type_alias_regularity.rbs +1 -1
  34. data/sig/type_param.rbs +3 -3
  35. data/sig/vendorer.rbs +1 -1
  36. data/{ext/rbs_extension → src}/constants.c +35 -36
  37. data/src/ruby_objs.c +793 -0
  38. data/stdlib/cgi/0/manifest.yaml +1 -0
  39. data/stdlib/csv/0/manifest.yaml +1 -0
  40. data/stdlib/did_you_mean/0/did_you_mean.rbs +1 -1
  41. data/stdlib/json/0/json.rbs +1 -1
  42. data/stdlib/minitest/0/kernel.rbs +2 -2
  43. data/stdlib/minitest/0/minitest/abstract_reporter.rbs +4 -1
  44. data/stdlib/minitest/0/minitest/assertion.rbs +1 -0
  45. data/stdlib/minitest/0/minitest/assertions.rbs +58 -13
  46. data/stdlib/minitest/0/minitest/backtrace_filter.rbs +7 -0
  47. data/stdlib/minitest/0/minitest/bench_spec.rbs +8 -8
  48. data/stdlib/minitest/0/minitest/benchmark.rbs +17 -16
  49. data/stdlib/minitest/0/minitest/compress.rbs +13 -0
  50. data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  51. data/stdlib/minitest/0/minitest/mock.rbs +9 -5
  52. data/stdlib/minitest/0/minitest/parallel/executor.rbs +4 -0
  53. data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +0 -1
  54. data/stdlib/minitest/0/minitest/pride_io.rbs +8 -0
  55. data/stdlib/minitest/0/minitest/pride_lol.rbs +2 -0
  56. data/stdlib/minitest/0/minitest/progress_reporter.rbs +1 -1
  57. data/stdlib/minitest/0/minitest/reportable.rbs +2 -0
  58. data/stdlib/minitest/0/minitest/runnable.rbs +33 -1
  59. data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +1 -1
  60. data/stdlib/minitest/0/minitest/spec/dsl.rbs +10 -6
  61. data/stdlib/minitest/0/minitest/spec.rbs +1 -1
  62. data/stdlib/minitest/0/minitest/statistics_reporter.rbs +5 -0
  63. data/stdlib/minitest/0/minitest/summary_reporter.rbs +0 -7
  64. data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +1 -1
  65. data/stdlib/minitest/0/minitest/test.rbs +7 -14
  66. data/stdlib/minitest/0/minitest/unexpected_error.rbs +2 -0
  67. data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  68. data/stdlib/minitest/0/minitest/unit.rbs +1 -2
  69. data/stdlib/minitest/0/minitest.rbs +41 -892
  70. data/stdlib/open-uri/0/manifest.yaml +1 -0
  71. data/stdlib/openssl/0/manifest.yaml +1 -0
  72. data/stdlib/openssl/0/openssl.rbs +26 -1
  73. data/stdlib/psych/0/core_ext.rbs +12 -0
  74. data/templates/include/rbs/constants.h.erb +20 -0
  75. data/templates/include/rbs/ruby_objs.h.erb +10 -0
  76. data/templates/src/constants.c.erb +36 -0
  77. data/templates/src/ruby_objs.c.erb +27 -0
  78. data/templates/template.rb +122 -0
  79. metadata +19 -9
  80. data/ext/rbs_extension/ruby_objs.c +0 -602
  81. data/ext/rbs_extension/ruby_objs.h +0 -51
  82. data/stdlib/minitest/0/manifest.yaml +0 -2
  83. /data/{core/string_io.rbs → stdlib/stringio/0/stringio.rbs} +0 -0
@@ -143,7 +143,7 @@ void parser_advance_no_gap(parserstate *state) {
143
143
  | {(tUIDENT `::`)*} <tXIDENT>
144
144
  | {<tXIDENT>}
145
145
  */
146
- VALUE parse_type_name(parserstate *state, TypeNameKind kind, range *rg) {
146
+ static VALUE parse_type_name(parserstate *state, TypeNameKind kind, range *rg) {
147
147
  VALUE absolute = Qfalse;
148
148
  VALUE path = EMPTY_ARRAY;
149
149
  VALUE namespace;
@@ -757,7 +757,7 @@ static void check_key_duplication(parserstate *state, VALUE fields, VALUE key) {
757
757
  record_attribute ::= {} keyword_token `:` <type>
758
758
  | {} literal_type `=>` <type>
759
759
  */
760
- VALUE parse_record_attributes(parserstate *state) {
760
+ static VALUE parse_record_attributes(parserstate *state) {
761
761
  VALUE fields = rb_hash_new();
762
762
 
763
763
  if (state->next_token.type == pRBRACE) {
@@ -963,25 +963,25 @@ static VALUE parse_simple(parserstate *state) {
963
963
  return type;
964
964
  }
965
965
  case kBOOL:
966
- return rbs_base_type(RBS_Types_Bases_Bool, rbs_location_current_token(state));
966
+ return rbs_bases_bool(rbs_location_current_token(state));
967
967
  case kBOT:
968
- return rbs_base_type(RBS_Types_Bases_Bottom, rbs_location_current_token(state));
968
+ return rbs_bases_bottom(rbs_location_current_token(state));
969
969
  case kCLASS:
970
- return rbs_base_type(RBS_Types_Bases_Class, rbs_location_current_token(state));
970
+ return rbs_bases_class(rbs_location_current_token(state));
971
971
  case kINSTANCE:
972
- return rbs_base_type(RBS_Types_Bases_Instance, rbs_location_current_token(state));
972
+ return rbs_bases_instance(rbs_location_current_token(state));
973
973
  case kNIL:
974
- return rbs_base_type(RBS_Types_Bases_Nil, rbs_location_current_token(state));
974
+ return rbs_bases_nil(rbs_location_current_token(state));
975
975
  case kSELF:
976
- return rbs_base_type(RBS_Types_Bases_Self, rbs_location_current_token(state));
976
+ return rbs_bases_self(rbs_location_current_token(state));
977
977
  case kTOP:
978
- return rbs_base_type(RBS_Types_Bases_Top, rbs_location_current_token(state));
978
+ return rbs_bases_top(rbs_location_current_token(state));
979
979
  case kVOID:
980
- return rbs_base_type(RBS_Types_Bases_Void, rbs_location_current_token(state));
980
+ return rbs_bases_void(rbs_location_current_token(state));
981
981
  case kUNTYPED:
982
- return rbs_base_type(RBS_Types_Bases_Any, rbs_location_current_token(state));
982
+ return rbs_bases_any(rbs_location_current_token(state));
983
983
  case k__TODO__: {
984
- VALUE type = rbs_base_type(RBS_Types_Bases_Any, rbs_location_current_token(state));
984
+ VALUE type = rbs_bases_any(rbs_location_current_token(state));
985
985
  rb_funcall(type, rb_intern("todo!"), 0);
986
986
  return type;
987
987
  }
@@ -1123,7 +1123,7 @@ VALUE parse_type(parserstate *state) {
1123
1123
 
1124
1124
  type_param ::= tUIDENT upper_bound? default_type? (module_type_params == false)
1125
1125
  */
1126
- VALUE parse_type_params(parserstate *state, range *rg, bool module_type_params) {
1126
+ static VALUE parse_type_params(parserstate *state, range *rg, bool module_type_params) {
1127
1127
  VALUE params = EMPTY_ARRAY;
1128
1128
 
1129
1129
  bool required_param_allowed = true;
@@ -1219,7 +1219,12 @@ VALUE parse_type_params(parserstate *state, range *rg, bool module_type_params)
1219
1219
  rbs_loc_add_optional_child(loc, rb_intern("upper_bound"), upper_bound_range);
1220
1220
  rbs_loc_add_optional_child(loc, rb_intern("default"), default_type_range);
1221
1221
 
1222
- VALUE param = rbs_ast_type_param(name, variance, unchecked, upper_bound, default_type, location);
1222
+ VALUE param = rbs_ast_type_param(name, variance, upper_bound, default_type, location);
1223
+
1224
+ if (unchecked) {
1225
+ rb_funcall(param, rb_intern("unchecked!"), 0);
1226
+ }
1227
+
1223
1228
  melt_array(&params);
1224
1229
  rb_ary_push(params, param);
1225
1230
 
@@ -1290,7 +1295,7 @@ VALUE parse_method_type(parserstate *state) {
1290
1295
  /*
1291
1296
  global_decl ::= {tGIDENT} `:` <type>
1292
1297
  */
1293
- VALUE parse_global_decl(parserstate *state) {
1298
+ static VALUE parse_global_decl(parserstate *state) {
1294
1299
  range decl_range;
1295
1300
  range name_range, colon_range;
1296
1301
 
@@ -1325,7 +1330,7 @@ VALUE parse_global_decl(parserstate *state) {
1325
1330
  /*
1326
1331
  const_decl ::= {const_name} `:` <type>
1327
1332
  */
1328
- VALUE parse_const_decl(parserstate *state) {
1333
+ static VALUE parse_const_decl(parserstate *state) {
1329
1334
  range decl_range;
1330
1335
  range name_range, colon_range;
1331
1336
 
@@ -1359,7 +1364,7 @@ VALUE parse_const_decl(parserstate *state) {
1359
1364
  /*
1360
1365
  type_decl ::= {kTYPE} alias_name `=` <type>
1361
1366
  */
1362
- VALUE parse_type_decl(parserstate *state, position comment_pos, VALUE annotations) {
1367
+ static VALUE parse_type_decl(parserstate *state, position comment_pos, VALUE annotations) {
1363
1368
  range decl_range;
1364
1369
  range keyword_range, name_range, params_range, eq_range;
1365
1370
 
@@ -1404,7 +1409,7 @@ VALUE parse_type_decl(parserstate *state, position comment_pos, VALUE annotation
1404
1409
  /*
1405
1410
  annotation ::= {<tANNOTATION>}
1406
1411
  */
1407
- VALUE parse_annotation(parserstate *state) {
1412
+ static VALUE parse_annotation(parserstate *state) {
1408
1413
  VALUE content = rb_funcall(state->buffer, rb_intern("content"), 0);
1409
1414
  rb_encoding *enc = rb_enc_get(content);
1410
1415
 
@@ -1460,7 +1465,7 @@ VALUE parse_annotation(parserstate *state) {
1460
1465
  annotations ::= {} annotation ... <annotation>
1461
1466
  | {<>}
1462
1467
  */
1463
- void parse_annotations(parserstate *state, VALUE *annotations, position *annot_pos) {
1468
+ static void parse_annotations(parserstate *state, VALUE *annotations, position *annot_pos) {
1464
1469
  *annot_pos = NullPosition;
1465
1470
 
1466
1471
  while (true) {
@@ -1483,7 +1488,7 @@ void parse_annotations(parserstate *state, VALUE *annotations, position *annot_p
1483
1488
  method_name ::= {} <IDENT | keyword>
1484
1489
  | {} (IDENT | keyword)~<`?`>
1485
1490
  */
1486
- VALUE parse_method_name(parserstate *state, range *range) {
1491
+ static VALUE parse_method_name(parserstate *state, range *range) {
1487
1492
  parser_advance(state);
1488
1493
 
1489
1494
  switch (state->current_token.type)
@@ -1551,7 +1556,7 @@ typedef enum {
1551
1556
 
1552
1557
  @param allow_selfq `true` to accept `self?` kind.
1553
1558
  */
1554
- InstanceSingletonKind parse_instance_singleton_kind(parserstate *state, bool allow_selfq, range *rg) {
1559
+ static InstanceSingletonKind parse_instance_singleton_kind(parserstate *state, bool allow_selfq, range *rg) {
1555
1560
  InstanceSingletonKind kind = INSTANCE_KIND;
1556
1561
 
1557
1562
  if (state->next_token.type == kSELF) {
@@ -1594,7 +1599,7 @@ InstanceSingletonKind parse_instance_singleton_kind(parserstate *state, bool all
1594
1599
  * @param instance_only `true` to reject singleton method definition.
1595
1600
  * @param accept_overload `true` to accept overloading (...) definition.
1596
1601
  * */
1597
- VALUE parse_member_def(parserstate *state, bool instance_only, bool accept_overload, position comment_pos, VALUE annotations) {
1602
+ static VALUE parse_member_def(parserstate *state, bool instance_only, bool accept_overload, position comment_pos, VALUE annotations) {
1598
1603
  range member_range;
1599
1604
  range visibility_range;
1600
1605
  range keyword_range;
@@ -1774,31 +1779,29 @@ void class_instance_name(parserstate *state, TypeNameKind kind, VALUE *name, VAL
1774
1779
  *
1775
1780
  * @param from_interface `true` when the member is in an interface.
1776
1781
  * */
1777
- VALUE parse_mixin_member(parserstate *state, bool from_interface, position comment_pos, VALUE annotations) {
1782
+ static VALUE parse_mixin_member(parserstate *state, bool from_interface, position comment_pos, VALUE annotations) {
1778
1783
  range member_range;
1779
1784
  range name_range;
1780
1785
  range keyword_range;
1781
1786
  range args_range = NULL_RANGE;
1782
1787
  bool reset_typevar_scope;
1788
+ enum TokenType type;
1783
1789
 
1784
1790
  member_range.start = state->current_token.range.start;
1785
1791
  comment_pos = nonnull_pos_or(comment_pos, member_range.start);
1786
1792
 
1793
+ type = state->current_token.type;
1787
1794
  keyword_range = state->current_token.range;
1788
1795
 
1789
- VALUE klass = Qnil;
1790
- switch (state->current_token.type)
1796
+ switch (type)
1791
1797
  {
1792
1798
  case kINCLUDE:
1793
- klass = RBS_AST_Members_Include;
1794
1799
  reset_typevar_scope = false;
1795
1800
  break;
1796
1801
  case kEXTEND:
1797
- klass = RBS_AST_Members_Extend;
1798
1802
  reset_typevar_scope = true;
1799
1803
  break;
1800
1804
  case kPREPEND:
1801
- klass = RBS_AST_Members_Prepend;
1802
1805
  reset_typevar_scope = false;
1803
1806
  break;
1804
1807
  default:
@@ -1836,14 +1839,18 @@ VALUE parse_mixin_member(parserstate *state, bool from_interface, position comme
1836
1839
  rbs_loc_add_required_child(loc, rb_intern("keyword"), keyword_range);
1837
1840
  rbs_loc_add_optional_child(loc, rb_intern("args"), args_range);
1838
1841
 
1839
- return rbs_ast_members_mixin(
1840
- klass,
1841
- name,
1842
- args,
1843
- annotations,
1844
- location,
1845
- get_comment(state, comment_pos.line)
1846
- );
1842
+ VALUE comment = get_comment(state, comment_pos.line);
1843
+ switch (type)
1844
+ {
1845
+ case kINCLUDE:
1846
+ return rbs_ast_members_include(name, args, annotations, location, comment);
1847
+ case kEXTEND:
1848
+ return rbs_ast_members_extend(name, args, annotations, location, comment);
1849
+ case kPREPEND:
1850
+ return rbs_ast_members_prepend(name, args, annotations, location, comment);
1851
+ default:
1852
+ rbs_abort();
1853
+ }
1847
1854
  }
1848
1855
 
1849
1856
  /**
@@ -1854,7 +1861,7 @@ VALUE parse_mixin_member(parserstate *state, bool from_interface, position comme
1854
1861
  *
1855
1862
  * @param[in] instance_only `true` to reject `self.` alias.
1856
1863
  * */
1857
- VALUE parse_alias_member(parserstate *state, bool instance_only, position comment_pos, VALUE annotations) {
1864
+ static VALUE parse_alias_member(parserstate *state, bool instance_only, position comment_pos, VALUE annotations) {
1858
1865
  range member_range;
1859
1866
  range keyword_range, new_name_range, old_name_range;
1860
1867
  range new_kind_range, old_kind_range;
@@ -1917,10 +1924,11 @@ VALUE parse_alias_member(parserstate *state, bool instance_only, position commen
1917
1924
  | {kSELF} `.` tAIDENT `:` <type>
1918
1925
  | {tA2IDENT} `:` <type>
1919
1926
  */
1920
- VALUE parse_variable_member(parserstate *state, position comment_pos, VALUE annotations) {
1927
+ static VALUE parse_variable_member(parserstate *state, position comment_pos, VALUE annotations) {
1921
1928
  range member_range;
1922
1929
  range name_range, colon_range;
1923
1930
  range kind_range = NULL_RANGE;
1931
+ rbs_loc *loc;
1924
1932
 
1925
1933
  if (rb_array_len(annotations) > 0) {
1926
1934
  raise_syntax_error(
@@ -1934,7 +1942,6 @@ VALUE parse_variable_member(parserstate *state, position comment_pos, VALUE anno
1934
1942
  comment_pos = nonnull_pos_or(comment_pos, member_range.start);
1935
1943
  VALUE comment = get_comment(state, comment_pos.line);
1936
1944
 
1937
- VALUE klass;
1938
1945
  VALUE location;
1939
1946
  VALUE name;
1940
1947
  VALUE type;
@@ -1942,8 +1949,6 @@ VALUE parse_variable_member(parserstate *state, position comment_pos, VALUE anno
1942
1949
  switch (state->current_token.type)
1943
1950
  {
1944
1951
  case tAIDENT:
1945
- klass = RBS_AST_Members_InstanceVariable;
1946
-
1947
1952
  name_range = state->current_token.range;
1948
1953
  name = ID2SYM(INTERN_TOKEN(state, state->current_token));
1949
1954
 
@@ -1953,11 +1958,16 @@ VALUE parse_variable_member(parserstate *state, position comment_pos, VALUE anno
1953
1958
  type = parse_type(state);
1954
1959
  member_range.end = state->current_token.range.end;
1955
1960
 
1956
- break;
1961
+ location = rbs_new_location(state->buffer, member_range);
1962
+ loc = rbs_check_location(location);
1963
+ rbs_loc_alloc_children(loc, 3);
1964
+ rbs_loc_add_required_child(loc, rb_intern("name"), name_range);
1965
+ rbs_loc_add_required_child(loc, rb_intern("colon"), colon_range);
1966
+ rbs_loc_add_optional_child(loc, rb_intern("kind"), kind_range);
1957
1967
 
1958
- case tA2IDENT:
1959
- klass = RBS_AST_Members_ClassVariable;
1968
+ return rbs_ast_members_instance_variable(name, type, location, comment);
1960
1969
 
1970
+ case tA2IDENT:
1961
1971
  name_range = state->current_token.range;
1962
1972
  name = ID2SYM(INTERN_TOKEN(state, state->current_token));
1963
1973
 
@@ -1969,11 +1979,16 @@ VALUE parse_variable_member(parserstate *state, position comment_pos, VALUE anno
1969
1979
  parser_pop_typevar_table(state);
1970
1980
  member_range.end = state->current_token.range.end;
1971
1981
 
1972
- break;
1982
+ location = rbs_new_location(state->buffer, member_range);
1983
+ loc = rbs_check_location(location);
1984
+ rbs_loc_alloc_children(loc, 3);
1985
+ rbs_loc_add_required_child(loc, rb_intern("name"), name_range);
1986
+ rbs_loc_add_required_child(loc, rb_intern("colon"), colon_range);
1987
+ rbs_loc_add_optional_child(loc, rb_intern("kind"), kind_range);
1973
1988
 
1974
- case kSELF:
1975
- klass = RBS_AST_Members_ClassInstanceVariable;
1989
+ return rbs_ast_members_class_variable(name, type, location, comment);
1976
1990
 
1991
+ case kSELF:
1977
1992
  kind_range.start = state->current_token.range.start;
1978
1993
  kind_range.end = state->next_token.range.end;
1979
1994
 
@@ -1991,27 +2006,25 @@ VALUE parse_variable_member(parserstate *state, position comment_pos, VALUE anno
1991
2006
  parser_pop_typevar_table(state);
1992
2007
  member_range.end = state->current_token.range.end;
1993
2008
 
1994
- break;
2009
+ location = rbs_new_location(state->buffer, member_range);
2010
+ loc = rbs_check_location(location);
2011
+ rbs_loc_alloc_children(loc, 3);
2012
+ rbs_loc_add_required_child(loc, rb_intern("name"), name_range);
2013
+ rbs_loc_add_required_child(loc, rb_intern("colon"), colon_range);
2014
+ rbs_loc_add_optional_child(loc, rb_intern("kind"), kind_range);
2015
+
2016
+ return rbs_ast_members_class_instance_variable(name, type, location, comment);
1995
2017
 
1996
2018
  default:
1997
2019
  rbs_abort();
1998
2020
  }
1999
-
2000
- location = rbs_new_location(state->buffer, member_range);
2001
- rbs_loc *loc = rbs_check_location(location);
2002
- rbs_loc_alloc_children(loc, 3);
2003
- rbs_loc_add_required_child(loc, rb_intern("name"), name_range);
2004
- rbs_loc_add_required_child(loc, rb_intern("colon"), colon_range);
2005
- rbs_loc_add_optional_child(loc, rb_intern("kind"), kind_range);
2006
-
2007
- return rbs_ast_members_variable(klass, name, type, location, comment);
2008
2021
  }
2009
2022
 
2010
2023
  /*
2011
2024
  visibility_member ::= {<`public`>}
2012
2025
  | {<`private`>}
2013
2026
  */
2014
- VALUE parse_visibility_member(parserstate *state, VALUE annotations) {
2027
+ static VALUE parse_visibility_member(parserstate *state, VALUE annotations) {
2015
2028
  if (rb_array_len(annotations) > 0) {
2016
2029
  raise_syntax_error(
2017
2030
  state,
@@ -2020,24 +2033,17 @@ VALUE parse_visibility_member(parserstate *state, VALUE annotations) {
2020
2033
  );
2021
2034
  }
2022
2035
 
2023
- VALUE klass;
2036
+ VALUE location = rbs_new_location(state->buffer, state->current_token.range);
2024
2037
 
2025
2038
  switch (state->current_token.type)
2026
2039
  {
2027
2040
  case kPUBLIC:
2028
- klass = RBS_AST_Members_Public;
2029
- break;
2041
+ return rbs_ast_members_public(location);
2030
2042
  case kPRIVATE:
2031
- klass = RBS_AST_Members_Private;
2032
- break;
2043
+ return rbs_ast_members_private(location);
2033
2044
  default:
2034
2045
  rbs_abort();
2035
2046
  }
2036
-
2037
- return rbs_ast_members_visibility(
2038
- klass,
2039
- rbs_new_location(state->buffer, state->current_token.range)
2040
- );
2041
2047
  }
2042
2048
 
2043
2049
  /*
@@ -2054,13 +2060,12 @@ VALUE parse_visibility_member(parserstate *state, VALUE annotations) {
2054
2060
  | `(` tAIDENT `)` # Ivar name
2055
2061
  | `(` `)` # No variable
2056
2062
  */
2057
- VALUE parse_attribute_member(parserstate *state, position comment_pos, VALUE annotations) {
2063
+ static VALUE parse_attribute_member(parserstate *state, position comment_pos, VALUE annotations) {
2058
2064
  range member_range;
2059
2065
  range keyword_range, name_range, colon_range;
2060
2066
  range kind_range = NULL_RANGE, ivar_range = NULL_RANGE, ivar_name_range = NULL_RANGE, visibility_range = NULL_RANGE;
2061
2067
 
2062
2068
  InstanceSingletonKind is_kind;
2063
- VALUE klass;
2064
2069
  VALUE kind;
2065
2070
  VALUE attr_name;
2066
2071
  VALUE ivar_name;
@@ -2069,6 +2074,7 @@ VALUE parse_attribute_member(parserstate *state, position comment_pos, VALUE ann
2069
2074
  VALUE location;
2070
2075
  VALUE visibility;
2071
2076
  rbs_loc *loc;
2077
+ enum TokenType attr_type;
2072
2078
 
2073
2079
  member_range.start = state->current_token.range.start;
2074
2080
  comment_pos = nonnull_pos_or(comment_pos, member_range.start);
@@ -2092,21 +2098,8 @@ VALUE parse_attribute_member(parserstate *state, position comment_pos, VALUE ann
2092
2098
  break;
2093
2099
  }
2094
2100
 
2101
+ attr_type = state->current_token.type;
2095
2102
  keyword_range = state->current_token.range;
2096
- switch (state->current_token.type)
2097
- {
2098
- case kATTRREADER:
2099
- klass = RBS_AST_Members_AttrReader;
2100
- break;
2101
- case kATTRWRITER:
2102
- klass = RBS_AST_Members_AttrWriter;
2103
- break;
2104
- case kATTRACCESSOR:
2105
- klass = RBS_AST_Members_AttrAccessor;
2106
- break;
2107
- default:
2108
- rbs_abort();
2109
- }
2110
2103
 
2111
2104
  is_kind = parse_instance_singleton_kind(state, false, &kind_range);
2112
2105
  if (is_kind == INSTANCE_KIND) {
@@ -2153,17 +2146,17 @@ VALUE parse_attribute_member(parserstate *state, position comment_pos, VALUE ann
2153
2146
  rbs_loc_add_optional_child(loc, rb_intern("ivar_name"), ivar_name_range);
2154
2147
  rbs_loc_add_optional_child(loc, rb_intern("visibility"), visibility_range);
2155
2148
 
2156
- return rbs_ast_members_attribute(
2157
- klass,
2158
- attr_name,
2159
- type,
2160
- ivar_name,
2161
- kind,
2162
- annotations,
2163
- location,
2164
- comment,
2165
- visibility
2166
- );
2149
+ switch (attr_type)
2150
+ {
2151
+ case kATTRREADER:
2152
+ return rbs_ast_members_attr_reader(attr_name, type, ivar_name, kind, annotations, location, comment, visibility);
2153
+ case kATTRWRITER:
2154
+ return rbs_ast_members_attr_writer(attr_name, type, ivar_name, kind, annotations, location, comment, visibility);
2155
+ case kATTRACCESSOR:
2156
+ return rbs_ast_members_attr_accessor(attr_name, type, ivar_name, kind, annotations, location, comment, visibility);
2157
+ default:
2158
+ rbs_abort();
2159
+ }
2167
2160
  }
2168
2161
 
2169
2162
  /*
@@ -2173,7 +2166,7 @@ VALUE parse_attribute_member(parserstate *state, position comment_pos, VALUE ann
2173
2166
  | mixin_member (interface only)
2174
2167
  | alias_member (instance only)
2175
2168
  */
2176
- VALUE parse_interface_members(parserstate *state) {
2169
+ static VALUE parse_interface_members(parserstate *state) {
2177
2170
  VALUE members = EMPTY_ARRAY;
2178
2171
 
2179
2172
  while (state->next_token.type != kEND) {
@@ -2218,7 +2211,7 @@ VALUE parse_interface_members(parserstate *state) {
2218
2211
  /*
2219
2212
  interface_decl ::= {`interface`} interface_name module_type_params interface_members <kEND>
2220
2213
  */
2221
- VALUE parse_interface_decl(parserstate *state, position comment_pos, VALUE annotations) {
2214
+ static VALUE parse_interface_decl(parserstate *state, position comment_pos, VALUE annotations) {
2222
2215
  range member_range;
2223
2216
  range name_range, keyword_range, end_range;
2224
2217
  range type_params_range = NULL_RANGE;
@@ -2265,7 +2258,7 @@ VALUE parse_interface_decl(parserstate *state, position comment_pos, VALUE annot
2265
2258
  module_self_type ::= <module_name>
2266
2259
  | module_name `[` type_list <`]`>
2267
2260
  */
2268
- void parse_module_self_types(parserstate *state, VALUE *array) {
2261
+ static void parse_module_self_types(parserstate *state, VALUE *array) {
2269
2262
  while (true) {
2270
2263
  range self_range;
2271
2264
  range name_range;
@@ -2305,7 +2298,7 @@ void parse_module_self_types(parserstate *state, VALUE *array) {
2305
2298
  }
2306
2299
  }
2307
2300
 
2308
- VALUE parse_nested_decl(parserstate *state, const char *nested_in, position annot_pos, VALUE annotations);
2301
+ static VALUE parse_nested_decl(parserstate *state, const char *nested_in, position annot_pos, VALUE annotations);
2309
2302
 
2310
2303
  /*
2311
2304
  module_members ::= {} ...<module_member> kEND
@@ -2318,7 +2311,7 @@ VALUE parse_nested_decl(parserstate *state, const char *nested_in, position anno
2318
2311
  | `public`
2319
2312
  | `private`
2320
2313
  */
2321
- VALUE parse_module_members(parserstate *state) {
2314
+ static VALUE parse_module_members(parserstate *state) {
2322
2315
  VALUE members = EMPTY_ARRAY;
2323
2316
 
2324
2317
  while (state->next_token.type != kEND) {
@@ -2395,7 +2388,7 @@ VALUE parse_module_members(parserstate *state) {
2395
2388
  module_decl ::= {module_name} module_type_params module_members <kEND>
2396
2389
  | {module_name} module_name module_type_params `:` module_self_types module_members <kEND>
2397
2390
  */
2398
- VALUE parse_module_decl0(parserstate *state, range keyword_range, VALUE module_name, range name_range, VALUE comment, VALUE annotations) {
2391
+ static VALUE parse_module_decl0(parserstate *state, range keyword_range, VALUE module_name, range name_range, VALUE comment, VALUE annotations) {
2399
2392
  range decl_range;
2400
2393
  range end_range;
2401
2394
  range type_params_range;
@@ -2454,7 +2447,7 @@ VALUE parse_module_decl0(parserstate *state, range keyword_range, VALUE module_n
2454
2447
  | {`module`} module_name module_decl0 <kEND>
2455
2448
 
2456
2449
  */
2457
- VALUE parse_module_decl(parserstate *state, position comment_pos, VALUE annotations) {
2450
+ static VALUE parse_module_decl(parserstate *state, position comment_pos, VALUE annotations) {
2458
2451
  range keyword_range = state->current_token.range;
2459
2452
  range module_name_range;
2460
2453
 
@@ -2494,7 +2487,7 @@ VALUE parse_module_decl(parserstate *state, position comment_pos, VALUE annotati
2494
2487
  class_decl_super ::= {} `<` <class_instance_name>
2495
2488
  | {<>}
2496
2489
  */
2497
- VALUE parse_class_decl_super(parserstate *state, range *lt_range) {
2490
+ static VALUE parse_class_decl_super(parserstate *state, range *lt_range) {
2498
2491
  if (parser_advance_if(state, pLT)) {
2499
2492
  range super_range;
2500
2493
  range name_range;
@@ -2529,7 +2522,7 @@ VALUE parse_class_decl_super(parserstate *state, range *lt_range) {
2529
2522
  /*
2530
2523
  class_decl ::= {class_name} type_params class_decl_super class_members <`end`>
2531
2524
  */
2532
- VALUE parse_class_decl0(parserstate *state, range keyword_range, VALUE name, range name_range, VALUE comment, VALUE annotations) {
2525
+ static VALUE parse_class_decl0(parserstate *state, range keyword_range, VALUE name, range name_range, VALUE comment, VALUE annotations) {
2533
2526
  range decl_range;
2534
2527
  range end_range;
2535
2528
  range type_params_range;
@@ -2580,7 +2573,7 @@ VALUE parse_class_decl0(parserstate *state, range keyword_range, VALUE name, ran
2580
2573
  class_decl ::= {`class`} class_name `=` <class_name>
2581
2574
  | {`class`} class_name <class_decl0>
2582
2575
  */
2583
- VALUE parse_class_decl(parserstate *state, position comment_pos, VALUE annotations) {
2576
+ static VALUE parse_class_decl(parserstate *state, position comment_pos, VALUE annotations) {
2584
2577
  range keyword_range = state->current_token.range;
2585
2578
  range class_name_range;
2586
2579
 
@@ -2623,7 +2616,7 @@ VALUE parse_class_decl(parserstate *state, position comment_pos, VALUE annotatio
2623
2616
  | {<module_decl>}
2624
2617
  | {<class_decl>}
2625
2618
  */
2626
- VALUE parse_nested_decl(parserstate *state, const char *nested_in, position annot_pos, VALUE annotations) {
2619
+ static VALUE parse_nested_decl(parserstate *state, const char *nested_in, position annot_pos, VALUE annotations) {
2627
2620
  VALUE decl;
2628
2621
 
2629
2622
  parser_push_typevar_table(state, true);
@@ -2661,7 +2654,7 @@ VALUE parse_nested_decl(parserstate *state, const char *nested_in, position anno
2661
2654
  return decl;
2662
2655
  }
2663
2656
 
2664
- VALUE parse_decl(parserstate *state) {
2657
+ static VALUE parse_decl(parserstate *state) {
2665
2658
  VALUE annotations = EMPTY_ARRAY;
2666
2659
  position annot_pos = NullPosition;
2667
2660
 
@@ -2695,7 +2688,7 @@ VALUE parse_decl(parserstate *state) {
2695
2688
  namespace ::= {} (`::`)? (`tUIDENT` `::`)* `tUIDENT` <`::`>
2696
2689
  | {} <> (empty -- returns empty namespace)
2697
2690
  */
2698
- VALUE parse_namespace(parserstate *state, range *rg) {
2691
+ static VALUE parse_namespace(parserstate *state, range *rg) {
2699
2692
  bool is_absolute = false;
2700
2693
 
2701
2694
  if (state->next_token.type == pCOLON2) {
@@ -2733,7 +2726,7 @@ VALUE parse_namespace(parserstate *state, range *rg) {
2733
2726
  | {} namespace tUIDENT `as` <tUIDENT>
2734
2727
  | {} namespace <tSTAR>
2735
2728
  */
2736
- void parse_use_clauses(parserstate *state, VALUE clauses) {
2729
+ static void parse_use_clauses(parserstate *state, VALUE clauses) {
2737
2730
  while (true) {
2738
2731
  range namespace_range = NULL_RANGE;
2739
2732
  VALUE namespace = parse_namespace(state, &namespace_range);
@@ -2826,7 +2819,7 @@ void parse_use_clauses(parserstate *state, VALUE clauses) {
2826
2819
  /*
2827
2820
  use_directive ::= {} `use` <clauses>
2828
2821
  */
2829
- VALUE parse_use_directive(parserstate *state) {
2822
+ static VALUE parse_use_directive(parserstate *state) {
2830
2823
  if (state->next_token.type == kUSE) {
2831
2824
  parser_advance(state);
2832
2825
 
@@ -4,10 +4,9 @@
4
4
  #include "ruby/re.h"
5
5
  #include "ruby/encoding.h"
6
6
 
7
+ #include "rbs.h"
7
8
  #include "lexer.h"
8
9
  #include "parser.h"
9
- #include "constants.h"
10
- #include "ruby_objs.h"
11
10
 
12
11
  /**
13
12
  * Receives `parserstate` and `range`, which represents a string token or symbol token, and returns a string VALUE.
@@ -1,31 +1,38 @@
1
+ /*----------------------------------------------------------------------------*/
2
+ /* This file is generated by the templates/template.rb script and should not */
3
+ /* be modified manually. */
4
+ /* To change the template see */
5
+ /* templates/include/rbs/constants.h.erb */
6
+ /*----------------------------------------------------------------------------*/
7
+
1
8
  #ifndef RBS__CONSTANTS_H
2
9
  #define RBS__CONSTANTS_H
3
10
 
4
11
  extern VALUE RBS;
5
12
 
6
13
  extern VALUE RBS_AST;
14
+ extern VALUE RBS_AST_Declarations;
15
+ extern VALUE RBS_AST_Directives;
16
+ extern VALUE RBS_AST_Members;
17
+ extern VALUE RBS_Types;
18
+ extern VALUE RBS_Types_Bases;
19
+ extern VALUE RBS_ParsingError;
20
+
7
21
  extern VALUE RBS_AST_Annotation;
8
22
  extern VALUE RBS_AST_Comment;
9
- extern VALUE RBS_AST_TypeParam;
10
-
11
- extern VALUE RBS_AST_Declarations;
12
- extern VALUE RBS_AST_Declarations_TypeAlias;
13
- extern VALUE RBS_AST_Declarations_Class_Super;
14
23
  extern VALUE RBS_AST_Declarations_Class;
24
+ extern VALUE RBS_AST_Declarations_Class_Super;
25
+ extern VALUE RBS_AST_Declarations_ClassAlias;
15
26
  extern VALUE RBS_AST_Declarations_Constant;
16
27
  extern VALUE RBS_AST_Declarations_Global;
17
28
  extern VALUE RBS_AST_Declarations_Interface;
18
- extern VALUE RBS_AST_Declarations_Module_Self;
19
29
  extern VALUE RBS_AST_Declarations_Module;
30
+ extern VALUE RBS_AST_Declarations_Module_Self;
20
31
  extern VALUE RBS_AST_Declarations_ModuleAlias;
21
- extern VALUE RBS_AST_Declarations_ClassAlias;
22
-
23
- extern VALUE RBS_AST_Directives;
32
+ extern VALUE RBS_AST_Declarations_TypeAlias;
24
33
  extern VALUE RBS_AST_Directives_Use;
25
34
  extern VALUE RBS_AST_Directives_Use_SingleClause;
26
35
  extern VALUE RBS_AST_Directives_Use_WildcardClause;
27
-
28
- extern VALUE RBS_AST_Members;
29
36
  extern VALUE RBS_AST_Members_Alias;
30
37
  extern VALUE RBS_AST_Members_AttrAccessor;
31
38
  extern VALUE RBS_AST_Members_AttrReader;
@@ -40,16 +47,11 @@ extern VALUE RBS_AST_Members_MethodDefinition_Overload;
40
47
  extern VALUE RBS_AST_Members_Prepend;
41
48
  extern VALUE RBS_AST_Members_Private;
42
49
  extern VALUE RBS_AST_Members_Public;
43
-
50
+ extern VALUE RBS_AST_TypeParam;
44
51
  extern VALUE RBS_MethodType;
45
52
  extern VALUE RBS_Namespace;
46
-
47
- extern VALUE RBS_ParsingError;
48
53
  extern VALUE RBS_TypeName;
49
-
50
- extern VALUE RBS_Types;
51
54
  extern VALUE RBS_Types_Alias;
52
- extern VALUE RBS_Types_Bases;
53
55
  extern VALUE RBS_Types_Bases_Any;
54
56
  extern VALUE RBS_Types_Bases_Bool;
55
57
  extern VALUE RBS_Types_Bases_Bottom;
@@ -62,9 +64,8 @@ extern VALUE RBS_Types_Bases_Void;
62
64
  extern VALUE RBS_Types_Block;
63
65
  extern VALUE RBS_Types_ClassInstance;
64
66
  extern VALUE RBS_Types_ClassSingleton;
65
- extern VALUE RBS_Types_Function_Param;
66
67
  extern VALUE RBS_Types_Function;
67
- extern VALUE RBS_Types_UntypedFunction;
68
+ extern VALUE RBS_Types_Function_Param;
68
69
  extern VALUE RBS_Types_Interface;
69
70
  extern VALUE RBS_Types_Intersection;
70
71
  extern VALUE RBS_Types_Literal;
@@ -73,6 +74,7 @@ extern VALUE RBS_Types_Proc;
73
74
  extern VALUE RBS_Types_Record;
74
75
  extern VALUE RBS_Types_Tuple;
75
76
  extern VALUE RBS_Types_Union;
77
+ extern VALUE RBS_Types_UntypedFunction;
76
78
  extern VALUE RBS_Types_Variable;
77
79
 
78
80
  void rbs__init_constants();