From 29851ceaba1578f1dfcf6e7a82e911d29f2d0826 Mon Sep 17 00:00:00 2001 From: triton Date: Mon, 4 Feb 2013 23:32:36 +0000 Subject: [PATCH] Extract the declaration sorting into its own pass. --- src/Generator/Driver.cs | 14 +------- src/Generator/Passes/SortDeclarationsPass.cs | 36 ++++++++++++++++++++ 2 files changed, 37 insertions(+), 13 deletions(-) create mode 100644 src/Generator/Passes/SortDeclarationsPass.cs diff --git a/src/Generator/Driver.cs b/src/Generator/Driver.cs index 3d4e7b35..084243e6 100644 --- a/src/Generator/Driver.cs +++ b/src/Generator/Driver.cs @@ -41,14 +41,11 @@ namespace Cxxi public void ProcessCode() { - // Sort the declarations to be in original order. - foreach (var unit in library.TranslationUnits) - SortDeclarations(unit); - if (transform != null) transform.Preprocess(new LibraryHelpers(library)); var passes = new PassBuilder(library); + passes.SortDeclarations(); passes.ResolveIncompleteDecls(typeDatabase); passes.CleanInvalidDeclNames(); passes.CheckFlagEnums(); @@ -63,15 +60,6 @@ namespace Cxxi transform.Postprocess(new LibraryHelpers(library)); } - private static void SortDeclarations(Namespace @namespace) - { - @namespace.Classes.Sort((c, c1) => - (int) (c.DefinitionOrder - c1.DefinitionOrder)); - - foreach (var childNamespace in @namespace.Namespaces) - SortDeclarations(childNamespace); - } - public void GenerateCode() { if (library.TranslationUnits.Count <= 0) diff --git a/src/Generator/Passes/SortDeclarationsPass.cs b/src/Generator/Passes/SortDeclarationsPass.cs new file mode 100644 index 00000000..f0b7b8ab --- /dev/null +++ b/src/Generator/Passes/SortDeclarationsPass.cs @@ -0,0 +1,36 @@ +using Cxxi.Types; + +namespace Cxxi.Passes +{ + class SortDeclarationsPass : TranslationUnitPass + { + public SortDeclarationsPass() + { + + } + + private static void SortDeclarations(Namespace @namespace) + { + @namespace.Classes.Sort((c, c1) => + (int)(c.DefinitionOrder - c1.DefinitionOrder)); + + foreach (var childNamespace in @namespace.Namespaces) + SortDeclarations(childNamespace); + } + + public override bool ProcessUnit(TranslationUnit unit) + { + SortDeclarations(unit); + return true; + } + } + + public static class SortDeclarationsExtensions + { + public static void SortDeclarations(this PassBuilder builder) + { + var pass = new SortDeclarationsPass(); + builder.AddPass(pass); + } + } +}