Sha256: ac71da3e8bdf5e3a4edabdd9aa593a1e75372a6a35f65fb0e79dbe7bca25b962

Contents?: true

Size: 800 Bytes

Versions: 2

Compression:

Stored size: 800 Bytes

Contents

module Gisele
  module Language
    class ElsifFlattener < Rewriter
      alias :on_missing :copy_and_applyall

      def on_if_st(node)
        condition, dost, *clauses = node.children

        base = [:if_st, condition, dost]
        base = node(base, node.markers.dup)

        clauses.inject base do |cur_if, clause|
          rw_clause = call(clause)
          cur_if << rw_clause
          rw_clause.last
        end

        base
      end

      def on_elsif_clause(node)
        base = \
          [:else_clause,
           [:if_st, node[1], mainflow.call(node[2])] ]
        base = node(base, node.markers.dup)
      end

      def on_else_clause(node)
        [:else_clause, mainflow.call(node.last)]
      end

    end # class ElsifFlattener
  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/processors/elsif_flattener.rb
gisele-0.3.0 lib/gisele/language/elsif_flattener.rb