[ruby-dev:24272] Re: ripper committed

From: nobu@...
Date: 2004-09-15 06:18:12 UTC
List: ruby-dev #24272
なかだです。

At Mon, 13 Sep 2004 05:20:16 +0900,
Minero Aoki wrote in [ruby-dev:24255]:
> さきほど Ripper の本体を CVS HEAD にコミットしました。

* static-linked-extでリンクできない
  rb_reserved_word()が二重定義になるため。

* here documentの前の空白が捨てられる

* 複数行にわたる文字列後のRipper#linenoがRipper外部の行番号になっ
  てしまう。
  parse.y:rb_node_newnode()を共有しているため、lex_strtermには
  struct ripper_paramsではない生のruby_sourcefile/lineが保存さ
  れる。
  これはrb_node_newnode()自体を再定義したほうがいいかも。


Index: keywords
===================================================================
RCS file: /cvs/ruby/src/ruby/keywords,v
retrieving revision 1.7
diff -U2 -p -d -r1.7 keywords
--- keywords	12 Sep 2004 15:21:49 -0000	1.7
+++ keywords	13 Sep 2004 01:47:25 -0000
@@ -1,3 +1,6 @@
 struct kwtable {char *name; int id[2]; enum lex_state_e state;};
+struct kwtable *rb_reserved_word _((const char *, unsigned int));
+#ifndef RIPPER
+
 %%
 __LINE__, {k__LINE__, k__LINE__}, EXPR_END
@@ -41,2 +44,4 @@ when, {kWHEN, kWHEN}, EXPR_BEG
 while, {kWHILE, kWHILE_MOD}, EXPR_BEG
 yield, {kYIELD, kYIELD}, EXPR_ARG
+%%
+#endif
Index: lex.c
===================================================================
RCS file: /cvs/ruby/src/ruby/lex.c,v
retrieving revision 1.11
diff -U2 -p -d -r1.11 lex.c
--- lex.c	12 Sep 2004 15:21:49 -0000	1.11
+++ lex.c	13 Sep 2004 01:47:35 -0000
@@ -2,4 +2,7 @@
 /* Command-line: gperf -p -j1 -i 1 -g -o -t -N rb_reserved_word -k'1,3,$' keywords  */
 struct kwtable {char *name; int id[2]; enum lex_state_e state;};
+struct kwtable *rb_reserved_word _((const char *, unsigned int));
+#ifndef RIPPER
+;
 
 #define TOTAL_KEYWORDS 40
@@ -135,2 +138,3 @@ rb_reserved_word (str, len)
   return 0;
 }
+#endif
Index: parse.y
===================================================================
RCS file: /cvs/ruby/src/ruby/parse.y,v
retrieving revision 1.334
diff -U2 -p -d -r1.334 parse.y
--- parse.y	14 Sep 2004 13:11:29 -0000	1.334
+++ parse.y	15 Sep 2004 06:04:52 -0000
@@ -5024,6 +5024,20 @@ ripper_tokadd_string(parser, func, term,
 }
 
-#define NEW_STRTERM(func, term, paren) \
+#define NEW_STRTERM0(func, term, paren) \
 	rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0)
+#ifndef RIPPER
+#define NEW_STRTERM(func, term, paren) NEW_STRTERM0(func, term, paren)
+#else
+#define NEW_STRTERM(func, term, paren) ripper_new_strterm(parser, func, term, paren)
+static NODE *
+ripper_new_strterm(parser, func, term, paren)
+    struct ripper_params *parser;
+    VALUE func, term, paren;
+{
+    NODE *node = NEW_STRTERM0(func, term, paren);
+    nd_set_line(node, ruby_sourceline);
+    return node;
+}
+#endif
 
 static int
@@ -5141,4 +5155,5 @@ ripper_heredoc_identifier(parser)
     tokfix();
 #ifdef RIPPER
+    ripper_dispatch_space(parser);
     ripper_dispatch_nonspace(parser, tHEREDOC_BEG);
 #endif
@@ -5150,4 +5165,5 @@ ripper_heredoc_identifier(parser)
 				  lex_lastline);		/* nd_orig */
 #ifdef RIPPER
+    nd_set_line(lex_strterm, ruby_sourceline);
     ripper_clear_token(parser);
 #endif
Index: ext/ripper/ripper.rb.in
===================================================================
RCS file: /cvs/ruby/src/ruby/ext/ripper/ripper.rb.in,v
retrieving revision 1.1
diff -U2 -p -d -r1.1 ripper.rb.in
--- ext/ripper/ripper.rb.in	12 Sep 2004 17:34:29 -0000	1.1
+++ ext/ripper/ripper.rb.in	14 Sep 2004 03:32:19 -0000
@@ -1,3 +1,3 @@
-#
+# -*- ruby -*-
 # This file is automatically generated from ripper.rb.in and parse.y.
 # DO NOT MODIFY!!!!!!
@@ -14,5 +14,5 @@ require 'ripper.so'
 class Ripper
   def Ripper.parse(str, *args)
-    new.parse(str, *args)
+    new(str, *args).parse
   end
 


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread