You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

571 lines
14 KiB

36 years ago
36 years ago
  1. /* Module support implementation */
  2. #include "Python.h"
  3. #define FLAG_SIZE_T 1
  4. typedef double va_double;
  5. static PyObject *va_build_value(const char *, va_list, int);
  6. /* Package context -- the full module name for package imports */
  7. char *_Py_PackageContext = NULL;
  8. /* Helper for mkvalue() to scan the length of a format */
  9. static int
  10. countformat(const char *format, int endchar)
  11. {
  12. int count = 0;
  13. int level = 0;
  14. while (level > 0 || *format != endchar) {
  15. switch (*format) {
  16. case '\0':
  17. /* Premature end */
  18. PyErr_SetString(PyExc_SystemError,
  19. "unmatched paren in format");
  20. return -1;
  21. case '(':
  22. case '[':
  23. case '{':
  24. if (level == 0)
  25. count++;
  26. level++;
  27. break;
  28. case ')':
  29. case ']':
  30. case '}':
  31. level--;
  32. break;
  33. case '#':
  34. case '&':
  35. case ',':
  36. case ':':
  37. case ' ':
  38. case '\t':
  39. break;
  40. default:
  41. if (level == 0)
  42. count++;
  43. }
  44. format++;
  45. }
  46. return count;
  47. }
  48. /* Generic function to create a value -- the inverse of getargs() */
  49. /* After an original idea and first implementation by Steven Miale */
  50. static PyObject *do_mktuple(const char**, va_list *, int, int, int);
  51. static PyObject *do_mklist(const char**, va_list *, int, int, int);
  52. static PyObject *do_mkdict(const char**, va_list *, int, int, int);
  53. static PyObject *do_mkvalue(const char**, va_list *, int);
  54. static PyObject *
  55. do_mkdict(const char **p_format, va_list *p_va, int endchar, int n, int flags)
  56. {
  57. PyObject *d;
  58. int i;
  59. int itemfailed = 0;
  60. if (n < 0)
  61. return NULL;
  62. if ((d = PyDict_New()) == NULL)
  63. return NULL;
  64. /* Note that we can't bail immediately on error as this will leak
  65. refcounts on any 'N' arguments. */
  66. for (i = 0; i < n; i+= 2) {
  67. PyObject *k, *v;
  68. int err;
  69. k = do_mkvalue(p_format, p_va, flags);
  70. if (k == NULL) {
  71. itemfailed = 1;
  72. Py_INCREF(Py_None);
  73. k = Py_None;
  74. }
  75. v = do_mkvalue(p_format, p_va, flags);
  76. if (v == NULL) {
  77. itemfailed = 1;
  78. Py_INCREF(Py_None);
  79. v = Py_None;
  80. }
  81. err = PyDict_SetItem(d, k, v);
  82. Py_DECREF(k);
  83. Py_DECREF(v);
  84. if (err < 0 || itemfailed) {
  85. Py_DECREF(d);
  86. return NULL;
  87. }
  88. }
  89. if (d != NULL && **p_format != endchar) {
  90. Py_DECREF(d);
  91. d = NULL;
  92. PyErr_SetString(PyExc_SystemError,
  93. "Unmatched paren in format");
  94. }
  95. else if (endchar)
  96. ++*p_format;
  97. return d;
  98. }
  99. static PyObject *
  100. do_mklist(const char **p_format, va_list *p_va, int endchar, int n, int flags)
  101. {
  102. PyObject *v;
  103. int i;
  104. int itemfailed = 0;
  105. if (n < 0)
  106. return NULL;
  107. v = PyList_New(n);
  108. if (v == NULL)
  109. return NULL;
  110. /* Note that we can't bail immediately on error as this will leak
  111. refcounts on any 'N' arguments. */
  112. for (i = 0; i < n; i++) {
  113. PyObject *w = do_mkvalue(p_format, p_va, flags);
  114. if (w == NULL) {
  115. itemfailed = 1;
  116. Py_INCREF(Py_None);
  117. w = Py_None;
  118. }
  119. PyList_SET_ITEM(v, i, w);
  120. }
  121. if (itemfailed) {
  122. /* do_mkvalue() should have already set an error */
  123. Py_DECREF(v);
  124. return NULL;
  125. }
  126. if (**p_format != endchar) {
  127. Py_DECREF(v);
  128. PyErr_SetString(PyExc_SystemError,
  129. "Unmatched paren in format");
  130. return NULL;
  131. }
  132. if (endchar)
  133. ++*p_format;
  134. return v;
  135. }
  136. static PyObject *
  137. do_mktuple(const char **p_format, va_list *p_va, int endchar, int n, int flags)
  138. {
  139. PyObject *v;
  140. int i;
  141. int itemfailed = 0;
  142. if (n < 0)
  143. return NULL;
  144. if ((v = PyTuple_New(n)) == NULL)
  145. return NULL;
  146. /* Note that we can't bail immediately on error as this will leak
  147. refcounts on any 'N' arguments. */
  148. for (i = 0; i < n; i++) {
  149. PyObject *w;
  150. if (itemfailed) {
  151. PyObject *exception, *value, *tb;
  152. PyErr_Fetch(&exception, &value, &tb);
  153. w = do_mkvalue(p_format, p_va, flags);
  154. PyErr_Restore(exception, value, tb);
  155. }
  156. else {
  157. w = do_mkvalue(p_format, p_va, flags);
  158. }
  159. if (w == NULL) {
  160. itemfailed = 1;
  161. Py_INCREF(Py_None);
  162. w = Py_None;
  163. }
  164. PyTuple_SET_ITEM(v, i, w);
  165. }
  166. if (itemfailed) {
  167. /* do_mkvalue() should have already set an error */
  168. Py_DECREF(v);
  169. return NULL;
  170. }
  171. if (**p_format != endchar) {
  172. Py_DECREF(v);
  173. PyErr_SetString(PyExc_SystemError,
  174. "Unmatched paren in format");
  175. return NULL;
  176. }
  177. if (endchar)
  178. ++*p_format;
  179. return v;
  180. }
  181. static PyObject *
  182. do_mkvalue(const char **p_format, va_list *p_va, int flags)
  183. {
  184. for (;;) {
  185. switch (*(*p_format)++) {
  186. case '(':
  187. return do_mktuple(p_format, p_va, ')',
  188. countformat(*p_format, ')'), flags);
  189. case '[':
  190. return do_mklist(p_format, p_va, ']',
  191. countformat(*p_format, ']'), flags);
  192. case '{':
  193. return do_mkdict(p_format, p_va, '}',
  194. countformat(*p_format, '}'), flags);
  195. case 'b':
  196. case 'B':
  197. case 'h':
  198. case 'i':
  199. return PyLong_FromLong((long)va_arg(*p_va, int));
  200. case 'H':
  201. return PyLong_FromLong((long)va_arg(*p_va, unsigned int));
  202. case 'I':
  203. {
  204. unsigned int n;
  205. n = va_arg(*p_va, unsigned int);
  206. return PyLong_FromUnsignedLong(n);
  207. }
  208. case 'n':
  209. #if SIZEOF_SIZE_T!=SIZEOF_LONG
  210. return PyLong_FromSsize_t(va_arg(*p_va, Py_ssize_t));
  211. #endif
  212. /* Fall through from 'n' to 'l' if Py_ssize_t is long */
  213. case 'l':
  214. return PyLong_FromLong(va_arg(*p_va, long));
  215. case 'k':
  216. {
  217. unsigned long n;
  218. n = va_arg(*p_va, unsigned long);
  219. return PyLong_FromUnsignedLong(n);
  220. }
  221. #ifdef HAVE_LONG_LONG
  222. case 'L':
  223. return PyLong_FromLongLong((PY_LONG_LONG)va_arg(*p_va, PY_LONG_LONG));
  224. case 'K':
  225. return PyLong_FromUnsignedLongLong((PY_LONG_LONG)va_arg(*p_va, unsigned PY_LONG_LONG));
  226. #endif
  227. case 'u':
  228. {
  229. PyObject *v;
  230. Py_UNICODE *u = va_arg(*p_va, Py_UNICODE *);
  231. Py_ssize_t n;
  232. if (**p_format == '#') {
  233. ++*p_format;
  234. if (flags & FLAG_SIZE_T)
  235. n = va_arg(*p_va, Py_ssize_t);
  236. else
  237. n = va_arg(*p_va, int);
  238. }
  239. else
  240. n = -1;
  241. if (u == NULL) {
  242. v = Py_None;
  243. Py_INCREF(v);
  244. }
  245. else {
  246. if (n < 0)
  247. n = Py_UNICODE_strlen(u);
  248. v = PyUnicode_FromUnicode(u, n);
  249. }
  250. return v;
  251. }
  252. case 'f':
  253. case 'd':
  254. return PyFloat_FromDouble(
  255. (double)va_arg(*p_va, va_double));
  256. case 'D':
  257. return PyComplex_FromCComplex(
  258. *((Py_complex *)va_arg(*p_va, Py_complex *)));
  259. case 'c':
  260. {
  261. char p[1];
  262. p[0] = (char)va_arg(*p_va, int);
  263. return PyBytes_FromStringAndSize(p, 1);
  264. }
  265. case 'C':
  266. {
  267. int i = va_arg(*p_va, int);
  268. return PyUnicode_FromOrdinal(i);
  269. }
  270. case 's':
  271. case 'z':
  272. case 'U': /* XXX deprecated alias */
  273. {
  274. PyObject *v;
  275. char *str = va_arg(*p_va, char *);
  276. Py_ssize_t n;
  277. if (**p_format == '#') {
  278. ++*p_format;
  279. if (flags & FLAG_SIZE_T)
  280. n = va_arg(*p_va, Py_ssize_t);
  281. else
  282. n = va_arg(*p_va, int);
  283. }
  284. else
  285. n = -1;
  286. if (str == NULL) {
  287. v = Py_None;
  288. Py_INCREF(v);
  289. }
  290. else {
  291. if (n < 0) {
  292. size_t m = strlen(str);
  293. if (m > PY_SSIZE_T_MAX) {
  294. PyErr_SetString(PyExc_OverflowError,
  295. "string too long for Python string");
  296. return NULL;
  297. }
  298. n = (Py_ssize_t)m;
  299. }
  300. v = PyUnicode_FromStringAndSize(str, n);
  301. }
  302. return v;
  303. }
  304. case 'y':
  305. {
  306. PyObject *v;
  307. char *str = va_arg(*p_va, char *);
  308. Py_ssize_t n;
  309. if (**p_format == '#') {
  310. ++*p_format;
  311. if (flags & FLAG_SIZE_T)
  312. n = va_arg(*p_va, Py_ssize_t);
  313. else
  314. n = va_arg(*p_va, int);
  315. }
  316. else
  317. n = -1;
  318. if (str == NULL) {
  319. v = Py_None;
  320. Py_INCREF(v);
  321. }
  322. else {
  323. if (n < 0) {
  324. size_t m = strlen(str);
  325. if (m > PY_SSIZE_T_MAX) {
  326. PyErr_SetString(PyExc_OverflowError,
  327. "string too long for Python bytes");
  328. return NULL;
  329. }
  330. n = (Py_ssize_t)m;
  331. }
  332. v = PyBytes_FromStringAndSize(str, n);
  333. }
  334. return v;
  335. }
  336. case 'N':
  337. case 'S':
  338. case 'O':
  339. if (**p_format == '&') {
  340. typedef PyObject *(*converter)(void *);
  341. converter func = va_arg(*p_va, converter);
  342. void *arg = va_arg(*p_va, void *);
  343. ++*p_format;
  344. return (*func)(arg);
  345. }
  346. else {
  347. PyObject *v;
  348. v = va_arg(*p_va, PyObject *);
  349. if (v != NULL) {
  350. if (*(*p_format - 1) != 'N')
  351. Py_INCREF(v);
  352. }
  353. else if (!PyErr_Occurred())
  354. /* If a NULL was passed
  355. * because a call that should
  356. * have constructed a value
  357. * failed, that's OK, and we
  358. * pass the error on; but if
  359. * no error occurred it's not
  360. * clear that the caller knew
  361. * what she was doing. */
  362. PyErr_SetString(PyExc_SystemError,
  363. "NULL object passed to Py_BuildValue");
  364. return v;
  365. }
  366. case ':':
  367. case ',':
  368. case ' ':
  369. case '\t':
  370. break;
  371. default:
  372. PyErr_SetString(PyExc_SystemError,
  373. "bad format char passed to Py_BuildValue");
  374. return NULL;
  375. }
  376. }
  377. }
  378. PyObject *
  379. Py_BuildValue(const char *format, ...)
  380. {
  381. va_list va;
  382. PyObject* retval;
  383. va_start(va, format);
  384. retval = va_build_value(format, va, 0);
  385. va_end(va);
  386. return retval;
  387. }
  388. PyObject *
  389. _Py_BuildValue_SizeT(const char *format, ...)
  390. {
  391. va_list va;
  392. PyObject* retval;
  393. va_start(va, format);
  394. retval = va_build_value(format, va, FLAG_SIZE_T);
  395. va_end(va);
  396. return retval;
  397. }
  398. PyObject *
  399. Py_VaBuildValue(const char *format, va_list va)
  400. {
  401. return va_build_value(format, va, 0);
  402. }
  403. PyObject *
  404. _Py_VaBuildValue_SizeT(const char *format, va_list va)
  405. {
  406. return va_build_value(format, va, FLAG_SIZE_T);
  407. }
  408. static PyObject *
  409. va_build_value(const char *format, va_list va, int flags)
  410. {
  411. const char *f = format;
  412. int n = countformat(f, '\0');
  413. va_list lva;
  414. Py_VA_COPY(lva, va);
  415. if (n < 0)
  416. return NULL;
  417. if (n == 0) {
  418. Py_INCREF(Py_None);
  419. return Py_None;
  420. }
  421. if (n == 1)
  422. return do_mkvalue(&f, &lva, flags);
  423. return do_mktuple(&f, &lva, '\0', n, flags);
  424. }
  425. PyObject *
  426. PyEval_CallFunction(PyObject *obj, const char *format, ...)
  427. {
  428. va_list vargs;
  429. PyObject *args;
  430. PyObject *res;
  431. va_start(vargs, format);
  432. args = Py_VaBuildValue(format, vargs);
  433. va_end(vargs);
  434. if (args == NULL)
  435. return NULL;
  436. res = PyEval_CallObject(obj, args);
  437. Py_DECREF(args);
  438. return res;
  439. }
  440. PyObject *
  441. PyEval_CallMethod(PyObject *obj, const char *methodname, const char *format, ...)
  442. {
  443. va_list vargs;
  444. PyObject *meth;
  445. PyObject *args;
  446. PyObject *res;
  447. meth = PyObject_GetAttrString(obj, methodname);
  448. if (meth == NULL)
  449. return NULL;
  450. va_start(vargs, format);
  451. args = Py_VaBuildValue(format, vargs);
  452. va_end(vargs);
  453. if (args == NULL) {
  454. Py_DECREF(meth);
  455. return NULL;
  456. }
  457. res = PyEval_CallObject(meth, args);
  458. Py_DECREF(meth);
  459. Py_DECREF(args);
  460. return res;
  461. }
  462. int
  463. PyModule_AddObject(PyObject *m, const char *name, PyObject *o)
  464. {
  465. PyObject *dict;
  466. if (!PyModule_Check(m)) {
  467. PyErr_SetString(PyExc_TypeError,
  468. "PyModule_AddObject() needs module as first arg");
  469. return -1;
  470. }
  471. if (!o) {
  472. if (!PyErr_Occurred())
  473. PyErr_SetString(PyExc_TypeError,
  474. "PyModule_AddObject() needs non-NULL value");
  475. return -1;
  476. }
  477. dict = PyModule_GetDict(m);
  478. if (dict == NULL) {
  479. /* Internal error -- modules must have a dict! */
  480. PyErr_Format(PyExc_SystemError, "module '%s' has no __dict__",
  481. PyModule_GetName(m));
  482. return -1;
  483. }
  484. if (PyDict_SetItemString(dict, name, o))
  485. return -1;
  486. Py_DECREF(o);
  487. return 0;
  488. }
  489. int
  490. PyModule_AddIntConstant(PyObject *m, const char *name, long value)
  491. {
  492. PyObject *o = PyLong_FromLong(value);
  493. if (!o)
  494. return -1;
  495. if (PyModule_AddObject(m, name, o) == 0)
  496. return 0;
  497. Py_DECREF(o);
  498. return -1;
  499. }
  500. int
  501. PyModule_AddStringConstant(PyObject *m, const char *name, const char *value)
  502. {
  503. PyObject *o = PyUnicode_FromString(value);
  504. if (!o)
  505. return -1;
  506. if (PyModule_AddObject(m, name, o) == 0)
  507. return 0;
  508. Py_DECREF(o);
  509. return -1;
  510. }