]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/dtracy/dat.h
upas/fs: remove useless loop in rf822()
[plan9front.git] / sys / src / cmd / dtracy / dat.h
1 typedef struct Node Node;
2 typedef struct Symbol Symbol;
3 typedef struct SymTab SymTab;
4 typedef struct Clause Clause;
5 typedef struct Enab Enab;
6 typedef struct Stat Stat;
7 typedef struct Type Type;
8 typedef struct Agg Agg;
9
10 enum {
11         SYMHASH = 256,
12 };
13
14 struct Type {
15         enum {
16                 TYPINVAL,
17                 TYPINT,
18                 TYPPTR,
19                 TYPSTRING,
20         } type;
21         int size;
22         uchar sign;
23         Type *ref;
24         Type *typenext;
25 };
26
27 struct Symbol {
28         enum {
29                 SYMNONE,
30                 SYMVAR,
31         } type;
32         char *name;
33         int idx;
34         Symbol *next;
35         Type *typ;
36 };
37
38 struct SymTab {
39         Symbol *sym[SYMHASH];
40 };
41
42 struct Node {
43         enum {
44                 OINVAL,
45                 OSYM,
46                 ONUM,
47                 OSTR,
48                 OBIN,
49                 OLNOT,
50                 OTERN,
51                 ORECORD,
52                 OCAST,
53         } type;
54         enum {
55                 OPINVAL,
56                 OPADD,
57                 OPSUB,
58                 OPMUL,
59                 OPDIV,
60                 OPMOD,
61                 OPAND,
62                 OPOR,
63                 OPXOR,
64                 OPLSH,
65                 OPRSH,
66                 OPEQ,
67                 OPNE,
68                 OPLT,
69                 OPLE,
70                 OPLAND,
71                 OPLOR,
72                 OPXNOR,
73         } op;
74         Node *n1, *n2, *n3;
75         Symbol *sym;
76         char *str;
77         s64int num;
78         
79         /* used by elidecasts() */
80         char databits;
81         enum {UPZX, UPSX} upper;
82         
83         int recsize;
84         
85         Type *typ;
86 };
87
88 struct Stat {
89         enum {
90                 STATEXPR,
91                 STATPRINT,
92                 STATPRINTF,
93                 STATAGG,
94         } type;
95         /* STATEXPR */
96         Node *n;
97         /* STATPRINT, STATPRINTF */
98         int narg;
99         Node **arg;
100         /* STATAGG */
101         struct {
102                 Symbol *name;
103                 int type;
104                 Node *key, *value;
105         } agg;
106 };
107
108 struct Clause {
109         int id;
110         Stat *stats;
111         int nstats;
112         char **probs;
113         int nprob;
114         DTExpr *pred;
115 };
116
117 struct Enab {
118         int epid;
119         int reclen;
120         char *probe;
121         Clause *cl;
122         Enab *next;
123 };
124
125 struct Agg {
126         DTAgg;
127         char *name;
128 };
129
130 extern int errors;
131
132 #pragma varargck        type    "α"    int
133 #pragma varargck        type    "t"     int
134 #pragma varargck        type    "τ"    Type *
135 #pragma varargck        type    "ε"    Node *
136 #pragma varargck        argpos error 1
137
138 extern int dflag;
139 extern DTAgg noagg;
140 extern int aggid;
141 extern Agg *aggs;