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