source: python/trunk/Parser/listnode.c

Last change on this file was 391, checked in by dmik, 11 years ago

python: Merge vendor 2.7.6 to trunk.

  • Property svn:eol-style set to native
File size: 1.2 KB
Line 
1
2/* List a node on a file */
3
4#include "pgenheaders.h"
5#include "token.h"
6#include "node.h"
7
8/* Forward */
9static void list1node(FILE *, node *);
10static void listnode(FILE *, node *);
11
12void
13PyNode_ListTree(node *n)
14{
15 listnode(stdout, n);
16}
17
18static int level, atbol;
19
20static void
21listnode(FILE *fp, node *n)
22{
23 level = 0;
24 atbol = 1;
25 list1node(fp, n);
26}
27
28static void
29list1node(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}
Note: See TracBrowser for help on using the repository browser.