[exerb-dev:337] Re: require時のファイル名について

Back to archive index

Nobuyoshi Nakada nobu.****@softh*****
2002年 11月 27日 (水) 14:54:47 JST


なかだです。

At Wed, 27 Nov 2002 13:43:44 +0900,
Yuya Kato wrote:
> が、中田さんが指摘されている$"の結果がrubyと異なる、という問題
> については、今から修正します。
> $"に追加するタイミングも、rubyと違うみたいですね。

ついでに、rb_intern()の戻り値はVALUEではなくてIDなのと、aliasで
名前空間を使わないようにするパッチです。


Index: exerb.cpp
===================================================================
RCS file: /cvsroot/exerb/exerb/src/exerb/exerb.cpp,v
retrieving revision 1.56
diff -u -2 -p -r1.56 exerb.cpp
--- exerb.cpp	15 Nov 2002 07:16:07 -0000	1.56
+++ exerb.cpp	27 Nov 2002 05:52:09 -0000
@@ -138,4 +138,6 @@ static map<DWORD, DWORD> g_DllSizeTable;
 static char g_szPhiSoFileName[MAX_PATH] = "";
 
+static VALUE old_require;
+
 ////////////////////////////////////////////////////////////////////////////////
 
@@ -197,5 +199,5 @@ static void
 ExReplaceRequire(void)
 {
-	::rb_alias(rb_mKernel, ::rb_intern("__old_require__"), ::rb_intern("require"));
+	old_require = ::rb_funcall(rb_mKernel, ::rb_intern("method"), 1, ID2SYM(::rb_intern("require")));
 	::rb_define_global_function("require", (RUBYFUNC)ExRequire, 1);
 }
@@ -791,6 +793,6 @@ static VALUE
 ExGetInitFunctionName(VALUE vFileName)
 {
-	static VALUE id_basename = ::rb_intern("basename");
-	static VALUE id_sub      = ::rb_intern("sub");
+	static ID id_basename = ::rb_intern("basename");
+	static ID id_sub      = ::rb_intern("sub");
 
 	VALUE vBaseName     = ::rb_funcall(rb_cFile, id_basename, 1, vFileName);
@@ -879,5 +881,5 @@ static VALUE
 ExEvalString(VALUE vString, VALUE vFileName)
 {
-	static VALUE id_eval  = ::rb_intern("eval");
+	static ID id_eval  = ::rb_intern("eval");
 	static VALUE vBinding = ::rb_const_get(rb_mKernel, ::rb_intern("TOPLEVEL_BINDING"));
 	static VALUE vLine    = INT2FIX(1);
@@ -908,6 +910,6 @@ ExRequire(VALUE vObject, VALUE vFileName
 	}
 
-	static VALUE id_require = ::rb_intern("__old_require__");
-	return ::rb_funcall(rb_mKernel, id_require, 1, vFileName);
+	static ID id_call = ::rb_intern("call");
+	return ::rb_funcall(old_require, id_call, 1, vFileName);
 }
 


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦



exerb-developer メーリングリストの案内
Back to archive index