summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Python/modsupport.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/Python/modsupport.c b/Python/modsupport.c
index 71bbf6c..518d433 100644
--- a/Python/modsupport.c
+++ b/Python/modsupport.c
@@ -110,6 +110,7 @@ static int countformat(format, endchar)
level--;
break;
case '#':
+ case '&':
case ',':
case ':':
case ' ':
@@ -268,7 +269,7 @@ do_mkvalue(p_format, p_va)
case 'f':
case 'd':
- return newfloatobject((double)va_arg(*p_va, double));
+ return newfloatobject((double)va_arg(*p_va, va_double));
case 'c':
{
@@ -303,7 +304,14 @@ do_mkvalue(p_format, p_va)
case 'S':
case 'O':
- {
+ if (**p_format == '&') {
+ typedef object *(*converter)(void *);
+ converter func = va_arg(*p_va, converter);
+ void *arg = va_arg(*p_va, void *);
+ ++*p_format;
+ return (*func)(arg);
+ }
+ else {
object *v;
v = va_arg(*p_va, object *);
if (v != NULL)