public override Expression Optimize(OptimizationParams op) { Expression opt_rvalue = rvalue.Optimize(op); if (lvalue is Name) { Name nm = lvalue as Name; Accessor acc = op.GetAccessor(nm.name); if (acc == null) { return(this); } else { return(new OptimizedExpression((VM vm) => { HeronValue x = opt_rvalue.Eval(vm); acc.Set(x); return x; })); } } else { return(new Assignment(lvalue.Optimize(op), opt_rvalue)); } }
public override Expression Optimize(OptimizationParams op) { Accessor acc = op.GetAccessor(name); if (acc == null) { return(this); } return(new OptimizedExpression((VM vm) => acc.Get())); }
public ExpressionList Optimize(OptimizationParams op) { ExpressionList r = new ExpressionList(); foreach (Expression x in this) { r.Add(x.Optimize(op)); } return(r); }
public override Expression Optimize(OptimizationParams op) { return(this); }
public override Expression Optimize(OptimizationParams op) { return(new TupleExpr(exprs.Optimize(op))); }
public override Expression Optimize(OptimizationParams op) { return(new PostIncExpr(expr.Optimize(op))); }
public override Expression Optimize(OptimizationParams op) { return(new UnaryOperation(operation, operand.Optimize(op))); }
public override Expression Optimize(OptimizationParams op) { return(new FunCall(funexpr.Optimize(op), args.Optimize(op))); }
public override Expression Optimize(OptimizationParams op) { return(new NewExpr(type, args.Optimize(op), module)); }
public override Expression Optimize(OptimizationParams op) { return(new ReadAt(self.Optimize(op), index.Optimize(op))); }
public override Expression Optimize(OptimizationParams op) { return(new ChooseField(self.Optimize(op), name)); }
public abstract Expression Optimize(OptimizationParams op);
public override Expression Optimize(OptimizationParams op) { return(new ParanthesizedExpr(expr.Optimize(op))); }
public override Expression Optimize(OptimizationParams op) { return(new RecordExpr(fields.Optimize(op), fielddefs)); }