Module: Trxl::CaseExpression1

Defined in:
lib/trxl/trxl_grammar.rb

Instance Method Summary collapse

Instance Method Details

#eval(env = Environment.new) ⇒ Object



1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
# File 'lib/trxl/trxl_grammar.rb', line 1102

def eval(env = Environment.new)
  case_val = case_exp.eval(env)
  else_val = else_exp.eval(env)
  Kernel.eval <<-CASE_STMT
    lambda do
      case #{case_val.is_a?(String) ? "'#{case_val}'" : case_val}
        #{ruby_when_expressions(env)}
        else #{else_val.is_a?(String) ? "'#{else_val}'" : else_val}
      end
    end [] # call this lambda immediately   
  CASE_STMT
end

#ruby_when_expressions(env = Environment.new) ⇒ Object



1115
1116
1117
1118
1119
1120
# File 'lib/trxl/trxl_grammar.rb', line 1115

def ruby_when_expressions(env = Environment.new)
  when_expression_list.eval(env).inject('') do |ruby, e|
    # possible string values have been wrapped in '' already
    ruby << "when #{e[:condition]} then #{e[:expression]} "
  end
end