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.

700 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. for (;;) {
  263. switch (*(*p_format)++) {
  264. case '(':
  265. return do_mktuple(p_format, p_va, ')',
  266. countformat(*p_format, ')'), flags);
  267. case '[':
  268. return do_mklist(p_format, p_va, ']',
  269. countformat(*p_format, ']'), flags);
  270. case '{':
  271. return do_mkdict(p_format, p_va, '}',
  272. countformat(*p_format, '}'), flags);
  273. case 'b':
  274. case 'B':
  275. case 'h':
  276. case 'i':
  277. return PyLong_FromLong((long)va_arg(*p_va, int));
  278. case 'H':
  279. return PyLong_FromLong((long)va_arg(*p_va, unsigned int));
  280. case 'I':
  281. {
  282. unsigned int n;
  283. n = va_arg(*p_va, unsigned int);
  284. return PyLong_FromUnsignedLong(n);
  285. }
  286. case 'n':
  287. #if SIZEOF_SIZE_T!=SIZEOF_LONG
  288. return PyLong_FromSsize_t(va_arg(*p_va, Py_ssize_t));
  289. #endif
  290. /* Fall through from 'n' to 'l' if Py_ssize_t is long */
  291. case 'l':
  292. return PyLong_FromLong(va_arg(*p_va, long));
  293. case 'k':
  294. {
  295. unsigned long n;
  296. n = va_arg(*p_va, unsigned long);
  297. return PyLong_FromUnsignedLong(n);
  298. }
  299. case 'L':
  300. return PyLong_FromLongLong((long long)va_arg(*p_va, long long));
  301. case 'K':
  302. return PyLong_FromUnsignedLongLong((long long)va_arg(*p_va, unsigned long long));
  303. case 'u':
  304. {
  305. PyObject *v;
  306. Py_UNICODE *u = va_arg(*p_va, Py_UNICODE *);
  307. Py_ssize_t n;
  308. if (**p_format == '#') {
  309. ++*p_format;
  310. if (flags & FLAG_SIZE_T)
  311. n = va_arg(*p_va, Py_ssize_t);
  312. else {
  313. n = va_arg(*p_va, int);
  314. if (PyErr_WarnEx(PyExc_DeprecationWarning,
  315. "PY_SSIZE_T_CLEAN will be required for '#' formats", 1)) {
  316. return NULL;
  317. }
  318. }
  319. }
  320. else
  321. n = -1;
  322. if (u == NULL) {
  323. v = Py_None;
  324. Py_INCREF(v);
  325. }
  326. else {
  327. if (n < 0)
  328. n = wcslen(u);
  329. v = PyUnicode_FromWideChar(u, n);
  330. }
  331. return v;
  332. }
  333. case 'f':
  334. case 'd':
  335. return PyFloat_FromDouble(
  336. (double)va_arg(*p_va, va_double));
  337. case 'D':
  338. return PyComplex_FromCComplex(
  339. *((Py_complex *)va_arg(*p_va, Py_complex *)));
  340. case 'c':
  341. {
  342. char p[1];
  343. p[0] = (char)va_arg(*p_va, int);
  344. return PyBytes_FromStringAndSize(p, 1);
  345. }
  346. case 'C':
  347. {
  348. int i = va_arg(*p_va, int);
  349. return PyUnicode_FromOrdinal(i);
  350. }
  351. case 's':
  352. case 'z':
  353. case 'U': /* XXX deprecated alias */
  354. {
  355. PyObject *v;
  356. const char *str = va_arg(*p_va, const char *);
  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. if (PyErr_WarnEx(PyExc_DeprecationWarning,
  365. "PY_SSIZE_T_CLEAN will be required for '#' formats", 1)) {
  366. return NULL;
  367. }
  368. }
  369. }
  370. else
  371. n = -1;
  372. if (str == NULL) {
  373. v = Py_None;
  374. Py_INCREF(v);
  375. }
  376. else {
  377. if (n < 0) {
  378. size_t m = strlen(str);
  379. if (m > PY_SSIZE_T_MAX) {
  380. PyErr_SetString(PyExc_OverflowError,
  381. "string too long for Python string");
  382. return NULL;
  383. }
  384. n = (Py_ssize_t)m;
  385. }
  386. v = PyUnicode_FromStringAndSize(str, n);
  387. }
  388. return v;
  389. }
  390. case 'y':
  391. {
  392. PyObject *v;
  393. const char *str = va_arg(*p_va, const char *);
  394. Py_ssize_t n;
  395. if (**p_format == '#') {
  396. ++*p_format;
  397. if (flags & FLAG_SIZE_T)
  398. n = va_arg(*p_va, Py_ssize_t);
  399. else {
  400. n = va_arg(*p_va, int);
  401. if (PyErr_WarnEx(PyExc_DeprecationWarning,
  402. "PY_SSIZE_T_CLEAN will be required for '#' formats", 1)) {
  403. return NULL;
  404. }
  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. }
  469. PyObject *
  470. Py_BuildValue(const char *format, ...)
  471. {
  472. va_list va;
  473. PyObject* retval;
  474. va_start(va, format);
  475. retval = va_build_value(format, va, 0);
  476. va_end(va);
  477. return retval;
  478. }
  479. PyObject *
  480. _Py_BuildValue_SizeT(const char *format, ...)
  481. {
  482. va_list va;
  483. PyObject* retval;
  484. va_start(va, format);
  485. retval = va_build_value(format, va, FLAG_SIZE_T);
  486. va_end(va);
  487. return retval;
  488. }
  489. PyObject *
  490. Py_VaBuildValue(const char *format, va_list va)
  491. {
  492. return va_build_value(format, va, 0);
  493. }
  494. PyObject *
  495. _Py_VaBuildValue_SizeT(const char *format, va_list va)
  496. {
  497. return va_build_value(format, va, FLAG_SIZE_T);
  498. }
  499. static PyObject *
  500. va_build_value(const char *format, va_list va, int flags)
  501. {
  502. const char *f = format;
  503. Py_ssize_t n = countformat(f, '\0');
  504. va_list lva;
  505. PyObject *retval;
  506. if (n < 0)
  507. return NULL;
  508. if (n == 0) {
  509. Py_RETURN_NONE;
  510. }
  511. va_copy(lva, va);
  512. if (n == 1) {
  513. retval = do_mkvalue(&f, &lva, flags);
  514. } else {
  515. retval = do_mktuple(&f, &lva, '\0', n, flags);
  516. }
  517. va_end(lva);
  518. return retval;
  519. }
  520. PyObject **
  521. _Py_VaBuildStack(PyObject **small_stack, Py_ssize_t small_stack_len,
  522. const char *format, va_list va, Py_ssize_t *p_nargs)
  523. {
  524. return va_build_stack(small_stack, small_stack_len, format, va, 0, p_nargs);
  525. }
  526. PyObject **
  527. _Py_VaBuildStack_SizeT(PyObject **small_stack, Py_ssize_t small_stack_len,
  528. const char *format, va_list va, Py_ssize_t *p_nargs)
  529. {
  530. return va_build_stack(small_stack, small_stack_len, format, va, FLAG_SIZE_T, p_nargs);
  531. }
  532. static PyObject **
  533. va_build_stack(PyObject **small_stack, Py_ssize_t small_stack_len,
  534. const char *format, va_list va, int flags, Py_ssize_t *p_nargs)
  535. {
  536. const char *f;
  537. Py_ssize_t n;
  538. va_list lva;
  539. PyObject **stack;
  540. int res;
  541. n = countformat(format, '\0');
  542. if (n < 0) {
  543. *p_nargs = 0;
  544. return NULL;
  545. }
  546. if (n == 0) {
  547. *p_nargs = 0;
  548. return small_stack;
  549. }
  550. if (n <= small_stack_len) {
  551. stack = small_stack;
  552. }
  553. else {
  554. stack = PyMem_Malloc(n * sizeof(stack[0]));
  555. if (stack == NULL) {
  556. PyErr_NoMemory();
  557. return NULL;
  558. }
  559. }
  560. va_copy(lva, va);
  561. f = format;
  562. res = do_mkstack(stack, &f, &lva, '\0', n, flags);
  563. va_end(lva);
  564. if (res < 0) {
  565. return NULL;
  566. }
  567. *p_nargs = n;
  568. return stack;
  569. }
  570. int
  571. PyModule_AddObject(PyObject *m, const char *name, PyObject *o)
  572. {
  573. PyObject *dict;
  574. if (!PyModule_Check(m)) {
  575. PyErr_SetString(PyExc_TypeError,
  576. "PyModule_AddObject() needs module as first arg");
  577. return -1;
  578. }
  579. if (!o) {
  580. if (!PyErr_Occurred())
  581. PyErr_SetString(PyExc_TypeError,
  582. "PyModule_AddObject() needs non-NULL value");
  583. return -1;
  584. }
  585. dict = PyModule_GetDict(m);
  586. if (dict == NULL) {
  587. /* Internal error -- modules must have a dict! */
  588. PyErr_Format(PyExc_SystemError, "module '%s' has no __dict__",
  589. PyModule_GetName(m));
  590. return -1;
  591. }
  592. if (PyDict_SetItemString(dict, name, o))
  593. return -1;
  594. Py_DECREF(o);
  595. return 0;
  596. }
  597. int
  598. PyModule_AddIntConstant(PyObject *m, const char *name, long value)
  599. {
  600. PyObject *o = PyLong_FromLong(value);
  601. if (!o)
  602. return -1;
  603. if (PyModule_AddObject(m, name, o) == 0)
  604. return 0;
  605. Py_DECREF(o);
  606. return -1;
  607. }
  608. int
  609. PyModule_AddStringConstant(PyObject *m, const char *name, const char *value)
  610. {
  611. PyObject *o = PyUnicode_FromString(value);
  612. if (!o)
  613. return -1;
  614. if (PyModule_AddObject(m, name, o) == 0)
  615. return 0;
  616. Py_DECREF(o);
  617. return -1;
  618. }
  619. int
  620. PyModule_AddType(PyObject *module, PyTypeObject *type)
  621. {
  622. if (PyType_Ready(type) < 0) {
  623. return -1;
  624. }
  625. const char *name = _PyType_Name(type);
  626. assert(name != NULL);
  627. Py_INCREF(type);
  628. if (PyModule_AddObject(module, name, (PyObject *)type) < 0) {
  629. Py_DECREF(type);
  630. return -1;
  631. }
  632. return 0;
  633. }