diff options
| author | aamine <aamine@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-07-26 13:42:49 +0000 |
|---|---|---|
| committer | aamine <aamine@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-07-26 13:42:49 +0000 |
| commit | f9e4bd01615be03f07991b24544f2e3ef9e84a2b (patch) | |
| tree | 3ce483a592ee0d880bba53382dfe50bf0f6f63a7 /ext/ripper | |
| parent | a161f3b367f9053965bf4078c0c2d6a0765ec985 (diff) | |
| download | ruby-f9e4bd01615be03f07991b24544f2e3ef9e84a2b.tar.gz ruby-f9e4bd01615be03f07991b24544f2e3ef9e84a2b.tar.xz ruby-f9e4bd01615be03f07991b24544f2e3ef9e84a2b.zip | |
* ext/ripper/lib/ripper/sexp.rb: new method Ripper.sexp_raw.
* ext/ripper/lib/ripper/sexp.rb (Ripper.sexp): returns more readable tree.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@8841 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/ripper')
| -rw-r--r-- | ext/ripper/lib/ripper/sexp.rb | 50 |
1 files changed, 45 insertions, 5 deletions
diff --git a/ext/ripper/lib/ripper/sexp.rb b/ext/ripper/lib/ripper/sexp.rb index a55e5f265..621dd0e75 100644 --- a/ext/ripper/lib/ripper/sexp.rb +++ b/ext/ripper/lib/ripper/sexp.rb @@ -33,23 +33,63 @@ class Ripper # nil]]]] # def Ripper.sexp(src, filename = '-', lineno = 1) + SexpBuilderPP.new(src, filename, lineno).parse + end + + def Ripper.sexp_raw(src, filename = '-', lineno = 1) SexpBuilder.new(src, filename, lineno).parse end + class SexpBuilderPP < ::Ripper #:nodoc: + private + + PARSER_EVENTS.each do |event| + case event.to_s + when /_new\z/ + module_eval(<<-End, __FILE__, __LINE__ + 1) + def on_#{event}(*args) + [] + end + End + when /_add\z/ + module_eval(<<-End, __FILE__, __LINE__ + 1) + def on_#{event}(list, item) + list.push item + list + end + End + else + module_eval(<<-End, __FILE__, __LINE__ + 1) + def on_#{event}(*args) + [:#{event}, *args] + end + End + end + end + + SCANNER_EVENTS.each do |event| + module_eval(<<-End, __FILE__, __LINE__ + 1) + def on_#{event}(tok) + [:@#{event}, tok, [lineno(), column()]] + end + End + end + end + class SexpBuilder < ::Ripper #:nodoc: private PARSER_EVENTS.each do |event| - module_eval(<<-End) - def on_#{event}(*list) - list.unshift :#{event} - list + module_eval(<<-End, __FILE__, __LINE__ + 1) + def on_#{event}(*args) + args.unshift :#{event} + args end End end SCANNER_EVENTS.each do |event| - module_eval(<<-End) + module_eval(<<-End, __FILE__, __LINE__ + 1) def on_#{event}(tok) [:@#{event}, tok, [lineno(), column()]] end |
