nit: restrict some module visibility
[nit.git] / src / analysis / analysis.nit
index 01e7104..4ae48f6 100644 (file)
@@ -24,24 +24,32 @@ import icode_dump
 import program
 
 # Local Analysis/Optimization
-import allocate_iregister_slots
-import inline_methods
+private import allocate_iregister_slots
+private import inline_methods
 
 # Global Analysis types
-import instantiated_type_analysis
-import reachable_method_analysis
-import reachable_as_init
+private import instantiated_type_analysis
+private import reachable_method_analysis
+private import reachable_as_init
+private import reachable_from_init_method_analysis
 
 # Global Analysis implementation
-import cha_analysis
-import rta_analysis
+private import cha_analysis
+private import rta_analysis
+private import reachable_as_init_impl
+private import reachable_from_init_method_analysis_impl
 
 # Global Optimizations
-import dead_method_removal
+private import dead_method_removal
+private import inline_get_and_set
+private import remove_out_of_init_get_test
 
 redef class ToolContext
        readable writable var _global_callgraph: String = "rta"
        readable writable var _no_dead_method_removal: Bool = false
+       readable writable var _no_inline_get_set: Bool = false
+       readable writable var _no_callgraph_from_init: Bool = false
+       readable writable var _no_out_of_init_get_test_removal: Bool = false
 end
 
 redef class Program
@@ -63,11 +71,39 @@ redef class Program
                # Ensure we have all analysis created
                if rma == null then rma = new DefaultReachableMethodAnalysis
                if ita == null then ita = new DefaultInstantiatedTypeAnalysis
+
+               var rai_builder = new ReachableAsInitBuilder(self)
+               rai_builder.work
+               rai = rai_builder.context
+
+               if not tc.no_callgraph_from_init then
+                       var b = new RFIMABuilder(self)
+                       b.work
+                       rfima = b.context
+               end
+
+               if rfima == null then rfima = new DefaultReachableFromInitMethodAnalysis
        end
+
        # This method will optimize the program (in global compilation only)
-       fun do_global_optimizations do
+       # Those are done before analysis
+       fun do_global_pre_analysis_optimizations do
+               assert tc.global
+               if not tc.no_inline_get_set then inline_get_set
+       end
+
+       # This method will optimize the program (in global compilation only)
+       # Those are done after analysis
+       fun do_global_post_analysis_optimizations do
                assert tc.global
                if not tc.no_dead_method_removal then optimize_dead_methods
+               if not tc.no_out_of_init_get_test_removal then optimize_out_of_init_getters
+       end
+
+       fun dump_global_optimizations_information(directory_name: String) do
+               dump_out_of_init_information(directory_name)
+               dump_dead_method_optimization(directory_name)
+               dump_inline_get_set(directory_name)
        end
 
        # This method will create log files storing analysis information
@@ -76,6 +112,9 @@ redef class Program
                dump_unreachable_methods(directory_name, tc.global_callgraph)
                dump_instantiated_types(directory_name)
                dump_not_instantiated_types(directory_name)
+               dump_reachable_as_init_methods(directory_name)
+               dump_reachable_methods_from_init(directory_name)
+               dump_unreachable_methods_from_init(directory_name)
        end
 end