summaryrefslogtreecommitdiff
path: root/includes/compiler/CParser.h
diff options
context:
space:
mode:
Diffstat (limited to 'includes/compiler/CParser.h')
-rw-r--r--includes/compiler/CParser.h385
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