nitj: implement main call
authorAlexandre Terrasa <alexandre@moz-code.org>
Fri, 10 Jul 2015 00:02:05 +0000 (20:02 -0400)
committerAlexandre Terrasa <alexandre@moz-code.org>
Tue, 21 Jul 2015 21:23:21 +0000 (17:23 -0400)
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

src/compiler/java_compiler.nit

index dfdff67..83495d6 100644 (file)
@@ -266,8 +266,21 @@ class JavaCompiler
                var v = new_visitor("{mainmodule.jname}_Main.java")
                v.add("public class {mainmodule.jname}_Main \{")
                v.add("  public static void main(String[] args) \{")
-               modelbuilder.toolcontext.info("NOT YET IMPLEMENTED", 0)
-               # TODO compile call to Sys::main
+
+               var main_type = mainmodule.sys_type
+               if main_type != null then
+                       var mainmodule = v.compiler.mainmodule
+                       var glob_sys = v.init_instance(main_type)
+                       var main_init = mainmodule.try_get_primitive_method("init", main_type.mclass)
+                       if main_init != null then
+                               v.send(main_init, [glob_sys])
+                       end
+                       var main_method = mainmodule.try_get_primitive_method("run", main_type.mclass) or else
+                               mainmodule.try_get_primitive_method("main", main_type.mclass)
+                       if main_method != null then
+                               v.send(main_method, [glob_sys])
+                       end
+               end
                v.add("  \}")
                v.add("\}")
        end