Perl-Lexer
view release on metacpan or search on metacpan
lib/Perl/Lexer.xs view on Meta::CPAN
break;
}
/* PerlIO_printf(PerlIO_stderr(), "token: %d\n", token); */
PerlIO_printf(PerlIO_stderr(), "token: %d\n", token);
int i=0;
while (debug_tokens[i].token != 0) {
if (debug_tokens[i].token == token) {
AV * row = newAV();
av_push(row, newSViv(token));
switch (debug_tokens[i].type) {
case TOKENTYPE_NONE:
break;
case TOKENTYPE_IVAL:
case TOKENTYPE_OPNUM: /* pl_yylval.ival contains an opcode number */
av_push(row, newSViv(PL_parser->yylval.ival));
break;
case TOKENTYPE_PVAL:
av_push(row, newSVpv(PL_parser->yylval.pval, 0));
break;
case TOKENTYPE_OPVAL: {
OP *op = PL_parser->yylval.opval;
if (op != NULL) {
SV *rv = newRV_noinc(newSViv(PTR2IV(op)));
sv_bless(rv, gv_stashpv(b_op_class_name(aTHX_ op), 1));
SvREADONLY_on(rv);
av_push(row, rv);
}
break;
}
}
SV *token_obj = newRV_noinc((SV*)row);
sv_bless(token_obj, gv_stashpv("Perl::Lexer::Token", 1));
SvREADONLY_on(token_obj);
av_push(result, token_obj);
break;
}
++i;
}
}
LEAVE;
ST(0) = newRV_noinc((SV*)result);
}
MODULE = Perl::Lexer PACKAGE = Perl::Lexer::Token
SV*
_yylval_svop(svop_sv)
SV* svop_sv;
CODE:
{
SVOP*o = (SVOP*)SvIV(SvRV(svop_sv));
RETVAL = o->op_sv;
}
OUTPUT:
RETVAL
void
_name(token)
IV token;
PPCODE:
{
int i=0;
while (debug_tokens[i].token != 0) {
if (debug_tokens[i].token == token) {
XSRETURN_PV(debug_tokens[i].name);
}
++i;
}
XSRETURN_NO;
}
void
_type(token)
IV token;
PPCODE:
{
int i=0;
while (debug_tokens[i].token != 0) {
if (debug_tokens[i].token == token) {
XSRETURN_IV(debug_tokens[i].type);
}
++i;
}
XSRETURN_NO;
}
( run in 0.524 second using v1.01-cache-2.11-cpan-5511b514fd6 )