class AdLint::Exam::CBuiltin::W0707::ExpressionTransformer

Public Class Methods

new(ary_name) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 16851
def initialize(ary_name)
  @ary_name = ary_name
end

Public Instance Methods

visit_additive_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 16998
def visit_additive_expression(node)
  Cc1::AdditiveExpression.new(node.operator,
                              node.lhs_operand.accept(self),
                              node.rhs_operand.accept(self))
end
visit_address_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 16958
def visit_address_expression(node)
  Cc1::AddressExpression.new(node.operator, node.operand.accept(self))
end
visit_alignof_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 16980
def visit_alignof_expression(node)
  Cc1::AlignofExpression.new(node.operator, node.operand.accept(self))
end
visit_alignof_type_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 16984
def visit_alignof_type_expression(node)
  node
end
visit_and_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 17022
def visit_and_expression(node)
  Cc1::AndExpression.new(node.operator,
                         node.lhs_operand.accept(self),
                         node.rhs_operand.accept(self))
end
visit_array_subscript_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 16883
def visit_array_subscript_expression(node)
  Cc1::ArraySubscriptExpression.new(node.expression.accept(self),
                                    node.array_subscript.accept(self),
                                    node.operator)
end
visit_bit_access_by_pointer_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 16911
def visit_bit_access_by_pointer_expression(node)
  Cc1::BitAccessByPointerExpression.new(
    node.expression.accept(self), node.constant, node.operator)
end
visit_bit_access_by_value_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 16906
def visit_bit_access_by_value_expression(node)
  Cc1::BitAccessByValueExpression.new(
    node.expression.accept(self), node.constant, node.operator)
end
visit_cast_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 16988
def visit_cast_expression(node)
  Cc1::CastExpression.new(node.type_name, node.operand.accept(self))
end
visit_comma_separated_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 17071
def visit_comma_separated_expression(node)
  exprs = node.expressions.map { |expr| expr.accept(self) }
  transformed = Cc1::CommaSeparatedExpression.new(exprs.shift)
  exprs.each { |expr| transformed.expressions.push(expr) }
  transformed
end
visit_compound_assignment_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 17065
def visit_compound_assignment_expression(node)
  Cc1::CompoundAssignmentExpression.new(node.operator,
                                        node.lhs_operand.accept(self),
                                        node.rhs_operand.accept(self))
end
visit_compound_literal_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 16934
def visit_compound_literal_expression(node)
  Cc1::CompoundLiteralExpression.new(
    node.type_name, node.initializers.map { |init| init.accept(self) },
    node.operator)
end
visit_conditional_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 17052
def visit_conditional_expression(node)
  Cc1::ConditionalExpression.new(node.condition.accept(self),
                                 node.then_expression.accept(self),
                                 node.else_expression.accept(self),
                                 Token.new("?", "?", node.location))
end
visit_constant_specifier(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 16867
def visit_constant_specifier(node)
  node
end
visit_equality_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 17016
def visit_equality_expression(node)
  Cc1::EqualityExpression.new(node.operator,
                              node.lhs_operand.accept(self),
                              node.rhs_operand.accept(self))
end
visit_error_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 16855
def visit_error_expression(node)
  node
end
visit_exclusive_or_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 17028
def visit_exclusive_or_expression(node)
  Cc1::ExclusiveOrExpression.new(node.operator,
                                 node.lhs_operand.accept(self),
                                 node.rhs_operand.accept(self))
end
visit_function_call_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 16889
def visit_function_call_expression(node)
  Cc1::FunctionCallExpression.new(
    node.expression.accept(self),
    node.argument_expressions.map { |expr| expr.accept(self) },
    node.operator)
end
visit_grouped_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 16879
def visit_grouped_expression(node)
  Cc1::GroupedExpression.new(node.expression.accept(self))
end
visit_inclusive_or_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 17034
def visit_inclusive_or_expression(node)
  Cc1::InclusiveOrExpression.new(node.operator,
                                 node.lhs_operand.accept(self),
                                 node.rhs_operand.accept(self))
end
visit_indirection_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 16962
def visit_indirection_expression(node)
  Cc1::IndirectionExpression.new(
    node.operator, node.operand.accept(self))
end
visit_initializer(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 17078
def visit_initializer(node)
  case
  when node.expression
    Cc1::Initializer.new(node.expression.accept(self), nil)
  when node.initializers
    Cc1::Initializer.new(
      nil, node.initializers.map { |i| i.accept(self) })
  end
end
visit_logical_and_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 17040
def visit_logical_and_expression(node)
  Cc1::LogicalAndExpression.new(node.operator,
                                node.lhs_operand.accept(self),
                                node.rhs_operand.accept(self))
end
visit_logical_or_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 17046
def visit_logical_or_expression(node)
  Cc1::LogicalOrExpression.new(node.operator,
                               node.lhs_operand.accept(self),
                               node.rhs_operand.accept(self))
end
visit_member_access_by_pointer_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 16901
def visit_member_access_by_pointer_expression(node)
  Cc1::MemberAccessByPointerExpression.new(
    node.expression.accept(self), node.identifier, node.operator)
end
visit_member_access_by_value_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 16896
def visit_member_access_by_value_expression(node)
  Cc1::MemberAccessByValueExpression.new(
    node.expression.accept(self), node.identifier, node.operator)
end
visit_multiplicative_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 16992
def visit_multiplicative_expression(node)
  Cc1::MultiplicativeExpression.new(node.operator,
                                    node.lhs_operand.accept(self),
                                    node.rhs_operand.accept(self))
end
visit_null_constant_specifier(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 16875
def visit_null_constant_specifier(node)
  node
end
visit_object_specifier(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 16859
def visit_object_specifier(node)
  if node.identifier.value == @ary_name
    Cc1::ConstantSpecifier.new(Token.new(:CONSTANT, "0", node.location))
  else
    node
  end
end
visit_postfix_decrement_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 16925
def visit_postfix_decrement_expression(node)
  # NOTE: The postfix-decrement-expression is already evaluated with
  #       side-effect.
  #       To rollback the side-effect, create an inverted expression.
  Cc1::PrefixIncrementExpression.new(
    Token.new("++", "++", node.operator.location),
    node.operand.accept(self))
end
visit_postfix_increment_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 16916
def visit_postfix_increment_expression(node)
  # NOTE: The postfix-increment-expression is already evaluated with
  #       side-effect.
  #       To rollback the side-effect, create an inverted expression.
  Cc1::PrefixDecrementExpression.new(
    Token.new("--", "--", node.operator.location),
    node.operand.accept(self))
end
visit_prefix_decrement_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 16949
def visit_prefix_decrement_expression(node)
  # NOTE: The prefix-decrement-expression is already evaluated with
  #       side-effect.
  #       To rollback the side-effect, create an inverted expression.
  Cc1::PostfixIncrementExpression.new(
    Token.new("++", "++", node.operator.location),
    node.operand.accept(self))
end
visit_prefix_increment_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 16940
def visit_prefix_increment_expression(node)
  # NOTE: The prefix-increment-expression is already evaluated with
  #       side-effect.
  #       To rollback the side-effect, create an inverted expression.
  Cc1::PostfixDecrementExpression.new(
    Token.new("--", "--", node.operator.location),
    node.operand.accept(self))
end
visit_relational_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 17010
def visit_relational_expression(node)
  Cc1::RelationalExpression.new(node.operator,
                                node.lhs_operand.accept(self),
                                node.rhs_operand.accept(self))
end
visit_shift_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 17004
def visit_shift_expression(node)
  Cc1::ShiftExpression.new(node.operator,
                           node.lhs_operand.accept(self),
                           node.rhs_operand.accept(self))
end
visit_simple_assignment_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 17059
def visit_simple_assignment_expression(node)
  Cc1::SimpleAssignmentExpression.new(node.operator,
                                      node.lhs_operand.accept(self),
                                      node.rhs_operand.accept(self))
end
visit_sizeof_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 16972
def visit_sizeof_expression(node)
  Cc1::SizeofExpression.new(node.operator, node.operand.accept(self))
end
visit_sizeof_type_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 16976
def visit_sizeof_type_expression(node)
  node
end
visit_string_literal_specifier(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 16871
def visit_string_literal_specifier(node)
  node
end
visit_unary_arithmetic_expression(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 16967
def visit_unary_arithmetic_expression(node)
  Cc1::UnaryArithmeticExpression.new(
    node.operator, node.operand.accept(self))
end