- added handling for structs. When defined inside classes or other structs the double member access will be merged, so there is no performance hit by using structs to group data.

This commit is contained in:
Christoph Oelckers 2016-10-24 13:18:13 +02:00
commit 808188ff18
3 changed files with 145 additions and 36 deletions

View file

@ -237,6 +237,7 @@ enum EFxType
EFX_FRandom,
EFX_Random2,
EFX_ClassMember,
EFX_StructMember,
EFX_LocalVariable,
EFX_Self,
EFX_ArrayElement,
@ -1037,20 +1038,35 @@ public:
//
//==========================================================================
class FxClassMember : public FxExpression
class FxStructMember : public FxExpression
{
public:
FxExpression *classx;
PField *membervar;
bool AddressRequested;
bool AddressWritable;
FxClassMember(FxExpression*, PField*, const FScriptPosition&);
~FxClassMember();
FxStructMember(FxExpression*, PField*, const FScriptPosition&);
~FxStructMember();
FxExpression *Resolve(FCompileContext&);
bool RequestAddress(bool *writable);
ExpEmit Emit(VMFunctionBuilder *build);
};
//==========================================================================
//
// FxClassMember
//
//==========================================================================
class FxClassMember : public FxStructMember
{
public:
FxClassMember(FxExpression*, PField*, const FScriptPosition&);
FxExpression *Resolve(FCompileContext&);
};
//==========================================================================
//
// FxLocalVariable