metamodel: rename 'universal' to 'enum'
[nit.git] / src / analysis / reachable_method_analysis.nit
index 75c91ea..a7ac075 100644 (file)
@@ -14,7 +14,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Package containing all bases for the reachable method analysis
+# Module containing all bases for the reachable method analysis
 package reachable_method_analysis
 
 import icode
@@ -23,6 +23,28 @@ import program
 redef class Program
        # This attribute is the ReachableMethodAnalysis results 
        readable writable var _rma: nullable ReachableMethodAnalysis = null
+
+       # This method will create a file and output all reachable method names in it
+       fun dump_reachable_methods(directory_name: String, algo: String) do
+               var f = new OFStream.open("{directory_name}/{main_module.name}.reachable_methods.{algo}.log")
+               with_each_methods !action(m) do
+                       if rma.is_method_reachable(m) then
+                               f.write("{m.full_name}\n")
+                       end
+               end
+               f.close
+       end
+
+       # This method will create a file and output all unreachable method names in it
+       fun dump_unreachable_methods(directory_name: String, algo: String) do
+               var f = new OFStream.open("{directory_name}/{main_module.name}.unreachable_methods.{algo}.log")
+               with_each_methods !action(m) do
+                       if not rma.is_method_reachable(m) then
+                               f.write("{m.full_name}\n")
+                       end
+               end
+               f.close
+       end
 end
 
 # Subclasses of this class would represent an analysis that produces
@@ -35,7 +57,7 @@ end
 
 # Default behavior is to say that all methods/iroutines are reachable
 class DefaultReachableMethodAnalysis
-special ReachableMethodAnalysis
+       super ReachableMethodAnalysis
        redef fun is_iroutine_reachable(ir: nullable IRoutine): Bool do return true
        redef fun is_method_reachable(method: MMMethod): Bool do return true