class AdLint::Exam::CBuiltin::W0627

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 14737
def initialize(phase_ctxt)
  super
  trav = phase_ctxt[:cc1_ast_traversal]
  trav.enter_compound_statement   += T(:enter_block)
  trav.leave_compound_statement   += T(:leave_block)
  trav.enter_expression_statement += T(:enter_expression_statement)
  trav.enter_if_statement         += T(:update_last_statement)
  trav.enter_if_else_statement    += T(:update_last_statement)
  trav.enter_switch_statement     += T(:update_last_statement)
  trav.enter_while_statement      += T(:update_last_statement)
  trav.enter_do_statement         += T(:update_last_statement)
  trav.enter_for_statement        += T(:enter_for_statement)
  trav.enter_c99_for_statement    += T(:enter_for_statement)
  trav.enter_goto_statement       += T(:update_last_statement)
  trav.enter_continue_statement   += T(:update_last_statement)
  trav.enter_break_statement      += T(:update_last_statement)
  trav.enter_return_statement     += T(:update_last_statement)
  @lst_stmts = []
  @expected_stmts = Set.new
end

Private Instance Methods

enter_block(*) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 14759
def enter_block(*)
  @lst_stmts.push(nil)
end
enter_expression_statement(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 14767
def enter_expression_statement(node)
  return if @expected_stmts.include?(node)

  unless node.expression
    if lst_stmt = @lst_stmts.last
      tail = lst_stmt.tail_location
      head = node.head_location
      if tail.fpath == head.fpath && tail.line_no == head.line_no
        W(node.location)
      end
    end
  end
  update_last_statement(node)
end
enter_for_statement(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 14782
def enter_for_statement(node)
  @expected_stmts.add(node.condition_statement)
  update_last_statement(node)
end
leave_block(*) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 14763
def leave_block(*)
  @lst_stmts.pop
end
update_last_statement(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 14787
def update_last_statement(node)
  @lst_stmts[-1] = node
end