add pretty-printing and an assert

This commit is contained in:
Alon Zakai 2014-11-04 14:44:07 -08:00
Родитель c9ccab8194
Коммит d8b4d111a2
1 изменённых файлов: 20 добавлений и 4 удалений

Просмотреть файл

@ -245,7 +245,9 @@ struct Value {
return curr;
}
void stringify(std::ostream &os) {
void stringify(std::ostream &os, bool pretty=false) {
static int indent = 0;
#define indentify() { for (int i = 0; i < indent; i++) os << " "; }
switch (type) {
case String:
os << '"' << *str << '"';
@ -255,10 +257,23 @@ struct Value {
break;
case Array:
os << '[';
for (unsigned i = 0; i < arr->size(); i++) {
if (i > 0) os << ", ";
(*arr)[i]->stringify(os);
if (pretty) {
os << std::endl;
indent++;
}
for (unsigned i = 0; i < arr->size(); i++) {
if (i > 0) {
os << ", ";
if (pretty) os << std::endl;
}
indentify();
(*arr)[i]->stringify(os, pretty);
}
if (pretty) {
os << std::endl;
indent--;
}
indentify();
os << ']';
break;
case Null:
@ -283,6 +298,7 @@ struct Value {
Ref& operator[](unsigned x) {
assert(isArray());
assert(x < arr->size());
return (*arr)[x];
}