Staging
v0.8.1
v0.8.1
Revision 883dfc668f9730b00928730035b5dbd24b9da2a0 authored by Ned Deily on 29 April 2019, 19:07:39 UTC, committed by GitHub on 29 April 2019, 19:07:39 UTC
Under some conditions the earlier fix for bpo-18075, "Infinite recursion tests triggering a segfault on Mac OS X", now causes failures on macOS when attempting to change stack limit with resource.setrlimit resource.RLIMIT_STACK, like regrtest does when running the test suite. The reverted change had specified a non-default stack size when linking the python executable on macOS. As of macOS 10.14.4, the previous code causes a hard failure when running tests, although similar failures had been seen under some conditions under some earlier systems. For now, revert the original change and resume using the default stack size when linking the interpreter.
1 parent be6dbfb
symtablemodule.c
#include "Python.h"
#include "code.h"
#include "Python-ast.h"
#include "symtable.h"
#include "clinic/symtablemodule.c.h"
/*[clinic input]
module _symtable
[clinic start generated code]*/
/*[clinic end generated code: output=da39a3ee5e6b4b0d input=f4685845a7100605]*/
/*[clinic input]
_symtable.symtable
str: str
filename: object(converter='PyUnicode_FSDecoder')
startstr: str
/
Return symbol and scope dictionaries used internally by compiler.
[clinic start generated code]*/
static PyObject *
_symtable_symtable_impl(PyObject *module, const char *str,
PyObject *filename, const char *startstr)
/*[clinic end generated code: output=914b369c9b785956 input=6c615e84d5f408e3]*/
{
struct symtable *st;
PyObject *t;
int start;
if (strcmp(startstr, "exec") == 0)
start = Py_file_input;
else if (strcmp(startstr, "eval") == 0)
start = Py_eval_input;
else if (strcmp(startstr, "single") == 0)
start = Py_single_input;
else {
PyErr_SetString(PyExc_ValueError,
"symtable() arg 3 must be 'exec' or 'eval' or 'single'");
Py_DECREF(filename);
return NULL;
}
st = Py_SymtableStringObject(str, filename, start);
Py_DECREF(filename);
if (st == NULL)
return NULL;
t = (PyObject *)st->st_top;
Py_INCREF(t);
PyMem_Free((void *)st->st_future);
PySymtable_Free(st);
return t;
}
static PyMethodDef symtable_methods[] = {
_SYMTABLE_SYMTABLE_METHODDEF
{NULL, NULL} /* sentinel */
};
static struct PyModuleDef symtablemodule = {
PyModuleDef_HEAD_INIT,
"_symtable",
NULL,
-1,
symtable_methods,
NULL,
NULL,
NULL,
NULL
};
PyMODINIT_FUNC
PyInit__symtable(void)
{
PyObject *m;
if (PyType_Ready(&PySTEntry_Type) < 0)
return NULL;
m = PyModule_Create(&symtablemodule);
if (m == NULL)
return NULL;
PyModule_AddIntMacro(m, USE);
PyModule_AddIntMacro(m, DEF_GLOBAL);
PyModule_AddIntMacro(m, DEF_NONLOCAL);
PyModule_AddIntMacro(m, DEF_LOCAL);
PyModule_AddIntMacro(m, DEF_PARAM);
PyModule_AddIntMacro(m, DEF_FREE);
PyModule_AddIntMacro(m, DEF_FREE_CLASS);
PyModule_AddIntMacro(m, DEF_IMPORT);
PyModule_AddIntMacro(m, DEF_BOUND);
PyModule_AddIntMacro(m, DEF_ANNOT);
PyModule_AddIntConstant(m, "TYPE_FUNCTION", FunctionBlock);
PyModule_AddIntConstant(m, "TYPE_CLASS", ClassBlock);
PyModule_AddIntConstant(m, "TYPE_MODULE", ModuleBlock);
PyModule_AddIntMacro(m, LOCAL);
PyModule_AddIntMacro(m, GLOBAL_EXPLICIT);
PyModule_AddIntMacro(m, GLOBAL_IMPLICIT);
PyModule_AddIntMacro(m, FREE);
PyModule_AddIntMacro(m, CELL);
PyModule_AddIntConstant(m, "SCOPE_OFF", SCOPE_OFFSET);
PyModule_AddIntMacro(m, SCOPE_MASK);
if (PyErr_Occurred()) {
Py_DECREF(m);
m = 0;
}
return m;
}
Computing file changes ...