summaryrefslogtreecommitdiff
path: root/includes/compiler/CInit.h
diff options
context:
space:
mode:
authorAsh Wolf <ninji@wuffs.org>2022-11-07 03:06:21 +0000
committerAsh Wolf <ninji@wuffs.org>2022-11-07 03:06:21 +0000
commit9a46dd0e2e80790d9848c0bbd718932a27c23269 (patch)
treee7a8e976c7138d50a69ff4778c4e8572efd94452 /includes/compiler/CInit.h
parentd0b9848c54e6f85ab713f059dcd1ddef7e57caa6 (diff)
downloadMWCC-9a46dd0e2e80790d9848c0bbd718932a27c23269.tar.gz
MWCC-9a46dd0e2e80790d9848c0bbd718932a27c23269.zip
honk
Diffstat (limited to '')
-rw-r--r--includes/compiler/CInit.h77
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