diff options
author | Benjamin Peterson <benjamin@python.org> | 2011-08-09 16:08:39 -0500 |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2011-08-09 16:08:39 -0500 |
commit | e2498419034eade424fa744e1505980e64ba759b (patch) | |
tree | 22fe40b438aebff64ba9ab784a79cebce252cd23 /Parser | |
parent | 18205baf251495b5a54b08c1f9b0e1763eb27aa1 (diff) | |
download | cpython-git-e2498419034eade424fa744e1505980e64ba759b.tar.gz |
add a asdl bytes type, so Bytes.s be properly typechecked
Diffstat (limited to 'Parser')
-rw-r--r-- | Parser/Python.asdl | 4 | ||||
-rw-r--r-- | Parser/asdl.py | 2 | ||||
-rwxr-xr-x | Parser/asdl_c.py | 10 |
3 files changed, 13 insertions, 3 deletions
diff --git a/Parser/Python.asdl b/Parser/Python.asdl index dc322dc9f3..6955199280 100644 --- a/Parser/Python.asdl +++ b/Parser/Python.asdl @@ -1,4 +1,4 @@ --- ASDL's four builtin types are identifier, int, string, object +-- ASDL's five builtin types are identifier, int, string, bytes, object module Python { @@ -67,7 +67,7 @@ module Python expr? starargs, expr? kwargs) | Num(object n) -- a number as a PyObject. | Str(string s) -- need to specify raw, unicode, etc? - | Bytes(string s) + | Bytes(bytes s) | Ellipsis -- other literals? bools? diff --git a/Parser/asdl.py b/Parser/asdl.py index c63dfa7fb6..c90d2e26c3 100644 --- a/Parser/asdl.py +++ b/Parser/asdl.py @@ -228,7 +228,7 @@ class ASDLParser(spark.GenericParser, object): " field ::= Id ? " return Field(type[0], opt=True) -builtin_types = ("identifier", "string", "int", "bool", "object") +builtin_types = ("identifier", "string", "bytes", "int", "bool", "object") # below is a collection of classes to capture the AST of an AST :-) # not sure if any of the methods are useful yet, but I'm adding them diff --git a/Parser/asdl_c.py b/Parser/asdl_c.py index 432d7b7c25..0b95aaa1e8 100755 --- a/Parser/asdl_c.py +++ b/Parser/asdl_c.py @@ -776,6 +776,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) { @@ -813,6 +814,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; |