From a697b1f6029c215f8a7c14e8b696a19d838708ec Mon Sep 17 00:00:00 2001 From: aamine Date: Thu, 22 Sep 2005 20:58:10 +0000 Subject: * 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. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9273 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 44 ++ ext/ripper/README | 3 +- ext/ripper/depend | 35 +- ext/ripper/lib/ripper/core.rb | 913 ------------------------ ext/ripper/lib/ripper/core.rb.in | 2 +- ext/ripper/test/check-event-arity.rb | 24 - ext/ripper/test/check-event-coverage.sh | 15 - ext/ripper/test/check-scanner-event-coverage.rb | 18 - ext/ripper/test/list-called-events.rb | 12 - ext/ripper/test/src_rb | 363 ---------- ext/ripper/test/validate.rb | 68 -- ext/ripper/tools/generate-eventids1.rb | 16 - ext/ripper/tools/generate-ripper_rb.rb | 60 -- ext/ripper/tools/list-parse-event-ids.rb | 39 - ext/ripper/tools/list-scan-event-ids.rb | 23 - test/ripper/test_files.rb | 1 + test/ripper/test_parser_events.rb | 15 +- test/ripper/test_scanner_events.rb | 25 +- 18 files changed, 87 insertions(+), 1589 deletions(-) delete mode 100644 ext/ripper/lib/ripper/core.rb delete mode 100644 ext/ripper/test/check-event-arity.rb delete mode 100755 ext/ripper/test/check-event-coverage.sh delete mode 100644 ext/ripper/test/check-scanner-event-coverage.rb delete mode 100644 ext/ripper/test/list-called-events.rb delete mode 100644 ext/ripper/test/src_rb delete mode 100644 ext/ripper/test/validate.rb delete mode 100755 ext/ripper/tools/generate-eventids1.rb delete mode 100755 ext/ripper/tools/generate-ripper_rb.rb delete mode 100755 ext/ripper/tools/list-parse-event-ids.rb delete mode 100755 ext/ripper/tools/list-scan-event-ids.rb 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 + + * 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 * 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 ) -<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 <
#{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(<