2022-10-25 19:30:28 +00:00
|
|
|
#include "compiler/common.h"
|
|
|
|
|
|
|
|
// THESE TYPES ARE NOT YET SORTED
|
|
|
|
#include "compiler/tokens.h"
|
|
|
|
#include "compiler/CompilerTools.h"
|
|
|
|
|
|
|
|
#ifdef __MWERKS__
|
|
|
|
#pragma options align=mac68k
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
2022-11-07 03:06:21 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
2022-10-25 19:30:28 +00:00
|
|
|
|
2022-11-07 03:06:21 +00:00
|
|
|
|
|
|
|
|
2022-10-25 19:30:28 +00:00
|
|
|
|
2022-11-07 03:06:21 +00:00
|
|
|
|
|
|
|
struct MemInitializer {
|
|
|
|
MemInitializer *next;
|
2022-10-25 19:30:28 +00:00
|
|
|
union {
|
|
|
|
ENodeList *nodes;
|
|
|
|
ENode *expr;
|
|
|
|
} e;
|
|
|
|
union {
|
|
|
|
ObjMemberVar *ivar;
|
|
|
|
Type *type;
|
|
|
|
} u;
|
|
|
|
Boolean is_ivar;
|
|
|
|
Boolean is_expr;
|
2022-11-07 03:06:21 +00:00
|
|
|
};
|
2022-10-25 19:30:28 +00:00
|
|
|
|
|
|
|
|
|
|
|
typedef enum DepNameType {
|
|
|
|
DNT_NAME,
|
|
|
|
DNT_CONVERSION,
|
|
|
|
DNT_DTOR,
|
|
|
|
DNT_NAMESPACE,
|
|
|
|
DNT_QUALNAME,
|
|
|
|
DNT_TEMPLATE,
|
|
|
|
DNT_TYPENAME
|
|
|
|
} DepNameType;
|
|
|
|
|
2022-11-07 03:06:21 +00:00
|
|
|
struct DepName {
|
|
|
|
DepName *next;
|
2022-10-25 19:30:28 +00:00
|
|
|
union {
|
|
|
|
HashNameNode *name;
|
|
|
|
NameSpace *nspace;
|
|
|
|
struct {
|
|
|
|
Type *type;
|
|
|
|
UInt32 qual;
|
|
|
|
} conv;
|
|
|
|
struct {
|
|
|
|
HashNameNode *name;
|
|
|
|
TemplArg *args;
|
|
|
|
} templ;
|
|
|
|
struct {
|
|
|
|
HashNameNode *name;
|
|
|
|
Type *type;
|
|
|
|
} tname;
|
|
|
|
} u;
|
|
|
|
DepNameType type;
|
2022-11-07 03:06:21 +00:00
|
|
|
};
|
2022-10-25 19:30:28 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef enum SubKind {
|
|
|
|
SUBKIND_NAMESPACE,
|
|
|
|
SUBKIND_TYPE,
|
|
|
|
SUBKIND_OBJECT
|
|
|
|
} SubKind;
|
|
|
|
|
|
|
|
typedef struct Substitution {
|
|
|
|
struct Substitution *next;
|
|
|
|
union {
|
|
|
|
NameSpace *nspace;
|
|
|
|
struct {
|
|
|
|
Type *type;
|
|
|
|
UInt32 qual;
|
|
|
|
} type;
|
|
|
|
Object *obj;
|
|
|
|
} u;
|
|
|
|
int id;
|
|
|
|
SubKind kind;
|
|
|
|
} Substitution;
|
|
|
|
|
2022-11-07 03:06:21 +00:00
|
|
|
// Registers.c
|
|
|
|
|
|
|
|
// RegisterInfo.c
|
2022-10-25 19:30:28 +00:00
|
|
|
|
|
|
|
// LOOSE DECLS
|
2022-11-07 03:06:21 +00:00
|
|
|
extern short high_offset;
|
|
|
|
extern short low_offset;
|
|
|
|
extern short high_reg;
|
|
|
|
extern short low_reg;
|
|
|
|
extern short high_reg2;
|
|
|
|
extern short low_reg2;
|
2022-10-25 19:30:28 +00:00
|
|
|
extern void PrecompilerRead(short refnum, void *buffer);
|
2022-11-07 03:06:21 +00:00
|
|
|
extern void PrecompilerWrite();
|
2022-10-25 19:30:28 +00:00
|
|
|
extern void CodeGen_InitCompiler();
|
|
|
|
extern void CodeGen_TermCompiler();
|
|
|
|
extern void CodeGen_InitBackEndOptions();
|
|
|
|
extern void CodeGen_UpdateOptimizerOptions();
|
|
|
|
extern void CodeGen_UpdateBackEndOptions();
|
|
|
|
extern void MWUnmangle(const char *name, char *buf, int size);
|
2022-11-07 03:06:21 +00:00
|
|
|
//extern COpts copts;
|
2022-10-25 19:30:28 +00:00
|
|
|
extern CParams *cparamblkptr;
|
|
|
|
extern FuncArg elipsis;
|
|
|
|
extern FuncArg oldstyle;
|
|
|
|
extern jmp_buf errorreturn;
|
|
|
|
extern Boolean cprep_nomem_exit;
|
|
|
|
extern Boolean anyerrors;
|
|
|
|
extern Boolean fatalerrors;
|
|
|
|
extern SInt32 lines;
|
|
|
|
extern char string[256];
|
|
|
|
extern TemplStack *ctempl_curinstance;
|
2022-11-07 03:06:21 +00:00
|
|
|
//extern ParserTryBlock *trychain;
|
2022-10-25 19:30:28 +00:00
|
|
|
extern Boolean in_assembler;
|
|
|
|
extern Boolean preprocessing_only;
|
|
|
|
extern void AssemblerError();
|
|
|
|
#include "compiler/types.h"
|
|
|
|
extern short tk;
|
|
|
|
extern HashNameNode *tkidentifier;
|
|
|
|
extern short lex();
|
|
|
|
extern short notendofline();
|
|
|
|
extern short lookahead();
|
|
|
|
extern Object *CClass_Constructor(TypeClass *tclass);
|
|
|
|
extern Object *CClass_Destructor(TypeClass *tclass);
|
|
|
|
extern int CClass_CheckPures(TypeClass *tclass);
|
2022-11-07 03:06:21 +00:00
|
|
|
extern Boolean CClass_IsConstructor(Object *func);
|
|
|
|
extern short CABI_GetStructResultArgumentIndex();
|
|
|
|
extern Boolean CParser_HasInternalLinkage(Object *obj);
|
|
|
|
extern HashNameNode *CParser_GetUniqueName();
|
|
|
|
extern SInt32 CParser_GetUniqueID();
|
|
|
|
extern Boolean CParserIsVolatileExpr(ENode *expr);
|
|
|
|
extern Boolean CParserIsConstExpr(ENode *expr);
|
2022-10-25 19:30:28 +00:00
|
|
|
extern Boolean CParser_IsPublicRuntimeObject(Object *obj);
|
|
|
|
extern Boolean CParser_ParseOperatorName(short *token, Boolean flag1, Boolean flag2);
|
|
|
|
extern Boolean CTemplTool_EqualArgs(TemplArg *a, TemplArg *b);
|
2022-11-07 03:06:21 +00:00
|
|
|
extern Boolean CTemplTool_IsTemplateArgumentDependentType(Type *type);
|
2022-10-25 19:30:28 +00:00
|
|
|
extern TypeTemplDep *CDecl_NewTemplDepType(TypeTemplDepType tdtype);
|
2022-11-07 03:06:21 +00:00
|
|
|
extern Type *CDecl_NewPointerType(Type *type);
|
|
|
|
extern Type *CDecl_NewStructType(SInt32 size, SInt32 align);
|
|
|
|
extern Type *CDecl_NewArrayType(Type *type, SInt32 num);
|
2022-10-25 19:30:28 +00:00
|
|
|
extern GList name_mangle_list;
|
|
|
|
extern void CPrep_UnLex();
|
|
|
|
extern Type *CTempl_ClassGetType(TypeClass *tclass);
|
2022-11-07 03:06:21 +00:00
|
|
|
//extern short is_typesame(Type *t1, Type *t2);
|
2022-10-25 19:30:28 +00:00
|
|
|
extern Boolean is_unsigned(Type *type);
|
|
|
|
extern void CDecl_CompleteType(Type *type);
|
|
|
|
extern TemplArg *CTempl_ParseUncheckTemplArgs(void *fixmelater, Boolean flag);
|
|
|
|
extern SInt32 CClass_VirtualBaseOffset(TypeClass *tclass, TypeClass *base);
|
|
|
|
extern Boolean CClass_IsMoreAccessiblePath(BClassList *a, BClassList *b);
|
|
|
|
extern Boolean CClass_ClassDominates(TypeClass *a, TypeClass *b);
|
|
|
|
extern Boolean CParser_CheckTemplateClassUsage(TemplClass *tmclass, Boolean flag);
|
|
|
|
extern Type *CTempl_ParseTemplTemplParam(Type *t);
|
|
|
|
extern void CClass_CheckPathAccess(BClassList *bcl, void *unk, AccessType access);
|
|
|
|
extern BClassList *CClass_GetPathCopy(BClassList *path, Boolean flag);
|
2022-11-07 03:06:21 +00:00
|
|
|
extern Object *CClass_ThisSelfObject();
|
2022-10-25 19:30:28 +00:00
|
|
|
extern AccessType global_access;
|
2022-11-07 03:06:21 +00:00
|
|
|
extern HashNameNode *this_name_node;
|
|
|
|
extern void CParser_Setup();
|
|
|
|
extern Boolean CParser_IsConst(Type *type, UInt32 qual);
|
|
|
|
extern void CParser_Cleanup();
|
|
|
|
extern void SetupPrecompiler(Boolean flag);
|
|
|
|
extern void CleanupPrecompiler();
|
|
|
|
extern void SetupAssembler();
|
|
|
|
extern void CleanupAssembler();
|
|
|
|
extern void ObjGen_Setup();
|
|
|
|
extern void ObjGen_Finish();
|
|
|
|
extern void ObjGen_Cleanup();
|
|
|
|
extern void ObjGen_CodeCleanup();
|
|
|
|
extern void ObjGen_DeclareFloatConst(Object *obj);
|
|
|
|
extern void ObjGen_DeclareVectorConst(Object *obj);
|
|
|
|
extern void ObjGen_DeclareCodeLabel(Object *labelobj, SInt32 offset, Object *funcobj);
|
|
|
|
extern Boolean ObjGen_IsExported(Object *obj);
|
|
|
|
extern void PointerAnalysis_Setup();
|
|
|
|
extern void PointerAnalysis_Cleanup();
|
|
|
|
extern Boolean CPrep_Preprocess();
|
|
|
|
extern void cparser();
|
|
|
|
extern void CBrowse_Setup(CParams *param);
|
|
|
|
extern void CBrowse_Finish(CParams *param);
|
|
|
|
extern void CBrowse_Cleanup(CParams *param);
|
2022-10-25 19:30:28 +00:00
|
|
|
extern UInt32 CParser_GetTypeQualifiers(Type *type, UInt32 qual);
|
|
|
|
extern void CTemplClass_RegisterUsingDecl(TemplClass *tclass, Type *target, AccessType access);
|
|
|
|
extern void CodeGen_InsertSpecialMacros();
|
|
|
|
extern void CPrep_PreprocessDumpFileInfo(Boolean flag);
|
2022-11-07 03:06:21 +00:00
|
|
|
extern void CPrep_PreprocessDumpNewLine();
|
2022-10-25 19:30:28 +00:00
|
|
|
extern Boolean gForceSourceLoc;
|
|
|
|
extern void ObjGen_SegmentName(); // might take an arg, not sure since it's empty
|
2022-11-07 03:06:21 +00:00
|
|
|
extern void ObjGen_SrcBreakName(HashNameNode *name, SInt32 modDate, Boolean flag);
|
|
|
|
extern char *precomp_target_str;
|
|
|
|
extern Object *CParser_ParseObject();
|
|
|
|
extern void PointerAnalysis_PragmaMode();
|
|
|
|
extern void CExcept_Terminate();
|
|
|
|
extern void CExcept_ArrayInit();
|
|
|
|
extern void CExcept_Magic();
|
|
|
|
extern void CSOM_PragmaReleaseOrder();
|
|
|
|
extern void CSOM_PragmaClassVersion();
|
|
|
|
extern void CSOM_PragmaMetaClass();
|
|
|
|
extern void CSOM_PragmaCallStyle();
|
|
|
|
extern short GetPrec(short t);
|
|
|
|
extern short localcount;
|
|
|
|
extern Boolean InlineAsm_gccmode;
|
|
|
|
extern void initialize_aliases();
|
|
|
|
extern Statement *current_statement;
|
|
|
|
extern int pclist_bad_operand;
|
|
|
|
extern int n_real_registers[];
|
|
|
|
extern short pic_base_reg;
|
|
|
|
extern Object pic_base;
|
|
|
|
extern ObjectList *exceptionlist;
|
|
|
|
extern ObjectList *arguments;
|
|
|
|
extern ObjectList *locals;
|
|
|
|
extern ObjectList *toclist;
|
|
|
|
extern Boolean uses_globals;
|
|
|
|
extern Boolean requires_frame;
|
|
|
|
extern void assign_locals_to_memory(ObjectList *locals);
|
|
|
|
extern PCodeLabel *pic_base_pcodelabel;
|
|
|
|
extern void *make_alias(Object *obj, SInt32 offset, SInt32 size);
|
|
|
|
extern Boolean is_volatile_object(Object *obj);
|
|
|
|
extern Boolean is_pascal_object(Object *obj);
|
|
|
|
extern Boolean local_is_16bit_offset(Object *obj);
|
|
|
|
extern Boolean can_add_displ_to_local(Object *obj, SInt32 displ);
|
|
|
|
extern int local_base_register(Object *obj);
|
|
|
|
extern int disable_optimizer;
|
|
|
|
extern Boolean IsTempName(HashNameNode *name);
|
|
|
|
extern void assign_local_memory(Object *obj);
|
|
|
|
extern void move_varargs_to_memory();
|
|
|
|
extern Type stvoid;
|
|
|
|
extern TypePointer void_ptr;
|
|
|
|
extern int countexceptionactionregisters(ExceptionAction *exc);
|
|
|
|
extern void noteexceptionactionregisters(ExceptionAction *exc, PCodeArg *);
|
|
|
|
extern void recordexceptionactions(PCode *pc, ExceptionAction *exc);
|
|
|
|
extern SInt32 functionbodyoffset;
|
|
|
|
extern Object *CParser_NewRTFunc(Type *returntype, HashNameNode *name, Boolean unkflag, int argcount, ...);
|
|
|
|
extern SInt32 curstmtvalue;
|
|
|
|
extern Object *__memcpy_object;
|
|
|
|
extern void CInit_RewriteString(ENode *expr, Boolean flag);
|
|
|
|
extern int is_intrinsic_function_call(ENode *expr);
|
|
|
|
extern SInt32 I8_log2n(SInt64 value);
|
|
|
|
extern void PPCError_Error(int code);
|
|
|
|
|
|
|
|
enum {
|
|
|
|
INTRINSIC_8 = 8,
|
|
|
|
INTRINSIC_35 = 35,
|
|
|
|
INTRINSIC_36 = 36
|
|
|
|
};
|
2022-10-25 19:30:28 +00:00
|
|
|
|
|
|
|
extern char *ScanFloat(char *input, double *output, Boolean *fail);
|
|
|
|
|
|
|
|
#ifdef __MWERKS__
|
|
|
|
#pragma options align=reset
|
|
|
|
#endif
|