class AdLint::Exam::CBuiltin::W0117
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 3059 def initialize(phase_ctxt) super interp = phase_ctxt[:cc1_interpreter] interp.on_explicit_function_declared += M(:declare_function) interp.on_variable_declared += M(:declare_variable) interp.on_explicit_function_defined += T(:check_function) interp.on_variable_defined += T(:check_variable) @target_fpath = phase_ctxt[:sources].first.fpath @external_syms = Set.new end
Private Instance Methods
check_function(fun_def, fun)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 3083 def check_function(fun_def, fun) if fun.named? && fun.declared_as_extern? return if fun.name == "main" unless @external_syms.include?(fun.name) if fun_def.location.fpath == @target_fpath W(fun_def.location, fun.name) end end end end
check_variable(var_def, var)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 3095 def check_variable(var_def, var) if var.named? && var.declared_as_extern? unless @external_syms.include?(var.name) if var_def.location.fpath == @target_fpath W(var_def.location, var.name) end end end end
declare_function(*, fun)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 3071 def declare_function(*, fun) if fun.named? && fun.declared_as_extern? @external_syms.add(fun.name) end end
declare_variable(*, var)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 3077 def declare_variable(*, var) if var.named? && var.declared_as_extern? @external_syms.add(var.name) end end