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 2.550 seconds using v1.01-cache-2.11-cpan-5511b514fd6 )