From b7bc541b09abbac8171e23875de722842a79c7fa Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Tue, 9 Sep 2014 15:34:57 -0400 Subject: [PATCH] modelize: works if abstract, intern and extern are annotations Signed-off-by: Jean Privat --- src/compiler/abstract_compiler.nit | 25 +++++++++++++++++++------ src/frontend/check_annotation.nit | 3 +++ src/modelize/modelize_property.nit | 6 +++--- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/compiler/abstract_compiler.nit b/src/compiler/abstract_compiler.nit index 5bb29e6..a4c55f8 100644 --- a/src/compiler/abstract_compiler.nit +++ b/src/compiler/abstract_compiler.nit @@ -21,6 +21,7 @@ import literal import semantize import platform import c_tools +private import annotation # Add compiling options redef class ToolContext @@ -2143,9 +2144,15 @@ redef class AMethPropdef fun compile_externmeth_to_c(v: AbstractCompilerVisitor, mpropdef: MMethodDef, arguments: Array[RuntimeVariable]): Bool do var externname - var nextern = self.n_extern - if nextern == null then return false - externname = nextern.text.substring(1, nextern.text.length-2) + var at = self.get_single_annotation("extern", v.compiler.modelbuilder) + if at != null then + externname = at.arg_as_string(v.compiler.modelbuilder) + if externname == null then return false + else + var nextern = self.n_extern + if nextern == null then return false + externname = nextern.text.substring(1, nextern.text.length-2) + end if location.file != null then var file = location.file.filename v.add_extern(file) @@ -2172,9 +2179,15 @@ redef class AMethPropdef fun compile_externinit_to_c(v: AbstractCompilerVisitor, mpropdef: MMethodDef, arguments: Array[RuntimeVariable]): Bool do var externname - var nextern = self.n_extern - if nextern == null then return false - externname = nextern.text.substring(1, nextern.text.length-2) + var at = self.get_single_annotation("extern", v.compiler.modelbuilder) + if at != null then + externname = at.arg_as_string(v.compiler.modelbuilder) + if externname == null then return false + else + var nextern = self.n_extern + if nextern == null then return false + externname = nextern.text.substring(1, nextern.text.length-2) + end if location.file != null then var file = location.file.filename v.add_extern(file) diff --git a/src/frontend/check_annotation.nit b/src/frontend/check_annotation.nit index 6249e91..6178a39 100644 --- a/src/frontend/check_annotation.nit +++ b/src/frontend/check_annotation.nit @@ -84,6 +84,9 @@ writable cached nosuper old_style_init +abstract +intern +extern pkgconfig c_compiler_option diff --git a/src/modelize/modelize_property.nit b/src/modelize/modelize_property.nit index db77b76..f0c46a5 100644 --- a/src/modelize/modelize_property.nit +++ b/src/modelize/modelize_property.nit @@ -724,9 +724,9 @@ redef class AMethPropdef msignature = new MSignature(mparameters, ret_type) mpropdef.msignature = msignature - mpropdef.is_abstract = self isa ADeferredMethPropdef - mpropdef.is_intern = self isa AInternMethPropdef - mpropdef.is_extern = self isa AExternPropdef + mpropdef.is_abstract = self isa ADeferredMethPropdef or self.get_single_annotation("abstract", modelbuilder) != null + mpropdef.is_intern = self isa AInternMethPropdef or self.get_single_annotation("intern", modelbuilder) != null + mpropdef.is_extern = self isa AExternPropdef or self.n_extern_code_block != null or self.get_single_annotation("extern", modelbuilder) != null end redef fun check_signature(modelbuilder) -- 1.7.9.5