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