class AdLint::Exam::CBuiltin::W0501::AmbiguousExpressionDetector

Public Class Methods

new(phase_ctxt, expr) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 11722
def initialize(phase_ctxt, expr)
  @phase_ctxt     = phase_ctxt
  @target_expr    = expr
  @group_depth    = 0
  @ungrouped_expr = 0
end

Public Instance Methods

execute() click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 11729
def execute
  @target_expr.accept(self)
end
visit_additive_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 11744
def visit_additive_expression(node)
  check_binary_expression
  super
end
visit_and_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 11764
def visit_and_expression(node)
  check_binary_expression
  super
end
visit_compound_assignment_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 11794
def visit_compound_assignment_expression(node)
  check_binary_expression
  super
end
visit_equality_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 11759
def visit_equality_expression(node)
  check_binary_expression
  super
end
visit_exclusive_or_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 11769
def visit_exclusive_or_expression(node)
  check_binary_expression
  super
end
visit_grouped_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 11733
def visit_grouped_expression(node)
  @group_depth += 1
  super
  @group_depth -= 1
end
visit_inclusive_or_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 11774
def visit_inclusive_or_expression(node)
  check_binary_expression
  super
end
visit_logical_and_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 11779
def visit_logical_and_expression(node)
  check_binary_expression
  super
end
visit_logical_or_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 11784
def visit_logical_or_expression(node)
  check_binary_expression
  super
end
visit_multiplicative_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 11739
def visit_multiplicative_expression(node)
  check_binary_expression
  super
end
visit_relational_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 11754
def visit_relational_expression(node)
  check_binary_expression
  super
end
visit_shift_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 11749
def visit_shift_expression(node)
  check_binary_expression
  super
end
visit_simple_assignment_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 11789
def visit_simple_assignment_expression(node)
  check_binary_expression
  super
end

Private Instance Methods

check_binary_expression() click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 11800
def check_binary_expression
  @ungrouped_expr += 1 if @group_depth == 0
  W(@target_expr.location) if include_ambiguous_expr?
end
include_ambiguous_expr?() click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 11805
def include_ambiguous_expr?
  @ungrouped_expr > 0
end
suppressors() click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 11817
def suppressors
  @phase_ctxt[:suppressors]
end