[#3907] Obtaining mode information on an IO object — Jos Backus <jos@...>

The attached patch implements IO#mode. This method returns the mode the IO

17 messages 2004/12/06
[#3909] Re: [patch] Obtaining mode information on an IO object — nobu.nokada@... 2004/12/07

Hi,

[#3910] Re: [patch] Obtaining mode information on an IO object — Jos Backus <jos@...> 2004/12/07

On Tue, Dec 07, 2004 at 09:25:13AM +0900, nobu.nokada@softhome.net wrote:

[#3925] Re: [patch] Obtaining mode information on an IO object — James Britt <ruby@...> 2004/12/09

Jos Backus wrote:

[#4009] cgi.rb -- more GET/POST stuff — mde@...26.com

First of all, I think it would be great, as Eustaquio suggests, to

17 messages 2004/12/23
[#4016] Re: [PATCH] cgi.rb -- more GET/POST stuff — Francis Hwang <sera@...> 2004/12/24

GETs and POSTs are defined to be fairly different actions. I'd read

[#4027] Allowing custom number literal suffixes? — Florian Gro<florgro@...>

Moin!

35 messages 2004/12/27
[#4070] Re: Allowing custom number literal suffixes? — nobu.nokada@... 2005/01/02

Hi,

[#4072] Re: Allowing custom number literal suffixes? — Mathieu Bouchard <matju@...> 2005/01/02

[#4079] Re: Allowing custom number literal suffixes? — Florian Gro<florgro@...> 2005/01/03

Mathieu Bouchard wrote:

[#4081] Re: Allowing custom number literal suffixes? — Mathieu Bouchard <matju@...> 2005/01/03

[#4082] Re: Allowing custom number literal suffixes? — Florian Gro<florgro@...> 2005/01/03

Mathieu Bouchard wrote:

[#4084] Re: Allowing custom number literal suffixes? — Brent Roman <brent@...> 2005/01/04

I'm not sure I would advocate making Ruby's grammar even more

[#4086] Re: Allowing custom number literal suffixes? — Mathieu Bouchard <matju@...> 2005/01/04

[#4033] Garbage collection trouble — Christian Neukirchen <chneukirchen@...>

Hello,

13 messages 2004/12/27

Re: [1.9, 1.8] super

From: ts <decoux@...>
Date: 2004-12-03 11:41:04 UTC
List: ruby-core #3874
>>>>> "Y" == Yukihiro Matsumoto <matz@ruby-lang.org> writes:

Y> Interesting!  I have never thought of that.  Let me work on it (or you
Y> can, if you want ;-).

 I'm not really sure because it's easier to write for 1.8 :-(

uln% diff -pu eval.c.old eval.c     
--- eval.c.old	2004-12-03 12:24:05.000000000 +0100
+++ eval.c	2004-12-03 12:32:43.000000000 +0100
@@ -3237,11 +3237,19 @@ rb_eval(self, n)
 		}
 	    }
 	    if (nd_type(node) == NODE_ZSUPER) {
-		if (ruby_frame->prev && (ruby_frame->prev->flags & FRAME_DMETH)) {
-		    rb_raise(rb_eRuntimeError, "super: specify arguments explicitly");
-		}
 		argc = ruby_frame->argc;
-		argv = ruby_scope->local_vars + 2;
+		if (argc && ruby_frame->prev &&
+                    (ruby_frame->prev->flags & FRAME_DMETH)) {
+                    if (TYPE(RBASIC(ruby_scope)->klass) != T_ARRAY ||
+                        RARRAY(RBASIC(ruby_scope)->klass)->len != argc) {
+                        rb_raise(rb_eRuntimeError, 
+                                 "super: specify arguments explicitly");
+                    }
+                    argv = RARRAY(RBASIC(ruby_scope)->klass)->ptr;
+                }
+                else {
+                    argv = ruby_scope->local_vars + 2;
+                }
 	    }
 	    else {
 		BEGIN_CALLARGS;
@@ -8188,7 +8196,7 @@ proc_invoke(proc, args, self, klass)
     volatile int safe = ruby_safe_level;
     volatile VALUE old_wrapper = ruby_wrapper;
     volatile int pcall, avalue = Qtrue;
-    VALUE bvar = Qnil;
+    VALUE bvar = Qnil, tmp = args;
 
     Data_Get_Struct(proc, struct BLOCK, data);
     pcall = (data->flags & BLOCK_LAMBDA) ? YIELD_LAMBDA_CALL : 0;
@@ -8213,6 +8221,14 @@ proc_invoke(proc, args, self, klass)
     _block.block_obj = bvar;
     if (self != Qundef) _block.frame.self = self;
     if (klass) _block.frame.last_class = klass;
+    _block.frame.argc = RARRAY(tmp)->len;
+    if (_block.frame.argc) {
+        NEWOBJ(scope, struct SCOPE);
+        OBJSETUP(scope, tmp, T_SCOPE);
+        scope->local_tbl = _block.scope->local_tbl;
+        scope->local_vars = _block.scope->local_vars;
+        _block.scope = scope;
+    }
     ruby_block = &_block;
 
     PUSH_ITER(ITER_CUR);
@@ -8229,6 +8245,9 @@ proc_invoke(proc, args, self, klass)
     }
     POP_TAG();
     POP_ITER();
+    if (_block.frame.argc) {
+        rb_gc_force_recycle((VALUE)ruby_block->scope);
+    }
     ruby_block = old_block;
     ruby_wrapper = old_wrapper;
     POP_VARS();
uln% 



Guy Decoux


In This Thread