This is somewhat mysterious bug I ran into. I call it a bug, though what it does is possibly sensible. Anyway, just from looking at it you will never figure it out. :)
You probably need the help of the compiler. It produces the following warning - rightfully so, the resultant program crashes:
warning: incompatible pointer types passing '__va_list_tag **' (aka 'struct __va_list_tag **') to parameter of type 'va_list *' (aka '__builtin_va_list *') [-Wincompatible-pointer-types]
init_parse_context( &context, &args);
more.m:19:43: note: passing argument to parameter 'args' here
1 warning generated.
Now why is this weird ? Obviously parse() just does, what is done in +test directly namely:
What is interesting is is, that a "passed" va_list isn't of type va_list anymore but instead of type struct __va_list_tag *. Weird and unexpected and in terms of my mental model of C-types wrong. But maybe necessary in terms of stdarg implementation ?