diff options
author | Benjamin Peterson <benjamin@python.org> | 2011-08-09 21:08:39 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2011-08-09 21:08:39 (GMT) |
commit | e2498419034eade424fa744e1505980e64ba759b (patch) | |
tree | 22fe40b438aebff64ba9ab784a79cebce252cd23 /Python/Python-ast.c | |
parent | 18205baf251495b5a54b08c1f9b0e1763eb27aa1 (diff) | |
download | cpython-e2498419034eade424fa744e1505980e64ba759b.zip cpython-e2498419034eade424fa744e1505980e64ba759b.tar.gz cpython-e2498419034eade424fa744e1505980e64ba759b.tar.bz2 |
add a asdl bytes type, so Bytes.s be properly typechecked
Diffstat (limited to 'Python/Python-ast.c')
-rw-r--r-- | Python/Python-ast.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/Python/Python-ast.c b/Python/Python-ast.c index 68b1097..f6e345c 100644 --- a/Python/Python-ast.c +++ b/Python/Python-ast.c @@ -573,6 +573,7 @@ static PyObject* ast2obj_object(void *o) } #define ast2obj_identifier ast2obj_object #define ast2obj_string ast2obj_object +#define ast2obj_bytes ast2obj_object static PyObject* ast2obj_int(long b) { @@ -610,6 +611,15 @@ static int obj2ast_string(PyObject* obj, PyObject** out, PyArena* arena) return obj2ast_object(obj, out, arena); } +static int obj2ast_bytes(PyObject* obj, PyObject** out, PyArena* arena) +{ + if (!PyBytes_CheckExact(obj)) { + PyErr_SetString(PyExc_TypeError, "AST bytes must be of type bytes"); + return 1; + } + return obj2ast_object(obj, out, arena); +} + static int obj2ast_int(PyObject* obj, int* out, PyArena* arena) { int i; @@ -1773,7 +1783,7 @@ Str(string s, int lineno, int col_offset, PyArena *arena) } expr_ty -Bytes(string s, int lineno, int col_offset, PyArena *arena) +Bytes(bytes s, int lineno, int col_offset, PyArena *arena) { expr_ty p; if (!s) { @@ -2804,7 +2814,7 @@ ast2obj_expr(void* _o) case Bytes_kind: result = PyType_GenericNew(Bytes_type, NULL, NULL); if (!result) goto failed; - value = ast2obj_string(o->v.Bytes.s); + value = ast2obj_bytes(o->v.Bytes.s); if (!value) goto failed; if (PyObject_SetAttrString(result, "s", value) == -1) goto failed; @@ -5509,13 +5519,13 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) return 1; } if (isinstance) { - string s; + bytes s; if (PyObject_HasAttrString(obj, "s")) { int res; tmp = PyObject_GetAttrString(obj, "s"); if (tmp == NULL) goto failed; - res = obj2ast_string(tmp, &s, arena); + res = obj2ast_bytes(tmp, &s, arena); if (res != 0) goto failed; Py_XDECREF(tmp); tmp = NULL; |