From 785fdb51081a3333761bb04552614c99ca7ab850 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alexis=20Laferri=C3=A8re?= Date: Mon, 15 Aug 2011 11:09:46 -0400 Subject: [PATCH] ni: adds MMModule::is_extern_hybrid MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This information will be used to generate frontier files with extern if necessary and also by the stub generator. Signed-off-by: Alexis Laferrière --- src/metamodel/abstractmetamodel.nit | 5 +++++ src/syntax/mmbuilder.nit | 3 +++ src/syntax/syntax_base.nit | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/src/metamodel/abstractmetamodel.nit b/src/metamodel/abstractmetamodel.nit index 6edfbd9..111c73d 100644 --- a/src/metamodel/abstractmetamodel.nit +++ b/src/metamodel/abstractmetamodel.nit @@ -153,6 +153,11 @@ class MMModule # Dictionary of global classes var _global_class_by_name: Map[Symbol, MMGlobalClass] = new HashMap[Symbol, MMGlobalClass] + # Is a hybrid module partially implemented in extern code + # It is if it contains a new extern class or an + # extern class declaration + var is_extern_hybrid : Bool writable = false + protected init(name: Symbol, dir: MMDirectory, context: MMContext, loc: Location) do _name = name diff --git a/src/syntax/mmbuilder.nit b/src/syntax/mmbuilder.nit index 494d099..a8a1610 100644 --- a/src/syntax/mmbuilder.nit +++ b/src/syntax/mmbuilder.nit @@ -671,6 +671,9 @@ redef class AStdClassdef if n_kwredef != null then v.error(self, "Redef error: No class {name} is imported. Remove the redef keyword to define a new class.") end + if glob.is_extern then + glob.mmmodule.is_extern_hybrid = true + end for c in _local_class.cshe.direct_greaters do var cg = c.global diff --git a/src/syntax/syntax_base.nit b/src/syntax/syntax_base.nit index 0d9597e..d7da272 100644 --- a/src/syntax/syntax_base.nit +++ b/src/syntax/syntax_base.nit @@ -201,6 +201,10 @@ class MMMethSrcMethod _is_extern = node isa AExternPropdef _is_abstract = node isa ADeferredMethPropdef _extern_name = null + + if is_extern then + mmmodule.is_extern_hybrid = true + end end end -- 1.7.9.5