Returns a string representation of this object.
String toString() {
if (!isValid) return '<invalid path>';
var sb = new StringBuffer();
bool first = true;
for (var key in _segments) {
if (key is Symbol) {
if (!first) sb.write('.');
sb.write(smoke.symbolToName(key));
} else {
_formatAccessor(sb, key);
}
first = false;
}
return sb.toString();
}