class AdLint::Exam::CBuiltin::W0446::Visitor

Public Class Methods

new(phase_ctxt) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 9362
def initialize(phase_ctxt)
  @phase_ctxt = phase_ctxt
end

Public Instance Methods

visit_additive_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 9406
def visit_additive_expression(node)
  if node.analysis_target?(traits)
    super
    warn(node.lhs_operand)
    warn(node.rhs_operand)
  end
end
visit_compound_assignment_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 9374
def visit_compound_assignment_expression(node)
  if node.analysis_target?(traits)
    super
    warn(node.lhs_operand)
    warn(node.rhs_operand)
  end
end
visit_function_call_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 9382
def visit_function_call_expression(node)
  if node.analysis_target?(traits)
    super
    node.argument_expressions.each { |expr| warn(expr) }
  end
end
visit_multiplicative_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 9398
def visit_multiplicative_expression(node)
  if node.analysis_target?(traits)
    super
    warn(node.lhs_operand)
    warn(node.rhs_operand)
  end
end
visit_return_statement(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 9414
def visit_return_statement(node)
  if node.analysis_target?(traits)
    super
    warn(node.expression) if node.expression
  end
end
visit_simple_assignment_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 9366
def visit_simple_assignment_expression(node)
  if node.analysis_target?(traits)
    super
    warn(node.lhs_operand)
    warn(node.rhs_operand)
  end
end
visit_unary_arithmetic_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 9389
def visit_unary_arithmetic_expression(node)
  if node.analysis_target?(traits)
    super
    if node.operator.type == "+" || node.operator.type == "-"
      warn(node.operand)
    end
  end
end

Private Instance Methods

suppressors() click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 9444
def suppressors
  @phase_ctxt[:suppressors]
end
warn(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 9422
def warn(node)
  node = node.expression while node.kind_of?(Cc1::GroupedExpression)
  if node && node.analysis_target?(traits)
    case node
    when Cc1::SimpleAssignmentExpression,
         Cc1::CompoundAssignmentExpression
      W(node.location)
    end
  end
end