     {
         if (!measureProgram) measure();
         if (!updateProgram) compileUpdateProgram();
-        measuredUpdateProgram = filterProgramCopy(updateProgram, new ReadOnlyEvaluator());
-        filterProgramInPlace(measuredUpdateProgram, new ArithmeticConstFolder());
-        filterProgramInPlace(measuredUpdateProgram, new ArithmeticOptimizer());
+        measuredUpdateProgram = copyProgram(updateProgram);
+        filterProgram(measuredUpdateProgram, new ReadOnlyEvaluator());
+        filterProgram(measuredUpdateProgram, new ArithmeticConstFolder());
+        filterProgram(measuredUpdateProgram, new ArithmeticOptimizer());
     }
 
     public function dumpPrograms(linebuf:Array):void

        }
    }

    private static function filterProgramInPlace(program:Vector.<ASTNode>, filter:ASTFilter):void
    {
        for (var i:int = 0; i < program.length; i++)
        {

        {
            copy[i] = deepCopier.filter(program[i]);
        }
        return copy;
    }
}
