diff options
Diffstat (limited to 'includes/compiler.h')
-rw-r--r-- | includes/compiler.h | 880 |
1 files changed, 880 insertions, 0 deletions
diff --git a/includes/compiler.h b/includes/compiler.h new file mode 100644 index 0000000..319f95e --- /dev/null +++ b/includes/compiler.h @@ -0,0 +1,880 @@ +#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 |