Example #1
0
        private void tryToNeeds(PostParseItem item, bool isLeft, AssureSplitStacks assurer)
        {
            switch (item.ItemType)
            {
                case PPItemType.Variable:
                    if (((PostParseVariable)item).Type == VariableType.Stack)
                    {
                        if (isLeft)
                            assurer.Resolve(((PostParseVariable)item).Index, ((PostParseVariable)item));
                        else
                            assurer.Need(((PostParseVariable)item).Index, ((PostParseVariable)item));

                    }
                    break;
                case PPItemType.String:
                    return;

                case PPItemType.Operation:

                    var op = ((PostParseOperation)item);
                    tryToNeeds(op.Left, false, assurer);
                    tryToNeeds(op.Right, false, assurer);

                    break;
                case PPItemType.Statement:
                    var st = ((PostParseStatement)item);
                    foreach (var postParseItem in st.Items)
                    {
                        tryToNeeds(postParseItem, false, assurer);
                    }
                    break;
                case PPItemType.Method:
                    var wst = ((PostParseMethod)item);
                    foreach (var a in wst.Params)
                        tryToNeeds(a, false, assurer);
                    break;
                default:
                    throw new ArgumentOutOfRangeException();
            }
            return;

            ;
        }