class FFIDB::Exporters::C

Code generator for the C programming language.

Constants

EXTERN_QUALIFIER
SYMBOL_INDENT

Public Instance Methods

_export_function(function, **kwargs) click to toggle source
# File lib/ffidb/exporters/c.rb, line 16
def _export_function(function, **kwargs)
  parameters = function.parameters.each_value.map do |p|
    p_type = case
      when p.type.function_pointer?
        p.type.to_s.sub('(*)', "(*#{p.name})")
      when self.options[:parameter_names] == false
        p.type.to_s.gsub(' *', '*')
      else "#{p.type.to_s.gsub(' *', '*')} #{p.name}"
    end
    p_type.gsub('const char *const[]', 'const char* const*') # FIXME
  end
  print ' '*self.symbol_indent if self.symbol_indent.nonzero?
  print self.extern_qualifier, ' ' if self.extern_qualifier
  if function.type.function_pointer?
    print function.type.to_s.sub('(*)', "(*#{function.name}(#{parameters.join(', ')}))")
  else
    print function.type, ' ', function.name, '('
    parameters.each_with_index do |p, i|
      print ', ' if i.nonzero?
      print p
    end
    print ')'
  end
  puts (self.options[:semicolon] == false ? '' : ';')
end
finish() click to toggle source
# File lib/ffidb/exporters/c.rb, line 12
def finish
  puts self.render_template('c.erb')
end

Protected Instance Methods

extern_qualifier() click to toggle source
# File lib/ffidb/exporters/c.rb, line 48
def extern_qualifier
  self.class.const_get(:EXTERN_QUALIFIER)
end
symbol_indent() click to toggle source
# File lib/ffidb/exporters/c.rb, line 44
def symbol_indent
  self.class.const_get(:SYMBOL_INDENT)
end