nitg-s: fix abstract methods in extern classes and add test
authorAlexis Laferrière <alexis.laf@xymus.net>
Wed, 22 Jan 2014 20:08:04 +0000 (15:08 -0500)
committerAlexis Laferrière <alexis.laf@xymus.net>
Wed, 22 Jan 2014 20:10:39 +0000 (15:10 -0500)
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

src/separate_compiler.nit
tests/sav/test_extern_class_with_abstract_method.res [new file with mode: 0644]
tests/test_extern_class_with_abstract_method.nit [new file with mode: 0644]

index 0606c4a..c80749a 100644 (file)
@@ -1405,6 +1405,8 @@ class SeparateCompilerVisitor
                self.add_decl("const char* {res};")
                if value.mtype.ctype == "val*" then
                        self.add "{res} = {value} == NULL ? \"null\" : {value}->type->name;"
+               else if value.mtype isa MClassType and value.mtype.as(MClassType).mclass.kind == extern_kind then
+                       self.add "{res} = \"{value.mtype.as(MClassType).mclass}\";"
                else
                        self.require_declaration("type_{value.mtype.c_name}")
                        self.add "{res} = type_{value.mtype.c_name}.name;"
diff --git a/tests/sav/test_extern_class_with_abstract_method.res b/tests/sav/test_extern_class_with_abstract_method.res
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/test_extern_class_with_abstract_method.nit b/tests/test_extern_class_with_abstract_method.nit
new file mode 100644 (file)
index 0000000..1e89a03
--- /dev/null
@@ -0,0 +1,11 @@
+redef extern class Pointer
+       fun foo is abstract
+end
+
+class B
+       fun baz is abstract
+end
+
+extern class A
+       fun bar is abstract
+end