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_compound_assignment_expression(*)
Alias for: break_as_inconstant
visit_function_call_expression(*)
Alias for: break_as_inconstant
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
visit_postfix_decrement_expression(*)
Alias for: break_as_inconstant
visit_postfix_increment_expression(*)
Alias for: break_as_inconstant
visit_prefix_decrement_expression(*)
Alias for: break_as_inconstant
visit_prefix_increment_expression(*)
Alias for: break_as_inconstant
visit_simple_assignment_expression(*)
Alias for: break_as_inconstant

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