📄 c.h
字号:
unsigned short references;
unsigned short firstuse;
unsigned short lastuse;
union {
struct {
int label;
Symbol equatedto;
} l;
struct {
unsigned cfields:1;
unsigned vfields:1;
Table ftab; /* omit */
Field flist;
} s;
int value;
Symbol *idlist;
struct {
Value v;
Symbol loc;
} c;
struct {
Coordinate pt;
int label;
int ncalls;
Symbol *callee;
} f;
int seg;
struct {
Node cse;
} t;
} u;
Xsymbol x;
#ifdef Ysymbol
Ysymbol y;
#endif
};
#define STDCALLATTRIBUTE 1
#define DLLIMPORTATTRIBUTE 100
#define DLLEXPORTATTRIBUTE 200
enum { CONSTANTS=1, LABELS, GLOBAL, PARAM, LOCAL };
struct tree {
int op;
Type type;
Tree kids[2];
Node node;
struct {
Value v;
Symbol sym;
Field field;
} u;
short Flags;
unsigned nestedCall:1;
int intrinsic;
int intrinsicArg;
};
enum {
AND=39<<4,
NOT=40<<4,
OR=41<<4,
COND=42<<4,
RIGHT=43<<4,
FIELD=44<<4
};
struct type {
int op;
Type type;
int align;
int size;
union {
Symbol sym;
struct {
unsigned oldstyle:1;
Type *proto;
char isStdCall;
} f;
} u;
Xtype x;
#ifdef Ytype /* omit */
Ytype y; /* omit */
#endif /* omit */
};
struct field {
char *name;
Type type;
int offset;
short bitsize;
short lsb;
char Flags;
Field link;
};
#define CC_CDECL 0
#define CC_PASCAL 1
#define CC_STDCALL 2
#define CC_OPTLINK 3
extern int nodecount,FunctionNodes;
extern Symbol cfunc;
extern Symbol retv;
extern Tree (*optree[]) ARGS((int, Tree, Tree));
extern char *fname;
extern char kind[];
extern int errcnt;
extern int errlimit;
extern int wflag;
extern Events events;
extern float refinc;
extern unsigned char *cp;
extern unsigned char *limit;
extern int infd;
extern char *firstfile;
extern char *file;
extern char *line;
extern int lineno;
extern int t;
extern char *token;
extern Symbol tsym;
extern Coordinate src;
extern char *bp;
extern int Aflag;
extern int Pflag;
extern int Xflag;
extern Symbol YYnull;
extern Symbol YYcheck;
extern int glevel;
extern int xref;
extern int outfd;
extern int errfd;
extern int ncalled;
extern int npoints;
extern int needconst;
extern struct code codehead;
extern Code codelist;
extern Table stmtlabs;
extern float density;
extern Table constants;
extern Table externals;
extern Table globals;
extern Table identifiers;
extern Table labels;
extern Table types;
extern int level;
extern List loci, symbols;
extern List symbols;
extern Type chartype;
extern Type doubletype;
extern Type floattype;
extern Type inttype;
extern Type longdouble;
extern Type longtype;
extern Type longlongtype;
extern Type ulonglongtype;
extern Type shorttype;
extern Type signedchar;
extern Type unsignedchar;
extern Type unsignedlong;
extern Type unsignedshort;
extern Type unsignedtype;
extern Type voidptype;
extern Type voidtype;
extern int DefaultAlignment;
extern void *allocate ARGS((unsigned long n, unsigned a));
extern void deallocate ARGS((unsigned a));
extern void *newarray
ARGS((unsigned long m, unsigned long n, unsigned a));
extern void walk ARGS((Tree e, int tlab, int flab));
extern Node listnodes ARGS((Tree e, int tlab, int flab));
extern Node newnode ARGS((int op, Node left, Node right,
Symbol p));
extern Tree cvtconst ARGS((Tree));
extern void printdag ARGS((Node, int));
extern Code compound ARGS((int, Swtch, int));
extern void defglobal ARGS((Symbol, int));
extern void finalize ARGS((void));
extern void program ARGS((void));
extern Tree addrof ARGS((Tree));
extern Tree asgn ARGS((Symbol, Tree));
extern Tree asgntree ARGS((int, Tree, Tree));
extern Type assign ARGS((Type, Tree));
extern Tree bittree ARGS((int, Tree, Tree));
extern Tree call ARGS((Tree, Type, Coordinate));
extern Tree calltree ARGS((Tree, Type, Tree, Symbol));
extern Tree condtree ARGS((Tree, Tree, Tree));
extern Tree consttree ARGS((unsigned int, Type));
extern Tree eqtree ARGS((int, Tree, Tree));
extern int iscallb ARGS((Tree));
extern Tree shtree ARGS((int, Tree, Tree));
extern void typeerror ARGS((int, Tree, Tree));
extern void test ARGS((int tok, char set[]));
extern void expect ARGS((int tok));
extern void skipto ARGS((int tok, char set[]));
extern void error (char *, ...);
extern int fatal ARGS((char *, char *, int));
extern void warning (char *, ...);
typedef void (*Apply) ARGS((void *, void *, void *));
extern void attach ARGS((Apply, void *, List *));
extern void apply ARGS((List, void *, void *));
extern Tree retype ARGS((Tree p, Type ty));
extern Tree rightkid ARGS((Tree p));
extern int hascall ARGS((Tree p));
extern Type binary ARGS((Type, Type));
extern Tree cast ARGS((Tree, Type));
extern Tree cond ARGS((Tree));
extern Tree expr0 ARGS((int));
extern Tree expr ARGS((int));
extern Tree expr1 ARGS((int));
extern Tree field ARGS((Tree, char *));
extern char *funcname ARGS((Tree));
extern Tree idtree ARGS((Symbol));
extern Tree incr ARGS((int, Tree, Tree));
extern Tree lvalue ARGS((Tree));
extern Tree nullcall ARGS((Type, Symbol, Tree, Tree));
extern Tree pointer ARGS((Tree));
extern Tree rvalue ARGS((Tree));
extern Tree value ARGS((Tree));
extern void defpointer ARGS((Symbol));
extern Type initializer ARGS((Type, int));
extern Tree structexp ARGS((Type, Symbol));
extern void swtoseg ARGS((int));
extern void inputInit ARGS((void));
extern void inputstring ARGS((char *));
extern void fillbuf ARGS((void));
extern void nextline ARGS((void));
extern int getchr ARGS((void));
extern int gettok ARGS((void));
extern void outs ARGS((char *));
extern void print (char *, ...);
extern void emitcode ARGS((void));
extern void gencode ARGS((Symbol[], Symbol[]));
extern void fprint (int fd, char *fmt, ...);
extern void outflush ARGS((void));
extern char *stringf (char *, ...);
extern List append ARGS((void *x, List list));
extern int length ARGS((List list));
extern void *ltov ARGS((List *list, unsigned a));
extern Type typename ARGS((void));
extern void checklab ARGS((Symbol p, void *cl));
extern Type enumdcl ARGS((void));
extern int main ARGS((int, char *[]));
extern Symbol mkstr ARGS((char *));
extern Symbol mksymbol ARGS((int, char *,Type));
extern void outflush ARGS((void));
extern void outputInit ARGS((void));
extern void vfprint ARGS((int, char *, va_list));
extern void vprint ARGS((char *, va_list));
void profInit ARGS((char *));
extern int process ARGS((char *));
extern int findfunc ARGS((char *, char *));
extern int findcount ARGS((char *, int, int));
extern Tree constexpr ARGS((int));
extern int intexpr ARGS((int, int));
extern Tree simplify ARGS((int, Type, Tree, Tree));
extern int ispow2 ARGS((unsigned u));
extern void addlocal ARGS((Symbol));
extern Code code ARGS((int));
extern void definelab ARGS((int));
extern Code definept (Coordinate *,int);
extern void equatelab ARGS((Symbol, Symbol));
extern Node jump ARGS((int));
extern void retcode ARGS((Tree));
extern void statement ARGS((int, Swtch, int));
extern char * string ARGS((char *str));
extern char *stringn ARGS((char *str, int len));
extern char *stringd ARGS((int n));
extern void use ARGS((Symbol p, Coordinate src));
extern void locus ARGS((Table tp, Coordinate *cp));
extern Symbol constant ARGS((Type, Value));
extern void enterscope ARGS((void));
extern void exitscope ARGS((void));
extern Symbol findlabel ARGS((int));
extern Symbol findtype ARGS((Type));
extern void foreach ARGS((Table, int, void (*)(Symbol, void *), void *));
extern Symbol genident ARGS((int, Type, int));
extern int genlabel ARGS((int));
extern Symbol install ARGS((char *, Table *, int, int));
extern Symbol intconst ARGS((int));
extern Symbol lookup ARGS((char *, Table));
extern Symbol mkstr ARGS((char *));
extern Symbol mksymbol ARGS((int, char *, Type));
extern Symbol newtemp ARGS((int, int));
extern Table table ARGS((Table, int));
extern Symbol temporary ARGS((int, Type, int));
extern char *vtoa ARGS((Type, Value));
void traceInit ARGS((char *));
extern int nodeid ARGS((Tree));
extern char *opname ARGS((int));
extern int *printed ARGS((int));
extern void printtree ARGS((Tree, int));
extern Tree right ARGS((Tree, Tree));
extern Tree root ARGS((Tree));
extern Tree texpr ARGS((Tree (*)(int), int, int));
extern Tree tree ARGS((int, Type, Tree, Tree));
extern int hasproto ARGS((Type));
extern void outtype ARGS((Type));
extern void printdecl ARGS((Symbol p, Type ty));
extern void printproto ARGS((Symbol p, Symbol args[]));
extern char *typestring ARGS((Type ty, char *id));
extern Field fieldref ARGS((char *name, Type ty));
extern Type array ARGS((Type, int, int));
extern Type atop ARGS((Type));
extern Type btot ARGS((int));
extern void checkfields ARGS((Type));
extern Type compose ARGS((Type, Type));
extern Type deref ARGS((Type));
extern int eqtype ARGS((Type, Type, int));
extern Field extends ARGS((Type, Type));
extern Field fieldlist ARGS((Type));
extern Type freturn ARGS((Type));
extern Type ftype ARGS((Type, Type));
extern Type func ARGS((Type, Type *, int));
extern Field newfield ARGS((char *, Type, Type));
extern Type newstruct ARGS((int, char *));
extern void printtype ARGS((Type, int));
extern Type promote ARGS((Type));
extern Type ptr ARGS((Type));
extern Type qual ARGS((int, Type));
extern void rmtypes ARGS((int));
extern int ttob ARGS((Type));
extern void typeInit ARGS((void));
extern int variadic ARGS((Type));
/* limits */
#ifdef __STDC__
#include <limits.h>
#include <float.h>
#else
/*
* The magnitudes of the values below are greater than or equal to the minimum
* permitted by the standard (see Appendix D) and are typical for byte-addressed
* machines with 32-bit integers. These values are suitable for bootstrapping.
*/
#define CHAR_BIT 8
#define MB_LEN_MAX 1
#define UCHAR_MAX 0xff
#define USHRT_MAX 0xffff
#define UINT_MAX 0xffffffff
#define ULONG_MAX 0xffffffffL
#define CHAR_MAX SCHAR_MAX
#define SCHAR_MAX 0x7f
#define SHRT_MAX 0x7fff
#define INT_MAX 0x7fffffff
#define LONG_MAX 0x7fffffffL
#define CHAR_MIN SCHAR_MIN
#define SCHAR_MIN (-SCHAR_MAX-1)
#define SHRT_MIN (-SHRT_MAX-1)
#define INT_MIN (-INT_MAX-1)
#define LONG_MIN (-LONG_MAX-1)
#define FLT_MAX 1e37
#define DBL_MAX 1e37
#endif
extern void exit ARGS((int));
extern void free ARGS((void *));
extern void *malloc ARGS((unsigned));
extern void *memset ARGS((void *, int, unsigned));
extern double strtod (char *, char **);
extern void *memcpy (void *, void *, unsigned);
extern long strtol (char *, char **, int);
extern char *strchr (const char *, int);
extern char *strrchr(char *,int);
extern char *strcpy(char *,char *);
extern char *strcat(char *,char *);
extern int strcmp (const char *, const char *);
extern int memcmp(void *,void *,int);
extern unsigned strlen (char *);
extern int strncmp ARGS((const char *, const char *, unsigned));
extern char *strncpy ARGS((char *, const char *, unsigned));
extern int AsmInit(char *fname);
void AsmReadBuffer(char *buffer,int len);
int IsWithinSpecialSection(void);
int WriteCoffFile(void);
int CppInit(void);
int StartCpp(char *filename);
int ReadFromCpp(unsigned char *buf,int siz);
void ProcessPragmaPack(void);
void ProcessPragmaDensity(void);
int SetForestFlags(int f);
void DumpDefines(void);
void ResetExceptions(void);
void DumpDefinedFunctions(void);
void ProcessSection(void);
void ProcessOptimize(void);
extern int warningCount;
extern int OptimizeFlag;
extern int trapuv;
#pragma warning(disable:4100)
#pragma warning(disable:4244)
extern int FunctionHasCalls;
int SendToOptimizer(void);
void CheckStaticUses(void);
#define PEEPHOLE
extern FILE *xrefFile;
extern void AddToFileTable(char *);
extern int memused;
typedef struct tagfnInfo {
unsigned char hasCalls;
unsigned char hasDiv;
unsigned char hasBlockMove;
unsigned char hasFloatingPoint;
unsigned char leafFunction;
unsigned char hasRegisterVars;
unsigned char NestedCalls;
unsigned char mmxCalls;
unsigned char memmove;
unsigned char hasgotos;
unsigned char SwappedRegs;
unsigned char noFrame;
unsigned short NrOfCalls;
unsigned short pushedRegs;
unsigned short FnNrOfLines;
unsigned short unused;
Code cp;
List CalledFunctionsList;
void *CalledFunctions;
} FunctionDescriptor;
extern FunctionDescriptor FunctionInfo;
void SetRegistersMasks(void);
int BuildBasicBlocks(void);
int GetFileNumber(char *fname);
void AnalyzeSecondPass(void);
void SetupRegisterVariables(void);
int GetType(Symbol p);
int ChangeBlock(unsigned char *buffer,int len);
void linearize(Node p,Node next);
#define INDEXPTR 613
#define BOOLEANVAL 613
extern int GenerateAsm;
int IsIntrinsic(char *name);
void IntrinsicArg(Node kid,int n);
void Intrinsic(Node p);
void InstallIntrinsics(void);
Symbol AssignIntrinsicArg(Node p);
extern int IntermediateLanguageFile;
extern FILE *ilFile;
extern void ildumpcover(Node p,int nt,int in);
extern int nrOfIntrinsicArgs(int idx);
extern int mmx;
extern int StatementCount;
void ExtendDomain(int lev,int start);
void IncrementReferences(Symbol sym);
void Initreferences(Symbol sym);
extern char *StrTab[];
int GetConstantSymbolsLength(void);
void EmitDefinesInfo(void);
void BuildExportTable(void);
void RestoreGlevelStack(void);
void AddExport(char *name);
extern int hasAllocA;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -