1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
/*
\funcref{istrue}{void istrue ()}
{}
{0: the last pushed variable yields `false'; otherwise: the last pushed
variable yields `true'}
{pop(), discard()}
{fun\_jmp\_true(), fun\_jmp\_false()}
{istrue.c}
{
This function pops the last pushed variable and determines if that
variable should yield true. If the variable is of type {\em e\_int},
then the integer representation is returned. If the variable is of
type {\em e\_str}, then the first character in the string (this may
be a zero-byte) is returned. If the variable is of type {\em
e\_list}, the list size is returned.
The popped variable is discarded.
}
*/
#include "icm-exec.h"
int istrue ()
{
VAR_
tmp;
register int
ret;
tmp = pop ();
if (tmp.type & e_int)
ret = tmp.vu.intval;
else if (tmp.type & e_str)
{
if (tmp.vu.i->ls.str)
ret = (int) *(tmp.vu.i->ls.str);
else
ret = 0;
}
else
ret = tmp.vu.i->ls.list.size;
discard (tmp);
return (ret);
}
|