[前][次][番号順一覧][スレッド一覧][生データ]

yarv-diff:256

From: ko1 atdot.net
Date: 14 Feb 2006 10:36:57 -0000
Subject: [yarv-diff:256] r419 - trunk

Author: ko1
Date: 2006-02-14 19:36:56 +0900 (Tue, 14 Feb 2006)
New Revision: 419

Modified:
   trunk/
   trunk/ChangeLog
   trunk/array.c
   trunk/configure
   trunk/eval.c
   trunk/gc.c
   trunk/test.rb
   trunk/vm.c
   trunk/yarvcore.c
Log:
 r629@lermite:  ko1 | 2006-02-14 19:36:30 +0900
 	* array.c : fix indent
 
 	* eval.c : fix block_given
 
 	* gc.c : add STACK_START and use it as a substitute for
 	rb_gc_stack_start
 
 	* vm.c : fix to raise error if th_yield doesn't have block given
 
 	* yarvcore.c : fix to skip iseq mark array at ObjectSpace.each_object
 



Property changes on: trunk
___________________________________________________________________
Name: svk:merge
   - 81cd9672-7512-7e48-ae48-6936450e977d:/local/yarv/trunk:625
   + 81cd9672-7512-7e48-ae48-6936450e977d:/local/yarv/trunk:629

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2006-02-14 09:21:18 UTC (rev 418)
+++ trunk/ChangeLog	2006-02-14 10:36:56 UTC (rev 419)
@@ -4,6 +4,20 @@
 #  from Mon, 03 May 2004 01:24:19 +0900
 #
 
+2006-02-14(Tue) 19:30:20 +0900  Koichi Sasada  <ko1 atdot.net>
+
+	* array.c : fix indent
+
+	* eval.c : fix block_given
+
+	* gc.c : add STACK_START and use it as a substitute for
+	rb_gc_stack_start
+
+	* vm.c : fix to raise error if th_yield doesn't have block given
+
+	* yarvcore.c : fix to skip iseq mark array at ObjectSpace.each_object
+
+
 2006-02-14(Tue) 18:15:03 +0900  Koichi Sasada  <ko1 atdot.net>
 
 	* configure.in : enable pthread by deafult

Modified: trunk/array.c
===================================================================
--- trunk/array.c	2006-02-14 09:21:18 UTC (rev 418)
+++ trunk/array.c	2006-02-14 10:36:56 UTC (rev 419)
@@ -1133,20 +1133,20 @@
 VALUE
 rb_ary_each(VALUE ary)
 {
-  long i;
-  VALUE val;
-  
-  RETURN_ENUMERATOR(ary, 0, 0);
+    long i;
+    VALUE val;
 
-  val = yarv_invoke_Array_each_special_block(ary);
-  if(val != Qundef){
-    return val;
-  }
+    RETURN_ENUMERATOR(ary, 0, 0);
 
-  for (i=0; i<RARRAY(ary)->len; i++) {
-    rb_yield(RARRAY(ary)->ptr[i]);
-  }
-  return ary;
+    val = yarv_invoke_Array_each_special_block(ary);
+    if(val != Qundef){
+	return val;
+    }
+
+    for (i=0; i<RARRAY(ary)->len; i++) {
+	rb_yield(RARRAY(ary)->ptr[i]);
+    }
+    return ary;
 }
 
 /*

Modified: trunk/configure
===================================================================
--- trunk/configure	2006-02-14 09:21:18 UTC (rev 418)
+++ trunk/configure	2006-02-14 10:36:56 UTC (rev 419)
@@ -11190,6 +11190,8 @@
 
 
 
+
+
 for ac_header in stdlib.h string.h unistd.h limits.h sys/file.h sys/ioctl.h sys/syscall.h\
 		 fcntl.h sys/fcntl.h sys/select.h sys/time.h sys/times.h sys/param.h\
 		 syscall.h pwd.h grp.h a.out.h utime.h memory.h direct.h sys/resource.h \

Modified: trunk/eval.c
===================================================================
--- trunk/eval.c	2006-02-14 09:21:18 UTC (rev 418)
+++ trunk/eval.c	2006-02-14 10:36:56 UTC (rev 419)
@@ -1094,8 +1094,7 @@
 rb_block_given_p()
 {
     yarv_thread_t *th = GET_THREAD();
-    if (GC_GUARDED_PTR_REF(th->cfp->lfp[0]) ||
-	th->passed_block) {
+    if (GC_GUARDED_PTR_REF(th->cfp->lfp[0])) {
 	return Qtrue;
     }
     else {
@@ -1137,8 +1136,7 @@
     yarv_thread_t *th = GET_THREAD();
     yarv_control_frame_t *cfp = th->cfp;
     cfp = th_get_ruby_level_cfp(th, YARV_PREVIOUS_CONTROL_FRAME(cfp));
-    if (GC_GUARDED_PTR_REF(cfp->lfp[0]) ||
-	th->passed_block) {
+    if (GC_GUARDED_PTR_REF(cfp->lfp[0])) {
 	return Qtrue;
     }
     else {

Modified: trunk/gc.c
===================================================================
--- trunk/gc.c	2006-02-14 09:21:18 UTC (rev 418)
+++ trunk/gc.c	2006-02-14 10:36:56 UTC (rev 419)
@@ -462,17 +462,18 @@
 NOINLINE(void yarv_set_stack_end(VALUE **stack_end_p));
 
 #define YARV_SET_STACK_END yarv_set_stack_end(&th->machine_stack_end)
-#define STACK_END        (th->machine_stack_end)
+#define STACK_START (th->machine_stack_start)
+#define STACK_END (th->machine_stack_end)
 
 #if defined(sparc) || defined(__sparc__)
-# define STACK_LENGTH  (rb_gc_stack_start - STACK_END + 0x80)
+# define STACK_LENGTH  (STACK_START - STACK_END + 0x80)
 #elif STACK_GROW_DIRECTION < 0
-# define STACK_LENGTH  (rb_gc_stack_start - STACK_END)
+# define STACK_LENGTH  (STACK_START - STACK_END)
 #elif STACK_GROW_DIRECTION > 0
-# define STACK_LENGTH  (STACK_END - rb_gc_stack_start + 1)
+# define STACK_LENGTH  (STACK_END - STACK_START + 1)
 #else
-# define STACK_LENGTH  ((STACK_END < rb_gc_stack_start) ? rb_gc_stack_start - STACK_END\
-                                           : STACK_END - rb_gc_stack_start + 1)
+# define STACK_LENGTH  ((STACK_END < STACK_START) ? STACK_START - STACK_END\
+                                           : STACK_END - STACK_START + 1)
 #endif
 #if STACK_GROW_DIRECTION > 0
 # define STACK_UPPER(x, a, b) a
@@ -505,7 +506,7 @@
 {
   yarv_thread_t *th = GET_THREAD();
   YARV_SET_STACK_END;
-  if (p) *p = STACK_UPPER(STACK_END, rb_gc_stack_start, STACK_END);
+  if (p) *p = STACK_UPPER(STACK_END, STACK_START, STACK_END);
   return STACK_LENGTH;
 }
 
@@ -1328,7 +1329,7 @@
 #endif
 #if defined(__human68k__) || defined(__mc68000__)
   rb_gc_mark_locations((VALUE*)((char*)STACK_END + 2),
-                       (VALUE*)((char*)rb_gc_stack_start + 2));
+                       (VALUE*)((char*)STACK_START + 2));
 #endif
   rb_gc_mark_threads();
 

Modified: trunk/test.rb
===================================================================
--- trunk/test.rb	2006-02-14 09:21:18 UTC (rev 418)
+++ trunk/test.rb	2006-02-14 10:36:56 UTC (rev 419)
@@ -1,3 +1,22 @@
+
+Thread.new{
+  no_method()
+}.join
+
+__END__
+
+ObjectSpace.each_object{|o|
+  p o.class
+  o.to_s
+}
+__END__
+p([1].each.each)
+
+a = [1].each.each{|e| p e}
+
+__END__
+
+
 require 'test/unit'
 class TestFoo < Test::Unit::TestCase
   define_method(:test_foo){

Modified: trunk/vm.c
===================================================================
--- trunk/vm.c	2006-02-14 09:21:18 UTC (rev 418)
+++ trunk/vm.c	2006-02-14 10:36:56 UTC (rev 419)
@@ -33,6 +33,8 @@
 static NODE *lfp_get_special_cref(VALUE *lfp);
 static NODE *lfp_set_special_cref(VALUE *lfp, NODE * cref);
 
+NORETURN(static void localjump_error(const char *, VALUE, int));
+
 #if OPT_STACK_CACHING
 static VALUE yarv_finish_insn_seq[1] = { BIN(finish_SC_ax_ax) };
 #elif OPT_CALL_THREADED_CODE
@@ -548,11 +550,10 @@
     yarv_block_t *block = GC_GUARDED_PTR_REF(cfp->lfp[0]);
     VALUE val;
     if (block == 0) {
-	rb_bug("block is not given (th_invoke_yield)");
+	localjump_error("no block given", Qnil, 0);
     }
     else {
 	if (BUILTIN_TYPE(block->iseq) != T_NODE) {
-
 	    if (block->iseq->argc == 1) {
 		if (argc > 1) {
 		    argv[0] = rb_ary_new4(argc, argv);
@@ -1127,8 +1128,6 @@
 /*********************************************************/
 /*********************************************************/
 
-NORETURN(static void localjump_error(const char *, VALUE, int));
-
 static void
 localjump_error(const char *mesg, VALUE value, int reason)
 {

Modified: trunk/yarvcore.c
===================================================================
--- trunk/yarvcore.c	2006-02-14 09:21:18 UTC (rev 418)
+++ trunk/yarvcore.c	2006-02-14 10:36:56 UTC (rev 419)
@@ -432,6 +432,8 @@
     iseq->defined_method_id = 0;
     iseq->file_name = file_name;
     iseq->iseq_mark_ary = rb_ary_new();
+    RBASIC(iseq->iseq_mark_ary)->klass = 0;
+    
     iseq->catch_table_ary = rb_ary_new();
     iseq->type = type;
     iseq->arg_rest = 0;
@@ -457,6 +459,7 @@
     iseq->compile_data = ALLOC(struct iseq_compile_data);
     MEMZERO(iseq->compile_data, struct iseq_compile_data, 1);
     iseq->compile_data->mark_ary = rb_ary_new();
+    RBASIC(iseq->compile_data->mark_ary)->klass = 0;
 
     iseq->compile_data->storage_head = iseq->compile_data->storage_current =
 	(struct iseq_compile_data_storage *)


-- 
ML: yarv-diff quickml.atdot.net
Info: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]