Mercurial > cpython-lru_cache-weakref
view Python/future.c @ 42110:e4f649c4f457
Merged revisions 55962-56019 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/p3yk
................
r55985 | neal.norwitz | 2007-06-14 20:14:38 -0700 (Thu, 14 Jun 2007) | 2 lines
All these tests have been flaky wrt reporting leaks. Disable them.
................
r56003 | neal.norwitz | 2007-06-15 19:41:09 -0700 (Fri, 15 Jun 2007) | 1 line
Fix typo (certain).
................
r56004 | neal.norwitz | 2007-06-15 20:54:18 -0700 (Fri, 15 Jun 2007) | 4 lines
Fix it so test_os no longer reports ref leaks by clearing all the caches
the ABCMeta stores on the class. Apply this to all the ABC collections
as well as the class of os.environ which inherits from an ABC collection.
................
r56013 | neal.norwitz | 2007-06-17 19:56:31 -0700 (Sun, 17 Jun 2007) | 4 lines
This should make it a little easier when adding new collections which use ABCs.
The new subclass won't need to be listed in regrtest.
It will be even better when Guido adds weakrefs. :-)
................
r56014 | martin.v.loewis | 2007-06-17 20:15:51 -0700 (Sun, 17 Jun 2007) | 1 line
Drop inline, as it's not support by VS 2003.
................
r56015 | martin.v.loewis | 2007-06-17 20:17:19 -0700 (Sun, 17 Jun 2007) | 1 line
Expect long objects for DWORD values.
................
r56016 | martin.v.loewis | 2007-06-17 20:18:01 -0700 (Sun, 17 Jun 2007) | 1 line
Drop modules that have been deleted.
................
r56017 | martin.v.loewis | 2007-06-17 20:18:55 -0700 (Sun, 17 Jun 2007) | 1 line
Bump DLL version number to 30.
................
r56018 | neal.norwitz | 2007-06-17 20:55:43 -0700 (Sun, 17 Jun 2007) | 62 lines
Merged revisions 55951-56013 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r55956 | thomas.heller | 2007-06-13 00:07:03 -0700 (Wed, 13 Jun 2007) | 2 lines
Do not hardcode the buildbot's directory name.
........
r55957 | thomas.heller | 2007-06-13 00:07:41 -0700 (Wed, 13 Jun 2007) | 2 lines
Notes about building tcl/tk for windows/AMD64.
........
r55958 | thomas.heller | 2007-06-13 00:54:57 -0700 (Wed, 13 Jun 2007) | 2 lines
Build bzip2.
........
r55962 | walter.doerwald | 2007-06-13 09:57:12 -0700 (Wed, 13 Jun 2007) | 8 lines
Add T_PYSSIZET in structmember.h: This can be used for
Py_ssize_t members.
Simplify the implementation of UnicodeError objects:
start and end attributes are now stored directly as
Py_ssize_t members, which simplifies various get and
set functions.
........
r55975 | martin.v.loewis | 2007-06-14 13:46:25 -0700 (Thu, 14 Jun 2007) | 3 lines
Patch #1734014: Use _I64_MAX instead of LLONG_MAX.
Will backport to 2.5.
........
r55984 | neal.norwitz | 2007-06-14 20:11:41 -0700 (Thu, 14 Jun 2007) | 4 lines
urllib2_localnet says it leaks probably due to threads. So ignore it.
popen2 is also complaining probably for similar reasons.
make install always reports failure, so don't mail in this case.
........
r56001 | andrew.kuchling | 2007-06-15 15:43:03 -0700 (Fri, 15 Jun 2007) | 1 line
Add a word
........
r56005 | martin.v.loewis | 2007-06-16 03:08:43 -0700 (Sat, 16 Jun 2007) | 2 lines
Mention Senthil Kumaran.
........
r56006 | georg.brandl | 2007-06-16 10:10:12 -0700 (Sat, 16 Jun 2007) | 2 lines
Add missing \versionadded.
........
r56009 | neal.norwitz | 2007-06-17 11:48:32 -0700 (Sun, 17 Jun 2007) | 1 line
SF #1738670, make example in doc work
........
r56011 | neal.norwitz | 2007-06-17 19:46:36 -0700 (Sun, 17 Jun 2007) | 1 line
SF #1738754, remove extra backslash in string
........
r56012 | neal.norwitz | 2007-06-17 19:50:15 -0700 (Sun, 17 Jun 2007) | 1 line
Revert last change for SF #1738754, there's no print in there.
........
................
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Mon, 18 Jun 2007 17:58:50 +0000 |
| parents | cd125fe83051 |
| children | 302aeee32da8 |
line wrap: on
line source
#include "Python.h" #include "Python-ast.h" #include "node.h" #include "token.h" #include "graminit.h" #include "code.h" #include "compile.h" #include "symtable.h" #define UNDEFINED_FUTURE_FEATURE "future feature %.100s is not defined" static int future_check_features(PyFutureFeatures *ff, stmt_ty s, const char *filename) { int i; asdl_seq *names; assert(s->kind == ImportFrom_kind); names = s->v.ImportFrom.names; for (i = 0; i < asdl_seq_LEN(names); i++) { alias_ty name = (alias_ty)asdl_seq_GET(names, i); const char *feature = PyString_AsString(name->name); if (!feature) return 0; if (strcmp(feature, FUTURE_NESTED_SCOPES) == 0) { continue; } else if (strcmp(feature, FUTURE_GENERATORS) == 0) { continue; } else if (strcmp(feature, FUTURE_DIVISION) == 0) { continue; } else if (strcmp(feature, FUTURE_ABSOLUTE_IMPORT) == 0) { continue; } else if (strcmp(feature, FUTURE_WITH_STATEMENT) == 0) { continue; } else if (strcmp(feature, "braces") == 0) { PyErr_SetString(PyExc_SyntaxError, "not a chance"); PyErr_SyntaxLocation(filename, s->lineno); return 0; } else { PyErr_Format(PyExc_SyntaxError, UNDEFINED_FUTURE_FEATURE, feature); PyErr_SyntaxLocation(filename, s->lineno); return 0; } } return 1; } static int future_parse(PyFutureFeatures *ff, mod_ty mod, const char *filename) { int i, found_docstring = 0, done = 0, prev_line = 0; static PyObject *future; if (!future) { future = PyUnicode_InternFromString("__future__"); if (!future) return 0; } if (!(mod->kind == Module_kind || mod->kind == Interactive_kind)) return 1; /* A subsequent pass will detect future imports that don't appear at the beginning of the file. There's one case, however, that is easier to handl here: A series of imports joined by semi-colons, where the first import is a future statement but some subsequent import has the future form but is preceded by a regular import. */ for (i = 0; i < asdl_seq_LEN(mod->v.Module.body); i++) { stmt_ty s = (stmt_ty)asdl_seq_GET(mod->v.Module.body, i); if (done && s->lineno > prev_line) return 1; prev_line = s->lineno; /* The tests below will return from this function unless it is still possible to find a future statement. The only things that can precede a future statement are another future statement and a doc string. */ if (s->kind == ImportFrom_kind) { if (s->v.ImportFrom.module == future) { if (done) { PyErr_SetString(PyExc_SyntaxError, ERR_LATE_FUTURE); PyErr_SyntaxLocation(filename, s->lineno); return 0; } if (!future_check_features(ff, s, filename)) return 0; ff->ff_lineno = s->lineno; } else done = 1; } else if (s->kind == Expr_kind && !found_docstring) { expr_ty e = s->v.Expr.value; if (e->kind != Str_kind) done = 1; else found_docstring = 1; } else done = 1; } return 1; } PyFutureFeatures * PyFuture_FromAST(mod_ty mod, const char *filename) { PyFutureFeatures *ff; ff = (PyFutureFeatures *)PyObject_Malloc(sizeof(PyFutureFeatures)); if (ff == NULL) { PyErr_NoMemory(); return NULL; } ff->ff_features = 0; ff->ff_lineno = -1; if (!future_parse(ff, mod, filename)) { PyObject_Free(ff); return NULL; } return ff; }
