~ubuntu-branches/ubuntu/trusty/python3.4/trusty-proposed

« back to all changes in this revision

Viewing changes to Parser/listnode.c

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2013-11-25 09:44:27 UTC
  • Revision ID: package-import@ubuntu.com-20131125094427-lzxj8ap5w01lmo7f
Tags: upstream-3.4~b1
ImportĀ upstreamĀ versionĀ 3.4~b1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
/* List a node on a file */
 
3
 
 
4
#include "pgenheaders.h"
 
5
#include "token.h"
 
6
#include "node.h"
 
7
 
 
8
/* Forward */
 
9
static void list1node(FILE *, node *);
 
10
static void listnode(FILE *, node *);
 
11
 
 
12
void
 
13
PyNode_ListTree(node *n)
 
14
{
 
15
    listnode(stdout, n);
 
16
}
 
17
 
 
18
static int level, atbol;
 
19
 
 
20
static void
 
21
listnode(FILE *fp, node *n)
 
22
{
 
23
    level = 0;
 
24
    atbol = 1;
 
25
    list1node(fp, n);
 
26
}
 
27
 
 
28
static void
 
29
list1node(FILE *fp, node *n)
 
30
{
 
31
    if (n == 0)
 
32
        return;
 
33
    if (ISNONTERMINAL(TYPE(n))) {
 
34
        int i;
 
35
        for (i = 0; i < NCH(n); i++)
 
36
            list1node(fp, CHILD(n, i));
 
37
    }
 
38
    else if (ISTERMINAL(TYPE(n))) {
 
39
        switch (TYPE(n)) {
 
40
        case INDENT:
 
41
            ++level;
 
42
            break;
 
43
        case DEDENT:
 
44
            --level;
 
45
            break;
 
46
        default:
 
47
            if (atbol) {
 
48
                int i;
 
49
                for (i = 0; i < level; ++i)
 
50
                    fprintf(fp, "\t");
 
51
                atbol = 0;
 
52
            }
 
53
            if (TYPE(n) == NEWLINE) {
 
54
                if (STR(n) != NULL)
 
55
                    fprintf(fp, "%s", STR(n));
 
56
                fprintf(fp, "\n");
 
57
                atbol = 1;
 
58
            }
 
59
            else
 
60
                fprintf(fp, "%s ", STR(n));
 
61
            break;
 
62
        }
 
63
    }
 
64
    else
 
65
        fprintf(fp, "? ");
 
66
}