class AdLint::Exam::CBuiltin::W1073
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 21705 def initialize(phase_ctxt) super interp = phase_ctxt[:cc1_interpreter] interp.on_function_started += T(:enter_function) interp.on_function_ended += T(:leave_function) interp.on_function_call_expr_evaled += T(:add_return_value) interp.on_variable_value_referred += T(:refer_return_value) @cur_fun = nil @ret_vals = nil end
Private Instance Methods
add_return_value(expr, fun, *, rslt_var)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 21735 def add_return_value(expr, fun, *, rslt_var) if @cur_fun unless fun.type.return_type.void? @ret_vals[rslt_var] = [false, expr, fun] end end end
enter_function(fun_def, *)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 21717 def enter_function(fun_def, *) @cur_fun = fun_def @ret_vals = {} end
leave_function(*)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 21722 def leave_function(*) if @cur_fun @ret_vals.each_value do |rec| unless rec[0] fun_name = rec[2].named? ? rec[2].name : "(anon)" W(rec[1].location, fun_name) end end end @cur_fun = nil @ret_vals = nil end
refer_return_value(expr, var)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 21743 def refer_return_value(expr, var) if @cur_fun if rec = @ret_vals[var] rec[0] = true end end end