class AdLint::Exam::CBuiltin::W0543

Public Class Methods

new(phase_ctxt) click to toggle source
Calls superclass method AdLint::Examination::new
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 12509
def initialize(phase_ctxt)
  super
  trav = phase_ctxt[:cc1_ast_traversal]
  trav.enter_ansi_function_definition += T(:check)
  @interp = phase_ctxt[:cc1_interpreter]
end

Private Instance Methods

check(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 12517
def check(node)
  fun = function_named(node.identifier.value)
  return unless fun

  params = fun.declarations_and_definitions.map { |dcl_or_def|
    case dcl_or_def
    when Cc1::FunctionDeclaration
      extract_param_names(dcl_or_def.init_declarator)
    when Cc1::FunctionDefinition
      extract_param_names(dcl_or_def.declarator)
    end
  }

  if params.size > 1
    params.first.zip(*params.drop(1)) do |names|
      unless names.tap { |ary| ary.delete("") }.uniq.size == 1
        W(node.location)
        break
      end
    end
  end
end
extract_param_names(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 12540
def extract_param_names(node)
  collect_identifier_declarators(node).map { |dcr| dcr.identifier.value }
end
interpreter() click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 12544
def interpreter
  @interp
end