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はできる。 中田 伸悦