class AdLint::Cc1::KandRFunctionDefinition

Public Class Methods

new(dcl_specs, dcr, dcls, compound_stmt, sym_tbl) click to toggle source
Calls superclass method AdLint::Cc1::FunctionDefinition::new
# File lib/adlint/cc1/syntax.rb, line 4088
def initialize(dcl_specs, dcr, dcls, compound_stmt, sym_tbl)
  param_defs = create_parameters(dcr.identifier_list, dcls, sym_tbl)
  super(dcl_specs, dcr, param_defs, compound_stmt, sym_tbl)
end

Public Instance Methods

identifier_list() click to toggle source
# File lib/adlint/cc1/syntax.rb, line 4093
def identifier_list
  declarator.identifier_list
end

Private Instance Methods

create_parameters(param_names, dcls, sym_tbl) click to toggle source
# File lib/adlint/cc1/syntax.rb, line 4098
def create_parameters(param_names, dcls, sym_tbl)
  return [] unless param_names

  param_names.each_with_object([]) do |name, param_defs|
    var_def = find_variable_definition(dcls, name, sym_tbl)
    param_defs.push(variable_definition_to_parameter_definition(var_def))
  end
end
find_variable_definition(dcls, name, sym_tbl) click to toggle source
# File lib/adlint/cc1/syntax.rb, line 4107
def find_variable_definition(dcls, name, sym_tbl)
  dcls.each do |dcl|
    dcl.items.select { |item|
      item.kind_of?(VariableDefinition)
    }.each do |var_def|
      if var_def.identifier.value == name.value
        return var_def
      end
    end
  end

  dcls.push(dcl = implicit_parameter_definition(name, sym_tbl))
  dcl.items.first
end
implicit_parameter_definition(id, sym_tbl) click to toggle source
# File lib/adlint/cc1/syntax.rb, line 4140
def implicit_parameter_definition(id, sym_tbl)
  init_dcr = InitDeclarator.new(IdentifierDeclarator.new(id), nil, nil)
  Declaration.new(nil, [init_dcr], sym_tbl)
end
variable_definition_to_parameter_definition(var_def) click to toggle source
# File lib/adlint/cc1/syntax.rb, line 4122
def variable_definition_to_parameter_definition(var_def)
  dcl_specs = var_def.declaration_specifiers
  dcr = var_def.init_declarator.declarator
  param_def = ParameterDefinition.new(dcl_specs, dcr)

  unless dcl_specs
    param_def.head_token = dcr.head_token
    param_def.tail_token = dcr.tail_token
  end

  unless dcr
    param_def.head_token = dcl_specs.head_token
    param_def.tail_token = dcl_specs.tail_token
  end

  param_def
end