def visit_PointerCast(self, o): f = o.function if isinstance(o.obj, Pointer): obj = o.obj.name elif isinstance(o.obj, ArrayObject): obj = '%s->%s' % (o.obj.name, f._C_name) else: obj = f._C_name if f.is_PointerArray: lvalue = c.Value(f._C_typedata, '**%s' % f.name) rvalue = '(%s**) %s' % (f._C_typedata, obj) else: if o.flat is None: shape = ''.join("[%s]" % ccode(i) for i in o.castshape) rshape = '(*)%s' % shape lvalue = c.Value(f._C_typedata, '(*restrict %s)%s' % (f.name, shape)) else: rshape = '*' lvalue = c.Value(f._C_typedata, '*%s' % o.flat) if o.alignment: lvalue = c.AlignedAttribute(f._data_alignment, lvalue) if f.is_DiscreteFunction: rvalue = '(%s %s) %s->%s' % (f._C_typedata, rshape, obj, f._C_field_data) else: rvalue = '(%s %s) %s' % (f._C_typedata, rshape, obj) return c.Initializer(lvalue, rvalue)
def visit_Dereference(self, o): a0, a1 = o.functions shape = ''.join("[%s]" % ccode(i) for i in a0.symbolic_shape[1:]) rvalue = '(%s (*)%s) %s[%s]' % (a1._C_typedata, shape, a1.name, a1.dim.name) lvalue = c.AlignedAttribute( a0._data_alignment, c.Value(a0._C_typedata, '(*restrict %s)%s' % (a0.name, shape))) return c.Initializer(lvalue, rvalue)
def visit_Dereference(self, o): a0, a1 = o.functions if a1.is_PointerArray or a1.is_TempFunction: if o.flat is None: shape = ''.join("[%s]" % ccode(i) for i in a0.symbolic_shape[1:]) rvalue = '(%s (*)%s) %s[%s]' % (a1._C_typedata, shape, a1.name, a1.dim.name) lvalue = c.AlignedAttribute( a0._data_alignment, c.Value(a0._C_typedata, '(*restrict %s)%s' % (a0.name, shape))) else: rvalue = '(%s *) %s[%s]' % (a1._C_typedata, a1.name, a1.dim.name) lvalue = c.AlignedAttribute( a0._data_alignment, c.Value(a0._C_typedata, '*restrict %s' % o.flat)) else: rvalue = '%s->%s' % (a1.name, a0._C_name) lvalue = c.Value(a0._C_typename, a0._C_name) return c.Initializer(lvalue, rvalue)
def visit_ArrayCast(self, o): f = o.function # rvalue shape = ''.join("[%s]" % ccode(i) for i in o.castshape) if f.is_DiscreteFunction: rvalue = '(%s (*)%s) %s->%s' % (f._C_typedata, shape, f._C_name, f._C_field_data) else: rvalue = '(%s (*)%s) %s' % (f._C_typedata, shape, f._C_name) # lvalue lvalue = c.AlignedAttribute( f._data_alignment, c.Value(f._C_typedata, '(*restrict %s)%s' % (f.name, shape))) return c.Initializer(lvalue, rvalue)