@@ -92,26 +92,27 @@ class FirstTransform extends MiniPhaseTransform with InfoTransformer with Annota
92
92
private def reorderAndComplete (stats : List [Tree ])(implicit ctx : Context ): List [Tree ] = {
93
93
val moduleClassDefs, singleClassDefs = mutable.Map [Name , Tree ]()
94
94
95
- def reorder (stats : List [Tree ]): List [Tree ] = stats match {
95
+ def reorder (stats : List [Tree ], revPrefix : List [ Tree ] = Nil ): List [Tree ] = stats match {
96
96
case (stat : TypeDef ) :: stats1 if stat.symbol.isClass =>
97
97
if (stat.symbol is Flags .Module ) {
98
98
moduleClassDefs += (stat.name -> stat)
99
99
singleClassDefs -= stat.name.stripModuleClassSuffix
100
100
val stats1r = reorder(stats1)
101
- if (moduleClassDefs contains stat.name) stat :: stats1r else stats1r
101
+ revPrefix.reverse ::: ( if (moduleClassDefs contains stat.name) stat :: stats1r else stats1r)
102
102
} else {
103
- def stats1r = reorder(stats1)
104
- val normalized = moduleClassDefs remove stat.name.moduleClassName match {
105
- case Some (mcdef) =>
106
- mcdef :: stats1r
107
- case None =>
108
- singleClassDefs += (stat.name -> stat)
109
- stats1r
110
- }
111
- stat :: normalized
103
+ reorder(
104
+ stats1,
105
+ moduleClassDefs remove stat.name.moduleClassName match {
106
+ case Some (mcdef) =>
107
+ mcdef :: stat :: revPrefix
108
+ case None =>
109
+ singleClassDefs += (stat.name -> stat)
110
+ stat :: revPrefix
111
+ }
112
+ )
112
113
}
113
- case stat :: stats1 => stat :: reorder(stats1 )
114
- case Nil => Nil
114
+ case stat :: stats1 => reorder(stats1, stat :: revPrefix )
115
+ case Nil => revPrefix.reverse
115
116
}
116
117
117
118
def registerCompanion (name : TermName , forClass : Symbol ): TermSymbol = {
0 commit comments