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