Evo

 view release on metacpan or  search on metacpan

lib/Evo/Class/Attrs/XS.xs  view on Meta::CPAN

#define PERL_NO_GET_CONTEXT
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

#ifdef DEBUGGING
#undef assert
#define assert(expr)                                                           \
  ((expr) ? (void)0 : croak("XS Assertion: %s failed (%s:%d)", #expr,          \
                            __FILE__, __LINE__))
#endif


#include "eca.h"
#include "helpers.c"
#include "eca.c"
#include "xs.c"

MODULE = Evo::Class::Attrs::XS				PACKAGE = Evo::Class::Attrs::XS PREFIX = attrs_

PROTOTYPES: DISABLE

SV * attrs__gen_attr(self, name, type, value, check, is_ro, inject, method)
  SV *self;
  char *name;
  int type;
  SV *value;
  SV *check;
  bool is_ro;
  SV *inject;
  bool method;

SV *attrs_gen_new(self)
  SV *self;

bool attrs_exists(self, name)
  SV *self;
  SV *name;

void slots(self)
  SV *self;
PPCODE:
  AV *av = sv2av(self);
  int i, last = av_top_index(av), size = last + 1;

  for (i = 0; i < size; i++) {
    SV **tmp = av_fetch(av, i, 0);
    if (!tmp) croak("Broken attr %d", i);
    mXPUSHs(psv_to_slotsv(*tmp));
  }



( run in 0.444 second using v1.01-cache-2.11-cpan-71847e10f99 )