Class: Idl::FunctionCallExpressionAst

Inherits:
AstNode
  • Object
show all
Defined in:
lib/udb/idl/condition_to_udb.rb

Instance Method Summary collapse

Instance Method Details

#to_udb_h(symtab) ⇒ UdbHashType

Parameters:

  • symtab (Idl::SymbolTable)

Returns:



163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
# File 'lib/udb/idl/condition_to_udb.rb', line 163

def to_udb_h(symtab)
  case name
  when "implemented?"
    type_error "Bad argument to implemented?" unless args.fetch(0).text_value =~ /^ExtensionName::[A-Z][a-z0-9]*$/
    {
      "extension" => {
        "name" => args.fetch(0).text_value.gsub("ExtensionName::", "")
      }
    }
  when "implemented_version?"
    type_error "Bad first argument to implemented_version?" unless args.fetch(0).text_value =~ /^ExtensionName::[A-Z][a-z0-9]*$/
    type_error "Bad second argument to implemented_version?" unless args.fetch(1).text_value =~ /((?:>=)|(?:>)|(?:~>)|(?:<)|(?:<=)|(?:!=)|(?:=))\s*([0-9]+)(?:\.([0-9]+)(?:\.([0-9]+)(?:-(pre))?)?)?/
    {
      "extension" => {
        "name" => args.fetch(0).text_value.gsub("ExtensionName::", ""),
        "version" => args.fetch(1).text_value.gsub('"', "")
      }
    }
  when "xlen"
    {
      "xlen" => args.fetch(0).value(symtab)
    }
  else
    type_error "unsupported function in an IDL condition: #{name}"
  end
end