mirror of
https://github.com/python/cpython.git
synced 2025-09-26 10:19:53 +00:00
support "O&" taking an object constructor a void*
This commit is contained in:
parent
1919ca7b28
commit
d1b9393ba5
1 changed files with 10 additions and 2 deletions
|
@ -110,6 +110,7 @@ static int countformat(format, endchar)
|
||||||
level--;
|
level--;
|
||||||
break;
|
break;
|
||||||
case '#':
|
case '#':
|
||||||
|
case '&':
|
||||||
case ',':
|
case ',':
|
||||||
case ':':
|
case ':':
|
||||||
case ' ':
|
case ' ':
|
||||||
|
@ -268,7 +269,7 @@ do_mkvalue(p_format, p_va)
|
||||||
|
|
||||||
case 'f':
|
case 'f':
|
||||||
case 'd':
|
case 'd':
|
||||||
return newfloatobject((double)va_arg(*p_va, double));
|
return newfloatobject((double)va_arg(*p_va, va_double));
|
||||||
|
|
||||||
case 'c':
|
case 'c':
|
||||||
{
|
{
|
||||||
|
@ -303,7 +304,14 @@ do_mkvalue(p_format, p_va)
|
||||||
|
|
||||||
case 'S':
|
case 'S':
|
||||||
case 'O':
|
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;
|
object *v;
|
||||||
v = va_arg(*p_va, object *);
|
v = va_arg(*p_va, object *);
|
||||||
if (v != NULL)
|
if (v != NULL)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue