diff options
Diffstat (limited to 'includes/compiler/CParser.h')
-rw-r--r-- | includes/compiler/CParser.h | 385 |
1 files changed, 385 insertions, 0 deletions
diff --git a/includes/compiler/CParser.h b/includes/compiler/CParser.h new file mode 100644 index 0000000..21a3d59 --- /dev/null +++ b/includes/compiler/CParser.h @@ -0,0 +1,385 @@ +#ifndef COMPILER_CPARSER_H +#define COMPILER_CPARSER_H + +#include "compiler/common.h" +#include "compiler/enode.h" +#include "compiler/tokens.h" +#include "compiler/types.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_Packed +}; + +// not sure how many of these are char and how many are unsigned char or Boolean +typedef struct COpts { + Boolean little_endian; + Boolean codegen_dynamic; + Boolean codegen_pic; + Boolean 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; + Boolean disable_registers; + char fp_contract; + Boolean no_register_save_helpers; + char ppc_unroll_speculative; + short ppc_unroll_instructions_limit; + short ppc_unroll_factor_limit; + Boolean 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; + Boolean use_lmw_stmw; + char report_heap_info; + char misaligned_mem_access; + char switch_tables; + char prepare_compress; + char some_alignment; // used in CMach_AllocationAlignment + Boolean asmsemicolcomment; + Boolean asmpoundcomment; + StringPtr oldprefixname; + short inlinelevel; + int inline_max_size; + int inline_max_total_size; + char inline_bottom_up; + Boolean cplusplus; + Boolean ecplusplus; + Boolean objective_c; + char objc_strict; + Boolean ARM_conform; + char ARM_scoping; + Boolean require_prototypes; + Boolean trigraphs; + Boolean only_std_keywords; + Boolean enumsalwaysint; + Boolean ANSI_strict; + Boolean mpwc_relax; + Boolean mpwc_newline; + Boolean ignore_oldstyle; + Boolean cpp_extensions; + Boolean pointercast_lvalue; + char useRTTI; + char delete_exception; + char _4B; + Boolean oldalignment; + Boolean unsignedchars; + Boolean multibyteaware; + char autoinline; + char defer_codegen; + Boolean direct_to_som; + char som_env_check; + char som_call_opt; + Boolean booltruefalse; + char old_enum_mangler; + Boolean longlong; + Boolean longlong_enums; + char no_tfuncinline; + char _59; + Boolean flat_include; + char syspath_once; + Boolean always_import; + char simple_class_byval; + Boolean wchar_type; + Boolean vbase_ctor_offset; + char vbase_abi_v2; + Boolean def_inherited; + char template_patch; + char template_friends; + char faster_pch_gen; + Boolean 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; + Boolean reverse_bitfields; + Boolean c9x; + Boolean float_constants; + Boolean no_static_dtors; + Boolean longlong_prepeval; + Boolean const_strings; + char dumpir; + char experimental; + Boolean gcc_extensions; + char stdc_fp_contract; + char stdc_fenv_access; + char stdc_cx_limitedr; + Boolean old_argmatch; + char optEH; + char optEH2; + Boolean new_mangler; + char microsoft; + Boolean warningerrors; + Boolean pedantic; + char check_header_flags; + Boolean supress_warnings; + Boolean warn_illpragma; + Boolean warn_emptydecl; + char warn_possunwant; + char warn_unusedvar; + char warn_unusedarg; + Boolean warn_extracomma; + char warn_hidevirtual; + Boolean warn_largeargs; + char warn_implicitconv; + char warn_notinlined; + Boolean warn_structclass; + Boolean warn_padding; + char warn_no_side_effect; + char warn_resultnotused; + char warn_ptr_int_conv; + char align_mode; + Boolean align_array_members; + Boolean dont_reuse_strings; + Boolean pool_strings; + Boolean explicit_zero_data; + Boolean readonly_strings; + Boolean exceptions; + char _99; + char dont_inline; + char always_inline; + Boolean peephole; + char global_optimizer; + char side_effects; + Boolean internal; + Boolean import; + Boolean export; + Boolean lib_export; + char nosyminline; + char force_active; + char optimizationlevel; + Boolean optimize_for_size; + char optimizewithasm; + Boolean 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; + Boolean isGeneratingDebugInfo; + CWDataType pchCreator; + CWDataType pchType; + CWDataType text; + HashNameNode *forcedSegment; // when set by #pragma segment +} COpts; + +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; + +typedef struct CallbackAction { + struct CallbackAction *next; + Object *obj; + TypeClass *tclass; +} CallbackAction; + +extern FileOffsetInfo cparser_fileoffset; +extern TStreamElement symdecltoken; +extern ParserTryBlock *trychain; +extern Boolean inassembler; +extern Boolean dont_set_references; +extern TypeStruct ptmstruct; +extern TypeStruct catchinfostruct; +extern Boolean in_assembler; +extern Boolean illegalimplicitconversion; +extern Boolean in_func_arglist; +extern NameSpaceName *newp_fobj; +extern NameSpaceName *newa_fobj; +extern NameSpaceName *delp_fobj; +extern NameSpaceName *dela_fobj; +extern Object *newh_func; +extern Object *delh_func; +extern Object *copy_func; +extern Object *clear_func; +extern Object *Rgtid_func; +extern Object *Rdync_func; +extern Object *rt_ptmf_cast; +extern Object *rt_ptmf_cmpr; +extern Object *rt_ptmf_test; +extern Object *rt_ptmf_call; +extern Object *rt_ptmf_scall; +extern Object *rt_ptmf_call4; +extern Object *rt_ptmf_scall4; +extern Object *rt_ptmf_null; +extern Object *rt_som_new; +extern Object *rt_som_newcheck; +extern Object *rt_som_check; +extern Object *rt_som_glue1; +extern Object *rt_som_glue2; +extern Object *rt_som_glue3; +extern Object *carr_func; +extern Object *cnar_func; +extern Object *darr_func; +extern Object *dnar_func; +extern Object *dnar3_func; +extern Object *Xgreg_func; +extern Object *Xthrw_func; +extern Object *Xicth_func; +extern Object *Xecth_func; +extern Object *Xunex_func; +extern COpts copts; +extern struct GList name_mangle_list; +extern HashNameNode *no_name_node; +extern HashNameNode *temp_argument_name; +extern HashNameNode *this_name_node; +extern HashNameNode *self_name_node; +extern HashNameNode *vptr_name_node; +extern CallbackAction *callbackactions; +extern Boolean fatalerrors; +extern Boolean anyerrors; +extern jmp_buf errorreturn; +extern char string[256]; +extern SInt32 compilererrornum; +extern SInt32 compilererrfile; +extern SInt32 compilererrline; + +extern Type sttemplexpr; +extern Type stillegal; +extern Type stvoid; +extern TypePointer void_ptr; +extern TypeFunc rt_func; + +enum { + ATOM_VOID = 1, + ATOM_CHAR, + ATOM_UCHAR, + ATOM_WCHAR, + ATOM_SHORT, + ATOM_USHORT, + ATOM_INT, + ATOM_UINT, + ATOM_LONG, + ATOM_ULONG, + ATOM_LONGLONG, + ATOM_ULONGLONG, + ATOM_FLOAT, + ATOM_SHORTDOUBLE, + ATOM_DOUBLE, + ATOM_LONGDOUBLE +}; + +extern Object *CParser_NewRTFunc(Type *rettype, HashNameNode *name, Boolean flag, int argcount, ...); +extern Boolean CParser_IsPublicRuntimeObject(Object *obj); +extern Object *CParser_FindPublicRuntimeObject(HashNameNode *name); +extern Boolean CParser_ReInitRuntimeObjects(Boolean is_precompiler); +extern void CParser_Setup(void); +extern void CParser_Cleanup(void); +extern short GetPrec(short token); +extern Boolean CParser_ParseOperatorName(short *token, Boolean flag1, Boolean flag2); +extern SInt32 CParser_GetUniqueID(void); +extern void CParser_PrintUniqueID(char *buf); +extern void CParser_SetUniqueID(SInt32 id); +extern HashNameNode *CParser_GetUniqueName(void); +extern HashNameNode *CParser_NameConcat(char *a, char *b); +extern HashNameNode *CParser_AppendUniqueName(char *prefix); +extern HashNameNode *CParser_AppendUniqueNameFile(char *prefix); +extern Boolean IsTempName(HashNameNode *name); +extern void CParser_UpdateObject(Object *object, DeclInfo *declinfo); +extern Object *CParser_NewObject(DeclInfo *declinfo); +extern Object *CParser_NewLocalDataObject(DeclInfo *declinfo, Boolean add_to_locals); +extern Object *CParser_NewGlobalDataObject(DeclInfo *declinfo); +extern Object *CParser_NewCompilerDefDataObject(void); +extern Object *CParser_NewFunctionObject(DeclInfo *declinfo); +extern Object *CParser_NewCompilerDefFunctionObject(void); +extern Object *CParser_NewAliasObject(Object *object, SInt32 offset); +extern FuncArg *CParser_NewFuncArg(void); +extern Type *atomtype(void); +extern Object *CParser_FindDeallocationObject(Type *type, FuncArg *args, Boolean flag1, Boolean flag2, Boolean *outflag); +extern short is_memberpointerequal(Type *a, Type *b); +extern short is_typeequal(Type *a, Type *b); +extern short iscpp_typeequal(Type *a, Type *b); +extern short CParser_CompareArgLists(FuncArg *a, FuncArg *b); +extern Boolean is_arglistsame(FuncArg *a, FuncArg *b); +extern short is_typesame(Type *a, Type *b); +extern Type *CParser_GetBoolType(void); +extern Type *CParser_GetWCharType(void); +extern short CParser_GetOperator(ENodeType t); +extern Boolean CParser_IsMoreCVQualified(UInt32 a, UInt32 b); +extern Boolean CParser_IsSameOrMoreCVQualified(UInt32 a, UInt32 b); +extern Boolean is_unsigned(Type *type); +extern StructMember *ismember(TypeStruct *tstruct, HashNameNode *name); +extern void appendmember(TypeStruct *tstruct, StructMember *member); +extern Boolean isdeclaration(UInt8 flag1, UInt8 flag2, UInt8 flag3, short token); +extern Boolean islookaheaddeclaration(void); +extern Type *CParser_ParseTypeID(UInt32 *qual, Boolean *flag); +extern Boolean CParser_TryFuncDecl(void); +extern Boolean CParser_TryParamList(Boolean flag); +extern Type *CParser_RemoveTopMostQualifiers(Type *type, UInt32 *qual); +extern UInt32 CParser_GetTypeQualifiers(Type *type, UInt32 qual); +extern UInt32 CParser_GetCVTypeQualifiers(Type *type, UInt32 qual); +extern Boolean CParser_IsConst(Type *type, UInt32 qual); +extern Boolean CParser_IsVolatile(Type *type, UInt32 qual); +extern Boolean is_const_object(Object *obj); +extern Boolean is_volatile_object(Object *obj); +extern Boolean CParserIsConstExpr(ENode *expr); +extern Boolean CParserIsVolatileExpr(ENode *expr); +extern Boolean CParser_HasInternalLinkage(Object *obj); +extern Boolean CParser_HasInternalLinkage2(Object *obj); +extern Boolean CParser_IsVirtualFunction(Object *obj, TypeClass **tclass, SInt32 *index); +extern Boolean is_pascal_object(Object *obj); +extern Boolean is_cfm_type(Type *type); +extern Boolean CParser_IsVTableObject(Object *obj); +extern void TypedefDeclInfo(DeclInfo *declinfo, Type *type, UInt32 qual); +extern void CParser_ParseAttribute(Type *type, DeclInfo *declinfo); +extern void CParser_ParseDeclSpec(DeclInfo *declinfo, Boolean flag); +extern Boolean CParser_CheckTemplateClassUsage(TemplClass *tmclass, Boolean flag); +extern void CParser_GetDeclSpecs(DeclInfo *di, Boolean flag); +extern void CParser_RegisterNonGlobalClass(TypeClass *tclass); +extern void CParser_RegisterSingleExprFunction(Object *func, ENode *expr); +extern void CParser_RegisterDummyCtorFunction(Object *func, Object *obj); +extern Boolean CParser_IsAnonymousUnion(DeclInfo *di, Boolean flag); +extern void CParser_CheckAnonymousUnion(DeclInfo *di, Boolean flag); +extern void CParser_NewCallBackAction(Object *obj, TypeClass *tclass); +extern void CParser_NewClassAction(TypeClass *tclass); +extern void CParser_CallBackAction(Object *obj); +extern Object *CParser_ParseObject(void); +extern void CParser_ParseGlobalDeclaration(void); +extern void cparser(void); + +#ifdef __MWERKS__ +#pragma options align=reset +#endif + +#endif |