toSource function
String
toSource(
- ASTNode node
)
Implementation
String toSource(ASTNode node) {
String result;
if (node is Token) {
if (node.kind == TokenKind.Word || node.kind == TokenKind.String) {
result = node.text;
} else {
result = node.value.toString();
}
} else {
var path = _unpackPath(node);
List<String> parts = [(path[0].operand as Token).text];
for (var i = 1; i < path.length; i++) {
var pe = path[i];
switch (pe.op) {
case TokenKind.Dot:
parts.add('.');
parts.add((pe.operand as Token).text);
break;
case TokenKind.LeftBracket:
parts.add('[');
parts.add(toSource(pe.operand));
parts.add(']');
break;
case TokenKind.Colon:
var sn = pe.operand as SliceNode;
parts.add('[');
if (sn.startIndex != null) {
parts.add(toSource(sn.startIndex!));
}
parts.add(':');
if (sn.stopIndex != null) {
parts.add(toSource(sn.stopIndex!));
}
if (sn.step != null) {
parts.add(':');
parts.add(toSource(sn.step!));
}
parts.add(']');
break;
default:
throw ConfigException(
'Unexpected path element ${pe.operand}', pe.operand.start);
}
}
result = parts.join('');
}
return result;
}