tons more renaming of stuff

This commit is contained in:
Ash Wolf
2023-01-20 11:56:38 +00:00
parent 7d986adf37
commit 0905072b3c
52 changed files with 1009 additions and 1039 deletions

View File

@@ -22,7 +22,7 @@ extern SInt16 CABI_StructSizeAlignValue(Type *type, SInt32 size);
extern void CABI_ReverseBitField(TypeBitfield *tbitfield);
extern void CABI_AddVTable(TypeClass *tclass);
extern SInt32 CABI_GetVTableOffset(TypeClass *tclass);
extern void CABI_LayoutClass(DeclE *decle, TypeClass *tclass);
extern void CABI_LayoutClass(ClassLayout *layout, TypeClass *tclass);
extern void CABI_MakeDefaultArgConstructor(TypeClass *tclass, Object *func);
extern ENode *CABI_MakeThisExpr(TypeClass *tclass, SInt32 offset);
extern SInt32 CABI_GetCtorOffsetOffset(TypeClass *tclass, TypeClass *base);

View File

@@ -7,13 +7,6 @@
#pragma options align=mac68k
#endif
/*typedef struct VTableObjectLink {
struct VTableObjectLink *next;
Object *methodobj;
SInt32 offset;
SInt32 xC;
} VTableObjectLink;*/
extern void CClass_Init(void);
extern void CClass_GenThunks(void);
extern UInt8 CClass_GetOverrideKind(TypeFunc *a, TypeFunc *b, Boolean errorflag);

View File

@@ -10,12 +10,12 @@
#endif
// named because it's 0xE bytes big (hurr)
struct DeclE {
struct ClassLayout {
ObjBase **objlist;
ObjMemberVar *vtable_ivar;
unsigned short x8; // lex_order_count?
unsigned short xA;
Boolean xC;
UInt16 lex_order_count;
UInt16 xA;
Boolean has_vtable;
};
// what the fuck am I?
@@ -41,8 +41,7 @@ struct DeclInfo {
DeclFucker *fucker34;
TemplateFunction *x38;
UInt8 x3C; // related to template nindex
Boolean x3D;
short x3E;
short operator_token; // when an operator name like "operator +" is scanned, this is the token
short storageclass;
UInt8 section;
UInt8 exportflags;
@@ -54,9 +53,9 @@ struct DeclInfo {
Boolean x49;
Boolean x4A; // objc related
Boolean x4B;
Boolean x4C;
Boolean in_friend_decl; // set to 1 when parsing a 'friend' declaration
Boolean x4D;
Boolean x4E; // is_extern_c?
Boolean is_extern_c;
Boolean x4F;
Boolean x50;
Boolean x51;
@@ -66,10 +65,9 @@ struct DeclInfo {
Boolean x55;
Boolean x56;
Boolean x57;
//FileOffsetInfo fileoffsetinfo;
CPrepFileInfo *file;
CPrepFileInfo *file2;
SInt32 x60; // file offset?
SInt32 sourceoffset;
Boolean x64;
};
@@ -125,7 +123,7 @@ extern void CDecl_CheckCtorIntegrity(FuncArg *args, TypeClass *tclass);
extern void CDecl_MakeVBaseList(TypeClass *tclass);
extern Boolean CDecl_CheckNewBase(TypeClass *tclass, TypeClass *baseclass, Boolean is_virtual);
extern TypeMemberFunc *CDecl_MakeDefaultDtorType(TypeClass *tclass, Boolean is_virtual);
extern void CDecl_CompleteClass(DeclE *decle, TypeClass *tclass);
extern void CDecl_CompleteClass(ClassLayout *layout, TypeClass *tclass);
extern TypeClass *CDecl_DefineClass(NameSpace *nspace, HashNameNode *name, TypeClass *tclass, short mode, Boolean flag2, Boolean flag3);
extern void CDecl_ParseClassDeclSpec(UInt8 *declspec);
extern void CDecl_ParseClass(DeclInfo *declinfo, short mode, Boolean flag1, UInt8 class_declspec);

View File

@@ -85,7 +85,7 @@ extern ENode *argumentpromotion(ENode *expr, Type *type, short qual, Boolean fla
extern ENode *classargument(ENode *expr);
extern ENodeList *CExpr_ScanExpressionList(Boolean is_parens);
extern ENode *CExpr_DoExplicitConversion(Type *type, UInt32 qual, ENodeList *list);
extern ENode *CExpr_MakeNameLookupResultExpr(CScopeParseResult *pr);
extern ENode *CExpr_MakeNameLookupResultExpr(NameResult *pr);
extern SInt32 scansizeof(void);
extern SInt32 scanalignof(void);
extern ENode *getnodeaddress(ENode *expr, Boolean flag);

View File

@@ -20,12 +20,11 @@ struct CScopeSave {
Boolean is_member_func;
}; // assumed name
// this might be called NameResult
typedef struct CScopeParseResult {
typedef struct NameResult {
NameSpace *nspace_0;
HashNameNode *name_4;
Type *x8;
UInt32 xC; // qual
Type *type;
UInt32 qual;
ObjBase *obj_10;
NameSpaceObjectList *nsol_14;
BClassList *bcl_18;
@@ -35,12 +34,12 @@ typedef struct CScopeParseResult {
Boolean x1F;
Boolean x20;
Boolean x21;
} CScopeParseResult;
} NameResult;
typedef struct CScopeNSIterator {
NameSpace *nspace;
NameSpaceLookupList *lookup;
CScopeParseResult *result;
NameResult *result;
} CScopeNSIterator;
typedef struct CScopeObjectIterator {
@@ -75,27 +74,27 @@ extern void CScope_MergeNameSpace(NameSpace *dst, NameSpace *src);
extern void CScope_AddObject(NameSpace *nspace, HashNameNode *name, ObjBase *obj);
extern void CScope_AddGlobalObject(Object *obj);
extern NameSpaceLookupList *CScope_BuildNameSpaceLookupList(NameSpace *nspace);
extern Boolean CScope_FindQualifiedClassMember(CScopeParseResult *result, TypeClass *tclass, HashNameNode *name);
extern Boolean CScope_FindQualifiedClassMember(NameResult *result, TypeClass *tclass, HashNameNode *name);
extern Type *CScope_GetType(NameSpace *nspace, HashNameNode *name, UInt32 *qual);
extern Type *CScope_GetTagType(NameSpace *nspace, HashNameNode *name);
extern Boolean CScope_ParseExprName(CScopeParseResult *result);
extern Boolean CScope_ParseDeclName(CScopeParseResult *result);
extern Boolean CScope_ParseQualifiedNameSpace(CScopeParseResult *result, Boolean flag1, Boolean flag2);
extern Boolean CScope_ParseElaborateName(CScopeParseResult *result);
extern Boolean CScope_FindObject(NameSpace *nspace, CScopeParseResult *result, HashNameNode *name);
extern Boolean CScope_FindNonClassObject(NameSpace *nspace, CScopeParseResult *result, HashNameNode *name);
extern NameSpaceObjectList *CScope_FindObjectList(CScopeParseResult *result, HashNameNode *name);
extern Boolean CScope_ParseExprName(NameResult *result);
extern Boolean CScope_ParseDeclName(NameResult *result);
extern Boolean CScope_ParseQualifiedNameSpace(NameResult *result, Boolean flag1, Boolean flag2);
extern Boolean CScope_ParseElaborateName(NameResult *result);
extern Boolean CScope_FindObject(NameSpace *nspace, NameResult *result, HashNameNode *name);
extern Boolean CScope_FindNonClassObject(NameSpace *nspace, NameResult *result, HashNameNode *name);
extern NameSpaceObjectList *CScope_FindObjectList(NameResult *result, HashNameNode *name);
extern Boolean CScope_PossibleTypeName(HashNameNode *name);
extern Boolean CScope_FindClassMemberObject(TypeClass *tclass, CScopeParseResult *result, HashNameNode *name);
extern Boolean CScope_FindClassMemberObject(TypeClass *tclass, NameResult *result, HashNameNode *name);
extern void CScope_InitObjectIterator(CScopeObjectIterator *iterator, NameSpace *nspace);
extern ObjBase *CScope_NextObjectIteratorObject(CScopeObjectIterator *iterator);
extern NameSpaceObjectList *CScope_NextObjectIteratorObjectList(CScopeObjectIterator *iterator);
extern void CScope_DefineTypeTag(NameSpace *nspace, HashNameNode *name, Type *type);
extern Type *CScope_GetLocalTagType(NameSpace *nspace, HashNameNode *name);
extern Boolean CScope_FindTypeName(NameSpace *nspace, HashNameNode *name, CScopeParseResult *result);
extern Boolean CScope_FindTypeName(NameSpace *nspace, HashNameNode *name, NameResult *result);
extern NameSpaceObjectList *CScope_GetLocalObject(NameSpace *nspace, HashNameNode *name);
extern BClassList *CScope_GetClassAccessPath(BClassList *list, TypeClass *tclass);
extern Boolean CScope_ParseMemberName(TypeClass *tclass, CScopeParseResult *result, Boolean flag);
extern Boolean CScope_ParseMemberName(TypeClass *tclass, NameResult *result, Boolean flag);
extern void CScope_AddClassUsingDeclaration(TypeClass *tclass, TypeClass *tclass2, HashNameNode *name, AccessType access);
extern void CScope_ParseUsingDeclaration(NameSpace *nspace, AccessType access, Boolean flag);
extern void CScope_ParseNameSpaceAlias(HashNameNode *name);

View File

@@ -11,7 +11,7 @@ extern void CTemplClass_RegisterEnumType(TemplClass *tmclass, TypeEnum *enumtype
extern void CTemplClass_RegisterEnumerator(TemplClass *tmclass, ObjEnumConst *objenumconst, ENode *initexpr);
extern void CTemplClass_RegisterObjectInit(TemplClass *tmclass, Object *object, ENode *initexpr);
extern void CTemplClass_RegisterObjectDef(TemplClass *tmclass, ObjBase *refobj);
extern void CTemplClass_CompleteClass(TemplClass *templ, DeclE *de);
extern void CTemplClass_CompleteClass(TemplClass *templ, ClassLayout *de);
extern TemplClassInst *CTemplClass_GetInstance(TemplClass *tmclass, TemplArg *args1, TemplArg *args2);
extern TemplateMember *CTemplClass_DefineMember(TemplClass *tmclass, Object *object, FileOffsetInfo *foi, TokenStream *stream);
extern void CTemplClass_ParsePartialSpecialization(DeclFucker *what_is_this, TemplParam *params, short mode, SInt32 *offset);

View File

@@ -113,11 +113,11 @@ typedef struct Alias Alias;
typedef struct BClassList BClassList;
typedef struct CI_FuncData CI_FuncData;
typedef struct CLabel CLabel;
typedef struct ClassLayout ClassLayout;
typedef struct ClassList ClassList;
typedef struct CompilerLinkerParamBlk CompilerLinkerParamBlk;
typedef struct CPrepFileInfo CPrepFileInfo;
typedef struct CScopeSave CScopeSave;
typedef struct DeclE DeclE;
typedef struct DeclFucker DeclFucker;
typedef struct DeclInfo DeclInfo;
typedef struct DeclThing DeclThing; // rename me please
@@ -176,7 +176,6 @@ typedef struct Statement Statement;
typedef struct StructMember StructMember;
typedef struct SwitchCase SwitchCase;
typedef struct SwitchInfo SwitchInfo;
typedef struct Template Template;
typedef struct TemplateAction TemplateAction;
typedef struct TemplateFriend TemplateFriend;
typedef struct TemplateMember TemplateMember;
@@ -185,7 +184,6 @@ typedef struct TemplClass TemplClass;
typedef struct TemplClassInst TemplClassInst;
typedef struct TemplateFunction TemplateFunction;
typedef struct TemplFuncInstance TemplFuncInstance;
typedef struct TemplInstance TemplInstance;
typedef struct TemplParam TemplParam;
typedef struct TemplPartialSpec TemplPartialSpec;
typedef struct TemplStack TemplStack;
@@ -252,13 +250,13 @@ enum {
Q_BYCOPY = 0x2000,
Q_BYREF = 0x4000,
Q_ONEWAY = 0x8000,
Q_10000 = 0x10000,
Q_INLINE_DATA = 0x10000, // this object contains constant data in its union
Q_20000 = 0x20000,
Q_OVERLOAD = 0x40000, // weak
Q_80000 = 0x80000,
Q_100000 = 0x100000, // Objective-C ID
Q_WEAK = 0x40000, // weak
Q_MANGLE_NAME = 0x80000, // adds C++ mangling info to a name
Q_IS_OBJC_ID = 0x100000, // Objective-C ID
Q_RESTRICT = 0x200000,
Q_400000 = 0x400000, // is templated from another object?
Q_IS_TEMPLATED = 0x400000, // is templated from another object?
Q_1000000 = 0x1000000,
Q_ALIGNED_1 = 0x2000000,
Q_ALIGNED_2 = 0x4000000,

View File

@@ -188,14 +188,14 @@ struct ObjectTemplated {
};
enum {
OBJECT_FLAGS_1 = 1,
OBJECT_FLAGS_2 = 2,
OBJECT_FLAGS_4 = 4,
OBJECT_FLAGS_8 = 8,
OBJECT_FLAGS_10 = 0x10, // internal
OBJECT_FLAGS_20 = 0x20, // import
OBJECT_FLAGS_40 = 0x40, // export
OBJECT_FLAGS_60 = 0x60 // lib export
OBJECT_USED = 1,
OBJECT_FLAGS_2 = 2, // this object has been used in certain contexts (figure me out?)
OBJECT_DEFINED = 4,
OBJECT_LAZY = 8, // this object will be created by a CParser callback action only if referenced
OBJECT_INTERNAL = 0x10,
OBJECT_IMPORT = 0x20,
OBJECT_EXPORT = 0x40,
OBJECT_LIB_EXPORT = 0x60
};
#define OBJ_BASE(obj) ((ObjBase *) (obj))
@@ -209,7 +209,7 @@ enum {
#define OBJECT_TEMPL(obj) ((ObjectTemplated *) (obj))
struct VarInfo { // OK!
struct VarInfo {
Object *func;
SInt32 usage;
TStreamElement deftoken;

View File

@@ -9,7 +9,7 @@
#pragma options align=mac68k
#endif
struct PackedDeclInfo { // ok
struct PackedDeclInfo {
Type *thetype;
UInt32 qual;
NameSpace *nspace;
@@ -21,20 +21,13 @@ struct PackedDeclInfo { // ok
Boolean has_expltargs;
};
struct Template {
Template *parent;
TemplInstance *parentinst;
TemplParam *params;
Boolean is_class;
};
struct TemplateFriend { // verified via CPrec
struct TemplateFriend {
PackedDeclInfo decl;
FileOffsetInfo fileoffset;
TokenStream stream;
};
struct TemplateMember { // verified via CPrec
struct TemplateMember {
struct TemplateMember *next;
TemplParam *params;
Object *object;
@@ -45,17 +38,7 @@ struct TemplateMember { // verified via CPrec
SInt32 endoffset;
};
struct TemplInstance {
// Template *templ;
TemplInstance *parent;
TemplArg *args;
Boolean is_instantiated;
Boolean is_specialized;
Boolean is_extern;
Boolean static_instantiated;
};
struct TemplParam { // verified via CPrec
struct TemplParam {
TemplParam *next;
HashNameNode *name;
TemplParamID pid;
@@ -76,7 +59,7 @@ struct TemplParam { // verified via CPrec
} data;
};
struct TemplArg { // verified by CPrec
struct TemplArg {
TemplArg *next;
TemplParamID pid;
union {
@@ -123,7 +106,7 @@ struct TypeDeduce {
Boolean x19;
};
struct TemplPartialSpec { // confirmed via CPrec (but templ might be a different type?)
struct TemplPartialSpec {
TemplPartialSpec *next;
TemplClass *templ;
TemplArg *args;
@@ -146,47 +129,48 @@ struct TemplStack {
struct TemplClass {
TypeClass theclass;
TemplClass *next;
TemplClass *templ_parent; // confirmed by v8
TemplClassInst *inst_parent; // confirmed by v8
TemplClass *templ_parent;
TemplClassInst *inst_parent;
TemplParam *templ__params;
TemplateMember *members;
TemplClassInst *instances;
TemplClass *pspec_owner;
TemplPartialSpec *pspecs;
TemplateAction *actions;
UInt16 lex_order_count; // confirmed by v8
UInt16 lex_order_count;
SInt8 align;
UInt8 flags;
};
// TemplClass::flags
enum {
TEMPLCLASS_FLAGS_1 = 1,
TEMPLCLASS_HAS_VTABLE = 1,
TEMPLCLASS_FLAGS_2 = 2
};
struct TemplClassInst {
TypeClass theclass;
TemplClassInst *next; // confirmed by v8
TemplClassInst *parent; // confirmed by v8
TemplClassInst *next;
TemplClassInst *parent;
TemplClass *templ;
TemplArg *inst_args;
TemplArg *oargs;
Boolean is_instantiated;
Boolean is_specialized;
Boolean is_extern;
Boolean x49;
Boolean static_instantiated;
};
#define TEMPL_CLASS(ty) ( (TemplClass *) (ty) )
#define TEMPL_CLASS_INST(ty) ( (TemplClassInst *) (ty) )
#define IS_TEMPL_CLASS(ty) ( IS_TYPE_CLASS(ty) && (TYPE_CLASS(ty)->flags & CLASS_FLAGS_100) )
#define IS_TEMPL_CLASS_INST(ty) ( IS_TYPE_CLASS(ty) && (TYPE_CLASS(ty)->flags & CLASS_FLAGS_800) )
#define IS_TEMPL_CLASS(ty) ( IS_TYPE_CLASS(ty) && (TYPE_CLASS(ty)->flags & CLASS_IS_TEMPL) )
#define IS_TEMPL_CLASS_INST(ty) ( IS_TYPE_CLASS(ty) && (TYPE_CLASS(ty)->flags & CLASS_IS_TEMPL_INST) )
/*************/
/* Functions */
/*************/
struct TemplateFunction { // verified via CPrec
struct TemplateFunction {
TemplateFunction *next;
TemplateFunction *unk4; // parent?
HashNameNode *name;
@@ -200,19 +184,18 @@ struct TemplateFunction { // verified via CPrec
SInt32 endoffset;
};
struct TemplFuncInstance { // verified via CPrec
struct TemplFuncInstance {
TemplFuncInstance *next;
Object *object;
TemplArg *args;
Boolean is_instantiated;
Boolean is_specialized;
Boolean is_extern;
Boolean static_instantiated;
};
#define TEMPL_FUNC(ty) ( (TemplateFunction *) (ty) )
#define TEMPL_FUNC_INST(ty) ( (TemplFuncInstance *) (ty) )
#define IS_TEMPL_FUNC(ty) ( IS_TYPE_FUNC(ty) && (TYPE_FUNC(ty)->flags & FUNC_FLAGS_100000) )
#define IS_TEMPL_FUNC(ty) ( IS_TYPE_FUNC(ty) && (TYPE_FUNC(ty)->flags & FUNC_IS_TEMPL) )
/***********/
/* Actions */
@@ -230,7 +213,7 @@ typedef enum TemplateActionType {
TAT_ILLEGAL
} TemplateActionType;
struct TemplateAction { // verified via CPrec
struct TemplateAction {
TemplateAction *next;
TStreamElement source_ref;
union {

View File

@@ -70,7 +70,7 @@ struct TypeIntegral {
};
struct TypeEnum { // checked via CPrec
struct TypeEnum {
TypeType type;
SInt32 size;
NameSpace *nspace;
@@ -115,7 +115,7 @@ enum {
};
struct ClassList { // checked via CPrec
struct ClassList {
ClassList *next;
TypeClass *base;
SInt32 offset;
@@ -124,16 +124,15 @@ struct ClassList { // checked via CPrec
Boolean is_virtual;
};
struct VClassList { // checked via CPrec
struct VClassList {
VClassList *next;
TypeClass *base;
SInt32 offset; // offset within the class instance
SInt32 voffset; // offset within the vtable
Boolean has_override;
char alignsave;
};
typedef struct ClassFriend { // checked via CPrec
typedef struct ClassFriend {
struct ClassFriend *next;
union {
TypeClass *theclass;
@@ -142,12 +141,12 @@ typedef struct ClassFriend { // checked via CPrec
Boolean isclass;
} ClassFriend;
struct BClassList { // checked via CPrec
struct BClassList {
struct BClassList *next;
Type *type;
};
typedef struct VTable { // checked via CPrec
typedef struct VTable {
Object *object;
TypeClass *owner;
SInt32 offset;
@@ -174,25 +173,23 @@ struct TypeClass {
};
typedef enum {
CLASS_MODE_0 = 0, // struct
CLASS_MODE_1 = 1, // union
CLASS_MODE_2 = 2 // class
CLASS_MODE_STRUCT = 0,
CLASS_MODE_UNION = 1,
CLASS_MODE_CLASS = 2
} ClassMode;
enum {
CLASS_FLAGS_1 = 1,
CLASS_FLAGS_2 = 2, // completed class?
CLASS_FLAGS_ABSTRACT = 8,
CLASS_FLAGS_10 = 0x10,
CLASS_FLAGS_20 = 0x20,
CLASS_FLAGS_40 = 0x40,
CLASS_FLAGS_80 = 0x80,
CLASS_FLAGS_100 = 0x100, // is TemplClass
CLASS_FLAGS_800 = 0x800, // is TemplClassInst
CLASS_FLAGS_900 = 0x900,
CLASS_FLAGS_1000 = 0x1000, // is empty class
CLASS_FLAGS_2000 = 0x2000,
CLASS_FLAGS_4000 = 0x4000,
CLASS_HANDLEOBJECT = 1, // class is a HandleObject
CLASS_COMPLETED = 2, // completed class?
CLASS_ABSTRACT = 8,
CLASS_SINGLE_OBJECT = 0x10, // inherits from SingleObject/SingleInheritance
CLASS_HAS_VBASES = 0x20,
CLASS_IS_CONVERTIBLE = 0x40, // defines at least one conversion function
CLASS_IS_TEMPL = 0x100, // is TemplClass
CLASS_IS_TEMPL_INST = 0x800, // is TemplClassInst
CLASS_IS_TEMPL_ANY = CLASS_IS_TEMPL | CLASS_IS_TEMPL_INST,
CLASS_EMPTY = 0x1000, // is 0 bytes (forced to 1 byte for ABI reasons)
CLASS_COM_OBJECT = 0x2000, // inherits from __comobject
CLASS_FLAGS_8000 = 0x8000
};
@@ -225,7 +222,6 @@ struct FuncArg { // ok
UInt32 qual;
SInt16 sclass;
Boolean is_array;
Boolean has_defdefarg;
};
struct TypeFunc {
@@ -237,37 +233,37 @@ struct TypeFunc {
UInt32 qual;
UInt32 flags;
};
// TypeFunc::flags
enum {
FUNC_FLAGS_PASCAL = 1, // on TypeFunc::flags
FUNC_FLAGS_2 = 2, // member function that has an inline definition?
FUNC_PASCAL = 1,
FUNC_DEFINED = 2, // does the function have a body?
FUNC_FLAGS_4 = 4,
FUNC_FLAGS_8 = 8, // abstract
FUNC_FLAGS_METHOD = 0x10,
FUNC_PURE = 8, // abstract
FUNC_METHOD = 0x10,
FUNC_FLAGS_20 = 0x20,
FUNC_FLAGS_40 = 0x40, // func that's like "operator SomeOtherType()"
FUNC_CONVERSION = 0x40, // func that's like "operator SomeOtherType()"
FUNC_FLAGS_80 = 0x80,
FUNC_FLAGS_100 = 0x100,
FUNC_FLAGS_200 = 0x200, // intrinsic?
FUNC_FLAGS_NOTHROW = 0x400,
FUNC_AUTO_GENERATED = 0x100, // an auto-generated ctor, dtor or assignment operator
FUNC_INTRINSIC = 0x200,
FUNC_NOTHROW = 0x400,
FUNC_FLAGS_800 = 0x800, // autoinlined?
FUNC_FLAGS_1000 = 0x1000, // is ctor
FUNC_FLAGS_2000 = 0x2000, // is dtor
FUNC_FLAGS_4000 = 0x4000, // objc method?
FUNC_FLAGS_CONST = 0x8000,
FUNC_FLAGS_VOLATILE = 0x10000,
FUNC_FLAGS_CV = FUNC_FLAGS_CONST | FUNC_FLAGS_VOLATILE,
FUNC_FLAGS_100000 = 0x100000, // is template?
FUNC_IS_CTOR = 0x1000, // is ctor
FUNC_IS_DTOR = 0x2000, // is dtor
FUNC_OBJC_METHOD = 0x4000,
FUNC_CONST = 0x8000,
FUNC_VOLATILE = 0x10000,
FUNC_FLAGS_CV = FUNC_CONST | FUNC_VOLATILE,
FUNC_IS_TEMPL = 0x100000, // the definition of a template
FUNC_FLAGS_200000 = 0x200000,
FUNC_FLAGS_400000 = 0x400000, // covariant?
FUNC_FLAGS_800000 = 0x800000,
FUNC_FLAGS_900000 = 0x900000,
FUNC_IS_TEMPL_INSTANCE = 0x800000, // a concrete instance of a template
FUNC_IS_TEMPL_ANY = FUNC_IS_TEMPL | FUNC_IS_TEMPL_INSTANCE,
FUNC_FLAGS_4000000 = 0x4000000,
FUNC_FLAGS_10000000 = 0x10000000,
FUNC_FLAGS_F0000000 = 0xF0000000
FUNC_CALL_CONV_MASK = 0xF0000000 | FUNC_PASCAL
};
// This is actually called TypeMemberFunc...
// There seems to be a version of this which adds a class pointer at the end
struct TypeMemberFunc {
TypeType type;
SInt32 size;
@@ -277,9 +273,9 @@ struct TypeMemberFunc {
UInt32 qual;
UInt32 flags;
TypeClass *theclass;
SInt32 x1E; // vtable offset?
SInt32 x22; // browser index?
Boolean x26; // is static
SInt32 vtbl_index; // index of this method within the vtable
SInt32 funcid; // ID used for tracking this method within browse data
Boolean is_static; // is static
};
@@ -287,24 +283,18 @@ struct TypeBitfield {
TypeType type;
SInt32 size;
Type *bitfieldtype;
char unkA; // offset in bits
char unkB; // size in bits
char offset; // offset in bits
char bitlength; // size in bits
};
// Label
typedef enum TypeTemplDepType {
TEMPLDEP_ARGUMENT,
TEMPLDEP_QUALNAME,
TEMPLDEP_TEMPLATE,
TEMPLDEP_ARRAY,
TEMPLDEP_QUALTEMPL,
TEMPLDEP_BITFIELD,
TEMPLDEP_VALUEDEP, // not in v7?
TEMPLDEP_ENUMVAL, // not in v7?
TEMPLDEP_TYPEOF // not in v7?
TEMPLDEP_BITFIELD
} TypeTemplDepType;
struct TypeTemplDep {
@@ -333,13 +323,6 @@ struct TypeTemplDep {
Type *type;
ENode *size;
} bitfield;
// the following ones may not be in v7
Type *vdep;
ENode *tof;
struct {
TypeEnum *etype;
ENode *expr;
} enumval;
} u;
};
@@ -362,7 +345,7 @@ struct TypePointer {
};
/// Always has Q_100000 set
/// Always has Q_IS_OBJC_ID set
struct TypeObjCID {
TypePointer pointer;
ObjCProtocolList *protocols;
@@ -403,13 +386,13 @@ struct TypeList {
#define IS_TYPE_SOM_CLASS(ty) ( (ty)->type == TYPECLASS && TYPE_CLASS((ty))->sominfo )
#define IS_TYPE_OBJC_CLASS(ty) ( (ty)->type == TYPECLASS && TYPE_CLASS((ty))->objcinfo )
#define IS_TYPE_FUNC(ty) ( (ty)->type == TYPEFUNC )
#define IS_TYPEFUNC_METHOD(ty) ( (ty)->flags & FUNC_FLAGS_METHOD )
#define IS_TYPEFUNC_METHOD(ty) ( (ty)->flags & FUNC_METHOD )
#define IS_TYPE_METHOD(ty) ( IS_TYPE_FUNC(ty) && IS_TYPEFUNC_METHOD(TYPE_FUNC(ty)) )
#define IS_TYPE_NONMETHOD(ty) ( IS_TYPE_FUNC(ty) && !IS_TYPEFUNC_METHOD(TYPE_FUNC(ty)) )
#define IS_TYPE_NONSTATIC_METHOD(ty) ( IS_TYPE_FUNC(ty) && IS_TYPEFUNC_METHOD(TYPE_FUNC(ty)) && !TYPE_METHOD(ty)->x26 )
#define IS_TYPE_STATIC_METHOD(ty) ( IS_TYPE_FUNC(ty) && IS_TYPEFUNC_METHOD(TYPE_FUNC(ty)) && TYPE_METHOD(ty)->x26 )
#define IS_TYPEFUNC_NONSTATIC_METHOD(ty) ( IS_TYPEFUNC_METHOD(ty) && !TYPE_METHOD(ty)->x26 )
#define IS_TYPEFUNC_STATIC_METHOD(ty) ( IS_TYPEFUNC_METHOD(ty) && TYPE_METHOD(ty)->x26 )
#define IS_TYPE_NONSTATIC_METHOD(ty) ( IS_TYPE_FUNC(ty) && IS_TYPEFUNC_METHOD(TYPE_FUNC(ty)) && !TYPE_METHOD(ty)->is_static )
#define IS_TYPE_STATIC_METHOD(ty) ( IS_TYPE_FUNC(ty) && IS_TYPEFUNC_METHOD(TYPE_FUNC(ty)) && TYPE_METHOD(ty)->is_static )
#define IS_TYPEFUNC_NONSTATIC_METHOD(ty) ( IS_TYPEFUNC_METHOD(ty) && !TYPE_METHOD(ty)->is_static )
#define IS_TYPEFUNC_STATIC_METHOD(ty) ( IS_TYPEFUNC_METHOD(ty) && TYPE_METHOD(ty)->is_static )
#define IS_TYPE_TEMPLATE(ty) ( (ty)->type == TYPETEMPLATE )
#define IS_TYPE_POINTER(ty) ( (ty)->type == TYPEPOINTER || (ty)->type == TYPEARRAY )
#define IS_TYPE_POINTER_ONLY(ty) ( (ty)->type == TYPEPOINTER )