blob: 31ac2e1399265d6d3044d6670ff26de96311ed3e [file] [log] [blame]
Lysandros Nikolaouebebb642020-04-23 18:36:06 +03001#include "pegen_interface.h"
Pablo Galindoc5fc1562020-04-22 23:29:27 +01002
3#include "../tokenizer.h"
4#include "pegen.h"
5
6mod_ty
7PyPegen_ASTFromString(const char *str, int mode, PyCompilerFlags *flags, PyArena *arena)
8{
9 PyObject *filename_ob = PyUnicode_FromString("<string>");
10 if (filename_ob == NULL) {
11 return NULL;
12 }
13 mod_ty result = PyPegen_ASTFromStringObject(str, filename_ob, mode, flags, arena);
14 Py_XDECREF(filename_ob);
15 return result;
16}
17
18mod_ty
19PyPegen_ASTFromStringObject(const char *str, PyObject* filename, int mode, PyCompilerFlags *flags, PyArena *arena)
20{
21 if (PySys_Audit("compile", "yO", str, filename) < 0) {
22 return NULL;
23 }
24
Pablo Galindo2b74c832020-04-27 18:02:07 +010025 mod_ty result = _PyPegen_run_parser_from_string(str, mode, filename, flags, arena);
Pablo Galindoc5fc1562020-04-22 23:29:27 +010026 return result;
27}
28
29mod_ty
Pablo Galindo2b74c832020-04-27 18:02:07 +010030PyPegen_ASTFromFile(const char *filename, int mode, PyCompilerFlags *flags, PyArena *arena)
Pablo Galindoc5fc1562020-04-22 23:29:27 +010031{
32 PyObject *filename_ob = PyUnicode_FromString(filename);
33 if (filename_ob == NULL) {
34 return NULL;
35 }
36
Pablo Galindo2b74c832020-04-27 18:02:07 +010037 mod_ty result = _PyPegen_run_parser_from_file(filename, mode, filename_ob, flags, arena);
Pablo Galindoc5fc1562020-04-22 23:29:27 +010038 Py_XDECREF(filename_ob);
39 return result;
40}
41
42mod_ty
43PyPegen_ASTFromFileObject(FILE *fp, PyObject *filename_ob, int mode,
44 const char *enc, const char *ps1, const char* ps2,
Pablo Galindo2b74c832020-04-27 18:02:07 +010045 PyCompilerFlags *flags, int *errcode, PyArena *arena)
Pablo Galindoc5fc1562020-04-22 23:29:27 +010046{
47 if (PySys_Audit("compile", "OO", Py_None, filename_ob) < 0) {
48 return NULL;
49 }
50 return _PyPegen_run_parser_from_file_pointer(fp, mode, filename_ob, enc, ps1, ps2,
Pablo Galindo2b74c832020-04-27 18:02:07 +010051 flags, errcode, arena);
Pablo Galindoc5fc1562020-04-22 23:29:27 +010052}
53
54PyCodeObject *
55PyPegen_CodeObjectFromString(const char *str, int mode, PyCompilerFlags *flags)
56{
57 PyArena *arena = PyArena_New();
58 if (arena == NULL) {
59 return NULL;
60 }
61
62 PyCodeObject *result = NULL;
63
64 PyObject *filename_ob = PyUnicode_FromString("<string>");
65 if (filename_ob == NULL) {
66 goto error;
67 }
68
69 mod_ty res = PyPegen_ASTFromString(str, mode, flags, arena);
70 if (res == NULL) {
71 goto error;
72 }
73
74 result = PyAST_CompileObject(res, filename_ob, NULL, -1, arena);
75
76error:
77 Py_XDECREF(filename_ob);
78 PyArena_Free(arena);
79 return result;
80}
81
82PyCodeObject *
Pablo Galindo2b74c832020-04-27 18:02:07 +010083PyPegen_CodeObjectFromFile(const char *filename, int mode, PyCompilerFlags* flags)
Pablo Galindoc5fc1562020-04-22 23:29:27 +010084{
85 PyArena *arena = PyArena_New();
86 if (arena == NULL) {
87 return NULL;
88 }
89
90 PyCodeObject *result = NULL;
91
92 PyObject *filename_ob = PyUnicode_FromString(filename);
93 if (filename_ob == NULL) {
94 goto error;
95 }
96
Pablo Galindo2b74c832020-04-27 18:02:07 +010097 mod_ty res = PyPegen_ASTFromFile(filename, mode, flags, arena);
Pablo Galindoc5fc1562020-04-22 23:29:27 +010098 if (res == NULL) {
99 goto error;
100 }
101
102 result = PyAST_CompileObject(res, filename_ob, NULL, -1, arena);
103
104error:
105 Py_XDECREF(filename_ob);
106 PyArena_Free(arena);
107 return result;
108}
109
110PyCodeObject *
111PyPegen_CodeObjectFromFileObject(FILE *fp, PyObject *filename_ob, int mode,
Pablo Galindo2b74c832020-04-27 18:02:07 +0100112 const char *ps1, const char *ps2,
113 PyCompilerFlags *flags, const char *enc, int *errcode)
Pablo Galindoc5fc1562020-04-22 23:29:27 +0100114{
115 PyArena *arena = PyArena_New();
116 if (arena == NULL) {
117 return NULL;
118 }
119
120 PyCodeObject *result = NULL;
121
122 mod_ty res = PyPegen_ASTFromFileObject(fp, filename_ob, mode, enc, ps1, ps2,
Pablo Galindo2b74c832020-04-27 18:02:07 +0100123 flags, errcode, arena);
Pablo Galindoc5fc1562020-04-22 23:29:27 +0100124 if (res == NULL) {
125 goto error;
126 }
127
128 result = PyAST_CompileObject(res, filename_ob, NULL, -1, arena);
129
130error:
131 PyArena_Free(arena);
132 return result;
133}