class AdLint::Exam::CBuiltin::W0007
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 139 def initialize(phase_ctxt) super trav = phase_ctxt[:cc1_ast_traversal] trav.enter_switch_statement += T(:enter_switch_statement) end
Private Instance Methods
end_with_break_or_return_statement?(stmt)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 181 def end_with_break_or_return_statement?(stmt) case stmt when Cc1::CompoundStatement end_with_break_or_return_statement?(stmt.block_Items.last) when Cc1::BreakStatement true when Cc1::ReturnStatement true end end
enter_switch_statement(node)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 146 def enter_switch_statement(node) prv_item = nil node.statement.block_items.each do |item| if prv_item case item when Cc1::CaseLabeledStatement, Cc1::DefaultLabeledStatement case prv_item when Cc1::CompoundStatement unless end_with_break_or_return_statement?(item) W(item.location) warn_inner_case_labeled_statement(item) end when Cc1::BreakStatement, Cc1::ReturnStatement ; else W(item.location) warn_inner_case_labeled_statement(item) end end end item = item.statement while item.kind_of?(Cc1::LabeledStatement) prv_item = item end end
warn_inner_case_labeled_statement(node)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 172 def warn_inner_case_labeled_statement(node) child = node loop do child = child.statement break unless child.kind_of?(Cc1::CaseLabeledStatement) W(child.location) end end