Class | Sass::Script::Operation
In: | lib/sass/script/operation.rb
Parent: | Node

A SassScript parse node representing a binary operation, such as `$a + $b` or `"foo" + 1`.

### Methods

_perform children inspect new to_sass

### Attributes

operand1 | [R] |
operand2 | [R] |
operator | [R] |

### Public Class methods

new(operand1, operand2, operator)

@param operand1 [Script::Node] The parse-tree node

      for the right-hand side of the operator

@param operand2 [Script::Node] The parse-tree node

      for the left-hand side of the operator

@param operator [Symbol] The operator to perform.

      This should be one of the binary operator names in {Lexer::OPERATORS}

[Source]

        # File lib/sass/script/operation.rb, line 24
    24:     def initialize(operand1, operand2, operator)
    25:       @operand1 = operand1
    26:       @operand2 = operand2
    27:       @operator = operator
    28:       super()
    29:     end

### Public Instance methods

children()

Returns the operands for this operation.

@return [Array<Node>] @see Node#children

[Source]

        # File lib/sass/script/operation.rb, line 54
    54:     def children
    55:       [@operand1, @operand2]
    56:     end

inspect()

@return [String] A human-readable s-expression representation of the operation

[Source]

        # File lib/sass/script/operation.rb, line 32
    32:     def inspect
    33:       "(#{@operator.inspect} #{@operand1.inspect} #{@operand2.inspect})"
    34:     end

to_sass(opts = {})

@see Node#to_sass

[Source]

        # File lib/sass/script/operation.rb, line 37
    37:     def to_sass(opts = {})
    38:       pred = Sass::Script::Parser.precedence_of(@operator)
    39:       o1 = operand_to_sass pred, @operand1, opts
    40:       o2 = operand_to_sass pred, @operand2, opts
    41:       sep =
    42:         case @operator
    43:         when :comma; ", "
    44:         when :concat; " "
    45:         else; " #{Lexer::OPERATORS_REVERSE[@operator]} "
    46:         end
    47:       "#{o1}#{sep}#{o2}"
    48:     end

### Protected Instance methods

_perform(environment)

Evaluates the operation.

@param environment [Sass::Environment] The environment in which to evaluate the SassScript @return [Literal] The SassScript object that is the value of the operation @raise [Sass::SyntaxError] if the operation is undefined for the operands

[Source]

        # File lib/sass/script/operation.rb, line 65
    65:     def _perform(environment)
    66:       literal1 = @operand1.perform(environment)
    67:       literal2 = @operand2.perform(environment)
    68:
    69:       if @operator == :concat && context == :equals
    70:         literal1 = Sass::Script::String.new(literal1.value) if literal1.is_a?(Sass::Script::String)
    71:         literal2 = Sass::Script::String.new(literal2.value) if literal2.is_a?(Sass::Script::String)
    72:       end
    73:
    74:       begin
    75:         res = literal1.send(@operator, literal2)
    76:         res.options = environment.options
    77:         res
    78:       rescue NoMethodError => e
    79:         raise e unless e.name.to_s == @operator.to_s
    80:         raise Sass::SyntaxError.new("Undefined operation: \"#{literal1} #{@operator} #{literal2}\".")
    81:       end
    82:     end

[Validate]