class AdLint::Exam::CBuiltin::W0610
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 14300 def initialize(phase_ctxt) super interp = phase_ctxt[:cc1_interpreter] interp.on_relational_expr_evaled += T(:check) interp.on_equality_expr_evaled += T(:check) interp.on_logical_and_expr_evaled += T(:check) interp.on_logical_or_expr_evaled += T(:check) interp.on_for_stmt_started += T(:enter_for_statement) interp.on_c99_for_stmt_started += T(:enter_for_statement) interp.on_for_stmt_ended += T(:leave_for_statement) interp.on_c99_for_stmt_ended += T(:leave_for_statement) interp.on_for_ctrlexpr_evaled += T(:memorize_for_ctrlexpr) interp.on_c99_for_ctrlexpr_evaled += T(:memorize_for_ctrlexpr) @for_ctrlexpr_stack = [] end
Private Instance Methods
check(expr, *, rslt_var)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 14317 def check(expr, *, rslt_var) if rslt_var.value.test_must_be_false.true? && !should_not_check?(expr) W(expr.location) end end
enter_for_statement(*)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 14323 def enter_for_statement(*) @for_ctrlexpr_stack.push(nil) end
leave_for_statement(*)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 14327 def leave_for_statement(*) @for_ctrlexpr_stack.pop end
memorize_for_ctrlexpr(for_stmt, *)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 14331 def memorize_for_ctrlexpr(for_stmt, *) if explicit_ctrlexpr = for_stmt.condition_statement.expression @for_ctrlexpr_stack[-1] = explicit_ctrlexpr end end
should_not_check?(expr)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 14337 def should_not_check?(expr) if ctrlexpr = @for_ctrlexpr_stack.last collect_relational_expressions(ctrlexpr).include?(expr) || collect_equality_expressions(ctrlexpr).include?(expr) || collect_logical_and_expressions(ctrlexpr).include?(expr) || collect_logical_or_expressions(ctrlexpr).include?(expr) else false end end