|
|
1.1 root 1: #ifndef SYMBOL_H
2: #define SYMBOL_H
3: #ifndef UNIV_H
4: #include "univ.h"
5: #endif
6:
7: #include "dtype.pub"
8:
9: class Stmt; class SrcText;
10:
11: struct Range {
12: long lo;
13: long hi;
14: };
15:
16: class Symbol : public PadRcv { // Symbol
17: friend SymTab;
18: friend Ed8SymTab;
19: friend BsdSymTab;
20: Symbol *hashlink;
21: public:
22: int disc();
23: int ok();
24: Symbol(Symbol*,Symbol*,char*);
25: Symbol *parent;
26: Symbol *child;
27: Symbol *rsib;
28: Symbol *lsib;
29: char *_text;
30: virtual char *text(long=0);
31: Range range;
32: char *dump();
33: Source *source();
34: };
35:
36: const LEAVE = 0, SHOW = 1, HIDE = 2;
37:
38: class Var : public Symbol { // Var
39: friend Expr;
40: friend UType;
41: short _disc;
42: short showorhide;
43: Index carte();
44: void reformat(long);
45: char *fmtlist();
46: void showutype(UType*);
47: public:
48: Var(class SymTab*,class Block*,Var*,UDisc,char*);
49: ~Var();
50: int disc();
51: int ok();
52: DType type;
53: void show(int=LEAVE, Attrib=0);
54: };
55:
56: class BlkVars : public PadRcv { // BlkVars
57: class Block *b; // next block
58: Var *v; // prev variable
59: PUBLIC(BlockVars,U_BLKVARS)
60: Var *gen();
61: BlkVars(Block*i);
62: };
63:
64: class Block : public Symbol { // Block
65: friend BlkVars;
66: friend SymTab;
67: friend Ed8SymTab;
68: friend BsdSymTab;
69: Var *var;
70: PUBLIC(Block,U_BLOCK)
71: Block(SymTab*,Symbol*,Block*,char*);
72: ~Block();
73: class Stmt *stmt;
74: };
75:
76: class Source : public Symbol { // Source
77: friend Ed8SymTab;
78: friend BsdSymTab;
79: Func *linefunc;
80: Stmt *linestmt;
81: PUBLIC(Source,U_SOURCE)
82: Source(SymTab*,Source*,char*,long);
83: ~Source();
84: SrcText *srctext;
85: SymTab *symtab;
86: Block *blk;
87: Stmt *stmtafter(int);
88: char *text(long=0);
89: #ifndef V9
90: class BsdType *bsdp;
91: #endif
92: };
93:
94: class Func : public Symbol { // Func
95: friend Ed8SymTab;
96: friend BsdSymTab;
97: long begin;
98: long size;
99: long lnnoptr; // coff
100: long regsave; // mac32 - goes away
101: Block *_blk;
102: void gather();
103: PUBLIC(Func,U_FUNC)
104: Func(SymTab*,Source*,Func*,long,char*);
105: ~Func();
106: Block *blk();
107: Block *blk(long);
108: DType type;
109: Range lines;
110: Stmt *stmt(long);
111: char *text(long=0);
112: Var *argument(int);
113: int regused(int);
114: };
115:
116: #define Q_BPT ((Expr*)1)
117: class Stmt : public Symbol { // Stmt
118: friend Ed8SymTab;
119: friend BsdSymTab;
120: friend Instr;
121: class Process *process;
122: class Pad *srcpad();
123: void error(char*);
124: char *contextsearch(char*,int);
125: PUBLIC(Stmt,U_STMT)
126: Stmt(SymTab*,Block*,Stmt*);
127: ~Stmt();
128: void asmblr();
129: void select(long=0);
130: char *text(long=0);
131: short lineno;
132: short hits;
133: class Expr *condition;
134: Bls *condtext;
135: void dobpt(int);
136: void settrace();
137: void openframe();
138: char *kbd(char*);
139: char *help();
140: void conditional(Expr*);
141: char *srcline();
142: Func *func();
143: char *journal(Bls&);
144: };
145:
146: class UType : public Symbol { // UType
147: friend Ed8SymTab;
148: friend BsdSymTab; friend BsdType;
149: friend TypMems;
150: friend Var; // for symtab
151: SymTab *symtab;
152: long begin;
153: short size;
154: char *canspecial;
155: Var *mem;
156: #ifndef V9
157: BsdType *bsdp;
158: char *encode;
159: #endif
160: void gather();
161: void display();
162: PUBLIC(UType,U_UTYPE)
163: UType(SymTab*,long,long,char*);
164: #ifndef V9
165: UType(SymTab*,char*,char*, BsdType*);
166: #endif
167: ~UType();
168: DType type;
169: Index carte(enum Op);
170: void show(int=LEAVE, Attrib=0);
171: };
172:
173: class TypMems : public PadRcv { // TypMems
174: char pub_filler[8];
175: UType *ut;
176: Var *v; // prev
177: PUBLIC(TypMems,U_TYPMEMS)
178: TypMems(UType *);
179: Var *gen();
180: };
181:
182: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.