summaryrefslogtreecommitdiff
path: root/Cython/Compiler/ModuleNode.py
diff options
context:
space:
mode:
authorStefan Behnel <stefan_ml@behnel.de>2018-09-29 09:32:09 +0200
committerGitHub <noreply@github.com>2018-09-29 09:32:09 +0200
commita6990434f908b9aa075a79ebe23d3daf0efccaa8 (patch)
treeec7878801f222ab944a612ac191c3248b1fe0d7a /Cython/Compiler/ModuleNode.py
parentba9d273aa7526b179dc4f5cb6b65ceedc5b41210 (diff)
parent9e7fdef1de7b185f3c6925cecefea746e6e83853 (diff)
downloadcython-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.py22
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)