If the parser tidied up properly (successful parse, discard is false) it's hung all the things that were in these stacks (currentfnid, giveargs, currentfncall) off the parse-tree structure of the Policy object it's produced, so we don't want to destroy any objects in the stacks - but there should *be* no objects in these stacks, because the parser clears things from the stacks as it transcribes them to where they belong in the structure (or destroys things on the stacks, clearing them, as it copies them to the structure).  So the else clause asserts they're all NULL.  If the parser hit a problem, it may have left some fragments on these stacks, that never got as far as being transcribed onto the Policy object (hence cleared, as on success), so they'd be orphaned if we don't destroy them now (prior to clearing the stacks).  The Policy object does get destroyed, which should take out everything transcribed to it, and deleting the orphans here should take care of everything else allocated during parsing.