[#41531] [Bug #3385] ext/dbm: accept various version of db — Takahiro Kambe <redmine@...>

Bug #3385: ext/dbm: accept various version of db

10 messages 2010/06/03

[#41600] 質問・提案:cgi.rbの後継となるライブラリについて — Dice <tetradice@...>

Diceです。cgi.rbの後継ライブラリについて質問させてください。

16 messages 2010/06/13
[#41606] Re: 質問・提案:cgi.rbの後継となるライブラリについて — Fujioka <fuj@...> 2010/06/14

藤岡です。

[#41607] Re: 質問・提案:cgi.rbの後継となるライブラリについて — KAKUTANI Shintaro <shintaro.kakutani@...> 2010/06/14

かくたにです。

[#41616] Re: 質問・提案:cgi.rbの後継となるライブラリについて — Dice <tetradice@...> 2010/06/15

藤岡さん、かくたにさん、返信ありがとうございます。

[#41617] Re: 質問・提案:cgi.rbの後継となるライブラリについて — Fujioka <fuj@...> 2010/06/16

藤岡です。

[#41656] Re: 質問・提案:cgi.rbの後継となるライブラリについて — Dice <tetradice@...> 2010/06/20

Diceです。藤岡さん、返信ありがとうございます。

[#41623] [Feature:trunk] argument delegation — Nobuyoshi Nakada <nobu@...>

なかだです。

23 messages 2010/06/16
[#41625] Re: [Feature:trunk] argument delegation — Yusuke ENDOH <mame@...> 2010/06/16

遠藤です。

[#41627] Re: [Feature:trunk] argument delegation — Yukihiro Matsumoto <matz@...> 2010/06/16

まつもと ゆきひろです

[#41702] WIN32OLE_METHOD offset_vtbl — kuwamoto shintaro <beuniv@...>

こんばんわ

16 messages 2010/06/23
[#41712] Re: WIN32OLE_METHOD offset_vtbl — Masaki Suketa <masaki.suketa@...> 2010/06/24

助田です。

[ruby-dev:41612] [Bug #3443] requireが遅くなる

From: Yusuke Endoh <redmine@...>
Date: 2010-06-15 14:19:52 UTC
List: ruby-dev #41612
チケット #3443 が更新されました。 (by Yusuke Endoh)

カテゴリ coreにセット
担当者 Yusuke Endohにセット

遠藤です。

prepare_iseq_build の中で expand_path するのは確かに遅そうなので、
rb_iseq_new を呼ぶ側でそれぞれ expand_path するようなパッチを書いて
みました。
三浦さんから効果が確認してもらったらコミットしようと思います。


diff --git a/eval_intern.h b/eval_intern.h
index 909b10a..549953a 100644
--- a/eval_intern.h
+++ b/eval_intern.h
@@ -205,7 +205,7 @@ NORETURN(void rb_raise_method_missing(rb_thread_t *th, int argc, VALUE *argv,

 VALUE rb_vm_make_jump_tag_but_local_jump(int state, VALUE val);
 NODE *rb_vm_cref(void);
-VALUE rb_vm_call_cfunc(VALUE recv, VALUE (*func)(VALUE), VALUE arg, const rb_block_t *blockptr, VALUE filename, VALUE filepath);
+VALUE rb_vm_call_cfunc(VALUE recv, VALUE (*func)(VALUE), VALUE arg, const rb_block_t *blockptr, VALUE filename);
 void rb_vm_set_progname(VALUE filename);
 void rb_thread_terminate_all(void);
 VALUE rb_vm_top_self();
diff --git a/iseq.c b/iseq.c
index 48d0cdf..ae45884 100644
--- a/iseq.c
+++ b/iseq.c
@@ -228,7 +228,7 @@ prepare_iseq_build(rb_iseq_t *iseq,

     iseq->name = name;
     iseq->filename = filename;
-    iseq->filepath = filepath == Qnil ? Qnil : rb_realpath_internal(Qnil, filepath, 1);
+    iseq->filepath = filepath;
     iseq->line_no = (unsigned short)line_no; /* TODO: really enough? */
     iseq->defined_method_id = 0;
     iseq->mark_ary = rb_ary_tmp_new(3);
@@ -606,7 +606,8 @@ iseq_s_compile_file(int argc, VALUE *argv, VALUE self)
     parser = rb_parser_new();
     node = rb_parser_compile_file(parser, fname, f, NUM2INT(line));
     make_compile_option(&option, opt);
-    return rb_iseq_new_with_opt(node, rb_str_new2("<main>"), file, file, line, Qfalse,
+    return rb_iseq_new_with_opt(node, rb_str_new2("<main>"), file,
+				rb_realpath_internal(Qnil, file, 1), line, Qfalse,
 				ISEQ_TYPE_TOP, &option);
 }

diff --git a/load.c b/load.c
index b4ec2d9..a0e5a4b 100644
--- a/load.c
+++ b/load.c
@@ -297,7 +297,7 @@ rb_load_internal(VALUE fname, int wrap)
 	th->mild_compile_error++;
 	node = (NODE *)rb_load_file(RSTRING_PTR(fname));
 	loaded = TRUE;
-	iseq = rb_iseq_new_top(node, rb_str_new2("<top (required)>"), fname, fname, Qfalse);
+	iseq = rb_iseq_new_top(node, rb_str_new2("<top (required)>"), fname, rb_realpath_internal(Qnil, fname, 1), Qfalse);
 	th->mild_compile_error--;
 	rb_iseq_eval(iseq);
     }
@@ -596,7 +596,7 @@ rb_require_safe(VALUE fname, int safe)

 		  case 's':
 		    handle = (long)rb_vm_call_cfunc(rb_vm_top_self(), load_ext,
-						    path, 0, path, path);
+						    path, 0, path);
 		    rb_ary_push(ruby_dln_librefs, LONG2NUM(handle));
 		    break;
 		}
@@ -643,7 +643,7 @@ ruby_init_ext(const char *name, void (*init)(void))
 {
     if (load_lock(name)) {
 	rb_vm_call_cfunc(rb_vm_top_self(), init_ext_call, (VALUE)init,
-			 0, rb_str_new2(name), Qnil);
+			 0, rb_str_new2(name));
 	rb_provide(name);
 	load_unlock(name, 1);
     }
diff --git a/ruby.c b/ruby.c
index daaf0d6..75ea88f 100644
--- a/ruby.c
+++ b/ruby.c
@@ -1462,7 +1462,8 @@ process_options(int argc, char **argv, struct cmdline_options *opt)

     PREPARE_PARSE_MAIN({
 	VALUE path = Qnil;
-	if (!opt->e_script && strcmp(opt->script, "-")) path = opt->script_name;
+	if (!opt->e_script && strcmp(opt->script, "-"))
+	    path = rb_realpath_internal(Qnil, opt->script_name, 1);
 	iseq = rb_iseq_new_main(tree, opt->script_name, path);
     });

diff --git a/vm.c b/vm.c
index bc11094..3516024 100644
--- a/vm.c
+++ b/vm.c
@@ -1450,11 +1450,11 @@ rb_thread_current_status(const rb_thread_t *th)

 VALUE
 rb_vm_call_cfunc(VALUE recv, VALUE (*func)(VALUE), VALUE arg,
-		 const rb_block_t *blockptr, VALUE filename, VALUE filepath)
+		 const rb_block_t *blockptr, VALUE filename)
 {
     rb_thread_t *th = GET_THREAD();
     const rb_control_frame_t *reg_cfp = th->cfp;
-    volatile VALUE iseqval = rb_iseq_new(0, filename, filename, filepath, 0, ISEQ_TYPE_TOP);
+    volatile VALUE iseqval = rb_iseq_new(0, filename, filename, Qnil, 0, ISEQ_TYPE_TOP);
     VALUE val;

     vm_push_frame(th, DATA_PTR(iseqval), VM_FRAME_MAGIC_TOP,

-- 
Yusuke Endoh <mame@tsg.ne.jp>
----------------------------------------
http://redmine.ruby-lang.org/issues/show/3443

----------------------------------------
http://redmine.ruby-lang.org

In This Thread