Example #1
0
    public static BoundBlockExpression Lower(Symbol method, BoundStatement statement)
    {
        var debug = false;

        if (debug)
        {
            Console.WriteLine("==== Original Code ===");
            statement.WriteTo(Console.Out);
        }

        var boundStatement = LoopLowerer.Lower(method, statement);

        if (debug)
        {
            Console.WriteLine("==== Lowered Code ===");
            boundStatement.WriteTo(Console.Out);
        }

        var noIndexExpr = IndexExpressions.Lower(method, boundStatement);

        if (debug)
        {
            Console.WriteLine("==== Index Expressions ===");
            noIndexExpr.WriteTo(Console.Out);
        }

        var tac = ThreeAddressCode.Lower(method, noIndexExpr);

        if (debug)
        {
            Console.WriteLine("==== Three Address Code ===");
            tac.WriteTo(Console.Out);
        }

        var unitLessStatements = RemoveUnitAssignments.Lower(tac);

        if (debug)
        {
            Console.WriteLine("==== Remove Unit Assignments ===");
            unitLessStatements.WriteTo(Console.Out);
        }

        var inlinedTemporaries = InlineTemporaries.Lower(method, unitLessStatements);

        if (debug)
        {
            Console.WriteLine("==== Inlined Temporaries ===");
            inlinedTemporaries.WriteTo(Console.Out);
        }

        var deadCodeRemoval = DeadCodeRemoval.RemoveDeadCode(inlinedTemporaries);

        if (debug)
        {
            Console.WriteLine("==== Dead Code Removal ===");
            deadCodeRemoval.WriteTo(Console.Out);
        }

        return(deadCodeRemoval);
    }
Example #2
0
        /// <summary>
        ///		Clona el identificador de variable
        /// </summary>
        public override ExpressionBase Clone()
        {
            ExpressionVariableIdentifier variable = new ExpressionVariableIdentifier(Name);

            // Clona las expresiones
            variable.IndexExpressions    = IndexExpressions.Clone();
            variable.IndexExpressionsRPN = IndexExpressionsRPN.Clone();
            if (Member != null)
            {
                variable.Member = Member.Clone() as ExpressionVariableIdentifier;
            }
            // Devuelve el objeto clonado
            return(variable);
        }
Example #3
0
        /// <summary>
        ///		Obtiene la información de depuración
        /// </summary>
        public override string GetDebugInfo()
        {
            string debug = Name;

            // Añade el índice
            if (IndexExpressions?.Count > 0)
            {
                debug += "[" + IndexExpressions.GetDebugInfo() + "]";
            }
            // Añade el índice en formato RPN
            if (IndexExpressionsRPN?.Count > 0)
            {
                debug += " (RPN: " + IndexExpressionsRPN.GetDebugInfo() + ")";
            }
            // Añade el miembro
            if (Member != null)
            {
                debug += "->" + Member.GetDebugInfo();
            }
            // Devuelve la información de depuración
            return(debug);
        }
Example #4
0
 public OnConflictClause AddIndexExpr(LambdaExpression expr) => new OnConflictClause(IndexExpressions.Concat(new[] { expr }).ToList(), Where, DoUpdate);
 public bool EqualsAdvancedIndex(AdvancedIndexIndexMultiKeyPart that)
 {
     return IndexTypeName.Equals(that.IndexTypeName) && IndexExpressions.AreEqual(that.IndexExpressions);
 }