File: parserparlist.c

package info (click to toggle)
yodl 4.05.02-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,724 kB
  • sloc: ansic: 7,803; perl: 683; cpp: 570; sh: 411; xml: 190; makefile: 163
file content (47 lines) | stat: -rw-r--r-- 1,237 bytes parent folder | download | duplicates (5)
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
#include "parser.ih"

/*
    parser_parlist is called to retrieve a parameter list. The parameter list
    is inserted/interpreted thereafter. Therefore, no CHARTAB handling should
    be done by the parsing.

    0 is returned at an empty parameter 
*/

char *parser_parlist(register Parser *pp, HANDLER_SET_ELEMENTS newSet)
{
    register char *str = 0;
    register StackValue stValue;

    if (lexer_lex(&pp->d_lexer) != TOKEN_OPENPAR)
        if (message_show(MSG_CRIT))
            message("%s: Missing parameter list. `(' expected", parser_fun());

    pp->d_parlist_lineno = message_lineno();
    free(pp->d_parlist_filename);                   /* remember the file    */
                                                    /* where the parlist    */
                                                    /* starts               */
    pp->d_parlist_filename = new_str(message_filename());

    lexer_unget_matched(&pp->d_lexer);

    stValue.u_size_t = pp->d_paren;
    stack_push(&pp->d_paren_st, stValue);
    pp->d_paren = 0;

    p_begin_nested(pp, newSet);
    p_parse(pp);
    str = p_end_nested(pp, newSet);

    pp->d_paren = stack_tos(&pp->d_paren_st)->u_size_t;
    stack_pop(&pp->d_paren_st);

    return str;
}