@@ -195,7 +195,7 @@ class List(Node):
195195
196196 _traversable = ['body' ]
197197
198- def __init__ (self , header = None , body = None , footer = None ):
198+ def __init__ (self , header = None , body = None , footer = None , inline = False ):
199199 body = as_tuple (body )
200200 if len (body ) == 1 and all (type (i ) is List for i in [self , body [0 ]]):
201201 # De-nest Lists
@@ -213,6 +213,8 @@ def __init__(self, header=None, body=None, footer=None):
213213 self .body = as_tuple (body )
214214 self .footer = as_tuple (footer )
215215
216+ self .inline = inline
217+
216218 def __repr__ (self ):
217219 return "<%s (%d, %d, %d)>" % (self .__class__ .__name__ , len (self .header ),
218220 len (self .body ), len (self .footer ))
@@ -1047,9 +1049,8 @@ class Dereference(ExprStmt, Node):
10471049 A node encapsulating a dereference from a `pointer` to a `pointee`.
10481050 The following cases are supported:
10491051
1050- * `pointer` is a PointerArray or TempFunction, and `pointee` is an Array.
1051- * `pointer` is an ArrayObject representing a pointer to a C struct, and
1052- `pointee` is a field in `pointer`.
1052+ * `pointer` is an AbstractFunction, and `pointee` is an Array.
1053+ * `pointer` is an AbstractObject, and `pointee` is an Array.
10531054 * `pointer` is a Symbol with its _C_ctype deriving from ct._Pointer, and
10541055 `pointee` is a Symbol representing the dereferenced value.
10551056 """
@@ -1075,20 +1076,23 @@ def expr_symbols(self):
10751076 assert issubclass (self .pointer ._C_ctype , ctypes ._Pointer ), \
10761077 "Scalar dereference must have a pointer ctype"
10771078 ret .extend ([self .pointer ._C_symbol , self .pointee ._C_symbol ])
1078- elif self .pointer .is_PointerArray or self . pointer . is_TempFunction :
1079+ elif self .pointer .is_AbstractFunction :
10791080 ret .extend ([self .pointer .indexed , self .pointee .indexed ])
10801081 ret .extend (flatten (i .free_symbols
10811082 for i in self .pointee .symbolic_shape [1 :]))
10821083 ret .extend (self .pointer .free_symbols )
1084+ elif self .pointer .is_AbstractObject :
1085+ ret .extend ([self .pointer , self .pointee .indexed ])
1086+ ret .extend (flatten (i .free_symbols
1087+ for i in self .pointee .symbolic_shape [1 :]))
10831088 else :
1084- ret .extend ([self .pointer .indexed , self .pointee ._C_symbol ])
1089+ assert False , f"Unexpected pointer type { type (self .pointer )} "
1090+
10851091 return tuple (filter_ordered (ret ))
10861092
10871093 @property
10881094 def defines (self ):
1089- if self .pointer .is_PointerArray or \
1090- self .pointer .is_TempFunction or \
1091- self .pointee ._mem_stack :
1095+ if self .pointer .is_AbstractFunction or self .pointee ._mem_stack :
10921096 return (self .pointee .indexed , self .pointee )
10931097 else :
10941098 return (self .pointee ,)
0 commit comments