module Sass::Constant

def operationalize(value, constants)

++
have Constant.parse automatically add it to exception.
TODO: Don't pass around original value;
--
def operationalize(value, constants)
  value = [value] unless value.is_a?(Array)
  case value.length
  when 0
    Sass::Constant::Nil.new
  when 1
    value = value[0]
    if value.is_a? Array
      operationalize(value, constants)
    elsif value.is_a? Operation
      value
    else
      Literal.parse(value)
    end
  when 2
    if value[0] == :neg
      Operation.new(Sass::Constant::Number.new('0'), operationalize(value[1], constants), :minus)
    elsif value[0] == :const
      Literal.parse(get_constant(value[1], constants))
    else
      raise SyntaxError.new("Constant arithmetic error")
    end
  when 3
    Operation.new(operationalize(value[0], constants), operationalize(value[2], constants), value[1])
  else
    if SECOND_ORDER.include?(value[1]) && FIRST_ORDER.include?(value[3])
      operationalize([value[0], value[1], operationalize(value[2..4], constants), *value[5..-1]], constants)
    else
      operationalize([operationalize(value[0..2], constants), *value[3..-1]], constants)
    end
  end
end