class AdLint::Exam::CBuiltin::W0777
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 19080 def initialize(phase_ctxt) super @interp = phase_ctxt[:cc1_interpreter] @interp.on_implicit_conv_performed += T(:check) @interp.on_function_started += T(:clear_rvalues) @interp.on_additive_expr_evaled += T(:handle_additive) @interp.on_multiplicative_expr_evaled += T(:handle_multiplicative) @rvalues = nil end
Private Instance Methods
check(*, orig_var, rslt_var)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 19091 def check(*, orig_var, rslt_var) return unless @rvalues && orig_var.type.floating? case expr = @rvalues[orig_var] when Cc1::AdditiveExpression, Cc1::MultiplicativeExpression if orig_var.type.same_as?(from_type) && rslt_var.type.same_as?(to_type) W(expr.location) end end end
clear_rvalues(*)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 19101 def clear_rvalues(*) @rvalues = {} end
from_type()
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 19119 def from_type float_t end
handle_additive(expr, *, rslt_var)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 19105 def handle_additive(expr, *, rslt_var) memorize_rvalue_derivation(rslt_var, expr) end
handle_multiplicative(expr, *, rslt_var)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 19109 def handle_multiplicative(expr, *, rslt_var) unless expr.operator.type == "%" memorize_rvalue_derivation(rslt_var, expr) end end
interpreter()
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 19127 def interpreter @interp end
memorize_rvalue_derivation(rvalue_holder, expr)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 19115 def memorize_rvalue_derivation(rvalue_holder, expr) @rvalues[rvalue_holder] = expr if @rvalues end
to_type()
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 19123 def to_type double_t end