]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/dtracy/dat.h
aux/realemu: run cpuproc in same fd group as fileserver
[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         int line;
79         
80         /* used by elidecasts() */
81         char databits;
82         enum {UPZX, UPSX} upper;
83         
84         int recsize;
85         
86         Type *typ;
87 };
88
89 struct Stat {
90         enum {
91                 STATEXPR,
92                 STATPRINT,
93                 STATPRINTF,
94                 STATAGG,
95         } type;
96         /* STATEXPR */
97         Node *n;
98         /* STATPRINT, STATPRINTF */
99         int narg;
100         Node **arg;
101         /* STATAGG */
102         struct {
103                 Symbol *name;
104                 int type;
105                 Node *key, *value;
106         } agg;
107 };
108
109 struct Clause {
110         int id;
111         Stat *stats;
112         int nstats;
113         char **probs;
114         int nprob;
115         DTExpr *pred;
116 };
117
118 struct Enab {
119         int epid;
120         int reclen;
121         char *probe;
122         Clause *cl;
123         Enab *next;
124 };
125
126 struct Agg {
127         DTAgg;
128         char *name;
129 };
130
131 extern int errors;
132
133 #pragma varargck        type    "α"    int
134 #pragma varargck        type    "t"     int
135 #pragma varargck        type    "τ"    Type *
136 #pragma varargck        type    "ε"    Node *
137 #pragma varargck        argpos error 1
138
139 extern int dflag;
140 extern DTAgg noagg;
141 extern int aggid;
142 extern Agg *aggs;