class AdLint::Exam::CBuiltin::W0024

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 470
def initialize(phase_ctxt)
  super
  @interp = phase_ctxt[:cc1_interpreter]
  @interp.on_additive_expr_evaled          += T(:check_binary)
  @interp.on_prefix_increment_expr_evaled  += T(:check_unary_prefix)
  @interp.on_postfix_increment_expr_evaled += T(:check_unary_postfix)
  @interp.on_prefix_decrement_expr_evaled  += T(:check_unary_prefix)
  @interp.on_postfix_decrement_expr_evaled += T(:check_unary_postfix)
end

Private Instance Methods

check_binary(binary_expr, lhs_var, rhs_var, *) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 481
def check_binary(binary_expr, lhs_var, rhs_var, *)
  case
  when lhs_var.type.pointer? && rhs_var.type.scalar?
    rhs_val = rhs_var.value
    if rhs_var.value.scalar? &&
        rhs_val.test_must_be_equal_to(scalar_value_of(1)).true?
      W(binary_expr.location)
    end
  when rhs_var.type.pointer? && lhs_var.type.scalar?
    lhs_val = lhs_var.value
    if lhs_var.value.scalar? &&
        lhs_val.test_must_be_equal_to(scalar_value_of(1)).true?
      W(binary_expr.location)
    end
  end
end
check_unary_postfix(postfix_expr, ope_var, *) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 504
def check_unary_postfix(postfix_expr, ope_var, *)
  if ope_var.type.pointer?
    W(postfix_expr.location)
  end
end
check_unary_prefix(unary_expr, ope_var, *) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 498
def check_unary_prefix(unary_expr, ope_var, *)
  if ope_var.type.pointer?
    W(unary_expr.location)
  end
end
interpreter() click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 510
def interpreter
  @interp
end