class AdLint::Exam::CBuiltin::FN_UNUV
Public Class Methods
new(phase_ctxt)
click to toggle source
Calls superclass method
AdLint::Examination::new
# File lib/adlint/exam/c_builtin/cc1_metric.rb, line 284 def initialize(phase_ctxt) super @fpath = phase_ctxt[:sources].first.fpath interp = phase_ctxt[:cc1_interpreter] interp.on_function_started += T(:enter_function) interp.on_function_ended += T(:leave_function) interp.on_variable_defined += T(:define_variable) interp.on_parameter_defined += T(:define_variable) interp.on_variable_referred += T(:refer_variable) interp.on_variable_value_referred += T(:read_variable) interp.on_variable_value_updated += T(:write_variable) @cur_fun = nil @vars = nil end
Private Instance Methods
define_variable(*, var)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_metric.rb, line 322 def define_variable(*, var) if @cur_fun @vars[var.name] = 0 end end
do_execute(*)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_metric.rb, line 301 def do_execute(*) end
do_prepare(*)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_metric.rb, line 300 def do_prepare(*) end
enter_function(fun_def, *)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_metric.rb, line 303 def enter_function(fun_def, *) @cur_fun = fun_def @vars = {} end
leave_function(*)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_metric.rb, line 308 def leave_function(*) if @cur_fun useless_cnt = @vars.each_value.reduce(0) { |cnt, read_cnt| read_cnt == 0 ? cnt + 1 : cnt } FN_UNUV(FunctionId.new(@cur_fun.identifier.value, @cur_fun.signature.to_s), @cur_fun.location, useless_cnt) @cur_fun = nil @vars = nil end end
read_variable(*, var)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_metric.rb, line 334 def read_variable(*, var) if @cur_fun @vars[var.name] += 1 if var.named? && @vars[var.name] end end
refer_variable(*, var)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_metric.rb, line 328 def refer_variable(*, var) if @cur_fun @vars[var.name] += 1 if var.named? && @vars[var.name] end end
write_variable(*, var)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_metric.rb, line 340 def write_variable(*, var) if @cur_fun @vars[var.name] = 0 if var.named? && @vars[var.name] end end