Subversion Repositories planix.SVN

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#include <u.h>
2
#include <libc.h>
3
#include <bio.h>
4
#include "../vc/v.out.h"
5
 
6
#ifndef	EXTERN
7
#define	EXTERN	extern
8
#endif
9
 
10
typedef	struct	Sym	Sym;
11
typedef	struct	Gen	Gen;
12
typedef	struct	Io	Io;
13
typedef	struct	Hist	Hist;
14
 
15
#define	MAXALIGN	7
16
#define	FPCHIP		1
17
#define	NSYMB		8192
18
#define	BUFSIZ		8192
19
#define	HISTSZ		20
20
#define	NINCLUDE	10
21
#define	NHUNK		10000
22
#define	EOF		(-1)
23
#define	IGN		(-2)
24
#define	GETC()		((--fi.c < 0)? filbuf(): *fi.p++ & 0xff)
25
#define	NHASH		503
26
#define	STRINGSZ	200
27
#define	NMACRO		10
28
 
29
struct	Sym
30
{
31
	Sym*	link;
32
	char*	macro;
33
	vlong	value;
34
	ushort	type;
35
	char	*name;
36
	char	sym;
37
};
38
#define	S	((Sym*)0)
39
 
40
EXTERN	struct
41
{
42
	char*	p;
43
	int	c;
44
} fi;
45
 
46
struct	Io
47
{
48
	Io*	link;
49
	char	b[BUFSIZ];
50
	char*	p;
51
	short	c;
52
	short	f;
53
};
54
#define	I	((Io*)0)
55
 
56
EXTERN	struct
57
{
58
	Sym*	sym;
59
	short	type;
60
} h[NSYM];
61
 
62
struct	Gen
63
{
64
	Sym*	sym;
65
	vlong	offset;
66
	short	type;
67
	short	reg;
68
	short	name;
69
	double	dval;
70
	char	sval[8];
71
};
72
 
73
struct	Hist
74
{
75
	Hist*	link;
76
	char*	name;
77
	long	line;
78
	vlong	offset;
79
};
80
#define	H	((Hist*)0)
81
 
82
enum
83
{
84
	CLAST,
85
	CMACARG,
86
	CMACRO,
87
	CPREPROC
88
};
89
 
90
EXTERN	char	debug[256];
91
EXTERN	Sym*	hash[NHASH];
92
EXTERN	char*	Dlist[30];
93
EXTERN	int	nDlist;
94
EXTERN	Hist*	ehist;
95
EXTERN	int	newflag;
96
EXTERN	Hist*	hist;
97
EXTERN	char*	hunk;
98
EXTERN	char*	include[NINCLUDE];
99
EXTERN	Io*	iofree;
100
EXTERN	Io*	ionext;
101
EXTERN	Io*	iostack;
102
EXTERN	long	lineno;
103
EXTERN	int	nerrors;
104
EXTERN	long	nhunk;
105
EXTERN	int	nosched;
106
EXTERN	int	ninclude;
107
EXTERN	Gen	nullgen;
108
EXTERN	char*	outfile;
109
EXTERN	int	pass;
110
EXTERN	char*	pathname;
111
EXTERN	long	pc;
112
EXTERN	int	peekc;
113
EXTERN	int	sym;
114
EXTERN	char	symb[NSYMB];
115
EXTERN	int	thechar;
116
EXTERN	char*	thestring;
117
EXTERN	long	thunk;
118
EXTERN	Biobuf	obuf;
119
 
120
void*	alloc(long);
121
void*	allocn(void*, long, long);
122
void	errorexit(void);
123
void	pushio(void);
124
void	newio(void);
125
void	newfile(char*, int);
126
Sym*	slookup(char*);
127
Sym*	lookup(void);
128
void	syminit(Sym*);
129
long	yylex(void);
130
int	getc(void);
131
int	getnsc(void);
132
void	unget(int);
133
int	escchar(int);
134
void	cinit(void);
135
void	pinit(char*);
136
void	cclean(void);
137
int	isreg(Gen*);
138
void	outcode(int, Gen*, int, Gen*);
139
void	zname(char*, int, int);
140
void	zaddr(Gen*, int);
141
void	ieeedtod(Ieee*, double);
142
int	filbuf(void);
143
Sym*	getsym(void);
144
void	domacro(void);
145
void	macund(void);
146
void	macdef(void);
147
void	macexpand(Sym*, char*);
148
void	macinc(void);
149
void	maclin(void);
150
void	macprag(void);
151
void	macif(int);
152
void	macend(void);
153
void	outhist(void);
154
void	dodefine(char*);
155
void	prfile(long);
156
void	linehist(char*, int);
157
void	gethunk(void);
158
void	yyerror(char*, ...);
159
int	yyparse(void);
160
void	setinclude(char*);
161
int	assemble(char*);
162
 
163
/*
164
 *	system-dependent stuff from ../cc/compat.c
165
 */
166
 
167
enum				/* keep in synch with ../cc/cc.h */
168
{
169
	Plan9	= 1<<0,
170
	Unix	= 1<<1,
171
	Windows	= 1<<2
172
};
173
int	mywait(int*);
174
int	mycreat(char*, int);
175
int	systemtype(int);
176
int	pathchar(void);
177
char*	mygetwd(char*, int);
178
int	myexec(char*, char*[]);
179
int	mydup(int, int);
180
int	myfork(void);
181
int	mypipe(int*);
182
void*	mysbrk(ulong);