11package dotty .tools .backend .sjs
22
3+ import scala .annotation .tailrec
4+
35import scala .collection .mutable
46
57import dotty .tools .FatalError
68
79import dotty .tools .dotc .core ._
10+ import Decorators ._
811import Periods ._
912import SymDenotations ._
1013import Contexts ._
14+ import Flags ._
1115import Types ._
1216import Symbols ._
1317import Denotations ._
@@ -103,13 +107,6 @@ object JSEncoding {
103107 js.Ident (localNames.localSymbolName(sym), Some (sym.unexpandedName.decoded))
104108 }
105109
106- private def allRefClasses (implicit ctx : Context ): Set [Symbol ] = {
107- // TODO
108- /* (Set(ObjectRefClass, VolatileObjectRefClass) ++
109- refClass.values ++ volatileRefClass.values)*/
110- Set ()
111- }
112-
113110 def encodeFieldSym (sym : Symbol )(
114111 implicit ctx : Context , pos : ir.Position ): js.Ident = {
115112 require(sym.owner.isClass && sym.isTerm && ! sym.is(Flags .Method ) && ! sym.is(Flags .Module ),
@@ -120,14 +117,19 @@ object JSEncoding {
120117 if (name0.charAt(name0.length()- 1 ) != ' ' ) name0
121118 else name0.substring(0 , name0.length()- 1 )
122119
120+ @ tailrec
121+ def superClassCount (sym : Symbol , acc : Int ): Int =
122+ if (sym == defn.ObjectClass ) acc
123+ else superClassCount(sym.asClass.superClass, acc + 1 )
124+
123125 /* We have to special-case fields of Ref types (IntRef, ObjectRef, etc.)
124126 * because they are emitted as private by our .scala source files, but
125127 * they are considered public at use site since their symbols come from
126128 * Java-emitted .class files.
127129 */
128130 val idSuffix =
129- if (sym.is(Flags .Private ) || allRefClasses.contains(sym.owner))
130- sym.owner.asClass.baseClasses.size .toString
131+ if (sym.is(Flags .Private ) || jsdefn. allRefClasses.contains(sym.owner))
132+ superClassCount( sym.owner, 0 ) .toString
131133 else
132134 " f"
133135
0 commit comments