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

yarv-diff:402

From: ko1 atdot.net
Date: 1 Nov 2006 22:34:38 +0900
Subject: [yarv-diff:402] r569 - in trunk: . rb

Author: ko1
Date: 2006-11-01 22:34:37 +0900 (Wed, 01 Nov 2006)
New Revision: 569

Modified:
   trunk/ChangeLog
   trunk/intern.h
   trunk/parse.y
   trunk/rb/ir.rb
   trunk/ruby.c
   trunk/yarvcore.c
Log:
	* parse.y : fix NEWHEAP bugs (import HEAD)

	* ruby.c, intern.h, yarvcore.c (rb_load_file) : change to
	return parsed node pointer

	* rb/ir.rb : add check mode


Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2006-10-18 06:33:36 UTC (rev 568)
+++ trunk/ChangeLog	2006-11-01 13:34:37 UTC (rev 569)
@@ -4,6 +4,16 @@
 #  from Mon, 03 May 2004 01:24:19 +0900
 #
 
+2006-10-31(Tue) 22:47:50 +0900  Koichi Sasada  <ko1 atdot.net>
+
+	* parse.y : fix NEWHEAP bugs (import HEAD)
+
+	* ruby.c, intern.h, yarvcore.c (rb_load_file) : change to
+	return parsed node pointer
+
+	* rb/ir.rb : add check mode
+
+
 2006-09-01(Fri) 22:05:28 +0900  Koichi Sasada  <ko1 atdot.net>
 
 	* compile.c : fix a bug of peephole optimization and enable

Modified: trunk/intern.h
===================================================================
--- trunk/intern.h	2006-10-18 06:33:36 UTC (rev 568)
+++ trunk/intern.h	2006-11-01 13:34:37 UTC (rev 569)
@@ -442,7 +442,7 @@
 /* ruby.c */
 RUBY_EXTERN VALUE rb_argv;
 RUBY_EXTERN VALUE rb_argv0;
-void rb_load_file(const char*);
+void *rb_load_file(const char*);
 void ruby_script(const char*);
 void ruby_prog_init(void);
 void ruby_set_argv(int, char**);

Modified: trunk/parse.y
===================================================================
--- trunk/parse.y	2006-10-18 06:33:36 UTC (rev 568)
+++ trunk/parse.y	2006-11-01 13:34:37 UTC (rev 569)
@@ -8743,24 +8743,29 @@
 }
 
 #ifdef YYMALLOC
-#define HEAPCNT(n, size) ((size) % sizeof(YYSTYPE) ? 0 : (n) * (size) / sizeof(YYSTYPE))
-#define NEWHEAP(cnt) rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parserp->heap, cnt)
-#define ADD2HEAP(n, ptr) ((parserp->heap = (n))->u1.node = (ptr))
+#define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE))
+#define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parserp->heap, 0)
+#define ADD2HEAP(n, c, p) ((parserp->heap = (n))->u1.node = (p), \
+			   (n)->u3.cnt = (c), (p))
 
 void *
 rb_parser_malloc(struct parser_params *parserp, size_t size)
 {
-    NODE *n = NEWHEAP(HEAPCNT(1, size));
+    size_t cnt = HEAPCNT(1, size);
+    NODE *n = NEWHEAP();
+    void *ptr = xmalloc(size);
 
-    return ADD2HEAP(n, xmalloc(size));
+    return ADD2HEAP(n, cnt, ptr);
 }
 
 void *
 rb_parser_calloc(struct parser_params *parserp, size_t nelem, size_t size)
 {
-    NODE *n = NEWHEAP(HEAPCNT(nelem, size));
+    size_t cnt = HEAPCNT(nelem, size);
+    NODE *n = NEWHEAP();
+    void *ptr = xcalloc(nelem, size);
 
-    return ADD2HEAP(n, xcalloc(nelem, size));
+    return ADD2HEAP(n, cnt, ptr);
 }
 
 void *
@@ -8778,8 +8783,9 @@
 	    }
 	} while ((n = n->u2.node) != NULL);
     }
-    n = NEWHEAP(cnt);
-    return ADD2HEAP(n, xrealloc(ptr, size));
+    n = NEWHEAP();
+    ptr = xrealloc(ptr, size);
+    return ADD2HEAP(n, cnt, ptr);
 }
 
 void
@@ -8787,7 +8793,7 @@
 {
     NODE **prev = &parserp->heap, *n;
 
-    while (n = *prev) {
+    while ((n = *prev) != NULL) {
 	if (n->u1.node == ptr) {
 	    *prev = n->u2.node;
 	    rb_gc_force_recycle((VALUE)n);

Modified: trunk/rb/ir.rb
===================================================================
--- trunk/rb/ir.rb	2006-10-18 06:33:36 UTC (rev 568)
+++ trunk/rb/ir.rb	2006-11-01 13:34:37 UTC (rev 569)
@@ -1,5 +1,6 @@
 #
 # import ruby
+#
 
 IGNORE = ['eval.c', 'version.c', 'inits.c']
 
@@ -7,18 +8,19 @@
   "_.#{f}".tr('/', '_')
 end
 
-def diff rubydir, *files
-  raise "specify ruby HEAD directory" unless rubydir
-  
+def make_diff dir1, dir2, *files
+
   if files.size == 0
     files = (Dir.glob('**/*.[chy]') + Dir.glob('**/*.rb') +
              Dir.glob('**/configure*') + Dir.glob('**/*.sub')).sort.uniq
   end
   
   files.each{|f|
-    rubyfile = File.join(rubydir, f)
-    if FileTest.exist?(rubyfile) && !IGNORE.include?(f)
-      diff = `diff -b -U 8 "#{f}" "#{rubyfile}"`
+    file1 = File.join(dir1, f)
+    file2 = File.join(dir2, f)
+    
+    if FileTest.exist?(file1) && FileTest.exist?(file2) && !IGNORE.include?(f)
+      diff = `diff -b -U 8 "#{file1}" "#{file2}"`
       if diff.size > 0
         p f
         open(output_filename(f), 'w'){|f|
@@ -41,19 +43,40 @@
   end
 end
 
+def check dir1, dir2
+  dir1 = File.join(dir1, '')
+  dir2 = File.join(dir2, '')
+  puts "lack files in #{dir2} compare with #{dir1}: "
+  
+  re = /#{dir1}(.+)/
+  Dir.glob(File.join(dir1, '**/*')){|file|
+    if re =~ file
+      file = $1
+      unless File.exist?(File.join(dir2, file))
+        p file
+      end
+    else
+      raise
+    end
+  }
+end
+
 def cleanup
   system('rm -f _.* *.rej *.orig')
 end
 
-
-case ARGV[0]
-when 'diff'
-  diff(*ARGV[1..-1])
+case ARGV.shift
+when 'diff1'
+  make_diff('.', *ARGV)
+when 'diff2'
+  make_diff(*ARGV)
 when 'patch'
-  raise if ARGV[1..-1].size == 0
-  ARGV[1..-1].each{|file|
+  raise if ARGV.size == 0
+  ARGV.each{|file|
     patch file
   }
+when 'check'
+  check(*ARGV)
 when 'cleanup'
   cleanup
 else

Modified: trunk/ruby.c
===================================================================
--- trunk/ruby.c	2006-10-18 06:33:36 UTC (rev 568)
+++ trunk/ruby.c	2006-11-01 13:34:37 UTC (rev 569)
@@ -55,7 +55,7 @@
 char *ruby_inplace_mode = Qfalse;
 
 static void load_stdin(void);
-static void load_file(const char *, int);
+static NODE *load_file(const char *, int);
 static void forbid_setid(const char *);
 
 static VALUE do_loop = Qfalse, do_print = Qfalse;
@@ -887,13 +887,14 @@
     }
 }
 
-static void
+static NODE *
 load_file(const char *fname, int script)
 {
     extern VALUE rb_stdin;
-    VALUE parser;
+    volatile VALUE parser;
     VALUE f;
     int line_start = 1;
+    volatile NODE *tree = 0;
 
     if (!fname)
 	rb_load_fail(fname);
@@ -1010,19 +1011,20 @@
 	    return;
     }
     parser = rb_parser_new();
-    ruby_eval_tree = rb_parser_compile_file(parser, fname, f, line_start);
+    ruby_eval_tree = tree = rb_parser_compile_file(parser, fname, f, line_start);
     if (script && rb_parser_end_seen_p(parser)) {
 	rb_define_global_const("DATA", f);
     }
     else if (f != rb_stdin) {
 	rb_io_close(f);
     }
+    return tree;
 }
 
-void
+void *
 rb_load_file(const char *fname)
 {
-    load_file(fname, 0);
+    return load_file(fname, 0);
 }
 
 static void

Modified: trunk/yarvcore.c
===================================================================
--- trunk/yarvcore.c	2006-10-18 06:33:36 UTC (rev 568)
+++ trunk/yarvcore.c	2006-11-01 13:34:37 UTC (rev 569)
@@ -89,7 +89,7 @@
 yarv_load(char *file)
 {
     NODE *node;
-    volatile VALUE iseq;
+    VALUE iseq;
     volatile int critical;
     yarv_thread_t *th = GET_THREAD();
 
@@ -97,7 +97,7 @@
     rb_thread_critical = Qtrue;
     {
 	th->parse_in_eval++;
-	rb_load_file(file);
+	node = (NODE *)rb_load_file(file);
 	th->parse_in_eval--;
 	node = ruby_eval_tree;
     }


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

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