class AdLint::Exam::CBuiltin::W1037
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 274 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 295 def check_function(fun) similar_dcls_or_funs = @fun_map.lookup_function_declarations(fun.name).select { |dcl| dcl.explicit? && dcl.extern? && dcl.signature != fun.signature } + @fun_map.lookup_functions(fun.name).select { |mapped_fun| mapped_fun.extern? && mapped_fun.signature != fun.signature } unless similar_dcls_or_funs.empty? W(fun.location, fun.signature, *similar_dcls_or_funs.map { |pair| C(:C0001, pair.location, pair.signature) }) end end
check_function_declaration(fun)
click to toggle source
# File lib/adlint/exam/c_builtin/ld_check.rb, line 287 def check_function_declaration(fun) check_function(fun) if fun.extern? && fun.explicit? end
check_function_definition(fun)
click to toggle source
# File lib/adlint/exam/c_builtin/ld_check.rb, line 291 def check_function_definition(fun) check_function(fun) if fun.extern? end
check_variable(var)
click to toggle source
# File lib/adlint/exam/c_builtin/ld_check.rb, line 311 def check_variable(var) if var.extern? dcls_or_vars = @var_map.lookup_variable_declarations(var.name) + @var_map.lookup_variables(var.name) similar_dcls_or_vars = dcls_or_vars.select { |dcl_or_var| dcl_or_var.extern? && dcl_or_var.type != var.type } unless similar_dcls_or_vars.empty? W(var.location, var.name, *similar_dcls_or_vars.map { |pair| C(:C0001, pair.location, pair.name) }) end end end