Jint.Expressions.BlockStatement.ReorderStatements C# (CSharp) Method

ReorderStatements() public method

public ReorderStatements ( ) : LinkedList
return LinkedList
        public LinkedList<Statement> ReorderStatements()
        {
            if (!reordered) {
                var iter = Statements.First;

                var nodeVars = new LinkedListNode<Statement>(null);
                var nodeFuncs = new LinkedListNode<Statement>(null);

                Statements.AddFirst(nodeVars);
                Statements.AddFirst(nodeFuncs);

                while (iter != null) {
                    var next = iter.Next;
                    if (iter.Value is VariableDeclarationStatement) {
                        //Statements.Remove(iter);
                        var varDecl = new VariableDeclarationStatement();
                        varDecl.Identifier = ((VariableDeclarationStatement)iter.Value).Identifier;
                        varDecl.Global = ((VariableDeclarationStatement)iter.Value).Global;
                        Statements.AddBefore(nodeVars, varDecl);
                    }
                    if (iter.Value is FunctionDeclarationStatement) {
                        Statements.Remove(iter);
                        Statements.AddBefore(nodeFuncs, iter);
                    }

                    iter = next;
                }

                Statements.Remove(nodeFuncs);
                Statements.Remove(nodeVars);

                reordered = true;
            }

            return Statements;
        }

Usage Example

Esempio n. 1
0
        public void Visit(BlockStatement statement)
        {
            Statement oldStatement = CurrentStatement;
            foreach (var s in statement.ReorderStatements())
            {
                CurrentStatement = s;

                if (DebugMode)
                {
                    OnStep(CreateDebugInformation(s));
                }

                s.Accept(this);

                if (StopStatementFlow())
                {
                    return;
                }
            }
            CurrentStatement = oldStatement;
        }