Ruby/SpiderMonkey function
c.eval("String.prototype").function("dump") {|this| p this.to_s.dump}
c.eval('"aaa".dump()')this が ruby 側でとれない?みたいなので書き換えた。なにか方法あるのかな
--- spidermonkey.c.orig 2006-10-25 23:37:28.000000000 +0900
+++ spidermonkey.c 2006-10-25 23:58:26.000000000 +0900
@@ -598,10 +598,11 @@
so = (sSMJS_Class*)JS_GetPrivate( cx, fobj );
// 引数をSpiderMonkey::Valueに
- rargs = rb_ary_new2( argc + 1);
+ rargs = rb_ary_new2( argc + 2);
+ rb_ary_store( rargs, 0, rb_smjs_convert_prim( cx, thisobj ) );
for( i=0; i<argc; i++ )
- rb_ary_store( rargs, i, rb_smjs_convert_prim( cx, argv[i] ) );
- rb_ary_store( rargs, i, so->rbobj );
+ rb_ary_store( rargs, i+1, rb_smjs_convert_prim( cx, argv[i] ) );
+ rb_ary_store( rargs, i+1, so->rbobj );
// proc を実行
res = rb_protect( rb_smjs_ruby_proc_caller, rargs, &status );
あーこれじゃだめだ。影響が広すぎて ruby のメソッドをそのまま呼べなくなる。新しいメソッドを定義するほうがいいのかなぁ。function_with_this みたいな