On Mon, Apr 28, 2008 at 2:28 AM, Aaron Gray <[EMAIL PROTECTED]> wrote:
> On Mon, Apr 28, 2008 at 2:18 AM, Krzysztof Kowalczyk < > [EMAIL PROTECTED]> wrote: > > > > "Krzysztof Kowalczyk" <[EMAIL PROTECTED]> writes: > > > > > > > The other form works for both msvc and gcc (see > > > > http://codepad.org/VxF4pBHg for a proof (well, a proof that it > > > > compiles with gcc, or at least a version of gcc)) so the #ifdef > > isn't > > > > necessary, just use __VA_ARGS__ version. I verified that it > > compiles > > > > with msvc 2005. > > > > > > Using __VA_ARGS__ is not quite correct with GCC. You should be able > > > to call the _send (or _sendv) macro without supplying any arguments > > > after RCV. The comma preceding __VA_ARGS__ causes a syntax error > > > under GCC when there are no other arguments, but if you use ##ARG it > > > deletes the comma and all is well. > > > > > > Does MSVC compile properly without arguments? > > > > > > i.e. does: > > > > > > _send("abc", 123) > > > > > > cause a syntax error? > > > > Good point. MSVC handles that according to > > http://msdn2.microsoft.com/en-us/library/ms177415(VS.80).aspx > > and this test program, which compiles and works as expected with msvc > > (and doesn't compile on gcc): > > > > #include <stdio.h> > > #define np(s, ...) \ > > printf(s, __VA_ARGS__) > > > > int main(int argc, char **argv) > > { > > int d = 4; > > np("hello\n"); > > np("s %d", d); > > return 0; > > } > > > > So #ifdef is needed after all. Alternatively, all places where > > _send(a,b) is used, could be changed to _send0(a,b). > > > > Here's another possible solution if we are using C99 and have inline > functions :- > > #include <stdarg.h> > > inline oop _send( oop msg, oop rcv, ...) > { > va_list ap; > register oop _r = rcv; > struct __closure *_c; > oop ret; > > va_start( ap, rcv); > _c = (struct __closure *) _libid->bind( msg, _r); > ret = (_c->method)( (oop) _c, _r, _r, ap); > va_end( ap); > return ret; > } > You will probably need a "#define inline __inline" for MS VC. > > This is untested but should work okay. I am not at a state where I can > really test this yet, hopefully I will be able to catch up this week. > > A hacked PoC :- http://codepad.org/8tZyQphW Aaron > > > > > > >
_______________________________________________ fonc mailing list fonc@vpri.org http://vpri.org/mailman/listinfo/fonc