static LNode ToLNodeCore(ILNode node)
{
var attrs = VList<LNode>.Empty;
for (int i = node.Min; i < -1; i++)
attrs.Add(ToLNodeCore(node[i]));
switch (node.Kind) {
case LNodeKind.Id:
return LNode.Id(attrs, node.Name, node.Range, node.Style);
case LNodeKind.Literal:
return LNode.Literal(attrs, node.Value, node.Range, node.Style);
default:
var args = VList<LNode>.Empty;
for (int i = 0, max = node.Max; i <= max; i++)
args.Add(ToLNodeCore(node[i]));
var target = ToLNodeCore(node.Target);
return LNode.Call(attrs, target, args, node.Range, node.Style);
}
}