Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 132055 | Differences between
and this patch

Collapse All | Expand All

(-)source/vclass.h (+1 lines)
Lines 375-380 Link Here
375
	VClass*			ParentClass;
375
	VClass*			ParentClass;
376
376
377
	vint32			ClassSize;
377
	vint32			ClassSize;
378
	vint32			ClassUnalignedSize;
378
	vuint32			ClassFlags;
379
	vuint32			ClassFlags;
379
	VMethod**		ClassVTable;
380
	VMethod**		ClassVTable;
380
	void			(*ClassConstructor)();
381
	void			(*ClassConstructor)();
(-)source/vclass.cpp (-3 / +34 lines)
Lines 27-32 Link Here
27
#include "progdefs.h"
27
#include "progdefs.h"
28
#include "network.h"
28
#include "network.h"
29
29
30
class DummyClass1 : public VVirtualObjectBase
31
{
32
public:
33
	void*		Pointer;
34
	vuint8		Byte1;
35
	virtual void Dummy() = 0;
36
};
37
38
class DummyClass2 : public DummyClass1
39
{
40
public:
41
	vuint8		Byte2;
42
};
43
30
bool					VMemberBase::GObjInitialised;
44
bool					VMemberBase::GObjInitialised;
31
VClass*					VMemberBase::GClasses;
45
VClass*					VMemberBase::GClasses;
32
TArray<VMemberBase*>	VMemberBase::GMembers;
46
TArray<VMemberBase*>	VMemberBase::GMembers;
Lines 2353-2358 Link Here
2353
, LinkNext(0)
2367
, LinkNext(0)
2354
, ParentClass(0)
2368
, ParentClass(0)
2355
, ClassSize(0)
2369
, ClassSize(0)
2370
, ClassUnalignedSize(0)
2356
, ClassFlags(0)
2371
, ClassFlags(0)
2357
, ClassVTable(0)
2372
, ClassVTable(0)
2358
, ClassConstructor(0)
2373
, ClassConstructor(0)
Lines 2388-2393 Link Here
2388
, LinkNext(0)
2403
, LinkNext(0)
2389
, ParentClass(AParent)
2404
, ParentClass(AParent)
2390
, ClassSize(ASize)
2405
, ClassSize(ASize)
2406
, ClassUnalignedSize(ASize)
2391
, ClassFlags(AClassFlags)
2407
, ClassFlags(AClassFlags)
2392
, ClassVTable(0)
2408
, ClassVTable(0)
2393
, ClassConstructor(ACtor)
2409
, ClassConstructor(ACtor)
Lines 2477-2482 Link Here
2477
		delete[] Defaults;
2493
		delete[] Defaults;
2478
		Defaults = NULL;
2494
		Defaults = NULL;
2479
	}
2495
	}
2496
	StatesLookup.Clear();
2497
	RepInfos.Clear();
2480
	unguard;
2498
	unguard;
2481
}
2499
}
2482
2500
Lines 2849-2858 Link Here
2849
		return;
2867
		return;
2850
	}
2868
	}
2851
2869
2852
	int PrevSize = ClassSize;
2853
	int size = ParentClass ? ParentClass->ClassSize : 0;
2854
	int numMethods = ParentClass ? ParentClass->ClassNumMethods : 0;
2870
	int numMethods = ParentClass ? ParentClass->ClassNumMethods : 0;
2855
	VField* PrevField = NULL;
2856
	for (int i = 0; i < GMembers.Num(); i++)
2871
	for (int i = 0; i < GMembers.Num(); i++)
2857
	{
2872
	{
2858
		if (GMembers[i]->MemberType != MEMBER_Method ||
2873
		if (GMembers[i]->MemberType != MEMBER_Method ||
Lines 2877-2882 Link Here
2877
		}
2892
		}
2878
		M->VTableIndex = MOfs;
2893
		M->VTableIndex = MOfs;
2879
	}
2894
	}
2895
2896
	VField* PrevField = NULL;
2897
	int PrevSize = ClassSize;
2898
	int size = 0;
2899
	if (ParentClass)
2900
	{
2901
		//	GCC has a strange behavior of starting to add fields in subclasses
2902
		// in a class that has virtual methods on unaligned parent size offset.
2903
		// In other cases and in other compilers it starts on aligned parent
2904
		// class size offset.
2905
		if (sizeof(DummyClass1) == sizeof(DummyClass2))
2906
			size = ParentClass->ClassUnalignedSize;
2907
		else
2908
			size = ParentClass->ClassSize;
2909
	}
2880
	for (VField* fi = Fields; fi; fi = fi->Next)
2910
	for (VField* fi = Fields; fi; fi = fi->Next)
2881
	{
2911
	{
2882
		if (fi->Type.Type == ev_bool && PrevField &&
2912
		if (fi->Type.Type == ev_bool && PrevField &&
Lines 2904-2909 Link Here
2904
		}
2934
		}
2905
		PrevField = fi;
2935
		PrevField = fi;
2906
	}
2936
	}
2937
	ClassUnalignedSize = size;
2907
	size = (size + sizeof(void*) - 1) & ~(sizeof(void*) - 1);
2938
	size = (size + sizeof(void*) - 1) & ~(sizeof(void*) - 1);
2908
	ClassSize = size;
2939
	ClassSize = size;
2909
	ClassNumMethods = numMethods;
2940
	ClassNumMethods = numMethods;

Return to bug 132055