class AdLint::Exam::CBuiltin::W0745::ExpressionTransformer

Public Class Methods

new(ary_name) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 18344
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 18492
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 18451
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 18474
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 18478
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 18516
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 18376
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 18404
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 18399
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 18482
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 18565
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 18559
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 18427
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 18546
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 18360
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 18510
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 18348
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 18522
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 18382
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 18372
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 18528
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 18456
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 18572
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 18534
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 18540
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 18394
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 18389
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 18486
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 18368
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 18352
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 18418
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 18409
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 18442
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 18433
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 18504
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 18498
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 18553
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 18466
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 18470
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 18364
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 18461
def visit_unary_arithmetic_expression(node)
  Cc1::UnaryArithmeticExpression.new(
    node.operator, node.operand.accept(self))
end