[#39810] 2.0 feature questionnaire — SASADA Koichi <ko1@...>

I made a questionnaire "What do you want to introduce in 2.0?" in my

59 messages 2011/10/01
[#39822] Re: 2.0 feature questionnaire — Jeremy Kemper <jeremy@...> 2011/10/02

2011/10/1 SASADA Koichi <ko1@atdot.net>:

[#39827] Re: 2.0 feature questionnaire — Yukihiro Matsumoto <matz@...> 2011/10/02

Hi,

[#40324] Re: 2.0 feature questionnaire — Charles Oliver Nutter <headius@...> 2011/10/25

2011/10/1 SASADA Koichi <ko1@atdot.net>:

[#39823] Discussion results — SASADA Koichi <ko1@...>

Hi,

34 messages 2011/10/02
[#39840] Re: Discussion results — Intransition <transfire@...> 2011/10/02

I did not have the fortune of attending the discussion, but I would

[#39844] Re: Discussion results — Yukihiro Matsumoto <matz@...> 2011/10/02

Hi,

[#39851] Re: Discussion results (here documents with indents) — "Martin J. Dürst" <duerst@...> 2011/10/03

Hello Matz,

[#39862] Re: Discussion results (here documents with indents) — Yusuke Endoh <mame@...> 2011/10/03

Hello,

[#39874] Re: Discussion results (here documents with indents) — Trans <transfire@...> 2011/10/03

On Mon, Oct 3, 2011 at 8:16 AM, Yusuke Endoh <mame@tsg.ne.jp> wrote:

[#39915] [Ruby 1.9 - Feature #5400][Open] Remove flip-flops in 2.0 — Magnus Holm <judofyr@...>

29 messages 2011/10/04

[#39957] [Ruby 1.9 - Bug #5407][Open] Cannot build ruby-1.9.3-rc1 with TDM-GCC 4.6.1 on Windows XP SP3 — Heesob Park <phasis@...>

11 messages 2011/10/05

[#39993] [Ruby 1.9 - Feature #2348] RBTree Should be Added to the Standard Library — David Graham <david.malcom.graham@...>

10 messages 2011/10/06

[#40037] [Ruby 1.9 - Bug #5422][Open] File.fnmatch != Dir.glob # {no,sets} — Suraj Kurapati <sunaku@...>

14 messages 2011/10/07

[#40073] [Ruby 1.9 - Feature #5427][Open] Not complex patch to improve `require` time (load.c) — Yura Sokolov <funny.falcon@...>

31 messages 2011/10/09

[#40090] [Ruby 1.9 - Bug #5433][Open] PTY.spawn Kernel panic on macos lion — Gamaliel Toro <argami@...>

14 messages 2011/10/10

[#40188] [Ruby 2.0 - Feature #5454] keyword arguments — Yukihiro Matsumoto <matz@...>

16 messages 2011/10/17
[#40189] Re: [Ruby 2.0 - Feature #5454] keyword arguments — Evan Phoenix <evan@...> 2011/10/17

This looks very interesting=21 Would someone be willing to translate to e=

[#40191] Re: [Ruby 2.0 - Feature #5454] keyword arguments — Yutaka Hara <yutaka.hara@...> 2011/10/18

Hi,

[#40192] Re: [Ruby 2.0 - Feature #5454] keyword arguments — Yukihiro Matsumoto <matz@...> 2011/10/18

Hi,

[#40259] Counseling — Perry Smith <pedzsan@...>

Ruby and I are back in counseling... Its always the same thing with =

21 messages 2011/10/21
[#40263] Re: Counseling — "Haase, Konstantin" <Konstantin.Haase@...> 2011/10/21

What's your $LC_CTYPE? What OS are you on?

[#40264] Re: Counseling — Gon軋lo Silva <goncalossilva@...> 2011/10/21

Hi all,

[#40266] Re: Counseling — Bill Kelly <billk@...> 2011/10/21

Gon軋lo Silva wrote:

[#40271] Can rubygems save us from "binary-compatibility hell"? — Yusuke Endoh <mame@...>

Hello, rubygems developers --

17 messages 2011/10/22

[#40290] [ruby-trunk - Feature #5474][Assigned] keyword argument — Yusuke Endoh <mame@...>

36 messages 2011/10/23
[#40298] Re: [ruby-trunk - Feature #5474][Assigned] keyword argument — Yukihiro Matsumoto <matz@...> 2011/10/24

Hi,

[#40414] Re: [ruby-trunk - Feature #5474][Assigned] keyword argument — Charles Oliver Nutter <headius@...> 2011/10/26

More refinement below. I think we're on a good path here.

[#40416] Re: [ruby-trunk - Feature #5474][Assigned] keyword argument — Yukihiro Matsumoto <matz@...> 2011/10/26

Hi,

[#40418] Re: [ruby-trunk - Feature #5474][Assigned] keyword argument — Joshua Ballanco <jballanc@...> 2011/10/26

On Wed, Oct 26, 2011 at 2:08 PM, Yukihiro Matsumoto <matz@ruby-lang.org>wrote:

[#40425] Re: [ruby-trunk - Feature #5474][Assigned] keyword argument — Yukihiro Matsumoto <matz@...> 2011/10/27

Hi,

[#40311] [ruby-trunk - Feature #5478][Open] import Set into core, add syntax — Konstantin Haase <Konstantin.Haase@...>

33 messages 2011/10/24

[#40312] [ruby-trunk - Feature #5479][Open] import StringIO into core, add String#to_io — Konstantin Haase <Konstantin.Haase@...>

9 messages 2011/10/24

[#40316] [ruby-trunk - Feature #5481][Open] Gemifying Ruby standard library — Hiroshi Nakamura <nakahiro@...>

86 messages 2011/10/24
[#40334] [ruby-trunk - Feature #5481] Gemifying Ruby standard library — Lucas Nussbaum <lucas@...> 2011/10/25

[#40322] [ruby-trunk - Feature #5482][Open] Rubinius as basis for Ruby 2.0 — Thomas Sawyer <transfire@...>

19 messages 2011/10/25

[#40356] JIT development for MRI — Carter Cheng <cartercheng@...>

Hello,

25 messages 2011/10/25
[#40390] Re: JIT development for MRI — SASADA Koichi <ko1@...> 2011/10/26

Hi,

[#40394] Re: JIT development for MRI — Carter Cheng <cartercheng@...> 2011/10/26

Dear Koichi SASADA,

[#40395] Re: JIT development for MRI — Carter Cheng <cartercheng@...> 2011/10/26

I noticed that you used context threading in YARV. Do you have some analysis

[#40417] Re: JIT development for MRI — SASADA Koichi <ko1@...> 2011/10/26

Thanks for reference.

[#40423] Re: JIT development for MRI — Carter Cheng <cartercheng@...> 2011/10/26

Thanks Koichi.

[#40412] [ruby-trunk - Bug #5486][Open] rb_stat() doesn’t respect input encoding — Nikolai Weibull <now@...>

15 messages 2011/10/26

[#40462] [ruby-trunk - Bug #5492][Open] MinGW Installation with Ruby 1.9.3rc1 Broken — Charlie Savage <cfis@...>

14 messages 2011/10/27

[#40573] [ruby-trunk - Bug #5530][Open] SEEK_SET malfunctions when used with 'append' File.open mode — "Joshua J. Drake" <ruby-lang.jdrake@...>

17 messages 2011/10/31

[#40586] [ruby-trunk - Feature #5531][Open] deep_value for dealing with nested hashes — Kyle Peyton <kylepeyton@...>

19 messages 2011/10/31

[ruby-core:40402] Re: BitField extension

From: Nobuyoshi Nakada <nobu@...>
Date: 2011-10-26 05:40:46 UTC
List: ruby-core #40402
Hi,

(11/10/24 21:03), halfdan@xnorfz.de wrote:
> I'm now having trouble clone'ing my object though. I'm running into a
> segfault in my code when I call bitfield.clone. I made my sources
> available at http://xnorfz.de/stuff/BitField.tar

1) you need BitField#initialize_copy to use clone and dup methods.

2) overidding Class#new is the deprecated style which was used in 1.6
   or earlier, you should define BitField.allocate and
   BitField#initialize instead.

3) memory allocated with ALLOC() should be freed with xfree(), not
   free().

4) you don't need Check_Type just before NUM2INT() because it is
   implied.

5) cBitField doesn't seem to need to be global.


--- BitField/BitField.cpp~	2011-10-24 20:59:31.000000000 +0900
+++ BitField/BitField.cpp	2011-10-26 14:38:01.000000000 +0900
@@ -3,21 +3,27 @@
 #include <boost/dynamic_bitset.hpp>
 #include "BitField.hpp"
 
+static VALUE bf_s_alloc(VALUE klass)
+{
+	BitField *bf = BitFieldNew();
+	return Data_Wrap_Struct(klass, 0, xfree, bf);
+}
+
 static VALUE bf_init(VALUE self, VALUE size)
 {
-	rb_iv_set(self, "@size", size);
+	BitField *ptr;
+	Data_Get_Struct(self, BitField, ptr);
+	ptr->data.resize(NUM2INT(size));
 	return self;
 }
 
-static VALUE bf_new(VALUE self, VALUE size)
+static VALUE bf_init_copy(VALUE self, VALUE orig)
 {
-	VALUE argv[1];
-	Check_Type(size, T_FIXNUM);
-	BitField *bf = BitFieldNew(FIX2INT(size));
-	VALUE tdata = Data_Wrap_Struct(self, 0, free, bf);
-	argv[0] = size;
-	rb_obj_call_init(tdata, 1, argv);
-	return tdata;
+	BitField *ptr, *ptr2;
+	Data_Get_Struct(self, BitField, ptr);
+	Data_Get_Struct(orig, BitField, ptr2);
+	ptr->data = ptr2->data;
+	return self;
 }
 
 static VALUE bf_size(VALUE self)
@@ -36,7 +42,6 @@
 {
     BitField *ptr;
     Data_Get_Struct(self, BitField, ptr);
-    Check_Type(position, T_FIXNUM);
     return INT2NUM(ptr->data[FIX2INT(position)].flip());
 }
 
@@ -76,14 +81,12 @@
 		}
 	} else {
 		/* Sanity checks for position and value */
-		Check_Type(position, T_FIXNUM);
-		Check_Type(value, T_FIXNUM);
-
-		int pos = FIX2INT(position);
-		if(pos < 0 || pos >= ptr->data.size()) {
+		unsigned int pos = FIX2UINT(position);
+		int val = FIX2INT(value);
+		if(pos >= ptr->data.size()) {
 			rb_raise(rb_eRangeError, "BitField out of range with value %d.", pos);
 		}
-		ptr->data[pos] = FIX2INT(value) % 2;
+		ptr->data[pos] = val % 2;
 	}
 	return Qnil;
 }
@@ -109,7 +112,6 @@
 		return range_ary;
 	} else {
 		/* Sanity checks for position and value */
-		Check_Type(position, T_FIXNUM);
 		int pos = FIX2INT(position);
 		return INT2NUM(ptr->data[pos]);
 	}
@@ -125,17 +127,12 @@
 }
 
 
-VALUE cBitField;
-
 extern "C" {
 	void Init_bitfield() {
+		VALUE cBitField;
+
 		cBitField = rb_define_class("BitField", rb_cObject);
-		rb_define_singleton_method(
-			cBitField,
-			"new",
-			reinterpret_cast<VALUE(*)(...)>(bf_new),
-			1
-		);
+		rb_define_alloc_func(cBitField, bf_s_alloc);
 		rb_define_method(
 			cBitField,
 			"size",
@@ -150,6 +147,12 @@
 		);
 		rb_define_method(
 			cBitField,
+			"initialize_copy",
+			reinterpret_cast<VALUE(*)(...)>(bf_init_copy),
+			1
+		);
+		rb_define_method(
+			cBitField,
 			"[]=",
 			reinterpret_cast<VALUE(*)(...)>(bf_bit_set),
 			2
@@ -183,11 +186,14 @@
 
 
 /* Library Code */
+BitField *BitFieldNew(void)
+{
+	return new(ALLOC(BitField)) BitField();
+}
+
 BitField *BitFieldNew(int size)
 {
-	BitField *bf;
-	bf = ALLOC(BitField);
-	new(bf) BitField();
+	BitField *bf = BitFieldNew();
 	bf->data.resize(size);
 	return bf;
 }
--- BitField/BitField.hpp~	2011-10-24 06:55:15.000000000 +0900
+++ BitField/BitField.hpp	2011-10-26 14:38:06.000000000 +0900
@@ -1,12 +1,11 @@
 #ifndef __BITFIELD_H__
 #define __BITFIELD_H__
 
-RUBY_EXTERN VALUE cBitField;
-
 typedef struct _bitfield {
 	boost::dynamic_bitset<> data;
 } BitField;
 
+BitField *BitFieldNew(void);
 BitField *BitFieldNew(int size);
 void BitFieldSet(BitField *bf, int position, int data);
 int BitFieldGet(BitField *bf, int position);


-- 
Nobu Nakada

In This Thread

Prev Next