From ec8c00a4b99f011bf55d148648f22c67e1f215bd Mon Sep 17 00:00:00 2001 From: Jan Date: Sun, 22 Dec 2019 16:15:45 +0100 Subject: [PATCH] ZoneCodeGenerator: Make setting a dynamic array size only possible if the targeted member is the last entry of its structure --- .../Parsing/CommandFile/Tests/TestArraySize.cs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/ZoneCodeGenerator/Parsing/CommandFile/Tests/TestArraySize.cs b/src/ZoneCodeGenerator/Parsing/CommandFile/Tests/TestArraySize.cs index 16b03dcc..dd5f677e 100644 --- a/src/ZoneCodeGenerator/Parsing/CommandFile/Tests/TestArraySize.cs +++ b/src/ZoneCodeGenerator/Parsing/CommandFile/Tests/TestArraySize.cs @@ -26,13 +26,12 @@ namespace ZoneCodeGenerator.Parsing.CommandFile.Tests public TestArraySize() : base(matchers) { - } protected override void ProcessMatch(ICommandParserState state) { var typeName = NextMatch(TypeNameToken); - var typeNameParts = typeName.Split(new[] { "::" }, StringSplitOptions.None); + var typeNameParts = typeName.Split(new[] {"::"}, StringSplitOptions.None); if (state.DataTypeInUse != null && state.GetMembersFromParts(typeNameParts, state.DataTypeInUse, out var typeMembers)) { @@ -62,6 +61,13 @@ namespace ZoneCodeGenerator.Parsing.CommandFile.Tests var reference = referencedMember.Member.VariableType.References.OfType() .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) reference.DynamicSize = evaluation; else @@ -74,10 +80,10 @@ namespace ZoneCodeGenerator.Parsing.CommandFile.Tests if (state.DataTypeInUse != null && state.DataTypeInUse != referencedType) { - return new[] { state.DataTypeInUse, referencedType }; + return new[] {state.DataTypeInUse, referencedType}; } - return new[] { referencedType }; + return new[] {referencedType}; } } } \ No newline at end of file