Esempio n. 1
0
 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)
Esempio n. 2
0
 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)
Esempio n. 3
0
 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)
Esempio n. 4
0
 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)