//////////////////////////////////////////////////////////////////////////
// Map
//////////////////////////////////////////////////////////////////////////
public void writeMap(Map map)
{
// get k,v type
MapType t = (MapType)map.@typeof();
// decide if we're going output as single or multi-line format
bool nl = isMultiLine(t.m_k) || isMultiLine(t.m_v);
// figure out if we can use an inferred type
bool inferred = false;
if (curFieldType != null && curFieldType.fits(Sys.MapType))
{
inferred = true;
}
// clear field type, so it doesn't get used for inference again
curFieldType = null;
// if we don't have an inferred type, then prefix of type
if (!inferred) wType(t);
// handle empty map
if (map.isEmpty()) { w("[:]"); return; }
// items
level++;
w('[');
bool first = true;
IDictionaryEnumerator en = map.pairsIterator();
while (en.MoveNext())
{
if (first) first = false; else w(',');
if (nl) w('\n').wIndent();
object key = en.Key;
object val = en.Value;
writeObj(key); w(':'); writeObj(val);
}
w(']');
level--;
}