コード例 #1
0
        private IList ConvertToSingleDeclarationStatements(MultipleVariableDeclarationStatement varDecl)
        {
            IList newStmts = new ArrayList();

            int index = 0;
            ExpressionCollection initExps = varDecl.InitExpressions;

            foreach (Identifier ident in varDecl.Identifiers)
            {
                // Here we are converting expression from
                // x:int, y:long = 1, 2L
                // to an AST representation equivalent to
                // x:int = 1; y:long = 2L

                SingleVariableDeclarationStatement svStmt = new SingleVariableDeclarationStatement(ident);

                if (index < initExps.Count)
                {
                    svStmt.InitExp = initExps[index];
                    EnsureNoPostFixStatement(svStmt.InitExp);
                }

                index++;

                newStmts.Add(svStmt);
            }

            // We don't need them anymore
            initExps.Clear();

            return(newStmts);
        }
コード例 #2
0
        private void ProcessMultipleVariableDeclarationStatement(MultipleVariableDeclarationStatement decl)
        {
            IList stmts = ConvertToSingleDeclarationStatements(decl);

            ReplaceOriginalMultipleVariableDeclarationStatement(decl, stmts);

            EnsureTypeDeclarationsBelongsToThisScope(decl, stmts);
        }
コード例 #3
0
        public virtual bool VisitMultipleVariableDeclarationStatement(MultipleVariableDeclarationStatement varDecl)
        {
            VisitNodes(varDecl.Identifiers);

            // TODO: Decide if we shall visit the InitExpressions as this node is a kind of transient node

            return(true);
        }
コード例 #4
0
        public override bool VisitMultipleVariableDeclarationStatement(MultipleVariableDeclarationStatement varDecl)
        {
            nodeStack.Push(CurrentNode.Nodes.Add("MultipleVariableDeclarationStatement"));
            CurrentNode.Tag = varDecl;

            CurrentNode.EnsureVisible();

            base.VisitMultipleVariableDeclarationStatement(varDecl);

            nodeStack.Pop();

            return(true);
        }
コード例 #5
0
        private void ReplaceOriginalMultipleVariableDeclarationStatement(MultipleVariableDeclarationStatement decl, IList stmts)
        {
            int index;

            // Replace the VariableDeclarationStatement node by a
            // (possible) sequence of SingleVariableDeclarationStatement

            IStatementContainer stmtContainer = decl.Parent as IStatementContainer;

            index = stmtContainer.Statements.IndexOf(decl);

            stmtContainer.Statements.RemoveAt(index);

            foreach (SingleVariableDeclarationStatement svDecl in stmts)
            {
                stmtContainer.Statements.Insert(index++, svDecl);
            }
        }
コード例 #6
0
        private void EnsureTypeDeclarationsBelongsToThisScope(MultipleVariableDeclarationStatement varDecl, IList stmts)
        {
            ISymbolTable namescope = varDecl.Parent.SymbolTable;

            System.Diagnostics.Debug.Assert(namescope != null);

            foreach (SingleVariableDeclarationStatement typeDecl in stmts)
            {
                Identifier ident = typeDecl.Identifier;

                // Most simple of cases: duplicated declaration
                if (namescope.IsDefined(ident.Name))
                {
                    errorReport.Error("TODOFILENAME", typeDecl.Position, "Sorry but '{0}' is already defined.", ident.Name);
                    continue;
                }

                ApplyDeclarationRules(ident, namescope, typeDecl, varDecl);
            }
        }
コード例 #7
0
        public override bool VisitMultipleVariableDeclarationStatement(MultipleVariableDeclarationStatement varDecl)
        {
            ProcessMultipleVariableDeclarationStatement(varDecl);

            return(base.VisitMultipleVariableDeclarationStatement(varDecl));
        }
        public override bool VisitMultipleVariableDeclarationStatement(MultipleVariableDeclarationStatement varDecl)
        {
            visitedNodes.Add(varDecl);

            return(base.VisitMultipleVariableDeclarationStatement(varDecl));
        }