self.default.release_temp(env)
def generate_execution_code(self, code):
- if self.default is not None:
- self.default.generate_evaluation_code(code)
- if self.type.is_pyobject:
- self.default.make_owned_reference(code)
- code.putln('%s = %s;' % (self.entry.cname, self.default.result_as(self.entry.type)))
- self.default.generate_post_assignment_code(code)
- code.putln()
+ assert self.default is None
+ # PostParse creates assignment statements for any
+ # default values
class CPtrDeclaratorNode(CDeclaratorNode):
# base CDeclaratorNode
as such).
Specifically:
+ - Default values to cdef assignments are turned into single
+ assignments following the declaration.
- CBufferAccessTypeNode has its options interpreted:
Any first positional argument goes into the "dtype" attribute,
any "ndim" keyword argument goes into the "ndim" attribute and
if a more pure Abstract Syntax Tree is wanted.
"""
+ def visit_CVarDefNode(self, node):
+ # This assumes only plain names and pointers are assignable on
+ # declaration.
+ self.visitchildren(node)
+ stats = [node]
+ for decl in node.declarators:
+ while isinstance(decl, CPtrDeclaratorNode):
+ decl = decl.base
+ if isinstance(decl, CNameDeclaratorNode):
+ if decl.default is not None:
+ stats.append(SingleAssignmentNode(node.pos,
+ lhs=NameNode(node.pos, name=decl.name),
+ rhs=decl.default))
+ decl.default = None
+ return stats
+
+
buffer_options = ("dtype", "ndim") # ordered!
def visit_CBufferAccessTypeNode(self, node):
options = {}
node.body.analyse_expressions(node.local_scope)
self.visitchildren(node)
return node
-
+
class MarkClosureVisitor(CythonTransform):
needs_closure = False
acquired
0 1 2 3 4 5
released
+
+ >>> cdef_assignment(A, 6)
+ acquired A
+ 0 1 2 3 4 5
+ released A
+
>>> printbuf_float(MockBuffer("f", [1.0, 1.25, 0.75, 1.0]), (4,))
acquired
1.0 1.25 0.75 1.0
print bufarg[i],
print
+def cdef_assignment(obj, n):
+ cdef object[int] buf = obj
+ cdef int i
+ for i in range(n):
+ print buf[i],
+ print
-
-# default values
-#
-
def printbuf_float(o, shape):
# should make shape builtin
cdef object[float] buf