XS-TCC

 view release on metacpan or  search on metacpan

TCC.xs  view on Meta::CPAN

set_output_type(xstcc_state *self, int output_type);
  CODE:
    RETVAL = tcc_set_output_type(self->tccstate, output_type);
  OUTPUT: RETVAL

int
add_library_path(xstcc_state *self, const char *pathname)
  CODE:
    RETVAL = tcc_add_library_path(self->tccstate, pathname);
  OUTPUT: RETVAL

int
add_library(xstcc_state *self, const char *libname)
  CODE:
    RETVAL = tcc_add_library(self->tccstate, libname);
  OUTPUT: RETVAL

int
add_symbol(xstcc_state *self, const char *name, const char *value)
  CODE:
    RETVAL = tcc_add_symbol(self->tccstate, name, value);
  OUTPUT: RETVAL

int
output_file(xstcc_state *self, const char *filename)
  CODE:
    RETVAL = tcc_output_file(self->tccstate, filename);
  OUTPUT: RETVAL

int
run(xstcc_state *self, int argc, AV *argv)
  PREINIT:
    unsigned int avlen, i;
    SV **elem;
    char **str_argv;
    SV *argv_ctrl;
  CODE:
    avlen = av_len(argv)+1;
    argv_ctrl = sv_2mortal(newSV(avlen * sizeof(char *)));
    str_argv = (char **)argv_ctrl;
    for (i = 0; i < avlen; ++i) {
      elem = av_fetch(argv, i, 0);
      str_argv[i] = SvPV_nolen(*elem);
    }
    RETVAL = tcc_run(self->tccstate, argc, str_argv);
  OUTPUT: RETVAL

xstcc_symbol *
get_symbol(xstcc_state *self, const char *name)
  PREINIT:
    const char *CLASS = "XS::TCC::TCCSymbol";
    /* Note: Perl symbol objects must not live longer than TCCStates
     *       or they become invalid. */
  CODE:
    RETVAL = tcc_get_symbol(self->tccstate, name);
    if (RETVAL == NULL)
      croak("Symbol '%s' not found!", name);
  OUTPUT: RETVAL

int
relocate(xstcc_state *self)
  PREINIT:
    AV *outav;
    SV *memsv;
    size_t memsize;
  CODE:
    outav = get_av("XS::TCC::TCCState::_output_memory", GV_ADD);
    memsize = tcc_relocate(self->tccstate, NULL);
    memsv = newSV(memsize);
    av_push(outav, memsv);
    RETVAL = tcc_relocate(self->tccstate, SvPVX(memsv));
  OUTPUT: RETVAL

MODULE = XS::TCC        PACKAGE = XS::TCC::TCCSymbol

CV *
as_xsub(xstcc_symbol *self)
  PREINIT:
    XSUBADDR_t sub;
  CODE:
    sub = (XSUBADDR_t)self;
    RETVAL = newXS(NULL, sub, "anon");
    sv_2mortal((SV *)RETVAL);
  OUTPUT: RETVAL

MODULE = XS::TCC        PACKAGE = XS::TCC



( run in 1.014 second using v1.01-cache-2.11-cpan-5511b514fd6 )