rbs 4.1.0.pre.2-java
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 +7 -0
- data/.clang-format +75 -0
- data/.clangd +2 -0
- data/.github/dependabot.yml +24 -0
- data/.github/workflows/bundle-update.yml +63 -0
- data/.github/workflows/c-check.yml +61 -0
- data/.github/workflows/comments.yml +37 -0
- data/.github/workflows/dependabot.yml +30 -0
- data/.github/workflows/jruby.yml +67 -0
- data/.github/workflows/milestone.yml +83 -0
- data/.github/workflows/ruby.yml +158 -0
- data/.github/workflows/rust.yml +184 -0
- data/.github/workflows/truffleruby.yml +54 -0
- data/.github/workflows/typecheck.yml +39 -0
- data/.github/workflows/wasm.yml +53 -0
- data/.github/workflows/windows.yml +49 -0
- data/.gitignore +38 -0
- data/.rubocop.yml +72 -0
- data/BSDL +22 -0
- data/CHANGELOG.md +2292 -0
- data/COPYING +56 -0
- data/README.md +240 -0
- data/Rakefile +869 -0
- data/Steepfile +53 -0
- data/config.yml +913 -0
- data/core/array.rbs +4142 -0
- data/core/basic_object.rbs +376 -0
- data/core/binding.rbs +148 -0
- data/core/builtin.rbs +278 -0
- data/core/class.rbs +223 -0
- data/core/comparable.rbs +192 -0
- data/core/complex.rbs +812 -0
- data/core/constants.rbs +96 -0
- data/core/data.rbs +415 -0
- data/core/dir.rbs +993 -0
- data/core/encoding.rbs +1368 -0
- data/core/enumerable.rbs +2506 -0
- data/core/enumerator/arithmetic_sequence.rbs +70 -0
- data/core/enumerator/product.rbs +92 -0
- data/core/enumerator.rbs +705 -0
- data/core/env.rbs +6 -0
- data/core/errno.rbs +682 -0
- data/core/errors.rbs +789 -0
- data/core/exception.rbs +485 -0
- data/core/false_class.rbs +82 -0
- data/core/fiber.rbs +570 -0
- data/core/fiber_error.rbs +11 -0
- data/core/file.rbs +2045 -0
- data/core/file_constants.rbs +463 -0
- data/core/file_stat.rbs +534 -0
- data/core/file_test.rbs +331 -0
- data/core/float.rbs +1316 -0
- data/core/gc.rbs +788 -0
- data/core/global_variables.rbs +184 -0
- data/core/hash.rbs +2183 -0
- data/core/integer.rbs +1374 -0
- data/core/io/buffer.rbs +995 -0
- data/core/io/wait.rbs +48 -0
- data/core/io.rbs +3472 -0
- data/core/kernel.rbs +3172 -0
- data/core/marshal.rbs +207 -0
- data/core/match_data.rbs +637 -0
- data/core/math.rbs +770 -0
- data/core/method.rbs +422 -0
- data/core/module.rbs +1856 -0
- data/core/nil_class.rbs +210 -0
- data/core/numeric.rbs +832 -0
- data/core/object.rbs +108 -0
- data/core/object_space/weak_key_map.rbs +166 -0
- data/core/object_space.rbs +197 -0
- data/core/pathname.rbs +1322 -0
- data/core/proc.rbs +905 -0
- data/core/process.rbs +2316 -0
- data/core/ractor.rbs +924 -0
- data/core/random.rbs +255 -0
- data/core/range.rbs +1209 -0
- data/core/rational.rbs +502 -0
- data/core/rb_config.rbs +88 -0
- data/core/rbs/ops.rbs +154 -0
- data/core/rbs/unnamed/argf.rbs +1236 -0
- data/core/rbs/unnamed/env_class.rbs +1214 -0
- data/core/rbs/unnamed/main_class.rbs +123 -0
- data/core/rbs/unnamed/random.rbs +186 -0
- data/core/refinement.rbs +59 -0
- data/core/regexp.rbs +1974 -0
- data/core/ruby.rbs +53 -0
- data/core/ruby_vm.rbs +809 -0
- data/core/rubygems/basic_specification.rbs +6 -0
- data/core/rubygems/config_file.rbs +38 -0
- data/core/rubygems/dependency_installer.rbs +6 -0
- data/core/rubygems/errors.rbs +109 -0
- data/core/rubygems/installer.rbs +15 -0
- data/core/rubygems/path_support.rbs +6 -0
- data/core/rubygems/platform.rbs +7 -0
- data/core/rubygems/request_set.rbs +49 -0
- data/core/rubygems/requirement.rbs +148 -0
- data/core/rubygems/rubygems.rbs +1105 -0
- data/core/rubygems/source_list.rbs +15 -0
- data/core/rubygems/specification.rbs +23 -0
- data/core/rubygems/stream_ui.rbs +5 -0
- data/core/rubygems/uninstaller.rbs +10 -0
- data/core/rubygems/version.rbs +293 -0
- data/core/set.rbs +751 -0
- data/core/signal.rbs +110 -0
- data/core/string.rbs +5532 -0
- data/core/struct.rbs +668 -0
- data/core/symbol.rbs +482 -0
- data/core/thread.rbs +1826 -0
- data/core/thread_group.rbs +79 -0
- data/core/time.rbs +1793 -0
- data/core/trace_point.rbs +483 -0
- data/core/true_class.rbs +98 -0
- data/core/unbound_method.rbs +337 -0
- data/core/warning.rbs +87 -0
- data/docs/CONTRIBUTING.md +107 -0
- data/docs/aliases.md +79 -0
- data/docs/architecture.md +110 -0
- data/docs/collection.md +192 -0
- data/docs/config.md +171 -0
- data/docs/data_and_struct.md +86 -0
- data/docs/encoding.md +56 -0
- data/docs/gem.md +56 -0
- data/docs/inline.md +634 -0
- data/docs/rbs_by_example.md +309 -0
- data/docs/repo.md +125 -0
- data/docs/rust.md +96 -0
- data/docs/sigs.md +167 -0
- data/docs/stdlib.md +147 -0
- data/docs/syntax.md +940 -0
- data/docs/tools.md +17 -0
- data/docs/type_fingerprint.md +21 -0
- data/docs/wasm_serialization.md +80 -0
- data/exe/rbs +7 -0
- data/ext/rbs_extension/ast_translation.c +1855 -0
- data/ext/rbs_extension/ast_translation.h +41 -0
- data/ext/rbs_extension/class_constants.c +187 -0
- data/ext/rbs_extension/class_constants.h +104 -0
- data/ext/rbs_extension/compat.h +10 -0
- data/ext/rbs_extension/extconf.rb +40 -0
- data/ext/rbs_extension/legacy_location.c +294 -0
- data/ext/rbs_extension/legacy_location.h +82 -0
- data/ext/rbs_extension/main.c +613 -0
- data/ext/rbs_extension/rbs_extension.h +16 -0
- data/ext/rbs_extension/rbs_string_bridging.c +9 -0
- data/ext/rbs_extension/rbs_string_bridging.h +24 -0
- data/goodcheck.yml +91 -0
- data/include/rbs/ast.h +1047 -0
- data/include/rbs/defines.h +99 -0
- data/include/rbs/lexer.h +207 -0
- data/include/rbs/location.h +40 -0
- data/include/rbs/parser.h +153 -0
- data/include/rbs/serialize.h +39 -0
- data/include/rbs/string.h +47 -0
- data/include/rbs/util/rbs_allocator.h +59 -0
- data/include/rbs/util/rbs_assert.h +20 -0
- data/include/rbs/util/rbs_buffer.h +83 -0
- data/include/rbs/util/rbs_constant_pool.h +155 -0
- data/include/rbs/util/rbs_encoding.h +282 -0
- data/include/rbs/util/rbs_unescape.h +24 -0
- data/include/rbs.h +14 -0
- data/lib/rbs/ancestor_graph.rb +92 -0
- data/lib/rbs/annotate/annotations.rb +199 -0
- data/lib/rbs/annotate/formatter.rb +82 -0
- data/lib/rbs/annotate/rdoc_annotator.rb +398 -0
- data/lib/rbs/annotate/rdoc_source.rb +131 -0
- data/lib/rbs/annotate.rb +8 -0
- data/lib/rbs/ast/annotation.rb +29 -0
- data/lib/rbs/ast/comment.rb +29 -0
- data/lib/rbs/ast/declarations.rb +472 -0
- data/lib/rbs/ast/directives.rb +49 -0
- data/lib/rbs/ast/members.rb +451 -0
- data/lib/rbs/ast/ruby/annotations.rb +451 -0
- data/lib/rbs/ast/ruby/comment_block.rb +247 -0
- data/lib/rbs/ast/ruby/declarations.rb +291 -0
- data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
- data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
- data/lib/rbs/ast/ruby/members.rb +762 -0
- data/lib/rbs/ast/type_param.rb +235 -0
- data/lib/rbs/ast/visitor.rb +137 -0
- data/lib/rbs/buffer.rb +189 -0
- data/lib/rbs/builtin_names.rb +58 -0
- data/lib/rbs/cli/colored_io.rb +48 -0
- data/lib/rbs/cli/diff.rb +84 -0
- data/lib/rbs/cli/validate.rb +294 -0
- data/lib/rbs/cli.rb +1253 -0
- data/lib/rbs/collection/cleaner.rb +38 -0
- data/lib/rbs/collection/config/lockfile.rb +92 -0
- data/lib/rbs/collection/config/lockfile_generator.rb +269 -0
- data/lib/rbs/collection/config.rb +81 -0
- data/lib/rbs/collection/installer.rb +32 -0
- data/lib/rbs/collection/sources/base.rb +14 -0
- data/lib/rbs/collection/sources/git.rb +265 -0
- data/lib/rbs/collection/sources/local.rb +81 -0
- data/lib/rbs/collection/sources/rubygems.rb +48 -0
- data/lib/rbs/collection/sources/stdlib.rb +50 -0
- data/lib/rbs/collection/sources.rb +38 -0
- data/lib/rbs/collection.rb +16 -0
- data/lib/rbs/constant.rb +28 -0
- data/lib/rbs/definition.rb +415 -0
- data/lib/rbs/definition_builder/ancestor_builder.rb +678 -0
- data/lib/rbs/definition_builder/method_builder.rb +295 -0
- data/lib/rbs/definition_builder.rb +1054 -0
- data/lib/rbs/diff.rb +131 -0
- data/lib/rbs/environment/class_entry.rb +69 -0
- data/lib/rbs/environment/module_entry.rb +66 -0
- data/lib/rbs/environment/use_map.rb +77 -0
- data/lib/rbs/environment.rb +1028 -0
- data/lib/rbs/environment_loader.rb +167 -0
- data/lib/rbs/environment_walker.rb +155 -0
- data/lib/rbs/errors.rb +634 -0
- data/lib/rbs/factory.rb +18 -0
- data/lib/rbs/file_finder.rb +28 -0
- data/lib/rbs/inline_parser/comment_association.rb +117 -0
- data/lib/rbs/inline_parser.rb +568 -0
- data/lib/rbs/location_aux.rb +170 -0
- data/lib/rbs/locator.rb +247 -0
- data/lib/rbs/method_type.rb +145 -0
- data/lib/rbs/namespace.rb +154 -0
- data/lib/rbs/parser/lex_result.rb +15 -0
- data/lib/rbs/parser/token.rb +23 -0
- data/lib/rbs/parser_aux.rb +142 -0
- data/lib/rbs/prototype/helpers.rb +197 -0
- data/lib/rbs/prototype/node_usage.rb +99 -0
- data/lib/rbs/prototype/rb.rb +816 -0
- data/lib/rbs/prototype/rbi.rb +625 -0
- data/lib/rbs/prototype/runtime/helpers.rb +59 -0
- data/lib/rbs/prototype/runtime/reflection.rb +19 -0
- data/lib/rbs/prototype/runtime/value_object_generator.rb +279 -0
- data/lib/rbs/prototype/runtime.rb +680 -0
- data/lib/rbs/repository.rb +127 -0
- data/lib/rbs/resolver/constant_resolver.rb +219 -0
- data/lib/rbs/resolver/type_name_resolver.rb +167 -0
- data/lib/rbs/rewriter.rb +70 -0
- data/lib/rbs/sorter.rb +198 -0
- data/lib/rbs/source.rb +99 -0
- data/lib/rbs/substitution.rb +83 -0
- data/lib/rbs/subtractor.rb +204 -0
- data/lib/rbs/test/errors.rb +80 -0
- data/lib/rbs/test/guaranteed.rb +30 -0
- data/lib/rbs/test/hook.rb +212 -0
- data/lib/rbs/test/observer.rb +19 -0
- data/lib/rbs/test/setup.rb +84 -0
- data/lib/rbs/test/setup_helper.rb +50 -0
- data/lib/rbs/test/tester.rb +167 -0
- data/lib/rbs/test/type_check.rb +457 -0
- data/lib/rbs/test.rb +112 -0
- data/lib/rbs/type_alias_dependency.rb +100 -0
- data/lib/rbs/type_alias_regularity.rb +126 -0
- data/lib/rbs/type_name.rb +122 -0
- data/lib/rbs/types.rb +1604 -0
- data/lib/rbs/unit_test/convertibles.rb +177 -0
- data/lib/rbs/unit_test/spy.rb +138 -0
- data/lib/rbs/unit_test/type_assertions.rb +383 -0
- data/lib/rbs/unit_test/with_aliases.rb +145 -0
- data/lib/rbs/unit_test.rb +6 -0
- data/lib/rbs/validator.rb +186 -0
- data/lib/rbs/variance_calculator.rb +189 -0
- data/lib/rbs/vendorer.rb +71 -0
- data/lib/rbs/version.rb +5 -0
- data/lib/rbs/wasm/deserializer.rb +213 -0
- data/lib/rbs/wasm/jars/asm-analysis.jar +0 -0
- data/lib/rbs/wasm/jars/asm-commons.jar +0 -0
- data/lib/rbs/wasm/jars/asm-tree.jar +0 -0
- data/lib/rbs/wasm/jars/asm-util.jar +0 -0
- data/lib/rbs/wasm/jars/asm.jar +0 -0
- data/lib/rbs/wasm/jars/compiler.jar +0 -0
- data/lib/rbs/wasm/jars/log.jar +0 -0
- data/lib/rbs/wasm/jars/runtime.jar +0 -0
- data/lib/rbs/wasm/jars/wasi.jar +0 -0
- data/lib/rbs/wasm/jars/wasm.jar +0 -0
- data/lib/rbs/wasm/location.rb +61 -0
- data/lib/rbs/wasm/parser.rb +137 -0
- data/lib/rbs/wasm/rbs_parser.wasm +0 -0
- data/lib/rbs/wasm/runtime.rb +217 -0
- data/lib/rbs/wasm/serialization_schema.rb +110 -0
- data/lib/rbs/writer.rb +424 -0
- data/lib/rbs.rb +117 -0
- data/lib/rdoc/discover.rb +20 -0
- data/lib/rdoc_plugin/parser.rb +163 -0
- data/rbs.gemspec +68 -0
- data/schema/annotation.json +14 -0
- data/schema/comment.json +26 -0
- data/schema/decls.json +326 -0
- data/schema/function.json +87 -0
- data/schema/location.json +56 -0
- data/schema/members.json +266 -0
- data/schema/methodType.json +50 -0
- data/schema/typeParam.json +52 -0
- data/schema/types.json +317 -0
- data/sig/ancestor_builder.rbs +163 -0
- data/sig/ancestor_graph.rbs +60 -0
- data/sig/annotate/annotations.rbs +102 -0
- data/sig/annotate/formatter.rbs +24 -0
- data/sig/annotate/rdoc_annotater.rbs +85 -0
- data/sig/annotate/rdoc_source.rbs +32 -0
- data/sig/annotation.rbs +27 -0
- data/sig/ast/ruby/annotations.rbs +470 -0
- data/sig/ast/ruby/comment_block.rbs +127 -0
- data/sig/ast/ruby/declarations.rbs +158 -0
- data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
- data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
- data/sig/ast/ruby/members.rbs +198 -0
- data/sig/buffer.rbs +108 -0
- data/sig/builtin_names.rbs +44 -0
- data/sig/cli/colored_io.rbs +15 -0
- data/sig/cli/diff.rbs +15 -0
- data/sig/cli/validate.rbs +47 -0
- data/sig/cli.rbs +89 -0
- data/sig/collection/cleaner.rbs +13 -0
- data/sig/collection/config/lockfile.rbs +74 -0
- data/sig/collection/config/lockfile_generator.rbs +68 -0
- data/sig/collection/config.rbs +46 -0
- data/sig/collection/installer.rbs +17 -0
- data/sig/collection/sources.rbs +214 -0
- data/sig/collection.rbs +4 -0
- data/sig/comment.rbs +26 -0
- data/sig/constant.rbs +21 -0
- data/sig/declarations.rbs +274 -0
- data/sig/definition.rbs +232 -0
- data/sig/definition_builder.rbs +181 -0
- data/sig/diff.rbs +28 -0
- data/sig/directives.rbs +77 -0
- data/sig/environment/class_entry.rbs +50 -0
- data/sig/environment/module_entry.rbs +50 -0
- data/sig/environment.rbs +286 -0
- data/sig/environment_loader.rbs +111 -0
- data/sig/environment_walker.rbs +65 -0
- data/sig/errors.rbs +408 -0
- data/sig/factory.rbs +5 -0
- data/sig/file_finder.rbs +28 -0
- data/sig/inline_parser/comment_association.rbs +71 -0
- data/sig/inline_parser.rbs +126 -0
- data/sig/location.rbs +135 -0
- data/sig/locator.rbs +56 -0
- data/sig/manifest.yaml +5 -0
- data/sig/members.rbs +258 -0
- data/sig/method_builder.rbs +89 -0
- data/sig/method_types.rbs +58 -0
- data/sig/namespace.rbs +161 -0
- data/sig/parser.rbs +164 -0
- data/sig/prototype/helpers.rbs +29 -0
- data/sig/prototype/node_usage.rbs +20 -0
- data/sig/prototype/rb.rbs +96 -0
- data/sig/prototype/rbi.rbs +75 -0
- data/sig/prototype/runtime.rbs +182 -0
- data/sig/rbs.rbs +21 -0
- data/sig/rdoc/rbs.rbs +67 -0
- data/sig/repository.rbs +85 -0
- data/sig/resolver/constant_resolver.rbs +92 -0
- data/sig/resolver/context.rbs +34 -0
- data/sig/resolver/type_name_resolver.rbs +61 -0
- data/sig/rewriter.rbs +45 -0
- data/sig/shims/bundler.rbs +38 -0
- data/sig/shims/enumerable.rbs +5 -0
- data/sig/shims/rubygems.rbs +19 -0
- data/sig/sorter.rbs +41 -0
- data/sig/source.rbs +48 -0
- data/sig/substitution.rbs +48 -0
- data/sig/subtractor.rbs +37 -0
- data/sig/test/errors.rbs +52 -0
- data/sig/test/guranteed.rbs +9 -0
- data/sig/test/type_check.rbs +19 -0
- data/sig/test.rbs +82 -0
- data/sig/type_alias_dependency.rbs +53 -0
- data/sig/type_alias_regularity.rbs +98 -0
- data/sig/type_param.rbs +115 -0
- data/sig/typename.rbs +89 -0
- data/sig/types.rbs +578 -0
- data/sig/unit_test/convertibles.rbs +154 -0
- data/sig/unit_test/spy.rbs +22 -0
- data/sig/unit_test/type_assertions.rbs +211 -0
- data/sig/unit_test/with_aliases.rbs +136 -0
- data/sig/use_map.rbs +35 -0
- data/sig/util.rbs +9 -0
- data/sig/validator.rbs +63 -0
- data/sig/variance_calculator.rbs +87 -0
- data/sig/vendorer.rbs +51 -0
- data/sig/version.rbs +3 -0
- data/sig/visitor.rbs +47 -0
- data/sig/wasm/deserializer.rbs +66 -0
- data/sig/wasm/serialization_schema.rbs +13 -0
- data/sig/writer.rbs +127 -0
- data/src/ast.c +1628 -0
- data/src/lexer.c +3217 -0
- data/src/lexer.re +155 -0
- data/src/lexstate.c +217 -0
- data/src/location.c +31 -0
- data/src/parser.c +4255 -0
- data/src/serialize.c +958 -0
- data/src/string.c +41 -0
- data/src/util/rbs_allocator.c +162 -0
- data/src/util/rbs_assert.c +19 -0
- data/src/util/rbs_buffer.c +54 -0
- data/src/util/rbs_constant_pool.c +268 -0
- data/src/util/rbs_encoding.c +21308 -0
- data/src/util/rbs_unescape.c +167 -0
- data/stdlib/abbrev/0/abbrev.rbs +66 -0
- data/stdlib/abbrev/0/array.rbs +26 -0
- data/stdlib/base64/0/base64.rbs +355 -0
- data/stdlib/benchmark/0/benchmark.rbs +452 -0
- data/stdlib/bigdecimal/0/big_decimal.rbs +1647 -0
- data/stdlib/bigdecimal-math/0/big_math.rbs +280 -0
- data/stdlib/bigdecimal-math/0/manifest.yaml +2 -0
- data/stdlib/cgi/0/core.rbs +911 -0
- data/stdlib/cgi/0/manifest.yaml +4 -0
- data/stdlib/cgi-escape/0/escape.rbs +171 -0
- data/stdlib/coverage/0/coverage.rbs +266 -0
- data/stdlib/csv/0/csv.rbs +3776 -0
- data/stdlib/csv/0/manifest.yaml +3 -0
- data/stdlib/date/0/date.rbs +1598 -0
- data/stdlib/date/0/date_time.rbs +617 -0
- data/stdlib/date/0/time.rbs +26 -0
- data/stdlib/dbm/0/dbm.rbs +421 -0
- data/stdlib/delegate/0/delegator.rbs +187 -0
- data/stdlib/delegate/0/kernel.rbs +47 -0
- data/stdlib/delegate/0/simple_delegator.rbs +96 -0
- data/stdlib/did_you_mean/0/did_you_mean.rbs +344 -0
- data/stdlib/digest/0/digest.rbs +687 -0
- data/stdlib/erb/0/erb.rbs +933 -0
- data/stdlib/etc/0/etc.rbs +884 -0
- data/stdlib/fileutils/0/fileutils.rbs +1753 -0
- data/stdlib/find/0/find.rbs +49 -0
- data/stdlib/forwardable/0/forwardable.rbs +271 -0
- data/stdlib/io-console/0/io-console.rbs +414 -0
- data/stdlib/ipaddr/0/ipaddr.rbs +436 -0
- data/stdlib/json/0/json.rbs +1963 -0
- data/stdlib/kconv/0/kconv.rbs +166 -0
- data/stdlib/logger/0/formatter.rbs +45 -0
- data/stdlib/logger/0/log_device.rbs +100 -0
- data/stdlib/logger/0/logger.rbs +796 -0
- data/stdlib/logger/0/manifest.yaml +2 -0
- data/stdlib/logger/0/period.rbs +17 -0
- data/stdlib/logger/0/severity.rbs +34 -0
- data/stdlib/minitest/0/kernel.rbs +42 -0
- data/stdlib/minitest/0/minitest/abstract_reporter.rbs +52 -0
- data/stdlib/minitest/0/minitest/assertion.rbs +17 -0
- data/stdlib/minitest/0/minitest/assertions.rbs +590 -0
- data/stdlib/minitest/0/minitest/backtrace_filter.rbs +23 -0
- data/stdlib/minitest/0/minitest/bench_spec.rbs +102 -0
- data/stdlib/minitest/0/minitest/benchmark.rbs +259 -0
- data/stdlib/minitest/0/minitest/composite_reporter.rbs +25 -0
- 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/expectation.rbs +2 -0
- data/stdlib/minitest/0/minitest/expectations.rbs +21 -0
- data/stdlib/minitest/0/minitest/guard.rbs +64 -0
- data/stdlib/minitest/0/minitest/mock.rbs +64 -0
- data/stdlib/minitest/0/minitest/parallel/executor.rbs +46 -0
- data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +5 -0
- data/stdlib/minitest/0/minitest/parallel/test.rbs +3 -0
- data/stdlib/minitest/0/minitest/parallel.rbs +2 -0
- data/stdlib/minitest/0/minitest/pride_io.rbs +62 -0
- data/stdlib/minitest/0/minitest/pride_lol.rbs +19 -0
- data/stdlib/minitest/0/minitest/progress_reporter.rbs +11 -0
- data/stdlib/minitest/0/minitest/reportable.rbs +53 -0
- data/stdlib/minitest/0/minitest/reporter.rbs +5 -0
- data/stdlib/minitest/0/minitest/result.rbs +28 -0
- data/stdlib/minitest/0/minitest/runnable.rbs +163 -0
- data/stdlib/minitest/0/minitest/skip.rbs +6 -0
- data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +48 -0
- data/stdlib/minitest/0/minitest/spec/dsl.rbs +129 -0
- data/stdlib/minitest/0/minitest/spec.rbs +11 -0
- data/stdlib/minitest/0/minitest/statistics_reporter.rbs +81 -0
- data/stdlib/minitest/0/minitest/summary_reporter.rbs +18 -0
- data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +92 -0
- data/stdlib/minitest/0/minitest/test.rbs +69 -0
- data/stdlib/minitest/0/minitest/unexpected_error.rbs +12 -0
- data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
- data/stdlib/minitest/0/minitest/unit/test_case.rbs +3 -0
- data/stdlib/minitest/0/minitest/unit.rbs +4 -0
- data/stdlib/minitest/0/minitest.rbs +115 -0
- data/stdlib/monitor/0/monitor.rbs +363 -0
- data/stdlib/mutex_m/0/mutex_m.rbs +104 -0
- data/stdlib/net-http/0/manifest.yaml +3 -0
- data/stdlib/net-http/0/net-http.rbs +5580 -0
- data/stdlib/net-protocol/0/manifest.yaml +2 -0
- data/stdlib/net-protocol/0/net-protocol.rbs +56 -0
- data/stdlib/net-smtp/0/manifest.yaml +2 -0
- data/stdlib/net-smtp/0/net-smtp.rbs +55 -0
- data/stdlib/nkf/0/nkf.rbs +402 -0
- data/stdlib/objspace/0/objspace.rbs +470 -0
- data/stdlib/observable/0/observable.rbs +217 -0
- data/stdlib/open-uri/0/manifest.yaml +4 -0
- data/stdlib/open-uri/0/open-uri.rbs +433 -0
- data/stdlib/open3/0/open3.rbs +606 -0
- data/stdlib/openssl/0/manifest.yaml +3 -0
- data/stdlib/openssl/0/openssl.rbs +12231 -0
- data/stdlib/optparse/0/optparse.rbs +1734 -0
- data/stdlib/pathname/0/pathname.rbs +36 -0
- data/stdlib/pp/0/manifest.yaml +2 -0
- data/stdlib/pp/0/pp.rbs +301 -0
- data/stdlib/prettyprint/0/prettyprint.rbs +383 -0
- data/stdlib/pstore/0/pstore.rbs +608 -0
- data/stdlib/psych/0/core_ext.rbs +12 -0
- data/stdlib/psych/0/dbm.rbs +237 -0
- data/stdlib/psych/0/manifest.yaml +3 -0
- data/stdlib/psych/0/psych.rbs +455 -0
- data/stdlib/psych/0/store.rbs +57 -0
- data/stdlib/pty/0/pty.rbs +240 -0
- data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
- data/stdlib/rdoc/0/code_object.rbs +52 -0
- data/stdlib/rdoc/0/comment.rbs +61 -0
- data/stdlib/rdoc/0/context.rbs +153 -0
- data/stdlib/rdoc/0/markup.rbs +117 -0
- data/stdlib/rdoc/0/options.rbs +76 -0
- data/stdlib/rdoc/0/parser.rbs +56 -0
- data/stdlib/rdoc/0/rdoc.rbs +393 -0
- data/stdlib/rdoc/0/ri.rbs +17 -0
- data/stdlib/rdoc/0/store.rbs +48 -0
- data/stdlib/rdoc/0/top_level.rbs +97 -0
- data/stdlib/resolv/0/manifest.yaml +3 -0
- data/stdlib/resolv/0/resolv.rbs +1787 -0
- data/stdlib/ripper/0/ripper.rbs +1654 -0
- data/stdlib/securerandom/0/manifest.yaml +2 -0
- data/stdlib/securerandom/0/securerandom.rbs +49 -0
- data/stdlib/shellwords/0/shellwords.rbs +229 -0
- data/stdlib/singleton/0/singleton.rbs +134 -0
- data/stdlib/socket/0/addrinfo.rbs +666 -0
- data/stdlib/socket/0/basic_socket.rbs +590 -0
- data/stdlib/socket/0/constants.rbs +2295 -0
- data/stdlib/socket/0/ip_socket.rbs +94 -0
- data/stdlib/socket/0/socket.rbs +4170 -0
- data/stdlib/socket/0/socket_error.rbs +5 -0
- data/stdlib/socket/0/tcp_server.rbs +192 -0
- data/stdlib/socket/0/tcp_socket.rbs +87 -0
- data/stdlib/socket/0/udp_socket.rbs +133 -0
- data/stdlib/socket/0/unix_server.rbs +169 -0
- data/stdlib/socket/0/unix_socket.rbs +172 -0
- data/stdlib/stringio/0/stringio.rbs +1681 -0
- data/stdlib/strscan/0/string_scanner.rbs +1648 -0
- data/stdlib/tempfile/0/tempfile.rbs +483 -0
- data/stdlib/time/0/time.rbs +434 -0
- data/stdlib/timeout/0/timeout.rbs +137 -0
- data/stdlib/tmpdir/0/tmpdir.rbs +69 -0
- data/stdlib/tsort/0/cyclic.rbs +8 -0
- data/stdlib/tsort/0/interfaces.rbs +20 -0
- data/stdlib/tsort/0/tsort.rbs +410 -0
- data/stdlib/uri/0/common.rbs +621 -0
- data/stdlib/uri/0/file.rbs +118 -0
- data/stdlib/uri/0/ftp.rbs +13 -0
- data/stdlib/uri/0/generic.rbs +1116 -0
- data/stdlib/uri/0/http.rbs +104 -0
- data/stdlib/uri/0/https.rbs +14 -0
- data/stdlib/uri/0/ldap.rbs +230 -0
- data/stdlib/uri/0/ldaps.rbs +14 -0
- data/stdlib/uri/0/mailto.rbs +92 -0
- data/stdlib/uri/0/rfc2396_parser.rbs +189 -0
- data/stdlib/uri/0/rfc3986_parser.rbs +2 -0
- data/stdlib/uri/0/ws.rbs +13 -0
- data/stdlib/uri/0/wss.rbs +9 -0
- data/stdlib/yaml/0/manifest.yaml +2 -0
- data/stdlib/yaml/0/yaml.rbs +1 -0
- data/stdlib/zlib/0/buf_error.rbs +10 -0
- data/stdlib/zlib/0/data_error.rbs +10 -0
- data/stdlib/zlib/0/deflate.rbs +211 -0
- data/stdlib/zlib/0/error.rbs +20 -0
- data/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
- data/stdlib/zlib/0/gzip_file/error.rbs +23 -0
- data/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
- data/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
- data/stdlib/zlib/0/gzip_file.rbs +156 -0
- data/stdlib/zlib/0/gzip_reader.rbs +293 -0
- data/stdlib/zlib/0/gzip_writer.rbs +168 -0
- data/stdlib/zlib/0/inflate.rbs +180 -0
- data/stdlib/zlib/0/mem_error.rbs +10 -0
- data/stdlib/zlib/0/need_dict.rbs +13 -0
- data/stdlib/zlib/0/stream_end.rbs +11 -0
- data/stdlib/zlib/0/stream_error.rbs +11 -0
- data/stdlib/zlib/0/version_error.rbs +11 -0
- data/stdlib/zlib/0/zlib.rbs +449 -0
- data/stdlib/zlib/0/zstream.rbs +201 -0
- data/wasm/README.md +59 -0
- data/wasm/rbs_wasm.c +411 -0
- metadata +660 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file defines.h
|
|
3
|
+
*
|
|
4
|
+
* Macro definitions used throughout the rbs library.
|
|
5
|
+
*
|
|
6
|
+
* This file should be included first by any *.h or *.c in rbs for consistency
|
|
7
|
+
* and to ensure that the macros are defined before they are used.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
#ifndef RBS_DEFINES_H
|
|
11
|
+
#define RBS_DEFINES_H
|
|
12
|
+
|
|
13
|
+
/***********************************************************************************************************************
|
|
14
|
+
* Copied+modified subset of Prism's `include/prism/defines.h` *
|
|
15
|
+
**********************************************************************************************************************/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Certain compilers support specifying that a function accepts variadic
|
|
19
|
+
* parameters that look like printf format strings to provide a better developer
|
|
20
|
+
* experience when someone is using the function. This macro does that in a
|
|
21
|
+
* compiler-agnostic way.
|
|
22
|
+
*/
|
|
23
|
+
#if defined(__GNUC__)
|
|
24
|
+
#if defined(__MINGW_PRINTF_FORMAT)
|
|
25
|
+
#define RBS_ATTRIBUTE_FORMAT(string_index, argument_index) __attribute__((format(__MINGW_PRINTF_FORMAT, string_index, argument_index)))
|
|
26
|
+
#else
|
|
27
|
+
#define RBS_ATTRIBUTE_FORMAT(string_index, argument_index) __attribute__((format(printf, string_index, argument_index)))
|
|
28
|
+
#endif
|
|
29
|
+
#elif defined(__clang__)
|
|
30
|
+
#define RBS_ATTRIBUTE_FORMAT(string_index, argument_index) __attribute__((__format__(__printf__, string_index, argument_index)))
|
|
31
|
+
#else
|
|
32
|
+
#define RBS_ATTRIBUTE_FORMAT(string_index, argument_index)
|
|
33
|
+
#endif
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Support RBS_LIKELY and RBS_UNLIKELY to help the compiler optimize its
|
|
37
|
+
* branch predication.
|
|
38
|
+
*/
|
|
39
|
+
#if defined(__GNUC__) || defined(__clang__)
|
|
40
|
+
/** The compiler should predicate that this branch will be taken. */
|
|
41
|
+
#define RBS_LIKELY(x) __builtin_expect(!!(x), 1)
|
|
42
|
+
|
|
43
|
+
/** The compiler should predicate that this branch will not be taken. */
|
|
44
|
+
#define RBS_UNLIKELY(x) __builtin_expect(!!(x), 0)
|
|
45
|
+
#else
|
|
46
|
+
/** Void because this platform does not support branch prediction hints. */
|
|
47
|
+
#define RBS_LIKELY(x) (x)
|
|
48
|
+
|
|
49
|
+
/** Void because this platform does not support branch prediction hints. */
|
|
50
|
+
#define RBS_UNLIKELY(x) (x)
|
|
51
|
+
#endif
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* We use -Wimplicit-fallthrough to guard potentially unintended fall-through between cases of a switch.
|
|
55
|
+
* Use RBS_FALLTHROUGH to explicitly annotate cases where the fallthrough is intentional.
|
|
56
|
+
*/
|
|
57
|
+
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L // C23 or later
|
|
58
|
+
#define RBS_FALLTHROUGH [[fallthrough]];
|
|
59
|
+
#elif defined(__GNUC__) || defined(__clang__)
|
|
60
|
+
#define RBS_FALLTHROUGH __attribute__((fallthrough));
|
|
61
|
+
#elif defined(_MSC_VER)
|
|
62
|
+
#define RBS_FALLTHROUGH __fallthrough;
|
|
63
|
+
#else
|
|
64
|
+
#define RBS_FALLTHROUGH
|
|
65
|
+
#endif
|
|
66
|
+
|
|
67
|
+
/***********************************************************************************************************************
|
|
68
|
+
* Custom defines for RBS *
|
|
69
|
+
**********************************************************************************************************************/
|
|
70
|
+
|
|
71
|
+
#if defined(_MSC_VER)
|
|
72
|
+
#define NODISCARD _Check_return_
|
|
73
|
+
#else
|
|
74
|
+
#define NODISCARD __attribute__((warn_unused_result))
|
|
75
|
+
#endif
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Mark a function or variable as potentially unused to suppress compiler warnings.
|
|
79
|
+
*/
|
|
80
|
+
#if defined(__GNUC__) || defined(__clang__)
|
|
81
|
+
#define RBS_ATTRIBUTE_UNUSED __attribute__((unused))
|
|
82
|
+
#else
|
|
83
|
+
#define RBS_ATTRIBUTE_UNUSED
|
|
84
|
+
#endif
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Nullability annotations for pointer types.
|
|
88
|
+
* Clang supports _Nullable and _Nonnull to indicate whether a pointer may be NULL.
|
|
89
|
+
* On other compilers, these expand to nothing.
|
|
90
|
+
*/
|
|
91
|
+
#ifdef __clang__
|
|
92
|
+
#define RBS_NULLABLE _Nullable
|
|
93
|
+
#define RBS_NONNULL _Nonnull
|
|
94
|
+
#else
|
|
95
|
+
#define RBS_NULLABLE
|
|
96
|
+
#define RBS_NONNULL
|
|
97
|
+
#endif
|
|
98
|
+
|
|
99
|
+
#endif
|
data/include/rbs/lexer.h
ADDED
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
#ifndef RBS__LEXER_H
|
|
2
|
+
#define RBS__LEXER_H
|
|
3
|
+
|
|
4
|
+
#include "string.h"
|
|
5
|
+
#include "util/rbs_encoding.h"
|
|
6
|
+
|
|
7
|
+
enum RBSTokenType {
|
|
8
|
+
NullType, /* (Nothing) */
|
|
9
|
+
pEOF, /* EOF */
|
|
10
|
+
ErrorToken, /* Error */
|
|
11
|
+
|
|
12
|
+
pLPAREN, /* ( */
|
|
13
|
+
pRPAREN, /* ) */
|
|
14
|
+
pCOLON, /* : */
|
|
15
|
+
pCOLON2, /* :: */
|
|
16
|
+
pLBRACKET, /* [ */
|
|
17
|
+
pRBRACKET, /* ] */
|
|
18
|
+
pLBRACE, /* { */
|
|
19
|
+
pRBRACE, /* } */
|
|
20
|
+
pHAT, /* ^ */
|
|
21
|
+
pARROW, /* -> */
|
|
22
|
+
pFATARROW, /* => */
|
|
23
|
+
pCOMMA, /* , */
|
|
24
|
+
pBAR, /* | */
|
|
25
|
+
pAMP, /* & */
|
|
26
|
+
pSTAR, /* * */
|
|
27
|
+
pSTAR2, /* ** */
|
|
28
|
+
pDOT, /* . */
|
|
29
|
+
pDOT3, /* ... */
|
|
30
|
+
pBANG, /* ! */
|
|
31
|
+
pQUESTION, /* ? */
|
|
32
|
+
pLT, /* < */
|
|
33
|
+
pGT, /* > */
|
|
34
|
+
pEQ, /* = */
|
|
35
|
+
|
|
36
|
+
kALIAS, /* alias */
|
|
37
|
+
kATTRACCESSOR, /* attr_accessor */
|
|
38
|
+
kATTRREADER, /* attr_reader */
|
|
39
|
+
kATTRWRITER, /* attr_writer */
|
|
40
|
+
kBOOL, /* bool */
|
|
41
|
+
kBOT, /* bot */
|
|
42
|
+
kCLASS, /* class */
|
|
43
|
+
kCLASSALIAS, /* class-alias */
|
|
44
|
+
kDEF, /* def */
|
|
45
|
+
kEND, /* end */
|
|
46
|
+
kEXTEND, /* extend */
|
|
47
|
+
kFALSE, /* false */
|
|
48
|
+
kIN, /* in */
|
|
49
|
+
kINCLUDE, /* include */
|
|
50
|
+
kINSTANCE, /* instance */
|
|
51
|
+
kINTERFACE, /* interface */
|
|
52
|
+
kMODULE, /* module */
|
|
53
|
+
kMODULEALIAS, /* module-alias */
|
|
54
|
+
kNIL, /* nil */
|
|
55
|
+
kOUT, /* out */
|
|
56
|
+
kPREPEND, /* prepend */
|
|
57
|
+
kPRIVATE, /* private */
|
|
58
|
+
kPUBLIC, /* public */
|
|
59
|
+
kSELF, /* self */
|
|
60
|
+
kSINGLETON, /* singleton */
|
|
61
|
+
kTOP, /* top */
|
|
62
|
+
kTRUE, /* true */
|
|
63
|
+
kTYPE, /* type */
|
|
64
|
+
kUNCHECKED, /* unchecked */
|
|
65
|
+
kUNTYPED, /* untyped */
|
|
66
|
+
kVOID, /* void */
|
|
67
|
+
kUSE, /* use */
|
|
68
|
+
kAS, /* as */
|
|
69
|
+
k__TODO__, /* __todo__ */
|
|
70
|
+
kATRBS, /* @rbs */
|
|
71
|
+
kSKIP, /* skip */
|
|
72
|
+
kRETURN, /* return */
|
|
73
|
+
kMODULESELF, /* module-self */
|
|
74
|
+
|
|
75
|
+
tLIDENT, /* Identifiers starting with lower case */
|
|
76
|
+
tUIDENT, /* Identifiers starting with upper case */
|
|
77
|
+
tULIDENT, /* Identifiers starting with `_` followed by upper case */
|
|
78
|
+
tULLIDENT, /* Identifiers starting with `_` followed by lower case */
|
|
79
|
+
tGIDENT, /* Identifiers starting with `$` */
|
|
80
|
+
tAIDENT, /* Identifiers starting with `@` */
|
|
81
|
+
tA2IDENT, /* Identifiers starting with `@@` */
|
|
82
|
+
tBANGIDENT, /* Identifiers ending with `!` */
|
|
83
|
+
tEQIDENT, /* Identifiers ending with `=` */
|
|
84
|
+
tQIDENT, /* Quoted identifier */
|
|
85
|
+
pAREF_OPR, /* [] */
|
|
86
|
+
tOPERATOR, /* Operator identifier */
|
|
87
|
+
|
|
88
|
+
tCOMMENT, /* Comment */
|
|
89
|
+
tLINECOMMENT, /* Comment of all line */
|
|
90
|
+
tINLINECOMMENT, /* Comment in inline decl starting with -- */
|
|
91
|
+
|
|
92
|
+
tTRIVIA, /* Trivia tokens -- space and new line */
|
|
93
|
+
|
|
94
|
+
tDQSTRING, /* Double quoted string */
|
|
95
|
+
tSQSTRING, /* Single quoted string */
|
|
96
|
+
tINTEGER, /* Integer */
|
|
97
|
+
tSYMBOL, /* Symbol */
|
|
98
|
+
tDQSYMBOL, /* Double quoted symbol */
|
|
99
|
+
tSQSYMBOL, /* Single quoted symbol */
|
|
100
|
+
tANNOTATION, /* Annotation */
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* The `byte_pos` (or `char_pos`) is the primary data.
|
|
105
|
+
* The rest are cache.
|
|
106
|
+
*
|
|
107
|
+
* They can be computed from `byte_pos` (or `char_pos`), but it needs full scan from the beginning of the string (depending on the encoding).
|
|
108
|
+
* */
|
|
109
|
+
typedef struct {
|
|
110
|
+
int byte_pos;
|
|
111
|
+
int char_pos;
|
|
112
|
+
int line;
|
|
113
|
+
int column;
|
|
114
|
+
} rbs_position_t;
|
|
115
|
+
|
|
116
|
+
typedef struct {
|
|
117
|
+
rbs_position_t start;
|
|
118
|
+
rbs_position_t end;
|
|
119
|
+
} rbs_range_t;
|
|
120
|
+
|
|
121
|
+
typedef struct {
|
|
122
|
+
enum RBSTokenType type;
|
|
123
|
+
rbs_range_t range;
|
|
124
|
+
} rbs_token_t;
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* The lexer state is the curren token.
|
|
128
|
+
*
|
|
129
|
+
* ```
|
|
130
|
+
#. 0.1.2.3.4.5.6.7.8.9.0.1.2.3.4.5.6
|
|
131
|
+
* ... " a s t r i n g t o k e n "
|
|
132
|
+
* ^ start position (0)
|
|
133
|
+
* ^ current position (6)
|
|
134
|
+
* ^ current character ('i', bytes = 1)
|
|
135
|
+
* ~~~~~~~~~~~ Token => "a str
|
|
136
|
+
* ```
|
|
137
|
+
* */
|
|
138
|
+
typedef struct {
|
|
139
|
+
rbs_string_t string;
|
|
140
|
+
int start_pos; /* The byte position that defines the start of the input */
|
|
141
|
+
int end_pos; /* The byte position that defines the end of the input */
|
|
142
|
+
rbs_position_t current; /* The current position: just before the current_character */
|
|
143
|
+
rbs_position_t start; /* The start position of the current token */
|
|
144
|
+
|
|
145
|
+
unsigned int current_code_point; /* Current character code point */
|
|
146
|
+
size_t current_character_bytes; /* Current character byte length (0 or 1~4) */
|
|
147
|
+
|
|
148
|
+
bool first_token_of_line; /* This flag is used for tLINECOMMENT */
|
|
149
|
+
|
|
150
|
+
const rbs_encoding_t *encoding;
|
|
151
|
+
} rbs_lexer_t;
|
|
152
|
+
|
|
153
|
+
extern const rbs_token_t NullToken;
|
|
154
|
+
extern const rbs_position_t NullPosition;
|
|
155
|
+
extern const rbs_range_t NULL_RANGE;
|
|
156
|
+
|
|
157
|
+
char *rbs_peek_token(rbs_lexer_t *lexer, rbs_token_t tok);
|
|
158
|
+
int rbs_token_chars(rbs_token_t tok);
|
|
159
|
+
int rbs_token_bytes(rbs_token_t tok);
|
|
160
|
+
|
|
161
|
+
#define rbs_null_position_p(pos) (pos.byte_pos == -1)
|
|
162
|
+
#define rbs_null_range_p(range) (range.start.byte_pos == -1)
|
|
163
|
+
#define rbs_nonnull_pos_or(pos1, pos2) (rbs_null_position_p(pos1) ? pos2 : pos1)
|
|
164
|
+
#define RBS_RANGE_BYTES(range) (range.end.byte_pos - range.start.byte_pos)
|
|
165
|
+
|
|
166
|
+
const char *rbs_token_type_str(enum RBSTokenType type);
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Returns the next character.
|
|
170
|
+
* */
|
|
171
|
+
unsigned int rbs_peek(rbs_lexer_t *lexer);
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Advances the current position by one character.
|
|
175
|
+
* */
|
|
176
|
+
void rbs_skip(rbs_lexer_t *lexer);
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Read next character and store the codepoint and byte length to the given pointers.
|
|
180
|
+
*
|
|
181
|
+
* This doesn't update the lexer state.
|
|
182
|
+
* Returns `true` if succeeded, or `false` if reached to EOF.
|
|
183
|
+
* */
|
|
184
|
+
bool rbs_next_char(rbs_lexer_t *lexer, unsigned int *codepoint, size_t *bytes);
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Skip n characters.
|
|
188
|
+
* */
|
|
189
|
+
void rbs_skipn(rbs_lexer_t *lexer, size_t size);
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Return new rbs_token_t with given type.
|
|
193
|
+
* */
|
|
194
|
+
rbs_token_t rbs_next_token(rbs_lexer_t *lexer, enum RBSTokenType type);
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Return new rbs_token_t with EOF type.
|
|
198
|
+
* */
|
|
199
|
+
rbs_token_t rbs_next_eof_token(rbs_lexer_t *lexer);
|
|
200
|
+
|
|
201
|
+
rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer);
|
|
202
|
+
|
|
203
|
+
void rbs_print_token(rbs_token_t tok);
|
|
204
|
+
|
|
205
|
+
void rbs_print_lexer(rbs_lexer_t *lexer);
|
|
206
|
+
|
|
207
|
+
#endif
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#ifndef RBS__RBS_LOCATION_H
|
|
2
|
+
#define RBS__RBS_LOCATION_H
|
|
3
|
+
|
|
4
|
+
#include "rbs/util/rbs_allocator.h"
|
|
5
|
+
|
|
6
|
+
#define RBS_LOCATION_NULL_RANGE ((rbs_location_range) { -1, -1, -1, -1 })
|
|
7
|
+
#define RBS_LOCATION_NULL_RANGE_P(rg) ((rg).start_char == -1)
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Converts a lexer range (rbs_range_t) to an AST location range (rbs_location_range) by extracting character and byte positions.
|
|
11
|
+
*/
|
|
12
|
+
#define RBS_RANGE_LEX2AST(rg) ((rbs_location_range) { .start_char = (rg).start.char_pos, .start_byte = (rg).start.byte_pos, .end_char = (rg).end.char_pos, .end_byte = (rg).end.byte_pos })
|
|
13
|
+
|
|
14
|
+
typedef struct {
|
|
15
|
+
int start_char;
|
|
16
|
+
int start_byte;
|
|
17
|
+
|
|
18
|
+
int end_char;
|
|
19
|
+
int end_byte;
|
|
20
|
+
} rbs_location_range;
|
|
21
|
+
|
|
22
|
+
typedef struct rbs_location_range_list_node {
|
|
23
|
+
rbs_location_range range;
|
|
24
|
+
struct rbs_location_range_list_node *next;
|
|
25
|
+
} rbs_location_range_list_node_t;
|
|
26
|
+
|
|
27
|
+
typedef struct rbs_location_range_list {
|
|
28
|
+
rbs_allocator_t *allocator;
|
|
29
|
+
struct rbs_location_range_list_node *head;
|
|
30
|
+
struct rbs_location_range_list_node *tail;
|
|
31
|
+
size_t length;
|
|
32
|
+
} rbs_location_range_list_t;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Allocate new rbs_location_range_list_t object through the given allocator.
|
|
36
|
+
*/
|
|
37
|
+
rbs_location_range_list_t *rbs_location_range_list_new(rbs_allocator_t *allocator);
|
|
38
|
+
void rbs_location_range_list_append(rbs_location_range_list_t *list, rbs_location_range range);
|
|
39
|
+
|
|
40
|
+
#endif
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
#ifndef RBS__PARSER_H
|
|
2
|
+
#define RBS__PARSER_H
|
|
3
|
+
|
|
4
|
+
#include "rbs/defines.h"
|
|
5
|
+
#include "rbs/util/rbs_allocator.h"
|
|
6
|
+
#include "rbs/util/rbs_constant_pool.h"
|
|
7
|
+
#include "rbs/lexer.h"
|
|
8
|
+
#include "rbs/ast.h"
|
|
9
|
+
|
|
10
|
+
#include <stdbool.h>
|
|
11
|
+
#include <stddef.h>
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* comment represents a sequence of comment lines.
|
|
15
|
+
*
|
|
16
|
+
* # Comment for the method.
|
|
17
|
+
* #
|
|
18
|
+
* # ```rb
|
|
19
|
+
* # object.foo() # Do something
|
|
20
|
+
* # ```
|
|
21
|
+
* #
|
|
22
|
+
* def foo: () -> void
|
|
23
|
+
*
|
|
24
|
+
* A comment object represents the six lines of comments.
|
|
25
|
+
* */
|
|
26
|
+
typedef struct rbs_comment_t {
|
|
27
|
+
rbs_position_t start;
|
|
28
|
+
rbs_position_t end;
|
|
29
|
+
|
|
30
|
+
size_t line_tokens_capacity;
|
|
31
|
+
size_t line_tokens_count;
|
|
32
|
+
rbs_token_t *line_tokens;
|
|
33
|
+
|
|
34
|
+
struct rbs_comment_t *next_comment;
|
|
35
|
+
} rbs_comment_t;
|
|
36
|
+
|
|
37
|
+
typedef struct rbs_error_t {
|
|
38
|
+
char *message;
|
|
39
|
+
rbs_token_t token;
|
|
40
|
+
bool syntax_error;
|
|
41
|
+
} rbs_error_t;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* An RBS parser is a LL(3) parser.
|
|
45
|
+
* */
|
|
46
|
+
typedef struct {
|
|
47
|
+
rbs_lexer_t *lexer;
|
|
48
|
+
|
|
49
|
+
rbs_token_t current_token;
|
|
50
|
+
rbs_token_t next_token; /* The first lookahead token */
|
|
51
|
+
rbs_token_t next_token2; /* The second lookahead token */
|
|
52
|
+
rbs_token_t next_token3; /* The third lookahead token */
|
|
53
|
+
|
|
54
|
+
struct id_table *vars; /* Known type variables */
|
|
55
|
+
rbs_comment_t *last_comment; /* Last read comment */
|
|
56
|
+
|
|
57
|
+
rbs_constant_pool_t constant_pool;
|
|
58
|
+
rbs_allocator_t *allocator;
|
|
59
|
+
rbs_error_t *error;
|
|
60
|
+
} rbs_parser_t;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Insert new table entry.
|
|
64
|
+
* Setting `reset` inserts a _reset_ entry, which stops searching.
|
|
65
|
+
*
|
|
66
|
+
* ```
|
|
67
|
+
* class Foo[A]
|
|
68
|
+
* ^^^ <= push new table with reset
|
|
69
|
+
* def foo: [B] () -> [A, B]
|
|
70
|
+
* ^^^ <= push new table without reset
|
|
71
|
+
*
|
|
72
|
+
* class Baz[C]
|
|
73
|
+
* ^^^ <= push new table with reset
|
|
74
|
+
* end
|
|
75
|
+
* end
|
|
76
|
+
* ```
|
|
77
|
+
* */
|
|
78
|
+
void rbs_parser_push_typevar_table(rbs_parser_t *parser, bool reset);
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Insert new type variable into the latest table.
|
|
82
|
+
* */
|
|
83
|
+
NODISCARD bool rbs_parser_insert_typevar(rbs_parser_t *parser, rbs_constant_id_t id);
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Allocate new rbs_lexer_t object.
|
|
87
|
+
*
|
|
88
|
+
* ```
|
|
89
|
+
* VALUE string = rb_funcall(buffer, rb_intern("content"), 0);
|
|
90
|
+
* rbs_lexer_new(string, 0, 31) // New rbs_lexer_t with buffer content
|
|
91
|
+
* ```
|
|
92
|
+
* */
|
|
93
|
+
rbs_lexer_t *rbs_lexer_new(rbs_allocator_t *, rbs_string_t string, const rbs_encoding_t *encoding, int start_pos, int end_pos);
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Allocate new rbs_parser_t object.
|
|
97
|
+
*
|
|
98
|
+
* ```
|
|
99
|
+
* rbs_parser_new(buffer, string, encoding, 0, 1);
|
|
100
|
+
* ```
|
|
101
|
+
* */
|
|
102
|
+
rbs_parser_t *rbs_parser_new(rbs_string_t string, const rbs_encoding_t *encoding, int start_pos, int end_pos);
|
|
103
|
+
void rbs_parser_free(rbs_parser_t *parser);
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Advance one token.
|
|
107
|
+
* */
|
|
108
|
+
void rbs_parser_advance(rbs_parser_t *parser);
|
|
109
|
+
|
|
110
|
+
void rbs_parser_print(rbs_parser_t *parser);
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Returns a RBS::Comment object associated with an subject at `subject_line`.
|
|
114
|
+
*
|
|
115
|
+
* ```rbs
|
|
116
|
+
* # Comment1
|
|
117
|
+
* class Foo # This is the subject line for Comment1
|
|
118
|
+
*
|
|
119
|
+
* # Comment2
|
|
120
|
+
* %a{annotation} # This is the subject line for Comment2
|
|
121
|
+
* def foo: () -> void
|
|
122
|
+
* end
|
|
123
|
+
* ```
|
|
124
|
+
* */
|
|
125
|
+
rbs_ast_comment_t *rbs_parser_get_comment(rbs_parser_t *parser, int subject_line);
|
|
126
|
+
|
|
127
|
+
void rbs_parser_set_error(rbs_parser_t *parser, rbs_token_t tok, bool syntax_error, const char *fmt, ...) RBS_ATTRIBUTE_FORMAT(4, 5);
|
|
128
|
+
|
|
129
|
+
bool rbs_parse_type(rbs_parser_t *parser, rbs_node_t **type, bool void_allowed, bool self_allowed, bool classish_allowed);
|
|
130
|
+
bool rbs_parse_method_type(rbs_parser_t *parser, rbs_method_type_t **method_type, bool require_eof, bool classish_allowed);
|
|
131
|
+
bool rbs_parse_signature(rbs_parser_t *parser, rbs_signature_t **signature);
|
|
132
|
+
|
|
133
|
+
bool rbs_parse_type_params(rbs_parser_t *parser, bool module_type_params, rbs_node_list_t **params);
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Parse an inline leading annotation from a string.
|
|
137
|
+
*
|
|
138
|
+
* @param parser The parser to use
|
|
139
|
+
* @param annotation Pointer to store the resulting annotation
|
|
140
|
+
* @return true if parsing succeeded, false otherwise
|
|
141
|
+
*/
|
|
142
|
+
bool rbs_parse_inline_leading_annotation(rbs_parser_t *parser, rbs_ast_ruby_annotations_t **annotation);
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Parse an inline trailing annotation from a string.
|
|
146
|
+
*
|
|
147
|
+
* @param parser The parser to use
|
|
148
|
+
* @param annotation Pointer to store the resulting annotation
|
|
149
|
+
* @return true if parsing succeeded, false otherwise
|
|
150
|
+
*/
|
|
151
|
+
bool rbs_parse_inline_trailing_annotation(rbs_parser_t *parser, rbs_ast_ruby_annotations_t **annotation);
|
|
152
|
+
|
|
153
|
+
#endif
|
|
@@ -0,0 +1,39 @@
|
|
|
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/serialize.h.erb */
|
|
6
|
+
/*----------------------------------------------------------------------------*/
|
|
7
|
+
|
|
8
|
+
#ifndef RBS__SERIALIZE_H
|
|
9
|
+
#define RBS__SERIALIZE_H
|
|
10
|
+
|
|
11
|
+
#include "rbs/ast.h"
|
|
12
|
+
#include "rbs/string.h"
|
|
13
|
+
#include "rbs/util/rbs_allocator.h"
|
|
14
|
+
#include "rbs/util/rbs_constant_pool.h"
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Serialize a parsed AST node into a compact, portable binary buffer.
|
|
18
|
+
*
|
|
19
|
+
* The format is consumed by RBS::WASM::Deserializer on the Ruby side, which
|
|
20
|
+
* rebuilds the same `RBS::AST` objects that the C extension would have built
|
|
21
|
+
* directly. This is what lets RBS run on Ruby implementations that cannot load
|
|
22
|
+
* the C extension (notably JRuby): the parser runs inside WebAssembly, produces
|
|
23
|
+
* this buffer, and the host reconstructs the tree in pure Ruby.
|
|
24
|
+
*
|
|
25
|
+
* The buffer is allocated from `allocator`, so its lifetime is tied to that
|
|
26
|
+
* allocator. `constant_pool` must be the pool the node was parsed with; it is
|
|
27
|
+
* used to resolve interned symbol/identifier ids back into their bytes.
|
|
28
|
+
*
|
|
29
|
+
* See `docs/wasm_serialization.md` for the wire format.
|
|
30
|
+
*/
|
|
31
|
+
rbs_string_t rbs_serialize_node(rbs_allocator_t *allocator, rbs_constant_pool_t *constant_pool, rbs_node_t *node);
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Like rbs_serialize_node, but for a bare node list (e.g. the result of
|
|
35
|
+
* rbs_parse_type_params). Decoded by RBS::WASM::Deserializer.deserialize_node_list.
|
|
36
|
+
*/
|
|
37
|
+
rbs_string_t rbs_serialize_node_list(rbs_allocator_t *allocator, rbs_constant_pool_t *constant_pool, rbs_node_list_t *list);
|
|
38
|
+
|
|
39
|
+
#endif
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#ifndef RBS__RBS_STRING_H
|
|
2
|
+
#define RBS__RBS_STRING_H
|
|
3
|
+
|
|
4
|
+
#include <stddef.h>
|
|
5
|
+
#include <stdbool.h>
|
|
6
|
+
#include "rbs/util/rbs_allocator.h"
|
|
7
|
+
|
|
8
|
+
typedef struct {
|
|
9
|
+
const char *start;
|
|
10
|
+
const char *end;
|
|
11
|
+
} rbs_string_t;
|
|
12
|
+
|
|
13
|
+
#define RBS_STRING_NULL ((rbs_string_t) { \
|
|
14
|
+
.start = NULL, \
|
|
15
|
+
.end = NULL, \
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Returns a new `rbs_string_t` struct
|
|
20
|
+
*/
|
|
21
|
+
rbs_string_t rbs_string_new(const char *start, const char *end);
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Copies a portion of the input string into a new owned string.
|
|
25
|
+
* @param start_inset Number of characters to exclude from the start
|
|
26
|
+
* @param length Number of characters to include
|
|
27
|
+
* @return A new owned string that will be freed when the allocator is freed.
|
|
28
|
+
*/
|
|
29
|
+
rbs_string_t rbs_string_copy_slice(rbs_allocator_t *, rbs_string_t *self, size_t start_inset, size_t length);
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Drops the leading and trailing whitespace from the given string, in-place.
|
|
33
|
+
* @returns A new string that provides a view into the original string `self`.
|
|
34
|
+
*/
|
|
35
|
+
rbs_string_t rbs_string_strip_whitespace(rbs_string_t *self);
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Returns the length of the string.
|
|
39
|
+
*/
|
|
40
|
+
size_t rbs_string_len(const rbs_string_t self);
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Compares two strings for equality.
|
|
44
|
+
*/
|
|
45
|
+
bool rbs_string_equal(const rbs_string_t lhs, const rbs_string_t rhs);
|
|
46
|
+
|
|
47
|
+
#endif
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
#ifndef RBS_ALLOCATOR_H
|
|
2
|
+
#define RBS_ALLOCATOR_H
|
|
3
|
+
|
|
4
|
+
#include <stddef.h>
|
|
5
|
+
|
|
6
|
+
/* Include stdalign.h for C11 and later for alignof support */
|
|
7
|
+
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
|
|
8
|
+
#include <stdalign.h>
|
|
9
|
+
#endif
|
|
10
|
+
|
|
11
|
+
/*
|
|
12
|
+
* Define a portable alignment macro that works across all supported environments
|
|
13
|
+
*/
|
|
14
|
+
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
|
|
15
|
+
/* C11 or later - use _Alignof directly (always available in C11+) */
|
|
16
|
+
#define rbs_alignof(type) _Alignof(type)
|
|
17
|
+
#elif defined(__cplusplus) && __cplusplus >= 201103L
|
|
18
|
+
/* C++11 or later has alignof keyword */
|
|
19
|
+
#define rbs_alignof(type) alignof(type)
|
|
20
|
+
#elif defined(__GNUC__) || defined(__clang__)
|
|
21
|
+
/* GCC and Clang provide __alignof__ */
|
|
22
|
+
#define rbs_alignof(type) __alignof__(type)
|
|
23
|
+
#elif defined(_MSC_VER)
|
|
24
|
+
/* MSVC provides __alignof */
|
|
25
|
+
#define rbs_alignof(type) __alignof(type)
|
|
26
|
+
#else
|
|
27
|
+
/* Fallback using offset trick for other compilers */
|
|
28
|
+
#define rbs_alignof(type) offsetof( \
|
|
29
|
+
struct { char c; type member; }, \
|
|
30
|
+
member \
|
|
31
|
+
)
|
|
32
|
+
#endif
|
|
33
|
+
|
|
34
|
+
typedef struct rbs_allocator {
|
|
35
|
+
// The head of a linked list of pages, starting with the most recently allocated page.
|
|
36
|
+
struct rbs_allocator_page *page;
|
|
37
|
+
|
|
38
|
+
size_t default_page_payload_size;
|
|
39
|
+
} rbs_allocator_t;
|
|
40
|
+
|
|
41
|
+
rbs_allocator_t *rbs_allocator_init(void);
|
|
42
|
+
void rbs_allocator_free(rbs_allocator_t *);
|
|
43
|
+
void *rbs_allocator_malloc_impl(rbs_allocator_t *, /* 1 */ size_t size, size_t alignment);
|
|
44
|
+
void *rbs_allocator_malloc_many_impl(rbs_allocator_t *, size_t count, size_t size, size_t alignment);
|
|
45
|
+
void *rbs_allocator_calloc_impl(rbs_allocator_t *, size_t count, size_t size, size_t alignment);
|
|
46
|
+
|
|
47
|
+
void *rbs_allocator_realloc_impl(rbs_allocator_t *, void *ptr, size_t old_size, size_t new_size, size_t alignment);
|
|
48
|
+
|
|
49
|
+
// Use this when allocating memory for a single instance of a type.
|
|
50
|
+
#define rbs_allocator_alloc(allocator, type) ((type *) rbs_allocator_malloc_impl((allocator), sizeof(type), rbs_alignof(type)))
|
|
51
|
+
// Use this when allocating memory that will be immediately written to in full.
|
|
52
|
+
// Such as allocating strings
|
|
53
|
+
#define rbs_allocator_alloc_many(allocator, count, type) ((type *) rbs_allocator_malloc_many_impl((allocator), (count), sizeof(type), rbs_alignof(type)))
|
|
54
|
+
// Use this when allocating memory that will NOT be immediately written to in full.
|
|
55
|
+
// Such as allocating buffers
|
|
56
|
+
#define rbs_allocator_calloc(allocator, count, type) ((type *) rbs_allocator_calloc_impl((allocator), (count), sizeof(type), rbs_alignof(type)))
|
|
57
|
+
#define rbs_allocator_realloc(allocator, ptr, old_size, new_size, type) ((type *) rbs_allocator_realloc_impl((allocator), (ptr), (old_size), (new_size), rbs_alignof(type)))
|
|
58
|
+
|
|
59
|
+
#endif
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#ifndef RBS_ASSERT_H
|
|
2
|
+
#define RBS_ASSERT_H
|
|
3
|
+
|
|
4
|
+
#include "rbs/defines.h"
|
|
5
|
+
#include <stdbool.h>
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* RBS_ASSERT macro that calls rbs_assert in debug builds and is removed in release builds.
|
|
9
|
+
* In debug mode, it forwards all arguments to the rbs_assert function.
|
|
10
|
+
* In release mode, it expands to nothing.
|
|
11
|
+
*/
|
|
12
|
+
#ifdef NDEBUG
|
|
13
|
+
#define RBS_ASSERT(condition, ...) ((void) 0)
|
|
14
|
+
#else
|
|
15
|
+
#define RBS_ASSERT(condition, ...) rbs_assert_impl(condition, __VA_ARGS__)
|
|
16
|
+
#endif
|
|
17
|
+
|
|
18
|
+
void rbs_assert_impl(bool condition, const char *fmt, ...) RBS_ATTRIBUTE_FORMAT(2, 3);
|
|
19
|
+
|
|
20
|
+
#endif
|