summaryrefslogtreecommitdiff
path: root/numpy/f2py/lib/block_statements.py
diff options
context:
space:
mode:
authorPearu Peterson <pearu.peterson@gmail.com>2006-09-30 21:02:52 +0000
committerPearu Peterson <pearu.peterson@gmail.com>2006-09-30 21:02:52 +0000
commit87a1a601efc59a98dfc67b2e863189b44deff4a6 (patch)
treeefe49a61bb64edc538d3bcfd710310c8bbb34316 /numpy/f2py/lib/block_statements.py
parent186a47573debdfb937e95974354a7ab140058b7d (diff)
downloadnumpy-87a1a601efc59a98dfc67b2e863189b44deff4a6.tar.gz
F2PY G3: wrapping nested derived types.
Diffstat (limited to 'numpy/f2py/lib/block_statements.py')
-rw-r--r--numpy/f2py/lib/block_statements.py31
1 files changed, 31 insertions, 0 deletions
diff --git a/numpy/f2py/lib/block_statements.py b/numpy/f2py/lib/block_statements.py
index fa08fc470..f1d4d40f6 100644
--- a/numpy/f2py/lib/block_statements.py
+++ b/numpy/f2py/lib/block_statements.py
@@ -1007,6 +1007,37 @@ class Type(BeginStatement, HasVariables, HasAttributes):
s += tab + 'END TYPE ' + self.name + '\n'
return s
+ # Wrapper methods:
+
+ def get_bit_size(self, _cache={}):
+ try:
+ return _cache[id(self)]
+ except KeyError:
+ s = 0
+ for name,var in self.a.components.items():
+ s += var.get_bit_size()
+ _cache[id(self)] = s
+ return s
+
+ def get_f_type(self):
+ return 'TYPE(%s)' % (self.name)
+
+ def get_c_type(self):
+ return 'f2py_type_%s_%s' % (self.name, self.get_bit_size())
+
+ def get_c_name(self):
+ return 'f2py_type_%s' % (self.name)
+
+ def get_c_struct_name(self):
+ return self.get_c_name() + '_struct'
+
+ def get_c_struct(self):
+ l = []
+ for name, var in self.a.components.items():
+ t = var.get_typedecl()
+ l.append(' %s %s;' % (t.get_c_type(), name))
+ return 'typedef struct {\n%s\n} %s;' % ('\n'.join(l), self.get_c_struct_name())
+
TypeDecl = Type
# Enum