fiddle 1.1.2 → 1.1.3
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 +4 -4
- data/Rakefile +9 -4
- data/ext/fiddle/closure.c +2 -2
- data/ext/fiddle/conversions.c +0 -2
- data/ext/fiddle/extconf.rb +7 -0
- data/ext/fiddle/fiddle.c +0 -1
- data/ext/fiddle/fiddle.h +10 -1
- data/ext/fiddle/function.c +5 -3
- data/ext/fiddle/handle.c +2 -3
- data/ext/fiddle/memory_view.c +7 -2
- data/ext/fiddle/pinned.c +7 -3
- data/ext/fiddle/pointer.c +2 -2
- data/fiddle.gemspec +2 -4
- data/lib/fiddle/ffi_backend.rb +613 -0
- data/lib/fiddle/pack.rb +6 -0
- data/lib/fiddle/struct.rb +27 -6
- data/lib/fiddle/version.rb +1 -1
- data/lib/fiddle.rb +39 -8
- metadata +5 -10
- data/ext/fiddle/win32/fficonfig.h +0 -29
- data/ext/fiddle/win32/libffi-3.2.1-mswin.patch +0 -191
- data/ext/fiddle/win32/libffi-config.rb +0 -48
- data/ext/fiddle/win32/libffi.mk.tmpl +0 -96
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 96a73d1da87f69ec3f4aae33ed5a80ac8c920eb69fd93d91fb2d68c6ad0189af
         | 
| 4 | 
            +
              data.tar.gz: 50a145cd8275945f292bd8a82184d5955d64ef75a1ed44601daffc6716196dac
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 2d1dda953aab9d5cb9fef0e0f437accfdf9c2cc891cc7319a2d53726d6e71570248a0a5b2308a18d75b7737e6667e798e404d0b5bdab2ad50d88106a061c74a6
         | 
| 7 | 
            +
              data.tar.gz: d4da3f220dfcbae91f58fd958de75746918a8bf20b1bedc342d99bfbeb3885d124bfece0c7c21523478b0d0c3f961a30b0a5103c65b8263dc37b03ddbc5db47a
         | 
    
        data/Rakefile
    CHANGED
    
    | @@ -17,8 +17,13 @@ namespace :version do | |
| 17 17 | 
             
              end
         | 
| 18 18 | 
             
            end
         | 
| 19 19 |  | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
            Rake::ExtensionTask.new(" | 
| 20 | 
            +
            if RUBY_ENGINE == "ruby"
         | 
| 21 | 
            +
              require 'rake/extensiontask'
         | 
| 22 | 
            +
              Rake::ExtensionTask.new("fiddle")
         | 
| 23 | 
            +
              Rake::ExtensionTask.new("-test-/memory_view")
         | 
| 24 | 
            +
              task test: :compile
         | 
| 25 | 
            +
            else
         | 
| 26 | 
            +
              task :compile
         | 
| 27 | 
            +
            end
         | 
| 23 28 |  | 
| 24 | 
            -
            task  | 
| 29 | 
            +
            task default: :test
         | 
    
        data/ext/fiddle/closure.c
    CHANGED
    
    | @@ -61,7 +61,7 @@ const rb_data_type_t closure_data_type = { | |
| 61 61 | 
             
                    .dfree = dealloc,
         | 
| 62 62 | 
             
                    .dsize = closure_memsize
         | 
| 63 63 | 
             
                },
         | 
| 64 | 
            -
                .flags =  | 
| 64 | 
            +
                .flags = FIDDLE_DEFAULT_TYPED_DATA_FLAGS,
         | 
| 65 65 | 
             
            };
         | 
| 66 66 |  | 
| 67 67 | 
             
            struct callback_args {
         | 
| @@ -300,6 +300,7 @@ initialize_body(VALUE user_data) | |
| 300 300 | 
             
                    cl->argv[i] = rb_fiddle_int_to_ffi_type(NUM2INT(arg));
         | 
| 301 301 | 
             
                }
         | 
| 302 302 | 
             
                cl->argv[argc] = NULL;
         | 
| 303 | 
            +
                OBJ_FREEZE_RAW(normalized_args);
         | 
| 303 304 |  | 
| 304 305 | 
             
                ret = rb_fiddle_type_ensure(ret);
         | 
| 305 306 | 
             
                rb_iv_set(data->self, "@ctype", ret);
         | 
| @@ -455,4 +456,3 @@ Init_fiddle_closure(void) | |
| 455 456 | 
             
                 */
         | 
| 456 457 | 
             
                rb_define_method(cFiddleClosure, "freed?", closure_freed_p, 0);
         | 
| 457 458 | 
             
            }
         | 
| 458 | 
            -
            /* vim: set noet sw=4 sts=4 */
         | 
    
        data/ext/fiddle/conversions.c
    CHANGED
    
    
    
        data/ext/fiddle/extconf.rb
    CHANGED
    
    | @@ -1,6 +1,11 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 | 
             
            require 'mkmf'
         | 
| 3 3 |  | 
| 4 | 
            +
            unless RUBY_ENGINE == "ruby"
         | 
| 5 | 
            +
              File.write('Makefile', dummy_makefile("").join)
         | 
| 6 | 
            +
              return
         | 
| 7 | 
            +
            end
         | 
| 8 | 
            +
             | 
| 4 9 | 
             
            # :stopdoc:
         | 
| 5 10 |  | 
| 6 11 | 
             
            def gcc?
         | 
| @@ -218,6 +223,8 @@ if libffi | |
| 218 223 | 
             
              $LOCAL_LIBS.prepend("#{libffi.a} ").strip! # to exts.mk
         | 
| 219 224 | 
             
              $INCFLAGS.gsub!(/-I#{libffi.dir}/, '-I$(LIBFFI_DIR)')
         | 
| 220 225 | 
             
            end
         | 
| 226 | 
            +
             | 
| 227 | 
            +
            have_func("rb_str_to_interned_str")
         | 
| 221 228 | 
             
            create_makefile 'fiddle' do |conf|
         | 
| 222 229 | 
             
              if !libffi
         | 
| 223 230 | 
             
                next conf << "LIBFFI_CLEAN = none\n"
         | 
    
        data/ext/fiddle/fiddle.c
    CHANGED
    
    
    
        data/ext/fiddle/fiddle.h
    CHANGED
    
    | @@ -236,5 +236,14 @@ VALUE rb_fiddle_new_function(VALUE address, VALUE arg_types, VALUE ret_type); | |
| 236 236 | 
             
            typedef void (*rb_fiddle_freefunc_t)(void*);
         | 
| 237 237 | 
             
            VALUE rb_fiddle_ptr_new_wrap(void *ptr, long size, rb_fiddle_freefunc_t func, VALUE wrap0, VALUE wrap1);
         | 
| 238 238 |  | 
| 239 | 
            +
            enum {
         | 
| 240 | 
            +
                FIDDLE_DEFAULT_TYPED_DATA_FLAGS = (
         | 
| 241 | 
            +
                    RUBY_TYPED_FREE_IMMEDIATELY |
         | 
| 242 | 
            +
                    RUBY_TYPED_WB_PROTECTED |
         | 
| 243 | 
            +
            #ifdef RUBY_TYPED_FROZEN_SHAREABLE
         | 
| 244 | 
            +
                    RUBY_TYPED_FROZEN_SHAREABLE |
         | 
| 245 | 
            +
            #endif
         | 
| 246 | 
            +
                    0)
         | 
| 247 | 
            +
            };
         | 
| 248 | 
            +
             | 
| 239 249 | 
             
            #endif
         | 
| 240 | 
            -
            /* vim: set noet sws=4 sw=4: */
         | 
    
        data/ext/fiddle/function.c
    CHANGED
    
    | @@ -59,7 +59,7 @@ const rb_data_type_t function_data_type = { | |
| 59 59 | 
             
                    .dfree = deallocate,
         | 
| 60 60 | 
             
                    .dsize = function_memsize
         | 
| 61 61 | 
             
                },
         | 
| 62 | 
            -
                .flags =  | 
| 62 | 
            +
                .flags = FIDDLE_DEFAULT_TYPED_DATA_FLAGS,
         | 
| 63 63 | 
             
            };
         | 
| 64 64 |  | 
| 65 65 | 
             
            static VALUE
         | 
| @@ -153,6 +153,9 @@ initialize(int argc, VALUE argv[], VALUE self) | |
| 153 153 | 
             
                    rb_get_kwargs(kwargs, kw, 0, kw_max_, args);
         | 
| 154 154 | 
             
                    if (args[kw_name] != Qundef) {
         | 
| 155 155 | 
             
                        name = args[kw_name];
         | 
| 156 | 
            +
            #ifdef HAVE_RB_STR_TO_INTERNED_STR
         | 
| 157 | 
            +
                        name = rb_str_to_interned_str(name);
         | 
| 158 | 
            +
            #endif
         | 
| 156 159 | 
             
                    }
         | 
| 157 160 | 
             
                    if (args[kw_need_gvl] != Qundef) {
         | 
| 158 161 | 
             
                        need_gvl = args[kw_need_gvl];
         | 
| @@ -371,7 +374,7 @@ function_call(int argc, VALUE argv[], VALUE self) | |
| 371 374 | 
             
                    args.values[i_call] = (void *)&generic_args[i_call];
         | 
| 372 375 | 
             
                }
         | 
| 373 376 | 
             
                args.values[i_call] = NULL;
         | 
| 374 | 
            -
                args.fn = (void(*)(void))NUM2PTR(cfunc);
         | 
| 377 | 
            +
                args.fn = (void(*)(void))(VALUE)NUM2PTR(cfunc);
         | 
| 375 378 |  | 
| 376 379 | 
             
                if (RTEST(need_gvl)) {
         | 
| 377 380 | 
             
                    ffi_call(args.cif, args.fn, &(args.retval), args.values);
         | 
| @@ -493,4 +496,3 @@ Init_fiddle_function(void) | |
| 493 496 | 
             
                 */
         | 
| 494 497 | 
             
                rb_define_method(cFiddleFunction, "initialize", initialize, -1);
         | 
| 495 498 | 
             
            }
         | 
| 496 | 
            -
            /* vim: set noet sws=4 sw=4: */
         | 
    
        data/ext/fiddle/handle.c
    CHANGED
    
    | @@ -56,7 +56,8 @@ static const rb_data_type_t fiddle_handle_data_type = { | |
| 56 56 | 
             
                    .dfree = fiddle_handle_free,
         | 
| 57 57 | 
             
                    .dsize = fiddle_handle_memsize
         | 
| 58 58 | 
             
                },
         | 
| 59 | 
            -
                .flags =  | 
| 59 | 
            +
                .flags = FIDDLE_DEFAULT_TYPED_DATA_FLAGS & ~RUBY_TYPED_FREE_IMMEDIATELY,
         | 
| 60 | 
            +
                /* keeping while its symbols are referred. */
         | 
| 60 61 | 
             
            };
         | 
| 61 62 |  | 
| 62 63 | 
             
            /*
         | 
| @@ -587,5 +588,3 @@ Init_fiddle_handle(void) | |
| 587 588 | 
             
                rb_define_method(rb_cHandle, "enable_close", rb_fiddle_handle_enable_close, 0);
         | 
| 588 589 | 
             
                rb_define_method(rb_cHandle, "close_enabled?", rb_fiddle_handle_close_enabled_p, 0);
         | 
| 589 590 | 
             
            }
         | 
| 590 | 
            -
             | 
| 591 | 
            -
            /* vim: set noet sws=4 sw=4: */
         | 
    
        data/ext/fiddle/memory_view.c
    CHANGED
    
    | @@ -64,8 +64,13 @@ fiddle_memview_memsize(const void *ptr) | |
| 64 64 | 
             
            }
         | 
| 65 65 |  | 
| 66 66 | 
             
            static const rb_data_type_t fiddle_memview_data_type = {
         | 
| 67 | 
            -
                "fiddle/memory_view",
         | 
| 68 | 
            -
                 | 
| 67 | 
            +
                .wrap_struct_name = "fiddle/memory_view",
         | 
| 68 | 
            +
                .function = {
         | 
| 69 | 
            +
                    .dmark = fiddle_memview_mark,
         | 
| 70 | 
            +
                    .dfree = fiddle_memview_free,
         | 
| 71 | 
            +
                    .dsize = fiddle_memview_memsize,
         | 
| 72 | 
            +
                },
         | 
| 73 | 
            +
                .flags = FIDDLE_DEFAULT_TYPED_DATA_FLAGS,
         | 
| 69 74 | 
             
            };
         | 
| 70 75 |  | 
| 71 76 | 
             
            static VALUE
         | 
    
        data/ext/fiddle/pinned.c
    CHANGED
    
    | @@ -24,9 +24,13 @@ pinned_memsize(const void *ptr) | |
| 24 24 | 
             
            }
         | 
| 25 25 |  | 
| 26 26 | 
             
            static const rb_data_type_t pinned_data_type = {
         | 
| 27 | 
            -
                "fiddle/pinned",
         | 
| 28 | 
            -
                 | 
| 29 | 
            -
             | 
| 27 | 
            +
                .wrap_struct_name = "fiddle/pinned",
         | 
| 28 | 
            +
                .function = {
         | 
| 29 | 
            +
                    .dmark = pinned_mark,
         | 
| 30 | 
            +
                    .dfree = RUBY_TYPED_DEFAULT_FREE,
         | 
| 31 | 
            +
                    .dsize = pinned_memsize,
         | 
| 32 | 
            +
                },
         | 
| 33 | 
            +
                .flags = FIDDLE_DEFAULT_TYPED_DATA_FLAGS,
         | 
| 30 34 | 
             
            };
         | 
| 31 35 |  | 
| 32 36 | 
             
            static VALUE
         | 
    
        data/ext/fiddle/pointer.c
    CHANGED
    
    | @@ -94,7 +94,7 @@ static const rb_data_type_t fiddle_ptr_data_type = { | |
| 94 94 | 
             
                    .dfree = fiddle_ptr_free,
         | 
| 95 95 | 
             
                    .dsize = fiddle_ptr_memsize,
         | 
| 96 96 | 
             
                },
         | 
| 97 | 
            -
                .flags =  | 
| 97 | 
            +
                .flags = FIDDLE_DEFAULT_TYPED_DATA_FLAGS,
         | 
| 98 98 | 
             
            };
         | 
| 99 99 |  | 
| 100 100 | 
             
            #ifdef HAVE_RUBY_MEMORY_VIEW_H
         | 
| @@ -570,7 +570,7 @@ rb_fiddle_ptr_inspect(VALUE self) | |
| 570 570 |  | 
| 571 571 | 
             
                TypedData_Get_Struct(self, struct ptr_data, &fiddle_ptr_data_type, data);
         | 
| 572 572 | 
             
                return rb_sprintf("#<%"PRIsVALUE":%p ptr=%p size=%ld free=%p>",
         | 
| 573 | 
            -
            		      RB_OBJ_CLASSNAME(self), (void *)data, data->ptr, data->size, (void *)data->free);
         | 
| 573 | 
            +
            		      RB_OBJ_CLASSNAME(self), (void *)data, data->ptr, data->size, (void *)(VALUE)data->free);
         | 
| 574 574 | 
             
            }
         | 
| 575 575 |  | 
| 576 576 | 
             
            /*
         | 
    
        data/fiddle.gemspec
    CHANGED
    
    | @@ -34,14 +34,11 @@ Gem::Specification.new do |spec| | |
| 34 34 | 
             
                "ext/fiddle/memory_view.c",
         | 
| 35 35 | 
             
                "ext/fiddle/pinned.c",
         | 
| 36 36 | 
             
                "ext/fiddle/pointer.c",
         | 
| 37 | 
            -
                "ext/fiddle/win32/fficonfig.h",
         | 
| 38 | 
            -
                "ext/fiddle/win32/libffi-3.2.1-mswin.patch",
         | 
| 39 | 
            -
                "ext/fiddle/win32/libffi-config.rb",
         | 
| 40 | 
            -
                "ext/fiddle/win32/libffi.mk.tmpl",
         | 
| 41 37 | 
             
                "fiddle.gemspec",
         | 
| 42 38 | 
             
                "lib/fiddle.rb",
         | 
| 43 39 | 
             
                "lib/fiddle/closure.rb",
         | 
| 44 40 | 
             
                "lib/fiddle/cparser.rb",
         | 
| 41 | 
            +
                "lib/fiddle/ffi_backend.rb",
         | 
| 45 42 | 
             
                "lib/fiddle/function.rb",
         | 
| 46 43 | 
             
                "lib/fiddle/import.rb",
         | 
| 47 44 | 
             
                "lib/fiddle/pack.rb",
         | 
| @@ -56,4 +53,5 @@ Gem::Specification.new do |spec| | |
| 56 53 | 
             
              spec.required_ruby_version = ">= 2.5.0"
         | 
| 57 54 |  | 
| 58 55 | 
             
              spec.metadata["msys2_mingw_dependencies"] = "libffi"
         | 
| 56 | 
            +
              spec.metadata["changelog_uri"] = "https://github.com/ruby/fiddle/releases"
         | 
| 59 57 | 
             
            end
         |