various phases: more robust for keep-going
authorJean Privat <jean@pryen.org>
Fri, 3 Apr 2015 02:30:22 +0000 (09:30 +0700)
committerJean Privat <jean@pryen.org>
Fri, 3 Apr 2015 06:03:45 +0000 (13:03 +0700)
Entry point of most phases return gracefully in case of missing info.
Instead of crashing.

Signed-off-by: Jean Privat <jean@pryen.org>

src/ffi/extern_classes.nit
src/frontend/check_annotation.nit
src/frontend/div_by_zero.nit
src/frontend/no_warning.nit
src/frontend/serialization_phase.nit
src/modelize/modelize_class.nit
src/modelize/modelize_property.nit
src/semantize/auto_super_init.nit

index bc4f0c4..4e8f45d 100644 (file)
@@ -68,10 +68,11 @@ private class ExternClassesTypingPhaseModel
                if not nclassdef isa AStdClassdef then return
 
                var mclassdef = nclassdef.mclassdef
-               var mclass = nclassdef.mclass
+               if mclassdef == null then return
+               var mclass = mclassdef.mclass
 
                # We only need to do this once per class
-               if mclass.intro != mclassdef then return
+               if not mclassdef.is_intro then return
 
                if mclass.kind != extern_kind then return
 
index 36244f6..ffba4ad 100644 (file)
@@ -40,7 +40,7 @@ private class CheckAnnotationPhase
        do
                # Get the mmodule
                var mmodule = nmodule.mmodule
-               assert mmodule != null
+               if mmodule == null then return
                self.mmodule = mmodule
 
                # If no decl block then quit
@@ -112,7 +112,7 @@ platform
                if primtives_annotations.has(name) then return
 
                var mmodule = self.mmodule
-               assert mmodule != null
+               if mmodule == null then return
 
                # Lazily build the full user-list
                var annots = user_annotations.get_or_null(mmodule)
index 4a8cfb4..6001f01 100644 (file)
@@ -37,7 +37,8 @@ private class DivByZeroPhase
        redef fun process_nmodule(nmodule)
        do
                # The AST node is not enough, we need also the associated model element
-               var mmodule = nmodule.mmodule.as(not null)
+               var mmodule = nmodule.mmodule
+               if mmodule == null then return
                # For the specific job we have, the simpler it to launch a visitor on
                # all elements of the AST.
                var visitor = new DivByZeroVisitor(toolcontext, mmodule)
index 931440e..bc59d8c 100644 (file)
@@ -30,7 +30,7 @@ private class NoWarningPhase
        do
                # Get the mmodule
                var mmodule = nmodule.mmodule
-               assert mmodule != null
+               if mmodule == null then return
 
                var source = nmodule.location.file
 
index 2b68eea..0d7e4ec 100644 (file)
@@ -184,7 +184,9 @@ private class SerializationPhasePostModel
        redef fun process_nmodule(nmodule)
        do
                for npropdef in nmodule.inits_to_retype do
-                       var v = new PreciseTypeVisitor(npropdef, npropdef.mpropdef.mclassdef, toolcontext)
+                       var mpropdef = npropdef.mpropdef
+                       if mpropdef == null then continue # skip error
+                       var v = new PreciseTypeVisitor(npropdef, mpropdef.mclassdef, toolcontext)
                        npropdef.accept_precise_type_visitor v
                end
        end
index c779df9..ea89bb5 100644 (file)
@@ -293,7 +293,8 @@ redef class ModelBuilder
                # Force building recursively
                if nmodule.build_classes_is_done then return
                nmodule.build_classes_is_done = true
-               var mmodule = nmodule.mmodule.as(not null)
+               var mmodule = nmodule.mmodule
+               if mmodule == null then return
                for imp in mmodule.in_importation.direct_greaters do
                        var nimp = mmodule2node(imp)
                        if nimp != null then build_classes(nimp)
index bb0184f..d2625cd 100644 (file)
@@ -86,7 +86,8 @@ redef class ModelBuilder
                # Force building recursively
                if nclassdef.build_properties_is_done then return
                nclassdef.build_properties_is_done = true
-               var mclassdef = nclassdef.mclassdef.as(not null)
+               var mclassdef = nclassdef.mclassdef
+               if mclassdef == null then return # skip error
                if mclassdef.in_hierarchy == null then return # Skip error
                for superclassdef in mclassdef.in_hierarchy.direct_greaters do
                        if not mclassdef2nclassdef.has_key(superclassdef) then continue
index d60e2a3..07b4f46 100644 (file)
@@ -56,8 +56,10 @@ redef class AMethPropdef
        # Collect initializers and build the auto-init
        fun do_auto_super_init(modelbuilder: ModelBuilder)
        do
-               var mclassdef = self.parent.as(AClassdef).mclassdef.as(not null)
-               var mpropdef = self.mpropdef.as(not null)
+               var mclassdef = self.parent.as(AClassdef).mclassdef
+               if mclassdef == null then return # skip error
+               var mpropdef = self.mpropdef
+               if mpropdef == null then return # skip error
                var mmodule = mpropdef.mclassdef.mmodule
                var anchor = mclassdef.bound_mtype
                var recvtype = mclassdef.mclass.mclass_type