X-Git-Url: http://nitlanguage.org diff --git a/src/analysis/instantiated_type_analysis.nit b/src/analysis/instantiated_type_analysis.nit index f3fb22e..039c779 100644 --- a/src/analysis/instantiated_type_analysis.nit +++ b/src/analysis/instantiated_type_analysis.nit @@ -14,7 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Package containing all bases for instantiated type analysis +# Module containing all bases for instantiated type analysis package instantiated_type_analysis import program @@ -22,6 +22,36 @@ import program redef class Program # This attribute is the InstantiatedTypeAnalysis results readable writable var _ita: nullable InstantiatedTypeAnalysis = null + + # This method will create a file and output the name of all types that are instantiated in it + fun dump_instantiated_types(directory_name: String) do + var f = new OFStream.open("{directory_name}/{main_module.name}.instantiated_types.log") + with_each_live_local_classes !action(c) do + f.write("{c}\n") + end + f.close + end + + # This method will create a file and output the names of all types that are not instantiated in it + fun dump_not_instantiated_types(directory_name: String) do + var f = new OFStream.open("{directory_name}/{main_module.name}.not_instantiated_types.log") + # Must overwrite 'with_each_local_classes' since we are looking at non-instantiated classes + for c in main_module.local_classes do + if not ita.is_class_instantiated(c) then + f.write("{c}\n") + end + end + f.close + end + + # We know which are really live, use that information ! + redef fun with_each_live_local_classes + !action(m: MMLocalClass) + do + for c in main_module.local_classes do + if ita == null or ita.as(not null).is_class_instantiated(c) then action(c) + end + end end # Subclasses of this class would represent an analysis that produces