[#15348] Expanding arrays in method calls - why the restriction? — mathew <meta@...>
I can do
[#15359] Timeout::Error — Jeremy Thurgood <jerith@...>
Good day,
On Feb 5, 2008, at 06:20 AM, Jeremy Thurgood wrote:
Eric Hodel wrote:
Hi,
Nobuyoshi Nakada wrote:
Hi,
Nobuyoshi Nakada wrote:
Hi,
Nobuyoshi Nakada wrote:
Joel VanderWerf wrote:
Jeremy Thurgood wrote:
Joel VanderWerf wrote:
Jeremy Thurgood wrote:
Hi,
Jeremy Thurgood wrote:
Jim Hranicky wrote:
Jeremy Thurgood wrote:
Charles Oliver Nutter wrote:
On Thu, 7 Feb 2008 09:37:57 +0900, Kurt Stephens <ks@kurtstephens.com> wrote:
[#15360] reopen: can't change access mode from "w+" to "w"? — Sam Ruby <rubys@...>
I ran 'rake test' on test/spec [1], using
Hi,
In article <20080206043831.7F10DE067F@mail.bc9.jp>,
Hi,
Yukihiro Matsumoto wrote:
In article <47AAE922.5020804@intertwingly.net>,
[#15375] weird behavior of belongs_to referencing a model with set_table_name : a bug? — "Yuri Leikind" <yuri.leikind@...>
Hello all,
[#15381] gem versioning patch doesn't seem to have been applied to HEAD — Dave Thomas <dave@...>
A while back, I believe that Rich Kilmer created a patch to gems in
[#15383] Have the rules for source file encoding changed? — Dave Thomas <dave@...>
Does the -E command line option no longer set source file encoding?
Ni,
[#15389] STDIN encoding differs from default source file encoding — Dave Thomas <dave@...>
This seems strange:
Dave Thomas wrote:
NARUSE, Yui wrote:
Hi,
Hi,
Hi,
Hi,
Hi,
[#15399] Non-blocking SSL handshake — "Tony Arcieri" <tony@...>
Hello. I'm attempting to use SSL within my Fiber-based Actor framework (
[#15400] string[0..-1] no longer uses copy on write — Daniel DeLorme <dan-ml@...42.com>
As the subject states, in 1.8 string[0..-1] used copy on write but in
[#15429] rdoc/irb incompatibilities? — "Chad Woolley" <thewoolleyman@...>
Hello,
On Feb 8, 2008, at 03:50 AM, Chad Woolley wrote:
[#15445] IRHG -- Dumping T-Nodes — Charles Thornton <ceo@...>
OK - Here is the problem
[#15464] Possibly a timeout related problem — Dave Thomas <dave@...>
Setting up a sleep seems to interfere with signal handlers. The
[#15465] Synced IO seems not to be thread-safe — Dave Thomas <dave@...>
Take the following code:
[#15475] where's a complete list of assignment shortcuts? += &= %= etc. — Phlip <phlip2005@...>
Ruby Core:
[#15481] very bad character performance on ruby1.9 — "Eric Mahurin" <eric.mahurin@...>
I'd like to bring up the issue of how characters are represented in
Hi,
On Feb 11, 2008 11:51 AM, Yukihiro Matsumoto <matz@ruby-lang.org> wrote:
[#15496] Build failures - Revision 15428 — Sam Ruby <rubys@...>
This change caused many build failures for me.
[#15528] Test::Unit maintainer — Kouhei Sutou <kou@...>
Hi Nathaniel, Ryan,
<snip>
Hi Ryan,
Kouhei Sutou wrote:
[#15534] An Masgn of 1 — "Yehuda Katz" <wycats@...>
There's a weird case in Ruby that produces an masgn of a single argument,
[#15539] IRHG - Slow Child Working? — Charles Thornton <ceo@...>
For the life of me ,
[#15551] Proc#curry — ts <decoux@...>
ts wrote:
Hi,
Hi,
Yukihiro Matsumoto wrote:
[#15585] Ruby M17N meeting summary — Martin Duerst <duerst@...>
This is a rough translation of the Japanese meeting summary
On Feb 18, 2008, at 4:33 AM, Martin Duerst wrote:
Martin Duerst wrote:
On 19/02/2008, Gonzalo Garramu単o <ggarra@advancedsl.com.ar> wrote:
[#15589] Different stacktraces in 1.8 and 1.9 — "Vladimir Sizikov" <vsizikov@...>
Hi,
[#15596] possible bug in regexp lexing — Ryan Davis <ryand-ruby@...>
current:
In article <96106826-DFF4-4BFC-9938-3CB54F28F9F1@zenspider.com>,
In article <87wsp177pg.fsf@fsij.org>,
Hi,
In article <20080220125943.78CB3E0297@mail.bc9.jp>,
[#15610] — "David A. Black" <dblack@...>
Hi --
[#15630] embedding ruby | marking and sweeping wrapped structs — Matthew Metnetsky <met@...>
All,
[#15637] Options for String#encode — Martin Duerst <duerst@...>
I just commited a very first implementation of using a hash for
[#15656] defining a method with attached data — Paul Brannan <pbrannan@...>
For various reasons, I need to be able to attached some piece of data to
Attached is a patch to add this feature directly into YARV without a
On Tue, Feb 26, 2008 at 12:54:13AM +0900, Paul Brannan wrote:
[#15667] Gems running aground on multibyte char — "David A. Black" <dblack@...>
Hi --
Hi,
On Wed, Feb 27, 2008 at 1:03 AM, Nobuyoshi Nakada <nobu@ruby-lang.org> wrote:
Hi,
On Feb 27, 2008, at 18:27 PM, Nobuyoshi Nakada wrote:
[#15672] File.flock in ruby 1.9.0 — llin <cheempz@...>
Hello,
>>>>> "l" == llin <cheempz@gmail.com> writes:
[#15675] Ruby does not support mkfifo — Hongli Lai <hongli@...99.net>
Today I needed to call mkfifo() and found out that Ruby does not support
[#15678] Re: [ANN] MacRuby — "Rick DeNatale" <rick.denatale@...>
On 2/27/08, Laurent Sansonetti <laurent.sansonetti@gmail.com> wrote:
On Thu, Feb 28, 2008 at 6:33 AM, Rick DeNatale <rick.denatale@gmail.com> wrote:
Hi,
On Thu, Feb 28, 2008 at 1:51 PM, Yukihiro Matsumoto <matz@ruby-lang.org> wrote:
Re: string[0..-1] no longer uses copy on write
Hi,
At Thu, 7 Feb 2008 11:17:08 +0900,
Daniel DeLorme wrote in [ruby-core:15400]:
> As the subject states, in 1.8 string[0..-1] used copy on write but in
> 1.9 it does not, i.e.
> Should that be considered a bug?
It works as expected, so may not be called a bug.
> On a related topic, why is copy on write not used for String#dup ?
I also have wondered about it.
This patch allows associated strings to be shared too.
Index: string.c
===================================================================
--- string.c (revision 15392)
+++ string.c (working copy)
@@ -346,8 +346,6 @@ rb_tainted_str_new2(const char *ptr)
static VALUE
-str_new_shared(VALUE klass, VALUE str)
+str_replace_shared(VALUE str2, VALUE str)
{
- VALUE str2 = str_alloc(klass);
-
if (RSTRING_LEN(str) <= RSTRING_EMBED_LEN_MAX) {
STR_SET_EMBED(str2);
@@ -367,4 +365,10 @@ str_new_shared(VALUE klass, VALUE str)
static VALUE
+str_new_shared(VALUE klass, VALUE str)
+{
+ return str_replace_shared(str_alloc(klass), str);
+}
+
+static VALUE
str_new3(VALUE klass, VALUE str)
{
@@ -413,22 +417,30 @@ rb_str_new4(VALUE orig)
if (OBJ_FROZEN(orig)) return orig;
klass = rb_obj_class(orig);
- if (STR_SHARED_P(orig) && (str = RSTRING(orig)->as.heap.aux.shared)
- && klass == RBASIC(str)->klass) {
+ if (STR_SHARED_P(orig) && (str = RSTRING(orig)->as.heap.aux.shared)) {
long ofs;
ofs = RSTRING_LEN(str) - RSTRING_LEN(orig);
- if ((ofs > 0) || (!OBJ_TAINTED(str) && OBJ_TAINTED(orig))) {
+ if ((ofs > 0) || (klass != RBASIC(str)->klass) ||
+ (!OBJ_TAINTED(str) && OBJ_TAINTED(orig))) {
str = str_new3(klass, str);
RSTRING(str)->as.heap.ptr += ofs;
RSTRING(str)->as.heap.len -= ofs;
}
+ OBJ_INFECT(str, orig);
}
- else if (STR_ASSOC_P(orig) || STR_EMBED_P(orig)) {
+ else if (STR_EMBED_P(orig)) {
str = str_new(klass, RSTRING_PTR(orig), RSTRING_LEN(orig));
rb_enc_copy(str, orig);
+ OBJ_INFECT(str, orig);
+ }
+ else if (STR_ASSOC_P(orig)) {
+ VALUE assoc = RSTRING(orig)->as.heap.aux.shared;
+ FL_UNSET(orig, STR_ASSOC);
+ str = str_new4(klass, orig);
+ FL_SET(str, STR_ASSOC);
+ RSTRING(str)->as.heap.aux.shared = assoc;
}
else {
str = str_new4(klass, orig);
}
- OBJ_INFECT(str, orig);
OBJ_FREEZE(str);
return str;
@@ -553,7 +565,5 @@ VALUE
rb_str_dup(VALUE str)
{
- VALUE dup = str_alloc(rb_obj_class(str));
- rb_str_replace(dup, str);
- return dup;
+ return rb_str_new3(str);
}
@@ -778,12 +788,21 @@ void
rb_str_associate(VALUE str, VALUE add)
{
+ /* sanity check */
+ if (OBJ_FROZEN(str)) rb_error_frozen("string");
if (STR_ASSOC_P(str)) {
- /* sanity check */
- if (OBJ_FROZEN(str)) rb_error_frozen("string");
/* already associated */
rb_ary_concat(RSTRING(str)->as.heap.aux.shared, add);
}
else {
- if (STR_SHARED_P(str) || STR_EMBED_P(str)) {
+ if (STR_SHARED_P(str)) {
+ VALUE assoc = RSTRING(str)->as.heap.aux.shared;
+ str_make_independent(str);
+ if (STR_ASSOC_P(assoc)) {
+ assoc = RSTRING(assoc)->as.heap.aux.shared;
+ rb_ary_concat(assoc, add);
+ add = assoc;
+ }
+ }
+ else if (STR_EMBED_P(str)) {
str_make_independent(str);
}
@@ -800,8 +819,7 @@ VALUE
rb_str_associated(VALUE str)
{
+ if (STR_SHARED_P(str)) str = RSTRING(str)->as.heap.aux.shared;
if (STR_ASSOC_P(str)) {
- VALUE ary = RSTRING(str)->as.heap.aux.shared;
- if (OBJ_FROZEN(str)) OBJ_FREEZE(ary);
- return ary;
+ return RSTRING(str)->as.heap.aux.shared;
}
return Qfalse;
@@ -966,7 +984,15 @@ rb_str_substr(VALUE str, long beg, long
}
sub:
- str2 = rb_str_new5(str, p, len);
- rb_enc_copy(str2, str);
- OBJ_INFECT(str2, str);
+ if (len > RSTRING_EMBED_LEN_MAX && beg + len == RSTRING_LEN(str)) {
+ str2 = rb_str_new4(str);
+ str2 = str_new3(rb_obj_class(str2), str2);
+ RSTRING(str2)->as.heap.ptr += RSTRING(str2)->as.heap.len - len;
+ RSTRING(str2)->as.heap.len = len;
+ }
+ else {
+ str2 = rb_str_new5(str, p, len);
+ rb_enc_copy(str2, str);
+ OBJ_INFECT(str2, str);
+ }
return str2;
@@ -1180,5 +1206,5 @@ rb_enc_cr_str_buf_cat(VALUE str, const c
str_cr != ENC_CODERANGE_7BIT &&
ptr_cr != ENC_CODERANGE_7BIT) {
-incompatible:
+ incompatible:
rb_raise(rb_eArgError, "append incompatible encoding strings: %s and %s",
rb_enc_name(rb_enc_from_index(str_encindex)),
@@ -3006,4 +3032,7 @@ rb_str_replace(VALUE str, VALUE str2)
StringValue(str2);
len = RSTRING_LEN(str2);
+ if (STR_ASSOC_P(str2)) {
+ str2 = rb_str_new4(str2);
+ }
if (STR_SHARED_P(str2)) {
if (str_independent(str) && !STR_EMBED_P(str)) {
@@ -3017,16 +3046,7 @@ rb_str_replace(VALUE str, VALUE str2)
RSTRING(str)->as.heap.aux.shared = RSTRING(str2)->as.heap.aux.shared;
}
- else if (STR_ASSOC_P(str2)) {
- rb_str_modify(str);
- STR_SET_NOEMBED(str);
- RSTRING(str)->as.heap.ptr = ALLOC_N(char,len+1);
- memcpy(RSTRING_PTR(str), RSTRING_PTR(str2), len+1);
- FL_SET(str, STR_ASSOC);
- RSTRING(str)->as.heap.aux.shared = RSTRING(str2)->as.heap.aux.shared;
- }
else {
rb_str_modify(str);
- rb_str_resize(str, len);
- memcpy(RSTRING_PTR(str), RSTRING_PTR(str2), len+1);
+ str_replace_shared(str, str2);
}
--
Nobu Nakada