summaryrefslogtreecommitdiffstats
path: root/Parser
diff options
context:
space:
mode:
authorSteve Dower <steve.dower@microsoft.com>2019-05-23 15:45:22 (GMT)
committerGitHub <noreply@github.com>2019-05-23 15:45:22 (GMT)
commitb82e17e626f7b1cd98aada0b1ebb65cb9f8fb184 (patch)
tree5370a2a075707cb0b37ce135cad6ffe23da424c4 /Parser
parente788057a9188ff37e232729815dfda2529079420 (diff)
downloadcpython-b82e17e626f7b1cd98aada0b1ebb65cb9f8fb184.zip
cpython-b82e17e626f7b1cd98aada0b1ebb65cb9f8fb184.tar.gz
cpython-b82e17e626f7b1cd98aada0b1ebb65cb9f8fb184.tar.bz2
bpo-36842: Implement PEP 578 (GH-12613)
Adds sys.audit, sys.addaudithook, io.open_code, and associated C APIs.
Diffstat (limited to 'Parser')
-rw-r--r--Parser/asdl_c.py4
-rw-r--r--Parser/parsetok.c9
2 files changed, 13 insertions, 0 deletions
diff --git a/Parser/asdl_c.py b/Parser/asdl_c.py
index cb0e6d7..d84c1b1 100644
--- a/Parser/asdl_c.py
+++ b/Parser/asdl_c.py
@@ -1201,6 +1201,10 @@ mod_ty PyAST_obj2mod_ex(PyObject* ast, PyArena* arena, int mode, int feature_ver
char *req_name[] = {"Module", "Expression", "Interactive"};
int isinstance;
+ if (PySys_Audit("compile", "OO", ast, Py_None) < 0) {
+ return NULL;
+ }
+
req_type[0] = (PyObject*)Module_type;
req_type[1] = (PyObject*)Expression_type;
req_type[2] = (PyObject*)Interactive_type;
diff --git a/Parser/parsetok.c b/Parser/parsetok.c
index 55fd7f7..a5d7897 100644
--- a/Parser/parsetok.c
+++ b/Parser/parsetok.c
@@ -94,6 +94,11 @@ PyParser_ParseStringObject(const char *s, PyObject *filename,
if (initerr(err_ret, filename) < 0)
return NULL;
+ if (PySys_Audit("compile", "yO", s, err_ret->filename) < 0) {
+ err_ret->error = E_ERROR;
+ return NULL;
+ }
+
if (*flags & PyPARSE_IGNORE_COOKIE)
tok = PyTokenizer_FromUTF8(s, exec_input);
else
@@ -165,6 +170,10 @@ PyParser_ParseFileObject(FILE *fp, PyObject *filename,
if (initerr(err_ret, filename) < 0)
return NULL;
+ if (PySys_Audit("compile", "OO", Py_None, err_ret->filename) < 0) {
+ return NULL;
+ }
+
if ((tok = PyTokenizer_FromFile(fp, enc, ps1, ps2)) == NULL) {
err_ret->error = E_NOMEM;
return NULL;