@@ -286,7 +286,7 @@ private void GenerateClassTemplateSpecializationsInternals(Class classTemplate,
286
286
IList < ClassTemplateSpecialization > specializations )
287
287
{
288
288
PushBlock ( BlockKind . Namespace ) ;
289
- var generated = GetGenerated ( specializations ) ;
289
+ var generated = GetGeneratedClasses ( classTemplate , specializations ) ;
290
290
WriteLine ( "namespace {0}{1}" ,
291
291
classTemplate . OriginalNamespace is Class &&
292
292
! classTemplate . OriginalNamespace . IsDependent ?
@@ -304,7 +304,11 @@ classTemplate.OriginalNamespace is Class &&
304
304
305
305
foreach ( var group in generated . SelectMany ( s => s . Classes ) . Where (
306
306
c => ! c . IsIncomplete ) . GroupBy ( c => c . Name ) )
307
- GenerateNestedInternals ( group . Key , group ) ;
307
+ {
308
+ var nested = classTemplate . Classes . FirstOrDefault ( c => c . Name == group . Key ) ;
309
+ if ( nested != null )
310
+ GenerateNestedInternals ( group . Key , GetGeneratedClasses ( nested , group ) ) ;
311
+ }
308
312
309
313
WriteCloseBraceIndent ( ) ;
310
314
PopBlock ( NewLineKind . BeforeNextBlock ) ;
@@ -324,17 +328,16 @@ private void GenerateNestedInternals(string name, IEnumerable<Class> nestedClass
324
328
NewLine ( ) ;
325
329
}
326
330
327
- private IEnumerable < ClassTemplateSpecialization > GetGenerated (
328
- IList < ClassTemplateSpecialization > specializations )
331
+ private IEnumerable < Class > GetGeneratedClasses (
332
+ Class dependentClass , IEnumerable < Class > specializedClasses )
329
333
{
330
- var specialization = specializations . FirstOrDefault ( s => s . IsGenerated ) ??
331
- specializations [ 0 ] ;
334
+ var specialization = specializedClasses . FirstOrDefault ( s => s . IsGenerated ) ??
335
+ specializedClasses . First ( ) ;
332
336
333
- Class classTemplate = specialization . TemplatedDecl . TemplatedClass ;
334
- if ( classTemplate . HasDependentValueFieldInLayout ( ) )
335
- return specializations ;
337
+ if ( dependentClass . HasDependentValueFieldInLayout ( ) )
338
+ return specializedClasses ;
336
339
337
- return new List < ClassTemplateSpecialization > { specialization } ;
340
+ return new [ ] { specialization } ;
338
341
}
339
342
340
343
public override void GenerateDeclarationCommon ( Declaration decl )
0 commit comments