nitc :: MExplicitCall :: csignature
# Signature of this call in C as seen by user
fun csignature: String
do
var mproperty = self.mproperty
if mproperty isa MMethod then
var signature = mproperty.intro.msignature
assert signature != null
var creturn_type
if mproperty.is_init then
creturn_type = recv_mtype.cname
else if signature.return_mtype != null then
var ret_mtype = signature.return_mtype
ret_mtype = ret_mtype.resolve_for(recv_mtype, recv_mtype, from_mmodule, true)
creturn_type = ret_mtype.cname
else
creturn_type = "void"
end
var cname
if mproperty.is_init then
if mproperty.name == "init" or mproperty.name == "new" or mproperty.name == "defaultinit" then
cname = "new_{recv_mtype.mangled_cname}"
else
cname = "new_{recv_mtype.mangled_cname}_{mproperty.short_cname}"
end
else
cname = "{recv_mtype.mangled_cname}_{mproperty.short_cname}"
end
var cparams = new List[String]
if not mproperty.is_init then
cparams.add( "{recv_mtype.cname} self" )
end
for p in signature.mparameters do
var param_mtype = p.mtype.resolve_for(recv_mtype, recv_mtype, from_mmodule, true)
cparams.add( "{param_mtype.cname} {p.name}" )
end
return "{creturn_type} {cname}( {cparams.join(", ")} )"
else
print "Type of callback from foreign code not yet supported."
abort
end
end
src/nitni/nitni_callbacks.nit:201,2--245,4