diff options
author | Ash Wolf <ninji@wuffs.org> | 2022-11-07 03:06:21 +0000 |
---|---|---|
committer | Ash Wolf <ninji@wuffs.org> | 2022-11-07 03:06:21 +0000 |
commit | 9a46dd0e2e80790d9848c0bbd718932a27c23269 (patch) | |
tree | e7a8e976c7138d50a69ff4778c4e8572efd94452 /includes/compiler/CInit.h | |
parent | d0b9848c54e6f85ab713f059dcd1ddef7e57caa6 (diff) | |
download | MWCC-9a46dd0e2e80790d9848c0bbd718932a27c23269.tar.gz MWCC-9a46dd0e2e80790d9848c0bbd718932a27c23269.zip |
honk
Diffstat (limited to '')
-rw-r--r-- | includes/compiler/CInit.h | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/includes/compiler/CInit.h b/includes/compiler/CInit.h new file mode 100644 index 0000000..9b1c24b --- /dev/null +++ b/includes/compiler/CInit.h @@ -0,0 +1,77 @@ +#ifndef COMPILER_CINIT_H +#define COMPILER_CINIT_H + +#include "compiler/common.h" + +#ifdef __MWERKS__ +#pragma options align=mac68k +#endif + +typedef void (*ExprCB)(Type *type, ENode *expr, Boolean flag); +typedef void (*InitExprRegisterCB)(ENode *expr); +typedef void (*InsertExprCB)(ENode *expr); +// fix last arg +typedef ENode *(*RegisterObjectCB)(Type *type, Object *obj, SInt32 offset, void *); +typedef ENode *(*TempNodeCB)(Type *type, Boolean flag); + +typedef struct OLinkList { + struct OLinkList *next; + Object *obj; + SInt32 offset; + SInt32 somevalue; +} OLinkList; + +typedef struct PooledString { + struct PooledString *next; + Object *obj; + int offset; + char *data; + SInt32 size; + Boolean ispascal; + Boolean iswide; +} PooledString; + +typedef struct InitInfo { + Object *obj; + OLinkList *list; + void *x8; + SInt32 expr_offset; + ExprCB expr_cb; + Boolean expr_cb_called; + Boolean x15; + Boolean x16; + InitExprRegisterCB init_expr_register_cb; + Object *obj1C; + InsertExprCB insert_expr_cb; + RegisterObjectCB register_object_cb; + char *buffer; + SInt32 size; + SInt32 bufferSize; + struct InitInfo *next; +} InitInfo; + +extern TempNodeCB cinit_tempnodefunc; +extern InitInfo *cinit_initinfo; + +#ifdef __MWERKS__ +#pragma options align=reset +#endif + +extern void CInit_Init(void); +extern Boolean CInit_RelocInitCheck(ENode *expr, Object **objptr, CInt64 *valptr, Boolean flag); +extern void CInit_ExportConst(Object *obj); +extern Statement *CInit_ConstructClassArray(Statement *stmt, TypeClass *tclass, Object *ctor, Object *dtor, ENode *firstarg, SInt32 count); +extern ENode *CInit_AutoObject(Object *obj, Type *type, UInt32 qual); +extern void CInit_InitializeAutoData(Object *obj, InsertExprCB insert_cb, RegisterObjectCB register_cb); +extern void CInit_InitializeStaticData(Object *obj, InitExprRegisterCB cb); +extern void CInit_InitializeData(Object *obj); +extern Object *CInit_DeclareString(char *data, SInt32 size, Boolean ispascal, Boolean iswide); +extern PooledString *CInit_DeclarePooledString(char *data, SInt32 size, Boolean ispascal); +extern PooledString *CInit_DeclarePooledWString(char *data, SInt32 size); +extern void CInit_RewriteString(ENode *expr, Boolean flag); +extern void CInit_DeclarePooledStrings(void); +extern void CInit_DeclareData(Object *obj, void *data, OLinkList *list, SInt32 size); +extern void CInit_DeclareReadOnlyData(Object *obj, void *data, OLinkList *list, SInt32 size); +extern void CInit_DefineTentativeData(void); + +#endif |