File: istrue.c

package info (click to toggle)
icmake 6.22-2
  • links: PTS
  • area: main
  • in suites: woody
  • size: 2,120 kB
  • ctags: 1,045
  • sloc: ansic: 9,241; makefile: 1,138; asm: 126; sh: 124
file content (47 lines) | stat: -rw-r--r-- 1,066 bytes parent folder | download | duplicates (3)
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);
}