Staging
v0.5.1
v0.5.1
https://github.com/python/cpython
Revision dcdc87235161b7641c76723fbab4153f5f21767b authored by Georg Brandl on 06 October 2010, 09:01:31 UTC, committed by Georg Brandl on 06 October 2010, 09:01:31 UTC
svn+ssh://svn.python.org/python/branches/py3k ................ r77835 | martin.v.loewis | 2010-01-30 01:16:49 +0100 (Sa, 30 Jan 2010) | 9 lines Merged revisions 77834 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r77834 | martin.v.loewis | 2010-01-30 01:15:44 +0100 (Sa, 30 Jan 2010) | 2 lines Add Victor Stinner. ........ ................ r78455 | martin.v.loewis | 2010-02-25 21:45:06 +0100 (Do, 25 Feb 2010) | 17 lines Merged revisions 78327,78399,78454 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r78327 | andrew.kuchling | 2010-02-22 18:21:54 +0100 (Mo, 22 Feb 2010) | 1 line Note granting of commit privileges to Larry Hastings ........ r78399 | brett.cannon | 2010-02-24 02:38:04 +0100 (Mi, 24 Feb 2010) | 1 line Record that Dino Viehland got commit privs. ........ r78454 | martin.v.loewis | 2010-02-25 21:42:40 +0100 (Do, 25 Feb 2010) | 2 lines Add Florent Xicluna. ........ ................ r79375 | martin.v.loewis | 2010-03-24 16:07:12 +0100 (Mi, 24 Mär 2010) | 9 lines Merged revisions 79374 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r79374 | martin.v.loewis | 2010-03-24 16:05:53 +0100 (Mi, 24 Mär 2010) | 2 lines Add Brian Curtin. ........ ................ r80153 | martin.v.loewis | 2010-04-17 19:11:55 +0200 (Sa, 17 Apr 2010) | 9 lines Merged revisions 80152 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r80152 | martin.v.loewis | 2010-04-17 19:10:55 +0200 (Sa, 17 Apr 2010) | 2 lines Add Giampaolo. ........ ................ r80302 | martin.v.loewis | 2010-04-21 08:38:30 +0200 (Mi, 21 Apr 2010) | 9 lines Merged revisions 80301 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r80301 | martin.v.loewis | 2010-04-21 08:37:48 +0200 (Mi, 21 Apr 2010) | 2 lines Add Tim Golden. ........ ................ r81532 | martin.v.loewis | 2010-05-25 22:07:11 +0200 (Di, 25 Mai 2010) | 9 lines Merged revisions 81531 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r81531 | martin.v.loewis | 2010-05-25 22:06:02 +0200 (Di, 25 Mai 2010) | 2 lines Add Alexander Belopolsky. ........ ................ r83735 | martin.v.loewis | 2010-08-04 21:08:20 +0200 (Mi, 04 Aug 2010) | 2 lines Add Terry Reedy. ................ r83939 | brett.cannon | 2010-08-11 02:18:19 +0200 (Mi, 11 Aug 2010) | 2 lines Note that Éric Araujo has been given commit privileges. ................ r83943 | martin.v.loewis | 2010-08-11 07:48:57 +0200 (Mi, 11 Aug 2010) | 2 lines Add George Boutsioukis, from the GSoC project. ................ r84166 | martin.v.loewis | 2010-08-18 00:58:42 +0200 (Mi, 18 Aug 2010) | 2 lines Add Ask Solem. ................ r84167 | martin.v.loewis | 2010-08-18 01:16:51 +0200 (Mi, 18 Aug 2010) | 2 lines Correct library name that Ask will work on. ................ r84257 | martin.v.loewis | 2010-08-22 10:46:19 +0200 (So, 22 Aug 2010) | 2 lines Add Daniel Stutzbach. ................ r85215 | martin.v.loewis | 2010-10-04 17:48:14 +0200 (Mo, 04 Okt 2010) | 2 lines Add Tal Einat. ................
1 parent f243dad
Tip revision: dcdc87235161b7641c76723fbab4153f5f21767b authored by Georg Brandl on 06 October 2010, 09:01:31 UTC
Merged revisions 77835,78455,79375,80153,80302,81532,83735,83939,83943,84166-84167,84257,85215 via svnmerge from
Merged revisions 77835,78455,79375,80153,80302,81532,83735,83939,83943,84166-84167,84257,85215 via svnmerge from
Tip revision: dcdc872
future.c
#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"
#define ERR_LATE_FUTURE \
"from __future__ imports must occur at the beginning of the file"
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 = _PyUnicode_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, FUTURE_PRINT_FUNCTION) == 0) {
continue;
} else if (strcmp(feature, FUTURE_UNICODE_LITERALS) == 0) {
continue;
} else if (strcmp(feature, FUTURE_BARRY_AS_BDFL) == 0) {
ff->ff_features |= CO_FUTURE_BARRY_AS_BDFL;
} 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 handle 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;
}
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...