diff --git a/src/AST/Declaration.cs b/src/AST/Declaration.cs index 88dd014e..d640f694 100644 --- a/src/AST/Declaration.cs +++ b/src/AST/Declaration.cs @@ -128,7 +128,6 @@ namespace CppSharp.AST return getName(this); var namespaces = GatherNamespaces(getNamespace(this)); - namespaces.Reverse(); var names = namespaces.Select(getName).ToList(); names.Add(getName(this)); @@ -137,14 +136,14 @@ namespace CppSharp.AST return string.Join(QualifiedNameSeparator, names); } - public static List GatherNamespaces(DeclarationContext @namespace) + private static IEnumerable GatherNamespaces(DeclarationContext @namespace) { - var namespaces = new List(); + var namespaces = new Stack(); var currentNamespace = @namespace; while (currentNamespace != null) { - namespaces.Add(currentNamespace); + namespaces.Push(currentNamespace); currentNamespace = currentNamespace.Namespace; } diff --git a/src/AST/Namespace.cs b/src/AST/Namespace.cs index ee1cc838..20c90123 100644 --- a/src/AST/Namespace.cs +++ b/src/AST/Namespace.cs @@ -88,18 +88,17 @@ namespace CppSharp.AST public IEnumerable GatherParentNamespaces() { - var children = new List(); + var children = new Stack(); var currentNamespace = this; while (currentNamespace != null) { if (!(currentNamespace is TranslationUnit)) - children.Add(currentNamespace); + children.Push(currentNamespace); currentNamespace = currentNamespace.Namespace; } - children.Reverse(); return children; } diff --git a/src/Generator/Generators/CSharp/CSharpTypePrinter.cs b/src/Generator/Generators/CSharp/CSharpTypePrinter.cs index 4682f2e8..0a47e97f 100644 --- a/src/Generator/Generators/CSharp/CSharpTypePrinter.cs +++ b/src/Generator/Generators/CSharp/CSharpTypePrinter.cs @@ -668,7 +668,7 @@ namespace CppSharp.Generators.CSharp public string GetNestedQualifiedName(Declaration decl) { - var names = new List(); + var names = new Stack(); Declaration ctx; var specialization = decl as ClassTemplateSpecialization; @@ -678,36 +678,36 @@ namespace CppSharp.Generators.CSharp if (specialization.OriginalNamespace is Class && !(specialization.OriginalNamespace is ClassTemplateSpecialization)) { - names.Add(string.Format("{0}_{1}", decl.OriginalNamespace.Name, decl.Name)); + names.Push(string.Format("{0}_{1}", decl.OriginalNamespace.Name, decl.Name)); ctx = ctx.Namespace ?? ctx; } else { - names.Add(decl.Name); + names.Push(decl.Name); } } else { - names.Add(decl.Name); + names.Push(decl.Name); ctx = decl.Namespace; } if (decl is Variable && !(decl.Namespace is Class)) - names.Add(decl.TranslationUnit.FileNameWithoutExtension); + names.Push(decl.TranslationUnit.FileNameWithoutExtension); while (!(ctx is TranslationUnit)) { if (!string.IsNullOrWhiteSpace(ctx.Name)) - names.Add(ctx.Name); + names.Push(ctx.Name); ctx = ctx.Namespace; } if (!ctx.TranslationUnit.IsSystemHeader && ctx.TranslationUnit.IsValid && !string.IsNullOrWhiteSpace(ctx.TranslationUnit.Module.OutputNamespace)) - names.Add(ctx.TranslationUnit.Module.OutputNamespace); + names.Push(ctx.TranslationUnit.Module.OutputNamespace); names.Reverse(); - var isInCurrentOutputNamespace = names[0] == Generator.CurrentOutputNamespace; + var isInCurrentOutputNamespace = names.Peek() == Generator.CurrentOutputNamespace; if (isInCurrentOutputNamespace || !FullyQualify) - names.RemoveAt(0); + names.Pop(); return (isInCurrentOutputNamespace || !FullyQualify ? string.Empty : "global::") + string.Join(".", names);