class AdLint::Exam::CBuiltin::W0489::AmbiguousExpressionDetector
Public Class Methods
new(phase_ctxt, expr)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 9948 def initialize(phase_ctxt, expr) @phase_ctxt = phase_ctxt @target_expr = expr @encl_expr_stack = [expr] @unary_exprs = Hash.new(0) end
Public Instance Methods
execute()
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 9955 def execute @target_expr.accept(self) end
visit_address_expression(node)
click to toggle source
Calls superclass method
AdLint::Cc1::SyntaxTreeVisitor#visit_address_expression
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 9985 def visit_address_expression(node) super @unary_exprs[current_encl_expr] += 1 end
visit_alignof_expression(node)
click to toggle source
Calls superclass method
AdLint::Cc1::SyntaxTreeVisitor#visit_alignof_expression
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 10005 def visit_alignof_expression(node) super @unary_exprs[current_encl_expr] += 1 end
visit_cast_expression(node)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 10010 def visit_cast_expression(node) node.operand.accept(self) @unary_exprs[current_encl_expr] += 1 end
visit_conditional_expression(node)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 10029 def visit_conditional_expression(node) cond_expr = node.condition then_expr = node.then_expression else_expr = node.else_expression AmbiguousExpressionDetector.new(@phase_ctxt, cond_expr).execute AmbiguousExpressionDetector.new(@phase_ctxt, then_expr).execute AmbiguousExpressionDetector.new(@phase_ctxt, else_expr).execute end
visit_grouped_expression(node)
click to toggle source
Calls superclass method
AdLint::Cc1::SyntaxTreeVisitor#visit_grouped_expression
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 9959 def visit_grouped_expression(node) @encl_expr_stack.push(node) super @encl_expr_stack.pop end
visit_indirection_expression(node)
click to toggle source
Calls superclass method
AdLint::Cc1::SyntaxTreeVisitor#visit_indirection_expression
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 9990 def visit_indirection_expression(node) super @unary_exprs[current_encl_expr] += 1 end
visit_logical_and_expression(node)
click to toggle source
Calls superclass method
AdLint::Cc1::SyntaxTreeVisitor#visit_logical_and_expression
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 10015 def visit_logical_and_expression(node) super if include_ambiguous_expr? W(current_encl_expr.head_location) end end
visit_logical_or_expression(node)
click to toggle source
Calls superclass method
AdLint::Cc1::SyntaxTreeVisitor#visit_logical_or_expression
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 10022 def visit_logical_or_expression(node) super if include_ambiguous_expr? W(current_encl_expr.head_location) end end
visit_postfix_decrement_expression(node)
click to toggle source
Calls superclass method
AdLint::Cc1::SyntaxTreeVisitor#visit_postfix_decrement_expression
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 9970 def visit_postfix_decrement_expression(node) super @unary_exprs[current_encl_expr] += 1 end
visit_postfix_increment_expression(node)
click to toggle source
Calls superclass method
AdLint::Cc1::SyntaxTreeVisitor#visit_postfix_increment_expression
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 9965 def visit_postfix_increment_expression(node) super @unary_exprs[current_encl_expr] += 1 end
visit_prefix_decrement_expression(node)
click to toggle source
Calls superclass method
AdLint::Cc1::SyntaxTreeVisitor#visit_prefix_decrement_expression
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 9980 def visit_prefix_decrement_expression(node) super @unary_exprs[current_encl_expr] += 1 end
visit_prefix_increment_expression(node)
click to toggle source
Calls superclass method
AdLint::Cc1::SyntaxTreeVisitor#visit_prefix_increment_expression
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 9975 def visit_prefix_increment_expression(node) super @unary_exprs[current_encl_expr] += 1 end
visit_sizeof_expression(node)
click to toggle source
Calls superclass method
AdLint::Cc1::SyntaxTreeVisitor#visit_sizeof_expression
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 10000 def visit_sizeof_expression(node) super @unary_exprs[current_encl_expr] += 1 end
visit_unary_arithmetic_expression(node)
click to toggle source
Calls superclass method
AdLint::Cc1::SyntaxTreeVisitor#visit_unary_arithmetic_expression
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 9995 def visit_unary_arithmetic_expression(node) super @unary_exprs[current_encl_expr] += 1 end
Private Instance Methods
current_encl_expr()
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 10043 def current_encl_expr @encl_expr_stack.last end
include_ambiguous_expr?()
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 10039 def include_ambiguous_expr? @unary_exprs[current_encl_expr] > 0 end
suppressors()
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 10055 def suppressors @phase_ctxt[:suppressors] end