rbs 3.7.0.dev.1 → 3.7.0

Sign up to get free protection for your applications and to get access to all the features.
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 +53 -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();