throws Throwable
throws IOException
  private static void debug_impl(Env env, Value v, int depth)    throws Throwable  {    WriteStream out = env.getOut();    if (v instanceof Var)      out.print("&");    v = v.toValue();    if (v instanceof ArrayValue) {      ArrayValue array = (ArrayValue) v;      out.println("Array");      printDepth(out, 2 * depth);      out.println("(");      for (Map.Entry<Value,Value> mapEntry : array.entrySet()) {	ArrayValue.Entry entry = (ArrayValue.Entry) mapEntry;        printDepth(out, 2 * depth);        out.print("    [");        out.print(entry.getKey());        out.print("] => ");        debug_impl(env, entry.getValue(), depth + 1); // XXX: recursion      }      printDepth(out, 2 * depth);      out.println(")");    }    else if (v instanceof BooleanValue) {      if (v.toBoolean())	out.print("bool(true)");      else	out.print("bool(false)");    }    else if (v instanceof LongValue) {      out.print("int(" + v.toLong() + ")");    }    else if (v instanceof DoubleValue) {      out.print("float(" + v.toDouble() + ")");    }    else if (v instanceof StringValue) {      out.print("string(" + v.toString() + ")");    }    else if (v instanceof NullValue) {      out.print("NULL");    }    else {      v.print(env);    }  }