stringify method
Print an object to a string.
Implementation
String stringify(Object? object, {bool asStringLiteral = false}) {
final output = StringBuffer();
if (object is String) {
if (asStringLiteral) {
return "'$object'";
} else {
return object;
}
} else if (object is Iterable) {
if (object.isNotEmpty) {
output.writeln(listStart);
++_curIndentCount;
for (var i = 0; i < object.length; ++i) {
final item = object.elementAt(i);
output.write(_curIndent());
final itemString = stringify(item, asStringLiteral: true);
output.write(itemString);
if (i < object.length - 1) {
output.write(comma);
}
output.writeln();
}
--_curIndentCount;
output.write(_curIndent());
output.write(listEnd);
} else {
output.write('$listStart$listEnd');
}
} else if (object is Map) {
if (object.isNotEmpty) {
output.writeln(structStart);
++_curIndentCount;
final keys = object.keys.toList();
for (var i = 0; i < keys.length; ++i) {
output.write(_curIndent());
final key = keys[i];
final value = object[key];
final keyString = stringify(key);
final valueString = stringify(value);
if (i < keys.length - 1) {
output.write('$keyString: $valueString');
output.writeln('$comma ');
} else {
output.writeln('$keyString: $valueString');
}
}
--_curIndentCount;
output.write(_curIndent());
output.write(structEnd);
} else {
output.write('$structStart$structEnd');
}
} else if (object is HTStruct) {
if (object.isNotEmpty) {
final structString = _stringifyStruct(object);
output.write(structString);
} else {
output.write('$structStart$structEnd');
}
} else if (object is HTClass) {
output.write('$kClass ${object.id}');
} else if (object is HTInstance) {
output.write(object.toString());
} else if (object is HTFunction) {
output.write('$kFunction ${object.internalName}');
} else if (object is HTType) {
final typeString = _stringifyType(object, showTypeKeyword: true);
output.write(typeString);
} else {
output.write(object.toString());
}
return output.toString();
}