summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog44
-rw-r--r--ext/ripper/README3
-rw-r--r--ext/ripper/depend35
-rw-r--r--ext/ripper/lib/ripper/core.rb913
-rw-r--r--ext/ripper/lib/ripper/core.rb.in2
-rw-r--r--ext/ripper/test/check-event-arity.rb24
-rwxr-xr-xext/ripper/test/check-event-coverage.sh15
-rw-r--r--ext/ripper/test/check-scanner-event-coverage.rb18
-rw-r--r--ext/ripper/test/list-called-events.rb12
-rw-r--r--ext/ripper/test/src_rb363
-rw-r--r--ext/ripper/test/validate.rb68
-rwxr-xr-xext/ripper/tools/generate-eventids1.rb16
-rwxr-xr-xext/ripper/tools/generate-ripper_rb.rb60
-rwxr-xr-xext/ripper/tools/list-parse-event-ids.rb39
-rwxr-xr-xext/ripper/tools/list-scan-event-ids.rb23
-rw-r--r--test/ripper/test_files.rb1
-rw-r--r--test/ripper/test_parser_events.rb15
-rw-r--r--test/ripper/test_scanner_events.rb25
18 files changed, 87 insertions, 1589 deletions
diff --git a/ChangeLog b/ChangeLog
index 730224bada..5060a627b9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,47 @@
+Fri Sep 23 05:57:23 2005 Minero Aoki <aamine@loveruby.net>
+
+ * ext/ripper: refactoring code generation tools. [ruby-dev:27247]
+ [ruby-dev:27273]
+
+ * ext/ripper/depend: use generate.rb.
+
+ * ext/ripper/lib/ripper/core.rb: removed.
+
+ * ext/ripper/tools/generate-eventids1.rb: removed (code moved to
+ generate.rb).
+
+ * ext/ripper/tools/generate-ripper_rb.rb: removed (code moved to
+ generate.rb).
+
+ * ext/ripper/tools/list-parse-event-ids.rb: removed (code moved to
+ generate.rb).
+
+ * ext/ripper/tools/list-scan-event-ids.rb: removed (code moved to
+ generate.rb).
+
+ * ext/ripper/lib/ripper/core.rb: removed.
+
+ * ext/ripper: refactoring tests. [ruby-dev:27273]
+
+ * ext/ripper/test/check-event-arity.rb: removed (code moved to
+ tools/generate.rb).
+
+ * ext/ripper/test/check-event-coverage.rb: removed (code moved to
+ test/ripper/test_parser_events.rb).
+
+ * ext/ripper/test/check-scanner-event-coverage.rb: removed (code
+ moved to test/ripper/test_scanner_events.rb).
+
+ * ext/ripper/test/list-called-events.rb: removed.
+
+ * ext/ripper/test/src_rb: removed.
+
+ * ext/ripper/test/validate.rb: removed.
+
+ * test/ripper/test_scanner_events.rb: check event coverage.
+
+ * ext/ripper/lib/ripper/core.rb.in: update copyright year.
+
Thu Sep 22 23:40:19 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
* lib/mkmf.rb (find_executable0): default path if environment is not
diff --git a/ext/ripper/README b/ext/ripper/README
index 5242c4256d..0825013ba9 100644
--- a/ext/ripper/README
+++ b/ext/ripper/README
@@ -13,13 +13,12 @@ Requirements
------------
* ruby 1.9 (support CVS HEAD only)
- * bison 1.28 or later (You MUST use bison)
+ * bison 1.28 or later (Other yaccs do not work)
Usage
-----
See test/ripper/* and sample/ripper/*.
- To know thrown events, see lib/ripper.rb.
License
-------
diff --git a/ext/ripper/depend b/ext/ripper/depend
index f07bc9d38e..39586a89f1 100644
--- a/ext/ripper/depend
+++ b/ext/ripper/depend
@@ -1,39 +1,18 @@
-c : ripper.c eventids1.c
-dev: c rb
-
-ripper.o: ripper.c $(hdrdir)/lex.c eventids1.c $(srcdir)/eventids2.c
+ripper.o: ripper.c eventids1.c $(srcdir)/eventids2.c $(hdrdir)/lex.c
.y.c:
bison -t -v -o$@ $<
ripper.y: $(hdrdir)/parse.y $(srcdir)/tools/preproc.rb
- $(RUBY) $(srcdir)/tools/preproc.rb $(hdrdir)/parse.y > $@
-
-eventids1.c: $(hdrdir)/parse.y $(srcdir)/tools/generate-eventids1.rb ids1
- $(RUBY) $(srcdir)/tools/generate-eventids1.rb ids1 > $@
-
-ids1: $(srcdir)/tools/list-parse-event-ids.rb $(hdrdir)/parse.y
- $(RUBY) $(srcdir)/tools/list-parse-event-ids.rb -a $(hdrdir)/parse.y > $@
-
-ids2: $(srcdir)/tools/list-scan-event-ids.rb $(srcdir)/eventids2.c
- $(RUBY) $(srcdir)/tools/list-scan-event-ids.rb -a $(srcdir)/eventids2.c > $@
+ $(RUBY) $(srcdir)/tools/preproc.rb $(hdrdir)/parse.y $@
-#
-# Entries for only ripper developpers: DO NOT USE
-#
+$(srcdir)/lib/ripper/core.rb: $(srcdir)/lib/ripper/core.rb.in $(srcdir)/tools/generate.rb
+ $(RUBY) $(srcdir)/tools/generate.rb --mode=ripper/core --template=$@.in --output=$@ --ids1src=$(hdrdir)/parse.y --ids2src=$(srcdir)/eventids2.c
-# [WARNING]
-# Never make core.rb automatically; it causes line terminator problem.
-# See [ruby-dev:26462]
-rb: $(srcdir)/lib/ripper/core.rb.in ids1 ids2 $(srcdir)/tools/generate-ripper_rb.rb
- $(RUBY) $(srcdir)/tools/generate-ripper_rb.rb $(srcdir)/lib/ripper/core.rb.in ids1 ids2 > $(srcdir)/lib/ripper/core.rb
+eventids1.c: $(hdrdir)/parse.y $(srcdir)/tools/generate.rb
+ $(RUBY) $(srcdir)/tools/generate.rb --mode=eventids1 --ids2src=$(hdrdir)/parse.y --output=$@
-test:
- $(RUBY) test/check-event-arity.rb $(hdrdir)/parse.y
- sh test/check-event-coverage.sh
- $(RUBY) test/check-scanner-event-coverage.rb
- $(RUBY) test/validate.rb > /dev/null
- @echo OK
+# Entries for Ripper maintainer
preproc: ripper.E
ripper.E: ripper.c
diff --git a/ext/ripper/lib/ripper/core.rb b/ext/ripper/lib/ripper/core.rb
deleted file mode 100644
index 6f2d8d18c3..0000000000
--- a/ext/ripper/lib/ripper/core.rb
+++ /dev/null
@@ -1,913 +0,0 @@
-# This file is automatically generated from core.rb.in and parse.y.
-# DO NOT MODIFY!!!!!!
-
-#
-# ripper/core.rb
-#
-# Copyright (C) 2003,2004 Minero Aoki
-#
-# This program is free software.
-# You can distribute and/or modify this program under the Ruby License.
-# For details of Ruby License, see ruby/COPYING.
-#
-
-require 'ripper.so'
-
-class Ripper
- # Parses Ruby program read from _src_.
- # _src_ must be a String or a IO or a object which has #gets method.
- def Ripper.parse(src, filename = '(ripper)', lineno = 1)
- new(src, filename, lineno).parse
- end
-
- # This table contains name of parser events and its arity.
- PARSER_EVENT_TABLE = {
- :BEGIN => 1,
- :END => 1,
- :alias => 2,
- :alias_error => 1,
- :aref => 2,
- :aref_field => 2,
- :arg_ambiguous => 0,
- :arg_paren => 1,
- :arglist_add => 2,
- :arglist_add_block => 2,
- :arglist_add_star => 2,
- :arglist_new => 0,
- :arglist_prepend => 2,
- :array => 1,
- :assign => 2,
- :assign_error => 1,
- :assoc_new => 2,
- :assoclist_from_args => 1,
- :bare_assoc_hash => 1,
- :begin => 1,
- :binary => 3,
- :blockvar_add_block => 2,
- :blockvar_add_star => 2,
- :blockvar_new => 1,
- :bodystmt => 4,
- :brace_block => 2,
- :break => 1,
- :call => 3,
- :case => 2,
- :class => 3,
- :class_name_error => 1,
- :command => 2,
- :command_call => 4,
- :const_ref => 1,
- :constpath_field => 2,
- :constpath_ref => 2,
- :def => 3,
- :defined => 1,
- :defs => 5,
- :do_block => 2,
- :dot2 => 2,
- :dot3 => 2,
- :dyna_symbol => 1,
- :else => 1,
- :elsif => 3,
- :ensure => 1,
- :fcall => 1,
- :field => 3,
- :for => 3,
- :hash => 1,
- :if => 3,
- :if_mod => 2,
- :ifop => 3,
- :iter_block => 2,
- :lambda => 2,
- :massign => 2,
- :method_add_arg => 2,
- :mlhs_add => 2,
- :mlhs_add_star => 2,
- :mlhs_new => 0,
- :mlhs_paren => 1,
- :module => 2,
- :mrhs_add => 2,
- :mrhs_add_star => 2,
- :mrhs_new => 0,
- :mrhs_new_from_arglist => 1,
- :next => 1,
- :opassign => 3,
- :param_error => 1,
- :params => 4,
- :paren => 1,
- :parse_error => 1,
- :pragma => 2,
- :program => 1,
- :qwords_add => 2,
- :qwords_new => 0,
- :redo => 0,
- :regexp_literal => 2,
- :rescue => 4,
- :rescue_mod => 2,
- :restparam => 1,
- :retry => 0,
- :return => 1,
- :return0 => 0,
- :sclass => 2,
- :space => 1,
- :stmts_add => 2,
- :stmts_new => 0,
- :string_add => 2,
- :string_concat => 2,
- :string_content => 0,
- :string_dvar => 1,
- :string_embexpr => 1,
- :string_literal => 1,
- :super => 1,
- :symbol => 1,
- :symbol_literal => 1,
- :topconst_field => 1,
- :topconst_ref => 1,
- :unary => 2,
- :undef => 1,
- :unless => 3,
- :unless_mod => 2,
- :until => 2,
- :until_mod => 2,
- :var_alias => 2,
- :var_field => 1,
- :var_ref => 1,
- :void_stmt => 0,
- :when => 3,
- :while => 2,
- :while_mod => 2,
- :word_add => 2,
- :word_new => 0,
- :words_add => 2,
- :words_new => 0,
- :xstring_add => 2,
- :xstring_literal => 1,
- :xstring_new => 0,
- :yield => 1,
- :yield0 => 0,
- :zsuper => 0
- }
-
- # This array contains name of parser events.
- PARSER_EVENTS = PARSER_EVENT_TABLE.keys
-
- # This table contains name of scanner events and its arity
- # (arity is always 1 for all scanner events).
- SCANNER_EVENT_TABLE = {
- :CHAR => 1,
- :__end__ => 1,
- :backref => 1,
- :backtick => 1,
- :comma => 1,
- :comment => 1,
- :const => 1,
- :cvar => 1,
- :embdoc => 1,
- :embdoc_beg => 1,
- :embdoc_end => 1,
- :embexpr_beg => 1,
- :embexpr_end => 1,
- :embvar => 1,
- :float => 1,
- :gvar => 1,
- :heredoc_beg => 1,
- :heredoc_end => 1,
- :ident => 1,
- :ignored_nl => 1,
- :int => 1,
- :ivar => 1,
- :kw => 1,
- :label => 1,
- :lbrace => 1,
- :lbracket => 1,
- :lparen => 1,
- :nl => 1,
- :op => 1,
- :period => 1,
- :qwords_beg => 1,
- :rbrace => 1,
- :rbracket => 1,
- :regexp_beg => 1,
- :regexp_end => 1,
- :rparen => 1,
- :semicolon => 1,
- :sp => 1,
- :symbeg => 1,
- :tlambda => 1,
- :tlambda_arg => 1,
- :tlambeg => 1,
- :tstring_beg => 1,
- :tstring_content => 1,
- :tstring_end => 1,
- :words_beg => 1,
- :words_sep => 1
- }
-
- # This array contains name of scanner events.
- SCANNER_EVENTS = SCANNER_EVENT_TABLE.keys
-
- # This table contains name of all ripper events.
- EVENTS = PARSER_EVENTS + SCANNER_EVENTS
-
- ### ###
- ### Event Handlers ###
- ### ###
-
- private
-
- # This method is called when weak warning is produced by the parser.
- # _fmt_ and _args_ is printf style.
- def warn(fmt, *args)
- end
-
- # This method is called when strong warning is produced by the parser.
- # _fmt_ and _args_ is printf style.
- def warning(fmt, *args)
- end
-
- # This method is called when the parser found syntax error.
- def compile_error(msg)
- end
-
- #
- # Parser Events
- #
-
- def on_BEGIN(a)
- a
- end
-
- def on_END(a)
- a
- end
-
- def on_alias(a, b)
- a
- end
-
- def on_alias_error(a)
- a
- end
-
- def on_aref(a, b)
- a
- end
-
- def on_aref_field(a, b)
- a
- end
-
- def on_arg_ambiguous
- nil
- end
-
- def on_arg_paren(a)
- a
- end
-
- def on_arglist_add(a, b)
- a
- end
-
- def on_arglist_add_block(a, b)
- a
- end
-
- def on_arglist_add_star(a, b)
- a
- end
-
- def on_arglist_new
- nil
- end
-
- def on_arglist_prepend(a, b)
- a
- end
-
- def on_array(a)
- a
- end
-
- def on_assign(a, b)
- a
- end
-
- def on_assign_error(a)
- a
- end
-
- def on_assoc_new(a, b)
- a
- end
-
- def on_assoclist_from_args(a)
- a
- end
-
- def on_bare_assoc_hash(a)
- a
- end
-
- def on_begin(a)
- a
- end
-
- def on_binary(a, b, c)
- a
- end
-
- def on_blockvar_add_block(a, b)
- a
- end
-
- def on_blockvar_add_star(a, b)
- a
- end
-
- def on_blockvar_new(a)
- a
- end
-
- def on_bodystmt(a, b, c, d)
- a
- end
-
- def on_brace_block(a, b)
- a
- end
-
- def on_break(a)
- a
- end
-
- def on_call(a, b, c)
- a
- end
-
- def on_case(a, b)
- a
- end
-
- def on_class(a, b, c)
- a
- end
-
- def on_class_name_error(a)
- a
- end
-
- def on_command(a, b)
- a
- end
-
- def on_command_call(a, b, c, d)
- a
- end
-
- def on_const_ref(a)
- a
- end
-
- def on_constpath_field(a, b)
- a
- end
-
- def on_constpath_ref(a, b)
- a
- end
-
- def on_def(a, b, c)
- a
- end
-
- def on_defined(a)
- a
- end
-
- def on_defs(a, b, c, d, e)
- a
- end
-
- def on_do_block(a, b)
- a
- end
-
- def on_dot2(a, b)
- a
- end
-
- def on_dot3(a, b)
- a
- end
-
- def on_dyna_symbol(a)
- a
- end
-
- def on_else(a)
- a
- end
-
- def on_elsif(a, b, c)
- a
- end
-
- def on_ensure(a)
- a
- end
-
- def on_fcall(a)
- a
- end
-
- def on_field(a, b, c)
- a
- end
-
- def on_for(a, b, c)
- a
- end
-
- def on_hash(a)
- a
- end
-
- def on_if(a, b, c)
- a
- end
-
- def on_if_mod(a, b)
- a
- end
-
- def on_ifop(a, b, c)
- a
- end
-
- def on_iter_block(a, b)
- a
- end
-
- def on_lambda(a, b)
- a
- end
-
- def on_massign(a, b)
- a
- end
-
- def on_method_add_arg(a, b)
- a
- end
-
- def on_mlhs_add(a, b)
- a
- end
-
- def on_mlhs_add_star(a, b)
- a
- end
-
- def on_mlhs_new
- nil
- end
-
- def on_mlhs_paren(a)
- a
- end
-
- def on_module(a, b)
- a
- end
-
- def on_mrhs_add(a, b)
- a
- end
-
- def on_mrhs_add_star(a, b)
- a
- end
-
- def on_mrhs_new
- nil
- end
-
- def on_mrhs_new_from_arglist(a)
- a
- end
-
- def on_next(a)
- a
- end
-
- def on_opassign(a, b, c)
- a
- end
-
- def on_param_error(a)
- a
- end
-
- def on_params(a, b, c, d)
- a
- end
-
- def on_paren(a)
- a
- end
-
- def on_parse_error(a)
- a
- end
-
- def on_pragma(a, b)
- a
- end
-
- def on_program(a)
- a
- end
-
- def on_qwords_add(a, b)
- a
- end
-
- def on_qwords_new
- nil
- end
-
- def on_redo
- nil
- end
-
- def on_regexp_literal(a, b)
- a
- end
-
- def on_rescue(a, b, c, d)
- a
- end
-
- def on_rescue_mod(a, b)
- a
- end
-
- def on_restparam(a)
- a
- end
-
- def on_retry
- nil
- end
-
- def on_return(a)
- a
- end
-
- def on_return0
- nil
- end
-
- def on_sclass(a, b)
- a
- end
-
- def on_space(a)
- a
- end
-
- def on_stmts_add(a, b)
- a
- end
-
- def on_stmts_new
- nil
- end
-
- def on_string_add(a, b)
- a
- end
-
- def on_string_concat(a, b)
- a
- end
-
- def on_string_content
- nil
- end
-
- def on_string_dvar(a)
- a
- end
-
- def on_string_embexpr(a)
- a
- end
-
- def on_string_literal(a)
- a
- end
-
- def on_super(a)
- a
- end
-
- def on_symbol(a)
- a
- end
-
- def on_symbol_literal(a)
- a
- end
-
- def on_topconst_field(a)
- a
- end
-
- def on_topconst_ref(a)
- a
- end
-
- def on_unary(a, b)
- a
- end
-
- def on_undef(a)
- a
- end
-
- def on_unless(a, b, c)
- a
- end
-
- def on_unless_mod(a, b)
- a
- end
-
- def on_until(a, b)
- a
- end
-
- def on_until_mod(a, b)
- a
- end
-
- def on_var_alias(a, b)
- a
- end
-
- def on_var_field(a)
- a
- end
-
- def on_var_ref(a)
- a
- end
-
- def on_void_stmt
- nil
- end
-
- def on_when(a, b, c)
- a
- end
-
- def on_while(a, b)
- a
- end
-
- def on_while_mod(a, b)
- a
- end
-
- def on_word_add(a, b)
- a
- end
-
- def on_word_new
- nil
- end
-
- def on_words_add(a, b)
- a
- end
-
- def on_words_new
- nil
- end
-
- def on_xstring_add(a, b)
- a
- end
-
- def on_xstring_literal(a)
- a
- end
-
- def on_xstring_new
- nil
- end
-
- def on_yield(a)
- a
- end
-
- def on_yield0
- nil
- end
-
- def on_zsuper
- nil
- end
-
- #
- # Lexer Events
- #
-
- def on_CHAR(token)
- token
- end
-
- def on___end__(token)
- token
- end
-
- def on_backref(token)
- token
- end
-
- def on_backtick(token)
- token
- end
-
- def on_comma(token)
- token
- end
-
- def on_comment(token)
- token
- end
-
- def on_const(token)
- token
- end
-
- def on_cvar(token)
- token
- end
-
- def on_embdoc(token)
- token
- end
-
- def on_embdoc_beg(token)
- token
- end
-
- def on_embdoc_end(token)
- token
- end
-
- def on_embexpr_beg(token)
- token
- end
-
- def on_embexpr_end(token)
- token
- end
-
- def on_embvar(token)
- token
- end
-
- def on_float(token)
- token
- end
-
- def on_gvar(token)
- token
- end
-
- def on_heredoc_beg(token)
- token
- end
-
- def on_heredoc_end(token)
- token
- end
-
- def on_ident(token)
- token
- end
-
- def on_ignored_nl(token)
- token
- end
-
- def on_int(token)
- token
- end
-
- def on_ivar(token)
- token
- end
-
- def on_kw(token)
- token
- end
-
- def on_label(token)
- token
- end
-
- def on_lbrace(token)
- token
- end
-
- def on_lbracket(token)
- token
- end
-
- def on_lparen(token)
- token
- end
-
- def on_nl(token)
- token
- end
-
- def on_op(token)
- token
- end
-
- def on_period(token)
- token
- end
-
- def on_qwords_beg(token)
- token
- end
-
- def on_rbrace(token)
- token
- end
-
- def on_rbracket(token)
- token
- end
-
- def on_regexp_beg(token)
- token
- end
-
- def on_regexp_end(token)
- token
- end
-
- def on_rparen(token)
- token
- end
-
- def on_semicolon(token)
- token
- end
-
- def on_sp(token)
- token
- end
-
- def on_symbeg(token)
- token
- end
-
- def on_tlambda(token)
- token
- end
-
- def on_tlambda_arg(token)
- token
- end
-
- def on_tlambeg(token)
- token
- end
-
- def on_tstring_beg(token)
- token
- end
-
- def on_tstring_content(token)
- token
- end
-
- def on_tstring_end(token)
- token
- end
-
- def on_words_beg(token)
- token
- end
-
- def on_words_sep(token)
- token
- end
-end
diff --git a/ext/ripper/lib/ripper/core.rb.in b/ext/ripper/lib/ripper/core.rb.in
index 7e6d51ab8f..5f46c58190 100644
--- a/ext/ripper/lib/ripper/core.rb.in
+++ b/ext/ripper/lib/ripper/core.rb.in
@@ -1,7 +1,7 @@
#
# ripper/core.rb
#
-# Copyright (C) 2003,2004 Minero Aoki
+# Copyright (C) 2003-2005 Minero Aoki
#
# This program is free software.
# You can distribute and/or modify this program under the Ruby License.
diff --git a/ext/ripper/test/check-event-arity.rb b/ext/ripper/test/check-event-arity.rb
deleted file mode 100644
index 00e1b98dbc..0000000000
--- a/ext/ripper/test/check-event-arity.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-def main
- invalid = false
- table = {}
- ARGF.each do |line|
- next if /\A\#\s*define\s+s?dispatch\d/ === line
- next if /ripper_dispatch\d/ === line
- line.scan(/dispatch(\d)\((\w+)/) do |num, ev|
- num = num.to_i
- if data = table[ev]
- locations, arity = data
- unless num == arity
- invalid = true
- puts "arity differ [#{ev}]: #{ARGF.lineno}->#{num}; #{locations.join(',')}->#{arity}"
- end
- locations.push ARGF.lineno
- else
- table[ev] = [[ARGF.lineno], num.to_i]
- end
- end
- end
- exit 1 if invalid
-end
-
-main
diff --git a/ext/ripper/test/check-event-coverage.sh b/ext/ripper/test/check-event-coverage.sh
deleted file mode 100755
index 727c3b9837..0000000000
--- a/ext/ripper/test/check-event-coverage.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-# $Id$
-
-RUBY=${RUBY:-ruby}
-status=0
-
-$RUBY tools/list-parse-event-ids.rb parse.y | awk '{print "on__" $1}' > list_a
-$RUBY test/list-called-events.rb | sort -u > list_b
-diff -u list_a list_b | grep '^-on' | sed 's/^-on__//' > list_diff
-if [ -s list_diff ]
-then
- cat list_diff
- status=1
-fi
-rm -f list_a list_b list_diff
-exit $status
diff --git a/ext/ripper/test/check-scanner-event-coverage.rb b/ext/ripper/test/check-scanner-event-coverage.rb
deleted file mode 100644
index 4de01e35f4..0000000000
--- a/ext/ripper/test/check-scanner-event-coverage.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-def main
- not_tested = eventids() - tested_ids()
- unless not_tested.empty?
- puts not_tested
- exit 1
- end
- exit 0
-end
-
-def eventids
- File.read('eventids2.c').scan(/on__(\w+)/).flatten.uniq
-end
-
-def tested_ids
- File.read('test/test_scanner_events.rb').scan(/def test_(\S+)/).flatten.uniq
-end
-
-main
diff --git a/ext/ripper/test/list-called-events.rb b/ext/ripper/test/list-called-events.rb
deleted file mode 100644
index d799efc979..0000000000
--- a/ext/ripper/test/list-called-events.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-require 'ripper.so'
-
-class R < Ripper
- def method_missing(mid, *args)
- puts mid
- args[0]
- end
- undef :warn
-end
-
-fname = (ARGV[0] || 'test/src_rb')
-R.new(File.read(fname), fname, 1).parse
diff --git a/ext/ripper/test/src_rb b/ext/ripper/test/src_rb
deleted file mode 100644
index e7894362f3..0000000000
--- a/ext/ripper/test/src_rb
+++ /dev/null
@@ -1,363 +0,0 @@
-# comment
-=begin
- embedded document
-=end
-
-# literal
-1
-1000000000000000000000
-1.0
-1.234e5
-1..2
-1...3
-:symbol
-:"dynamic #{sym_embexpr} symbol"
-[1,2,3]
-{1 => 2}
-'string'
-"string"
-"before #{str_embexpr} after"
-"str #@ivar str"
-"str #$gvar str"
-"string" "concat"
-`/bin/true`
-{1, 2, 3, 4}
-/regexp/
-/regexp_with_opt/mioe
-/regexp #{regexp_embexpr} after/
-%q[string]
-%Q[str#{str_embexpr}ing]
-%r[regexp]
-%w( a b c )
-%W( a#{w_emb}b c d )
-<<HERE
-heredoc line 1
-heredoc line 2
-heredoc line 3
-HERE
-
-# special variables
-true
-false
-nil
-self
-
-# def
-def a
-end
-def b()
-end
-def c(a)
-end
-def d(a,*rest)
-end
-def e(a,&block)
-end
-def f(a,*rest,&block)
-end
-def g(*rest)
-end
-def h(&block)
-end
-def i(*rest,&block)
-end
-def j(CONST)
-end
-def k(@ivar)
-end
-def l($gvar)
-end
-def n(@@cvar)
-end
-
-# alias
-alias x b
-alias $rest $' # error
-alias $nth $1 # error
-
-# undef
-undef warn
-
-# class, module
-class C
-end
-module M
-end
-class cname
-end
-class << Object.new
- def self.a
- end
-end
-
-# field
-$a = 1
-$' = 0 # error
-$1 = 0 # error
-@a = 2
-@@a = 3
-a = 4
-a += 1
-a -= 1
-a *= 1
-a /= 1
-a &&= 1
-a ||= 1
-m.a = 5
-m.a += 1
-m.a &&= 1
-m.a ||= 1
-a[1] = 2
-a[1] += 1
-a[1] &&= 1
-a[1] ||= 1
-C = 1
-C::C = 1
-::C = 1
-def m
- C = 1 # dynamic const assignment
- C::C = 1 # dynamic const assignment
- ::C = 1 # dynamic const assignment
-end
-
-# ref
-lvar = $a
-lvar = @a
-lvar = @@a
-lvar = Object
-lvar = C
-lvar = C::C
-lvar = ::C
-lvar = a[1]
-
-# unary operator
-+1
--1
-not 1
-!1
-~str
-
-# binary operator
-1 + 1
-1 - 1
-1 * 1
-1 / 1
-1 ** 1
-1 ^ 1
-1 & 1
-1 | 1
-1 && 1
-1 || 1
-
-# mlhs, mrhs
-a, b, c = list
-a, = list
-a, * = list
-a, *b = list
-a, (b, c), d, *e = list
-mlhs = 1, 2
-mlhs = 1, 2, 3, *list
-mlhs = *list
-
-# method call
-m
-m()
-m(a)
-m(a,a)
-m(*a)
-m(&b)
-m(a,*a)
-m(a,&b)
-m(a,*a,&b)
-m(1=>2)
-m(1=>2,*a)
-m(1=>2,&b)
-m(1=>2,*a,&b)
-m ()
-m (a)
-m (a,a)
-m (*a)
-m (&b)
-m (a,*a)
-m (a,&b)
-m (a,*a,&b)
-m (1=>2)
-m (1=>2,*a)
-m (1=>2,&b)
-m (1=>2,*a,&b)
-m a
-m a,a
-m *a
-m &b
-m a,*a
-m a,&b
-m a,*a,&b
-m 1=>2
-m 1=>2,*a
-m 1=>2,&b
-m 1=>2,*a,&b
-obj.m
-obj.m()
-obj.m(a)
-obj.m(a,a)
-obj.m(*a)
-obj.m(&b)
-obj.m(a,*a)
-obj.m(a,&b)
-obj.m(a,*a,&b)
-obj.m(1=>2)
-obj.m(1=>2,*a)
-obj.m(1=>2,&b)
-obj.m(1=>2,*a,&b)
-obj.m ()
-obj.m (a)
-obj.m (a,a)
-obj.m (*a)
-obj.m (&b)
-obj.m (a,*a)
-obj.m (a,&b)
-obj.m (a,*a,&b)
-obj.m (1=>2)
-obj.m (1=>2)
-obj.m (1=>2,*a)
-obj.m (1=>2,&b)
-obj.m (1=>2,*a,&b)
-obj.m a
-obj.m a,a
-obj.m *a
-obj.m &b
-obj.m a,*a
-obj.m a,&b
-obj.m a,*a,&b
-obj.m 1=>2
-obj.m 1=>2,*a
-obj.m 1=>2,&b
-obj.m 1=>2,*a,&b
-
-# ambiguous argument
-m +1
-m /r/
-
-# iterator
-[1,2,3].each do |i|
- print i
-end
-{1=>true}.each do |k,v|
- puts k
-end
-[1,2,3].each {|i| print i }
-[1].each {|a,| }
-[1].each {|*b| }
-[1].each {|a,*b| }
-[1].each {|&block| }
-[1].each {|a,&block| }
-[1].each {|a,*b,&block| }
-a = lambda() {|n| n * n }
-a = lambda () {|n| n * n }
-a = lambda (a) {|n| n * n }
-a = lambda (a,b) {|n| n * n }
-
-# BEGIN, END
-BEGIN { }
-END { }
-
-# if, unless
-1 if true
-2 unless false
-if false
- 5
-elsif false
- 6
-elsif false then 7
-else
- 8
-end
-if m
-end
-unless 1
- 2
-end
-unless m
-end
-0 ? 1 : 2
-
-# case
-case 'a'
-when 'b'
- ;
-when 'c' then 1
-else
- 2
-end
-case
-when 1
-when 2
-when 3
-else
-end
-case 1
-else
-end
-case
-else
-end
-
-# while, until, for
-while true
- break
- next
- redo
-end
-begin
- break
-end while true
-until false
- break
- next
- redo
-end
-begin
- break
-end until false
-for x in m()
- break
- next
- redo
-end
-0 until true
-1 while false
-
-# begin, rescue, else, ensure
-begin
- 1
-rescue StandardError => er
- 2
-rescue => er
- 3
- retry
-else
- 4
-ensure
- 5
-end
-a = 1 rescue 2
-
-# jumps
-def m
- redo
- yield
- yield nil
- super
- super 1
- return
- return nil
-end
-
-# defined
-defined? f
-defined?(f)
-
-n = 1 \
-+ 1
-
-__END__
diff --git a/ext/ripper/test/validate.rb b/ext/ripper/test/validate.rb
deleted file mode 100644
index 808d321043..0000000000
--- a/ext/ripper/test/validate.rb
+++ /dev/null
@@ -1,68 +0,0 @@
-require 'ripper.so'
-
-class R < Ripper
- def initialize(*args)
- super
- @lineno = 0
- end
-
- def parse
- result = super
- puts "#{@lineno}:result: #{rawVALUE(result)}"
- validate_object result
- p result
- result
- end
-
- def on__nl(str)
- @lineno += 1
- end
-
- def on__ignored_nl(str)
- @lineno += 1
- end
-
- def on__comment(cmt)
- @lineno += 1
- end
-
- def on__embdoc_beg(str)
- @lineno += 1
- end
-
- def on__embdoc(str)
- @lineno += 1
- end
-
- def on__embdoc_end(str)
- @lineno += 1
- end
-
- def method_missing(mid, *args)
- puts mid
- args.each_with_index do |a,idx|
- puts "#{@lineno}:#{mid}\##{idx+1}: #{rawVALUE(a)}"
- validate_object a
- p a
- end
- args[0]
- end
-
- def warn(*args)
- end
-
- def warning(*args)
- end
-
- unless respond_to?(:validate_object)
- def validate_object(x)
- x
- end
- def rawVALUE(x)
- x.object_id
- end
- end
-end
-
-fname = (ARGV[0] || 'test/src_rb')
-R.new(File.read(fname), fname, 1).parse
diff --git a/ext/ripper/tools/generate-eventids1.rb b/ext/ripper/tools/generate-eventids1.rb
deleted file mode 100755
index ec7ec4949a..0000000000
--- a/ext/ripper/tools/generate-eventids1.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-# $Id$
-
-ids = File.readlines(ARGV[0]).map {|s| s.split[0] }
-
-ids.each do |id|
- puts "static ID ripper_id_#{id};"
-end
-
-puts
-puts 'static void'
-puts 'ripper_init_eventids1()'
-puts '{'
-ids.each do |id|
- puts %Q[ ripper_id_#{id} = rb_intern("on_#{id}");]
-end
-puts '}'
diff --git a/ext/ripper/tools/generate-ripper_rb.rb b/ext/ripper/tools/generate-ripper_rb.rb
deleted file mode 100755
index 5c06ca40a4..0000000000
--- a/ext/ripper/tools/generate-ripper_rb.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-# $Id$
-
-def main
- template, ids1, ids2 = *ARGV
- print <<header
-# This file is automatically generated from #{File.basename(template)} and parse.y.
-# DO NOT MODIFY!!!!!!
-
-header
- File.foreach(template) do |line|
- case line
- when /\A\#include ids1/
- print_items read_ids(ids1)
- when /\A\#include ids2/
- print_items read_ids(ids2)
- when /\A\#include handlers1/
- File.foreach(ids1) do |line|
- id, arity = line.split
- arity = arity.to_i
- puts
- puts " def on_#{id}#{paramdecl(arity)}"
- puts " #{arity == 0 ? 'nil' : 'a'}"
- puts " end"
- end
- when /\A\#include handlers2/
- File.foreach(ids2) do |line|
- id, arity = line.split
- arity = arity.to_i
- puts
- puts " def on_#{id}(token)"
- puts " token"
- puts " end"
- end
- when /\A\#include (.*)/
- raise "unknown operation: #include #{$1}"
- else
- print line
- end
- end
-end
-
-def print_items(ids)
- comma = ''
- ids.each do |id, arity|
- print comma; comma = ",\n"
- print " #{id.intern.inspect} => #{arity}"
- end
- puts
-end
-
-def read_ids(path)
- File.readlines(path).map {|line| line.split }
-end
-
-def paramdecl(n)
- return '' if n == 0
- '(' + %w(a b c d e f g h i j k l m)[0, n].join(', ') + ')'
-end
-
-main
diff --git a/ext/ripper/tools/list-parse-event-ids.rb b/ext/ripper/tools/list-parse-event-ids.rb
deleted file mode 100755
index a8566fcbcf..0000000000
--- a/ext/ripper/tools/list-parse-event-ids.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-# $Id$
-
-def main
- if ARGV[0] == '-a'
- with_arity = true
- ARGV.delete_at 0
- else
- with_arity = false
- end
- extract_ids(ARGF).each do |id, arity|
- if with_arity
- puts "#{id} #{arity}"
- else
- puts id
- end
- end
-end
-
-def extract_ids(f)
- ids = {}
- f.each do |line|
- next if /\A\#\s*define\s+s?dispatch/ =~ line
- next if /ripper_dispatch/ =~ line
- if a = line.scan(/dispatch(\d)\((\w+)/)
- a.each do |arity, event|
- if ids[event]
- unless ids[event] == arity.to_i
- $stderr.puts "arity mismatch: #{event} (#{ids[event]} vs #{arity})"
- exit 1
- end
- end
- ids[event] = arity.to_i
- end
- end
- end
- ids.to_a.sort
-end
-
-main
diff --git a/ext/ripper/tools/list-scan-event-ids.rb b/ext/ripper/tools/list-scan-event-ids.rb
deleted file mode 100755
index 670ae9ed09..0000000000
--- a/ext/ripper/tools/list-scan-event-ids.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-# $Id$
-
-def main
- if ARGV.first == '-a'
- with_arity = true
- ARGV.delete_at 0
- else
- with_arity = false
- end
- extract_ids(ARGF).sort.each do |id|
- if with_arity
- puts "#{id} 1"
- else
- puts id
- end
- end
-end
-
-def extract_ids(f)
- f.read.scan(/ripper_id_(\w+)/).flatten.uniq
-end
-
-main
diff --git a/test/ripper/test_files.rb b/test/ripper/test_files.rb
index f96d12ac55..9304127608 100644
--- a/test/ripper/test_files.rb
+++ b/test/ripper/test_files.rb
@@ -13,6 +13,7 @@ class TestRipper_Generic < Test::Unit::TestCase
def test_parse_files
Find.find("#{SRCDIR}/lib", "#{SRCDIR}/ext", "#{SRCDIR}/sample", "#{SRCDIR}/test") {|n|
next if /\.rb\z/ !~ n || !File.file?(n)
+$stderr.print '#'
assert_nothing_raised { Parser.new(File.read(n)).parse }
}
end
diff --git a/test/ripper/test_parser_events.rb b/test/ripper/test_parser_events.rb
index 2ca825bea1..ba24996f4b 100644
--- a/test/ripper/test_parser_events.rb
+++ b/test/ripper/test_parser_events.rb
@@ -1,12 +1,19 @@
-#
-# test_parser_events.rb
-#
-
require 'dummyparser'
require 'test/unit'
class TestRipper_ParserEvents < Test::Unit::TestCase
+ # should be enabled
+=begin
+ def test_event_coverage
+ dispatched = Ripper::PARSER_EVENTS.map {|event,*| event }
+ dispatched.each do |e|
+ assert_equal true, respond_to?("test_#{e}", true),
+ "event not tested: #{e.inspect}"
+ end
+ end
+=end
+
def parse(str)
DummyParser.new(str).parse.to_s
end
diff --git a/test/ripper/test_scanner_events.rb b/test/ripper/test_scanner_events.rb
index 05c2d37f3e..ab66e357b6 100644
--- a/test/ripper/test_scanner_events.rb
+++ b/test/ripper/test_scanner_events.rb
@@ -7,6 +7,13 @@ require 'test/unit'
class TestRipper_ScannerEvents < Test::Unit::TestCase
+ def test_event_coverage
+ dispatched = Ripper::SCANNER_EVENTS.map {|event,_| event }
+ dispatched.each do |e|
+ assert_equal true, respond_to?("test_#{e}", true), "event not tested: #{e}"
+ end
+ end
+
def scan(target, str)
sym = "on_#{target}".intern
Ripper.lex(str).select {|_,type,_| type == sym }.map {|_,_,tok| tok }
@@ -177,9 +184,9 @@ class TestRipper_ScannerEvents < Test::Unit::TestCase
scan('embexpr_beg', "m(<<EOS)\n\#{expr}\nEOS")
end
-=begin
- # currently detected as "rbrace"
def test_embexpr_end
+=begin
+ # currently detected as "rbrace"
assert_equal [],
scan('embexpr_end', '')
assert_equal ['}'],
@@ -190,8 +197,8 @@ class TestRipper_ScannerEvents < Test::Unit::TestCase
scan('embexpr_end', '%Q[#{expr}]')
assert_equal ['}'],
scan('embexpr_end', "m(<<EOS)\n\#{expr}\nEOS")
- end
=end
+ end
def test_embvar
assert_equal [],
@@ -781,4 +788,16 @@ class TestRipper_ScannerEvents < Test::Unit::TestCase
scan('CHAR', "@ivar")
end
+ def test_label
+ end
+
+ def test_lambda
+ end
+
+ def test_lambeg
+ end
+
+ def test_lambda_arg
+ end
+
end