def _perform(environment)
value1 = @operand1.perform(environment)
if @operator == :and
return value1.to_bool ? @operand2.perform(environment) : value1
elsif @operator == :or
return value1.to_bool ? value1 : @operand2.perform(environment)
end
value2 = @operand2.perform(environment)
if (value1.is_a?(Sass::Script::Value::Null) || value2.is_a?(Sass::Script::Value::Null)) &&
@operator != :eq && @operator != :neq
raise Sass::SyntaxError.new(
"Invalid null operation: \"#{value1.inspect} #{@operator} #{value2.inspect}\".")
end
if css_variable_warning && @operator == :div &&
!(value1.is_a?(Sass::Script::Value::Number) && value1.original &&
value2.is_a?(Sass::Script::Value::Number) && value2.original) &&
!(value1.is_a?(Sass::Script::Value::String) && value2.is_a?(Sass::Script::Value::String))
css_variable_warning.warn!
end
begin
result = opts(value1.send(@operator, value2))
rescue NoMethodError => e
raise e unless e.name.to_s == @operator.to_s
raise Sass::SyntaxError.new("Undefined operation: \"#{value1} #{@operator} #{value2}\".")
end
if (@operator == :eq || @operator == :neq) && value1.is_a?(Sass::Script::Value::Number) &&
value2.is_a?(Sass::Script::Value::Number) && value1.unitless? != value2.unitless? &&
result == (if @operator == :eq
Sass::Script::Value::Bool::TRUE
else
Sass::Script::Value::Bool::FALSE
end)
operation = "#{value1.to_sass} #{@operator == :eq ? '==' : '!='} #{value2.to_sass}"
future_value = @operator == :neq
Sass::Util.sass_warn "DEPRECATION WARNING on line \#{line}\#{\" of \#{filename}\" if filename}:\nThe result of `\#{operation}` will be `\#{future_value}` in future releases of Sass.\nUnitless numbers will no longer be equal to the same numbers with units.\n"
end
result
end