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 )