[#27163] Statically linked extensions and deferred initialization. — Kent Dahl <kentda@...>

Hi.

12 messages 2001/12/01

[#27168] which editor is adviceful? — Niko Schwarz <niko.schwarz@...>

I know this always is the standard question for every language, but for

17 messages 2001/12/01

[#27191] OO AI — mentifex@... (Arthur T. Murray)

The road to supercomputer AI is paved with good inventions; visit

22 messages 2001/12/01

[#27265] John Roth dolt ( Re: A challenge to proponents of Unit Testing. ) — olczyk@... (Thaddeus L Olczyk)

Background.

166 messages 2001/12/02
[#27295] Re: John Roth dolt ( Re: A challenge to proponents of Unit Testing. ) — Ron Jeffries <ronjeffries@...> 2001/12/02

On Sat, 01 Dec 2001 13:46:42 GMT, olczyk@interaccess.com (Thaddeus L

[#28226] Re: John Roth dolt ( Re: A challenge to proponents of Unit Testing. ) — rbinder@... (Bob Binder) 2001/12/11

Keith Ray <k1e2i3t4h5r6a7y@1m2a3c4.5c6o7m> wrote in message news:<k1e2i3t4h5r6a7y-7C2620.18082110122001@news.attbi.com>...

[#27697] Re: John Roth dolt ( Re: A challenge to proponents of Unit Testing. ) — tadamsmar@... (Tom Adams) 2001/12/06

Ron Jeffries <ronjeffries@REMOVEacm.org> wrote in message news:<176717160028CE03.51B6AF6E20305FB5.2EC5DCFFD6C10DFD@lp.airnews.net>...

[#27958] Re: John Roth dolt ( Re: A challenge to proponents of Unit Testing. ) — "Robert C. Martin" <rmartin@...> 2001/12/08

On Sat, 08 Dec 2001 00:35:43 -0600, Robert C. Martin <rmartin @

[#27287] New RubyGarden Poll - this one affects us all :) — Dave Thomas <Dave@...>

38 messages 2001/12/02
[#27290] RE: New RubyGarden Poll - this one affects us all :) — "Mark Hahn" <mchahn@...> 2001/12/02

[#27482] Re: New RubyGarden Poll - this one affects us all :) — Darrin Thompson <dthompson@...> 2001/12/04

Paul Brannan wrote:

[#27488] Re: New RubyGarden Poll - this one affects us all :) — Michael Neumann <neumann@...> 2001/12/04

Darrin Thompson wrote:

[#27546] Re: New RubyGarden Poll - this one affects us all :) — Bob Hutchison <hutch@...> 2001/12/05

Hi everyone,

[#27552] Re: New RubyGarden Poll - this one affectsus all :) — "Bill Kelly" <billk@...> 2001/12/05

[#27553] Re: New RubyGarden Poll - this one affectsus all :) — David Alan Black <dblack@...> 2001/12/05

Hello --

[#27344] Programname in (un*x) top — kamphausen@... (SKa)

Dear Rubies,

25 messages 2001/12/03
[#27454] Re: Programname in (un*x) top — kamphausen@... (SKa) 2001/12/04

mark@wutka.com wrote in message news:<IsPO7.70773$8n4.4039369@e3500-atl1.usenetserver.com>...

[#27456] Re: Programname in (un*x) top — Martin Weber <Ephaeton@...> 2001/12/04

On Wed, Dec 05, 2001 at 01:03:17AM +0900, SKa wrote:

[#27369] Killer app for Ruby developers? — "Hal E. Fulton" <hal9000@...>

This is an idea that is very skeletal

17 messages 2001/12/03

[#27405] Sourceforge vs. Savannah — "Hal E. Fulton" <hal9000@...>

Opinion question(s).

16 messages 2001/12/04

[#27485] Package Naming — Dave Thomas <Dave@...>

69 messages 2001/12/04
[#27487] RE: Package Naming — "Mark Hahn" <mchahn@...> 2001/12/04

[#27501] RE: Package Naming — Sean Russell <ser@...> 2001/12/05

Mark Hahn wrote:

[#27506] Re: Package Naming — "Mark Hahn" <mchahn@...> 2001/12/05

[#27585] Re: Package Naming — "Mark Hahn" <mchahn@...> 2001/12/05

The forest service must be a hotbed for beauracracy. The only requirement

[#27587] Re: Package Naming — David Alan Black <dblack@...> 2001/12/05

Hello --

[#27588] Re: Package Naming — "Rich Kilmer" <rich@...> 2001/12/05

> -----Original Message-----

[#27589] Re: Package Naming — David Alan Black <dblack@...> 2001/12/05

Hi --

[#27591] Re: Package Naming — "Rich Kilmer" <rich@...> 2001/12/05

David...

[#27505] Do we need something like Python-URL? — ptkwt@...1.aracnet.com (Phil Tomson)

16 messages 2001/12/05

[#27647] web hosting — "ktethridge" <kevinethridge@...>

Does anyone know of a good hosting service that supports Ruby and MySQL?

18 messages 2001/12/06
[#27654] RE: web hosting — "Curt Hibbs" <curt@...> 2001/12/06

Kevin wrote:

[#27761] what are symbols good for???? — Markus Jais <info@...>

hello

13 messages 2001/12/06

[#27783] DBI and large result sets — " JamesBritt" <james@...>

I'm starting to use Ruby DBI, and I'm wondering about its use when processing

18 messages 2001/12/07
[#27805] Re: DBI and large result sets — Michael Neumann <neumann@...> 2001/12/07

JamesBritt wrote:

[#27829] Re: DBI and large result sets — "James Britt (rubydev)" <james@...> 2001/12/07

Thanks to those who helped clarify things.

[#27824] Perl/Python Module Porting — Joseph Erickson <jerickson@...>

Has there been any thought in the Ruby Community of actively porting

27 messages 2001/12/07
[#27834] Re: Perl/Python Module Porting — ptkwt@...1.aracnet.com (Phil Tomson) 2001/12/07

In article <B3265BDC-EB39-11D5-97BA-0050E4C58663@eyemg.com>,

[#27837] Perl/Python Module Porting — Eric Lee Green <eric@...> 2001/12/07

On Friday 07 December 2001 11:55 am, Phil Tomson wrote:

[#27895] Re: Perl/Python Module Porting — Mathieu Bouchard <matju@...> 2001/12/08

[#27894] Re: App server for Ruby? — Tobias DiPasquale <anany@...>

Todd Gillespie wrote

12 messages 2001/12/08

[#27897] Dictionary.com speeder upper — "Ralph Mason" <ralph.mason@...>

Here is a little script I did to make dictionary.com more useful for me.

15 messages 2001/12/08

[#27915] Ruby IDE?? What about using Eclipse?? — "Ross Shaw" <rshaw1961@...>

Eclipse (www.eclipse.org) is an open extensible IDE (written in Java) that

16 messages 2001/12/08
[#27916] Re: Ruby IDE?? What about using Eclipse?? — Robert Feldt <feldt@...> 2001/12/08

On Sat, 8 Dec 2001, Ross Shaw wrote:

[#27920] Re: Ruby IDE?? What about using Eclipse?? — "Curt Hibbs" <curt@...> 2001/12/08

I am going to do this.

[#27921] Re: Ruby IDE?? What about using Eclipse?? — Robert Feldt <feldt@...> 2001/12/08

On Sat, 8 Dec 2001, Curt Hibbs wrote:

[#27980] Displaying Ruby code in LaTeX — "Harry Ohlsen" <harryo@...>

Has anyone written a document in LaTeX that includes examples of Ruby

15 messages 2001/12/08

[#28052] How does puts decide how to print a given object? — "Harry Ohlsen" <harryo@...>

I'm writing a short tutorial introduction to Ruby for an upcoming uni

20 messages 2001/12/10
[#28062] Re: How does puts decide how to print a given object? — matz@... (Yukihiro Matsumoto) 2001/12/10

Hi,

[#28087] Re: How does puts decide how to print a given object? — David Alan Black <dblack@...> 2001/12/10

Hello --

[#28096] The benefits of dynamic typing? — Roy Patrick Tan <rtan@...>

I have just recently read an old paper by Wirth "On the Design of

59 messages 2001/12/10
[#28108] Re: The benefits of dynamic typing? — Robert Feldt <feldt@...> 2001/12/10

This is a bit long...

[#28147] Re: The benefits of dynamic typing? — "Harry Ohlsen" <harryo@...> 2001/12/10

In article <3C153282.9000309@vt.edu>, "Roy Patrick Tan" <rtan@vt.edu>

[#28150] Re: The benefits of dynamic typing? — "Mark Hahn" <mchahn@...> 2001/12/10

[#28115] Ruby for Mac OS X — "Dan Hable" <DHable@...>

Hi,

18 messages 2001/12/10
[#28119] Re: Ruby for Mac OS X — Luc Heinrich <lucsky@...> 2001/12/10

On 10/12/2001 19:05, "Dan Hable" <DHable@phmining.com> wrote:

[#28885] Re: Ruby for Mac OS X — John Beppu <beppu@...9.org> 2001/12/18

[ date ] 2001/12/11 | Tuesday | 03:23 AM

[#28179] Ruby Musings — "John Kaurin" <jkaurin@...>

Ruby Musings (IMHO):

18 messages 2001/12/11

[#28272] Survey for new Rubyists — ptkwt@...1.aracnet.com (Phil Tomson)

23 messages 2001/12/11

[#28307] Reviews solicited for Ruby article — "Harry Ohlsen" <harryo@...>

I'm in the process of writing an article on Ruby for a computer science students'

17 messages 2001/12/12

[#28308] Rendering UML diagrams? — Robert Feldt <feldt@...>

Hi,

14 messages 2001/12/12

[#28495] internal server errors — Jack Dempsey <dempsejn@...>

hi all,

15 messages 2001/12/14

[#28500] A Review of "Ruby in a Nutshell" book — Johan Holmberg <holmberg@...>

27 messages 2001/12/14

[#28552] help with ^M (line endings ) removing — Dinakar Desai <Desai.Dinakar@...>

Hello:

12 messages 2001/12/14

[#28655] RDoc - Document Ruby source files — Dave Thomas <Dave@...>

25 messages 2001/12/16
[#28768] Re: RDoc - Document Ruby source files — Dave Thomas <Dave@...> 2001/12/17

Alexander Bokovoy <a.bokovoy@sam-solutions.net> writes:

[#28769] Re: RDoc - Document Ruby source files — Alexander Bokovoy <a.bokovoy@...> 2001/12/17

On Mon, Dec 17, 2001 at 11:19:11PM +0900, Dave Thomas wrote:

[#28789] Re: RDoc - Document Ruby source files — "Christian Boos" <cboos@...> 2001/12/17

[#28676] How do you do "character filtering" of a string using each_byte. — olczyk@... (Thaddeus L. Olczyk)

I'm trying to do several things where I produce new strings from old

10 messages 2001/12/16

[#28722] stderr from external process? — "MikkelFJ" <mikkelj-anti-spam@...1.dknet.dk>

I have asked this question before - maybe it is just not possible:

75 messages 2001/12/17
[#28923] Re: stderr from external process? — "MikkelFJ" <mikkelj-anti-spam@...1.dknet.dk> 2001/12/19

[#28960] RE: Ruby 'make' replacement (Re: stderr from external process?) — "Christian Boos" <cboos@...> 2001/12/19

Hello,

[#29094] Re: Ruby 'make' replacement (Re: stderr from external process?) — "Jason Horman" <jason@...> 2001/12/20

I wrote the Torrent library. I was not sure what license to pick so I picked

[#29096] Re: Ruby 'make' replacement (Re: stderr from external process?) — Robert Feldt <feldt@...> 2001/12/20

Just a thought on this thread (it might be obvious, I just want it to be

[#29117] Re: Ruby 'make' replacement (Re: stderr from external process?) — Dave Thomas <Dave@...> 2001/12/20

"MikkelFJ" <mikkelj-anti-spam@post1.dknet.dk> writes:

[#29156] Programming Ruby — "Marcio Barbosa" <argaeus@...> 2001/12/20

Hi,

[#28737] [Announcement] Ruby news weekly — Holden Glova <dsafari@...>

-----BEGIN PGP SIGNED MESSAGE-----

30 messages 2001/12/17

[#28749] Constant loss of memory with Kernel::load in a loop — "Jens Nissen" <frodo.hobbit@...>

We have developed a wonderful application under Windows 2K using Ruby 1.6.5

31 messages 2001/12/17
[#28755] Re: Constant loss of memory with Kernel::load in a loop — nobu.nokada@... 2001/12/17

At Mon, 17 Dec 2001 19:36:42 +0900,

[#28760] Re: Constant loss of memory with Kernel::load in a loop — ts <decoux@...> 2001/12/17

>>>>> "n" == nobu nokada <nobu.nokada@softhome.net> writes:

[#28774] Re: Constant loss of memory with Kernel::load in a loop — nobu.nokada@... 2001/12/17

At Mon, 17 Dec 2001 22:06:31 +0900,

[#28782] Re: Constant loss of memory with Kernel::load in a loop — ts <decoux@...> 2001/12/17

>>>>> "n" == nobu nokada <nobu.nokada@softhome.net> writes:

[#28803] Re: Constant loss of memory with Kernel::load in a loop — nobu.nokada@... 2001/12/17

At Mon, 17 Dec 2001 23:59:17 +0900,

[#29128] Re: Constant loss of memory with Kernel::load in a loop — matz@... (Yukihiro Matsumoto) 2001/12/20

Hi,

[#28855] [IDEA] creating stand-alone versions for easy distribution etc — Patrik Sundberg <ps@...>

hi list,

10 messages 2001/12/18
[#28856] Re: [IDEA] creating stand-alone versions for easy distribution etc — Robert Feldt <feldt@...> 2001/12/18

On Tue, 18 Dec 2001, Patrik Sundberg wrote:

[#28875] C++ preincrement operator — Paul Brannan <paul@...>

In Ruby, if I do this:

17 messages 2001/12/18
[#28876] Re: C++ preincrement operator — Peter Hickman <peter@...> 2001/12/18

Paul Brannan wrote:

[#28878] Re: C++ preincrement operator — Paul Brannan <paul@...> 2001/12/18

On Wed, Dec 19, 2001 at 02:09:03AM +0900, Peter Hickman wrote:

[#28879] Re: C++ preincrement operator — "Jack Dempsey" <dempsejn@...> 2001/12/18

so basically you're suggesting that any amount of stacking -'s or +'s past

[#28911] A Ruby programmer walked into a bar ... — "Harry Ohlsen" <harryo@...>

Now that I have your attention :-) ...

29 messages 2001/12/19
[#28985] Re: A Ruby programmer walked into a bar and ordered a Ruby-Thread — Luc Heinrich <lucsky@...> 2001/12/19

On 19/12/2001 15:46, "Harry Ohlsen" <harryo@zip.com.au> wrote:

[#29036] Re: A Ruby programmer walked into a bar and ordered a Ruby-Thread — HarryO <harryo@...> 2001/12/19

On Thu, 20 Dec 2001 07:58:47 +1100, Dave Thomas wrote:

[#29038] Re: A Ruby programmer walked into a bar and ordered a Ruby-Thread — "Mark Hahn" <mchahn@...> 2001/12/20

[#29046] Re: A Ruby programmer walked into a bar and ordered a Ruby-Thread — Dave Thomas <Dave@...> 2001/12/20

"Mark Hahn" <mchahn@facelink.com> writes:

[#28926] Stream? — Ron Jeffries <ronjeffries@...>

Is there a memory stream object in Ruby, analogous to Smalltalk's

14 messages 2001/12/19

[#28977] overriding methods: (almost) a replacement for alias_method — Paul Brannan <paul@...>

I think almost all of us will agree that it's pretty ugly to do:

17 messages 2001/12/19

[#29014] But is it Fun? — edwardhatfield1@... (Edward Hatfield)

I've been watching Ruby with great interest over

19 messages 2001/12/19

[#29265] upper case to lower — "Bashar A. Asad" <baasad@...>

hello,

25 messages 2001/12/21

[#29296] XEmacs problems with ruby-mode.el

Hi,

17 messages 2001/12/22

[#29327] a better way? — Ron Jeffries <ronjeffries@...>

I was writing a little code that cached a function value, and wound up

38 messages 2001/12/23
[#29328] Re: a better way? — David Alan Black <dblack@...> 2001/12/23

Hi --

[#29331] Re: a better way? — "Hal E. Fulton" <hal9000@...> 2001/12/23

----- Original Message -----

[#29488] Python and Ruby: a comparison — Ron Stephens <rdsteph@...>

I initiated a thread over on comp.lang.python which has turned into

68 messages 2001/12/27
[#29677] Re: Python and Ruby: a comparison — Ron Stephens <rdsteph@...> 2001/12/30

Very interesting idea. Unfortunately, I doubt if it woudl be possible. For one

[#29696] Re: Python and Ruby: a comparison — "Conrad Schneiker" <schneiker@...> 2001/12/30

"Ron Stephens" <rdsteph@earthlink.net> wrote:

[#29869] Re: Python and Ruby: a comparison — Michael Kelly <mkelly2002NOSPAM@...> 2001/12/31

On Mon, 31 Dec 2001 12:26:46 +1100, Michael Lucas-Smith >Check out

[#29871] Re: Python and Ruby: a comparison — Dan Sugalski <dan@...> 2001/12/31

At 02:02 AM 1/1/2002 +0900, Michael Kelly wrote:

[#29541] New Rubygarden poll — Dave Thomas <Dave@...>

27 messages 2001/12/28

[#29545] RDoc now displays source — Dave Thomas <Dave@...>

17 messages 2001/12/28

[#29596] extending method of class A to support arguments of class B by promoting `self' to class B — Tomasz Wegrzanowski <taw@...>

(Names of classes chosen arbitrarily, just to show issue)

18 messages 2001/12/28

[#29613] Extending Ruby on Windows platform using VC++ IDE — "Alan Moyer" <moyer4@...>

Hi,

11 messages 2001/12/29

[#29667] Yet Another Newbie — Michael Kelly <mkelly2002NOSPAM@...>

Yet Another Newbie. :)

13 messages 2001/12/29

[#29713] Ruby parsers in Ruby — ptkwt@...1.aracnet.com (Phil Tomson)

Wouldn't it be cool to have Ruby playing with Parrot before Python or even

20 messages 2001/12/30

[#29773] Proc.class vs yield — Michael Lucas-Smith <s3225202@...>

Hi,

49 messages 2001/12/31
[#29782] Re: Proc.class vs yield — David Alan Black <dblack@...> 2001/12/31

Hello --

[#29795] Re: Proc.class vs yield — Michael Lucas-Smith <s3225202@...> 2001/12/31

def someThing (&a, &b)

[#29796] Re: Proc.class vs yield — David Alan Black <dblack@...> 2001/12/31

Hi --

[#29797] Re: Proc.class vs yield — Michael Lucas-Smith <s3225202@...> 2001/12/31

>

[#29802] Re: Proc.class vs yield — David Alan Black <dblack@...> 2001/12/31

Hi --

[#29849] Re: Proc.class vs yield — Michael Lucas-Smith <s3225202@...> 2001/12/31

That's a good solution, thanks.

[#29867] Re: Proc.class vs yield — David Alan Black <dblack@...> 2001/12/31

Hi --

[#29798] FXRuby FreeRIDE Spike uploaded. — Phlip <phlip_cpp@...>

Rubies:

14 messages 2001/12/31

[#29886] Ruby/Python: Software Engineering — noone <nanotech@...>

All:

36 messages 2001/12/31
[#29889] Re: Ruby/Python: Software Engineering — Tomasz Wegrzanowski <taw@...> 2001/12/31

On Tue, Jan 01, 2002 at 05:03:35AM +0900, noone wrote:

[#29904] Re: Ruby/Python: Software Engineering — noone <nanotech@...> 2001/12/31

Tomasz/All:

[#29887] RE: Ruby multi-dimensional Hash question?---Any one out there willing to give this questions a try? — "Crandall, Jeff W" <jeff.w.crandall@...>

Anyone? Is this the correct mailing list to try and get

18 messages 2001/12/31

[#29895] How to check free diskspace? — Le Wang <lewang@?.?.bigfoot.com (nospam)>

Hi all,

23 messages 2001/12/31

[ruby-talk:29211] Re: Constant loss of memory with Kernel::load in a loop

From: nobu.nokada@...
Date: 2001-12-21 10:09:26 UTC
List: ruby-talk #29211
At Fri, 21 Dec 2001 17:34:45 +0900,
nobu.nokada@softhome.net wrote:
> The only way I could think of is making nd_file a String VALUE
> and marking them directly from each NODE's.  It prevents leaks
> but doesn't make GC notably slow.  Though it may be a big
> modification.

It was exactly big.


Index: env.h
===================================================================
RCS file: /cvs/ruby/src/ruby/env.h,v
retrieving revision 1.7
diff -u -2 -p -r1.7 env.h
--- env.h	2001/02/14 05:51:57	1.7
+++ env.h	2001/12/21 09:00:28
@@ -23,5 +23,5 @@ extern struct FRAME {
     struct FRAME *prev;
     struct FRAME *tmp;
-    char *file;
+    VALUE file;
     int line;
     int iter;
Index: error.c
===================================================================
RCS file: /cvs/ruby/src/ruby/error.c,v
retrieving revision 1.35
diff -u -2 -p -r1.35 error.c
--- error.c	2001/12/10 07:18:12	1.35
+++ error.c	2001/12/21 09:30:08
@@ -41,13 +41,13 @@ err_snprintf(buf, len, fmt, args)
     int n;
 
-    if (!ruby_sourcefile) {
+    if (!RTEST(ruby_sourcefile)) {
 	vsnprintf(buf, len, fmt, args);
 	return;
     }
     else if (ruby_sourceline == 0) {
-	n = snprintf(buf, len, "%s: ", ruby_sourcefile);
+	n = snprintf(buf, len, "%s: ", RSTRING(ruby_sourcefile)->ptr);
     }
     else {
-	n = snprintf(buf, len, "%s:%d: ", ruby_sourcefile, ruby_sourceline);
+	n = snprintf(buf, len, "%s:%d: ", RSTRING(ruby_sourcefile)->ptr, ruby_sourceline);
     }
     if (len > n) {
Index: eval.c
===================================================================
RCS file: /cvs/ruby/src/ruby/eval.c,v
retrieving revision 1.237
diff -u -2 -p -r1.237 eval.c
--- eval.c	2001/12/20 18:19:42	1.237
+++ eval.c	2001/12/21 09:57:29
@@ -859,6 +859,6 @@ static void scope_dup _((struct SCOPE *)
 
 static VALUE rb_eval _((VALUE,NODE*));
-static VALUE eval _((VALUE,VALUE,VALUE,char*,int));
-static NODE *compile _((VALUE, char*, int));
+static VALUE eval _((VALUE,VALUE,VALUE,VALUE,int));
+static NODE *compile _((VALUE, VALUE, int));
 
 static VALUE rb_yield_0 _((VALUE, VALUE, VALUE, int));
@@ -871,5 +871,5 @@ static void assign _((VALUE,NODE*,VALUE,
 static VALUE trace_func = 0;
 static int tracing = 0;
-static void call_trace_func _((char*,char*,int,VALUE,ID,VALUE));
+static void call_trace_func _((char*,VALUE,int,VALUE,ID,VALUE));
 
 static void
@@ -885,5 +885,5 @@ error_pos()
 	}
 	else {
-	    fprintf(stderr, "%s:%d", ruby_sourcefile, ruby_sourceline);
+	    fprintf(stderr, "%s:%d", RSTRING(ruby_sourcefile)->ptr, ruby_sourceline);
 	}
     }
@@ -925,5 +925,5 @@ error_print()
     if (NIL_P(errat)){
 	if (ruby_sourcefile)
-	    fprintf(stderr, "%s:%d", ruby_sourcefile, ruby_sourceline);
+	    fprintf(stderr, "%s:%d", RSTRING(ruby_sourcefile)->ptr, ruby_sourceline);
 	else
 	    fprintf(stderr, "%d", ruby_sourceline);
@@ -1243,4 +1243,6 @@ compile_error(at)
 }
 
+extern VALUE rb_source_filename _((const char *));
+
 VALUE
 rb_eval_string(str)
@@ -1248,7 +1250,7 @@ rb_eval_string(str)
 {
     VALUE v;
-    char *oldsrc = ruby_sourcefile;
+    VALUE oldsrc = ruby_sourcefile;
 
-    ruby_sourcefile = "(eval)";
+    ruby_sourcefile = rb_source_filename("(eval)");
     v = eval(ruby_top_self, rb_str_new2(str), Qnil, 0, 0);
     ruby_sourcefile = oldsrc;
@@ -1690,5 +1692,5 @@ copy_node_scope(node, rval)
 	argc=n->nd_alen;\
         if (argc > 0) {\
-	    char *file = ruby_sourcefile;\
+	    VALUE file = ruby_sourcefile;\
 	    int line = ruby_sourceline;\
             int i;\
@@ -1709,5 +1711,5 @@ copy_node_scope(node, rval)
     else {\
         VALUE args = rb_eval(self,n);\
-	char *file = ruby_sourcefile;\
+	VALUE file = ruby_sourcefile;\
 	int line = ruby_sourceline;\
 	if (TYPE(args) != T_ARRAY)\
@@ -1984,5 +1986,5 @@ static void
 call_trace_func(event, file, line, self, id, klass)
     char *event;
-    char *file;
+    VALUE file;
     int line;
     VALUE self;
@@ -1992,5 +1994,5 @@ call_trace_func(event, file, line, self,
     int state;
     struct FRAME *prev;
-    char *file_save = ruby_sourcefile;
+    VALUE file_save = ruby_sourcefile;
     int line_save = ruby_sourceline;
     VALUE srcfile;
@@ -2020,5 +2022,5 @@ call_trace_func(event, file, line, self,
     PUSH_TAG(PROT_NONE);
     if ((state = EXEC_TAG()) == 0) {
-	srcfile = rb_str_new2(ruby_sourcefile?ruby_sourcefile:"(ruby)");
+	srcfile = ruby_sourcefile?ruby_sourcefile:rb_source_filename("(ruby)");
 	proc_invoke(trace_func, rb_ary_new3(6, rb_str_new2(event),
 					    srcfile,
@@ -2220,5 +2222,5 @@ rb_eval(self, n)
 		    call_trace_func("line", tag->nd_file, nd_line(tag), self,
 				    ruby_frame->last_func,
-				    ruby_frame->last_class);	
+				    ruby_frame->last_class);
 		}
 		ruby_sourcefile = tag->nd_file;
@@ -2376,5 +2378,5 @@ rb_eval(self, n)
 		else {
 		    VALUE recv;
-		    char *file = ruby_sourcefile;
+		    VALUE file = ruby_sourcefile;
 		    int line = ruby_sourceline;
 
@@ -3333,5 +3335,5 @@ module_setup(module, n)
     struct FRAME frame;
     VALUE result;		/* OK */
-    char *file = ruby_sourcefile;
+    VALUE file = ruby_sourcefile;
     int line = ruby_sourceline;
     TMP_PROTECT;
@@ -3515,5 +3517,5 @@ rb_longjmp(tag, mesg)
 	fprintf(stderr, "Exception `%s' at %s:%d - %s\n",
 		rb_class2name(CLASS_OF(ruby_errinfo)),
-		ruby_sourcefile, ruby_sourceline,
+		RSTRING(ruby_sourcefile)->ptr, ruby_sourceline,
 		RSTRING(e)->ptr);
     }
@@ -4174,5 +4176,5 @@ rb_f_missing(argc, argv, obj)
     char *format = 0;
     char *desc = "";
-    char *file = ruby_sourcefile;
+    VALUE file = ruby_sourcefile;
     int   line = ruby_sourceline;
 
@@ -4409,5 +4411,5 @@ rb_call0(klass, recv, id, argc, argv, bo
 	    if (trace_func) {
 		int state;
-		char *file = ruby_frame->prev->file;
+		VALUE file = ruby_frame->prev->file;
 		int line = ruby_frame->prev->line;
 		if (!file) {
@@ -4565,5 +4567,5 @@ rb_call0(klass, recv, id, argc, argv, bo
 	    ruby_cref = saved_cref;
 	    if (trace_func) {
-		char *file = ruby_frame->prev->file;
+		VALUE file = ruby_frame->prev->file;
 		int line = ruby_frame->prev->line;
 		if (!file) {
@@ -4776,14 +4778,15 @@ backtrace(lev)
     ary = rb_ary_new();
     if (lev < 0) {
+	char *file = ruby_sourcefile?RSTRING(ruby_sourcefile)->ptr:NULL;
 	if (frame->last_func) {
 	    snprintf(buf, BUFSIZ, "%s:%d:in `%s'",
-		     ruby_sourcefile, ruby_sourceline,
+		     file, ruby_sourceline,
 		     rb_id2name(frame->last_func));
 	}
 	else if (ruby_sourceline == 0) {
-	    snprintf(buf, BUFSIZ, "%s", ruby_sourcefile);
+	    snprintf(buf, BUFSIZ, "%s", file);
 	}
 	else {
-	    snprintf(buf, BUFSIZ, "%s:%d", ruby_sourcefile, ruby_sourceline);
+	    snprintf(buf, BUFSIZ, "%s:%d", file, ruby_sourceline);
 	}
 	rb_ary_push(ary, rb_str_new2(buf));
@@ -4801,9 +4804,9 @@ backtrace(lev)
 	if (frame->prev && frame->prev->last_func) {
 	    snprintf(buf, BUFSIZ, "%s:%d:in `%s'",
-		     frame->file, frame->line,
+		     RSTRING(frame->file)->ptr, frame->line,
 		     rb_id2name(frame->prev->last_func));
 	}
 	else {
-	    snprintf(buf, BUFSIZ, "%s:%d", frame->file, frame->line);
+	    snprintf(buf, BUFSIZ, "%s:%d", RSTRING(frame->file)->ptr, frame->line);
 	}
 	rb_ary_push(ary, rb_str_new2(buf));
@@ -4858,5 +4861,5 @@ static NODE*
 compile(src, file, line)
     VALUE src;
-    char *file;
+    VALUE file;
     int line;
 {
@@ -4865,5 +4868,5 @@ compile(src, file, line)
     ruby_nerrs = 0;
     Check_Type(src, T_STRING);
-    node = rb_compile_string(file, src, line);
+    node = rb_compile_string(StringValuePtr(file), src, line);
 
     if (ruby_nerrs == 0) return node;
@@ -4873,6 +4876,5 @@ compile(src, file, line)
 static VALUE
 eval(self, src, scope, file, line)
-    VALUE self, src, scope;
-    char *file;
+    VALUE self, src, scope, file;
     int line;
 {
@@ -4886,5 +4888,5 @@ eval(self, src, scope, file, line)
     volatile VALUE old_wrapper;
     struct FRAME frame;
-    char *filesave = ruby_sourcefile;
+    VALUE filesave = ruby_sourcefile;
     int linesave = ruby_sourceline;
     volatile int iter = ruby_frame->iter;
@@ -4914,5 +4916,5 @@ eval(self, src, scope, file, line)
 	old_wrapper = ruby_wrapper;
 	ruby_wrapper = data->wrapper;
-	if ((file == 0 || (line == 1 && strcmp(file, "(eval)") == 0)) &&
+	if ((file == 0 || (line == 1 && strcmp(RSTRING(file)->ptr, "(eval)") == 0)) &&
 	    data->body && data->body->nd_file) {
 	    file = data->body->nd_file;
@@ -4996,5 +4998,5 @@ eval(self, src, scope, file, line)
 	    VALUE errat;
 
-	    if (strcmp(file, "(eval)") == 0) {
+	    if (strcmp(RSTRING(file)->ptr, "(eval)") == 0) {
 		if (ruby_sourceline > 1) {
 		    errat = get_backtrace(ruby_errinfo);
@@ -5023,9 +5025,8 @@ rb_f_eval(argc, argv, self)
     VALUE self;
 {
-    VALUE src, scope, vfile, vline;
-    char *file = "(eval)";
+    VALUE src, scope, file, vline;
     int line = 1;
 
-    rb_scan_args(argc, argv, "13", &src, &scope, &vfile, &vline);
+    rb_scan_args(argc, argv, "13", &src, &scope, &file, &vline);
     if (ruby_safe_level >= 4) {
 	StringValue(src);
@@ -5038,5 +5039,8 @@ rb_f_eval(argc, argv, self)
     }
     if (argc >= 3) {
-	file = StringValuePtr(vfile);
+	StringValue(file);
+    }
+    else {
+	file = rb_source_filename("(eval)");
     }
     if (argc >= 4) {
@@ -5104,5 +5108,5 @@ eval_under_i(args)
     VALUE *args;
 {
-    return eval(args[0], args[1], Qnil, (char*)args[2], (int)args[3]);
+    return eval(args[0], args[1], Qnil, args[2], (int)args[3]);
 }
 
@@ -5110,6 +5114,5 @@ eval_under_i(args)
 static VALUE
 eval_under(under, self, src, file, line)
-    VALUE under, self, src;
-    const char *file;
+    VALUE under, self, src, file;
     int line;
 {
@@ -5124,5 +5127,5 @@ eval_under(under, self, src, file, line)
     args[0] = self;
     args[1] = src;
-    args[2] = (VALUE)file;
+    args[2] = file;
     args[3] = (VALUE)line;
     return exec_under(eval_under_i, under, args);
@@ -5183,5 +5186,5 @@ specific_eval(argc, argv, klass, self)
     }
     else {
-	char *file = "(eval)";
+	VALUE file;
 	int   line = 1;
 
@@ -5202,5 +5205,9 @@ specific_eval(argc, argv, klass, self)
 	    }
 	    if (argc > 1) {
-		file = StringValuePtr(argv[1]);
+		file = argv[1];
+		StringValue(file);
+	    }
+	    else {
+		file = rb_source_filename("(eval)");
 	    }
 	    if (argc > 2) line = NUM2INT(argv[2]);
@@ -7092,5 +7099,5 @@ struct thread {
     int flags;		/* misc. states (vmode/rb_trap_immediate/raised) */
 
-    char *file;
+    VALUE file;
     int   line;
 
@@ -7213,4 +7220,5 @@ thread_mark(th)
     rb_gc_mark(th->last_line);
     rb_gc_mark(th->last_match);
+    rb_gc_mark(th->file);
     rb_mark_tbl(th->locals);
 
@@ -7291,5 +7299,5 @@ static VALUE rb_thread_raise _((int, VAL
 static int   th_raise_argc;
 static VALUE th_raise_argv[2];
-static char *th_raise_file;
+static VALUE th_raise_file;
 static int   th_raise_line;
 static VALUE th_cmd;
Index: gc.c
===================================================================
RCS file: /cvs/ruby/src/ruby/gc.c,v
retrieving revision 1.82
diff -u -2 -p -r1.82 gc.c
--- gc.c	2001/12/11 03:48:08	1.82
+++ gc.c	2001/12/21 09:35:57
@@ -430,4 +430,32 @@ init_mark_stack()
 static void rb_gc_mark_children(VALUE ptr);
 
+static st_table *source_filenames;
+
+VALUE
+rb_source_filename(f)
+    const char *f;
+{
+    VALUE name;
+
+    if (!st_lookup(source_filenames, f, (char *)&name)) {
+	name = rb_str_new2(f);
+	OBJ_FREEZE(name);
+	f = RSTRING(name)->ptr;
+	st_add_direct(source_filenames, f, name);
+    }
+
+    return name;
+}
+
+static enum st_retval
+sweep_source_filename(key, value)
+    char *key;
+    char *value;
+{
+    if (!(RBASIC(value)->flags & FL_MARK))
+	return ST_DELETE;
+    return ST_CONTINUE;
+}
+
 static void
 gc_mark_all()
@@ -606,4 +634,5 @@ rb_gc_mark_children(ptr)
 
       case T_NODE:
+	rb_gc_mark(obj->as.node.nd_file);
 	switch (nd_type(obj)) {
 	  case NODE_IF:		/* 1,2,3 */
@@ -849,4 +878,6 @@ gc_sweep()
     }
 
+    st_foreach(source_filenames, sweep_source_filename, 0);
+
     freelist = 0;
     final_list = deferred_final_list;
@@ -1514,3 +1545,5 @@ Init_GC()
     rb_gc_unregister_address(&rb_mObSpace);
     finalizers = rb_ary_new();
+
+    source_filenames = st_init_strtable();
 }
Index: intern.h
===================================================================
RCS file: /cvs/ruby/src/ruby/intern.h,v
retrieving revision 1.74
diff -u -2 -p -r1.74 intern.h
--- intern.h	2001/12/17 07:52:34	1.74
+++ intern.h	2001/12/21 08:58:59
@@ -263,5 +263,5 @@ VALUE rb_Array _((VALUE));
 /* parse.y */
 EXTERN int   ruby_sourceline;
-EXTERN char *ruby_sourcefile;
+EXTERN VALUE ruby_sourcefile;
 #define yyparse ruby_yyparse
 #define yylex ruby_yylex
Index: node.h
===================================================================
RCS file: /cvs/ruby/src/ruby/node.h,v
retrieving revision 1.27
diff -u -2 -p -r1.27 node.h
--- node.h	2001/06/23 15:14:14	1.27
+++ node.h	2001/12/21 08:58:03
@@ -129,5 +129,5 @@ enum node_type {
 typedef struct RNode {
     unsigned long flags;
-    char *nd_file;
+    VALUE nd_file;
     union {
 	struct RNode *node;
Index: parse.y
===================================================================
RCS file: /cvs/ruby/src/ruby/parse.y,v
retrieving revision 1.136
diff -u -2 -p -r1.136 parse.y
--- parse.y	2001/12/11 03:48:08	1.136
+++ parse.y	2001/12/21 09:34:31
@@ -44,5 +44,5 @@ NODE *ruby_eval_tree_begin = 0;
 NODE *ruby_eval_tree = 0;
 
-char *ruby_sourcefile;		/* current source file */
+VALUE ruby_sourcefile;		/* current source file */
 int   ruby_sourceline;		/* current line no. */
 
@@ -2111,4 +2111,6 @@ int ruby__end__seen;
 static VALUE ruby_debug_lines;
 
+extern VALUE rb_source_filename _((const char *));
+
 static NODE*
 yycompile(f, line)
@@ -2144,5 +2146,5 @@ yycompile(f, line)
     ruby_eval_tree = 0;
     heredoc_end = 0;
-    ruby_sourcefile = f;
+    ruby_sourcefile = rb_source_filename(f);
     ruby_in_compile = 1;
     n = yyparse();
@@ -2229,5 +2231,5 @@ rb_compile_file(f, file, start)
     ruby_sourceline = start - 1;
 
-    return yycompile(strdup(f), start);
+    return yycompile(f, start);
 }
 
@@ -4278,7 +4280,5 @@ gettable(id)
     }
     else if (id == k__FILE__) {
-	VALUE f = rb_str_new2(ruby_sourcefile);
-	OBJ_FREEZE(f);
-	return NEW_STR(f);
+	return NEW_STR(ruby_sourcefile);
     }
     else if (id == k__LINE__) {
@@ -4670,5 +4670,6 @@ static int
 e_option_supplied()
 {
-    if (strcmp(ruby_sourcefile, "-e") == 0)
+    if (RTEST(ruby_sourcefile) &&
+	strcmp(RSTRING(ruby_sourcefile)->ptr, "-e") == 0)
 	return Qtrue;
     return Qfalse;
Index: ruby.c
===================================================================
RCS file: /cvs/ruby/src/ruby/ruby.c,v
retrieving revision 1.55
diff -u -2 -p -r1.55 ruby.c
--- ruby.c	2001/12/17 07:52:35	1.55
+++ ruby.c	2001/12/21 09:33:42
@@ -311,5 +311,5 @@ require_libraries()
     extern NODE *ruby_eval_tree;
     extern NODE *ruby_eval_tree_begin;
-    char *orig_sourcefile = ruby_sourcefile;
+    VALUE orig_sourcefile = ruby_sourcefile;
     NODE *save[2];
     struct req_list *list = req_list_head.next;
@@ -718,5 +718,5 @@ proc_options(argc, argv)
 
     ruby_init_loadpath();
-    ruby_sourcefile = argv0;
+    ruby_sourcefile = rb_source_filename(argv0);
     if (e_script) {
 	require_libraries();
@@ -825,5 +825,5 @@ load_file(fname, script)
 		    execv(path, argv);
 
-		    ruby_sourcefile = fname;
+		    ruby_sourcefile = rb_source_filename(fname);
 		    ruby_sourceline = 1;
 		    rb_fatal("Can't exec %s", path);
@@ -951,5 +951,5 @@ ruby_script(name)
     if (name) {
 	rb_progname = rb_tainted_str_new2(name);
-	ruby_sourcefile = name;
+	ruby_sourcefile = rb_source_filename(name);
     }
 }
@@ -990,5 +990,5 @@ ruby_prog_init()
     init_ids();
 
-    ruby_sourcefile = "ruby";
+    ruby_sourcefile = rb_source_filename("ruby");
     rb_define_variable("$VERBOSE", &ruby_verbose);
     rb_define_variable("$-v", &ruby_verbose);


Nobu Nakada

In This Thread