Ejemplo n.º 1
0
        public override void ConsolidateNames(ref Dictionary <string, List <Node> > names)
        {
            IdentifierNode rightTerminalNode = RightNode as IdentifierNode;

            if (rightTerminalNode != null)
            {
                if (Optr != ProtoCore.DSASM.Operator.dot)
                {
                    //replace RHS
                    Consolidate(ref (names), ref (rightTerminalNode));
                    RightNode = rightTerminalNode;
                }
            }
            else
            {
                RightNode.ConsolidateNames(ref (names));
            }

            //left has to be done 2nd, because in case of modifiers, we dont want to
            //replace the node on RHS by a node on LHS. So a modifier stack name is not unique.
            IdentifierNode leftTerminalNode = LeftNode as IdentifierNode;

            if (leftTerminalNode != null)
            {
                if (Optr != ProtoCore.DSASM.Operator.assign)
                {
                    //replace LHS
                    Consolidate(ref (names), ref (leftTerminalNode));
                    LeftNode = leftTerminalNode;
                }
                else
                {
                    if (leftTerminalNode.Name != null)
                    {
                        if (names.ContainsKey(leftTerminalNode.Name))
                        {
                            List <Node> candidates = names[leftTerminalNode.Name];
                            candidates.Add(leftTerminalNode);
                        }
                        else
                        {
                            //append LHS
                            List <Node> candidates = new List <Node>();
                            candidates.Add(leftTerminalNode);
                            names.Add(leftTerminalNode.Name, candidates);
                        }
                    }
                }
            }
            else
            {
                LeftNode.ConsolidateNames(ref (names));
            }
        }