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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
typedef struct Node Node;
typedef struct Symbol Symbol;
typedef struct SymTab SymTab;
typedef struct Clause Clause;
typedef struct Enab Enab;
typedef struct Stat Stat;
typedef struct Type Type;
typedef struct Agg Agg;
enum {
SYMHASH = 256,
};
struct Type {
enum {
TYPINVAL,
TYPINT,
TYPPTR,
TYPSTRING,
} type;
int size;
uchar sign;
Type *ref;
Type *typenext;
};
struct Symbol {
enum {
SYMNONE,
SYMVAR,
} type;
char *name;
int idx;
Symbol *next;
Type *typ;
};
struct SymTab {
Symbol *sym[SYMHASH];
};
struct Node {
enum {
OINVAL,
OSYM,
ONUM,
OSTR,
OBIN,
OLNOT,
OTERN,
ORECORD,
OCAST,
} type;
enum {
OPINVAL,
OPADD,
OPSUB,
OPMUL,
OPDIV,
OPMOD,
OPAND,
OPOR,
OPXOR,
OPLSH,
OPRSH,
OPEQ,
OPNE,
OPLT,
OPLE,
OPLAND,
OPLOR,
OPXNOR,
} op;
Node *n1, *n2, *n3;
Symbol *sym;
char *str;
s64int num;
int line;
/* used by elidecasts() */
char databits;
enum {UPZX, UPSX} upper;
int recsize;
Type *typ;
};
struct Stat {
enum {
STATEXPR,
STATPRINT,
STATPRINTF,
STATAGG,
} type;
/* STATEXPR */
Node *n;
/* STATPRINT, STATPRINTF */
int narg;
Node **arg;
/* STATAGG */
struct {
Symbol *name;
int type;
Node *key, *value;
} agg;
};
struct Clause {
int id;
Stat *stats;
int nstats;
char **probs;
int nprob;
DTExpr *pred;
};
struct Enab {
int epid;
int reclen;
char *probe;
Clause *cl;
Enab *next;
};
struct Agg {
DTAgg;
char *name;
};
extern int errors;
#pragma varargck type "α" int
#pragma varargck type "t" int
#pragma varargck type "τ" Type *
#pragma varargck type "ε" Node *
#pragma varargck argpos error 1
extern int dflag;
extern DTAgg noagg;
extern int aggid;
extern Agg *aggs;
|