public virtual ExpressionList VisitExpressionList(ExpressionList list) { if (list == null) return null; for (int i = 0, n = list.Count; i < n; i++) list[i] = (Expression)this.Visit(list[i]); return list; }
public override ExpressionList VisitExpressionList(ExpressionList expressions){ if (expressions == null) return null; for (int i = 0, n = expressions.Count; i < n; i++) expressions[i] = this.VisitExpression(expressions[i]); return expressions; }
public virtual ExpressionList VisitLoopInvariantList(ExpressionList expressions){ if (expressions == null) return null; for (int i = 0, n = expressions.Count; i < n; i++) expressions[i] = this.VisitExpression(expressions[i]); return expressions; }
public virtual void VisitLoopInvariantList(ExpressionList expressions) { if (expressions == null) return; for (int i = 0, n = expressions.Count; i < n; i++) this.VisitExpression(expressions[i]); }
public override ExpressionList VisitExpressionList(ExpressionList expressions) { if (expressions == null) return null; return base.VisitExpressionList(expressions.Clone()); }
//HS D //FIXME: move! public virtual Statement VisitBlockHole(BlockHole block){ if (block == null) return null; SourceContext sctx = block.SourceContext; ExpressionList args = new ExpressionList(); args.Add(block.Repeat); args.Add(block.IfBranches); args.Add(block.BranchOps); args.Add(block.Conjunctions); args.Add(block.Ops); args.Add(block.CondVars); args.Add(block.ArgVars); Expression tgt = new Identifier("BlockHole", sctx); MethodCall c = new MethodCall(tgt, args); return new ExpressionStatement(c); /* //HACK FIXME... int repeatN = (int) block.Repeat.Value; object ifBranchesOrig = block.IfBranches.Value; bool ifBranchesNoElse = !(ifBranchesOrig is int); int ifBranches = ifBranchesNoElse ? (int) ((double) ifBranchesOrig) : (int) ifBranchesOrig; int branchOps = (int) block.BranchOps.Value; int conjunctions = (int) block.Conjunctions.Value; ExpressionList ops = block.Ops.Initializers; ExpressionList condVars = block.CondVars.Initializers; ExpressionList argVars = block.ArgVars.Initializers; SourceContext sctx = block.SourceContext; Method declaringMethod = block.DeclaringMethod; Hashtable classOpMethods = block.ClassOpMethods; ParameterList callingMtdParams = declaringMethod.Parameters; Identifier opN = (Identifier) ((Literal) ops[0]).Value; //FIXME: Method op = (Method) classOpMethods[opN.Name]; //HACK FIXME Debug.Assert (op != null, "Did you forget to mark method " + opN.Name + " as operation?"); //FIXME //op.IsOperation bool isVoid = IsVoidType(op.ReturnType); Expression tgt = new MemberBinding(null, op); //op.Name; ParameterList ps = op.Parameters; bool opTr = op.IsTransformable; bool[] trPrms = new bool[ps.Count]; for (int i = 0; i < ps.Count; i++) { Parameter p = ps[i]; trPrms[i] = (p.Flags & ParameterFlags.Transformable) > 0; } StatementList stmts = new StatementList(); for(int i = 1; i <= repeatN; i++) stmts.Add(GenIfBranch(sctx, ifBranches, ifBranchesNoElse, conjunctions, tgt, condVars, argVars, ps, isVoid, opTr, trPrms, callingMtdParams)); Block res = new Block(stmts); Console.WriteLine("HS D - block hole...\n"); PrintMe(0, res); return res; */ }