From: Jean Privat Date: Tue, 15 Dec 2015 22:24:25 +0000 (-0500) Subject: interpreter: a method can be extern and intern, extern is used as a fallback X-Git-Tag: v0.8~31^2~1 X-Git-Url: http://nitlanguage.org interpreter: a method can be extern and intern, extern is used as a fallback Signed-off-by: Jean Privat --- diff --git a/src/interpreter/naive_interpreter.nit b/src/interpreter/naive_interpreter.nit index 189f293..161ded2 100644 --- a/src/interpreter/naive_interpreter.nit +++ b/src/interpreter/naive_interpreter.nit @@ -876,21 +876,27 @@ redef class AMethPropdef v.call(superpd, arguments) end + # First, try intern if mpropdef.is_intern or mpropdef.is_extern then var res = intern_call(v, mpropdef, arguments) if res != v.error_instance then return res end - + # Then, try extern + if mpropdef.is_extern then + var res = call_extern(v, mpropdef, arguments, f) + if res != v.error_instance then return res + end + # Else try block if n_block != null then v.stmt(self.n_block) return null end + # Fail if nothing succeed if mpropdef.is_intern then fatal(v, "NOT YET IMPLEMENTED intern {mpropdef}") else if mpropdef.is_extern then - var res = call_extern(v, mpropdef, arguments, f) - if res != v.error_instance then return res + fatal(v, "NOT YET IMPLEMENTED extern {mpropdef}") else fatal(v, "NOT YET IMPLEMENTED {mpropdef}") end @@ -900,7 +906,6 @@ redef class AMethPropdef # 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