rbs 4.0.0.dev.4 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +14 -14
  3. data/.github/workflows/bundle-update.yml +60 -0
  4. data/.github/workflows/c-check.yml +18 -11
  5. data/.github/workflows/comments.yml +5 -3
  6. data/.github/workflows/dependabot.yml +2 -2
  7. data/.github/workflows/ruby.yml +27 -34
  8. data/.github/workflows/rust.yml +95 -0
  9. data/.github/workflows/typecheck.yml +2 -2
  10. data/.github/workflows/windows.yml +2 -2
  11. data/.rubocop.yml +1 -1
  12. data/CHANGELOG.md +323 -0
  13. data/README.md +1 -1
  14. data/Rakefile +43 -33
  15. data/Steepfile +1 -0
  16. data/config.yml +426 -24
  17. data/core/array.rbs +307 -227
  18. data/core/basic_object.rbs +9 -8
  19. data/core/binding.rbs +0 -2
  20. data/core/builtin.rbs +2 -2
  21. data/core/class.rbs +6 -5
  22. data/core/comparable.rbs +55 -34
  23. data/core/complex.rbs +104 -78
  24. data/core/dir.rbs +61 -49
  25. data/core/encoding.rbs +12 -15
  26. data/core/enumerable.rbs +179 -87
  27. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  28. data/core/enumerator.rbs +65 -2
  29. data/core/errno.rbs +11 -2
  30. data/core/errors.rbs +58 -29
  31. data/core/exception.rbs +13 -13
  32. data/core/fiber.rbs +74 -54
  33. data/core/file.rbs +280 -177
  34. data/core/file_test.rbs +3 -3
  35. data/core/float.rbs +257 -92
  36. data/core/gc.rbs +425 -281
  37. data/core/hash.rbs +1045 -739
  38. data/core/integer.rbs +135 -137
  39. data/core/io/buffer.rbs +53 -42
  40. data/core/io/wait.rbs +13 -35
  41. data/core/io.rbs +192 -144
  42. data/core/kernel.rbs +216 -155
  43. data/core/marshal.rbs +4 -4
  44. data/core/match_data.rbs +15 -13
  45. data/core/math.rbs +107 -66
  46. data/core/method.rbs +69 -33
  47. data/core/module.rbs +244 -106
  48. data/core/nil_class.rbs +7 -6
  49. data/core/numeric.rbs +74 -63
  50. data/core/object.rbs +9 -11
  51. data/core/object_space.rbs +30 -23
  52. data/core/pathname.rbs +1322 -0
  53. data/core/proc.rbs +95 -58
  54. data/core/process.rbs +222 -202
  55. data/core/ractor.rbs +371 -515
  56. data/core/random.rbs +21 -3
  57. data/core/range.rbs +159 -57
  58. data/core/rational.rbs +60 -89
  59. data/core/rbs/unnamed/argf.rbs +60 -53
  60. data/core/rbs/unnamed/env_class.rbs +19 -14
  61. data/core/rbs/unnamed/main_class.rbs +123 -0
  62. data/core/rbs/unnamed/random.rbs +11 -118
  63. data/core/regexp.rbs +258 -214
  64. data/core/ruby.rbs +53 -0
  65. data/core/ruby_vm.rbs +38 -34
  66. data/core/rubygems/config_file.rbs +5 -5
  67. data/core/rubygems/errors.rbs +4 -71
  68. data/core/rubygems/requirement.rbs +5 -5
  69. data/core/rubygems/rubygems.rbs +16 -82
  70. data/core/rubygems/version.rbs +2 -3
  71. data/core/set.rbs +490 -360
  72. data/core/signal.rbs +26 -16
  73. data/core/string.rbs +3234 -1285
  74. data/core/struct.rbs +27 -26
  75. data/core/symbol.rbs +41 -34
  76. data/core/thread.rbs +135 -67
  77. data/core/time.rbs +81 -50
  78. data/core/trace_point.rbs +41 -35
  79. data/core/true_class.rbs +2 -2
  80. data/core/unbound_method.rbs +24 -16
  81. data/core/warning.rbs +7 -7
  82. data/docs/aliases.md +79 -0
  83. data/docs/collection.md +3 -3
  84. data/docs/config.md +171 -0
  85. data/docs/encoding.md +56 -0
  86. data/docs/gem.md +0 -1
  87. data/docs/inline.md +576 -0
  88. data/docs/sigs.md +3 -3
  89. data/docs/syntax.md +46 -16
  90. data/docs/type_fingerprint.md +21 -0
  91. data/exe/rbs +1 -1
  92. data/ext/rbs_extension/ast_translation.c +544 -116
  93. data/ext/rbs_extension/ast_translation.h +3 -0
  94. data/ext/rbs_extension/class_constants.c +16 -2
  95. data/ext/rbs_extension/class_constants.h +8 -0
  96. data/ext/rbs_extension/extconf.rb +5 -1
  97. data/ext/rbs_extension/legacy_location.c +33 -56
  98. data/ext/rbs_extension/legacy_location.h +37 -0
  99. data/ext/rbs_extension/main.c +44 -35
  100. data/include/rbs/ast.h +448 -173
  101. data/include/rbs/defines.h +27 -0
  102. data/include/rbs/lexer.h +30 -11
  103. data/include/rbs/location.h +25 -44
  104. data/include/rbs/parser.h +6 -6
  105. data/include/rbs/string.h +0 -2
  106. data/include/rbs/util/rbs_allocator.h +34 -13
  107. data/include/rbs/util/rbs_assert.h +12 -1
  108. data/include/rbs/util/rbs_constant_pool.h +0 -3
  109. data/include/rbs/util/rbs_encoding.h +2 -0
  110. data/include/rbs/util/rbs_unescape.h +2 -1
  111. data/include/rbs.h +8 -0
  112. data/lib/rbs/ast/annotation.rb +1 -1
  113. data/lib/rbs/ast/comment.rb +1 -1
  114. data/lib/rbs/ast/declarations.rb +10 -10
  115. data/lib/rbs/ast/members.rb +14 -14
  116. data/lib/rbs/ast/ruby/annotations.rb +293 -3
  117. data/lib/rbs/ast/ruby/comment_block.rb +24 -0
  118. data/lib/rbs/ast/ruby/declarations.rb +198 -3
  119. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +4 -0
  120. data/lib/rbs/ast/ruby/members.rb +532 -22
  121. data/lib/rbs/ast/type_param.rb +24 -4
  122. data/lib/rbs/buffer.rb +20 -15
  123. data/lib/rbs/cli/diff.rb +16 -15
  124. data/lib/rbs/cli/validate.rb +38 -106
  125. data/lib/rbs/cli.rb +52 -19
  126. data/lib/rbs/collection/config/lockfile_generator.rb +14 -2
  127. data/lib/rbs/collection/sources/git.rb +1 -0
  128. data/lib/rbs/definition.rb +1 -1
  129. data/lib/rbs/definition_builder/ancestor_builder.rb +62 -9
  130. data/lib/rbs/definition_builder/method_builder.rb +20 -0
  131. data/lib/rbs/definition_builder.rb +147 -25
  132. data/lib/rbs/diff.rb +7 -1
  133. data/lib/rbs/environment.rb +227 -74
  134. data/lib/rbs/environment_loader.rb +0 -6
  135. data/lib/rbs/errors.rb +27 -18
  136. data/lib/rbs/inline_parser.rb +342 -6
  137. data/lib/rbs/location_aux.rb +1 -1
  138. data/lib/rbs/locator.rb +5 -1
  139. data/lib/rbs/method_type.rb +5 -3
  140. data/lib/rbs/parser_aux.rb +20 -7
  141. data/lib/rbs/prototype/helpers.rb +57 -0
  142. data/lib/rbs/prototype/rb.rb +3 -28
  143. data/lib/rbs/prototype/rbi.rb +3 -20
  144. data/lib/rbs/prototype/runtime.rb +8 -0
  145. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  146. data/lib/rbs/resolver/type_name_resolver.rb +116 -38
  147. data/lib/rbs/subtractor.rb +3 -1
  148. data/lib/rbs/test/type_check.rb +19 -2
  149. data/lib/rbs/type_name.rb +1 -1
  150. data/lib/rbs/types.rb +88 -78
  151. data/lib/rbs/unit_test/type_assertions.rb +35 -8
  152. data/lib/rbs/validator.rb +2 -2
  153. data/lib/rbs/version.rb +1 -1
  154. data/lib/rbs.rb +1 -2
  155. data/lib/rdoc/discover.rb +1 -1
  156. data/lib/rdoc_plugin/parser.rb +1 -1
  157. data/rbs.gemspec +4 -3
  158. data/rust/.gitignore +1 -0
  159. data/rust/Cargo.lock +378 -0
  160. data/rust/Cargo.toml +7 -0
  161. data/rust/ruby-rbs/Cargo.toml +22 -0
  162. data/rust/ruby-rbs/build.rs +764 -0
  163. data/rust/ruby-rbs/examples/locations.rs +60 -0
  164. data/rust/ruby-rbs/src/lib.rs +1 -0
  165. data/rust/ruby-rbs/src/node/mod.rs +742 -0
  166. data/rust/ruby-rbs/tests/sanity.rs +47 -0
  167. data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
  168. data/rust/ruby-rbs-sys/Cargo.toml +23 -0
  169. data/rust/ruby-rbs-sys/build.rs +204 -0
  170. data/rust/ruby-rbs-sys/src/lib.rs +50 -0
  171. data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
  172. data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
  173. data/rust/ruby-rbs-sys/wrapper.h +1 -0
  174. data/schema/typeParam.json +17 -1
  175. data/sig/ast/ruby/annotations.rbs +315 -4
  176. data/sig/ast/ruby/comment_block.rbs +8 -0
  177. data/sig/ast/ruby/declarations.rbs +102 -4
  178. data/sig/ast/ruby/members.rbs +108 -2
  179. data/sig/cli/diff.rbs +5 -11
  180. data/sig/cli/validate.rbs +12 -8
  181. data/sig/cli.rbs +18 -18
  182. data/sig/definition.rbs +6 -1
  183. data/sig/definition_builder.rbs +2 -0
  184. data/sig/environment.rbs +70 -12
  185. data/sig/errors.rbs +13 -14
  186. data/sig/inline_parser.rbs +39 -2
  187. data/sig/locator.rbs +0 -2
  188. data/sig/manifest.yaml +0 -1
  189. data/sig/method_builder.rbs +3 -1
  190. data/sig/parser.rbs +31 -13
  191. data/sig/prototype/helpers.rbs +2 -0
  192. data/sig/resolver/type_name_resolver.rbs +35 -7
  193. data/sig/source.rbs +3 -3
  194. data/sig/type_param.rbs +13 -8
  195. data/sig/types.rbs +6 -7
  196. data/sig/unit_test/spy.rbs +0 -8
  197. data/sig/unit_test/type_assertions.rbs +11 -0
  198. data/src/ast.c +410 -153
  199. data/src/lexer.c +1392 -1313
  200. data/src/lexer.re +3 -0
  201. data/src/lexstate.c +58 -37
  202. data/src/location.c +8 -48
  203. data/src/parser.c +977 -516
  204. data/src/string.c +0 -48
  205. data/src/util/rbs_allocator.c +89 -71
  206. data/src/util/rbs_assert.c +1 -1
  207. data/src/util/rbs_buffer.c +2 -2
  208. data/src/util/rbs_constant_pool.c +10 -14
  209. data/src/util/rbs_encoding.c +4 -8
  210. data/src/util/rbs_unescape.c +56 -20
  211. data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
  212. data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
  213. data/stdlib/cgi/0/core.rbs +9 -393
  214. data/stdlib/cgi/0/manifest.yaml +1 -0
  215. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  216. data/stdlib/coverage/0/coverage.rbs +7 -4
  217. data/stdlib/date/0/date.rbs +92 -79
  218. data/stdlib/date/0/date_time.rbs +25 -24
  219. data/stdlib/delegate/0/delegator.rbs +10 -7
  220. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  221. data/stdlib/digest/0/digest.rbs +110 -0
  222. data/stdlib/erb/0/erb.rbs +748 -347
  223. data/stdlib/etc/0/etc.rbs +55 -50
  224. data/stdlib/fileutils/0/fileutils.rbs +158 -139
  225. data/stdlib/forwardable/0/forwardable.rbs +13 -10
  226. data/stdlib/io-console/0/io-console.rbs +2 -2
  227. data/stdlib/json/0/json.rbs +217 -136
  228. data/stdlib/monitor/0/monitor.rbs +3 -3
  229. data/stdlib/net-http/0/net-http.rbs +162 -134
  230. data/stdlib/objspace/0/objspace.rbs +17 -34
  231. data/stdlib/open-uri/0/open-uri.rbs +48 -8
  232. data/stdlib/open3/0/open3.rbs +469 -10
  233. data/stdlib/openssl/0/openssl.rbs +475 -357
  234. data/stdlib/optparse/0/optparse.rbs +26 -17
  235. data/stdlib/pathname/0/pathname.rbs +11 -1381
  236. data/stdlib/pp/0/pp.rbs +9 -8
  237. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  238. data/stdlib/pstore/0/pstore.rbs +35 -30
  239. data/stdlib/psych/0/psych.rbs +65 -12
  240. data/stdlib/psych/0/store.rbs +2 -4
  241. data/stdlib/pty/0/pty.rbs +9 -6
  242. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  243. data/stdlib/rdoc/0/code_object.rbs +2 -1
  244. data/stdlib/rdoc/0/parser.rbs +1 -1
  245. data/stdlib/rdoc/0/rdoc.rbs +1 -1
  246. data/stdlib/rdoc/0/store.rbs +1 -1
  247. data/stdlib/resolv/0/resolv.rbs +25 -68
  248. data/stdlib/ripper/0/ripper.rbs +22 -19
  249. data/stdlib/securerandom/0/manifest.yaml +2 -0
  250. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  251. data/stdlib/shellwords/0/shellwords.rbs +2 -2
  252. data/stdlib/singleton/0/singleton.rbs +3 -0
  253. data/stdlib/socket/0/addrinfo.rbs +7 -7
  254. data/stdlib/socket/0/basic_socket.rbs +3 -3
  255. data/stdlib/socket/0/ip_socket.rbs +10 -8
  256. data/stdlib/socket/0/socket.rbs +23 -10
  257. data/stdlib/socket/0/tcp_server.rbs +1 -1
  258. data/stdlib/socket/0/tcp_socket.rbs +11 -3
  259. data/stdlib/socket/0/udp_socket.rbs +1 -1
  260. data/stdlib/socket/0/unix_server.rbs +1 -1
  261. data/stdlib/stringio/0/stringio.rbs +1177 -85
  262. data/stdlib/strscan/0/string_scanner.rbs +27 -25
  263. data/stdlib/tempfile/0/tempfile.rbs +25 -21
  264. data/stdlib/time/0/time.rbs +8 -6
  265. data/stdlib/timeout/0/timeout.rbs +63 -7
  266. data/stdlib/tsort/0/cyclic.rbs +3 -0
  267. data/stdlib/tsort/0/tsort.rbs +7 -6
  268. data/stdlib/uri/0/common.rbs +42 -20
  269. data/stdlib/uri/0/file.rbs +3 -3
  270. data/stdlib/uri/0/generic.rbs +26 -18
  271. data/stdlib/uri/0/http.rbs +2 -2
  272. data/stdlib/uri/0/ldap.rbs +2 -2
  273. data/stdlib/uri/0/mailto.rbs +3 -3
  274. data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
  275. data/stdlib/zlib/0/deflate.rbs +4 -3
  276. data/stdlib/zlib/0/gzip_reader.rbs +6 -6
  277. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  278. data/stdlib/zlib/0/inflate.rbs +1 -1
  279. data/stdlib/zlib/0/need_dict.rbs +1 -1
  280. data/stdlib/zlib/0/zstream.rbs +1 -0
  281. metadata +50 -6
data/src/lexer.re CHANGED
@@ -44,6 +44,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
44
44
  ":" { return rbs_next_token(lexer, pCOLON); }
45
45
  "::" { return rbs_next_token(lexer, pCOLON2); }
46
46
  "<" { return rbs_next_token(lexer, pLT); }
47
+ ">" { return rbs_next_token(lexer, pGT); }
47
48
  "[]" { return rbs_next_token(lexer, pAREF_OPR); }
48
49
  operator { return rbs_next_token(lexer, tOPERATOR); }
49
50
  "--" [^\x00]* { return rbs_next_token(lexer, tINLINECOMMENT); }
@@ -71,6 +72,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
71
72
  "bool" { return rbs_next_token(lexer, kBOOL); }
72
73
  "bot" { return rbs_next_token(lexer, kBOT); }
73
74
  "class" { return rbs_next_token(lexer, kCLASS); }
75
+ "class-alias" { return rbs_next_token(lexer, kCLASSALIAS); }
74
76
  "def" { return rbs_next_token(lexer, kDEF); }
75
77
  "end" { return rbs_next_token(lexer, kEND); }
76
78
  "extend" { return rbs_next_token(lexer, kEXTEND); }
@@ -80,6 +82,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
80
82
  "instance" { return rbs_next_token(lexer, kINSTANCE); }
81
83
  "interface" { return rbs_next_token(lexer, kINTERFACE); }
82
84
  "module" { return rbs_next_token(lexer, kMODULE); }
85
+ "module-alias" { return rbs_next_token(lexer, kMODULEALIAS); }
83
86
  "nil" { return rbs_next_token(lexer, kNIL); }
84
87
  "out" { return rbs_next_token(lexer, kOUT); }
85
88
  "prepend" { return rbs_next_token(lexer, kPREPEND); }
data/src/lexstate.c CHANGED
@@ -1,4 +1,6 @@
1
+ #include "rbs/defines.h"
1
2
  #include "rbs/lexer.h"
3
+ #include "rbs/util/rbs_assert.h"
2
4
 
3
5
  static const char *RBS_TOKENTYPE_NAMES[] = {
4
6
  "NullType",
@@ -26,6 +28,7 @@ static const char *RBS_TOKENTYPE_NAMES[] = {
26
28
  "pBANG", /* ! */
27
29
  "pQUESTION", /* ? */
28
30
  "pLT", /* < */
31
+ "pGT", /* > */
29
32
  "pEQ", /* = */
30
33
 
31
34
  "kALIAS", /* alias */
@@ -35,6 +38,7 @@ static const char *RBS_TOKENTYPE_NAMES[] = {
35
38
  "kBOOL", /* bool */
36
39
  "kBOT", /* bot */
37
40
  "kCLASS", /* class */
41
+ "kCLASSALIAS", /* class-alias */
38
42
  "kDEF", /* def */
39
43
  "kEND", /* end */
40
44
  "kEXTEND", /* extend */
@@ -44,6 +48,7 @@ static const char *RBS_TOKENTYPE_NAMES[] = {
44
48
  "kINSTANCE", /* instance */
45
49
  "kINTERFACE", /* interface */
46
50
  "kMODULE", /* module */
51
+ "kMODULEALIAS", /* module-alias */
47
52
  "kNIL", /* nil */
48
53
  "kOUT", /* out */
49
54
  "kPREPEND", /* prepend */
@@ -109,17 +114,60 @@ int rbs_token_bytes(rbs_token_t tok) {
109
114
  }
110
115
 
111
116
  unsigned int rbs_peek(rbs_lexer_t *lexer) {
112
- if (lexer->current.char_pos == lexer->end_pos) {
113
- lexer->last_char = '\0';
114
- return 0;
117
+ return lexer->current_code_point;
118
+ }
119
+
120
+ bool rbs_next_char(rbs_lexer_t *lexer, unsigned int *codepoint, size_t *byte_len) {
121
+ if (RBS_UNLIKELY(lexer->current.byte_pos == lexer->end_pos)) {
122
+ return false;
123
+ }
124
+
125
+ const char *start = lexer->string.start + lexer->current.byte_pos;
126
+
127
+ // Fast path for ASCII (single-byte) characters
128
+ if ((unsigned int) *start < 128) {
129
+ *codepoint = (unsigned int) *start;
130
+ *byte_len = 1;
131
+ return true;
132
+ }
133
+
134
+ *byte_len = lexer->encoding->char_width((const uint8_t *) start, (ptrdiff_t) (lexer->string.end - start));
135
+
136
+ if (*byte_len == 1) {
137
+ *codepoint = (unsigned int) *start;
115
138
  } else {
116
- rbs_string_t str = rbs_string_new(
117
- lexer->string.start + lexer->current.byte_pos,
118
- lexer->string.end
119
- );
120
- unsigned int c = rbs_utf8_string_to_codepoint(str);
121
- lexer->last_char = c;
122
- return c;
139
+ *codepoint = 12523; // Dummy data for "ル" from "ルビー" (Ruby) in Unicode
140
+ }
141
+
142
+ return true;
143
+ }
144
+
145
+ void rbs_skip(rbs_lexer_t *lexer) {
146
+ RBS_ASSERT(lexer->current_character_bytes > 0, "rbs_skip called with current_character_bytes == 0");
147
+
148
+ if (RBS_UNLIKELY(lexer->current_code_point == '\0')) {
149
+ return;
150
+ }
151
+
152
+ unsigned int codepoint;
153
+ size_t byte_len;
154
+
155
+ lexer->current.byte_pos += lexer->current_character_bytes;
156
+ lexer->current.char_pos += 1;
157
+ if (lexer->current_code_point == '\n') {
158
+ lexer->current.line += 1;
159
+ lexer->current.column = 0;
160
+ lexer->first_token_of_line = true;
161
+ } else {
162
+ lexer->current.column += 1;
163
+ }
164
+
165
+ if (rbs_next_char(lexer, &codepoint, &byte_len)) {
166
+ lexer->current_code_point = codepoint;
167
+ lexer->current_character_bytes = byte_len;
168
+ } else {
169
+ lexer->current_character_bytes = 1;
170
+ lexer->current_code_point = '\0';
123
171
  }
124
172
  }
125
173
 
@@ -153,35 +201,8 @@ rbs_token_t rbs_next_eof_token(rbs_lexer_t *lexer) {
153
201
  }
154
202
  }
155
203
 
156
- void rbs_skip(rbs_lexer_t *lexer) {
157
- if (!lexer->last_char) {
158
- rbs_peek(lexer);
159
- }
160
-
161
- size_t byte_len;
162
-
163
- if (lexer->last_char == '\0') {
164
- byte_len = 1;
165
- } else {
166
- const char *start = lexer->string.start + lexer->current.byte_pos;
167
- byte_len = lexer->encoding->char_width((const uint8_t *) start, (ptrdiff_t) (lexer->string.end - start));
168
- }
169
-
170
- lexer->current.char_pos += 1;
171
- lexer->current.byte_pos += byte_len;
172
-
173
- if (lexer->last_char == '\n') {
174
- lexer->current.line += 1;
175
- lexer->current.column = 0;
176
- lexer->first_token_of_line = true;
177
- } else {
178
- lexer->current.column += 1;
179
- }
180
- }
181
-
182
204
  void rbs_skipn(rbs_lexer_t *lexer, size_t size) {
183
205
  for (size_t i = 0; i < size; i++) {
184
- rbs_peek(lexer);
185
206
  rbs_skip(lexer);
186
207
  }
187
208
  }
data/src/location.c CHANGED
@@ -1,48 +1,8 @@
1
1
  #include "rbs/location.h"
2
- #include "rbs/util/rbs_assert.h"
3
2
 
4
- #include <stdio.h>
5
-
6
- #define RBS_LOC_CHILDREN_SIZE(cap) (sizeof(rbs_loc_children) + sizeof(rbs_loc_entry) * ((cap) - 1))
7
-
8
- void rbs_loc_alloc_children(rbs_allocator_t *allocator, rbs_location_t *loc, size_t capacity) {
9
- rbs_assert(capacity <= sizeof(rbs_loc_entry_bitmap) * 8, "Capacity %zu is too large. Max is %zu", capacity, sizeof(rbs_loc_entry_bitmap) * 8);
10
-
11
- loc->children = rbs_allocator_malloc_impl(allocator, RBS_LOC_CHILDREN_SIZE(capacity), alignof(rbs_loc_children));
12
-
13
- loc->children->len = 0;
14
- loc->children->required_p = 0;
15
- loc->children->cap = capacity;
16
- }
17
-
18
- void rbs_loc_add_optional_child(rbs_location_t *loc, rbs_constant_id_t name, rbs_range_t r) {
19
- rbs_assert(loc->children != NULL, "All children should have been pre-allocated with rbs_loc_alloc_children()");
20
- rbs_assert((loc->children->len + 1 <= loc->children->cap), "Not enough space was pre-allocated for the children. Children: %hu, Capacity: %hu", loc->children->len, loc->children->cap);
21
-
22
- unsigned short i = loc->children->len++;
23
- loc->children->entries[i].name = name;
24
- loc->children->entries[i].rg = (rbs_loc_range) { r.start.char_pos, r.end.char_pos };
25
- }
26
-
27
- void rbs_loc_add_required_child(rbs_location_t *loc, rbs_constant_id_t name, rbs_range_t r) {
28
- rbs_loc_add_optional_child(loc, name, r);
29
- unsigned short last_index = loc->children->len - 1;
30
- loc->children->required_p |= 1 << last_index;
31
- }
32
-
33
- rbs_location_t *rbs_location_new(rbs_allocator_t *allocator, rbs_range_t rg) {
34
- rbs_location_t *location = rbs_allocator_alloc(allocator, rbs_location_t);
35
- *location = (rbs_location_t) {
36
- .rg = rg,
37
- .children = NULL,
38
- };
39
-
40
- return location;
41
- }
42
-
43
- rbs_location_list_t *rbs_location_list_new(rbs_allocator_t *allocator) {
44
- rbs_location_list_t *list = rbs_allocator_alloc(allocator, rbs_location_list_t);
45
- *list = (rbs_location_list_t) {
3
+ rbs_location_range_list_t *rbs_location_range_list_new(rbs_allocator_t *allocator) {
4
+ rbs_location_range_list_t *list = rbs_allocator_alloc(allocator, rbs_location_range_list_t);
5
+ *list = (rbs_location_range_list_t) {
46
6
  .allocator = allocator,
47
7
  .head = NULL,
48
8
  .tail = NULL,
@@ -52,10 +12,10 @@ rbs_location_list_t *rbs_location_list_new(rbs_allocator_t *allocator) {
52
12
  return list;
53
13
  }
54
14
 
55
- void rbs_location_list_append(rbs_location_list_t *list, rbs_location_t *loc) {
56
- rbs_location_list_node_t *node = rbs_allocator_alloc(list->allocator, rbs_location_list_node_t);
57
- *node = (rbs_location_list_node_t) {
58
- .loc = loc,
15
+ void rbs_location_range_list_append(rbs_location_range_list_t *list, rbs_location_range range) {
16
+ rbs_location_range_list_node_t *node = rbs_allocator_alloc(list->allocator, rbs_location_range_list_node_t);
17
+ *node = (rbs_location_range_list_node_t) {
18
+ .range = range,
59
19
  .next = NULL,
60
20
  };
61
21
 
@@ -68,4 +28,4 @@ void rbs_location_list_append(rbs_location_list_t *list, rbs_location_t *loc) {
68
28
  }
69
29
 
70
30
  list->length++;
71
- }
31
+ }