From: Jean Privat Date: Wed, 10 Feb 2010 17:52:16 +0000 (-0500) Subject: metamodel: move the extern name of a method in the metamodel X-Git-Tag: v0.4~35 X-Git-Url: http://nitlanguage.org metamodel: move the extern name of a method in the metamodel Signed-off-by: Jean Privat --- diff --git a/src/metamodel/abstractmetamodel.nit b/src/metamodel/abstractmetamodel.nit index 546b9fd..9d93d37 100644 --- a/src/metamodel/abstractmetamodel.nit +++ b/src/metamodel/abstractmetamodel.nit @@ -661,6 +661,9 @@ special MMLocalProperty # Is the method abstract fun is_abstract: Bool is abstract + + # Is the method extern, if yes what is the extern_name + fun extern_name: nullable String is abstract end # Concrete local classes diff --git a/src/syntax/icode_generation.nit b/src/syntax/icode_generation.nit index 0d60974..b5de2be 100644 --- a/src/syntax/icode_generation.nit +++ b/src/syntax/icode_generation.nit @@ -397,11 +397,7 @@ redef class AExternMethPropdef redef fun fill_iroutine(v, method) do var params = v.iroutine.params - var ename = "{method.module.name}_{method.local_class.name}_{method.local_class.name}_{method.name}_{method.signature.arity}" - if n_extern != null then - ename = n_extern.text - ename = ename.substring(1, ename.length-2) - end + var ename = method.extern_name.as(not null) var sig = method.signature assert params.length == sig.arity + 1 var args = new Array[String] diff --git a/src/syntax/mmbuilder.nit b/src/syntax/mmbuilder.nit index d296fbb..585c70c 100644 --- a/src/syntax/mmbuilder.nit +++ b/src/syntax/mmbuilder.nit @@ -1050,6 +1050,21 @@ redef class AMainMethPropdef end end +redef class AExternMethPropdef + redef fun accept_property_verifier(v) + do + super # Compute signature + var ename: String + if n_extern != null then + ename = n_extern.text + ename = ename.substring(1, ename.length-2) + else + ename = "{method.module.name}_{method.local_class.name}_{method.local_class.name}_{method.name}_{method.signature.arity}" + end + method.extern_name = ename + end +end + redef class ATypePropdef redef fun prop do return _prop.as(not null) var _prop: nullable MMSrcTypeProperty diff --git a/src/syntax/syntax_base.nit b/src/syntax/syntax_base.nit index f4060f1..2d0ef27 100644 --- a/src/syntax/syntax_base.nit +++ b/src/syntax/syntax_base.nit @@ -148,6 +148,7 @@ class MMSrcMethod special MMMethod redef fun is_intern do return false redef fun is_abstract do return false + redef fun extern_name do return null end # Concrete NIT source method for an automatic accesor @@ -185,6 +186,7 @@ special MMSrcMethod redef readable var _is_init: Bool redef readable var _is_intern: Bool redef readable var _is_abstract: Bool + redef readable writable var _extern_name: nullable String # Will be computed during MMBuilder redef fun node: nullable AMethPropdef do return module.nodes(self).as(nullable AMethPropdef) init(name: Symbol, cla: MMLocalClass, n: nullable AMethPropdef) do @@ -193,6 +195,7 @@ special MMSrcMethod _is_init = node isa AConcreteInitPropdef _is_intern = node isa AInternMethPropdef _is_abstract = node isa ADeferredMethPropdef + _extern_name = null end end