rbs 4.0.0.dev.4 → 4.1.0.pre.2

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 (306) hide show
  1. checksums.yaml +4 -4
  2. data/.clang-format +1 -0
  3. data/.github/dependabot.yml +16 -14
  4. data/.github/workflows/bundle-update.yml +63 -0
  5. data/.github/workflows/c-check.yml +21 -11
  6. data/.github/workflows/comments.yml +5 -3
  7. data/.github/workflows/dependabot.yml +2 -2
  8. data/.github/workflows/jruby.yml +67 -0
  9. data/.github/workflows/milestone.yml +83 -0
  10. data/.github/workflows/ruby.yml +63 -24
  11. data/.github/workflows/rust.yml +184 -0
  12. data/.github/workflows/truffleruby.yml +54 -0
  13. data/.github/workflows/typecheck.yml +5 -2
  14. data/.github/workflows/wasm.yml +53 -0
  15. data/.github/workflows/windows.yml +8 -2
  16. data/.gitignore +11 -0
  17. data/.rubocop.yml +1 -1
  18. data/CHANGELOG.md +357 -0
  19. data/README.md +4 -4
  20. data/Rakefile +365 -33
  21. data/Steepfile +8 -0
  22. data/config.yml +450 -24
  23. data/core/array.rbs +443 -363
  24. data/core/basic_object.rbs +9 -8
  25. data/core/binding.rbs +0 -2
  26. data/core/builtin.rbs +9 -8
  27. data/core/class.rbs +11 -8
  28. data/core/comparable.rbs +55 -34
  29. data/core/complex.rbs +104 -78
  30. data/core/dir.rbs +61 -49
  31. data/core/encoding.rbs +12 -15
  32. data/core/enumerable.rbs +288 -196
  33. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  34. data/core/enumerator/product.rbs +5 -5
  35. data/core/enumerator.rbs +91 -28
  36. data/core/errno.rbs +11 -2
  37. data/core/errors.rbs +58 -29
  38. data/core/exception.rbs +13 -13
  39. data/core/fiber.rbs +74 -54
  40. data/core/file.rbs +260 -1151
  41. data/core/file_constants.rbs +463 -0
  42. data/core/file_stat.rbs +534 -0
  43. data/core/file_test.rbs +3 -3
  44. data/core/float.rbs +257 -92
  45. data/core/gc.rbs +425 -281
  46. data/core/hash.rbs +1151 -829
  47. data/core/integer.rbs +156 -195
  48. data/core/io/buffer.rbs +53 -42
  49. data/core/io/wait.rbs +13 -35
  50. data/core/io.rbs +216 -150
  51. data/core/kernel.rbs +239 -163
  52. data/core/marshal.rbs +4 -4
  53. data/core/match_data.rbs +15 -13
  54. data/core/math.rbs +107 -66
  55. data/core/method.rbs +69 -33
  56. data/core/module.rbs +302 -150
  57. data/core/nil_class.rbs +7 -6
  58. data/core/numeric.rbs +77 -63
  59. data/core/object.rbs +9 -11
  60. data/core/object_space/weak_key_map.rbs +7 -7
  61. data/core/object_space.rbs +30 -23
  62. data/core/pathname.rbs +1322 -0
  63. data/core/proc.rbs +95 -58
  64. data/core/process.rbs +222 -202
  65. data/core/ractor.rbs +371 -515
  66. data/core/random.rbs +21 -3
  67. data/core/range.rbs +181 -79
  68. data/core/rational.rbs +60 -89
  69. data/core/rbs/ops.rbs +154 -0
  70. data/core/rbs/unnamed/argf.rbs +63 -56
  71. data/core/rbs/unnamed/env_class.rbs +19 -14
  72. data/core/rbs/unnamed/main_class.rbs +123 -0
  73. data/core/rbs/unnamed/random.rbs +11 -118
  74. data/core/regexp.rbs +258 -214
  75. data/core/ruby.rbs +53 -0
  76. data/core/ruby_vm.rbs +78 -34
  77. data/core/rubygems/config_file.rbs +5 -5
  78. data/core/rubygems/errors.rbs +4 -71
  79. data/core/rubygems/requirement.rbs +5 -5
  80. data/core/rubygems/rubygems.rbs +16 -82
  81. data/core/rubygems/version.rbs +2 -3
  82. data/core/set.rbs +493 -363
  83. data/core/signal.rbs +26 -16
  84. data/core/string.rbs +3234 -1285
  85. data/core/struct.rbs +43 -42
  86. data/core/symbol.rbs +41 -34
  87. data/core/thread.rbs +141 -73
  88. data/core/time.rbs +81 -50
  89. data/core/trace_point.rbs +41 -35
  90. data/core/true_class.rbs +2 -2
  91. data/core/unbound_method.rbs +24 -16
  92. data/core/warning.rbs +7 -7
  93. data/docs/CONTRIBUTING.md +2 -1
  94. data/docs/aliases.md +79 -0
  95. data/docs/collection.md +3 -3
  96. data/docs/config.md +171 -0
  97. data/docs/encoding.md +56 -0
  98. data/docs/gem.md +0 -1
  99. data/docs/inline.md +634 -0
  100. data/docs/rbs_by_example.md +20 -20
  101. data/docs/rust.md +96 -0
  102. data/docs/sigs.md +3 -3
  103. data/docs/syntax.md +48 -18
  104. data/docs/type_fingerprint.md +21 -0
  105. data/docs/wasm_serialization.md +80 -0
  106. data/exe/rbs +1 -1
  107. data/ext/rbs_extension/ast_translation.c +1441 -671
  108. data/ext/rbs_extension/ast_translation.h +7 -0
  109. data/ext/rbs_extension/class_constants.c +18 -2
  110. data/ext/rbs_extension/class_constants.h +9 -0
  111. data/ext/rbs_extension/extconf.rb +6 -1
  112. data/ext/rbs_extension/legacy_location.c +33 -56
  113. data/ext/rbs_extension/legacy_location.h +37 -0
  114. data/ext/rbs_extension/main.c +183 -39
  115. data/include/rbs/ast.h +597 -297
  116. data/include/rbs/defines.h +40 -0
  117. data/include/rbs/lexer.h +31 -11
  118. data/include/rbs/location.h +25 -44
  119. data/include/rbs/parser.h +6 -6
  120. data/include/rbs/serialize.h +39 -0
  121. data/include/rbs/string.h +0 -2
  122. data/include/rbs/util/rbs_allocator.h +34 -13
  123. data/include/rbs/util/rbs_assert.h +12 -1
  124. data/include/rbs/util/rbs_constant_pool.h +0 -3
  125. data/include/rbs/util/rbs_encoding.h +2 -0
  126. data/include/rbs/util/rbs_unescape.h +2 -1
  127. data/include/rbs.h +8 -0
  128. data/lib/rbs/annotate/rdoc_annotator.rb +27 -31
  129. data/lib/rbs/ast/annotation.rb +1 -1
  130. data/lib/rbs/ast/comment.rb +1 -1
  131. data/lib/rbs/ast/declarations.rb +10 -10
  132. data/lib/rbs/ast/members.rb +14 -14
  133. data/lib/rbs/ast/ruby/annotations.rb +335 -3
  134. data/lib/rbs/ast/ruby/comment_block.rb +30 -4
  135. data/lib/rbs/ast/ruby/declarations.rb +209 -4
  136. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +4 -0
  137. data/lib/rbs/ast/ruby/helpers/location_helper.rb +1 -1
  138. data/lib/rbs/ast/ruby/members.rb +571 -22
  139. data/lib/rbs/ast/type_param.rb +24 -4
  140. data/lib/rbs/buffer.rb +66 -24
  141. data/lib/rbs/cli/diff.rb +16 -15
  142. data/lib/rbs/cli/validate.rb +38 -106
  143. data/lib/rbs/cli.rb +55 -24
  144. data/lib/rbs/collection/config/lockfile_generator.rb +28 -3
  145. data/lib/rbs/collection/sources/git.rb +7 -0
  146. data/lib/rbs/definition.rb +1 -1
  147. data/lib/rbs/definition_builder/ancestor_builder.rb +62 -9
  148. data/lib/rbs/definition_builder/method_builder.rb +32 -6
  149. data/lib/rbs/definition_builder.rb +147 -25
  150. data/lib/rbs/diff.rb +7 -1
  151. data/lib/rbs/environment.rb +235 -75
  152. data/lib/rbs/environment_loader.rb +0 -6
  153. data/lib/rbs/errors.rb +27 -18
  154. data/lib/rbs/inline_parser.rb +377 -15
  155. data/lib/rbs/location_aux.rb +1 -1
  156. data/lib/rbs/locator.rb +5 -1
  157. data/lib/rbs/method_type.rb +5 -3
  158. data/lib/rbs/namespace.rb +47 -11
  159. data/lib/rbs/parser_aux.rb +20 -7
  160. data/lib/rbs/prototype/helpers.rb +57 -0
  161. data/lib/rbs/prototype/rb.rb +3 -28
  162. data/lib/rbs/prototype/rbi.rb +3 -20
  163. data/lib/rbs/prototype/runtime.rb +10 -0
  164. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  165. data/lib/rbs/resolver/type_name_resolver.rb +120 -44
  166. data/lib/rbs/rewriter.rb +70 -0
  167. data/lib/rbs/subtractor.rb +3 -1
  168. data/lib/rbs/test/type_check.rb +25 -3
  169. data/lib/rbs/type_name.rb +34 -14
  170. data/lib/rbs/types.rb +88 -78
  171. data/lib/rbs/unit_test/type_assertions.rb +44 -8
  172. data/lib/rbs/validator.rb +2 -2
  173. data/lib/rbs/version.rb +1 -1
  174. data/lib/rbs/wasm/deserializer.rb +213 -0
  175. data/lib/rbs/wasm/location.rb +61 -0
  176. data/lib/rbs/wasm/parser.rb +137 -0
  177. data/lib/rbs/wasm/runtime.rb +217 -0
  178. data/lib/rbs/wasm/serialization_schema.rb +110 -0
  179. data/lib/rbs.rb +13 -2
  180. data/lib/rdoc/discover.rb +1 -1
  181. data/lib/rdoc_plugin/parser.rb +1 -1
  182. data/rbs.gemspec +24 -6
  183. data/schema/typeParam.json +17 -1
  184. data/sig/annotate/rdoc_annotater.rbs +12 -9
  185. data/sig/ast/ruby/annotations.rbs +364 -4
  186. data/sig/ast/ruby/comment_block.rbs +8 -0
  187. data/sig/ast/ruby/declarations.rbs +102 -4
  188. data/sig/ast/ruby/members.rbs +128 -2
  189. data/sig/buffer.rbs +19 -1
  190. data/sig/cli/diff.rbs +5 -11
  191. data/sig/cli/validate.rbs +12 -8
  192. data/sig/cli.rbs +18 -18
  193. data/sig/collection/config/lockfile_generator.rbs +2 -0
  194. data/sig/definition.rbs +6 -1
  195. data/sig/definition_builder.rbs +2 -0
  196. data/sig/environment.rbs +70 -12
  197. data/sig/errors.rbs +13 -14
  198. data/sig/inline_parser.rbs +41 -2
  199. data/sig/locator.rbs +0 -2
  200. data/sig/manifest.yaml +0 -2
  201. data/sig/method_builder.rbs +3 -1
  202. data/sig/namespace.rbs +20 -0
  203. data/sig/parser.rbs +41 -13
  204. data/sig/prototype/helpers.rbs +2 -0
  205. data/sig/resolver/type_name_resolver.rbs +36 -10
  206. data/sig/rewriter.rbs +45 -0
  207. data/sig/source.rbs +3 -3
  208. data/sig/type_param.rbs +13 -8
  209. data/sig/typename.rbs +15 -0
  210. data/sig/types.rbs +6 -7
  211. data/sig/unit_test/spy.rbs +0 -8
  212. data/sig/unit_test/type_assertions.rbs +15 -0
  213. data/sig/wasm/deserializer.rbs +66 -0
  214. data/sig/wasm/serialization_schema.rbs +13 -0
  215. data/src/ast.c +443 -162
  216. data/src/lexer.c +1415 -1313
  217. data/src/lexer.re +4 -0
  218. data/src/lexstate.c +63 -37
  219. data/src/location.c +7 -47
  220. data/src/parser.c +1032 -521
  221. data/src/serialize.c +958 -0
  222. data/src/string.c +0 -48
  223. data/src/util/rbs_allocator.c +89 -74
  224. data/src/util/rbs_assert.c +1 -1
  225. data/src/util/rbs_buffer.c +2 -2
  226. data/src/util/rbs_constant_pool.c +10 -14
  227. data/src/util/rbs_encoding.c +4 -8
  228. data/src/util/rbs_unescape.c +56 -20
  229. data/stdlib/abbrev/0/array.rbs +1 -1
  230. data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
  231. data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
  232. data/stdlib/cgi/0/core.rbs +9 -393
  233. data/stdlib/cgi/0/manifest.yaml +1 -0
  234. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  235. data/stdlib/coverage/0/coverage.rbs +7 -4
  236. data/stdlib/csv/0/csv.rbs +5 -5
  237. data/stdlib/date/0/date.rbs +92 -79
  238. data/stdlib/date/0/date_time.rbs +25 -24
  239. data/stdlib/delegate/0/delegator.rbs +10 -7
  240. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  241. data/stdlib/digest/0/digest.rbs +111 -1
  242. data/stdlib/erb/0/erb.rbs +748 -347
  243. data/stdlib/etc/0/etc.rbs +73 -54
  244. data/stdlib/fileutils/0/fileutils.rbs +179 -160
  245. data/stdlib/forwardable/0/forwardable.rbs +13 -10
  246. data/stdlib/io-console/0/io-console.rbs +2 -2
  247. data/stdlib/json/0/json.rbs +223 -142
  248. data/stdlib/monitor/0/monitor.rbs +3 -3
  249. data/stdlib/net-http/0/net-http.rbs +162 -134
  250. data/stdlib/objspace/0/objspace.rbs +17 -34
  251. data/stdlib/open-uri/0/open-uri.rbs +48 -8
  252. data/stdlib/open3/0/open3.rbs +469 -10
  253. data/stdlib/openssl/0/openssl.rbs +482 -364
  254. data/stdlib/optparse/0/optparse.rbs +26 -17
  255. data/stdlib/pathname/0/pathname.rbs +11 -1381
  256. data/stdlib/pp/0/pp.rbs +9 -8
  257. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  258. data/stdlib/pstore/0/pstore.rbs +35 -30
  259. data/stdlib/psych/0/psych.rbs +65 -12
  260. data/stdlib/psych/0/store.rbs +2 -4
  261. data/stdlib/pty/0/pty.rbs +9 -6
  262. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  263. data/stdlib/rdoc/0/code_object.rbs +2 -1
  264. data/stdlib/rdoc/0/parser.rbs +1 -1
  265. data/stdlib/rdoc/0/rdoc.rbs +1 -1
  266. data/stdlib/rdoc/0/store.rbs +1 -1
  267. data/stdlib/resolv/0/resolv.rbs +26 -69
  268. data/stdlib/ripper/0/ripper.rbs +22 -19
  269. data/stdlib/securerandom/0/manifest.yaml +2 -0
  270. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  271. data/stdlib/shellwords/0/shellwords.rbs +3 -3
  272. data/stdlib/singleton/0/singleton.rbs +3 -0
  273. data/stdlib/socket/0/addrinfo.rbs +7 -7
  274. data/stdlib/socket/0/basic_socket.rbs +3 -3
  275. data/stdlib/socket/0/ip_socket.rbs +10 -8
  276. data/stdlib/socket/0/socket.rbs +23 -10
  277. data/stdlib/socket/0/tcp_server.rbs +1 -1
  278. data/stdlib/socket/0/tcp_socket.rbs +11 -3
  279. data/stdlib/socket/0/udp_socket.rbs +1 -1
  280. data/stdlib/socket/0/unix_server.rbs +1 -1
  281. data/stdlib/stringio/0/stringio.rbs +1209 -95
  282. data/stdlib/strscan/0/string_scanner.rbs +101 -80
  283. data/stdlib/tempfile/0/tempfile.rbs +25 -21
  284. data/stdlib/time/0/time.rbs +8 -6
  285. data/stdlib/timeout/0/timeout.rbs +63 -7
  286. data/stdlib/tsort/0/cyclic.rbs +4 -1
  287. data/stdlib/tsort/0/interfaces.rbs +8 -8
  288. data/stdlib/tsort/0/tsort.rbs +16 -15
  289. data/stdlib/uri/0/common.rbs +42 -20
  290. data/stdlib/uri/0/file.rbs +3 -3
  291. data/stdlib/uri/0/generic.rbs +26 -18
  292. data/stdlib/uri/0/http.rbs +2 -2
  293. data/stdlib/uri/0/ldap.rbs +2 -2
  294. data/stdlib/uri/0/mailto.rbs +3 -3
  295. data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
  296. data/stdlib/zlib/0/deflate.rbs +4 -3
  297. data/stdlib/zlib/0/gzip_reader.rbs +8 -8
  298. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  299. data/stdlib/zlib/0/inflate.rbs +1 -1
  300. data/stdlib/zlib/0/need_dict.rbs +1 -1
  301. data/stdlib/zlib/0/zstream.rbs +1 -0
  302. data/wasm/README.md +59 -0
  303. data/wasm/rbs_wasm.c +411 -0
  304. metadata +56 -8
  305. data/.vscode/extensions.json +0 -5
  306. data/.vscode/settings.json +0 -19
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,8 @@ 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); }
86
+ "module-self" { return rbs_next_token(lexer, kMODULESELF); }
83
87
  "nil" { return rbs_next_token(lexer, kNIL); }
84
88
  "out" { return rbs_next_token(lexer, kOUT); }
85
89
  "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 */
@@ -63,6 +68,7 @@ static const char *RBS_TOKENTYPE_NAMES[] = {
63
68
  "kATRBS", /* @rbs */
64
69
  "kSKIP", /* skip */
65
70
  "kRETURN", /* return */
71
+ "kMODULESELF", /* module-self */
66
72
 
67
73
  "tLIDENT", /* Identifiers starting with lower case */
68
74
  "tUIDENT", /* Identifiers starting with upper case */
@@ -109,17 +115,64 @@ int rbs_token_bytes(rbs_token_t tok) {
109
115
  }
110
116
 
111
117
  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;
118
+ return lexer->current_code_point;
119
+ }
120
+
121
+ bool rbs_next_char(rbs_lexer_t *lexer, unsigned int *codepoint, size_t *byte_len) {
122
+ if (RBS_UNLIKELY(lexer->current.byte_pos == lexer->end_pos)) {
123
+ return false;
124
+ }
125
+
126
+ const char *start = lexer->string.start + lexer->current.byte_pos;
127
+
128
+ // Fast path for ASCII (single-byte) characters
129
+ if ((unsigned int) *start < 128) {
130
+ *codepoint = (unsigned int) *start;
131
+ *byte_len = 1;
132
+ return true;
133
+ }
134
+
135
+ *byte_len = lexer->encoding->char_width((const uint8_t *) start, (ptrdiff_t) (lexer->string.end - start));
136
+
137
+ if (*byte_len == 0) {
138
+ // Avoid infinite loop on invalid bytes.
139
+ *byte_len = 1;
140
+ *codepoint = (unsigned int) (unsigned char) *start;
141
+ } else if (*byte_len == 1) {
142
+ *codepoint = (unsigned int) *start;
115
143
  } 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;
144
+ *codepoint = 12523; // Dummy data for "ル" from "ルビー" (Ruby) in Unicode
145
+ }
146
+
147
+ return true;
148
+ }
149
+
150
+ void rbs_skip(rbs_lexer_t *lexer) {
151
+ RBS_ASSERT(lexer->current_character_bytes > 0, "rbs_skip called with current_character_bytes == 0");
152
+
153
+ if (RBS_UNLIKELY(lexer->current_code_point == '\0')) {
154
+ return;
155
+ }
156
+
157
+ unsigned int codepoint;
158
+ size_t byte_len;
159
+
160
+ lexer->current.byte_pos += lexer->current_character_bytes;
161
+ lexer->current.char_pos += 1;
162
+ if (lexer->current_code_point == '\n') {
163
+ lexer->current.line += 1;
164
+ lexer->current.column = 0;
165
+ lexer->first_token_of_line = true;
166
+ } else {
167
+ lexer->current.column += 1;
168
+ }
169
+
170
+ if (rbs_next_char(lexer, &codepoint, &byte_len)) {
171
+ lexer->current_code_point = codepoint;
172
+ lexer->current_character_bytes = byte_len;
173
+ } else {
174
+ lexer->current_character_bytes = 1;
175
+ lexer->current_code_point = '\0';
123
176
  }
124
177
  }
125
178
 
@@ -153,35 +206,8 @@ rbs_token_t rbs_next_eof_token(rbs_lexer_t *lexer) {
153
206
  }
154
207
  }
155
208
 
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
209
  void rbs_skipn(rbs_lexer_t *lexer, size_t size) {
183
210
  for (size_t i = 0; i < size; i++) {
184
- rbs_peek(lexer);
185
211
  rbs_skip(lexer);
186
212
  }
187
213
  }
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