/* Preferred access to parser is through AST. */ mod_ty PyParser_ASTFromStringObject(const char *s, PyObject *filename, int start, PyCompilerFlags *flags, PyArena *arena) { mod_ty mod; PyCompilerFlags localflags; perrdetail err; int iflags = PARSER_FLAGS(flags); node *n = PyParser_ParseStringObject(s, filename, &_PyParser_Grammar, start, &err, &iflags); if (flags == NULL) { localflags.cf_flags = 0; flags = &localflags; } if (n) { flags->cf_flags |= iflags & PyCF_MASK; mod = PyAST_FromNodeObject(n, flags, filename, arena); PyNode_Free(n); } else { err_input(&err); mod = NULL; } err_free(&err); return mod; }
node * PyParser_ParseStringFlagsFilenameEx(const char *s, const char *filename_str, grammar *g, int start, perrdetail *err_ret, int *flags) { node *n; PyObject *filename = NULL; #ifndef PGEN if (filename_str != NULL) { filename = PyUnicode_DecodeFSDefault(filename_str); if (filename == NULL) { err_ret->error = E_ERROR; return NULL; } } #endif n = PyParser_ParseStringObject(s, filename, g, start, err_ret, flags); #ifndef PGEN Py_XDECREF(filename); #endif return n; }