@@ -201,11 +201,13 @@ class TranslatedClassListInitialization extends TranslatedListInitialization {
201
201
override ClassAggregateLiteral expr ;
202
202
203
203
override TranslatedElement getChild ( int id ) {
204
- exists ( TranslatedFieldInitialization fieldInit |
205
- result = fieldInit and
206
- fieldInit = getTranslatedFieldInitialization ( expr , _) and
207
- fieldInit .getOrder ( ) = id
208
- )
204
+ result =
205
+ rank [ id + 1 ] ( TranslatedFieldInitialization fieldInit , int ord |
206
+ fieldInit = getTranslatedFieldInitialization ( expr , _) and
207
+ fieldInit .getOrder ( ) = ord
208
+ |
209
+ fieldInit order by ord , fieldInit .getRepetitionIndex ( )
210
+ )
209
211
}
210
212
}
211
213
@@ -222,7 +224,7 @@ class TranslatedArrayListInitialization extends TranslatedListInitialization {
222
224
rank [ id + 1 ] ( TranslatedElementInitialization init |
223
225
init .getInitList ( ) = expr
224
226
|
225
- init order by init .getElementIndex ( )
227
+ init order by init .getElementIndex ( ) , init . getRepetitionIndex ( )
226
228
)
227
229
}
228
230
}
@@ -522,6 +524,12 @@ abstract class TranslatedFieldInitialization extends TranslatedElement {
522
524
final InstructionTag getFieldAddressTag ( ) { result = InitializerFieldAddressTag ( ) }
523
525
524
526
final Field getField ( ) { result = field }
527
+
528
+ /**
529
+ * Gets the index of this initialization, if the field is mentioned
530
+ * multiple times in the initializer.
531
+ */
532
+ int getRepetitionIndex ( ) { result = 0 }
525
533
}
526
534
527
535
/**
@@ -532,9 +540,10 @@ class TranslatedExplicitFieldInitialization extends TranslatedFieldInitializatio
532
540
InitializationContext , TTranslatedExplicitFieldInitialization
533
541
{
534
542
Expr expr ;
543
+ int repitition ;
535
544
536
545
TranslatedExplicitFieldInitialization ( ) {
537
- this = TTranslatedExplicitFieldInitialization ( ast , field , expr )
546
+ this = TTranslatedExplicitFieldInitialization ( ast , field , expr , repitition )
538
547
}
539
548
540
549
override Instruction getTargetAddress ( ) { result = getInstruction ( getFieldAddressTag ( ) ) }
@@ -556,6 +565,8 @@ class TranslatedExplicitFieldInitialization extends TranslatedFieldInitializatio
556
565
private TranslatedInitialization getInitialization ( ) {
557
566
result = getTranslatedInitialization ( expr )
558
567
}
568
+
569
+ override int getRepetitionIndex ( ) { result = repitition }
559
570
}
560
571
561
572
private string getZeroValue ( Type type ) {
@@ -689,6 +700,8 @@ abstract class TranslatedElementInitialization extends TranslatedElement {
689
700
690
701
abstract int getElementIndex ( ) ;
691
702
703
+ int getRepetitionIndex ( ) { result = 0 }
704
+
692
705
final InstructionTag getElementAddressTag ( ) { result = InitializerElementAddressTag ( ) }
693
706
694
707
final InstructionTag getElementIndexTag ( ) { result = InitializerElementIndexTag ( ) }
@@ -706,9 +719,10 @@ class TranslatedExplicitElementInitialization extends TranslatedElementInitializ
706
719
TTranslatedExplicitElementInitialization , InitializationContext
707
720
{
708
721
int elementIndex ;
722
+ int repetition ;
709
723
710
724
TranslatedExplicitElementInitialization ( ) {
711
- this = TTranslatedExplicitElementInitialization ( initList , elementIndex )
725
+ this = TTranslatedExplicitElementInitialization ( initList , elementIndex , repetition )
712
726
}
713
727
714
728
override Instruction getTargetAddress ( ) { result = getInstruction ( getElementAddressTag ( ) ) }
@@ -731,8 +745,13 @@ class TranslatedExplicitElementInitialization extends TranslatedElementInitializ
731
745
732
746
override int getElementIndex ( ) { result = elementIndex }
733
747
748
+ override int getRepetitionIndex ( ) { result = repetition }
749
+
734
750
TranslatedInitialization getInitialization ( ) {
735
- result = getTranslatedInitialization ( initList .getElementExpr ( elementIndex ) .getFullyConverted ( ) )
751
+ result =
752
+ getTranslatedInitialization ( initList
753
+ .getElementExpr ( elementIndex , repetition )
754
+ .getFullyConverted ( ) )
736
755
}
737
756
}
738
757
0 commit comments