global: create a new module global to gather (and nest) global analysis
[nit.git] / src / analysis / remove_out_of_init_get_test.nit
diff --git a/src/analysis/remove_out_of_init_get_test.nit b/src/analysis/remove_out_of_init_get_test.nit
deleted file mode 100644 (file)
index 0685777..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-# This file is part of NIT ( http://www.nitlanguage.org ).
-#
-# Copyright 2009 Jean-Sebastien Gelinas <calestar@gmail.com>
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# This module introduces an optimization that removes 'get' tests when
-# not reachable from an initializer
-package remove_out_of_init_get_test
-
-import reachable_from_init_method_analysis
-
-redef class Program
-       readable var _nb_optimized_isset: Int = 0
-
-       # Calling this method will remove all 'isset' that were generated automaticaly
-       # before a attribute read if this attribute read is done in a method that
-       # cannot be reached by a initializer
-       fun optimize_out_of_init_getters do
-               with_each_iroutines !action(i,m) do
-                       if not rfima.is_iroutine_reachable_from_init(i) then
-                               var remover = new GetterTestRemover
-                               remover.visit_iroutine(i)
-                               _nb_optimized_isset = nb_optimized_isset + remover.nb_optimized_isset
-                       end
-               end
-       end
-
-       # This method will create a file and output informations about this optimization
-       fun dump_out_of_init_information(directory_name: String) do
-               var f = new OFStream.open("{directory_name}/{main_module.name}.out_of_init_opt.log")
-               var nb_not_optimized = 0
-
-               with_each_iroutines !action(i,m) do
-                       var counter = new IssetCounter
-                       counter.visit_iroutine(i)
-                       nb_not_optimized = nb_not_optimized + counter.nb_isset
-               end
-
-               f.write("Nb. optimized isset: {nb_optimized_isset}\n")
-               f.write("Nb. not optimized: {nb_not_optimized}\n")
-
-               f.close
-       end
-end
-
-class IssetCounter
-       super ICodeVisitor
-       readable var _nb_isset: Int = 0
-
-       redef fun visit_icode(ic)
-       do
-               if ic isa IAttrIsset then
-                       _nb_isset = nb_isset + 1
-               end
-
-               super
-       end
-end
-
-class GetterTestRemover
-       super ICodeVisitor
-       readable var _nb_optimized_isset: Int = 0
-
-       redef fun visit_icode(ic)
-       do
-               # Replace 'x = isset(y)' by 'x = true'
-               if ic isa IAttrIsset then
-                       var result = ic.result
-                       assert result != null
-                       var e =  new IBoolValue(true)
-                       e.result = result
-                       current_icode.insert_before(e)
-                       current_icode.delete
-                       _nb_optimized_isset = nb_optimized_isset + 1
-               end
-
-               super
-       end
-end