+ # Starts the interpreter on the main module of a program
+ fun start(mainmodule: MModule) do
+ var interpreter = self
+ var sys_type = mainmodule.sys_type
+ if sys_type == null then return # no class Sys
+ var mainobj = new MutableInstance(sys_type)
+ interpreter.mainobj = mainobj
+ interpreter.init_instance(mainobj)
+ var initprop = mainmodule.try_get_primitive_method("init", sys_type.mclass)
+ if initprop != null then
+ interpreter.send(initprop, [mainobj])
+ end
+ var mainprop = mainmodule.try_get_primitive_method("run", sys_type.mclass) or else
+ mainmodule.try_get_primitive_method("main", sys_type.mclass)
+ if mainprop != null then
+ interpreter.send(mainprop, [mainobj])
+ end
+ end
+