Sha256: 15abb02dddb9f026f634d12d5cf4931f7ce5b3c4740f0893c78adea4fadde508

Contents?: true

Size: 913 Bytes

Versions: 2

Compression:

Stored size: 913 Bytes

Contents

module Gisele
  module Language
    class Rewriter
      class Helper

        attr_accessor :next_in_chain

        def self.install_on(rewriter)
          methods = const_get(:Methods)
          rewriter.module_eval do
            include methods
          end
          rewriter.add_helper(new)
        end

        def call(rw, node, &bl)
          meth = :"on_#{node.first}"
          meth = :"on_missing" unless respond_to?(meth)
          send(meth, rw, node) do |r,n|
            next_call(r, n, bl)
          end
        end

        def on_missing(rw, node)
          yield(rw, node)
        end

        private

        def next_call(rw, node, toplevel)
          if nic = next_in_chain
            nic.call(rw, node, &toplevel)
          else
            toplevel.call(rw, node)
          end
        end

      end # class Helper
    end # class Rewriter
  end # module Language
end # module Gisele

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
gisele-0.4.0 lib/gisele/language/rewriter/helper.rb
gisele-0.3.0 lib/gisele/language/rewriter/helper.rb