@@ -144,10 +144,12 @@ public void GenerateForwardRefs()
144
144
public void GenerateDeclContext ( DeclarationContext decl )
145
145
{
146
146
// Generate all the type references for the module.
147
+ PushBlock ( BlockKind . ForwardReferences ) ;
147
148
foreach ( var typeRef in decl . TypeReferences )
148
149
{
149
150
WriteLine ( typeRef . FowardReference ) ;
150
151
}
152
+ PopBlock ( NewLineKind . BeforeNextBlock ) ;
151
153
152
154
// Generate all the enum declarations for the module.
153
155
foreach ( var @enum in decl . Enums )
@@ -188,21 +190,29 @@ public void GenerateNamespace(Namespace @namespace)
188
190
var generateNamespace = ! isTopLevel ||
189
191
! string . IsNullOrEmpty ( @namespace . TranslationUnit . Module . OutputNamespace ) ;
190
192
191
- if ( generateNamespace )
193
+
194
+ var names = new List < string >
192
195
{
193
- PushBlock ( BlockKind . Namespace , @namespace ) ;
194
- WriteLine ( "namespace {0}" , isTopLevel
195
- ? @namespace . TranslationUnit . Module . OutputNamespace
196
- : @namespace . Name ) ;
197
- WriteOpenBraceAndIndent ( ) ;
196
+ isTopLevel
197
+ ? @namespace . TranslationUnit . Module . OutputNamespace
198
+ : @namespace . Name
199
+ } ;
200
+
201
+ // Merge nested namespaces into the parent namespace.
202
+ while ( @namespace . Declarations . Count == 1 &&
203
+ @namespace . Declarations [ 0 ] is Namespace { IsInline : false } childNamespace )
204
+ {
205
+ @namespace = childNamespace ;
206
+ names . Add ( @namespace . Name ) ;
198
207
}
199
208
200
- GenerateDeclContext ( @namespace ) ;
209
+ var namespaceName = string . Join ( "::" , names ) ;
201
210
202
- if ( generateNamespace )
211
+ using ( generateNamespace
212
+ ? PushWriteBlock ( BlockKind . Namespace , $ "namespace { namespaceName } ", NewLineKind . BeforeNextBlock )
213
+ : default )
203
214
{
204
- UnindentAndWriteCloseBrace ( ) ;
205
- PopBlock ( NewLineKind . BeforeNextBlock ) ;
215
+ GenerateDeclContext ( @namespace ) ;
206
216
}
207
217
}
208
218
0 commit comments