src: intro `call_extern` in interpreter
authorAlexis Laferrière <alexis.laf@xymus.net>
Fri, 5 Jun 2015 13:48:53 +0000 (09:48 -0400)
committerAlexis Laferrière <alexis.laf@xymus.net>
Mon, 8 Jun 2015 18:58:53 +0000 (14:58 -0400)
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

src/interpreter/naive_interpreter.nit

index 16e0b48..b1cd48d 100644 (file)
@@ -800,13 +800,21 @@ redef class AMethPropdef
                if mpropdef.is_intern then
                        fatal(v, "NOT YET IMPLEMENTED intern {mpropdef}")
                else if mpropdef.is_extern then
-                       fatal(v, "NOT YET IMPLEMENTED extern {mpropdef}")
+                       var res = call_extern(v, mpropdef, arguments, f)
+                       if res != v.error_instance then return res
                else
                        fatal(v, "NOT YET IMPLEMENTED <wat?> {mpropdef}")
                end
                abort
        end
 
+       # Call this extern method
+       protected fun call_extern(v: NaiveInterpreter, mpropdef: MMethodDef, arguments: Array[Instance], f: Frame): nullable Instance
+       do
+               fatal(v, "NOT YET IMPLEMENTED extern {mpropdef}")
+               return v.error_instance
+       end
+
        # Interprets a intern or a shortcut extern method.
        # Returns the result for a function, `null` for a procedure, or `error_instance` if the method is unknown.
        private fun intern_call(v: NaiveInterpreter, mpropdef: MMethodDef, args: Array[Instance]): nullable Instance