diff --git a/src/Generator/Passes/GenerateAbstractImplementationsPass.cs b/src/Generator/Passes/GenerateAbstractImplementationsPass.cs index beec86ae..3a614eff 100644 --- a/src/Generator/Passes/GenerateAbstractImplementationsPass.cs +++ b/src/Generator/Passes/GenerateAbstractImplementationsPass.cs @@ -12,13 +12,16 @@ namespace CppSharp.Passes /// public class GenerateAbstractImplementationsPass : TranslationUnitPass { - private readonly List classes = new List(); + /// + /// Collects all internal implementations in a unit to be added at the end because the unit cannot be changed while it's being iterated though. + /// + private readonly List internalImpls = new List(); public override bool VisitTranslationUnit(TranslationUnit unit) { bool result = base.VisitTranslationUnit(unit); - unit.Classes.AddRange(classes); - classes.Clear(); + unit.Classes.AddRange(internalImpls); + internalImpls.Clear(); return result; } @@ -31,7 +34,7 @@ namespace CppSharp.Passes return false; if (@class.IsAbstract) - @classes.Add(AddInternalImplementation(@class)); + internalImpls.Add(AddInternalImplementation(@class)); return base.VisitClassDecl(@class); }