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