X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem%2FMicrosoft.CSharp%2FCSharpCodeGenerator.cs;h=ecc7b1a4645f400223e493bd48916a0e9819c5a9;hb=5262fc2862fd1d39ab87d1a52e52c0da1463e4e1;hp=e5d9e5e7e669b6fa293eed9d2037467b419084eb;hpb=d331ccd21f02cc156e5558ed407f6262ac4594f9;p=mono.git diff --git a/mcs/class/System/Microsoft.CSharp/CSharpCodeGenerator.cs b/mcs/class/System/Microsoft.CSharp/CSharpCodeGenerator.cs index e5d9e5e7e66..ecc7b1a4645 100644 --- a/mcs/class/System/Microsoft.CSharp/CSharpCodeGenerator.cs +++ b/mcs/class/System/Microsoft.CSharp/CSharpCodeGenerator.cs @@ -172,7 +172,28 @@ namespace Mono.CSharp { GenerateCompileUnitStart (compileUnit); - GenerateGlobalNamespace (compileUnit); + List imports = null; + foreach (CodeNamespace codeNamespace in compileUnit.Namespaces) { + if (!string.IsNullOrEmpty (codeNamespace.Name)) + continue; + + if (codeNamespace.Imports.Count == 0) + continue; + + if (imports == null) + imports = new List (); + + foreach (CodeNamespaceImport i in codeNamespace.Imports) + imports.Add (i); + } + + if (imports != null) { + imports.Sort ((a, b) => a.Namespace.CompareTo (b.Namespace)); + foreach (var import in imports) + GenerateNamespaceImport (import); + + Output.WriteLine (); + } if (compileUnit.AssemblyCustomAttributes.Count > 0) { OutputAttributes (compileUnit.AssemblyCustomAttributes, @@ -180,26 +201,24 @@ namespace Mono.CSharp Output.WriteLine (""); } - GenerateLocalNamespaces (compileUnit); - - GenerateCompileUnitEnd (compileUnit); - } + CodeNamespaceImportCollection global_imports = null; + foreach (CodeNamespace codeNamespace in compileUnit.Namespaces) { + if (string.IsNullOrEmpty (codeNamespace.Name)) { + global_imports = codeNamespace.Imports; + codeNamespace.Imports.Clear (); + } - private void GenerateGlobalNamespace (CodeCompileUnit compileUnit) { - CodeNamespace globalNamespace = null; + GenerateNamespace (codeNamespace); - foreach (CodeNamespace codeNamespace in compileUnit.Namespaces) - if (string.IsNullOrEmpty (codeNamespace.Name)) - globalNamespace = codeNamespace; - - if (globalNamespace != null) - GenerateNamespace (globalNamespace); - } + if (global_imports != null) { + codeNamespace.Imports.Clear (); + foreach (CodeNamespaceImport ns in global_imports) + codeNamespace.Imports.Add (ns); + global_imports = null; + } + } - private void GenerateLocalNamespaces (CodeCompileUnit compileUnit) { - foreach (CodeNamespace codeNamespace in compileUnit.Namespaces) - if (!string.IsNullOrEmpty (codeNamespace.Name)) - GenerateNamespace (codeNamespace); + GenerateCompileUnitEnd (compileUnit); } protected override void GenerateDefaultValueExpression (CodeDefaultValueExpression e) @@ -1597,9 +1616,13 @@ namespace Mono.CSharp static void FillKeywordTable () { - keywordsTable = new Hashtable (); - foreach (string keyword in keywords) { - keywordsTable.Add (keyword, keyword); + lock (keywords) { + if (keywordsTable == null) { + keywordsTable = new Hashtable (); + foreach (string keyword in keywords) { + keywordsTable.Add (keyword, keyword); + } + } } }