File: parserif.c

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

void parser_if(register Parser *pp, SymbolType type, char const *fun)
{
    char *name;
    register HashItem *item;
    char *truelist;
    char *falselist;

    parser_push_fun(fun);

    name      = parser_name_parlist(pp, true);
    item      = hashmap_find(pp->d_symtab_ptr, name, type);
    truelist  = parser_parlist(pp, COLLECT_SET);
    parser_skipws(pp);

    falselist       = parser_parlist(pp, COLLECT_SET);

    if (message_show(MSG_NOTICE))
        message("%s `%s' %s", parser_fun(), string_short(name),
                                item == PFAILED  ? "(not found)": "(found)");

    lexer_push_str(&pp->d_lexer, item == PFAILED ? falselist : truelist);

    parser_pop_fun();

    free (name);                          /* return used memory */
    free (truelist);
    free (falselist);
}