diff options
author | Stefan Behnel <stefan_ml@behnel.de> | 2018-09-29 09:32:09 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-29 09:32:09 +0200 |
commit | a6990434f908b9aa075a79ebe23d3daf0efccaa8 (patch) | |
tree | ec7878801f222ab944a612ac191c3248b1fe0d7a /Cython/Compiler/ModuleNode.py | |
parent | ba9d273aa7526b179dc4f5cb6b65ceedc5b41210 (diff) | |
parent | 9e7fdef1de7b185f3c6925cecefea746e6e83853 (diff) | |
download | cython-a6990434f908b9aa075a79ebe23d3daf0efccaa8.tar.gz |
Merge pull request #2627 from mattip/check_size2
ENH: add check_size option to ctypedef class for external classes
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) |