Commit 2895952e authored by Stefan Behnel's avatar Stefan Behnel

class names are identifiers, too

parent eaa1722e
...@@ -2423,11 +2423,10 @@ class ClassNode(ExprNode): ...@@ -2423,11 +2423,10 @@ class ClassNode(ExprNode):
# doc ExprNode or None Doc string # doc ExprNode or None Doc string
# module_name string Name of defining module # module_name string Name of defining module
subexprs = ['name', 'bases', 'doc'] subexprs = ['bases', 'doc']
def analyse_types(self, env): def analyse_types(self, env):
self.name.analyse_types(env) self.cname = env.intern_identifier(self.name)
self.name = self.name.coerce_to_pyobject(env)
self.bases.analyse_types(env) self.bases.analyse_types(env)
if self.doc: if self.doc:
self.doc.analyse_types(env) self.doc.analyse_types(env)
...@@ -2436,7 +2435,7 @@ class ClassNode(ExprNode): ...@@ -2436,7 +2435,7 @@ class ClassNode(ExprNode):
self.type = py_object_type self.type = py_object_type
self.is_temp = 1 self.is_temp = 1
env.use_utility_code(create_class_utility_code); env.use_utility_code(create_class_utility_code);
def generate_result_code(self, code): def generate_result_code(self, code):
if self.doc: if self.doc:
code.put_error_if_neg(self.pos, code.put_error_if_neg(self.pos,
...@@ -2448,7 +2447,7 @@ class ClassNode(ExprNode): ...@@ -2448,7 +2447,7 @@ class ClassNode(ExprNode):
self.result_code, self.result_code,
self.bases.py_result(), self.bases.py_result(),
self.dict.py_result(), self.dict.py_result(),
self.name.py_result(), self.cname,
self.module_name, self.module_name,
code.error_goto_if_null(self.result_code, self.pos))) code.error_goto_if_null(self.result_code, self.pos)))
...@@ -4022,7 +4021,11 @@ static PyObject *__Pyx_CreateClass( ...@@ -4022,7 +4021,11 @@ static PyObject *__Pyx_CreateClass(
PyObject *py_modname; PyObject *py_modname;
PyObject *result = 0; PyObject *result = 0;
#if PY_MAJOR_VERSION < 3
py_modname = PyString_FromString(modname); py_modname = PyString_FromString(modname);
#else
py_modname = PyUnicode_FromString(modname);
#endif
if (!py_modname) if (!py_modname)
goto bad; goto bad;
if (PyDict_SetItemString(dict, "__module__", py_modname) < 0) if (PyDict_SetItemString(dict, "__module__", py_modname) < 0)
......
...@@ -1967,8 +1967,7 @@ class PyClassDefNode(StatNode, BlockNode): ...@@ -1967,8 +1967,7 @@ class PyClassDefNode(StatNode, BlockNode):
doc_node = ExprNodes.StringNode(pos, value = doc) doc_node = ExprNodes.StringNode(pos, value = doc)
else: else:
doc_node = None doc_node = None
self.classobj = ExprNodes.ClassNode(pos, self.classobj = ExprNodes.ClassNode(pos, name = name,
name = ExprNodes.StringNode(pos, value = name),
bases = bases, dict = self.dict, doc = doc_node) bases = bases, dict = self.dict, doc = doc_node)
self.target = ExprNodes.NameNode(pos, name = name) self.target = ExprNodes.NameNode(pos, name = name)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment