symbian-qemu-0.9.1-12/python-2.6.1/Python/modsupport.c
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 
       
     2 /* Module support implementation */
       
     3 
       
     4 #include "Python.h"
       
     5 
       
     6 #define FLAG_SIZE_T 1
       
     7 typedef double va_double;
       
     8 
       
     9 static PyObject *va_build_value(const char *, va_list, int);
       
    10 
       
    11 /* Package context -- the full module name for package imports */
       
    12 char *_Py_PackageContext = NULL;
       
    13 
       
    14 /* Py_InitModule4() parameters:
       
    15    - name is the module name
       
    16    - methods is the list of top-level functions
       
    17    - doc is the documentation string
       
    18    - passthrough is passed as self to functions defined in the module
       
    19    - api_version is the value of PYTHON_API_VERSION at the time the
       
    20      module was compiled
       
    21 
       
    22    Return value is a borrowed reference to the module object; or NULL
       
    23    if an error occurred (in Python 1.4 and before, errors were fatal).
       
    24    Errors may still leak memory.
       
    25 */
       
    26 
       
    27 static char api_version_warning[] =
       
    28 "Python C API version mismatch for module %.100s:\
       
    29  This Python has API version %d, module %.100s has version %d.";
       
    30 
       
    31 PyObject *
       
    32 Py_InitModule4(const char *name, PyMethodDef *methods, const char *doc,
       
    33 	       PyObject *passthrough, int module_api_version)
       
    34 {
       
    35 	PyObject *m, *d, *v, *n;
       
    36 	PyMethodDef *ml;
       
    37 	if (!Py_IsInitialized())
       
    38 	    Py_FatalError("Interpreter not initialized (version mismatch?)");
       
    39 	if (module_api_version != PYTHON_API_VERSION) {
       
    40 		char message[512];
       
    41 		PyOS_snprintf(message, sizeof(message), 
       
    42 			      api_version_warning, name, 
       
    43 			      PYTHON_API_VERSION, name, 
       
    44 			      module_api_version);
       
    45 		if (PyErr_Warn(PyExc_RuntimeWarning, message)) 
       
    46 			return NULL;
       
    47 	}
       
    48 	/* Make sure name is fully qualified.
       
    49 
       
    50 	   This is a bit of a hack: when the shared library is loaded,
       
    51 	   the module name is "package.module", but the module calls
       
    52 	   Py_InitModule*() with just "module" for the name.  The shared
       
    53 	   library loader squirrels away the true name of the module in
       
    54 	   _Py_PackageContext, and Py_InitModule*() will substitute this
       
    55 	   (if the name actually matches).
       
    56 	*/
       
    57 	if (_Py_PackageContext != NULL) {
       
    58 		char *p = strrchr(_Py_PackageContext, '.');
       
    59 		if (p != NULL && strcmp(name, p+1) == 0) {
       
    60 			name = _Py_PackageContext;
       
    61 			_Py_PackageContext = NULL;
       
    62 		}
       
    63 	}
       
    64 	if ((m = PyImport_AddModule(name)) == NULL)
       
    65 		return NULL;
       
    66 	d = PyModule_GetDict(m);
       
    67 	if (methods != NULL) {
       
    68 		n = PyString_FromString(name);
       
    69 		if (n == NULL)
       
    70 			return NULL;
       
    71 		for (ml = methods; ml->ml_name != NULL; ml++) {
       
    72 			if ((ml->ml_flags & METH_CLASS) ||
       
    73 			    (ml->ml_flags & METH_STATIC)) {
       
    74 				PyErr_SetString(PyExc_ValueError,
       
    75 						"module functions cannot set"
       
    76 						" METH_CLASS or METH_STATIC");
       
    77 				Py_DECREF(n);
       
    78 				return NULL;
       
    79 			}
       
    80 			v = PyCFunction_NewEx(ml, passthrough, n);
       
    81 			if (v == NULL) {
       
    82 				Py_DECREF(n);
       
    83 				return NULL;
       
    84 			}
       
    85 			if (PyDict_SetItemString(d, ml->ml_name, v) != 0) {
       
    86 				Py_DECREF(v);
       
    87 				Py_DECREF(n);
       
    88 				return NULL;
       
    89 			}
       
    90 			Py_DECREF(v);
       
    91 		}
       
    92 		Py_DECREF(n);
       
    93 	}
       
    94 	if (doc != NULL) {
       
    95 		v = PyString_FromString(doc);
       
    96 		if (v == NULL || PyDict_SetItemString(d, "__doc__", v) != 0) {
       
    97 			Py_XDECREF(v);
       
    98 			return NULL;
       
    99 		}
       
   100 		Py_DECREF(v);
       
   101 	}
       
   102 	return m;
       
   103 }
       
   104 
       
   105 
       
   106 /* Helper for mkvalue() to scan the length of a format */
       
   107 
       
   108 static int
       
   109 countformat(const char *format, int endchar)
       
   110 {
       
   111 	int count = 0;
       
   112 	int level = 0;
       
   113 	while (level > 0 || *format != endchar) {
       
   114 		switch (*format) {
       
   115 		case '\0':
       
   116 			/* Premature end */
       
   117 			PyErr_SetString(PyExc_SystemError,
       
   118 					"unmatched paren in format");
       
   119 			return -1;
       
   120 		case '(':
       
   121 		case '[':
       
   122 		case '{':
       
   123 			if (level == 0)
       
   124 				count++;
       
   125 			level++;
       
   126 			break;
       
   127 		case ')':
       
   128 		case ']':
       
   129 		case '}':
       
   130 			level--;
       
   131 			break;
       
   132 		case '#':
       
   133 		case '&':
       
   134 		case ',':
       
   135 		case ':':
       
   136 		case ' ':
       
   137 		case '\t':
       
   138 			break;
       
   139 		default:
       
   140 			if (level == 0)
       
   141 				count++;
       
   142 		}
       
   143 		format++;
       
   144 	}
       
   145 	return count;
       
   146 }
       
   147 
       
   148 
       
   149 /* Generic function to create a value -- the inverse of getargs() */
       
   150 /* After an original idea and first implementation by Steven Miale */
       
   151 
       
   152 static PyObject *do_mktuple(const char**, va_list *, int, int, int);
       
   153 static PyObject *do_mklist(const char**, va_list *, int, int, int);
       
   154 static PyObject *do_mkdict(const char**, va_list *, int, int, int);
       
   155 static PyObject *do_mkvalue(const char**, va_list *, int);
       
   156 
       
   157 
       
   158 static PyObject *
       
   159 do_mkdict(const char **p_format, va_list *p_va, int endchar, int n, int flags)
       
   160 {
       
   161 	PyObject *d;
       
   162 	int i;
       
   163 	int itemfailed = 0;
       
   164 	if (n < 0)
       
   165 		return NULL;
       
   166 	if ((d = PyDict_New()) == NULL)
       
   167 		return NULL;
       
   168 	/* Note that we can't bail immediately on error as this will leak
       
   169 	   refcounts on any 'N' arguments. */
       
   170 	for (i = 0; i < n; i+= 2) {
       
   171 		PyObject *k, *v;
       
   172 		int err;
       
   173 		k = do_mkvalue(p_format, p_va, flags);
       
   174 		if (k == NULL) {
       
   175 			itemfailed = 1;
       
   176 			Py_INCREF(Py_None);
       
   177 			k = Py_None;
       
   178 		}
       
   179 		v = do_mkvalue(p_format, p_va, flags);
       
   180 		if (v == NULL) {
       
   181 			itemfailed = 1;
       
   182 			Py_INCREF(Py_None);
       
   183 			v = Py_None;
       
   184 		}
       
   185 		err = PyDict_SetItem(d, k, v);
       
   186 		Py_DECREF(k);
       
   187 		Py_DECREF(v);
       
   188 		if (err < 0 || itemfailed) {
       
   189 			Py_DECREF(d);
       
   190 			return NULL;
       
   191 		}
       
   192 	}
       
   193 	if (d != NULL && **p_format != endchar) {
       
   194 		Py_DECREF(d);
       
   195 		d = NULL;
       
   196 		PyErr_SetString(PyExc_SystemError,
       
   197 				"Unmatched paren in format");
       
   198 	}
       
   199 	else if (endchar)
       
   200 		++*p_format;
       
   201 	return d;
       
   202 }
       
   203 
       
   204 static PyObject *
       
   205 do_mklist(const char **p_format, va_list *p_va, int endchar, int n, int flags)
       
   206 {
       
   207 	PyObject *v;
       
   208 	int i;
       
   209 	int itemfailed = 0;
       
   210 	if (n < 0)
       
   211 		return NULL;
       
   212 	v = PyList_New(n);
       
   213 	if (v == NULL)
       
   214 		return NULL;
       
   215 	/* Note that we can't bail immediately on error as this will leak
       
   216 	   refcounts on any 'N' arguments. */
       
   217 	for (i = 0; i < n; i++) {
       
   218 		PyObject *w = do_mkvalue(p_format, p_va, flags);
       
   219 		if (w == NULL) {
       
   220 			itemfailed = 1;
       
   221 			Py_INCREF(Py_None);
       
   222 			w = Py_None;
       
   223 		}
       
   224 		PyList_SET_ITEM(v, i, w);
       
   225 	}
       
   226 
       
   227 	if (itemfailed) {
       
   228 		/* do_mkvalue() should have already set an error */
       
   229 		Py_DECREF(v);
       
   230 		return NULL;
       
   231 	}
       
   232 	if (**p_format != endchar) {
       
   233 		Py_DECREF(v);
       
   234 		PyErr_SetString(PyExc_SystemError,
       
   235 				"Unmatched paren in format");
       
   236 		return NULL;
       
   237 	}
       
   238 	if (endchar)
       
   239 		++*p_format;
       
   240 	return v;
       
   241 }
       
   242 
       
   243 #ifdef Py_USING_UNICODE
       
   244 static int
       
   245 _ustrlen(Py_UNICODE *u)
       
   246 {
       
   247 	int i = 0;
       
   248 	Py_UNICODE *v = u;
       
   249 	while (*v != 0) { i++; v++; } 
       
   250 	return i;
       
   251 }
       
   252 #endif
       
   253 
       
   254 static PyObject *
       
   255 do_mktuple(const char **p_format, va_list *p_va, int endchar, int n, int flags)
       
   256 {
       
   257 	PyObject *v;
       
   258 	int i;
       
   259 	int itemfailed = 0;
       
   260 	if (n < 0)
       
   261 		return NULL;
       
   262 	if ((v = PyTuple_New(n)) == NULL)
       
   263 		return NULL;
       
   264 	/* Note that we can't bail immediately on error as this will leak
       
   265 	   refcounts on any 'N' arguments. */
       
   266 	for (i = 0; i < n; i++) {
       
   267 		PyObject *w = do_mkvalue(p_format, p_va, flags);
       
   268 		if (w == NULL) {
       
   269 			itemfailed = 1;
       
   270 			Py_INCREF(Py_None);
       
   271 			w = Py_None;
       
   272 		}
       
   273 		PyTuple_SET_ITEM(v, i, w);
       
   274 	}
       
   275 	if (itemfailed) {
       
   276 		/* do_mkvalue() should have already set an error */
       
   277 		Py_DECREF(v);
       
   278 		return NULL;
       
   279 	}
       
   280 	if (**p_format != endchar) {
       
   281 		Py_DECREF(v);
       
   282 		PyErr_SetString(PyExc_SystemError,
       
   283 				"Unmatched paren in format");
       
   284 		return NULL;
       
   285 	}
       
   286 	if (endchar)
       
   287 		++*p_format;
       
   288 	return v;
       
   289 }
       
   290 
       
   291 static PyObject *
       
   292 do_mkvalue(const char **p_format, va_list *p_va, int flags)
       
   293 {
       
   294 	for (;;) {
       
   295 		switch (*(*p_format)++) {
       
   296 		case '(':
       
   297 			return do_mktuple(p_format, p_va, ')',
       
   298 					  countformat(*p_format, ')'), flags);
       
   299 
       
   300 		case '[':
       
   301 			return do_mklist(p_format, p_va, ']',
       
   302 					 countformat(*p_format, ']'), flags);
       
   303 
       
   304 		case '{':
       
   305 			return do_mkdict(p_format, p_va, '}',
       
   306 					 countformat(*p_format, '}'), flags);
       
   307 
       
   308 		case 'b':
       
   309 		case 'B':
       
   310 		case 'h':
       
   311 		case 'i':
       
   312 			return PyInt_FromLong((long)va_arg(*p_va, int));
       
   313 			
       
   314 		case 'H':
       
   315 			return PyInt_FromLong((long)va_arg(*p_va, unsigned int));
       
   316 
       
   317 		case 'I':
       
   318 		{
       
   319 			unsigned int n;
       
   320 			n = va_arg(*p_va, unsigned int);
       
   321 			if (n > (unsigned long)PyInt_GetMax())
       
   322 				return PyLong_FromUnsignedLong((unsigned long)n);
       
   323 			else
       
   324 				return PyInt_FromLong(n);
       
   325 		}
       
   326 		
       
   327 		case 'n':
       
   328 #if SIZEOF_SIZE_T!=SIZEOF_LONG
       
   329 			return PyInt_FromSsize_t(va_arg(*p_va, Py_ssize_t));
       
   330 #endif
       
   331 			/* Fall through from 'n' to 'l' if Py_ssize_t is long */
       
   332 		case 'l':
       
   333 			return PyInt_FromLong(va_arg(*p_va, long));
       
   334 
       
   335 		case 'k':
       
   336 		{
       
   337 			unsigned long n;
       
   338 			n = va_arg(*p_va, unsigned long);
       
   339 			if (n > (unsigned long)PyInt_GetMax())
       
   340 				return PyLong_FromUnsignedLong(n);
       
   341 			else
       
   342 				return PyInt_FromLong(n);
       
   343 		}
       
   344 
       
   345 #ifdef HAVE_LONG_LONG
       
   346 		case 'L':
       
   347 			return PyLong_FromLongLong((PY_LONG_LONG)va_arg(*p_va, PY_LONG_LONG));
       
   348 
       
   349 		case 'K':
       
   350 			return PyLong_FromUnsignedLongLong((PY_LONG_LONG)va_arg(*p_va, unsigned PY_LONG_LONG));
       
   351 #endif
       
   352 #ifdef Py_USING_UNICODE
       
   353 		case 'u':
       
   354 		{
       
   355 			PyObject *v;
       
   356 			Py_UNICODE *u = va_arg(*p_va, Py_UNICODE *);
       
   357 			Py_ssize_t n;	
       
   358 			if (**p_format == '#') {
       
   359 				++*p_format;
       
   360 				if (flags & FLAG_SIZE_T)
       
   361 					n = va_arg(*p_va, Py_ssize_t);
       
   362 				else
       
   363 					n = va_arg(*p_va, int);
       
   364 			}
       
   365 			else
       
   366 				n = -1;
       
   367 			if (u == NULL) {
       
   368 				v = Py_None;
       
   369 				Py_INCREF(v);
       
   370 			}
       
   371 			else {
       
   372 				if (n < 0)
       
   373 					n = _ustrlen(u);
       
   374 				v = PyUnicode_FromUnicode(u, n);
       
   375 			}
       
   376 			return v;
       
   377 		}
       
   378 #endif
       
   379 		case 'f':
       
   380 		case 'd':
       
   381 			return PyFloat_FromDouble(
       
   382 				(double)va_arg(*p_va, va_double));
       
   383 
       
   384 #ifndef WITHOUT_COMPLEX
       
   385 		case 'D':
       
   386 			return PyComplex_FromCComplex(
       
   387 				*((Py_complex *)va_arg(*p_va, Py_complex *)));
       
   388 #endif /* WITHOUT_COMPLEX */
       
   389 
       
   390 		case 'c':
       
   391 		{
       
   392 			char p[1];
       
   393 			p[0] = (char)va_arg(*p_va, int);
       
   394 			return PyString_FromStringAndSize(p, 1);
       
   395 		}
       
   396 
       
   397 		case 's':
       
   398 		case 'z':
       
   399 		{
       
   400 			PyObject *v;
       
   401 			char *str = va_arg(*p_va, char *);
       
   402 			Py_ssize_t n;
       
   403 			if (**p_format == '#') {
       
   404 				++*p_format;
       
   405 				if (flags & FLAG_SIZE_T)
       
   406 					n = va_arg(*p_va, Py_ssize_t);
       
   407 				else
       
   408 					n = va_arg(*p_va, int);
       
   409 			}
       
   410 			else
       
   411 				n = -1;
       
   412 			if (str == NULL) {
       
   413 				v = Py_None;
       
   414 				Py_INCREF(v);
       
   415 			}
       
   416 			else {
       
   417 				if (n < 0) {
       
   418 					size_t m = strlen(str);
       
   419 					if (m > PY_SSIZE_T_MAX) {
       
   420 						PyErr_SetString(PyExc_OverflowError,
       
   421 							"string too long for Python string");
       
   422 						return NULL;
       
   423 					}
       
   424 					n = (Py_ssize_t)m;
       
   425 				}
       
   426 				v = PyString_FromStringAndSize(str, n);
       
   427 			}
       
   428 			return v;
       
   429 		}
       
   430 
       
   431 		case 'N':
       
   432 		case 'S':
       
   433 		case 'O':
       
   434 		if (**p_format == '&') {
       
   435 			typedef PyObject *(*converter)(void *);
       
   436 			converter func = va_arg(*p_va, converter);
       
   437 			void *arg = va_arg(*p_va, void *);
       
   438 			++*p_format;
       
   439 			return (*func)(arg);
       
   440 		}
       
   441 		else {
       
   442 			PyObject *v;
       
   443 			v = va_arg(*p_va, PyObject *);
       
   444 			if (v != NULL) {
       
   445 				if (*(*p_format - 1) != 'N')
       
   446 					Py_INCREF(v);
       
   447 			}
       
   448 			else if (!PyErr_Occurred())
       
   449 				/* If a NULL was passed
       
   450 				 * because a call that should
       
   451 				 * have constructed a value
       
   452 				 * failed, that's OK, and we
       
   453 				 * pass the error on; but if
       
   454 				 * no error occurred it's not
       
   455 				 * clear that the caller knew
       
   456 				 * what she was doing. */
       
   457 				PyErr_SetString(PyExc_SystemError,
       
   458 					"NULL object passed to Py_BuildValue");
       
   459 			return v;
       
   460 		}
       
   461 
       
   462 		case ':':
       
   463 		case ',':
       
   464 		case ' ':
       
   465 		case '\t':
       
   466 			break;
       
   467 
       
   468 		default:
       
   469 			PyErr_SetString(PyExc_SystemError,
       
   470 				"bad format char passed to Py_BuildValue");
       
   471 			return NULL;
       
   472 
       
   473 		}
       
   474 	}
       
   475 }
       
   476 
       
   477 
       
   478 PyObject *
       
   479 Py_BuildValue(const char *format, ...)
       
   480 {
       
   481 	va_list va;
       
   482 	PyObject* retval;
       
   483 	va_start(va, format);
       
   484 	retval = va_build_value(format, va, 0);
       
   485 	va_end(va);
       
   486 	return retval;
       
   487 }
       
   488 
       
   489 PyObject *
       
   490 _Py_BuildValue_SizeT(const char *format, ...)
       
   491 {
       
   492 	va_list va;
       
   493 	PyObject* retval;
       
   494 	va_start(va, format);
       
   495 	retval = va_build_value(format, va, FLAG_SIZE_T);
       
   496 	va_end(va);
       
   497 	return retval;
       
   498 }
       
   499 
       
   500 PyObject *
       
   501 Py_VaBuildValue(const char *format, va_list va)
       
   502 {
       
   503 	return va_build_value(format, va, 0);
       
   504 }
       
   505 
       
   506 PyObject *
       
   507 _Py_VaBuildValue_SizeT(const char *format, va_list va)
       
   508 {
       
   509 	return va_build_value(format, va, FLAG_SIZE_T);
       
   510 }
       
   511 
       
   512 static PyObject *
       
   513 va_build_value(const char *format, va_list va, int flags)
       
   514 {
       
   515 	const char *f = format;
       
   516 	int n = countformat(f, '\0');
       
   517 	va_list lva;
       
   518 
       
   519 #ifdef VA_LIST_IS_ARRAY
       
   520 	memcpy(lva, va, sizeof(va_list));
       
   521 #else
       
   522 #ifdef __va_copy
       
   523 	__va_copy(lva, va);
       
   524 #else
       
   525 	lva = va;
       
   526 #endif
       
   527 #endif
       
   528 
       
   529 	if (n < 0)
       
   530 		return NULL;
       
   531 	if (n == 0) {
       
   532 		Py_INCREF(Py_None);
       
   533 		return Py_None;
       
   534 	}
       
   535 	if (n == 1)
       
   536 		return do_mkvalue(&f, &lva, flags);
       
   537 	return do_mktuple(&f, &lva, '\0', n, flags);
       
   538 }
       
   539 
       
   540 
       
   541 PyObject *
       
   542 PyEval_CallFunction(PyObject *obj, const char *format, ...)
       
   543 {
       
   544 	va_list vargs;
       
   545 	PyObject *args;
       
   546 	PyObject *res;
       
   547 
       
   548 	va_start(vargs, format);
       
   549 
       
   550 	args = Py_VaBuildValue(format, vargs);
       
   551 	va_end(vargs);
       
   552 
       
   553 	if (args == NULL)
       
   554 		return NULL;
       
   555 
       
   556 	res = PyEval_CallObject(obj, args);
       
   557 	Py_DECREF(args);
       
   558 
       
   559 	return res;
       
   560 }
       
   561 
       
   562 
       
   563 PyObject *
       
   564 PyEval_CallMethod(PyObject *obj, const char *methodname, const char *format, ...)
       
   565 {
       
   566 	va_list vargs;
       
   567 	PyObject *meth;
       
   568 	PyObject *args;
       
   569 	PyObject *res;
       
   570 
       
   571 	meth = PyObject_GetAttrString(obj, methodname);
       
   572 	if (meth == NULL)
       
   573 		return NULL;
       
   574 
       
   575 	va_start(vargs, format);
       
   576 
       
   577 	args = Py_VaBuildValue(format, vargs);
       
   578 	va_end(vargs);
       
   579 
       
   580 	if (args == NULL) {
       
   581 		Py_DECREF(meth);
       
   582 		return NULL;
       
   583 	}
       
   584 
       
   585 	res = PyEval_CallObject(meth, args);
       
   586 	Py_DECREF(meth);
       
   587 	Py_DECREF(args);
       
   588 
       
   589 	return res;
       
   590 }
       
   591 
       
   592 int
       
   593 PyModule_AddObject(PyObject *m, const char *name, PyObject *o)
       
   594 {
       
   595 	PyObject *dict;
       
   596 	if (!PyModule_Check(m)) {
       
   597 		PyErr_SetString(PyExc_TypeError,
       
   598 			    "PyModule_AddObject() needs module as first arg");
       
   599 		return -1;
       
   600 	}
       
   601 	if (!o) {
       
   602 		if (!PyErr_Occurred())
       
   603 			PyErr_SetString(PyExc_TypeError,
       
   604 					"PyModule_AddObject() needs non-NULL value");
       
   605 		return -1;
       
   606 	}
       
   607 
       
   608 	dict = PyModule_GetDict(m);
       
   609 	if (dict == NULL) {
       
   610 		/* Internal error -- modules must have a dict! */
       
   611 		PyErr_Format(PyExc_SystemError, "module '%s' has no __dict__",
       
   612 			     PyModule_GetName(m));
       
   613 		return -1;
       
   614 	}
       
   615 	if (PyDict_SetItemString(dict, name, o))
       
   616 		return -1;
       
   617 	Py_DECREF(o);
       
   618 	return 0;
       
   619 }
       
   620 
       
   621 int 
       
   622 PyModule_AddIntConstant(PyObject *m, const char *name, long value)
       
   623 {
       
   624 	PyObject *o = PyInt_FromLong(value);
       
   625 	if (!o)
       
   626 		return -1;
       
   627 	if (PyModule_AddObject(m, name, o) == 0)
       
   628 		return 0;
       
   629 	Py_DECREF(o);
       
   630 	return -1;
       
   631 }
       
   632 
       
   633 int 
       
   634 PyModule_AddStringConstant(PyObject *m, const char *name, const char *value)
       
   635 {
       
   636 	PyObject *o = PyString_FromString(value);
       
   637 	if (!o)
       
   638 		return -1;
       
   639 	if (PyModule_AddObject(m, name, o) == 0)
       
   640 		return 0;
       
   641 	Py_DECREF(o);
       
   642 	return -1;
       
   643 }