[#35446] [Ruby 1.9 - Bug #4477][Open] Kernel:exec and backtick (`) don't work for certain system commands — Joachim Wuttke <j.wuttke@...>

10 messages 2011/03/07

[#35476] [Ruby 1.9 - Bug #4489][Open] [PATCH] Encodings with /-(unix|dos|mac)\Z/ — "James M. Lawrence" <quixoticsycophant@...>

20 messages 2011/03/10

[#35552] [Ruby 1.9 - Feature #4523][Open] Kernel#require to return the path of the loaded file — Alex Young <alex@...>

14 messages 2011/03/24

[#35565] [Ruby 1.9 - Feature #4531][Open] [PATCH 0/7] use poll() instead of select() in certain cases — Eric Wong <normalperson@...>

33 messages 2011/03/28

[#35566] [Ruby 1.9 - Feature #4532][Open] [PATCH] add IO#pread and IO#pwrite methods — Eric Wong <normalperson@...>

12 messages 2011/03/28

[#35586] [Ruby 1.9 - Feature #4538][Open] [PATCH (cleanup)] avoid unnecessary select() calls before doing I/O — Eric Wong <normalperson@...>

9 messages 2011/03/29

[ruby-core:35501] [Ruby 1.9 - Feature #4504][Open] Add rb_funcall_passing_block to public API

From: "James M. Lawrence" <quixoticsycophant@...>
Date: 2011-03-14 22:27:21 UTC
List: ruby-core #35501
Issue #4504 has been reported by James M. Lawrence.

----------------------------------------
Feature #4504: Add rb_funcall_passing_block to public API
http://redmine.ruby-lang.org/issues/4504

Author: James M. Lawrence
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 



rb_funcall2 fails to pass a block; rb_funcall_passing_block must be
used instead.

string.c needed it (http://redmine.ruby-lang.org/issues/show/3792),
and I need it as well.

=== test_relay.rb
  
  require './relay'
  
  module Relay
    def self.target(*args, &block)
      p block
    end
  end
  
  Relay.with_funcall2 { }
  Relay.with_funcall_passing_block { }
  
=== output
  
  % ruby extconf.rb && make
  % ruby -v test_relay.rb 
  ruby 1.9.2p180 (2011-02-18 revision 30907) [i386-darwin9.8.0]
  nil
  #<Proc:0x4153c0@test_relay.rb:10>
  
=== extconf.rb
  
  require 'mkmf'
  create_makefile('relay')
  
=== relay.c
  
  #include "ruby.h"
  
  VALUE
  rb_funcall_passing_block(
      VALUE recv, ID mid, int argc, const VALUE *argv) ;
  
  static VALUE
  with_funcall2(int argc, VALUE *argv, VALUE self)
  {
      return rb_funcall2(
          self, rb_intern("target"), argc, argv) ;
  }
  
  static VALUE
  with_funcall_passing_block(int argc, VALUE *argv, VALUE self)
  {
      return rb_funcall_passing_block(
          self, rb_intern("target"), argc, argv) ;
  }
  
  VALUE cRelay ;
  
  void
  Init_relay()
  {
      cRelay = rb_define_module("Relay") ;
  
      rb_define_singleton_method(cRelay,
        "with_funcall2",
         with_funcall2,
        -1) ;
      rb_define_singleton_method(cRelay,
        "with_funcall_passing_block",
         with_funcall_passing_block,
        -1) ;
  }

=== 1.9.3

Incidentally the symbol is not even accessible in 1.9.3.
  
  % nm ruby-1.9.2/ruby | grep funcall_passing
  00188220 T _rb_funcall_passing_block
  
  % nm ruby-1.9-dev/ruby | grep funcall_passing
  0018bef0 t _rb_funcall_passing_block

  % make distclean && ruby19dev extconf.rb && make
  % ruby19dev -v test_relay.rb
  ruby 1.9.3dev (2011-03-14 trunk 31105) [i386-darwin9.8.0]
  nil
  dyld: lazy symbol binding failed: Symbol not found: _rb_funcall_passing_block
    Referenced from: /Users/jlawrence/tmp/relay/relay.bundle
    Expected in: flat namespace
  
  dyld: Symbol not found: _rb_funcall_passing_block
    Referenced from: /Users/jlawrence/tmp/relay/relay.bundle
    Expected in: flat namespace
  
  Trace/BPT trap




-- 
http://redmine.ruby-lang.org

In This Thread

Prev Next