doc: use 'module' instead of 'package' in comments
[nit.git] / src / analysis / dead_method_removal.nit
index 3b3d645..beb6a7c 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# This package introduces an algorithm to remove the body of dead methods
+# This module introduces an algorithm to remove the body of dead methods
 package dead_method_removal
 
 import reachable_method_analysis
 
 redef class Program
+       readable var _nb_removed_iroutines: Int = 0
+       readable var _nb_not_removed_iroutines: Int = 0
+
        # Calling this method will change all iroutines that are dead
        # and put an abort in them
        fun optimize_dead_methods do
                with_each_iroutines !action(i,m) do
                        if not rma.is_iroutine_reachable(i) then
                                i.set_not_reachable(m)
+                               _nb_removed_iroutines = nb_removed_iroutines + 1
+                       else
+                               _nb_not_removed_iroutines = nb_not_removed_iroutines + 1
                        end
                end
        end
+
+       # This method will create a file and output informations about this optimization
+       fun dump_dead_method_optimization(directory_name: String) do
+               var f = new OFStream.open("{directory_name}/{main_module.name}.dmr_opt.log")
+
+               f.write("Nb. dead iroutines removed: {nb_removed_iroutines}\n")
+               f.write("Nb. live iroutines: {nb_not_removed_iroutines}\n")
+
+               f.close
+       end
 end
 
 redef class IRoutine