yarv-diff:84
From: ko1 atdot.net
Date: 15 Aug 2005 21:01:20 -0000
Subject: [yarv-diff:84] r240 - in trunk: . yarvtest
Author: ko1
Date: 2005-08-16 06:01:19 +0900 (Tue, 16 Aug 2005)
New Revision: 240
Modified:
trunk/ChangeLog
trunk/insns.def
trunk/test1.rb
trunk/vm.c
trunk/yarvtest/test_method.rb
Log:
* insns.def : fix to set klass_nest_stack on singleton
method definition
* yarvtest/test_method.rb : add a test for above
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2005-08-15 20:38:49 UTC (rev 239)
+++ trunk/ChangeLog 2005-08-15 21:01:19 UTC (rev 240)
@@ -4,6 +4,13 @@
# from Mon, 03 May 2004 01:24:19 +0900
#
+2005-08-16(Tue) 06:00:17 +0900 Koichi Sasada <ko1 atdot.net>
+
+ * insns.def : fix to set klass_nest_stack on singleton
+ method definition
+
+ * yarvtest/test_method.rb : add a test for above
+
2005-08-16(Tue) 05:34:48 +0900 Koichi Sasada <ko1 atdot.net>
* test1.rb : added. gdb and run1 rule run this script
Modified: trunk/insns.def
===================================================================
--- trunk/insns.def 2005-08-15 20:38:49 UTC (rev 239)
+++ trunk/insns.def 2005-08-15 21:01:19 UTC (rev 240)
@@ -798,8 +798,10 @@
}
GetISeqVal(body, iseqobj);
- iseqobj->klass_nest_stack = rb_ary_dup(th->klass_nest_stack);
-
+
+ rb_funcall2(iseqobj->klass_nest_stack, rb_intern("replace"),
+ 1, &th->klass_nest_stack);
+
newbody = NEW_NODE(YARV_METHOD_NODE, NOEX_PUBLIC, body, 0);
rb_add_method(klass, id, newbody, NOEX_PUBLIC); /* TODO: visibility */
Modified: trunk/test1.rb
===================================================================
--- trunk/test1.rb 2005-08-15 20:38:49 UTC (rev 239)
+++ trunk/test1.rb 2005-08-15 21:01:19 UTC (rev 240)
@@ -1,8 +0,0 @@
-1.times{|e|
- begin
- raise
- rescue => err
- end
- p err
- p err.backtrace
-}
Modified: trunk/vm.c
===================================================================
--- trunk/vm.c 2005-08-15 20:38:49 UTC (rev 239)
+++ trunk/vm.c 2005-08-15 21:01:19 UTC (rev 240)
@@ -618,7 +618,9 @@
/* in module or class scope */
cref = th->klass_nest_stack;
}
+
last_pos = RARRAY(cref)->len-1;
+
for(i = last_pos; i>0; i--){
klass = RARRAY(cref)->ptr[i];
search_continue:
Modified: trunk/yarvtest/test_method.rb
===================================================================
--- trunk/yarvtest/test_method.rb 2005-08-15 20:38:49 UTC (rev 239)
+++ trunk/yarvtest/test_method.rb 2005-08-15 21:01:19 UTC (rev 240)
@@ -250,7 +250,21 @@
lobj.m
}
end
-
+
+ def test_singletonmethod_with_const
+ ae %q{
+ class C
+ Const = :C
+ def self.m
+ 1.times{
+ Const
+ }
+ end
+ end
+ C.m
+ }
+ end
+
def test_alias
ae %q{
def m1
--
ML: yarv-diff quickml.atdot.net
Info: http://www.atdot.net/~ko1/quickml