Ejemplo n.º 1
0
        /// <summary>
        /// Обработва на второ минаване таблиците като вмъква на подходящите места декларациите
        /// на използваните променливи. Обхождането става в обратна посока за да може индексите
        /// променливите да са в нарастващ ред.
        /// </summary>
        private void FixUpVariables()
        {
            foreach (KeyValuePair <VariableDefinition, FirstAssignmentInfo> pair in firstAssignment.Reverse())
            {
                Stack <BlockStatement> stack = variables[pair.Key];

                if (stack == null)
                {
                    continue;
                }

                BlockStatement block = stack.Peek();

                if (pair.Value != ignoreFirstAssignment &&
                    block.Equals(firstAssignment[pair.Key].inBlock))
                {
                    pair.Value.assignExpression.Target =
                        new VariableDeclarationExpression(pair.Key);
                }
                else
                {
                    block.Statements.Insert(0, new ExpressionStatement(
                                                new VariableDeclarationExpression(pair.Key)));
                }
            }
        }