class Sass::Script::Operation
such as ‘$a + $b` or `“foo” + 1`.
A SassScript parse node representing a binary operation,
def _perform(environment)
-
(Sass::SyntaxError)
- if the operation is undefined for the operands
Returns:
-
(Literal)
- The SassScript object that is the value of the operation
Parameters:
-
environment
(Sass::Environment
) -- The environment in which to evaluate the SassScript
def _perform(environment) literal1 = @operand1.perform(environment) literal2 = @operand2.perform(environment) if @operator == :space && context == :equals literal1 = Sass::Script::String.new(literal1.value) if literal1.is_a?(Sass::Script::String) literal2 = Sass::Script::String.new(literal2.value) if literal2.is_a?(Sass::Script::String) end begin opts(literal1.send(@operator, literal2)) rescue NoMethodError => e raise e unless e.name.to_s == @operator.to_s raise Sass::SyntaxError.new("Undefined operation: \"#{literal1} #{@operator} #{literal2}\".") end end
def children
- See: Node#children -
Returns:
-
(Array
-)
def children [@operand1, @operand2] end
def initialize(operand1, operand2, operator)
-
operator
(Symbol
) -- The operator to perform. -
operand2
(Script::Node
) -- The parse-tree node -
operand1
(Script::Node
) -- The parse-tree node
def initialize(operand1, operand2, operator) @operand1 = operand1 @operand2 = operand2 @operator = operator super() end
def inspect
-
(String)
- A human-readable s-expression representation of the operation
def inspect "(#{@operator.inspect} #{@operand1.inspect} #{@operand2.inspect})" end
def operand_to_sass(op, side, opts)
def operand_to_sass(op, side, opts) return "(#{op.to_sass(opts)})" if op.is_a?(List) return op.to_sass(opts) unless op.is_a?(Operation) pred = Sass::Script::Parser.precedence_of(@operator) sub_pred = Sass::Script::Parser.precedence_of(op.operator) assoc = Sass::Script::Parser.associative?(@operator) return "(#{op.to_sass(opts)})" if sub_pred < pred || (side == :right && sub_pred == pred && !assoc) op.to_sass(opts) end
def to_sass(opts = {})
- See: Node#to_sass -
def to_sass(opts = {}) pred = Sass::Script::Parser.precedence_of(@operator) o1 = operand_to_sass @operand1, :left, opts o2 = operand_to_sass @operand2, :right, opts sep = case @operator when :comma; ", " when :space; " " else; " #{Lexer::OPERATORS_REVERSE[@operator]} " end "#{o1}#{sep}#{o2}" end