class AdLint::Cc1::IterationStatement
Public Instance Methods
deduct_controlling_expression()
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 3643 def deduct_controlling_expression subclass_responsibility end
varying_expressions()
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 3651 def varying_expressions collect_varying_binary_expressions(self) + collect_varying_unary_expressions(self) end
varying_variable_names()
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 3647 def varying_variable_names collect_varying_variable_names(self).uniq end
Private Instance Methods
collect_loop_breaking_if_else_statements(node)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 3684 def collect_loop_breaking_if_else_statements(node) collect_if_else_statements(node).select do |stmt| contain_loop_breaking?(stmt.then_statement) || contain_loop_breaking?(stmt.else_statement) end end
collect_loop_breaking_if_statements(node)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 3678 def collect_loop_breaking_if_statements(node) collect_if_statements(node).select do |stmt| contain_loop_breaking?(stmt.statement) end end
collect_loop_breaking_selection_statements(node)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 3673 def collect_loop_breaking_selection_statements(node) collect_loop_breaking_if_statements(node) + collect_loop_breaking_if_else_statements(node) end
collect_varying_binary_expressions(node)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 3723 def collect_varying_binary_expressions(node) all_varying_binary_exprs = collect_simple_assignment_expressions(node) + collect_compound_assignment_expressions(node) all_varying_binary_exprs.select do |expr| expr.lhs_operand.kind_of?(ObjectSpecifier) end end
collect_varying_unary_expressions(node)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 3740 def collect_varying_unary_expressions(node) all_varying_unary_exprs = collect_prefix_increment_expressions(node) + collect_prefix_decrement_expressions(node) + collect_postfix_increment_expressions(node) + collect_postfix_decrement_expressions(node) all_varying_unary_exprs.select do |expr| expr.operand.kind_of?(ObjectSpecifier) end end
collect_varying_variable_names(node)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 3712 def collect_varying_variable_names(node) collect_varying_variable_names_in_binary_expression(node) + collect_varying_variable_names_in_unary_expression(node) end
collect_varying_variable_names_in_binary_expression(node)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 3717 def collect_varying_variable_names_in_binary_expression(node) collect_varying_binary_expressions(node).map do |expr| expr.lhs_operand.identifier.value end end
collect_varying_variable_names_in_unary_expression(node)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 3734 def collect_varying_variable_names_in_unary_expression(node) collect_varying_unary_expressions(node).map do |expr| expr.operand.identifier.value end end
contain_loop_breaking?(node)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 3691 def contain_loop_breaking?(node) items = node.kind_of?(CompoundStatement) ? node.block_items : [node] items.any? do |item| case item when GenericLabeledStatement item = item.statement redo when GotoStatement # FIXME: Must check whether the goto-statement goes outside of the # loop or not. true when BreakStatement true when ReturnStatement true else false end end end
deduct_controlling_expression_candidates(rough_cands)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 3657 def deduct_controlling_expression_candidates(rough_cands) case when rough_cands.empty? [[nil, nil]] when rough_cands.size == 1 rough_cands else varying_var_names = varying_variable_names rough_cands.select do |expr_pair| collect_object_specifiers(expr_pair.first).any? do |os| varying_var_names.include?(os.identifier.value) end end end end