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