File: twoargs.c

package info (click to toggle)
icmake 6.30-3
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 2,360 kB
  • ctags: 1,415
  • sloc: ansic: 7,727; makefile: 1,465; sh: 244; asm: 126; cpp: 39
file content (63 lines) | stat: -rw-r--r-- 1,692 bytes parent folder | download | duplicates (4)
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/*
                                T W O A R G S . C
*/

#include "iccomp.h"

ESTRUC_ *twoargs(type, larg, rarg)
    E_TYPE_
        type;
    ESTRUC_
        *larg,
        *rarg;
{
    register int
        ok;

    etoc(larg);                             /* arg to stack */
    etoc(rarg);                             /* arg to stack */

    switch (type)
    {
        case f_fgets:
            ok = test_type(larg, e_str) && test_type(rarg, e_int);
        break;

        case f_element:                     /* f_element */
                                            /* first arg must be int */
            if ( (ok = test_type(larg, e_int)) )
            {                               /* second arg == list: ok */
                if (!(ok = test_type(rarg, e_list)))
                {                           /* second arg == string: ok */
                    ok = test_type(rarg, e_str);
                    type = f_str_el;        /* string element requested */
                }
            }
        break;

        default:
            /*
                case f_fields:
                case f_c_ext:
                case f_c_base:
                case f_c_path:
                case f_substr:
            */
            ok = larg->type & rarg->type & e_str;
    }

    if (ok)
    {
        catcode(rarg, larg);                /* make one code vector */
        if (type == f_substr)               /* hidden func */
            callhidden (he_substr, rarg);
        else                                /* real rss func */
            callrss(rarg, type);
    }
    else
    {
        semantic(type_conflict, funstring[type]);
        discard(larg);
    }
    return (rarg);
}