class AdLint::Exam::CBuiltin::W0605

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 14092
def initialize(phase_ctxt)
  super
  trav = phase_ctxt[:cc1_ast_traversal]
  trav.enter_break_statement   += T(:check)
  trav.enter_switch_statement  += T(:enter_breakable_statement)
  trav.leave_switch_statement  += T(:leave_breakable_statement)
  trav.enter_while_statement   += T(:enter_breakable_statement)
  trav.leave_while_statement   += T(:leave_breakable_statement)
  trav.enter_do_statement      += T(:enter_breakable_statement)
  trav.leave_do_statement      += T(:leave_breakable_statement)
  trav.enter_for_statement     += T(:enter_breakable_statement)
  trav.leave_for_statement     += T(:leave_breakable_statement)
  trav.enter_c99_for_statement += T(:enter_breakable_statement)
  trav.leave_c99_for_statement += T(:leave_breakable_statement)
  @breakable_stmts = []
end

Private Instance Methods

check(break_stmt) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 14110
def check(break_stmt)
  @breakable_stmts.last[1] += 1

  if @breakable_stmts.last[1] > 1 &&
      @breakable_stmts.last[0].kind_of?(Cc1::IterationStatement)
    W(break_stmt.location)
  end
end
enter_breakable_statement(stmt) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 14119
def enter_breakable_statement(stmt)
  @breakable_stmts.push([stmt, 0])
end
leave_breakable_statement(*) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 14123
def leave_breakable_statement(*)
  @breakable_stmts.pop
end