class RBS::WASM::Runtime
Loads rbs_parser.wasm into a JVM WebAssembly runtime (Chicory) and drives it. This is the JRuby counterpart of the C extension’s main.c: it copies a source string into the module’s linear memory, runs the parser, and returns the serialized result for RBS::WASM::Deserializer to rebuild.
Chicory is a pure-Java runtime, so there is no native dependency. The .wasm ships in the gem; the Chicory jars are fetched from Maven by jar-dependencies (see lib/rbs_jars.rb and rbs.gemspec).
Public Class Methods
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.1.1/lib/rbs/wasm/runtime.rb, line 20 def instance @instance ||= new end
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.1.1/lib/rbs/wasm/runtime.rb, line 29 def initialize super() # rbs_jars.rb require_jars the Chicory/ASM jars from the local Maven # repository (~/.m2), where jar-dependencies puts them at gem install (or # `rake wasm:install_jars` when running from source). require "rbs_jars" @wasm = build_instance @memory = @wasm.memory @alloc = @wasm.export("rbs_wasm_alloc") @free = @wasm.export("rbs_wasm_free") @result_ptr = @wasm.export("rbs_wasm_result_ptr") @result_len = @wasm.export("rbs_wasm_result_len") @parse_signature = @wasm.export("rbs_wasm_parse_signature") @parse_type = @wasm.export("rbs_wasm_parse_type") @parse_method_type = @wasm.export("rbs_wasm_parse_method_type") @parse_type_params = @wasm.export("rbs_wasm_parse_type_params") @parse_inline_leading_annotation = @wasm.export("rbs_wasm_parse_inline_leading_annotation") @parse_inline_trailing_annotation = @wasm.export("rbs_wasm_parse_inline_trailing_annotation") @lex = @wasm.export("rbs_wasm_lex") end
Calls superclass method
MonitorMixin::new
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.1.1/lib/rbs/wasm/runtime.rb, line 24 def wasm_path ENV["RBS_WASM_PARSER"] || File.expand_path("rbs_parser.wasm", __dir__) end
Public Instance Methods
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.1.1/lib/rbs/wasm/runtime.rb, line 97 def lex(content, encoding, end_pos) run(content, encoding) do |ptr, len, enc_ptr, enc_len| @lex.apply(ptr, len, enc_ptr, enc_len, end_pos)[0] end end
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.1.1/lib/rbs/wasm/runtime.rb, line 81 def parse_inline_leading_annotation(content, encoding, start_pos, end_pos, variables) with_variables(variables) do |vars_ptr, vars_len| run(content, encoding) do |ptr, len, enc_ptr, enc_len| @parse_inline_leading_annotation.apply(ptr, len, enc_ptr, enc_len, start_pos, end_pos, vars_ptr, vars_len)[0] end end end
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.1.1/lib/rbs/wasm/runtime.rb, line 89 def parse_inline_trailing_annotation(content, encoding, start_pos, end_pos, variables) with_variables(variables) do |vars_ptr, vars_len| run(content, encoding) do |ptr, len, enc_ptr, enc_len| @parse_inline_trailing_annotation.apply(ptr, len, enc_ptr, enc_len, start_pos, end_pos, vars_ptr, vars_len)[0] end end end
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.1.1/lib/rbs/wasm/runtime.rb, line 67 def parse_method_type(content, encoding, start_pos, end_pos, variables, require_eof) with_variables(variables) do |vars_ptr, vars_len| run(content, encoding) do |ptr, len, enc_ptr, enc_len| @parse_method_type.apply(ptr, len, enc_ptr, enc_len, start_pos, end_pos, vars_ptr, vars_len, bool(require_eof))[0] end end end
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.1.1/lib/rbs/wasm/runtime.rb, line 55 def parse_signature(content, encoding, start_pos, end_pos) run(content, encoding) { |ptr, len, enc_ptr, enc_len| @parse_signature.apply(ptr, len, enc_ptr, enc_len, start_pos, end_pos)[0] } end
content is the whole buffer; start_pos/end_pos are the character range within it to parse. Each method returns [success, bytes]: on success bytes is the serialized AST, otherwise it is the error blob (see set_error_result in rbs_wasm.c).
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.1.1/lib/rbs/wasm/runtime.rb, line 59 def parse_type(content, encoding, start_pos, end_pos, variables, require_eof, void_allowed, self_allowed, classish_allowed) with_variables(variables) do |vars_ptr, vars_len| run(content, encoding) do |ptr, len, enc_ptr, enc_len| @parse_type.apply(ptr, len, enc_ptr, enc_len, start_pos, end_pos, vars_ptr, vars_len, bool(require_eof), bool(void_allowed), bool(self_allowed), bool(classish_allowed))[0] end end end
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.1.1/lib/rbs/wasm/runtime.rb, line 75 def parse_type_params(content, encoding, start_pos, end_pos, module_type_params) run(content, encoding) do |ptr, len, enc_ptr, enc_len| @parse_type_params.apply(ptr, len, enc_ptr, enc_len, start_pos, end_pos, bool(module_type_params))[0] end end