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.

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