diff options
Diffstat (limited to 'Cython/Compiler/ModuleNode.py')
| -rw-r--r-- | Cython/Compiler/ModuleNode.py | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/Cython/Compiler/ModuleNode.py b/Cython/Compiler/ModuleNode.py index f170803fd..6764e6db9 100644 --- a/Cython/Compiler/ModuleNode.py +++ b/Cython/Compiler/ModuleNode.py @@ -3059,10 +3059,24 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode): else: code.put('sizeof(%s), ' % objstruct) - code.putln('%i); if (!%s) %s' % ( - not type.is_external or type.is_subclassed, - type.typeptr_cname, - error_code)) + # check_size + if not type.is_external or type.is_subclassed: + if type.check_size != 'min': + raise AttributeError("unexpected check_size value '%s' when " + "compiling %s.%s" % (type.check_size, module_name, type.name)) + cs = 0 + elif type.check_size == 'min': + cs = 1 + elif type.check_size == True: + cs = 0 + elif type.check_size == False: + cs = 2 + else: + raise AttributeError("invalid value for check_size '%s' when compiling " + "%s.%s" % (type.check_size, module_name, type.name)) + code.putln('%d);' % cs) + + code.putln(' if (!%s) %s' % (type.typeptr_cname, error_code)) def generate_type_ready_code(self, entry, code): Nodes.CClassDefNode.generate_type_ready_code(entry, code) |
