ffi 1.17.0.rc1-aarch64-linux-musl
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +442 -0
- data/COPYING +49 -0
- data/Gemfile +21 -0
- data/LICENSE +24 -0
- data/LICENSE.SPECS +22 -0
- data/README.md +137 -0
- data/Rakefile +206 -0
- data/ffi.gemspec +42 -0
- data/lib/2.5/ffi_c.so +0 -0
- data/lib/2.6/ffi_c.so +0 -0
- data/lib/2.7/ffi_c.so +0 -0
- data/lib/3.0/ffi_c.so +0 -0
- data/lib/3.1/ffi_c.so +0 -0
- data/lib/3.2/ffi_c.so +0 -0
- data/lib/3.3/ffi_c.so +0 -0
- data/lib/ffi/abstract_memory.rb +44 -0
- data/lib/ffi/autopointer.rb +188 -0
- data/lib/ffi/buffer.rb +4 -0
- data/lib/ffi/callback.rb +4 -0
- data/lib/ffi/compat.rb +43 -0
- data/lib/ffi/data_converter.rb +67 -0
- data/lib/ffi/dynamic_library.rb +118 -0
- data/lib/ffi/enum.rb +302 -0
- data/lib/ffi/errno.rb +43 -0
- data/lib/ffi/ffi.rb +50 -0
- data/lib/ffi/function.rb +71 -0
- data/lib/ffi/io.rb +62 -0
- data/lib/ffi/library.rb +576 -0
- data/lib/ffi/library_path.rb +109 -0
- data/lib/ffi/managedstruct.rb +84 -0
- data/lib/ffi/memorypointer.rb +1 -0
- data/lib/ffi/platform/aarch64-darwin/types.conf +130 -0
- data/lib/ffi/platform/aarch64-freebsd/types.conf +128 -0
- data/lib/ffi/platform/aarch64-freebsd12/types.conf +181 -0
- data/lib/ffi/platform/aarch64-linux/types.conf +175 -0
- data/lib/ffi/platform/aarch64-openbsd/types.conf +134 -0
- data/lib/ffi/platform/aarch64-windows/types.conf +52 -0
- data/lib/ffi/platform/arm-freebsd/types.conf +152 -0
- data/lib/ffi/platform/arm-freebsd12/types.conf +152 -0
- data/lib/ffi/platform/arm-linux/types.conf +132 -0
- data/lib/ffi/platform/hppa1.1-linux/types.conf +178 -0
- data/lib/ffi/platform/hppa2.0-linux/types.conf +178 -0
- data/lib/ffi/platform/i386-cygwin/types.conf +3 -0
- data/lib/ffi/platform/i386-darwin/types.conf +100 -0
- data/lib/ffi/platform/i386-freebsd/types.conf +152 -0
- data/lib/ffi/platform/i386-freebsd12/types.conf +152 -0
- data/lib/ffi/platform/i386-gnu/types.conf +107 -0
- data/lib/ffi/platform/i386-linux/types.conf +103 -0
- data/lib/ffi/platform/i386-netbsd/types.conf +126 -0
- data/lib/ffi/platform/i386-openbsd/types.conf +128 -0
- data/lib/ffi/platform/i386-solaris/types.conf +122 -0
- data/lib/ffi/platform/i386-windows/types.conf +52 -0
- data/lib/ffi/platform/ia64-linux/types.conf +104 -0
- data/lib/ffi/platform/loongarch64-linux/types.conf +141 -0
- data/lib/ffi/platform/mips-linux/types.conf +102 -0
- data/lib/ffi/platform/mips64-linux/types.conf +104 -0
- data/lib/ffi/platform/mips64el-linux/types.conf +104 -0
- data/lib/ffi/platform/mipsel-linux/types.conf +102 -0
- data/lib/ffi/platform/mipsisa32r6-linux/types.conf +102 -0
- data/lib/ffi/platform/mipsisa32r6el-linux/types.conf +102 -0
- data/lib/ffi/platform/mipsisa64r6-linux/types.conf +104 -0
- data/lib/ffi/platform/mipsisa64r6el-linux/types.conf +104 -0
- data/lib/ffi/platform/powerpc-aix/types.conf +180 -0
- data/lib/ffi/platform/powerpc-darwin/types.conf +100 -0
- data/lib/ffi/platform/powerpc-linux/types.conf +130 -0
- data/lib/ffi/platform/powerpc-openbsd/types.conf +156 -0
- data/lib/ffi/platform/powerpc64-linux/types.conf +104 -0
- data/lib/ffi/platform/powerpc64le-linux/types.conf +100 -0
- data/lib/ffi/platform/riscv64-linux/types.conf +104 -0
- data/lib/ffi/platform/s390-linux/types.conf +102 -0
- data/lib/ffi/platform/s390x-linux/types.conf +102 -0
- data/lib/ffi/platform/sparc-linux/types.conf +102 -0
- data/lib/ffi/platform/sparc-solaris/types.conf +128 -0
- data/lib/ffi/platform/sparcv9-linux/types.conf +102 -0
- data/lib/ffi/platform/sparcv9-openbsd/types.conf +156 -0
- data/lib/ffi/platform/sparcv9-solaris/types.conf +128 -0
- data/lib/ffi/platform/sw_64-linux/types.conf +141 -0
- data/lib/ffi/platform/x86_64-cygwin/types.conf +3 -0
- data/lib/ffi/platform/x86_64-darwin/types.conf +130 -0
- data/lib/ffi/platform/x86_64-dragonflybsd/types.conf +130 -0
- data/lib/ffi/platform/x86_64-freebsd/types.conf +128 -0
- data/lib/ffi/platform/x86_64-freebsd12/types.conf +158 -0
- data/lib/ffi/platform/x86_64-haiku/types.conf +117 -0
- data/lib/ffi/platform/x86_64-linux/types.conf +132 -0
- data/lib/ffi/platform/x86_64-msys/types.conf +119 -0
- data/lib/ffi/platform/x86_64-netbsd/types.conf +128 -0
- data/lib/ffi/platform/x86_64-openbsd/types.conf +134 -0
- data/lib/ffi/platform/x86_64-solaris/types.conf +122 -0
- data/lib/ffi/platform/x86_64-windows/types.conf +52 -0
- data/lib/ffi/platform.rb +187 -0
- data/lib/ffi/pointer.rb +167 -0
- data/lib/ffi/struct.rb +317 -0
- data/lib/ffi/struct_by_reference.rb +72 -0
- data/lib/ffi/struct_layout.rb +96 -0
- data/lib/ffi/struct_layout_builder.rb +227 -0
- data/lib/ffi/tools/const_generator.rb +232 -0
- data/lib/ffi/tools/generator.rb +105 -0
- data/lib/ffi/tools/generator_task.rb +32 -0
- data/lib/ffi/tools/struct_generator.rb +195 -0
- data/lib/ffi/tools/types_generator.rb +137 -0
- data/lib/ffi/types.rb +222 -0
- data/lib/ffi/union.rb +43 -0
- data/lib/ffi/variadic.rb +80 -0
- data/lib/ffi/version.rb +3 -0
- data/lib/ffi.rb +27 -0
- data/rakelib/ffi_gem_helper.rb +65 -0
- data/samples/getlogin.rb +8 -0
- data/samples/getpid.rb +8 -0
- data/samples/gettimeofday.rb +18 -0
- data/samples/hello.rb +8 -0
- data/samples/hello_ractor.rb +11 -0
- data/samples/inotify.rb +60 -0
- data/samples/pty.rb +75 -0
- data/samples/qsort.rb +20 -0
- data/samples/qsort_ractor.rb +28 -0
- data/sig/ffi/abstract_memory.rbs +164 -0
- data/sig/ffi/auto_pointer.rbs +27 -0
- data/sig/ffi/buffer.rbs +18 -0
- data/sig/ffi/data_converter.rbs +10 -0
- data/sig/ffi/dynamic_library.rbs +9 -0
- data/sig/ffi/enum.rbs +38 -0
- data/sig/ffi/function.rbs +39 -0
- data/sig/ffi/library.rbs +42 -0
- data/sig/ffi/native_type.rbs +86 -0
- data/sig/ffi/pointer.rbs +42 -0
- data/sig/ffi/struct.rbs +76 -0
- data/sig/ffi/struct_by_reference.rbs +11 -0
- data/sig/ffi/struct_by_value.rbs +7 -0
- data/sig/ffi/struct_layout.rbs +9 -0
- data/sig/ffi/struct_layout_builder.rbs +5 -0
- data/sig/ffi/type.rbs +39 -0
- data/sig/ffi.rbs +26 -0
- metadata +244 -0
@@ -0,0 +1,10 @@
|
|
1
|
+
module FFI
|
2
|
+
interface _DataConverter[N, R, in C]
|
3
|
+
def from_native: (N value, C ctx) -> R
|
4
|
+
def native_type: (?ffi_auto_type? type) -> Type
|
5
|
+
def to_native: (R value, C ctx) -> N
|
6
|
+
end
|
7
|
+
module DataConverter[N, R, in C]
|
8
|
+
include _DataConverter[N, R, C]
|
9
|
+
end
|
10
|
+
end
|
data/sig/ffi/enum.rbs
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
module FFI
|
2
|
+
class Enums
|
3
|
+
def initialize: () -> void
|
4
|
+
|
5
|
+
def <<: (Enum enum) -> void
|
6
|
+
def __map_symbol: (Symbol symbol) -> Integer?
|
7
|
+
def find: (Symbol query) -> Enum
|
8
|
+
end
|
9
|
+
|
10
|
+
class Enum
|
11
|
+
include DataConverter[Integer, Symbol | Integer, untyped]
|
12
|
+
|
13
|
+
attr_reader native_type: Type
|
14
|
+
attr_reader tag: Symbol?
|
15
|
+
def initialize: (Enumerable[Symbol | Integer], ?Symbol? tag, *untyped) -> void
|
16
|
+
| (Type native_type, Enumerable[Symbol | Integer], ?Symbol? tag, *untyped) -> void
|
17
|
+
|
18
|
+
def []: (Symbol query) -> Integer?
|
19
|
+
| (Integer query) -> Symbol?
|
20
|
+
def symbol_map: () -> Hash[Symbol, Integer]
|
21
|
+
alias to_h symbol_map
|
22
|
+
alias to_hash symbol_map
|
23
|
+
def symbols: () -> Array[Symbol]
|
24
|
+
def to_native: (Symbol | int value, untyped ctx) -> Integer
|
25
|
+
end
|
26
|
+
|
27
|
+
class Bitmask < Enum
|
28
|
+
def initialize: ...
|
29
|
+
|
30
|
+
def []: (*Symbol query) -> Integer
|
31
|
+
| (Array[Symbol] query) -> Integer
|
32
|
+
| (*Integer query) -> Array[Symbol]
|
33
|
+
| (Array[Integer] query) -> Array[Symbol]
|
34
|
+
def from_native: (Integer, untyped ctx) -> Array[Symbol | Integer]
|
35
|
+
def to_native: (Array[Symbol | int] value, untyped ctx) -> Integer
|
36
|
+
| ...
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module FFI
|
2
|
+
interface _Function
|
3
|
+
# TODO: leads to a endless recursion when used with -rrbs/test/setup
|
4
|
+
# def attach: (Module mod, String name) -> self
|
5
|
+
def call: (*untyped args) -> untyped
|
6
|
+
def param_types: () -> Array[Type]
|
7
|
+
def return_type: () -> Type
|
8
|
+
end
|
9
|
+
|
10
|
+
class Function < Pointer
|
11
|
+
include _Function
|
12
|
+
# ?blocking: boolish?, ?convention: Library::convention?, ?enums: Enums?
|
13
|
+
def initialize:
|
14
|
+
(
|
15
|
+
ffi_type return_type, Array[ffi_type] param_types,
|
16
|
+
?Hash[Symbol, untyped] options
|
17
|
+
) { (*untyped) -> untyped } -> self
|
18
|
+
| (
|
19
|
+
ffi_type return_type, Array[ffi_type] param_types, Proc | Pointer proc,
|
20
|
+
?Hash[Symbol, untyped] options
|
21
|
+
) -> self
|
22
|
+
|
23
|
+
def autorelease?: ...
|
24
|
+
alias autorelease autorelease?
|
25
|
+
def autorelease=: ...
|
26
|
+
def free: () -> self
|
27
|
+
end
|
28
|
+
|
29
|
+
class VariadicInvoker
|
30
|
+
include _Function
|
31
|
+
def initialize:
|
32
|
+
(
|
33
|
+
Pointer function, Array[ffi_type] parameter_types, ffi_type return_type,
|
34
|
+
Hash[Symbol, untyped] options #TODO
|
35
|
+
) -> void
|
36
|
+
|
37
|
+
def invoke: (Array[Type] parameter_types, Array[untyped] parameter_values) -> untyped
|
38
|
+
end
|
39
|
+
end
|
data/sig/ffi/library.rbs
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
module FFI
|
2
|
+
module Library
|
3
|
+
type convention = :default | :stdcall
|
4
|
+
type ffi_lib_flag = :global | :local | :lazy | :now
|
5
|
+
type ffi_lib_type = ffi_auto_type | singleton(Struct)
|
6
|
+
|
7
|
+
CURRENT_PROCESS: current_process
|
8
|
+
LIBC: String
|
9
|
+
FlagsMap: Hash[ffi_lib_flag, Integer]
|
10
|
+
|
11
|
+
def self.extended: ...
|
12
|
+
|
13
|
+
def attach_function: ( _ToS func, Array[ffi_lib_type] args, ffi_lib_type? returns, ?blocking: boolish, ?convention: convention, ?enums: Enums, ?type_map: type_map) -> (Function | VariadicInvoker)
|
14
|
+
| (_ToS name, _ToS func, Array[ffi_lib_type] args, ?ffi_lib_type? returns, ?blocking: boolish, ?convention: convention, ?enums: Enums, ?type_map: type_map) -> (Function | VariadicInvoker)
|
15
|
+
def attach_variable: (?_ToS mname, _ToS cname, ffi_lib_type type) -> DynamicLibrary::Symbol
|
16
|
+
def attached_functions: () -> Hash[Symbol, Function | VariadicInvoker]
|
17
|
+
def attached_variables: () -> Hash[Symbol, Type | singleton(Struct)]
|
18
|
+
|
19
|
+
def bitmask: (?Type native_type, Symbol name, Array[Symbol | Integer] values) -> Bitmask
|
20
|
+
| (?Type native_type, *Symbol | Integer args) -> Bitmask
|
21
|
+
| (?Type native_type, Array[Symbol | Integer] values) -> Bitmask
|
22
|
+
def enum: (?Type native_type, Symbol name, Array[Symbol | Integer] values) -> Enum
|
23
|
+
| (?Type native_type, *Symbol | Integer args) -> Enum
|
24
|
+
| (?Type native_type, Array[Symbol | Integer] values) -> Enum
|
25
|
+
def enum_type: (Symbol name) -> Enum?
|
26
|
+
def enum_for: (Symbol name) -> Integer?
|
27
|
+
|
28
|
+
def callback: (?Symbol name, Array[ffi_lib_type] params, ffi_lib_type ret) -> CallbackInfo
|
29
|
+
def ffi_convention: (?convention? convention) -> convention
|
30
|
+
def ffi_lib: (*_ToS names) -> Array[DynamicLibrary]
|
31
|
+
def ffi_lib_flags: (*ffi_lib_flag flags) -> Integer
|
32
|
+
def ffi_libraries: () -> Array[DynamicLibrary]
|
33
|
+
def find_type: (ffi_lib_type t) -> Type
|
34
|
+
def freeze: () -> void
|
35
|
+
def function_names: (_ToS name, Array[Type | singleton(Struct)] arg_types) -> Array[String]
|
36
|
+
def typedef: [T < Type] (T old, Symbol | DataConverter add, ?untyped) -> T
|
37
|
+
| (Symbol old, Symbol add, ?untyped) -> (Type | Enum)
|
38
|
+
| [X < DataConverter[N, R, C], N, R, C] (X old, Symbol add, ?untyped) -> Type::Mapped[X, N, R, C]
|
39
|
+
| (:enum old, Array[Symbol | Integer] add, ?untyped) -> Enum
|
40
|
+
| (:enum old, Symbol | Type add, Array[Symbol | Integer] info) -> Enum
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module FFI
|
2
|
+
class Type
|
3
|
+
INT8: Builtin
|
4
|
+
SCHAR: Builtin
|
5
|
+
CHAR: Builtin
|
6
|
+
UINT8: Builtin
|
7
|
+
UCHAR: Builtin
|
8
|
+
INT16: Builtin
|
9
|
+
SHORT: Builtin
|
10
|
+
SSHORT: Builtin
|
11
|
+
UINT16: Builtin
|
12
|
+
USHORT: Builtin
|
13
|
+
INT32: Builtin
|
14
|
+
INT: Builtin
|
15
|
+
SINT: Builtin
|
16
|
+
UINT32: Builtin
|
17
|
+
UINT: Builtin
|
18
|
+
INT64: Builtin
|
19
|
+
LONG_LONG: Builtin
|
20
|
+
SLONG_LONG: Builtin
|
21
|
+
UINT64: Builtin
|
22
|
+
ULONG_LONG: Builtin
|
23
|
+
LONG: Builtin
|
24
|
+
SLONG: Builtin
|
25
|
+
ULONG: Builtin
|
26
|
+
FLOAT32: Builtin
|
27
|
+
FLOAT: Builtin
|
28
|
+
FLOAT64: Builtin
|
29
|
+
DOUBLE: Builtin
|
30
|
+
LONGDOUBLE: Builtin
|
31
|
+
POINTER: Builtin
|
32
|
+
BOOL: Builtin
|
33
|
+
STRING: Builtin
|
34
|
+
BUFFER_IN: Builtin
|
35
|
+
BUFFER_OUT: Builtin
|
36
|
+
BUFFER_INOUT: Builtin
|
37
|
+
VARARGS: Builtin
|
38
|
+
VOID: Builtin
|
39
|
+
end
|
40
|
+
|
41
|
+
module NativeType
|
42
|
+
INT8: Type::Builtin
|
43
|
+
UINT8: Type::Builtin
|
44
|
+
INT16: Type::Builtin
|
45
|
+
UINT16: Type::Builtin
|
46
|
+
INT32: Type::Builtin
|
47
|
+
UINT32: Type::Builtin
|
48
|
+
INT64: Type::Builtin
|
49
|
+
UINT64: Type::Builtin
|
50
|
+
LONG: Type::Builtin
|
51
|
+
ULONG: Type::Builtin
|
52
|
+
FLOAT32: Type::Builtin
|
53
|
+
FLOAT64: Type::Builtin
|
54
|
+
LONGDOUBLE: Type::Builtin
|
55
|
+
POINTER: Type::Builtin
|
56
|
+
BOOL: Type::Builtin
|
57
|
+
STRING: Type::Builtin
|
58
|
+
BUFFER_IN: Type::Builtin
|
59
|
+
BUFFER_OUT: Type::Builtin
|
60
|
+
BUFFER_INOUT: Type::Builtin
|
61
|
+
VARARGS: Type::Builtin
|
62
|
+
VOID: Type::Builtin
|
63
|
+
end
|
64
|
+
|
65
|
+
TYPE_INT8: Type::Builtin
|
66
|
+
TYPE_UINT8: Type::Builtin
|
67
|
+
TYPE_INT16: Type::Builtin
|
68
|
+
TYPE_UINT16: Type::Builtin
|
69
|
+
TYPE_INT32: Type::Builtin
|
70
|
+
TYPE_UINT32: Type::Builtin
|
71
|
+
TYPE_INT64: Type::Builtin
|
72
|
+
TYPE_UINT64: Type::Builtin
|
73
|
+
TYPE_LONG: Type::Builtin
|
74
|
+
TYPE_ULONG: Type::Builtin
|
75
|
+
TYPE_FLOAT32: Type::Builtin
|
76
|
+
TYPE_FLOAT64: Type::Builtin
|
77
|
+
TYPE_LONGDOUBLE: Type::Builtin
|
78
|
+
TYPE_POINTER: Type::Builtin
|
79
|
+
TYPE_BOOL: Type::Builtin
|
80
|
+
TYPE_STRING: Type::Builtin
|
81
|
+
TYPE_BUFFER_IN: Type::Builtin
|
82
|
+
TYPE_BUFFER_OUT: Type::Builtin
|
83
|
+
TYPE_BUFFER_INOUT: Type::Builtin
|
84
|
+
TYPE_VARARGS: Type::Builtin
|
85
|
+
TYPE_VOID: Type::Builtin
|
86
|
+
end
|
data/sig/ffi/pointer.rbs
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
module FFI
|
2
|
+
type pointer = Pointer::_ToPtr? | Integer
|
3
|
+
class Pointer < AbstractMemory
|
4
|
+
interface _ToPtr
|
5
|
+
def to_ptr: () -> Pointer
|
6
|
+
end
|
7
|
+
include _ToPtr
|
8
|
+
|
9
|
+
SIZE: Integer
|
10
|
+
NULL: Pointer
|
11
|
+
def self.size: () -> Integer
|
12
|
+
|
13
|
+
def initialize: (?AbstractMemory::type_size type, (Pointer | Integer) address) -> void
|
14
|
+
def +: (Integer offset) -> Pointer
|
15
|
+
def ==: (Pointer? other) -> bool
|
16
|
+
def address: () -> Integer
|
17
|
+
alias to_i address
|
18
|
+
def autorelease?: () -> bool
|
19
|
+
def autorelease=: (boolish autorelease) -> boolish
|
20
|
+
def free: () -> self
|
21
|
+
def inspect: ...
|
22
|
+
def null?: () -> bool
|
23
|
+
def order: () -> AbstractMemory::order_out
|
24
|
+
| (AbstractMemory::order_in) -> Pointer
|
25
|
+
def read: (ffi_type type) -> top
|
26
|
+
def read_array_of_type: (ffi_auto_type type, Symbol reader, Integer length) -> Array[top]
|
27
|
+
def read_string: (?Integer? len) -> String
|
28
|
+
def read_string_length: (Integer len) -> String
|
29
|
+
def read_string_to_null: () -> String
|
30
|
+
def slice: (Integer offset, Integer length) -> Pointer
|
31
|
+
def type_size: () -> Integer
|
32
|
+
def write: (ffi_type type, top value) -> nil
|
33
|
+
def write_array_of_type: (ffi_auto_type type, Symbol writer, Array[top]) -> self
|
34
|
+
def write_string: (String str, ?Integer? len) -> self
|
35
|
+
def write_string_length: (String str, Integer len) -> self
|
36
|
+
end
|
37
|
+
|
38
|
+
class MemoryPointer < Pointer
|
39
|
+
def initialize: (AbstractMemory::type_size size, ?Integer count, ?boolish clear) -> self
|
40
|
+
def self.from_string: (String s) -> instance
|
41
|
+
end
|
42
|
+
end
|
data/sig/ffi/struct.rbs
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
module FFI
|
2
|
+
class Struct[out P < AbstractMemory, unchecked out E]
|
3
|
+
type layout = Library::ffi_lib_type | singleton(StructLayout::Field) | [layout, Integer]
|
4
|
+
|
5
|
+
type ptr = Type::Mapped[
|
6
|
+
StructByReference[Struct[AbstractMemory, untyped], AbstractMemory],
|
7
|
+
AbstractMemory, instance, untyped
|
8
|
+
]
|
9
|
+
def self.ptr: (?untyped flags) -> ptr # https://github.com/ffi/ffi/issues/1073
|
10
|
+
alias self.by_ref self.ptr
|
11
|
+
def self.in: () -> ptr
|
12
|
+
def self.out: () -> ptr
|
13
|
+
def self.val: () -> StructByValue[singleton(Struct)]
|
14
|
+
alias self.by_value self.val
|
15
|
+
|
16
|
+
alias self.alloc_inout self.new
|
17
|
+
alias self.alloc_in self.new
|
18
|
+
alias self.alloc_out self.new
|
19
|
+
alias self.new_inout self.new
|
20
|
+
alias self.new_in self.new
|
21
|
+
alias self.new_out self.new
|
22
|
+
|
23
|
+
def self.auto_ptr: () -> Type::Mapped[
|
24
|
+
ManagedStructConverter[ManagedStruct[AutoPointer, untyped], AutoPointer],
|
25
|
+
Pointer, instance, untyped
|
26
|
+
]
|
27
|
+
def self.layout: (*layout | Integer) -> StructLayout
|
28
|
+
| (Hash[Symbol, layout]) -> StructLayout
|
29
|
+
def self.size=: (Integer size) -> Integer
|
30
|
+
|
31
|
+
def self?.alignment: () -> Integer
|
32
|
+
def self?.members: () -> Array[Symbol]
|
33
|
+
def self?.offset_of: (Symbol name) -> Integer
|
34
|
+
def self?.offsets: () -> Array[[Symbol, Integer]]
|
35
|
+
def self?.size: -> Integer
|
36
|
+
|
37
|
+
def initialize: (?P pointer, *layout args) -> void
|
38
|
+
def []: (Symbol field_name) -> E
|
39
|
+
def []=: (Symbol field_name, E value) -> E
|
40
|
+
alias align alignment
|
41
|
+
def clear: () -> self
|
42
|
+
def layout: () -> StructLayout
|
43
|
+
def null?: () -> bool
|
44
|
+
def order: (AbstractMemory::order_in order) -> Struct[P, E]
|
45
|
+
| () -> AbstractMemory::order_out
|
46
|
+
def pointer: () -> P
|
47
|
+
alias to_ptr pointer
|
48
|
+
def values: () -> Array[E]
|
49
|
+
|
50
|
+
class InlineArray[out P < AbstractMemory, unchecked out E]
|
51
|
+
include Enumerable[E]
|
52
|
+
include AbstractMemory::_Size
|
53
|
+
|
54
|
+
def initialize: (P memory, StructLayout::Field field) -> self
|
55
|
+
def []: (Integer index) -> E
|
56
|
+
def []=: (Integer index, E value) -> E
|
57
|
+
def each: () { (E) -> void } -> self
|
58
|
+
def to_a: () -> Array[E]
|
59
|
+
def to_ptr: () -> P
|
60
|
+
end
|
61
|
+
|
62
|
+
class ManagedStructConverter[S < ManagedStruct[P, untyped], P < AutoPointer] < StructByReference[S, P]
|
63
|
+
def initialize: ...
|
64
|
+
def from_native: (Pointer ptr, untyped ctx) -> S
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
class ManagedStruct[out P < AutoPointer, unchecked out E] < Struct[P, E]
|
69
|
+
def self.release: (AbstractMemory ptr) -> void
|
70
|
+
def initialize: (Pointer pointer) -> self
|
71
|
+
end
|
72
|
+
|
73
|
+
class Union[out P < AbstractMemory, unchecked out E] < Struct[P, E]
|
74
|
+
def self.builder: () -> StructLayoutBuilder
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module FFI
|
2
|
+
class StructByReference[S < Struct[P, untyped], P < AbstractMemory]
|
3
|
+
include DataConverter[P, S, untyped]
|
4
|
+
attr_reader struct_class: Struct[P, untyped]
|
5
|
+
|
6
|
+
def initialize: (S struct_class) -> void
|
7
|
+
def from_native: (P value, untyped ctx) -> S
|
8
|
+
def native_type: () -> Type::Builtin
|
9
|
+
def to_native: (S? value, untyped ctx) -> P
|
10
|
+
end
|
11
|
+
end
|
data/sig/ffi/type.rbs
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
module FFI
|
2
|
+
class Type
|
3
|
+
class Array = ArrayType
|
4
|
+
class Function = FunctionType
|
5
|
+
class Struct = StructByValue
|
6
|
+
|
7
|
+
include AbstractMemory::_Size
|
8
|
+
def initialize: (Integer | Type value) -> self
|
9
|
+
def alignment: () -> Integer
|
10
|
+
def inspect: ...
|
11
|
+
|
12
|
+
class Builtin < Type
|
13
|
+
def inspect: ...
|
14
|
+
end
|
15
|
+
|
16
|
+
class Mapped[X < _DataConverter[N, R, C], N, R, C]
|
17
|
+
include _DataConverter[N, R, C]
|
18
|
+
|
19
|
+
def initialize: (X converter) -> self
|
20
|
+
def converter: () -> X
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class ArrayType
|
25
|
+
def initialize: (Type component_type, Integer length) -> self
|
26
|
+
def element_type: -> Type
|
27
|
+
def length: -> Integer
|
28
|
+
end
|
29
|
+
|
30
|
+
class FunctionType < Type
|
31
|
+
def initialize:
|
32
|
+
(
|
33
|
+
ffi_type return_type, Array[ffi_type] param_types,
|
34
|
+
?blocking: boolish, ?convention: Library::convention, ?enums: Enums
|
35
|
+
) -> self
|
36
|
+
def param_types: () -> Array[Type]
|
37
|
+
def return_type: () -> Type
|
38
|
+
end
|
39
|
+
end
|
data/sig/ffi.rbs
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
module FFI
|
2
|
+
type ffi_type = Type | Symbol
|
3
|
+
type ffi_auto_type = ffi_type | DataConverter[untyped, untyped, untyped]
|
4
|
+
type type_map = Hash[Symbol | DataConverter[untyped, untyped, untyped], Type]
|
5
|
+
|
6
|
+
class CallbackInfo = FunctionType
|
7
|
+
class FunctionInfo = FunctionType
|
8
|
+
class NativeLibrary = DynamicLibrary
|
9
|
+
|
10
|
+
VERSION: String
|
11
|
+
TypeDefs: type_map
|
12
|
+
|
13
|
+
type current_process = Object
|
14
|
+
CURRENT_PROCESS: current_process
|
15
|
+
USE_THIS_PROCESS_AS_LIBRARY: current_process
|
16
|
+
|
17
|
+
private def self.custom_typedefs: () -> type_map
|
18
|
+
def self.errno: () -> Integer
|
19
|
+
def self.errno=: (Integer) -> nil
|
20
|
+
def self.find_type: (ffi_auto_type name, ?type_map? type_map) -> Type
|
21
|
+
def self.make_shareable: [T] (T obj) -> T
|
22
|
+
def self.map_library_name: (_ToS lib) -> String
|
23
|
+
def self.type_size: (ffi_auto_type type) -> Integer
|
24
|
+
def self.typedef: (ffi_auto_type old, Symbol add) -> Type
|
25
|
+
alias self.add_typedef self.typedef
|
26
|
+
end
|