sep_comp: SeparateRuntimeFunction::compile_to_c only declare if module is dead
[nit.git] / src / rapid_type_analysis.nit
index 734a76a..a89798f 100644 (file)
@@ -82,6 +82,10 @@ class RapidTypeAnalysis
        # Live methods.
        var live_methods = new HashSet[MMethod]
 
+       # Live mmodules.
+       # Those with a live method definitions (see `live_methoddefs`)
+       var live_mmodules = new HashSet[MModule]
+
        # Live callsites.
        var live_callsites = new HashSet[CallSite]
 
@@ -213,6 +217,7 @@ class RapidTypeAnalysis
                force_alive("Float")
                force_alive("Char")
                force_alive("Pointer")
+               force_alive("Byte")
 
                while not todo.is_empty do
                        var mmethoddef = todo.shift
@@ -358,7 +363,7 @@ class RapidTypeAnalysis
                        for npropdef in modelbuilder.collect_attr_propdef(cd) do
                                if not npropdef.has_value then continue
 
-                               var mpropdef = npropdef.mpropdef.as(not null)
+                               var mpropdef = npropdef.mreadpropdef.as(not null)
                                var v = new RapidTypeVisitor(self, bound_mtype, mpropdef)
                                v.enter_visit(npropdef.n_expr)
                                v.enter_visit(npropdef.n_block)
@@ -388,6 +393,7 @@ class RapidTypeAnalysis
        do
                if live_methoddefs.has(mpropdef) then return
                live_methoddefs.add(mpropdef)
+               live_mmodules.add(mpropdef.mclassdef.mmodule)
                todo.add(mpropdef)
 
                var mproperty = mpropdef.mproperty
@@ -525,6 +531,13 @@ redef class AIntExpr
        end
 end
 
+redef class AByteExpr
+       redef fun accept_rapid_type_visitor(v)
+       do
+               v.add_type(self.mtype.as(MClassType))
+       end
+end
+
 redef class AFloatExpr
        redef fun accept_rapid_type_visitor(v)
        do
@@ -568,7 +581,7 @@ redef class ASuperstringExpr
        redef fun accept_rapid_type_visitor(v)
        do
                var mmodule = v.analysis.mainmodule
-               var object_type = mmodule.object_type
+               var object_type = mmodule.string_type
                var arraytype = mmodule.array_type(object_type)
                v.add_type(arraytype)
                var nattype = mmodule.native_array_type(object_type)