class AdLint::Exam::CBuiltin::W0532

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 12212
def initialize(phase_ctxt)
  super
  trav = phase_ctxt[:cc1_ast_traversal]
  trav.enter_switch_statement += T(:check_switch_statement)
end

Private Instance Methods

check_switch_statement(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 12219
def check_switch_statement(node)
  return unless node.statement.kind_of?(Cc1::CompoundStatement)

  node.statement.block_items.each_with_index do |item, idx|
    effective_breaks = EffectiveBreakCollector.new.execute(item)
    unless effective_breaks.empty?
      if nxt_item = node.statement.block_items[idx + 1]
        while nxt_item.kind_of?(Cc1::GenericLabeledStatement)
          nxt_item = nxt_item.statement
        end

        case nxt_item
        when Cc1::CaseLabeledStatement, Cc1::DefaultLabeledStatement
          ;
        else
          effective_breaks.each do |effective_break|
            W(effective_break.location)
          end
        end
      end
    end
  end
end