mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-20 16:15:43 +00:00
ZoneCodeGenerator: Make setting a dynamic array size only possible if the targeted member is the last entry of its structure
This commit is contained in:
parent
57ef79692a
commit
ec8c00a4b9
@ -26,13 +26,12 @@ namespace ZoneCodeGenerator.Parsing.CommandFile.Tests
|
|||||||
|
|
||||||
public TestArraySize() : base(matchers)
|
public TestArraySize() : base(matchers)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void ProcessMatch(ICommandParserState state)
|
protected override void ProcessMatch(ICommandParserState state)
|
||||||
{
|
{
|
||||||
var typeName = NextMatch(TypeNameToken);
|
var typeName = NextMatch(TypeNameToken);
|
||||||
var typeNameParts = typeName.Split(new[] { "::" }, StringSplitOptions.None);
|
var typeNameParts = typeName.Split(new[] {"::"}, StringSplitOptions.None);
|
||||||
if (state.DataTypeInUse != null
|
if (state.DataTypeInUse != null
|
||||||
&& state.GetMembersFromParts(typeNameParts, state.DataTypeInUse, out var typeMembers))
|
&& state.GetMembersFromParts(typeNameParts, state.DataTypeInUse, out var typeMembers))
|
||||||
{
|
{
|
||||||
@ -62,6 +61,13 @@ namespace ZoneCodeGenerator.Parsing.CommandFile.Tests
|
|||||||
var reference = referencedMember.Member.VariableType.References.OfType<ReferenceTypeArray>()
|
var reference = referencedMember.Member.VariableType.References.OfType<ReferenceTypeArray>()
|
||||||
.FirstOrDefault();
|
.FirstOrDefault();
|
||||||
|
|
||||||
|
if (!referencedMember.Parent.IsUnion &&
|
||||||
|
referencedMember.Parent.Type.Members.Last() != referencedMember.Member)
|
||||||
|
{
|
||||||
|
throw new TestFailedException(
|
||||||
|
"Cannot change the array size of a member that is not the last member of its structure.");
|
||||||
|
}
|
||||||
|
|
||||||
if (reference != null)
|
if (reference != null)
|
||||||
reference.DynamicSize = evaluation;
|
reference.DynamicSize = evaluation;
|
||||||
else
|
else
|
||||||
@ -74,10 +80,10 @@ namespace ZoneCodeGenerator.Parsing.CommandFile.Tests
|
|||||||
if (state.DataTypeInUse != null
|
if (state.DataTypeInUse != null
|
||||||
&& state.DataTypeInUse != referencedType)
|
&& state.DataTypeInUse != referencedType)
|
||||||
{
|
{
|
||||||
return new[] { state.DataTypeInUse, referencedType };
|
return new[] {state.DataTypeInUse, referencedType};
|
||||||
}
|
}
|
||||||
|
|
||||||
return new[] { referencedType };
|
return new[] {referencedType};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user