| 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`.
| operand1 | [R] | |
| operand2 | [R] | |
| operator | [R] |
@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}
# 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
Returns the operands for this operation.
@return [Array<Node>] @see Node#children
# File lib/sass/script/operation.rb, line 54
54: def children
55: [@operand1, @operand2]
56: end
@see Node#to_sass
# 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
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
# 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