Language-Eforth

 view release on metacpan or  search on metacpan

lib/Language/Eforth.xs  view on Meta::CPAN

        RETVAL = embed_depth(self);
    OUTPUT:
        RETVAL

# utility bloat
void
drain(Language::Eforth self)
    PREINIT:
        cell_t value;
        size_t depth, ss;
    PPCODE:
        depth = embed_depth(self);
        if (depth) {
            EXTEND(SP, ss = depth);
            while (depth) {
                embed_pop(self, &value);
                mPUSHu(value);
                depth--;
            }
            XSRETURN(ss);
        } else {

lib/Language/Eforth.xs  view on Meta::CPAN

        RETVAL = self;
    OUTPUT:
        RETVAL

void
pop(Language::Eforth self)
    PREINIT:
        cell_t value;
        int status;
        U8 gimme;
    PPCODE:
        status = embed_pop(self, &value);
        gimme = GIMME_V;
        if (gimme == G_VOID) {
            XSRETURN(0);
        } else if (gimme == G_SCALAR) {
            EXTEND(SP, 1);
            mPUSHu(value);
            XSRETURN(1);
        } else {
            EXTEND(SP, 2);
            mPUSHu(value);
            mPUSHi(status);
            XSRETURN(2);
        }

void
push(Language::Eforth self, ...)
    PREINIT:
        int i, status;
        SV *value;
    PPCODE:
        if (items < 2) croak("nothing to push");
        for (i = 1; i < items; i++) {
            value = ST(i);
            if (!SvOK(value)) croak("value must be defined");
            status = embed_push(self, SvUV(value));
            if (status) break;
        }
        EXTEND(SP, 2);
        mPUSHi(i - 1);
        mPUSHi(status);



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