public virtual Expression VisitConstructFlexArray(ConstructFlexArray consArr, ConstructFlexArray changes, ConstructFlexArray deletions, ConstructFlexArray insertions){ this.UpdateSourceContext(consArr, changes); if (consArr == null) return changes; if (changes != null){ if (deletions == null || insertions == null) Debug.Assert(false); else{ consArr.ElementType = this.VisitTypeReference(consArr.ElementType, changes.ElementType); consArr.Initializers = this.VisitExpressionList(consArr.Initializers, changes.Initializers, deletions.Initializers, insertions.Initializers); consArr.Operands = this.VisitExpressionList(consArr.Operands, changes.Operands, deletions.Operands, insertions.Operands); } }else if (deletions != null) return null; return consArr; }
public virtual Expression VisitConstructFlexArray(ConstructFlexArray consArr){ if (consArr == null) return null; consArr.ElementType = this.VisitTypeReference(consArr.ElementType); consArr.Operands = this.VisitExpressionList(consArr.Operands); consArr.Initializers = this.VisitExpressionList(consArr.Initializers); return consArr; }
public virtual Differences VisitConstructFlexArray(ConstructFlexArray consArr1, ConstructFlexArray consArr2){ Differences differences = new Differences(consArr1, consArr2); if (consArr1 == null || consArr2 == null){ if (consArr1 != consArr2) differences.NumberOfDifferences++; else differences.NumberOfSimilarities++; return differences; } ConstructFlexArray changes = (ConstructFlexArray)consArr2.Clone(); ConstructFlexArray deletions = (ConstructFlexArray)consArr2.Clone(); ConstructFlexArray insertions = (ConstructFlexArray)consArr2.Clone(); Differences diff = this.VisitTypeNode(consArr1.ElementType, consArr2.ElementType); if (diff == null){Debug.Assert(false); return differences;} changes.ElementType = diff.Changes as TypeNode; deletions.ElementType = diff.Deletions as TypeNode; insertions.ElementType = diff.Insertions as TypeNode; //Debug.Assert(diff.Changes == changes.ElementType && diff.Deletions == deletions.ElementType && diff.Insertions == insertions.ElementType); differences.NumberOfDifferences += diff.NumberOfDifferences; differences.NumberOfSimilarities += diff.NumberOfSimilarities; ExpressionList exprChanges, exprDeletions, exprInsertions; diff = this.VisitExpressionList(consArr1.Initializers, consArr2.Initializers, out exprChanges, out exprDeletions, out exprInsertions); if (diff == null){Debug.Assert(false); return differences;} changes.Operands = exprChanges; deletions.Operands = exprDeletions; insertions.Operands = exprInsertions; differences.NumberOfDifferences += diff.NumberOfDifferences; differences.NumberOfSimilarities += diff.NumberOfSimilarities; diff = this.VisitExpressionList(consArr1.Operands, consArr2.Operands, out exprChanges, out exprDeletions, out exprInsertions); if (diff == null){Debug.Assert(false); return differences;} changes.Operands = exprChanges; deletions.Operands = exprDeletions; insertions.Operands = exprInsertions; differences.NumberOfDifferences += diff.NumberOfDifferences; differences.NumberOfSimilarities += diff.NumberOfSimilarities; if (differences.NumberOfDifferences == 0){ differences.Changes = null; differences.Deletions = null; differences.Insertions = null; }else{ differences.Changes = changes; differences.Deletions = deletions; differences.Insertions = insertions; } return differences; }
public override Expression VisitConstructFlexArray(ConstructFlexArray consArr){ if (consArr == null) return null; this.VisitResolvedTypeReference(consArr.ElementType, consArr.ElementTypeExpression); return base.VisitConstructFlexArray(consArr); }
public override Expression VisitConstructFlexArray(ConstructFlexArray consArr) { if (consArr == null) return null; TypeNode elemType = consArr.ElementType = this.VisitTypeReference(consArr.ElementType); consArr.Operands = this.VisitExpressionList(consArr.Operands); ExpressionList initializers = consArr.Initializers = this.VisitExpressionList(consArr.Initializers); for (int i = 0, n = initializers == null ? 0 : initializers.Count; i < n; i++) initializers[i] = this.typeSystem.ImplicitCoercion(initializers[i], elemType, this.TypeViewer); return consArr; }
public override Expression VisitConstructFlexArray(ConstructFlexArray consArr){ if (consArr == null) return consArr; TypeNode et = consArr.ElementType = this.VisitTypeReference(consArr.ElementType); consArr.Operands = this.VisitExpressionList(consArr.Operands); consArr.Initializers = this.VisitExpressionList(consArr.Initializers); consArr.Type = SystemTypes.Object; if (et != null && !(et is TypeExpression)) //TODO: report such errors in Looker consArr.Type = SystemTypes.GenericList.GetTemplateInstance(this.currentType, et); return consArr; }
public virtual void VisitConstructFlexArray(ConstructFlexArray consArr) { if (consArr == null) return; this.VisitTypeReference(consArr.ElementType); this.VisitExpressionList(consArr.Operands); this.VisitExpressionList(consArr.Initializers); }
public override Expression VisitConstructFlexArray(ConstructFlexArray consArr) { if (consArr == null) return null; return base.VisitConstructFlexArray((ConstructFlexArray)consArr.Clone()); }
public virtual Expression VisitConstructFlexArray(ConstructFlexArray consArr1, ConstructFlexArray consArr2) { if (consArr1 == null) return null; if (consArr2 == null) { consArr1.ElementType = this.VisitTypeReference(consArr1.ElementType, null); consArr1.Operands = this.VisitExpressionList(consArr1.Operands, null); consArr1.Initializers = this.VisitExpressionList(consArr1.Initializers, null); } else { consArr1.ElementType = this.VisitTypeReference(consArr1.ElementType, consArr2.ElementType); consArr1.Operands = this.VisitExpressionList(consArr1.Operands, consArr2.Operands); consArr1.Initializers = this.VisitExpressionList(consArr1.Initializers, consArr2.Initializers); } return consArr1; }
public override Expression VisitConstructFlexArray(ConstructFlexArray consFlexArr){ if (consFlexArr == null || consFlexArr.Type == null || consFlexArr.ElementType == null) return null; consFlexArr.Operands = this.VisitExpressionList(consFlexArr.Operands); ExpressionList initializers = consFlexArr.Initializers = this.VisitExpressionList(consFlexArr.Initializers); int initialCapacity = 0; int n = 0; if (consFlexArr.Operands != null && consFlexArr.Operands.Count > 0){ Literal lit = consFlexArr.Operands[0] as Literal; if (lit != null && lit.Value is int) initialCapacity = (int)lit.Value; }else if (initializers != null) initialCapacity = (n = initializers.Count) * 2; InstanceInitializer cons = this.GetTypeView(consFlexArr.Type).GetConstructor(SystemTypes.Int32); if (cons == null){Debug.Assert(false); return null;} ExpressionList arguments = new ExpressionList(1); arguments.Add(new Literal(initialCapacity, SystemTypes.Int32)); Construct consFlex = new Construct(new MemberBinding(null, cons), arguments); if (n == 0) return consFlex; StatementList statements = new StatementList(n+1); statements.Add(new ExpressionStatement(consFlex)); Method add = this.GetTypeView(consFlexArr.Type).GetMethod(StandardIds.Add, consFlexArr.ElementType); for (int i = 0; i < n; i++){ arguments = new ExpressionList(1); arguments.Add(initializers[i]); MethodCall call = new MethodCall(new MemberBinding(new Expression(NodeType.Dup), add), arguments); statements.Add(new ExpressionStatement(call)); } return new BlockExpression(new Block(statements), consFlexArr.Type); }