From d22116b9a46745c111a8b153c51d053c7d0de247 Mon Sep 17 00:00:00 2001 From: Alexandre Terrasa Date: Fri, 17 Jul 2015 13:41:05 -0400 Subject: [PATCH] nitj: generate runtime class structure stubs Signed-off-by: Alexandre Terrasa --- src/compiler/java_compiler.nit | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/compiler/java_compiler.nit b/src/compiler/java_compiler.nit index 1dcb169..15baa05 100644 --- a/src/compiler/java_compiler.nit +++ b/src/compiler/java_compiler.nit @@ -210,9 +210,22 @@ class JavaCompiler # compile java classes used to represents the runtime model of the program rt_model.compile_rtmodel(self) - # TODO compile classes and methods + # compile class structures + compile_mclasses_to_java + + # TODO compile methods modelbuilder.toolcontext.info("NOT YET IMPLEMENTED", 0) end + + # Generate a `RTClass` for each `MClass` found in model + # + # This is a global phase because we need to know all the program to build + # attributes, fill vft and type table. + fun compile_mclasses_to_java do + for mclass in mainmodule.model.mclasses do + mclass.compile_to_java(new_visitor("{mclass.rt_name}.java")) + end + end end # The class visiting the AST @@ -333,6 +346,24 @@ redef class MClass # Runtime name private fun rt_name: String do return "RTClass_{intro.mmodule.jname}_{jname}" + + # Generate a Java RTClass for a Nit MClass + fun compile_to_java(v: JavaCompilerVisitor) do + v.add("public class {rt_name} extends RTClass \{") + v.add(" protected static RTClass instance;") + v.add(" private {rt_name}() \{") + v.add(" this.class_name = \"{name}\";") + # TODO compile_vft(v) + # TODO compile_type_table(v) + v.add(" \}") + v.add(" public static RTClass get{rt_name}() \{") + v.add(" if(instance == null) \{") + v.add(" instance = new {rt_name}();") + v.add(" \}") + v.add(" return instance;") + v.add(" \}") + v.add("\}") + end end redef class MMethodDef -- 1.7.9.5