import semantize
import platform
import c_tools
+private import annotation
# Add compiling options
redef class ToolContext
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)
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)
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)