Module: FastRuby::LogicalOperatorTranslator

Defined in:
lib/fastruby/translator/modules/logical.rb

Instance Method Summary collapse

Instance Method Details

#to_c_and(tree, return_var = nil) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/fastruby/translator/modules/logical.rb', line 25

def to_c_and(tree, return_var = nil)
  if return_var
    "
      {
        VALUE op1 = Qnil;
        VALUE op2 = Qnil;
        #{to_c tree[1], "op1"};
        #{to_c tree[2], "op2"};
        #{return_var} = (RTEST(op1) && RTEST(op2)) ? Qtrue : Qfalse;
      }
    "
  else
    "(RTEST(#{to_c tree[1]}) && RTEST(#{to_c tree[2]})) ? Qtrue : Qfalse"
  end
  
end

#to_c_not(tree, return_var = nil) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/fastruby/translator/modules/logical.rb', line 58

def to_c_not(tree, return_var = nil)
  if return_var
    "
      {
        VALUE op1 = Qnil;
        #{to_c tree[1], "op1"};
        #{return_var} = (RTEST(op1)) ? Qfalse: Qtrue;
      }
    "
  else
    "RTEST(#{to_c tree[1]}) ? Qfalse : Qtrue"
  end
end

#to_c_or(tree, return_var = nil) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/fastruby/translator/modules/logical.rb', line 42

def to_c_or(tree, return_var = nil)
  if return_var
    "
      {
        VALUE op1 = Qnil;
        VALUE op2 = Qnil;
        #{to_c tree[1], "op1"};
        #{to_c tree[2], "op2"};
        #{return_var} = (RTEST(op1) || RTEST(op2)) ? Qtrue : Qfalse;
      }
    "
  else
  "(RTEST(#{to_c tree[1]}) || RTEST(#{to_c tree[2]})) ? Qtrue : Qfalse"
  end
end