niti: all fatal errors are catchable, not just aborts
[nit.git] / src / interpreter / naive_interpreter.nit
index 233bdce..66afa45 100644 (file)
@@ -691,9 +691,10 @@ abstract class Instance
        # ASSERT: not self.mtype.is_anchored
        var mtype: MType
 
-       # return true if the instance is the true value.
-       # return false if the instance is the true value.
-       # else aborts
+       # Return `true` if the instance is the `true` value.
+       #
+       # Return `false` if the instance is the `false` value.
+       # Abort if the instance is not a boolean value.
        fun is_true: Bool do abort
 
        # Return true if `self` IS `o` (using the Nit semantic of is)
@@ -748,7 +749,7 @@ class MutableInstance
 end
 
 # Special instance to handle primitives values (int, bool, etc.)
-# The trick it just to encapsulate the <<real>> value
+# The trick is just to encapsulate the “real” value.
 class PrimitiveInstance[E]
        super Instance
 
@@ -820,6 +821,11 @@ redef class ANode
        # `v` is used to know if a colored message is displayed or not
        fun fatal(v: NaiveInterpreter, message: String)
        do
+               # Abort if there is a `catch` block
+               if v.catch_count > 0 then
+                       abort
+               end
+
                if v.modelbuilder.toolcontext.opt_no_color.value == true then
                        sys.stderr.write("Runtime error: {message} ({location.file.filename}:{location.line_start})\n")
                else
@@ -1688,13 +1694,8 @@ end
 redef class AAbortExpr
        redef fun stmt(v)
        do
-               # Abort as asked if there is no `catch` bloc
-               if v.catch_count <= 0 then
-                       fatal(v, "Aborted")
-                       exit(1)
-               else
-                       abort
-               end
+               fatal(v, "Aborted")
+               exit(1)
        end
 end