Method: BOAST::Expression#method_missing

Defined in:
lib/BOAST/Language/Expression.rb

#method_missing(m, *a, &b) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/BOAST/Language/Expression.rb', line 22

def method_missing(m, *a, &b)
  var = to_var
  if var.type.kind_of?(CStruct) and var.type.members[m.to_s] then
    return struct_reference(type.members[m.to_s])
  elsif var.vector? and m.to_s[0] == 's' and lang != CUDA then
    required_set = m.to_s[1..-1].chars.to_a
    existing_set = [*('0'..'9'),*('a'..'z')].first(var.type.vector_length)
    if required_set.length == required_set.uniq.length and (required_set - existing_set).empty? then
      return var.copy(var.name+"."+m.to_s, :vector_length => m.to_s[1..-1].length) if lang == CL
      return var.copy("(#{var.name})(#{existing_set.index(required_set[0])+1})", :vector_length => 1) if lang == FORTRAN
      return var.copy("(#{var.name})[#{existing_set.index(required_set[0])}]", :vector_length => 1) if lang == C
      return super
    else
      return super
    end
  else
    return super
  end
end