#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 enum { AlignMode0_Mac68k, AlignMode1_Mac68k4byte, AlignMode2_PPC, AlignMode3_1Byte, AlignMode4_2Byte, AlignMode5_4Byte, AlignMode6_8Byte, AlignMode7_16Byte, AlignMode8 }; // not sure how many of these are char and how many are unsigned char or Boolean typedef struct COpts { char little_endian; char codegen_dynamic; char codegen_pic; char no_common; char no_implicit_templates; char absolutepath; // determines the path written to debug info char x06; // linker/objgen related short cpu; char schedule_cpu; unsigned char schedule_mode; // may be an enum?? SInt32 debuglisting; char profile; char traceback; char disable_registers; char fp_contract; char no_register_save_helpers; char ppc_unroll_speculative; short ppc_unroll_instructions_limit; short ppc_unroll_factor_limit; char altivec_model; UInt8 x1B; // altivec/vrsave related UInt8 code_alignment; char x1D; UInt8 x1E; // some register used in TOC_use_isel UInt8 gen_fsel; char ppc_opt_bclr_bcctr; char use_lmw_stmw; char report_heap_info; char misaligned_mem_access; char switch_tables; char prepare_compress; char some_alignment; // used in CMach_AllocationAlignment char asmsemicolcomment; char asmpoundcomment; StringPtr oldprefixname; short inlinelevel; int inline_max_size; int inline_max_total_size; char inline_bottom_up; Boolean cplusplus; Boolean ecplusplus; char objective_c; char objc_strict; char ARM_conform; char ARM_scoping; char require_prototypes; char trigraphs; char only_std_keywords; char enumsalwaysint; char ANSI_strict; char mpwc_relax; char mpwc_newline; char ignore_oldstyle; char cpp_extensions; char pointercast_lvalue; char useRTTI; char delete_exception; char _4B; Boolean oldalignment; char unsignedchars; char multibyteaware; char autoinline; char defer_codegen; Boolean direct_to_som; char som_env_check; char som_call_opt; char booltruefalse; char old_enum_mangler; char longlong; char longlong_enums; char no_tfuncinline; char _59; char flat_include; char syspath_once; char always_import; char simple_class_byval; char wchar_type; char vbase_ctor_offset; char vbase_abi_v2; char def_inherited; char template_patch; char template_friends; char faster_pch_gen; char array_new_delete; Boolean dollar_identifiers; char def_inline_tfuncs; char arg_dep_lookup; Boolean simple_prepdump; char line_prepdump; char fullpath_prepdump; char old_mtemplparser; char suppress_init_code; char reverse_bitfields; Boolean c9x; char float_constants; char no_static_dtors; char longlong_prepeval; char const_strings; char dumpir; char experimental; char gcc_extensions; char stdc_fp_contract; char stdc_fenv_access; char stdc_cx_limitedr; char old_argmatch; char optEH; char optEH2; char new_mangler; char microsoft; Boolean warningerrors; char pedantic; char check_header_flags; Boolean supress_warnings; Boolean warn_illpragma; char warn_emptydecl; char warn_possunwant; char warn_unusedvar; char warn_unusedarg; char warn_extracomma; char warn_hidevirtual; char warn_largeargs; char warn_implicitconv; char warn_notinlined; char warn_structclass; char warn_padding; char warn_no_side_effect; char warn_resultnotused; char warn_ptr_int_conv; char align_mode; Boolean align_array_members; char dont_reuse_strings; char pool_strings; char explicit_zero_data; char readonly_strings; char exceptions; char _99; char dont_inline; char always_inline; char peephole; char global_optimizer; char side_effects; char internal; char import; char export; char lib_export; char nosyminline; char force_active; char optimizationlevel; char optimize_for_size; char optimizewithasm; char crippled; char opt_common_subs; char opt_loop_invariants; char opt_propagation; char opt_dead_assignments; char opt_strength_reduction; char opt_strength_reduction_strict; char opt_dead_code; char opt_lifetimes; char _B1; // unused? char opt_unroll_loops; char opt_vectorize_loops; char _B4; // amount of IRO passes? char opt_pointer_analysis; char opt_pointer_analysis_mode; char loop_unroll_count; char loop_unroll_size_threshold; char isGeneratingDebugInfo; CWDataType pchCreator; CWDataType pchType; CWDataType text; HashNameNode *forcedSegment; // when set by #pragma segment } COpts; typedef struct CParams { CWPluginContext context; CWObjectData objectdata; Handle objectDataHandle; Handle browseDataHandle; SInt32 pluginRequest; SInt32 apiVersion; FSSpec projectFile; SInt32 projectFileCount; SInt32 mainFileNumber; FSSpec mainFileSpec; const char *mainFileText; SInt32 mainFileTextLength; Boolean isPrecompiling; Boolean isAutoPrecompiling; Boolean isPreprocessing; Boolean isGeneratingDebugInfo; Boolean isCachingPrecompiledHeaders; CWBrowseOptions browseOptions; Boolean field276; SInt16 mainFileID; CWDataType targetOS; CWDataType targetCPU; char *targetName; } CParams; typedef struct VarInfo { // OK! Object *func; SInt32 usage; TStreamElement deftoken; SInt16 varnumber; Boolean noregister; Boolean used; UInt8 flags; UInt8 rclass; SInt16 reg; SInt16 regHi; } VarInfo; typedef struct DefArgCtorInfo { Object *default_func; ENode *default_arg; } DefArgCtorInfo; typedef struct XRefOffset { UInt32 xrefoffset; SInt32 offset; } XRefOffset; typedef struct InlineXRef { struct InlineXRef *next; Object *object; UInt16 xrefmode; UInt16 numxrefs; XRefOffset xref[1]; } InlineXRef; typedef enum StatementType { ST_NOP = 1, ST_LABEL, ST_GOTO, ST_EXPRESSION, ST_SWITCH, ST_IFGOTO, ST_IFNGOTO, ST_RETURN, ST_OVF, ST_EXIT, ST_ENTRY, ST_BEGINCATCH, ST_ENDCATCH, ST_ENDCATCHDTOR, ST_GOTOEXPR, ST_ASM, ST_BEGINLOOP, ST_ENDLOOP, ST_ILLEGAL } StatementType; typedef enum ExceptionActionType { EAT_NOP, EAT_DESTROYLOCAL, EAT_DESTROYLOCALCOND, EAT_DESTROYLOCALOFFSET, EAT_DESTROYLOCALPOINTER, EAT_DESTROYLOCALARRAY, EAT_DESTROYPARTIALARRAY, EAT_DESTROYMEMBER, EAT_DESTROYMEMBERCOND, EAT_DESTROYMEMBERARRAY, EAT_DELETEPOINTER, EAT_DELETELOCALPOINTER, EAT_DELETEPOINTERCOND, EAT_CATCHBLOCK, EAT_ACTIVECATCHBLOCK, EAT_SPECIFICATION, EAT_TERMINATE, EAT_DESTROYBASE, EAT_NACTIONS } ExceptionActionType; typedef struct ExceptionAction { struct ExceptionAction *prev; union { struct { Object *local; Object *dtor; } destroy_local; struct { Object *local; Object *cond; Object *dtor; } destroy_local_cond; struct { Object *local; Object *dtor; SInt32 offset; } destroy_local_offset; struct { Object *pointer; Object *dtor; } destroy_local_pointer; struct { Object *localarray; Object *dtor; SInt32 elements; SInt32 element_size; } destroy_local_array; struct { Object *arraypointer; Object *arraycounter; Object *dtor; Object *element_size; } destroy_partial_array; struct { Object *objectptr; Object *dtor; SInt32 offset; } destroy_member; struct { Object *objectptr; Object *cond; Object *dtor; SInt32 offset; } destroy_member_cond; struct { Object *objectptr; Object *dtor; SInt32 offset; SInt32 elements; SInt32 element_size; } destroy_member_array; struct { Object *pointerobject; Object *deletefunc; } delete_pointer; struct { Object *pointerobject; Object *deletefunc; Object *cond; } delete_pointer_cond; struct { Object *catch_object; Object *catch_info_object; CLabel *catch_label; Object *catch_typeid; Type *catch_type; UInt32 catch_qual; } catch_block; struct { Object *catch_info_object; Boolean call_dtor; } active_catch_block; struct { SInt32 unexp_ids; Object **unexp_id; CLabel *unexp_label; Object *unexp_info_object; } specification; struct { Object *object; Boolean is_dep; } local; } data; ExceptionActionType type; } ExceptionAction; typedef struct Statement { struct Statement *next; StatementType type; char marked; UInt8 flags; UInt16 value; ENode *expr; CLabel *label; ExceptionAction *dobjstack; SInt32 sourceoffset; HashNameNode *sourcefilepath; } Statement; typedef struct CLabel { struct CLabel *next; Statement *stmt; HashNameNode *uniquename; HashNameNode *name; PCodeLabel *pclabel; void *sicg_label; } CLabel; typedef struct MemInitializer { struct MemInitializer *next; union { ENodeList *nodes; ENode *expr; } e; union { ObjMemberVar *ivar; Type *type; } u; Boolean is_ivar; Boolean is_expr; } MemInitializer; typedef enum DepNameType { DNT_NAME, DNT_CONVERSION, DNT_DTOR, DNT_NAMESPACE, DNT_QUALNAME, DNT_TEMPLATE, DNT_TYPENAME } DepNameType; typedef struct DepName { struct DepName *next; 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; } DepName; 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; // CScope.c extern Boolean cscope_is_member_func; extern Object *cscope_currentfunc; extern TypeClass *cscope_currentclass; extern NameSpace *cscope_current; extern NameSpace *cscope_root; typedef struct CScopeSave { NameSpace *current; TypeClass *currentclass; Object *currentfunc; Boolean is_member_func; } CScopeSave; // assumed name typedef struct CScopeParseResult { NameSpace *nspace_0; HashNameNode *name_4; Type *x8; void *xC; ObjBase *obj_10; NameSpaceObjectList *nsol_14; BClassList *bcl_18; Boolean x1C; Boolean x1D; Boolean isambig; Boolean x1F; Boolean x20; Boolean x21; } CScopeParseResult; typedef struct CScopeNSIterator { NameSpace *nspace; NameSpaceLookupList *lookup; CScopeParseResult *result; } CScopeNSIterator; typedef struct CScopeObjectIterator { NameSpace *nspace; NameSpaceName *nextname; NameSpaceObjectList *currlist; int hashindex; } CScopeObjectIterator; extern void CScope_Setup(); extern void CScope_Cleanup(); extern void CScope_GetScope(CScopeSave *save); extern void CScope_SetNameSpaceScope(NameSpace *nspace, CScopeSave *save); extern void CScope_SetClassScope(TypeClass *cls, CScopeSave *save); extern void CScope_SetClassDefScope(TypeClass *cls, CScopeSave *save); extern void CScope_SetFunctionScope(Object *function, CScopeSave *save); extern void CScope_SetMethodScope(Object *function, TypeClass *cls, Boolean unknownFlag, CScopeSave *save); extern void CScope_RestoreScope(CScopeSave *saved); extern Boolean CScope_IsEmptySymTable(); extern Boolean CScope_IsInLocalNameSpace(NameSpace *nspace); extern NameSpaceObjectList *CScope_FindName(NameSpace *nspace, HashNameNode *name); extern NameSpaceName *CScope_FindNameSpaceName(NameSpace *nspace, HashNameNode *name); extern NameSpaceObjectList *CScope_InsertName(NameSpace *nspace, HashNameNode *name); extern NameSpaceObjectList *CScope_ArgumentDependentNameLookup(NameSpaceObjectList *list, HashNameNode *name, ENodeList *argNodes, Boolean flag); extern NameSpace *CScope_NewHashNameSpace(HashNameNode *name); extern NameSpace *CScope_NewListNameSpace(HashNameNode *name, Boolean is_global); extern NameSpace *CScope_FindNonClassNonFunctionNS(NameSpace *nspace); extern NameSpace *CScope_FindGlobalNS(NameSpace *nspoce); extern Boolean CScope_IsStdNameSpace(NameSpace *nspace); extern Boolean CScope_IsEmptyNameSpace(NameSpace *nspace); extern void CScope_MergeNameSpace(NameSpace *dst, NameSpace *src); extern void CScope_AddObject(NameSpace *nspace, HashNameNode *name, ObjBase *obj); extern void CScope_AddGlobalObject(Object *obj); extern NameSpaceLookupList *CScope_BuildNameSpaceLookupList(NameSpace *nspace); extern Boolean CScope_FindQualifiedClassMember(CScopeParseResult *result, TypeClass *tclass, HashNameNode *name); extern Type *CScope_GetType(NameSpace *nspace, HashNameNode *name, void **unk6); extern Type *CScope_GetTagType(NameSpace *nspace, HashNameNode *name); extern Boolean CScope_ParseExprName(CScopeParseResult *result); extern Boolean CScope_ParseDeclName(CScopeParseResult *result); extern Boolean CScope_ParseQualifiedNameSpace(CScopeParseResult *result, Boolean flag1, Boolean flag2); extern Boolean CScope_ParseElaborateName(CScopeParseResult *result); extern Boolean CScope_FindObject(NameSpace *nspace, CScopeParseResult *result, HashNameNode *name); extern Boolean CScope_FindNonClassObject(NameSpace *nspace, CScopeParseResult *result, HashNameNode *name); extern NameSpaceObjectList *CScope_FindObjectList(CScopeParseResult *result, HashNameNode *name); extern Boolean CScope_PossibleTypeName(HashNameNode *name); extern Boolean CScope_FindClassMemberObject(TypeClass *tclass, CScopeParseResult *result, HashNameNode *name); extern void CScope_InitObjectIterator(CScopeObjectIterator *iterator, NameSpace *nspace); extern ObjBase *CScope_NextObjectIteratorObject(CScopeObjectIterator *iterator); extern NameSpaceObjectList *CScope_NextObjectIteratorObjectList(CScopeObjectIterator *iterator); extern void CScope_DefineTypeTag(NameSpace *nspace, HashNameNode *name, Type *type); extern Type *CScope_GetLocalTagType(NameSpace *nspace, HashNameNode *name); extern Boolean CScope_FindTypeName(NameSpace *nspace, HashNameNode *name, CScopeParseResult *result); extern NameSpaceObjectList *CScope_GetLocalObject(NameSpace *nspace, HashNameNode *name); extern BClassList *CScope_GetClassAccessPath(BClassList *list, TypeClass *tclass); extern Boolean CScope_ParseMemberName(TypeClass *tclass, CScopeParseResult *result, Boolean flag); extern void CScope_AddClassUsingDeclaration(TypeClass *tclass, TypeClass *tclass2, HashNameNode *name, AccessType access); extern void CScope_ParseUsingDeclaration(NameSpace *nspace, AccessType access); extern void CScope_ParseNameSpaceAlias(HashNameNode *name); extern void CScope_ParseUsingDirective(NameSpace *nspace); // CMachine.c extern TypeIntegral stbool; extern TypeIntegral stchar; extern TypeIntegral stsignedchar; extern TypeIntegral stunsignedchar; extern TypeIntegral stwchar; extern TypeIntegral stsignedshort; extern TypeIntegral stunsignedshort; extern TypeIntegral stsignedint; extern TypeIntegral stunsignedint; extern TypeIntegral stsignedlong; extern TypeIntegral stunsignedlong; extern TypeIntegral stsignedlonglong; extern TypeIntegral stunsignedlonglong; extern TypeIntegral stfloat; extern TypeIntegral stshortdouble; extern TypeIntegral stdouble; extern TypeIntegral stlongdouble; extern TypeStruct stvectorunsignedchar; extern TypeStruct stvectorsignedchar; extern TypeStruct stvectorboolchar; extern TypeStruct stvectorunsignedshort; extern TypeStruct stvectorsignedshort; extern TypeStruct stvectorboolshort; extern TypeStruct stvectorunsignedlong; extern TypeStruct stvectorsignedlong; extern TypeStruct stvectorboollong; extern TypeStruct stvectorfloat; extern TypeStruct stvectorpixel; extern TypeStruct stvector; extern void CMach_Configure(); extern SInt32 CMach_GetQUALalign(UInt32 qual); extern SInt32 CMach_ArgumentAlignment(Type *type); extern SInt32 CMach_AllocationAlignment(Type *type, UInt32 qual); extern CInt64 CMach_CalcIntDiadic(Type *type, CInt64 left, short op, CInt64 right); extern CInt64 CMach_CalcIntMonadic(Type *type, short op, CInt64 val); extern CInt64 CMach_CalcIntConvertFromFloat(Type *type, Float fval); extern void CMach_InitIntMem(Type *type, CInt64 val, void *mem); extern void CMach_InitVectorMem(Type *type, MWVector128 val, void *mem); extern Float CMach_CalcFloatDiadic(Type *type, Float left, short op, Float right); extern Float CMach_CalcFloatMonadic(Type *type, short op, Float fval); extern Boolean CMach_CalcFloatDiadicBool(Type *type, Float left, short op, Float right); extern Boolean CMach_CalcVectorDiadicBool(Type *type, MWVector128 *left, short op, MWVector128 *right); extern char *CMach_FloatScan(char *input, Float *result, Boolean *fail); extern Float CMach_CalcFloatConvertFromInt(Type *type, CInt64 val); extern Float CMach_CalcFloatConvert(Type *type, Float fval); extern Boolean CMach_FloatIsZero(Float fval); extern Boolean CMach_FloatIsOne(Float fval); extern Boolean CMach_FloatIsNegOne(Float fval); extern void CMach_InitFloatMem(Type *type, Float val, void *mem); extern void CMach_PrintFloat(char *buf, Float val); extern void CMach_PragmaParams(); extern void CMach_AdjustFuntionArgs(); extern SInt16 CMach_GetStructAlign(TypeStruct *tstruct); extern SInt16 CMach_GetClassAlign(TypeClass *tclass); extern SInt16 CMach_GetTypeAlign(Type *type); extern SInt16 CMach_MemberAlignValue(Type *type, SInt32 var); extern void CMach_StructLayoutInitOffset(SInt32 offset); extern SInt32 CMach_StructLayoutGetCurSize(); extern SInt32 CMach_StructLayoutGetOffset(Type *type, UInt32 qual); extern SInt32 CMach_StructLayoutBitfield(TypeBitfield *tbitfield, UInt32 qual); extern UInt8 CMach_GetFunctionResultClass(TypeFunc *tfunc); extern Boolean CMach_PassResultInHiddenArg(Type *type); extern const char *CMach_GetCPU(); extern Boolean CMach_FloatIsPowerOf2(Float flt); extern Float CMach_FloatReciprocal(Float flt); extern SInt32 CMach_RoundedSizeOf(Object *object); extern void CMach_ReInitRuntimeObjects(); // CPrep.c typedef struct Macro { struct Macro *next; HashNameNode *name; void *c; Boolean xC; Boolean xD; Boolean is_special; Boolean xF; void *e; } Macro; typedef struct TokenStack { char *pos; char *macrostart; Macro *macro; Boolean macrocheck; } TokenStack; extern CParams *cparamblkptr; extern short tk; extern CInt64 tkintconst; extern Float tkfloatconst; extern char *tkstring; extern HashNameNode *tkidentifier; extern SInt32 tksize; extern short ispascalstring; extern short nlflag; extern SInt32 lines; extern Boolean spaceskip; extern struct Macro **macrohashtable; extern Boolean cprep_nomem_exit; extern Boolean cprep_nostring; extern Boolean cprep_eoltokens; extern TokenStack tokenstack[128]; extern short tokenstacklevel; extern SInt32 cprep_cursymfile; // might be a ptr? extern char *pos; extern char *macropos; extern char *nextcharpos; extern char CPrep_SkipNewCommentChar; extern Boolean preprocessing_only; extern Handle stringmem; extern SInt32 maxstringsize; extern char cprep_idarray[256]; extern Boolean was_escchar; extern Boolean macrocheck; extern Boolean widestring; extern Boolean at_linestart; extern char *prep_file_start; extern char *prep_file_end; extern char *macrostart; extern Boolean cprep_strconcat; extern CPrepFileInfo *prep_file; extern short filesp; extern SInt32 linenumber; extern GList pplist; extern TStreamElement *ts_current; extern SInt32 ts_preread_elements; extern void CPrep_InsertSpecialMacro(Macro *macro, char *name); extern void CPrep_InsertSpecialMacros(); extern void CPrep_RemoveSpecialMacros(); extern Boolean setupprep(); extern void cleanupprep(); extern void CPrep_TSBufferGrow(int amount); extern void CPrep_TokenStreamGetState(SInt32 *state); extern void CPrep_TokenStreamSetState(SInt32 *state); extern void CPrep_UnLex(); extern void CPrep_TokenStreamSetCurState(SInt32 *state); extern void CPrep_StreamGetBlock(); extern void CPrep_StreamGetSemicolon(); extern void CPrep_StreamGetTemplate(); extern void CPrep_StreamInsert(); extern void CPrep_StreamRemove(); extern void CPrep_RemoveTokens(); extern void CPrep_TokenStreamFlush(); extern void CPrep_CurStreamElement(); extern void CPrep_GetTokenContext(TStreamElement *token, CPrepFileInfo **tokenfile, SInt32 *selectionoffset, short *tokensize, SInt32 *linenumber, char *buf1, short *tokenoffset, short *tokenlength, char *buf2, short *lastarg); extern void CPrep_Error(short code); extern void CPrep_ErrorName(short code, const char *name); extern void CPrep_Warning(short code); extern void CPrep_WarningName(short code, const char *name); extern void CPrep_ErrorMessage(int errTable, char *str, Boolean flag1, Boolean flag2); extern void CPrep_ErrorMessageVA(int code, const char *format, va_list list, Boolean flag1, Boolean flag2); extern void popfile(); extern void CPrep_SetSourceFile(); extern void CPrep_GetSourceFilePath(); extern void CPrep_NewFileOffsetInfo(); extern void CPrep_GetFileOffsetInfo(); extern void CPrep_GetFileOffsetInfo2(); extern void CPrep_ResetFileInfo(); extern void CPrep_GetPrepPos(); extern Boolean C_Compiler(CParams *param); extern void poptokenseq(); extern void foundnl(); extern void newline(); extern short notendofline(); extern char *CPrep_GetFileName(char *buffer, Boolean flag1, Boolean flag2); extern void macrotest(); extern void CPrep_PragmaLex(); extern void CPrep_PushOption(); extern void CPrep_PopOption(); extern void preprocessor(); extern void CPrep_BrowserTokenOffset(); extern void CPrep_BrowserFileOffset(); extern void CPrep_BrowserFilePosition(CPrepFileInfo **fileinfo, SInt32 *offset); extern CPrepFileInfo *CPrep_BrowserCurrentFile(); // CPrepTokenizer.c extern short prepskipnextchar(); extern short prepnextchar(); extern short prepnextstringchar(char *str, Boolean flag); extern void CPrep_MatchChar(char ch, Boolean flag); extern char *CPrep_MatchChar2(char *str, char ch, Boolean flag); extern short prepcurchar(); extern char *ReadIdentifier(char *str); extern char *CPrep_SkipNewComment(char *str); extern Boolean skipendoflinematch(char *str, Boolean flag); extern void skipendofline(); extern void CPrep_SkipAsmComment(); extern short lookahead(); extern short lookahead_noeol(); extern short lex(); extern short plex(); extern short lexidentifier(); // LOOSE DECLS extern Boolean C_Compiler(CParams *param); extern void PrecompilerRead(short refnum, void *buffer); 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); extern COpts copts; extern CParams *cparamblkptr; extern FuncArg elipsis; extern FuncArg oldstyle; extern HashNameNode *constructor_name_node; extern HashNameNode *destructor_name_node; extern char *CMangler_GetOperator(HashNameNode *str); 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; typedef struct ParserTryBlock { struct ParserTryBlock *next; jmp_buf jmpbuf; NameSpace *cscope_current; TypeClass *cscope_currentclass; Object *cscope_currentfunc; TemplStack *ctempl_curinstance; TStreamElement *cerror_locktoken; Boolean cscope_is_member_func; } ParserTryBlock; extern ParserTryBlock *trychain; 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); extern Boolean CParser_IsPublicRuntimeObject(Object *obj); extern Boolean CParser_ParseOperatorName(short *token, Boolean flag1, Boolean flag2); extern Boolean CTemplTool_EqualArgs(TemplArg *a, TemplArg *b); extern TypeTemplDep *CDecl_NewTemplDepType(TypeTemplDepType tdtype); extern GList name_mangle_list; extern void CPrep_UnLex(); extern Type *CTempl_ClassGetType(TypeClass *tclass); extern short is_typesame(Type *t1, Type *t2); 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); extern AccessType global_access; extern UInt32 CParser_GetTypeQualifiers(Type *type, UInt32 qual); extern void CTemplClass_RegisterUsingDecl(TemplClass *tclass, Type *target, AccessType access); extern void CodeGen_InsertSpecialMacros(); extern char *CodeGen_ExpandSpecialMacro(Macro *macro); extern void CPrep_PreprocessDumpFileInfo(Boolean flag); extern Boolean gForceSourceLoc; extern void ObjGen_SegmentName(); // might take an arg, not sure since it's empty enum { CPU_PPC401, CPU_PPC403, CPU_PPC505, CPU_PPC509, CPU_PPC555, CPU_PPC601, CPU_PPC602, CPU_PPC603, CPU_PPC603e, CPU_PPC604, CPU_PPC604e, CPU_PPC740, CPU_PPC750, CPU_PPC801, CPU_PPC821, CPU_PPC823, CPU_PPC850, CPU_PPC860, CPU_PPC8240, CPU_PPC8260, CPU_PPC7400 = 0x15, CPU_PPCGEKKO, CPU_PPCELF, CPU_PPC7450, CPU_PPC556, CPU_PPC565 }; extern char *ScanFloat(char *input, double *output, Boolean *fail); #ifdef __MWERKS__ #pragma options align=reset #endif