[#20190] Behavior: autoload calls rb_require() directly — Evan Phoenix <evan@...>

Hi everyone,

79 messages 2008/12/01
[#20200] Re: Behavior: autoload calls rb_require() directly — Yukihiro Matsumoto <matz@...> 2008/12/02

Hi,

[#20215] Re: Behavior: autoload calls rb_require() directly — Evan Phoenix <evan@...> 2008/12/02

[#20217] Re: Behavior: autoload calls rb_require() directly — Dave Thomas <dave@...> 2008/12/02

[#20301] Re: Behavior: autoload calls rb_require() directly — Yukihiro Matsumoto <matz@...> 2008/12/04

Hi,

[#20316] Re: Behavior: autoload calls rb_require() directly — Charles Oliver Nutter <charles.nutter@...> 2008/12/04

Yukihiro Matsumoto wrote:

[#20317] Re: Behavior: autoload calls rb_require() directly — Paul Brannan <pbrannan@...> 2008/12/04

On Fri, Dec 05, 2008 at 03:25:42AM +0900, Charles Oliver Nutter wrote:

[#20323] Leave my open classes alone (was Behavior: autoload calls rb_require() directly) — Dave Thomas <dave@...> 2008/12/04

[#20325] Re: Leave my open classes alone (was Behavior: autoload calls rb_require() directly) — Charles Oliver Nutter <charles.nutter@...> 2008/12/04

Dave Thomas wrote:

[#20328] Re: Leave my open classes alone (was Behavior: autoload calls rb_require() directly) — Yukihiro Matsumoto <matz@...> 2008/12/04

Hi,

[#20334] Re: Leave my open classes alone (was Behavior: autoload calls rb_require() directly) — Charles Oliver Nutter <charles.nutter@...> 2008/12/04

Yukihiro Matsumoto wrote:

[#20384] Re: Leave my open classes alone (was Behavior: autoload calls rb_require() directly) — Brent Roman <brent@...> 2008/12/05

[#20329] Re: Behavior: autoload calls rb_require() directly — daz <dooby@...10.karoo.co.uk> 2008/12/04

Charles Oliver Nutter wrote:

[#20335] Re: Behavior: autoload calls rb_require() directly — Charles Oliver Nutter <charles.nutter@...> 2008/12/04

daz wrote:

[#20341] Re: Behavior: autoload calls rb_require() directly — "Michael Selig" <michael.selig@...> 2008/12/04

On Fri, 05 Dec 2008 09:58:02 +1100, Charles Oliver Nutter

[#20344] Re: Behavior: autoload calls rb_require() directly — Charles Oliver Nutter <charles.nutter@...> 2008/12/05

Michael Selig wrote:

[#20214] Proposal: deferred blocks — "Yehuda Katz" <wycats@...>

Several people have played around with solutions that use ParseTree or

11 messages 2008/12/02

[#20235] autoload and concurrency — "Yehuda Katz" <wycats@...>

Merb uses autoload rather extensively. We have lately observed some

31 messages 2008/12/03
[#20236] Re: autoload and concurrency — Jim Deville <jdeville@...> 2008/12/03

This seems like a strong argument in favor of Ruby-core:20225.

[#20240] Re: autoload and concurrency — Charles Oliver Nutter <charles.nutter@...> 2008/12/03

Jim Deville wrote:

[#20242] Re: autoload and concurrency — Charles Oliver Nutter <charles.nutter@...> 2008/12/03

Charles Oliver Nutter wrote:

[#20245] Re: autoload and concurrency — "Yehuda Katz" <wycats@...> 2008/12/03

Also, this just illustrates that it's possible. In the case of Merb, we

[#20247] Re: autoload and concurrency — Tomas Matousek <Tomas.Matousek@...> 2008/12/03

I think it has already been concluded that autoload and require are inheren=

[#20241] [Bug #814] NoMethodError: undefined method `read_nonblock' for #<OpenSSL::SSL::SSLSocket:0x1a64f9a0> — Aaron Patterson <redmine@...>

Bug #814: NoMethodError: undefined method `read_nonblock' for #<OpenSSL::SSL::SSLSocket:0x1a64f9a0>

19 messages 2008/12/03
[#22538] [Bug #814] NoMethodError: undefined method `read_nonblock' for #<OpenSSL::SSL::SSLSocket:0x1a64f9a0> — Tony Arcieri <redmine@...> 2009/02/26

Issue #814 has been updated by Tony Arcieri.

[#20416] [Feature #839] Add code on each line of a backtrace output to the screen — Roger Pack <redmine@...>

Feature #839: Add code on each line of a backtrace output to the screen

12 messages 2008/12/08

[#20483] encoding of symbols — Dave Thomas <dave@...>

If I have a source file like this:

50 messages 2008/12/11
[#20494] Re: encoding of symbols — Yukihiro Matsumoto <matz@...> 2008/12/11

Hi,

[#20496] Re: encoding of symbols — Yukihiro Matsumoto <matz@...> 2008/12/12

Hi,

[#20522] Re: encoding of symbols — Charles Oliver Nutter <charles.nutter@...> 2008/12/13

Yukihiro Matsumoto wrote:

[#20526] Re: encoding of symbols — Brian Candler <B.Candler@...> 2008/12/13

On Sat, Dec 13, 2008 at 08:33:13PM +0900, Charles Oliver Nutter wrote:

[#20540] Re: 1.9 character encoding (was: encoding of symbols) — "Michael Selig" <michael.selig@...> 2008/12/14

On Sun, 14 Dec 2008 01:01:44 +1100, Brian Candler <B.Candler@pobox.com>

[#20545] Re: 1.9 character encoding (was: encoding of symbols) — "Michael Selig" <michael.selig@...> 2008/12/14

On Sun, 14 Dec 2008 11:57:55 +1100, Michael Selig

[#20562] Re: 1.9 character encoding (was: encoding of symbols) — Yukihiro Matsumoto <matz@...> 2008/12/15

Hi,

[#20619] Re: 1.9 character encoding (was: encoding of symbols) — danielcavanagh@... 2008/12/17

> You're right. When we have two strings with identical byte sequence

[#20502] [Bug #863] Openssl issues with fresh compile on Ubuntu — Brian Takita <redmine@...>

Bug #863: Openssl issues with fresh compile on Ubuntu

11 messages 2008/12/12

[#20557] [Bug #877] [win32] Ruby Standard Library (maybe smth else): Wrong Encoding in Files, Directories and Environment Variables — "Dmitry A. Ustalov" <redmine@...>

Bug #877: [win32] Ruby Standard Library (maybe smth else): Wrong Encoding in Files, Directories and Environment Variables

14 messages 2008/12/14

[#20564] [Bug #883] Failure: test_handle_special_CROSSREF_no_underscore(TestRDocMarkupToHtmlCrossref) — Kazuhiro NISHIYAMA <redmine@...>

Bug #883: Failure: test_handle_special_CROSSREF_no_underscore(TestRDocMarkupToHtmlCrossref)

9 messages 2008/12/15

[#20576] [Bug #888] zlib 1.2.3 does not work with Rubygems 1.3.1 (in Ruby 1.9.1) on Windows — Chauk-Mean PROUM <redmine@...>

Bug #888: zlib 1.2.3 does not work with Rubygems 1.3.1 (in Ruby 1.9.1) on Windows

14 messages 2008/12/15

[#20578] [Feature #889] erb.rb should use Array and << for eoutvar and not String and concat — Thomas Enebo <redmine@...>

Feature #889: erb.rb should use Array and << for eoutvar and not String and concat

15 messages 2008/12/15

[#20668] [Feature #905] Add String.new(fixnum) to preallocate large buffer — Charles Nutter <redmine@...>

Feature #905: Add String.new(fixnum) to preallocate large buffer

60 messages 2008/12/18
[#20671] Re: [Feature #905] Add String.new(fixnum) to preallocate large buffer — Yukihiro Matsumoto <matz@...> 2008/12/19

Hi

[#20674] Re: [Feature #905] Add String.new(fixnum) to preallocate large buffer — Charles Oliver Nutter <charles.nutter@...> 2008/12/19

Yukihiro Matsumoto wrote:

[#20697] Re: [Feature #905] Add String.new(fixnum) to preallocate large buffer — Jim Weirich <jim.weirich@...> 2008/12/19

[#20703] Re: [Feature #905] Add String.new(fixnum) to preallocate large buffer — Charles Oliver Nutter <charles.nutter@...> 2008/12/19

Jim Weirich wrote:

[#20704] Re: [Feature #905] Add String.new(fixnum) to preallocate large buffer — Dave Thomas <dave@...> 2008/12/19

[#28461] [Feature #905] Add String.new(fixnum) to preallocate large buffer — caleb clausen <redmine@...> 2010/03/04

Issue #905 has been updated by caleb clausen.

[#28491] [Feature #905] Add String.new(fixnum) to preallocate large buffer — Kurt Stephens <redmine@...> 2010/03/05

Issue #905 has been updated by Kurt Stephens.

[#20695] [Bug #907] Various system() and backticks problems on Windows — "James M. Lawrence" <redmine@...>

Bug #907: Various system() and backticks problems on Windows

13 messages 2008/12/19

[#20706] [Feature #908] Should be an easy way of reading N characters from am I/O stream — Michael Selig <redmine@...>

Feature #908: Should be an easy way of reading N characters from am I/O stream

39 messages 2008/12/19
[#21816] [Feature #908] Should be an easy way of reading N characters from am I/O stream — Michael Selig <redmine@...> 2009/02/03

Issue #908 has been updated by Michael Selig.

[#21825] Re: [Feature #908] Should be an easy way of reading N characters from am I/O stream — Tanaka Akira <akr@...> 2009/02/04

In article <4988d2fa997f8_8527a9e32018e7@redmine.ruby-lang.org>,

[#21826] Re: [Feature #908] Should be an easy way of reading N characters from am I/O stream — "Michael Selig" <michael.selig@...> 2009/02/04

Hi,

[#22100] Re: [Feature #908] Should be an easy way of reading N characters from am I/O stream — Tanaka Akira <akr@...> 2009/02/14

In article <op.uotab6oa9245dp@kool>,

[#22125] Re: [Feature #908] Should be an easy way of reading N characters from am I/O stream — Michal Suchanek <hramrach@...> 2009/02/15

2009/2/14 Tanaka Akira <akr@fsij.org>:

[#22146] Re: [Feature #908] Should be an easy way of reading N characters from am I/O stream — Tanaka Akira <akr@...> 2009/02/15

In article <a5d587fb0902141711q780f0d24jef9be9b8bbe69b2a@mail.gmail.com>,

[#22182] Re: [Feature #908] Should be an easy way of reading N characters from am I/O stream — Michal Suchanek <hramrach@...> 2009/02/16

2009/2/15 Tanaka Akira <akr@fsij.org>:

[#22213] Re: [Feature #908] Should be an easy way of reading N characters from am I/O stream — Tanaka Akira <akr@...> 2009/02/18

In article <a5d587fb0902160252u56b50cfdv8e0fd36bb4f0b1b3@mail.gmail.com>,

[#22215] Re: [Feature #908] Should be an easy way of reading N characters from am I/O stream — Michal Suchanek <hramrach@...> 2009/02/18

2009/2/18 Tanaka Akira <akr@fsij.org>:

[#22238] Re: [Feature #908] Should be an easy way of reading N characters from am I/O stream — "Michael Selig" <michael.selig@...> 2009/02/18

On Thu, 19 Feb 2009 02:21:21 +1100, Michal Suchanek <hramrach@centrum.cz>

[#22253] Re: [Feature #908] Should be an easy way of reading N characters from am I/O stream — Tanaka Akira <akr@...> 2009/02/19

In article <op.upklh9q19245dp@kool>,

[#22281] Re: [Feature #908] Should be an easy way of reading N characters from am I/O stream — Martin Duerst <duerst@...> 2009/02/20

At 19:00 09/02/19, Tanaka Akira wrote:

[#22332] Re: [Feature #908] Should be an easy way of reading N characters from am I/O stream — Tanaka Akira <akr@...> 2009/02/22

In article <6.0.0.20.2.20090220134502.0823ee98@localhost>,

[#22338] Re: [Feature #908] Should be an easy way of reading N characters from am I/O stream — "Michael Selig" <michael.selig@...> 2009/02/22

On Mon, 23 Feb 2009 03:00:41 +1100, Tanaka Akira <akr@fsij.org> wrote:

[#22356] Re: [Feature #908] Should be an easy way of reading N characters from am I/O stream — Michal Suchanek <hramrach@...> 2009/02/23

2009/2/22 Michael Selig <michael.selig@fs.com.au>:

[#20723] [Bug #911] ArgumentError in Resolv#getaddress — Federico Builes <redmine@...>

Bug #911: ArgumentError in Resolv#getaddress

14 messages 2008/12/20

[#20797] [Bug #921] autoload is not thread-safe — Charles Nutter <redmine@...>

Bug #921: autoload is not thread-safe

15 messages 2008/12/22

[#20893] [Bug #932] incorrect case statement in "ext/dl/test/test_base.rb" causes library problems on openSUSE 11.1 64-bit — Ed Borasky <redmine@...>

Bug #932: incorrect case statement in "ext/dl/test/test_base.rb" causes library problems on openSUSE 11.1 64-bit

8 messages 2008/12/26

[#20978] Definable != is a Bad Thing™ — Ryan Davis <ryand-ruby@...>

> >> class X; def == o; :great; end; def != o; :horrible; end; end

20 messages 2008/12/30
[#20979] Re: Definable != is a Bad Thing™ — Yukihiro Matsumoto <matz@...> 2008/12/30

Hi,

[#20994] [Bug #956] Encoding: nl_langinfo(CODESET) on cygwin 1.5 always returns US-ASCII — Tom Link <redmine@...>

Bug #956: Encoding: nl_langinfo(CODESET) on cygwin 1.5 always returns US-ASCII

10 messages 2008/12/30

[#20999] Supporting Thread.critical=with native threads — Shri Borde <Shri.Borde@...>

Hi,

27 messages 2008/12/30
[#21002] Re: Supporting Thread.critical=with native threads — Eric Hodel <drbrain@...7.net> 2008/12/31

On Dec 30, 2008, at 15:00 PM, Shri Borde wrote:

[#21010] Re: Supporting Thread.critical=with native threads — Shri Borde <Shri.Borde@...> 2008/12/31

http://www.ruby-doc.org/core/classes/Thread.html#M000461 says:

[#21245] Re: Supporting Thread.critical=with native threads — Charles Oliver Nutter <charles.nutter@...> 2009/01/10

I'm starting come around to Shri's idea of critical= being represented

[#21353] Re: Supporting Thread.critical=with native threads — Shri Borde <Shri.Borde@...> 2009/01/14

SXMgb3BlbmluZyBhIGJ1ZyB0aGUgcmVjb21tZW5kZWQgd2F5IHRvIGdldCB0aGUgc3BlYyBjaGFu

[#21359] Re: Supporting Thread.critical=with native threads — Brent Roman <brent@...> 2009/01/15

[ruby-core:20432] Re: [Feature #839] Add code on each line of a backtrace output to the screen

From: Nobuyoshi Nakada <nobu@...>
Date: 2008-12-08 17:33:53 UTC
List: ruby-core #20432
Hi,

At Mon, 8 Dec 2008 18:23:04 +0900,
Roger Pack wrote in [ruby-core:20416]:
> This patch adds output to unrescued exceptions' output to the command line:

Rereading from scripts would have problems:
* they can be removed or changed
* -e and stdin are N/A
* slow.

Instead, isn't it enough only when debugging?

$ ./ruby -rtracer -e 'def foo;raise;end' -e foo
-e:1:in `foo': unhandled exception
		 foo
	from -e:2:in `<main>'


Index: error.c
===================================================================
--- error.c	(revision 20580)
+++ error.c	(working copy)
@@ -510,16 +510,31 @@ rb_check_backtrace(VALUE bt)
     long i;
     static const char err[] = "backtrace must be Array of String";
+    extern VALUE rb_cBacktrace;
 
     if (!NIL_P(bt)) {
-	int t = TYPE(bt);
-
-	if (t == T_STRING) return rb_ary_new3(1, bt);
-	if (t != T_ARRAY) {
+	if (IMMEDIATE_P(bt)) {
+	    rb_raise(rb_eTypeError, err);
+	}
+	switch (BUILTIN_TYPE(bt)) {
+	  case T_STRING:
+	    return rb_ary_new3(1, bt);
+	  case T_ARRAY:
+	    break;
+	  case T_STRUCT:
+	    if (CLASS_OF(bt) == rb_cBacktrace)
+		return rb_ary_new3(1, bt);
+	  default:
 	    rb_raise(rb_eTypeError, err);
 	}
 	for (i=0;i<RARRAY_LEN(bt);i++) {
-	    if (TYPE(RARRAY_PTR(bt)[i]) != T_STRING) {
-		rb_raise(rb_eTypeError, err);
+	    VALUE a = RARRAY_PTR(bt)[i];
+	    if (!IMMEDIATE_P(a)) {
+		switch (BUILTIN_TYPE(a)) {
+		  case T_STRING: continue;
+		  case T_STRUCT:
+		    if (CLASS_OF(a) == rb_cBacktrace) continue;
+		}
 	    }
+	    rb_raise(rb_eTypeError, err);
 	}
     }
Index: eval_error.c
===================================================================
--- eval_error.c	(revision 20580)
+++ eval_error.c	(working copy)
@@ -64,4 +64,25 @@ set_backtrace(VALUE info, VALUE bt)
 }
 
+static void 
+print_debug_line(VALUE *debug_lines, VALUE at)
+{
+    extern VALUE rb_cBacktrace;
+    VALUE hash = *debug_lines, lines, line, *p;
+
+    if (TYPE(at) != T_STRUCT || CLASS_OF(at) != rb_cBacktrace) return;
+    if (!hash) {
+	if (!rb_const_defined_at(rb_cObject, rb_intern("SCRIPT_LINES__"))) return;
+	hash = rb_const_get_at(rb_cObject, rb_intern("SCRIPT_LINES__"));
+	if (TYPE(hash) != T_HASH) return;
+	*debug_lines = hash;
+    }
+    p = RSTRUCT_PTR(at);
+    lines = rb_hash_lookup(hash, p[0]);
+    if (NIL_P(lines)) return;
+    line = rb_ary_entry(lines, NUM2INT(p[1]));
+    if (NIL_P(line)) return;
+    warn_printf("\t\t %s", RSTRING_PTR(line));
+}
+
 static void
 error_print(void)
@@ -72,4 +93,5 @@ error_print(void)
     const char *einfo;
     long elen;
+    VALUE debug_lines = 0;
 
     if (NIL_P(errinfo))
@@ -99,4 +121,5 @@ error_print(void)
 	VALUE mesg = RARRAY_PTR(errat)[0];
 
+	mesg = rb_check_string_type(mesg);
 	if (NIL_P(mesg))
 	    error_pos();
@@ -121,4 +144,7 @@ error_print(void)
     if (eclass == rb_eRuntimeError && elen == 0) {
 	warn_print(": unhandled exception\n");
+        if (!NIL_P(errat)) {
+	    print_debug_line(&debug_lines, RARRAY_PTR(errat)[0]);
+	}
     }
     else {
@@ -166,6 +192,9 @@ error_print(void)
 
 	for (i = 1; i < len; i++) {
-	    if (TYPE(ptr[i]) == T_STRING) {
-		warn_printf("\tfrom %s\n", RSTRING_PTR(ptr[i]));
+	    VALUE a = ptr[i], s;
+	    s = rb_check_string_type(a);
+	    if (!NIL_P(s)) {
+		warn_printf("\tfrom %s\n", RSTRING_PTR(s));
+		print_debug_line(&debug_lines, a);
 	    }
 	    if (skip && i == TRACE_HEAD && len > TRACE_MAX) {
Index: vm.c
===================================================================
--- vm.c	(revision 20580)
+++ vm.c	(working copy)
@@ -33,4 +33,5 @@ VALUE rb_cThread;
 VALUE rb_cEnv;
 VALUE rb_mRubyVMFrozenCore;
+VALUE rb_cBacktrace;
 
 VALUE ruby_vm_global_state_version = 1;
@@ -629,4 +630,22 @@ rb_lastline_set(VALUE val)
 /* backtrace */
 
+static VALUE
+backtrace_to_str(VALUE self)
+{
+    VALUE *p = RSTRUCT_PTR(self);
+    VALUE file = p[0], line = p[1], name = p[2];
+    VALUE str = p[3];
+    if (NIL_P(str)) {
+	str = rb_sprintf("%s:%d:in `%s'",
+			 NIL_P(file) ? "" : StringValueCStr(file),
+			 NUM2INT(line), StringValueCStr(name));
+	if (!OBJ_FROZEN(self) &&
+	    (OBJ_UNTRUSTED(self) || rb_safe_level() < 4)) {
+	    p[3] = str;
+	}
+    }
+    return str;
+}
+
 int
 vm_get_sourceline(const rb_control_frame_t *cfp)
@@ -654,10 +673,10 @@ static VALUE
 vm_backtrace_each(rb_thread_t *th,
 		  const rb_control_frame_t *limit_cfp, const rb_control_frame_t *cfp,
-		  const char * file, int line_no, VALUE ary)
+		  VALUE ary)
 {
-    VALUE str;
+    VALUE bt, b[3];
+    int line_no;
 
     while (cfp > limit_cfp) {
-	str = 0;
 	if (cfp->iseq != 0) {
 	    if (cfp->pc != 0) {
@@ -665,15 +684,17 @@ vm_backtrace_each(rb_thread_t *th,
 
 		line_no = vm_get_sourceline(cfp);
-		file = RSTRING_PTR(iseq->filename);
-		str = rb_sprintf("%s:%d:in `%s'",
-				 file, line_no, RSTRING_PTR(iseq->name));
-		rb_ary_push(ary, str);
+		b[0] = iseq->filename;
+		b[1] = INT2NUM(line_no);
+		b[2] = iseq->name;
+		bt = rb_class_new_instance(sizeof(b) / sizeof(*b), b, rb_cBacktrace);
+		rb_ary_push(ary, bt);
 	    }
 	}
 	else if (RUBYVM_CFUNC_FRAME_P(cfp)) {
-	    str = rb_sprintf("%s:%d:in `%s'",
-			     file, line_no,
-			     rb_id2name(cfp->method_id));
-	    rb_ary_push(ary, str);
+	    b[0] = Qnil;
+	    b[1] = INT2FIX(0);
+	    b[2] = rb_id2str(cfp->method_id);
+	    bt = rb_class_new_instance(sizeof(b) / sizeof(*b), b, rb_cBacktrace);
+	    rb_ary_push(ary, bt);
 	}
 	cfp = RUBY_VM_NEXT_CONTROL_FRAME(cfp);
@@ -704,6 +725,5 @@ vm_backtrace(rb_thread_t *th, int lev)
     }
 
-    ary = vm_backtrace_each(th, RUBY_VM_NEXT_CONTROL_FRAME(cfp),
-			    top_of_cfp, "", 0, ary);
+    ary = vm_backtrace_each(th, RUBY_VM_NEXT_CONTROL_FRAME(cfp), top_of_cfp, ary);
     return ary;
 }
@@ -1847,4 +1867,9 @@ Init_VM(void)
     rb_define_const(rb_cRubyVM, "INSTRUCTION_NAMES", ruby_insns_name_array());
 
+    rb_cBacktrace = rb_struct_define((char*)0, "file", "line", "name", "str", (char*)0);
+    rb_define_const(rb_cRubyVM, "Backtrace", rb_cBacktrace);
+    rb_define_method(rb_cBacktrace, "to_str", backtrace_to_str, 0);
+    rb_define_method(rb_cBacktrace, "inspect", backtrace_to_str, 0);
+
     /* debug functions ::VM::SDR(), ::VM::NSDR() */
 #if VMDEBUG


-- 
Nobu Nakada

In This Thread