rbs 3.6.1 → 3.9.5
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.
- checksums.yaml +4 -4
- data/.github/workflows/comments.yml +2 -2
- data/.github/workflows/dependabot.yml +1 -1
- data/.github/workflows/ruby.yml +34 -10
- data/.github/workflows/windows.yml +20 -3
- data/.gitignore +1 -0
- data/.rubocop.yml +26 -1
- data/CHANGELOG.md +241 -0
- data/Rakefile +54 -4
- data/config.yml +317 -0
- data/core/array.rbs +1756 -1591
- data/core/basic_object.rbs +38 -35
- data/core/comparable.rbs +1 -1
- data/core/complex.rbs +166 -94
- data/core/data.rbs +2 -2
- data/core/dir.rbs +2 -18
- data/core/encoding.rbs +12 -32
- data/core/enumerable.rbs +270 -266
- data/core/enumerator.rbs +14 -4
- data/core/env.rbs +1 -1
- data/core/errno.rbs +33 -16
- data/core/errors.rbs +6 -2
- data/core/exception.rbs +342 -167
- data/core/fiber.rbs +3 -2
- data/core/file.rbs +26 -75
- data/core/float.rbs +125 -72
- data/core/gc.rbs +158 -42
- data/core/hash.rbs +122 -143
- data/core/integer.rbs +79 -50
- data/core/io/buffer.rbs +49 -43
- data/core/io.rbs +108 -151
- data/core/kernel.rbs +341 -209
- data/core/match_data.rbs +76 -2
- data/core/math.rbs +0 -36
- data/core/method.rbs +2 -2
- data/core/module.rbs +32 -27
- data/core/nil_class.rbs +2 -2
- data/core/numeric.rbs +101 -104
- data/core/object.rbs +1 -5
- data/core/object_space/weak_key_map.rbs +3 -4
- data/core/object_space.rbs +3 -3
- data/core/proc.rbs +82 -14
- data/core/process.rbs +110 -58
- data/core/ractor.rbs +57 -4
- data/core/range.rbs +114 -87
- data/core/rational.rbs +0 -2
- data/core/rbs/unnamed/argf.rbs +237 -36
- data/core/rbs/unnamed/env_class.rbs +35 -53
- data/core/rbs/unnamed/random.rbs +1 -2
- data/core/regexp.rbs +10 -56
- data/core/ruby_vm.rbs +88 -9
- data/core/rubygems/config_file.rbs +3 -0
- data/core/rubygems/errors.rbs +3 -6
- data/core/rubygems/platform.rbs +0 -9
- data/core/rubygems/rubygems.rbs +3 -6
- data/core/rubygems/version.rbs +8 -8
- data/core/set.rbs +4 -16
- data/core/string.rbs +271 -264
- data/core/struct.rbs +6 -18
- data/core/symbol.rbs +14 -21
- data/core/thread.rbs +32 -35
- data/core/time.rbs +131 -50
- data/core/trace_point.rbs +124 -113
- data/core/true_class.rbs +0 -1
- data/core/unbound_method.rbs +1 -1
- data/core/warning.rbs +9 -2
- data/docs/architecture.md +1 -1
- data/docs/syntax.md +17 -10
- data/ext/rbs_extension/extconf.rb +11 -0
- data/ext/rbs_extension/location.c +61 -29
- data/ext/rbs_extension/location.h +4 -3
- data/ext/rbs_extension/main.c +23 -1
- data/ext/rbs_extension/parser.c +506 -517
- data/ext/rbs_extension/parserstate.c +109 -30
- data/ext/rbs_extension/parserstate.h +6 -4
- data/ext/rbs_extension/rbs_extension.h +1 -10
- data/{ext/rbs_extension → include/rbs}/constants.h +21 -19
- data/include/rbs/ruby_objs.h +72 -0
- data/include/rbs/util/rbs_constant_pool.h +219 -0
- data/include/rbs.h +7 -0
- data/lib/rbs/annotate/annotations.rb +3 -3
- data/lib/rbs/annotate/rdoc_source.rb +2 -2
- data/lib/rbs/ast/declarations.rb +9 -4
- data/lib/rbs/ast/directives.rb +10 -0
- data/lib/rbs/ast/members.rb +2 -0
- data/lib/rbs/ast/type_param.rb +2 -12
- data/lib/rbs/cli/diff.rb +3 -3
- data/lib/rbs/cli/validate.rb +2 -1
- data/lib/rbs/cli.rb +16 -16
- data/lib/rbs/collection/config/lockfile_generator.rb +58 -8
- data/lib/rbs/collection/config.rb +5 -3
- data/lib/rbs/collection/sources/rubygems.rb +1 -1
- data/lib/rbs/collection.rb +1 -0
- data/lib/rbs/definition.rb +51 -34
- data/lib/rbs/definition_builder/ancestor_builder.rb +5 -3
- data/lib/rbs/definition_builder.rb +83 -24
- data/lib/rbs/environment.rb +33 -18
- data/lib/rbs/environment_loader.rb +6 -1
- data/lib/rbs/errors.rb +24 -0
- data/lib/rbs/locator.rb +2 -0
- data/lib/rbs/method_type.rb +2 -0
- data/lib/rbs/namespace.rb +1 -0
- data/lib/rbs/parser_aux.rb +40 -3
- data/lib/rbs/prototype/rb.rb +20 -12
- data/lib/rbs/prototype/rbi.rb +11 -6
- data/lib/rbs/prototype/runtime/value_object_generator.rb +7 -5
- data/lib/rbs/prototype/runtime.rb +7 -5
- data/lib/rbs/subtractor.rb +3 -3
- data/lib/rbs/test/hook.rb +47 -42
- data/lib/rbs/test/type_check.rb +7 -5
- data/lib/rbs/type_name.rb +14 -9
- data/lib/rbs/types.rb +63 -14
- data/lib/rbs/unit_test/spy.rb +4 -2
- data/lib/rbs/unit_test/type_assertions.rb +19 -13
- data/lib/rbs/unit_test/with_aliases.rb +3 -1
- data/lib/rbs/validator.rb +7 -1
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs/writer.rb +10 -5
- data/lib/rbs.rb +1 -0
- data/lib/rdoc_plugin/parser.rb +2 -2
- data/rbs.gemspec +6 -2
- data/sig/ancestor_graph.rbs +5 -5
- data/sig/annotate/rdoc_source.rbs +2 -0
- data/sig/cli.rbs +2 -0
- data/sig/collection/config/lockfile_generator.rbs +9 -1
- data/sig/declarations.rbs +10 -3
- data/sig/definition.rbs +80 -12
- data/sig/definition_builder.rbs +18 -4
- data/sig/directives.rbs +17 -1
- data/sig/environment.rbs +3 -1
- data/sig/errors.rbs +19 -0
- data/sig/namespace.rbs +2 -3
- data/sig/parser.rbs +5 -1
- data/sig/prototype/rb.rbs +1 -1
- data/sig/resolver/constant_resolver.rbs +2 -2
- data/sig/resolver/context.rbs +1 -1
- data/sig/subtractor.rbs +1 -1
- data/sig/test/type_check.rbs +2 -2
- data/sig/type_alias_dependency.rbs +2 -2
- data/sig/type_alias_regularity.rbs +6 -6
- data/sig/type_param.rbs +4 -4
- data/sig/typename.rbs +8 -5
- data/sig/types.rbs +1 -1
- data/sig/unit_test/spy.rbs +2 -0
- data/sig/unit_test/type_assertions.rbs +2 -0
- data/sig/use_map.rbs +1 -1
- data/sig/validator.rbs +6 -2
- data/sig/vendorer.rbs +1 -1
- data/sig/writer.rbs +1 -1
- data/{ext/rbs_extension → src}/constants.c +35 -36
- data/src/ruby_objs.c +799 -0
- data/src/util/rbs_constant_pool.c +342 -0
- data/stdlib/base64/0/base64.rbs +0 -9
- data/stdlib/benchmark/0/benchmark.rbs +11 -2
- data/stdlib/bigdecimal/0/big_decimal.rbs +26 -182
- data/stdlib/cgi/0/core.rbs +60 -3
- data/stdlib/cgi/0/manifest.yaml +1 -0
- data/stdlib/coverage/0/coverage.rbs +0 -3
- data/stdlib/csv/0/csv.rbs +18 -58
- data/stdlib/csv/0/manifest.yaml +1 -0
- data/stdlib/date/0/date.rbs +27 -42
- data/stdlib/did_you_mean/0/did_you_mean.rbs +1 -6
- data/stdlib/digest/0/digest.rbs +25 -2
- data/stdlib/erb/0/erb.rbs +0 -1
- data/stdlib/etc/0/etc.rbs +51 -34
- data/stdlib/fileutils/0/fileutils.rbs +3 -44
- data/stdlib/io-console/0/io-console.rbs +69 -15
- data/stdlib/ipaddr/0/ipaddr.rbs +16 -4
- data/stdlib/json/0/json.rbs +107 -120
- data/stdlib/logger/0/log_device.rbs +1 -1
- data/stdlib/logger/0/logger.rbs +3 -18
- data/stdlib/minitest/0/kernel.rbs +2 -2
- data/stdlib/minitest/0/minitest/abstract_reporter.rbs +4 -1
- data/stdlib/minitest/0/minitest/assertion.rbs +1 -0
- data/stdlib/minitest/0/minitest/assertions.rbs +58 -13
- data/stdlib/minitest/0/minitest/backtrace_filter.rbs +7 -0
- data/stdlib/minitest/0/minitest/bench_spec.rbs +8 -8
- data/stdlib/minitest/0/minitest/benchmark.rbs +17 -16
- data/stdlib/minitest/0/minitest/compress.rbs +13 -0
- data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
- data/stdlib/minitest/0/minitest/mock.rbs +9 -5
- data/stdlib/minitest/0/minitest/parallel/executor.rbs +4 -0
- data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +0 -1
- data/stdlib/minitest/0/minitest/pride_io.rbs +8 -0
- data/stdlib/minitest/0/minitest/pride_lol.rbs +2 -0
- data/stdlib/minitest/0/minitest/progress_reporter.rbs +1 -1
- data/stdlib/minitest/0/minitest/reportable.rbs +2 -0
- data/stdlib/minitest/0/minitest/runnable.rbs +33 -1
- data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +1 -1
- data/stdlib/minitest/0/minitest/spec/dsl.rbs +10 -6
- data/stdlib/minitest/0/minitest/spec.rbs +1 -1
- data/stdlib/minitest/0/minitest/statistics_reporter.rbs +5 -0
- data/stdlib/minitest/0/minitest/summary_reporter.rbs +0 -7
- data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +1 -1
- data/stdlib/minitest/0/minitest/test.rbs +7 -14
- data/stdlib/minitest/0/minitest/unexpected_error.rbs +2 -0
- data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
- data/stdlib/minitest/0/minitest/unit.rbs +1 -2
- data/stdlib/minitest/0/minitest.rbs +41 -892
- data/stdlib/monitor/0/monitor.rbs +13 -4
- data/stdlib/net-http/0/net-http.rbs +42 -109
- data/stdlib/nkf/0/nkf.rbs +30 -0
- data/stdlib/objspace/0/objspace.rbs +1 -2
- data/stdlib/observable/0/observable.rbs +1 -1
- data/stdlib/open-uri/0/manifest.yaml +1 -0
- data/stdlib/open-uri/0/open-uri.rbs +52 -0
- data/stdlib/open3/0/open3.rbs +0 -8
- data/stdlib/openssl/0/manifest.yaml +1 -0
- data/stdlib/openssl/0/openssl.rbs +235 -143
- data/stdlib/optparse/0/optparse.rbs +58 -18
- data/stdlib/pathname/0/pathname.rbs +2 -8
- data/stdlib/pp/0/pp.rbs +3 -1
- data/stdlib/prettyprint/0/prettyprint.rbs +0 -4
- data/stdlib/pstore/0/pstore.rbs +0 -6
- data/stdlib/psych/0/core_ext.rbs +12 -0
- data/stdlib/psych/0/psych.rbs +15 -4
- data/stdlib/pty/0/pty.rbs +46 -4
- data/stdlib/rdoc/0/code_object.rbs +0 -4
- data/stdlib/rdoc/0/markup.rbs +10 -12
- data/stdlib/rdoc/0/rdoc.rbs +13 -8
- data/stdlib/resolv/0/resolv.rbs +21 -12
- data/stdlib/ripper/0/ripper.rbs +0 -2
- data/stdlib/securerandom/0/securerandom.rbs +7 -2
- data/stdlib/shellwords/0/shellwords.rbs +11 -12
- data/stdlib/singleton/0/singleton.rbs +0 -1
- data/stdlib/socket/0/addrinfo.rbs +1 -2
- data/stdlib/socket/0/basic_socket.rbs +0 -5
- data/stdlib/socket/0/socket.rbs +32 -27
- data/stdlib/socket/0/tcp_server.rbs +0 -3
- data/stdlib/socket/0/tcp_socket.rbs +36 -3
- data/stdlib/socket/0/udp_socket.rbs +0 -1
- data/stdlib/socket/0/unix_server.rbs +0 -3
- data/stdlib/socket/0/unix_socket.rbs +4 -2
- data/{core/string_io.rbs → stdlib/stringio/0/stringio.rbs} +1 -1
- data/stdlib/strscan/0/string_scanner.rbs +1265 -422
- data/stdlib/tempfile/0/tempfile.rbs +135 -28
- data/stdlib/time/0/time.rbs +48 -35
- data/stdlib/timeout/0/timeout.rbs +11 -8
- data/stdlib/tmpdir/0/tmpdir.rbs +10 -3
- data/stdlib/tsort/0/tsort.rbs +0 -4
- data/stdlib/uri/0/common.rbs +28 -30
- data/stdlib/uri/0/ftp.rbs +1 -1
- data/stdlib/uri/0/generic.rbs +22 -18
- data/stdlib/uri/0/http.rbs +2 -2
- data/stdlib/uri/0/rfc2396_parser.rbs +3 -0
- data/stdlib/zlib/0/buf_error.rbs +1 -70
- data/stdlib/zlib/0/data_error.rbs +1 -70
- data/stdlib/zlib/0/deflate.rbs +8 -72
- data/stdlib/zlib/0/error.rbs +1 -70
- data/stdlib/zlib/0/gzip_file/crc_error.rbs +2 -105
- data/stdlib/zlib/0/gzip_file/error.rbs +2 -105
- data/stdlib/zlib/0/gzip_file/length_error.rbs +2 -105
- data/stdlib/zlib/0/gzip_file/no_footer.rbs +2 -105
- data/stdlib/zlib/0/gzip_file.rbs +1 -71
- data/stdlib/zlib/0/gzip_reader.rbs +3 -74
- data/stdlib/zlib/0/gzip_writer.rbs +1 -70
- data/stdlib/zlib/0/inflate.rbs +4 -71
- data/stdlib/zlib/0/mem_error.rbs +1 -70
- data/stdlib/zlib/0/need_dict.rbs +1 -70
- data/stdlib/zlib/0/stream_end.rbs +1 -70
- data/stdlib/zlib/0/stream_error.rbs +1 -70
- data/stdlib/zlib/0/version_error.rbs +1 -70
- data/stdlib/zlib/0/zlib.rbs +0 -2
- data/stdlib/zlib/0/zstream.rbs +4 -72
- metadata +17 -13
- data/ext/rbs_extension/ruby_objs.c +0 -602
- data/ext/rbs_extension/ruby_objs.h +0 -51
- data/stdlib/minitest/0/manifest.yaml +0 -2
@@ -36,9 +36,12 @@ void rbs_loc_alloc_children(rbs_loc *loc, unsigned short cap) {
|
|
36
36
|
size_t s = RBS_LOC_CHILDREN_SIZE(cap);
|
37
37
|
loc->children = malloc(s);
|
38
38
|
|
39
|
-
loc->children
|
40
|
-
|
41
|
-
|
39
|
+
*loc->children = (rbs_loc_children) {
|
40
|
+
.len = 0,
|
41
|
+
.required_p = 0,
|
42
|
+
.cap = cap,
|
43
|
+
.entries = {{ 0 }},
|
44
|
+
};
|
42
45
|
}
|
43
46
|
|
44
47
|
static void check_children_cap(rbs_loc *loc) {
|
@@ -53,28 +56,29 @@ static void check_children_cap(rbs_loc *loc) {
|
|
53
56
|
}
|
54
57
|
}
|
55
58
|
|
56
|
-
void rbs_loc_add_required_child(rbs_loc *loc,
|
57
|
-
|
58
|
-
|
59
|
-
unsigned short i = loc->children->len++;
|
60
|
-
loc->children->entries[i].name = name;
|
61
|
-
loc->children->entries[i].rg = rbs_new_loc_range(r);
|
59
|
+
void rbs_loc_add_required_child(rbs_loc *loc, rbs_constant_id_t name, range r) {
|
60
|
+
rbs_loc_add_optional_child(loc, name, r);
|
62
61
|
|
63
|
-
loc->children->
|
62
|
+
unsigned short last_index = loc->children->len - 1;
|
63
|
+
loc->children->required_p |= 1 << last_index;
|
64
64
|
}
|
65
65
|
|
66
|
-
void rbs_loc_add_optional_child(rbs_loc *loc,
|
66
|
+
void rbs_loc_add_optional_child(rbs_loc *loc, rbs_constant_id_t name, range r) {
|
67
67
|
check_children_cap(loc);
|
68
68
|
|
69
69
|
unsigned short i = loc->children->len++;
|
70
|
-
loc->children->entries[i]
|
71
|
-
|
70
|
+
loc->children->entries[i] = (rbs_loc_entry) {
|
71
|
+
.name = name,
|
72
|
+
.rg = rbs_new_loc_range(r),
|
73
|
+
};
|
72
74
|
}
|
73
75
|
|
74
76
|
void rbs_loc_init(rbs_loc *loc, VALUE buffer, rbs_loc_range rg) {
|
75
|
-
loc
|
76
|
-
|
77
|
-
|
77
|
+
*loc = (rbs_loc) {
|
78
|
+
.buffer = buffer,
|
79
|
+
.rg = rg,
|
80
|
+
.children = NULL,
|
81
|
+
};
|
78
82
|
}
|
79
83
|
|
80
84
|
void rbs_loc_free(rbs_loc *loc) {
|
@@ -122,9 +126,11 @@ static VALUE location_initialize(VALUE self, VALUE buffer, VALUE start_pos, VALU
|
|
122
126
|
int start = FIX2INT(start_pos);
|
123
127
|
int end = FIX2INT(end_pos);
|
124
128
|
|
125
|
-
loc
|
126
|
-
|
127
|
-
|
129
|
+
*loc = (rbs_loc) {
|
130
|
+
.buffer = buffer,
|
131
|
+
.rg = (rbs_loc_range) { start, end },
|
132
|
+
.children = NULL,
|
133
|
+
};
|
128
134
|
|
129
135
|
return Qnil;
|
130
136
|
}
|
@@ -133,8 +139,12 @@ static VALUE location_initialize_copy(VALUE self, VALUE other) {
|
|
133
139
|
rbs_loc *self_loc = rbs_check_location(self);
|
134
140
|
rbs_loc *other_loc = rbs_check_location(other);
|
135
141
|
|
136
|
-
self_loc
|
137
|
-
|
142
|
+
*self_loc = (rbs_loc) {
|
143
|
+
.buffer = other_loc->buffer,
|
144
|
+
.rg = other_loc->rg,
|
145
|
+
.children = NULL,
|
146
|
+
};
|
147
|
+
|
138
148
|
if (other_loc->children != NULL) {
|
139
149
|
rbs_loc_alloc_children(self_loc, other_loc->children->cap);
|
140
150
|
memcpy(self_loc->children, other_loc->children, RBS_LOC_CHILDREN_SIZE(other_loc->children->cap));
|
@@ -158,6 +168,15 @@ static VALUE location_end_pos(VALUE self) {
|
|
158
168
|
return INT2FIX(loc->rg.end);
|
159
169
|
}
|
160
170
|
|
171
|
+
static rbs_constant_id_t rbs_constant_pool_insert_ruby_symbol(VALUE symbol) {
|
172
|
+
VALUE name = rb_sym2str(symbol);
|
173
|
+
|
174
|
+
// Constants inserted here will never be freed, but that's acceptable because:
|
175
|
+
// 1. Most symbols passed into here will be the ones already inserted into the constant pool by `parser.c`.
|
176
|
+
// 2. Methods like `add_required_child` and `add_optional_child` will usually only get called with a few different symbols.
|
177
|
+
return rbs_constant_pool_insert_constant(RBS_GLOBAL_CONSTANT_POOL, (const uint8_t *) RSTRING_PTR(name), RSTRING_LEN(name));
|
178
|
+
}
|
179
|
+
|
161
180
|
static VALUE location_add_required_child(VALUE self, VALUE name, VALUE start, VALUE end) {
|
162
181
|
rbs_loc *loc = rbs_check_location(self);
|
163
182
|
|
@@ -165,7 +184,7 @@ static VALUE location_add_required_child(VALUE self, VALUE name, VALUE start, VA
|
|
165
184
|
rg.start = rbs_loc_position(FIX2INT(start));
|
166
185
|
rg.end = rbs_loc_position(FIX2INT(end));
|
167
186
|
|
168
|
-
rbs_loc_add_required_child(loc,
|
187
|
+
rbs_loc_add_required_child(loc, rbs_constant_pool_insert_ruby_symbol(name), rg);
|
169
188
|
|
170
189
|
return Qnil;
|
171
190
|
}
|
@@ -177,7 +196,7 @@ static VALUE location_add_optional_child(VALUE self, VALUE name, VALUE start, VA
|
|
177
196
|
rg.start = rbs_loc_position(FIX2INT(start));
|
178
197
|
rg.end = rbs_loc_position(FIX2INT(end));
|
179
198
|
|
180
|
-
rbs_loc_add_optional_child(loc,
|
199
|
+
rbs_loc_add_optional_child(loc, rbs_constant_pool_insert_ruby_symbol(name), rg);
|
181
200
|
|
182
201
|
return Qnil;
|
183
202
|
}
|
@@ -185,7 +204,7 @@ static VALUE location_add_optional_child(VALUE self, VALUE name, VALUE start, VA
|
|
185
204
|
static VALUE location_add_optional_no_child(VALUE self, VALUE name) {
|
186
205
|
rbs_loc *loc = rbs_check_location(self);
|
187
206
|
|
188
|
-
rbs_loc_add_optional_child(loc,
|
207
|
+
rbs_loc_add_optional_child(loc, rbs_constant_pool_insert_ruby_symbol(name), NULL_RANGE);
|
189
208
|
|
190
209
|
return Qnil;
|
191
210
|
}
|
@@ -208,12 +227,18 @@ static VALUE rbs_new_location_from_loc_range(VALUE buffer, rbs_loc_range rg) {
|
|
208
227
|
return obj;
|
209
228
|
}
|
210
229
|
|
230
|
+
static rbs_constant_id_t rbs_constant_pool_find_ruby_symbol(VALUE symbol) {
|
231
|
+
VALUE name = rb_sym2str(symbol);
|
232
|
+
|
233
|
+
return rbs_constant_pool_find(RBS_GLOBAL_CONSTANT_POOL, (const uint8_t *) RSTRING_PTR(name), RSTRING_LEN(name));
|
234
|
+
}
|
235
|
+
|
211
236
|
static VALUE location_aref(VALUE self, VALUE name) {
|
212
237
|
rbs_loc *loc = rbs_check_location(self);
|
213
238
|
|
214
|
-
|
239
|
+
rbs_constant_id_t id = rbs_constant_pool_find_ruby_symbol(name);
|
215
240
|
|
216
|
-
if (loc->children != NULL) {
|
241
|
+
if (loc->children != NULL && id != RBS_CONSTANT_ID_UNSET) {
|
217
242
|
for (unsigned short i = 0; i < loc->children->len; i++) {
|
218
243
|
if (loc->children->entries[i].name == id) {
|
219
244
|
rbs_loc_range result = loc->children->entries[i].rg;
|
@@ -231,6 +256,10 @@ static VALUE location_aref(VALUE self, VALUE name) {
|
|
231
256
|
rb_raise(rb_eRuntimeError, "Unknown child name given: %s", RSTRING_PTR(string));
|
232
257
|
}
|
233
258
|
|
259
|
+
static VALUE rbs_constant_to_ruby_symbol(rbs_constant_t *constant) {
|
260
|
+
return ID2SYM(rb_intern2((const char *) constant->start, constant->length));
|
261
|
+
}
|
262
|
+
|
234
263
|
static VALUE location_optional_keys(VALUE self) {
|
235
264
|
VALUE keys = rb_ary_new();
|
236
265
|
|
@@ -242,8 +271,9 @@ static VALUE location_optional_keys(VALUE self) {
|
|
242
271
|
|
243
272
|
for (unsigned short i = 0; i < children->len; i++) {
|
244
273
|
if (RBS_LOC_OPTIONAL_P(loc, i)) {
|
245
|
-
|
246
|
-
|
274
|
+
rbs_constant_t *key_id = rbs_constant_pool_id_to_constant(RBS_GLOBAL_CONSTANT_POOL, children->entries[i].name);
|
275
|
+
VALUE key_sym = rbs_constant_to_ruby_symbol(key_id);
|
276
|
+
rb_ary_push(keys, key_sym);
|
247
277
|
}
|
248
278
|
}
|
249
279
|
|
@@ -261,7 +291,9 @@ static VALUE location_required_keys(VALUE self) {
|
|
261
291
|
|
262
292
|
for (unsigned short i = 0; i < children->len; i++) {
|
263
293
|
if (RBS_LOC_REQUIRED_P(loc, i)) {
|
264
|
-
|
294
|
+
rbs_constant_t *key_id = rbs_constant_pool_id_to_constant(RBS_GLOBAL_CONSTANT_POOL, children->entries[i].name);
|
295
|
+
VALUE key_sym = rbs_constant_to_ruby_symbol(key_id);
|
296
|
+
rb_ary_push(keys, key_sym);
|
265
297
|
}
|
266
298
|
}
|
267
299
|
|
@@ -3,6 +3,7 @@
|
|
3
3
|
|
4
4
|
#include "ruby.h"
|
5
5
|
#include "lexer.h"
|
6
|
+
#include "rbs/util/rbs_constant_pool.h"
|
6
7
|
|
7
8
|
/**
|
8
9
|
* RBS::Location class
|
@@ -15,7 +16,7 @@ typedef struct {
|
|
15
16
|
} rbs_loc_range;
|
16
17
|
|
17
18
|
typedef struct {
|
18
|
-
|
19
|
+
rbs_constant_id_t name;
|
19
20
|
rbs_loc_range rg;
|
20
21
|
} rbs_loc_entry;
|
21
22
|
|
@@ -58,14 +59,14 @@ void rbs_loc_alloc_children(rbs_loc *loc, unsigned short cap);
|
|
58
59
|
*
|
59
60
|
* Allocate memory for children with rbs_loc_alloc_children before calling this function.
|
60
61
|
* */
|
61
|
-
void rbs_loc_add_required_child(rbs_loc *loc,
|
62
|
+
void rbs_loc_add_required_child(rbs_loc *loc, rbs_constant_id_t name, range r);
|
62
63
|
|
63
64
|
/**
|
64
65
|
* Add an optional child range with given name.
|
65
66
|
*
|
66
67
|
* Allocate memory for children with rbs_loc_alloc_children before calling this function.
|
67
68
|
* */
|
68
|
-
void rbs_loc_add_optional_child(rbs_loc *loc,
|
69
|
+
void rbs_loc_add_optional_child(rbs_loc *loc, rbs_constant_id_t name, range r);
|
69
70
|
|
70
71
|
/**
|
71
72
|
* Returns RBS::Location object with start/end positions.
|
data/ext/rbs_extension/main.c
CHANGED
@@ -1,12 +1,34 @@
|
|
1
1
|
#include "rbs_extension.h"
|
2
|
+
#include "rbs/util/rbs_constant_pool.h"
|
3
|
+
|
4
|
+
#include "ruby/vm.h"
|
5
|
+
|
6
|
+
static
|
7
|
+
void Deinit_rbs_extension(ruby_vm_t *_) {
|
8
|
+
rbs_constant_pool_free(RBS_GLOBAL_CONSTANT_POOL);
|
9
|
+
}
|
2
10
|
|
3
11
|
void
|
4
12
|
Init_rbs_extension(void)
|
5
13
|
{
|
6
14
|
#ifdef HAVE_RB_EXT_RACTOR_SAFE
|
7
15
|
rb_ext_ractor_safe(true);
|
8
|
-
#endif
|
16
|
+
#endif
|
9
17
|
rbs__init_constants();
|
10
18
|
rbs__init_location();
|
11
19
|
rbs__init_parser();
|
20
|
+
|
21
|
+
/* Calculated based on the number of unique strings used with the `INTERN` macro in `parser.c`.
|
22
|
+
*
|
23
|
+
* ```bash
|
24
|
+
* grep -o 'INTERN("\([^"]*\)")' ext/rbs_extension/parser.c \
|
25
|
+
* | sed 's/INTERN("\(.*\)")/\1/' \
|
26
|
+
* | sort -u \
|
27
|
+
* | wc -l
|
28
|
+
* ```
|
29
|
+
*/
|
30
|
+
const size_t num_uniquely_interned_strings = 26;
|
31
|
+
rbs_constant_pool_init(RBS_GLOBAL_CONSTANT_POOL, num_uniquely_interned_strings);
|
32
|
+
|
33
|
+
ruby_vm_at_exit(Deinit_rbs_extension);
|
12
34
|
}
|