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); }
/// <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); }
/// <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); }
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); }