From: Jean Privat Date: Fri, 3 Apr 2015 02:30:22 +0000 (+0700) Subject: various phases: more robust for keep-going X-Git-Tag: v0.7.4~40^2~14 X-Git-Url: http://nitlanguage.org various phases: more robust for keep-going Entry point of most phases return gracefully in case of missing info. Instead of crashing. Signed-off-by: Jean Privat --- diff --git a/src/ffi/extern_classes.nit b/src/ffi/extern_classes.nit index bc4f0c4..4e8f45d 100644 --- a/src/ffi/extern_classes.nit +++ b/src/ffi/extern_classes.nit @@ -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 diff --git a/src/frontend/check_annotation.nit b/src/frontend/check_annotation.nit index 36244f6..ffba4ad 100644 --- a/src/frontend/check_annotation.nit +++ b/src/frontend/check_annotation.nit @@ -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) diff --git a/src/frontend/div_by_zero.nit b/src/frontend/div_by_zero.nit index 4a8cfb4..6001f01 100644 --- a/src/frontend/div_by_zero.nit +++ b/src/frontend/div_by_zero.nit @@ -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) diff --git a/src/frontend/no_warning.nit b/src/frontend/no_warning.nit index 931440e..bc59d8c 100644 --- a/src/frontend/no_warning.nit +++ b/src/frontend/no_warning.nit @@ -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 diff --git a/src/frontend/serialization_phase.nit b/src/frontend/serialization_phase.nit index 2b68eea..0d7e4ec 100644 --- a/src/frontend/serialization_phase.nit +++ b/src/frontend/serialization_phase.nit @@ -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 diff --git a/src/modelize/modelize_class.nit b/src/modelize/modelize_class.nit index c779df9..ea89bb5 100644 --- a/src/modelize/modelize_class.nit +++ b/src/modelize/modelize_class.nit @@ -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) diff --git a/src/modelize/modelize_property.nit b/src/modelize/modelize_property.nit index bb0184f..d2625cd 100644 --- a/src/modelize/modelize_property.nit +++ b/src/modelize/modelize_property.nit @@ -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 diff --git a/src/semantize/auto_super_init.nit b/src/semantize/auto_super_init.nit index d60e2a3..07b4f46 100644 --- a/src/semantize/auto_super_init.nit +++ b/src/semantize/auto_super_init.nit @@ -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