lib/gisele/language/processors/if_to_case.rb in gisele-0.4.0 vs lib/gisele/language/processors/if_to_case.rb in gisele-0.5.0

- old
+ new

@@ -1,63 +1,65 @@ module Gisele module Language - class IfToCase < Rewriter - alias :on_missing :copy_and_applyall + class IfToCase < Sexpr::Rewriter + grammar Language - def on_if_st(node) - condition, dost, *clauses = node.children + def on_if_st(sexpr) + condition, dost, *clauses = sexpr.sexpr_body # create case_st with same markers as the if_st - when_clause = [:when_clause, condition, mainflow.call(dost)] - when_clause = node(when_clause, node.markers.dup) + when_clause = [:when_clause, condition, apply(dost)] + when_clause = sexpr(when_clause, sexpr.tracking_markers) base = [:case_st, nil, when_clause] - base = node(base, node.markers.dup) + base = sexpr(base, sexpr.tracking_markers) # this is the condition for elsif clauses @condition = negate(condition.last) # make injection now clauses.inject base do |memo,clause| - memo << call(clause) + memo << apply(clause) end end - def on_elsif_clause(node) - condition, dost, = node.children + def on_elsif_clause(sexpr) + condition, dost, = sexpr.sexpr_body # install new conditions for me and next elsif clauses condition = condition.last previous = @condition @condition = [:bool_and, negate(condition), @condition] # convert elsif to when and keep the markers base = \ [:when_clause, [:bool_expr, [:bool_and, condition, previous]], - mainflow.call(dost) ] - node(base, node.markers.dup) + apply(dost) ] + sexpr(base, sexpr.tracking_markers) end - def on_else_clause(node) - dost, = node.children + def on_else_clause(sexpr) + dost, = sexpr.sexpr_body # convert else to when and keep the markers base = \ [:when_clause, [:bool_expr, @condition], - mainflow.call(dost)] - node(base, node.markers.dup) + apply(dost)] + sexpr(base, sexpr.tracking_markers) end + alias :on_missing :copy_and_apply + private def negate(cond) - if cond.rule_name == :bool_not + if cond.first == :bool_not cond.last else [:bool_not, cond] end end end # class IfToCase end # module Language -end # module Gisele +end # module Gisele \ No newline at end of file