El Código Generado por h2xs

El código XS generado tiene en su cabecera las declaraciones XSUB de las funciones de la librería:

lhp@nereida:~/projects/perl/src/XSUB/h2xsexample/Coord$ cat -n Coord.xs
  1  #include "EXTERN.h"
  2  #include "perl.h"
  3  #include "XSUB.h"
  4
  5  #include "ppport.h"
  6
  7  #include <coord.h>
  8
  9  #include "const-c.inc"
 10
 11  MODULE = Coord          PACKAGE = Coord
 12
 13  INCLUDE: const-xs.inc
 14
 15  polar
 16  getpolar()
 17
 18  rectangular
 19  getrectangular()
 20
 21  rectangular
 22  pl2rc(p)
 23          polar   p
 24
 25  char *
 26  polar2str(f, p)
 27          const char *    f
 28          polar   p
 29
 ..  ................. resto de declaraciones

Después de las declaraciones siguen dos paquetes asociados con las declaraciones de rectangular y rectangular *. El paquete rectangular provee los métodos new y _to_ptr:

 39  MODULE = Coord          PACKAGE = rectangular
 40
 41  rectangular *
 42  _to_ptr(THIS)
 43          rectangular THIS = NO_INIT
 44      PROTOTYPE: $
 45      CODE:
 46          if (sv_derived_from(ST(0), "rectangular")) {
 47              STRLEN len;
 48              char *s = SvPV((SV*)SvRV(ST(0)), len);
 49              if (len != sizeof(THIS))
 50                  croak("Size %d of packed data != expected %d",
 51                          len, sizeof(THIS));
 52              RETVAL = (rectangular *)s;
 53          }
 54          else
 55              croak("THIS is not of type rectangular");
 56      OUTPUT:
 57          RETVAL
 58
 59  rectangular
 60  new(CLASS)
 61          char *CLASS = NO_INIT
 62      PROTOTYPE: $
 63      CODE:
 64          Zero((void*)&RETVAL, sizeof(RETVAL), char);
 65      OUTPUT:
 66          RETVAL



Subsecciones
Casiano Rodríguez León
Licencia de Creative Commons
Programación Distribuida y Mejora del Rendimiento
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=44.
2012-06-19