Class: Orthoses::Fiddle::Importer
- Inherits:
-
Object
- Object
- Orthoses::Fiddle::Importer
- Includes:
- Fiddle::Types
- Defined in:
- lib/orthoses/fiddle/importer.rb
Instance Method Summary collapse
- #call ⇒ Object
- #fiddle_to_rbs(fiddle_type, before: nil) ⇒ Object
-
#initialize(loader) ⇒ Importer
constructor
A new instance of Importer.
Constructor Details
#initialize(loader) ⇒ Importer
Returns a new instance of Importer.
10 11 12 |
# File 'lib/orthoses/fiddle/importer.rb', line 10 def initialize(loader) @loader = loader end |
Instance Method Details
#call ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/orthoses/fiddle/importer.rb', line 14 def call extern = CallTracer.new store = extern.trace(::Fiddle::Importer.instance_method(:extern)) do @loader.call end extern.captures.each do |capture| base_name = Utils.module_name(capture.method.receiver) or next signature = capture.argument[:signature] name, return_type, argument_types = ::Fiddle::Importer.parse_signature(signature) args = argument_types.each_with_index.map do |fiddle_type, i| fiddle_to_rbs(fiddle_type, before: argument_types[i - 1]) end store[base_name] << "# extern \"#{capture.argument[:signature]}\"" store[base_name] << "def self.#{name}: (#{args.join(', ')}) -> #{fiddle_to_rbs(return_type)}" end store end |
#fiddle_to_rbs(fiddle_type, before: nil) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/orthoses/fiddle/importer.rb', line 34 def fiddle_to_rbs(fiddle_type, before: nil) case fiddle_type when VOID 'void' when VOIDP 'untyped' when CHAR, UCHAR, SHORT, USHORT, INT, UINT, LONG, ULONG, LONG_LONG, ULONG_LONG, INT8_T, UINT8_T, INT16_T, UINT16_T, INT32_T, UINT32_T, INT64_T, UINT64_T, SIZE_T, SSIZE_T, PTRDIFF_T, INTPTR_T, UINTPTR_T 'Integer' when FLOAT, DOUBLE 'Float' when CONST_STRING 'String' when VARIADIC unless before raise "Found unexpected signature" end "*#{fiddle_to_rbs(before)}" else if defined?(BOOL) && fiddle_type == BOOL 'bool' else raise "`#{fiddle_type}` is unsupported yat" end end end |