From 5fff5f544d932039fa11d1dd37b20949c937cb13 Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Fri, 29 May 2015 12:05:17 -0400 Subject: [PATCH] modelize: move `autoinit` management on method into AMethPropdef Signed-off-by: Jean Privat --- src/modelize/modelize_property.nit | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/modelize/modelize_property.nit b/src/modelize/modelize_property.nit index bd14308..a5a8ef9 100644 --- a/src/modelize/modelize_property.nit +++ b/src/modelize/modelize_property.nit @@ -182,18 +182,11 @@ redef class ModelBuilder var initializers = new Array[MProperty] for npropdef in nclassdef.n_propdefs do if npropdef isa AMethPropdef then + if not npropdef.is_autoinit then continue # Skip non tagged autoinit if npropdef.mpropdef == null then return # Skip broken method - var at = npropdef.get_single_annotation("autoinit", self) - if at == null then continue # Skip non tagged init - var sig = npropdef.mpropdef.msignature if sig == null then continue # Skip broken method - if not npropdef.mpropdef.is_intro then - self.error(at, "Error: `autoinit` cannot be set on redefinitions.") - continue - end - for param in sig.mparameters do var ret_type = param.mtype var mparameter = new MParameter(param.name, ret_type, false, ret_type isa MNullableType) @@ -743,6 +736,8 @@ end redef class AMethPropdef redef type MPROPDEF: MMethodDef + # Is the method annotated `autoinit`? + var is_autoinit = false # Can self be used as a root init? private fun look_like_a_root_init(modelbuilder: ModelBuilder, mclassdef: MClassDef): Bool @@ -988,6 +983,15 @@ redef class AMethPropdef # Check annotations var at = self.get_single_annotation("lazy", modelbuilder) if at != null then modelbuilder.error(at, "Syntax Error: `lazy` must be used on attributes.") + + var atautoinit = self.get_single_annotation("autoinit", modelbuilder) + if atautoinit != null then + if not mpropdef.is_intro then + modelbuilder.error(atautoinit, "Error: `autoinit` cannot be set on redefinitions.") + else + self.is_autoinit = true + end + end end redef fun check_signature(modelbuilder) -- 1.7.9.5