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.

703 lines
18 KiB

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