Fix readonly native structs

This commit is contained in:
Ricardo Luís Vaz Silva 2024-02-16 18:43:23 -03:00 committed by Christoph Oelckers
parent d8ef27e0ed
commit bc26c54b15
2 changed files with 17 additions and 5 deletions

View file

@ -1940,6 +1940,12 @@ FxExpression *FxTypeCast::Resolve(FCompileContext &ctx)
{
bool writable;
basex->RequestAddress(ctx, &writable);
if(!writable && !ValueType->toPointer()->IsConst && ctx.Version >= MakeVersion(4, 12))
{
ScriptPosition.Message(MSG_ERROR, "Trying to assign readonly value to writable type.");
}
basex->ValueType = ValueType;
auto x = basex;
basex = nullptr;
@ -8739,6 +8745,12 @@ FxExpression *FxMemberFunctionCall::Resolve(FCompileContext& ctx)
if (Self->ValueType->isRealPointer())
{
auto pointedType = Self->ValueType->toPointer()->PointedType;
if(pointedType && pointedType->isStruct() && Self->ValueType->toPointer()->IsConst && ctx.Version >= MakeVersion(4, 12))
{
isreadonly = true;
}
if (pointedType && (pointedType->isDynArray() || pointedType->isMap() || pointedType->isMapIterator()))
{
Self = new FxOutVarDereference(Self, Self->ScriptPosition);
@ -9268,7 +9280,7 @@ FxExpression *FxMemberFunctionCall::Resolve(FCompileContext& ctx)
return nullptr;
}
}
else if (Self->ValueType->isStruct())
else if (Self->ValueType->isStruct() && !isreadonly)
{
bool writable;

View file

@ -583,10 +583,10 @@ struct State native
native readonly bool bCanRaise;
native readonly bool bDehacked;
native int DistanceTo(state other);
native bool ValidateSpriteFrame();
native TextureID, bool, Vector2 GetSpriteTexture(int rotation, int skin = 0, Vector2 scale = (0,0), int spritenum = -1, int framenum = -1);
native bool InStateSequence(State base);
native int DistanceTo(state other) const;
native bool ValidateSpriteFrame() const;
native TextureID, bool, Vector2 GetSpriteTexture(int rotation, int skin = 0, Vector2 scale = (0,0), int spritenum = -1, int framenum = -1) const;
native bool InStateSequence(State base) const;
}
struct TerrainDef native