summaryrefslogtreecommitdiff
path: root/includes/compiler/CFunc.h
diff options
context:
space:
mode:
authorAsh Wolf <ninji@wuffs.org>2023-01-10 11:05:21 +0000
committerAsh Wolf <ninji@wuffs.org>2023-01-10 11:05:21 +0000
commitaec1b8dddc68ecb8288ec6132932e4c7b4bca09f (patch)
tree8138328fe43bcc5fff690dc60caac79aa570ab2b /includes/compiler/CFunc.h
parentfcfbafff31869ed808bff0639532db1828660e92 (diff)
downloadMWCC-aec1b8dddc68ecb8288ec6132932e4c7b4bca09f.tar.gz
MWCC-aec1b8dddc68ecb8288ec6132932e4c7b4bca09f.zip
getting close to done
Diffstat (limited to '')
-rw-r--r--includes/compiler/CFunc.h43
1 files changed, 26 insertions, 17 deletions
diff --git a/includes/compiler/CFunc.h b/includes/compiler/CFunc.h
index bed511f..a64cc74 100644
--- a/includes/compiler/CFunc.h
+++ b/includes/compiler/CFunc.h
@@ -49,6 +49,7 @@ typedef enum StatementType {
enum {
StmtFlag_1 = 1,
StmtFlag_2 = 2,
+ StmtFlag_4 = 4,
StmtFlag_8 = 8,
StmtFlag_10 = 0x10
};
@@ -80,9 +81,15 @@ typedef struct InitExpr {
Object *object;
} InitExpr;
+typedef enum CtorChainType {
+ CtorChain_Base = 0,
+ CtorChain_VBase = 1,
+ CtorChain_MemberVar = 2
+} CtorChainType;
+
typedef struct CtorChain {
struct CtorChain *next;
- UInt8 what;
+ CtorChainType what;
ENode *objexpr;
union {
ClassList *base; // 0
@@ -91,17 +98,19 @@ typedef struct CtorChain {
} u;
} CtorChain;
-typedef struct CFuncSave {
- CScopeSave scope;
- // lots of fields
-} CFuncSave;
+typedef struct CFuncSave CFuncSave;
struct DeclThing {
Type *thetype;
UInt32 qual;
- NameSpace *nspace;
- CLabel *xC;
- CLabel *x10;
+ SwitchInfo *switchinfo;
+ CLabel *loopContinue;
+ CLabel *loopBreak;
+};
+
+struct DefArgCtorInfo {
+ Object *default_func;
+ ENode *default_arg;
};
extern FuncArg elipsis;
@@ -122,7 +131,7 @@ extern Statement *curstmt;
extern DeclBlock *CFunc_NewDeclBlock(void);
extern void CFunc_RestoreBlock(DeclBlock *block);
extern void CFunc_SetupLocalVarInfo(Object *obj);
-extern void CFunc_DefaultArg(Type *type, short qual, FuncArg *args);
+extern ENode *CFunc_DefaultArg(Type *type, UInt32 qual, FuncArg *args);
extern Boolean CFunc_ParseFakeArgList(Boolean flag);
extern FuncArg *parameter_type_list(DeclInfo *declinfo);
extern CLabel *findlabel(void);
@@ -137,19 +146,19 @@ extern ENode *create_temp_node2(Type *type);
extern void CFunc_WarnUnused(void);
extern void CFunc_CodeCleanup(Statement *stmt);
extern void CFunc_DestructorCleanup(Statement *stmt);
-extern Statement *CFunc_GenerateLoop(Statement *stmt, Type *type, ENode *expr1, ENode *expr2, ENode *expr3, ENode *expr4, ENode (*callback)(ENode *, ENode *));
+extern Statement *CFunc_GenerateLoop(Statement *stmt, Type *type, ENode *lowerBound, ENode *upperBound, ENode *increment1, ENode *increment2, ENode *(*callback)(ENode *, ENode *));
extern void CFunc_CompoundStatement(DeclThing *thing);
-extern void CFunc_SetupNewFuncArgs(Object *obj, FuncArg *args);
+extern void CFunc_SetupNewFuncArgs(Object *func, FuncArg *args);
extern NameSpace *CFunc_FuncGenSetup(Statement *stmt, Object *func);
-extern void CFunc_GetGlobalCompilerState(CFuncSave *state);
+extern CFuncSave *CFunc_GetGlobalCompilerState(void);
extern void CFunc_SetGlobalCompilerState(CFuncSave *state);
-extern void CFunc_Gen(Statement *stmt, Object *obj, UInt8 unk);
+extern void CFunc_Gen(Statement *stmt, Object *func, UInt8 unk);
extern void CFunc_CheckClassCtors(TypeClass *tclass);
-extern void CFunc_ParseFuncDef(Object *obj, DeclInfo *declinfo, TypeClass *tclass, Boolean is_method, Boolean is_static, NameSpace *nspace);
+extern void CFunc_ParseFuncDef(Object *func, DeclInfo *di, TypeClass *tclass, Boolean is_method, Boolean is_static, NameSpace *nspace);
extern void InitExpr_Register(ENode *expr, Object *object);
-extern void CFunc_GenerateDummyFunction(Object *a);
-extern void CFunc_GenerateSingleExprFunc(Object *a, ENode *expr);
-extern void CFunc_GenerateDummyCtorFunc(Object *a, Object *b);
+extern void CFunc_GenerateDummyFunction(Object *func);
+extern void CFunc_GenerateSingleExprFunc(Object *func, ENode *expr);
+extern void CFunc_GenerateDummyCtorFunc(Object *func, Object *real_ctor);
#ifdef __MWERKS__
#pragma options align=reset