class AdLint::Exam::CBuiltin::W0625

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 14665
def initialize(phase_ctxt)
  super
  @fpath = phase_ctxt[:sources].first.fpath
  interp = phase_ctxt[:cc1_interpreter]
  interp.on_typedef_declared           += T(:declare_typedef)
  interp.on_variable_defined           += T(:check)
  interp.on_variable_declared          += T(:check)
  interp.on_explicit_function_declared += T(:check)
  interp.on_explicit_function_defined  += T(:check)
  @typedef_types = {}
end

Private Instance Methods

check(dcl_or_def, obj, *) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 14688
def check(dcl_or_def, obj, *)
  return unless obj.declared_as_extern?

  if dcl_specs  = dcl_or_def.declaration_specifiers
    find_bad_typedef_decls(dcl_specs).each do |dcl|
      W(dcl.location, dcl.identifier.value)
      break
    end
  end
end
declare_typedef(typedef_dcl) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 14678
def declare_typedef(typedef_dcl)
  typedef_name = typedef_dcl.identifier.value

  if @fpath == typedef_dcl.location.fpath
    @typedef_types[typedef_name] = typedef_dcl
  else
    @typedef_types.delete(typedef_name)
  end
end
find_bad_typedef_decls(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 14699
def find_bad_typedef_decls(node)
  collect_typedef_type_specifiers(node).map { |type_spec|
    @typedef_types[type_spec.identifier.value]
  }.compact
end