From 0f20d10518d4d7a3e7233583fa9c9d78901b2b67 Mon Sep 17 00:00:00 2001 From: Dag Sverre Seljebotn Date: Tue, 26 May 2009 22:42:03 +0200 Subject: [PATCH] Revert previous fix of #303 --- Cython/Compiler/Nodes.py | 23 ++++++++--------------- Cython/Compiler/ParseTreeTransforms.py | 15 +++------------ 2 files changed, 11 insertions(+), 27 deletions(-) diff --git a/Cython/Compiler/Nodes.py b/Cython/Compiler/Nodes.py index 4e1c8606..0b572e7e 100644 --- a/Cython/Compiler/Nodes.py +++ b/Cython/Compiler/Nodes.py @@ -801,25 +801,18 @@ class CVarDefNode(StatNode): self.dest_scope = dest_scope base_type = self.base_type.analyse(env) - need_property = False + # If the field is an external typedef, we cannot be sure about the type, + # so do conversion ourself rather than rely on the CPython mechanism (through + # a property; made in AnalyseDeclarationsTransform). if (dest_scope.is_c_class_scope - and self.visibility == 'public' - and base_type.is_pyobject - and (base_type.is_builtin_type or base_type.is_extension_type)): - # If the field is settable and extension type, then the CPython mechanism does - # not do enough type-checking for us. - need_property = True - elif (base_type.is_typedef and base_type.typedef_is_external - and (self.visibility in ('public', 'readonly'))): - # If the field is an external typedef, we cannot be sure about the type, - # so do conversion ourself rather than rely on the CPython mechanism (through - # a property; made in AnalyseDeclarationsTransform). + and self.visibility == 'public' + and base_type.is_pyobject + and (base_type.is_builtin_type or base_type.is_extension_type)): + self.need_properties = [] need_property = True - - if need_property: visibility = 'private' - self.need_properties = [] else: + need_property = False visibility = self.visibility for declarator in self.declarators: diff --git a/Cython/Compiler/ParseTreeTransforms.py b/Cython/Compiler/ParseTreeTransforms.py index 1f3bf7d2..36200d74 100644 --- a/Cython/Compiler/ParseTreeTransforms.py +++ b/Cython/Compiler/ParseTreeTransforms.py @@ -625,12 +625,6 @@ property NAME: ATTR = value """, level='c_class') - readonly_property = TreeFragment(u""" -property NAME: - def __get__(self): - return ATTR - """, level='c_class') - def __call__(self, root): self.env_stack = [root.scope] # needed to determine if a cdef var is declared after it's used. @@ -707,7 +701,7 @@ property NAME: # mechanism for them. stats = [] for entry in node.need_properties: - property = self.create_Property(entry, node.visibility == 'readonly') + property = self.create_Property(entry) property.analyse_declarations(node.dest_scope) self.visit(property) stats.append(property) @@ -715,11 +709,8 @@ property NAME: else: return None - def create_Property(self, entry, readonly): - if readonly: - template = self.readonly_property - else: - template = self.basic_property + def create_Property(self, entry): + template = self.basic_property property = template.substitute({ u"ATTR": AttributeNode(pos=entry.pos, obj=NameNode(pos=entry.pos, name="self"), -- 2.26.2