public void AppendItemToList(
EXPR newItem,
ref EXPR first,
ref EXPR last
)
{
if (newItem == null)
{
// Nothing changes.
return;
}
if (first == null)
{
Debug.Assert(last == first);
first = newItem;
last = newItem;
return;
}
if (first.kind != ExpressionKind.EK_LIST)
{
Debug.Assert(last == first);
first = CreateList(first, newItem);
last = first;
return;
}
Debug.Assert(last.kind == ExpressionKind.EK_LIST);
Debug.Assert(last.asLIST().OptionalNextListNode != null);
Debug.Assert(last.asLIST().OptionalNextListNode.kind != ExpressionKind.EK_LIST);
last.asLIST().OptionalNextListNode = CreateList(last.asLIST().OptionalNextListNode, newItem);
last = last.asLIST().OptionalNextListNode;
}