From c1339765b7507615b74a17a970ac0475c678aa9c Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Thu, 23 Jan 2025 21:32:09 +0100 Subject: [PATCH] Fix parsing nested template types in scripting type inheritance --- .../Bindings/BindingsGenerator.Parsing.cs | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Parsing.cs b/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Parsing.cs index 98675bf6f..b7ab7cb9b 100644 --- a/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Parsing.cs +++ b/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Parsing.cs @@ -552,15 +552,35 @@ namespace Flax.Build.Bindings if (token.Type == TokenType.LeftAngleBracket) { inheritType.GenericArgs = new List(); - while (true) + var argStack = new Stack(); + argStack.Push(inheritType); + TypeInfo lastArg = null; + while (argStack.Count > 0) { token = context.Tokenizer.NextToken(); if (token.Type == TokenType.RightAngleBracket) - break; + { + // Go up + argStack.Pop(); + lastArg = argStack.Peek(); + continue; + } if (token.Type == TokenType.Comma) continue; if (token.Type == TokenType.Identifier) - inheritType.GenericArgs.Add(new TypeInfo { Type = token.Value }); + { + var arg = new TypeInfo { Type = token.Value }; + var parent = argStack.Peek(); + if (parent.GenericArgs == null) + parent.GenericArgs = new List(); + parent.GenericArgs.Add(arg); + lastArg = arg; + } + else if (token.Type == TokenType.LeftAngleBracket) + { + // Go down + argStack.Push(lastArg); + } else throw new ParseException(ref context, "Incorrect inheritance"); }