Mercurial > cpython-lru_cache-weakref
annotate Python/future.c @ 87690:66c1c9f32567 default tip
Add use_weakref option to functools.lru_cache
The use_weakref option makes lru_cache create weak references to the function
arguments when creating the cache key, which prevents them from staying in the
memory forever even after all other references to them are gone.
This is a proof of concept for http://bugs.python.org/issue19859
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Tue, 03 Dec 2013 16:02:48 +0100 |
| parents | df2fdd42b375 |
| children |
| rev | line source |
|---|---|
|
16799
08d937107fe6
Improved __future__ parser; still more to do
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
1 #include "Python.h" |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
34539
diff
changeset
|
2 #include "Python-ast.h" |
|
16799
08d937107fe6
Improved __future__ parser; still more to do
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
3 #include "node.h" |
|
08d937107fe6
Improved __future__ parser; still more to do
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
4 #include "token.h" |
|
08d937107fe6
Improved __future__ parser; still more to do
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
5 #include "graminit.h" |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
34539
diff
changeset
|
6 #include "code.h" |
|
16799
08d937107fe6
Improved __future__ parser; still more to do
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
7 #include "symtable.h" |
|
08d937107fe6
Improved __future__ parser; still more to do
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
8 |
|
08d937107fe6
Improved __future__ parser; still more to do
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
9 #define UNDEFINED_FUTURE_FEATURE "future feature %.100s is not defined" |
|
49633
bd0e9a9cd283
Merged revisions 67028,67040,67044,67046,67052,67065,67070,67077,67082 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
10 #define ERR_LATE_FUTURE \ |
|
bd0e9a9cd283
Merged revisions 67028,67040,67044,67046,67052,67065,67070,67077,67082 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
11 "from __future__ imports must occur at the beginning of the file" |
|
16799
08d937107fe6
Improved __future__ parser; still more to do
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
12 |
|
08d937107fe6
Improved __future__ parser; still more to do
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
13 static int |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
82709
diff
changeset
|
14 future_check_features(PyFutureFeatures *ff, stmt_ty s, PyObject *filename) |
|
16799
08d937107fe6
Improved __future__ parser; still more to do
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
15 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
16 int i; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
17 asdl_seq *names; |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
34539
diff
changeset
|
18 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
19 assert(s->kind == ImportFrom_kind); |
|
16799
08d937107fe6
Improved __future__ parser; still more to do
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
20 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
21 names = s->v.ImportFrom.names; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
22 for (i = 0; i < asdl_seq_LEN(names); i++) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
23 alias_ty name = (alias_ty)asdl_seq_GET(names, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
24 const char *feature = _PyUnicode_AsString(name->name); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
25 if (!feature) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
26 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
27 if (strcmp(feature, FUTURE_NESTED_SCOPES) == 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
28 continue; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
29 } else if (strcmp(feature, FUTURE_GENERATORS) == 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
30 continue; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
31 } else if (strcmp(feature, FUTURE_DIVISION) == 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
32 continue; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
33 } else if (strcmp(feature, FUTURE_ABSOLUTE_IMPORT) == 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
34 continue; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
35 } else if (strcmp(feature, FUTURE_WITH_STATEMENT) == 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
36 continue; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
37 } else if (strcmp(feature, FUTURE_PRINT_FUNCTION) == 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
38 continue; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
39 } else if (strcmp(feature, FUTURE_UNICODE_LITERALS) == 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
40 continue; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
41 } else if (strcmp(feature, FUTURE_BARRY_AS_BDFL) == 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
42 ff->ff_features |= CO_FUTURE_BARRY_AS_BDFL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
43 } else if (strcmp(feature, "braces") == 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
44 PyErr_SetString(PyExc_SyntaxError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
45 "not a chance"); |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
82709
diff
changeset
|
46 PyErr_SyntaxLocationObject(filename, s->lineno, s->col_offset); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
47 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
48 } else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
49 PyErr_Format(PyExc_SyntaxError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
50 UNDEFINED_FUTURE_FEATURE, feature); |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
82709
diff
changeset
|
51 PyErr_SyntaxLocationObject(filename, s->lineno, s->col_offset); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
52 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
53 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
54 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
55 return 1; |
|
16823
acbe74f3a786
Presumed correct compiler pass for future statements
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16799
diff
changeset
|
56 } |
|
acbe74f3a786
Presumed correct compiler pass for future statements
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16799
diff
changeset
|
57 |
|
35862
6867995a18a7
Prevent name pollution by making lots of internal functions static.
Neal Norwitz <nnorwitz@gmail.com>
parents:
35742
diff
changeset
|
58 static int |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
82709
diff
changeset
|
59 future_parse(PyFutureFeatures *ff, mod_ty mod, PyObject *filename) |
|
16799
08d937107fe6
Improved __future__ parser; still more to do
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
60 { |
|
82687
46cadd3955d0
reject non-docs strings between future imports (closes #17434)
Benjamin Peterson <benjamin@python.org>
parents:
75897
diff
changeset
|
61 int i, done = 0, prev_line = 0; |
| 82709 | 62 stmt_ty first; |
|
16799
08d937107fe6
Improved __future__ parser; still more to do
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
63 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
64 if (!(mod->kind == Module_kind || mod->kind == Interactive_kind)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
65 return 1; |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
34539
diff
changeset
|
66 |
|
82687
46cadd3955d0
reject non-docs strings between future imports (closes #17434)
Benjamin Peterson <benjamin@python.org>
parents:
75897
diff
changeset
|
67 if (asdl_seq_LEN(mod->v.Module.body) == 0) |
|
46cadd3955d0
reject non-docs strings between future imports (closes #17434)
Benjamin Peterson <benjamin@python.org>
parents:
75897
diff
changeset
|
68 return 1; |
|
46cadd3955d0
reject non-docs strings between future imports (closes #17434)
Benjamin Peterson <benjamin@python.org>
parents:
75897
diff
changeset
|
69 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
70 /* A subsequent pass will detect future imports that don't |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
71 appear at the beginning of the file. There's one case, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
72 however, that is easier to handle here: A series of imports |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
73 joined by semi-colons, where the first import is a future |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
74 statement but some subsequent import has the future form |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
75 but is preceded by a regular import. |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
76 */ |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
34539
diff
changeset
|
77 |
|
82687
46cadd3955d0
reject non-docs strings between future imports (closes #17434)
Benjamin Peterson <benjamin@python.org>
parents:
75897
diff
changeset
|
78 i = 0; |
| 82709 | 79 first = (stmt_ty)asdl_seq_GET(mod->v.Module.body, i); |
|
82687
46cadd3955d0
reject non-docs strings between future imports (closes #17434)
Benjamin Peterson <benjamin@python.org>
parents:
75897
diff
changeset
|
80 if (first->kind == Expr_kind && first->v.Expr.value->kind == Str_kind) |
|
46cadd3955d0
reject non-docs strings between future imports (closes #17434)
Benjamin Peterson <benjamin@python.org>
parents:
75897
diff
changeset
|
81 i++; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
82 |
|
82687
46cadd3955d0
reject non-docs strings between future imports (closes #17434)
Benjamin Peterson <benjamin@python.org>
parents:
75897
diff
changeset
|
83 |
|
46cadd3955d0
reject non-docs strings between future imports (closes #17434)
Benjamin Peterson <benjamin@python.org>
parents:
75897
diff
changeset
|
84 for (; i < asdl_seq_LEN(mod->v.Module.body); i++) { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
85 stmt_ty s = (stmt_ty)asdl_seq_GET(mod->v.Module.body, i); |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
34539
diff
changeset
|
86 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
87 if (done && s->lineno > prev_line) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
88 return 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
89 prev_line = s->lineno; |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
34539
diff
changeset
|
90 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
91 /* The tests below will return from this function unless it is |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
92 still possible to find a future statement. The only things |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
93 that can precede a future statement are another future |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
94 statement and a doc string. |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
95 */ |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
34539
diff
changeset
|
96 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
97 if (s->kind == ImportFrom_kind) { |
|
75897
b97964af7299
Fix typo when "PyObject*" was changed to "identifier"
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
75877
diff
changeset
|
98 identifier modname = s->v.ImportFrom.module; |
| 75870 | 99 if (modname && |
| 100 !PyUnicode_CompareWithASCIIString(modname, "__future__")) { | |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
101 if (done) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
102 PyErr_SetString(PyExc_SyntaxError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
103 ERR_LATE_FUTURE); |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
82709
diff
changeset
|
104 PyErr_SyntaxLocationObject(filename, s->lineno, s->col_offset); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
105 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
106 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
107 if (!future_check_features(ff, s, filename)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
108 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
109 ff->ff_lineno = s->lineno; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
110 } |
|
82687
46cadd3955d0
reject non-docs strings between future imports (closes #17434)
Benjamin Peterson <benjamin@python.org>
parents:
75897
diff
changeset
|
111 else { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
112 done = 1; |
|
82687
46cadd3955d0
reject non-docs strings between future imports (closes #17434)
Benjamin Peterson <benjamin@python.org>
parents:
75897
diff
changeset
|
113 } |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
114 } |
|
82687
46cadd3955d0
reject non-docs strings between future imports (closes #17434)
Benjamin Peterson <benjamin@python.org>
parents:
75897
diff
changeset
|
115 else { |
|
46cadd3955d0
reject non-docs strings between future imports (closes #17434)
Benjamin Peterson <benjamin@python.org>
parents:
75897
diff
changeset
|
116 done = 1; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
117 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
118 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
119 return 1; |
|
16799
08d937107fe6
Improved __future__ parser; still more to do
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
120 } |
|
08d937107fe6
Improved __future__ parser; still more to do
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
121 |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
34539
diff
changeset
|
122 |
|
16799
08d937107fe6
Improved __future__ parser; still more to do
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
123 PyFutureFeatures * |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
82709
diff
changeset
|
124 PyFuture_FromASTObject(mod_ty mod, PyObject *filename) |
|
16799
08d937107fe6
Improved __future__ parser; still more to do
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
125 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
126 PyFutureFeatures *ff; |
|
16799
08d937107fe6
Improved __future__ parser; still more to do
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
127 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
128 ff = (PyFutureFeatures *)PyObject_Malloc(sizeof(PyFutureFeatures)); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
129 if (ff == NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
130 PyErr_NoMemory(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
131 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
132 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
133 ff->ff_features = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
134 ff->ff_lineno = -1; |
|
16799
08d937107fe6
Improved __future__ parser; still more to do
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
135 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
136 if (!future_parse(ff, mod, filename)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
137 PyObject_Free(ff); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
138 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
139 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52641
diff
changeset
|
140 return ff; |
|
16799
08d937107fe6
Improved __future__ parser; still more to do
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
141 } |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
82709
diff
changeset
|
142 |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
82709
diff
changeset
|
143 |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
82709
diff
changeset
|
144 PyFutureFeatures * |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
82709
diff
changeset
|
145 PyFuture_FromAST(mod_ty mod, const char *filename_str) |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
82709
diff
changeset
|
146 { |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
82709
diff
changeset
|
147 PyFutureFeatures *ff; |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
82709
diff
changeset
|
148 PyObject *filename; |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
82709
diff
changeset
|
149 |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
82709
diff
changeset
|
150 filename = PyUnicode_DecodeFSDefault(filename_str); |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
82709
diff
changeset
|
151 if (filename == NULL) |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
82709
diff
changeset
|
152 return NULL; |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
82709
diff
changeset
|
153 ff = PyFuture_FromASTObject(mod, filename); |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
82709
diff
changeset
|
154 Py_DECREF(filename); |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
82709
diff
changeset
|
155 return ff; |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
82709
diff
changeset
|
156 } |
