class AdLint::Cc1::ExpressionConstancy
Public Class Methods
new(interp_bridge)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 5599 def initialize(interp_bridge) @interp_bridge = interp_bridge end
Public Instance Methods
check(expr)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 5603 def check(expr) catch(:constancy) { expr.accept(self); true } end
visit_address_expression(node)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 5614 def visit_address_expression(node) # NOTE: To treat address of variables as an address-constant. end
visit_comma_separated_expression(node)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 5618 def visit_comma_separated_expression(node) # NOTE: A constant-expression should not contain comma-operators. # # NOTE: The ISO C99 standard says; # # 6.6 Constant expressions # # Constraints # # 3 Constant expressions shall not contain assignment, increment, # decrement, function-call, or comma operators, except when they are # contained within a subexpression that is not evaluated. break_as_inconstant end
visit_object_specifier(node)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 5607 def visit_object_specifier(node) var_designators = @interp_bridge[:variable_designators][] if var_designators.include?(node.identifier.value) break_as_inconstant end end
Private Instance Methods
break_as_inconstant(*)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 5633 def break_as_inconstant(*) throw(:constancy, false) end