class Less::Node::Expression

def _sass_split(arr)

def _sass_split(arr)
  return arr[0].to_sass_tree, arr[1..-1] unless arr[0] == "("
  parens = 1
  i = arr[1..-1].each_with_index do |e, i|
    parens += 1 if e == "("
    parens -= 1 if e == ")"
    break i if parens == 0
  end
  return _to_sass_tree(arr[1...i+1]), arr[i+2..-1]
end

def _to_sass_tree(arr)

def _to_sass_tree(arr)
  e, rest = _to_sass_tree_plus_minus_eq(arr)
  until rest.empty?
    e2, rest = _to_sass_tree_plus_minus_eq(rest)
    e = Sass::Script::Operation.new(e, e2, :space)
  end
  return e
end

def _to_sass_tree_plus_minus_eq(arr)

def _to_sass_tree_plus_minus_eq(arr)
  e, rest = _to_sass_tree_times_div(arr)
  while rest[0] && rest[0].is_a?(Operator) && %w[+ - =].include?(rest[0])
    op = LESS_TO_SASS_OPERATORS[rest[0]]
    e2, rest = _to_sass_tree_times_div(rest[1..-1])
    e = Sass::Script::Operation.new(e, e2, op)
  end
  return e, rest
end

def _to_sass_tree_times_div(arr)

def _to_sass_tree_times_div(arr)
  e, rest = _to_sass_tree_unary(arr)
  while rest[0] && rest[0].is_a?(Operator) && %w[* /].include?(rest[0])
    op = LESS_TO_SASS_OPERATORS[rest[0]]
    e2, rest = _to_sass_tree_unary(rest[1..-1])
    e = Sass::Script::Operation.new(e, e2, op)
  end
  return e, rest
end

def _to_sass_tree_unary(arr)

def _to_sass_tree_unary(arr)
  if arr[0] == "-"
    first, rest = _sass_split(arr[1..-1])
    return Sass::Script::UnaryOperation.new(first, :minus), rest
  else
    return _sass_split(arr[0..-1])
  end
end

def to_sass_tree

def to_sass_tree
  if first.is_a?(Array)
    val = map {|e| _to_sass_tree(e)}.inject(nil) do |e, i|
      next i unless e
      Sass::Script::Operation.new(e, i, :comma)
    end
  else
    val = _to_sass_tree(self)
  end
  val.options = {}
  val
end