--- Comment #12 from Don <clugd...@yahoo.com.au> 2012-04-18 10:59:56 PDT ---
(In reply to comment #11)
> (In reply to comment #10)
> > (In reply to comment #9)
> > > No. An extern(C) function does not mean it's a C function. It just
> > > means it
> > > has C linkage. See here: http://dlang.org/attribute.html#linkage
> > >
> > > extern(C) has nothing to do with parameters, only calling conventions.
> > I don't understand that statement. Do you mean 'parameters, only name
> > mangling"
> > ? If so, that that isn't true.
> No, I mean the extern(C) designates linkage and calling convention, it doesn't
> affect the parameters or qualifiers for those parameters. It also doesn't
> C is the language used for implementation.
But C doesn't HAVE a calling convention for non-C types!
extern(C) void foo( void delegate() dg)
DOES NOT MAKE SENSE. It's not C, it's something else.
With one exception: if extern(C) means only "mangle as a C function" then it is
well defined for everything (because C doesn't mangle types). But I think
everybody expects it to include calling convention as well.
There are really two options:
(1) disallow non-C parameters in extern(C) functions
(2) extend the definition of extern(C) to specify what happens with non-C
> > The confusion comes because there are some druntime functions which use C
> > name
> > mangling but the extern(D) calling convention! This is not true of all
> > extern(C) functions.
> Wait, how can a function marked extern(C) not use C calling convention? Are
> these special-cased compiler functions?
Yes. In those special cases, extern(C) just means C name mangling.
I think that's an indicator of how vague the spec is.
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------