class AdLint::Exam::CBuiltin::W0770
Public Class Methods
new(phase_ctxt)
click to toggle source
Calls superclass method
AdLint::Examination::new
# File lib/adlint/exam/c_builtin/ld_check.rb, line 178 def initialize(phase_ctxt) super fun_traversal = phase_ctxt[:ld_function_traversal] fun_traversal.on_declaration += T(:check_function_declaration) fun_traversal.on_definition += T(:check_function_definition) @fun_map = phase_ctxt[:ld_function_map] var_traversal = phase_ctxt[:ld_variable_traversal] var_traversal.on_declaration += T(:check_variable) var_traversal.on_definition += T(:check_variable) @var_map = phase_ctxt[:ld_variable_map] end
Private Instance Methods
check_function(fun)
click to toggle source
# File lib/adlint/exam/c_builtin/ld_check.rb, line 203 def check_function(fun) similar_dcls = @fun_map.lookup_function_declarations(fun.name).select { |fun_dcl| fun_dcl.explicit? } if similar_dcls.size > 1 W(fun.location, fun.signature, *similar_dcls.map { |pair| C(:C0001, pair.location, pair.signature) unless pair == fun }.compact) end end
check_function_declaration(fun_dcl)
click to toggle source
# File lib/adlint/exam/c_builtin/ld_check.rb, line 191 def check_function_declaration(fun_dcl) if fun_dcl.extern? && fun_dcl.explicit? check_function(fun_dcl) end end
check_function_definition(fun_def)
click to toggle source
# File lib/adlint/exam/c_builtin/ld_check.rb, line 197 def check_function_definition(fun_def) if fun_def.extern? check_function(fun_def) end end
check_variable(var)
click to toggle source
# File lib/adlint/exam/c_builtin/ld_check.rb, line 216 def check_variable(var) if var.extern? similar_dcls = @var_map.lookup_variable_declarations(var.name) if similar_dcls.size > 1 W(var.location, var.name, *similar_dcls.map { |pair| C(:C0001, pair.location, pair.name) unless pair == var }.compact) end end end