- 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:
parent
3f1673f34f
commit
808188ff18
3 changed files with 145 additions and 36 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue