Class: SFRP::Flat::MatchExp

Inherits:
Struct
  • Object
show all
Defined in:
lib/sfrp/flat/expression.rb

Defined Under Namespace

Classes: Case, Pattern

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#casesObject

Returns the value of attribute cases

Returns:

  • (Object)

    the current value of cases



55
56
57
# File 'lib/sfrp/flat/expression.rb', line 55

def cases
  @cases
end

#left_expObject

Returns the value of attribute left_exp

Returns:

  • (Object)

    the current value of left_exp



55
56
57
# File 'lib/sfrp/flat/expression.rb', line 55

def left_exp
  @left_exp
end

#spObject

Returns the value of attribute sp

Returns:

  • (Object)

    the current value of sp



55
56
57
# File 'lib/sfrp/flat/expression.rb', line 55

def sp
  @sp
end

Instance Method Details

#alpha_convert(table, serial) ⇒ Object



90
91
92
93
94
95
96
97
98
99
100
# File 'lib/sfrp/flat/expression.rb', line 90

def alpha_convert(table, serial)
  new_left_exp = left_exp.alpha_convert(table, serial)
  new_cases = cases.map do |c|
    c.pattern.duplicated_var_check
    new_table = table.clone
    new_pattern = c.pattern.alpha_convert(new_table, serial)
    new_exp = c.exp.alpha_convert(new_table, serial)
    Case.new(new_pattern, new_exp)
  end
  MatchExp.new(new_left_exp, new_cases)
end

#lift_node_ref(collected_node_refs) ⇒ Object



82
83
84
85
86
87
88
# File 'lib/sfrp/flat/expression.rb', line 82

def lift_node_ref(collected_node_refs)
  new_left_exp = left_exp.lift_node_ref(collected_node_refs)
  new_cases = cases.map do |c|
    Case.new(c.pattern, c.exp.lift_node_ref(collected_node_refs))
  end
  MatchExp.new(new_left_exp, new_cases, sp)
end

#to_polyObject



102
103
104
105
106
107
# File 'lib/sfrp/flat/expression.rb', line 102

def to_poly
  poly_cases = cases.map do |c|
    Poly::MatchExp::Case.new(c.pattern.to_poly, c.exp.to_poly)
  end
  Poly::MatchExp.new(left_exp.to_poly, poly_cases)
end