[Python-checkins] python/dist/src/Python getargs.c,2.106,2.107
birkenfeld@users.sourceforge.net
birkenfeld at users.sourceforge.net
Wed Sep 14 21:29:57 CEST 2005
- Previous message: [Python-checkins] python/dist/src/Modules grpmodule.c, 2.22, 2.22.4.1 makexp_aix, 2.2, 2.2.50.1 pwdmodule.c, 1.39, 1.39.4.1 signalmodule.c, 2.76, 2.76.2.1 socketmodule.c, 1.311.2.1, 1.311.2.2 socketmodule.h, 1.12, 1.12.4.1
- Next message: [Python-checkins] python/dist/src/Python getargs.c, 2.102.2.3, 2.102.2.4
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/python/python/dist/src/Python
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12451/Python
Modified Files:
getargs.c
Log Message:
Complete format code support in getargs.c::skipitem(), which is called when
evaluating keyword arguments.
Index: getargs.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/getargs.c,v
retrieving revision 2.106
retrieving revision 2.107
diff -u -d -r2.106 -r2.107
--- getargs.c 26 Aug 2005 06:42:30 -0000 2.106
+++ getargs.c 14 Sep 2005 19:29:53 -0000 2.107
@@ -453,7 +453,9 @@
or a string with a message describing the failure. The message is
formatted as "must be <desired type>, not <actual type>".
When failing, an exception may or may not have been raised.
- Don't call if a tuple is expected.
+ Don't call if a tuple is expected.
+
+ When you add new format codes, please don't forget poor skipitem() below.
*/
static char *
@@ -1406,83 +1408,52 @@
char c = *format++;
switch (c) {
-
+
+ /* simple codes
+ * The individual types (second arg of va_arg) are irrelevant */
+
case 'b': /* byte -- very short int */
case 'B': /* byte as bitfield */
- {
- (void) va_arg(*p_va, char *);
- break;
- }
-
case 'h': /* short int */
- {
- (void) va_arg(*p_va, short *);
- break;
- }
-
case 'H': /* short int as bitfield */
- {
- (void) va_arg(*p_va, unsigned short *);
- break;
- }
-
case 'i': /* int */
- {
- (void) va_arg(*p_va, int *);
- break;
- }
-
+ case 'I': /* int sized bitfield */
case 'l': /* long int */
- {
- (void) va_arg(*p_va, long *);
- break;
- }
-
+ case 'k': /* long int sized bitfield */
#ifdef HAVE_LONG_LONG
- case 'L': /* PY_LONG_LONG int */
- {
- (void) va_arg(*p_va, PY_LONG_LONG *);
- break;
- }
+ case 'L': /* PY_LONG_LONG */
+ case 'K': /* PY_LONG_LONG sized bitfield */
#endif
-
case 'f': /* float */
- {
- (void) va_arg(*p_va, float *);
- break;
- }
-
case 'd': /* double */
- {
- (void) va_arg(*p_va, double *);
- break;
- }
-
#ifndef WITHOUT_COMPLEX
case 'D': /* complex double */
- {
- (void) va_arg(*p_va, Py_complex *);
- break;
- }
-#endif /* WITHOUT_COMPLEX */
-
+#endif
case 'c': /* char */
{
- (void) va_arg(*p_va, char *);
+ (void) va_arg(*p_va, void *);
break;
}
- case 's': /* string */
+ /* string codes */
+
+ case 'e': /* string with encoding */
{
- (void) va_arg(*p_va, char **);
- if (*format == '#') {
- (void) va_arg(*p_va, int *);
- format++;
- }
- break;
+ (void) va_arg(*p_va, const char *);
+ if (!(*format == 's' || *format == 't'))
+ /* after 'e', only 's' and 't' is allowed */
+ goto err;
+ format++;
+ /* explicit fallthrough to string cases */
}
- case 'z': /* string */
+ case 's': /* string */
+ case 'z': /* string or None */
+#ifdef Py_USING_UNICODE
+ case 'u': /* unicode string */
+#endif
+ case 't': /* buffer, read-only */
+ case 'w': /* buffer, read-write */
{
(void) va_arg(*p_va, char **);
if (*format == '#') {
@@ -1491,8 +1462,13 @@
}
break;
}
-
+
+ /* object codes */
+
case 'S': /* string object */
+#ifdef Py_USING_UNICODE
+ case 'U': /* unicode string object */
+#endif
{
(void) va_arg(*p_va, PyObject **);
break;
@@ -1528,9 +1504,13 @@
}
default:
+err:
return "impossible<bad format char>";
}
+
+ /* The "(...)" format code for tuples is not handled here because
+ * it is not allowed with keyword args. */
*p_format = format;
return NULL;
- Previous message: [Python-checkins] python/dist/src/Modules grpmodule.c, 2.22, 2.22.4.1 makexp_aix, 2.2, 2.2.50.1 pwdmodule.c, 1.39, 1.39.4.1 signalmodule.c, 2.76, 2.76.2.1 socketmodule.c, 1.311.2.1, 1.311.2.2 socketmodule.h, 1.12, 1.12.4.1
- Next message: [Python-checkins] python/dist/src/Python getargs.c, 2.102.2.3, 2.102.2.4
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Python-checkins
mailing list