@@ -27,6 +27,7 @@ import org.scalajs.ir.Names.DefaultModuleID
2727import org .scalajs .ir .OriginalName .NoOriginalName
2828import org .scalajs .ir .Position .NoPosition
2929import org .scalajs .ir .Trees .OptimizerHints
30+ import org .scalajs .ir .Version .Unversioned
3031
3132import dotty .tools .dotc .transform .sjs .JSExportUtils .*
3233import dotty .tools .dotc .transform .sjs .JSSymUtils .*
@@ -185,18 +186,21 @@ final class JSExportsGen(jsCodeGen: JSCodeGen)(using Context) {
185186 }).toList
186187 }
187188
188- def genStaticExports (classSym : Symbol ): List [js.MemberDef ] = {
189+ def genStaticExports (classSym : Symbol ): ( List [js.JSFieldDef ], List [js. JSMethodPropDef ]) = {
189190 val exports = for {
190191 sym <- classSym.info.decls.toList
191192 info <- staticExportsOf(sym)
192193 } yield {
193194 (info, sym)
194195 }
195196
196- (for {
197+ val fields = List .newBuilder[js.JSFieldDef ]
198+ val methodProps = List .newBuilder[js.JSMethodPropDef ]
199+
200+ for {
197201 (info, tups) <- exports.groupBy(_._1)
198202 kind <- checkSameKind(tups)
199- } yield {
203+ } {
200204 def alts = tups.map(_._2)
201205
202206 implicit val pos = info.pos
@@ -205,10 +209,12 @@ final class JSExportsGen(jsCodeGen: JSCodeGen)(using Context) {
205209
206210 kind match {
207211 case Method =>
208- genMemberExportOrDispatcher(JSName .Literal (info.jsName), isProp = false , alts, static = true )
212+ methodProps +=
213+ genMemberExportOrDispatcher(JSName .Literal (info.jsName), isProp = false , alts, static = true )
209214
210215 case Property =>
211- genMemberExportOrDispatcher(JSName .Literal (info.jsName), isProp = true , alts, static = true )
216+ methodProps +=
217+ genMemberExportOrDispatcher(JSName .Literal (info.jsName), isProp = true , alts, static = true )
212218
213219 case Field =>
214220 val sym = checkSingleField(tups)
@@ -219,19 +225,21 @@ final class JSExportsGen(jsCodeGen: JSCodeGen)(using Context) {
219225 .withMutable(true )
220226 val name = js.StringLiteral (info.jsName)
221227 val irTpe = genExposedFieldIRType(sym)
222- js.JSFieldDef (flags, name, irTpe)
228+ fields += js.JSFieldDef (flags, name, irTpe)
223229
224230 case kind =>
225231 throw new AssertionError (s " unexpected static export kind: $kind" )
226232 }
227- }).toList
233+ }
234+
235+ (fields.result(), methodProps.result())
228236 }
229237
230238 /** Generates exported methods and properties for a class.
231239 *
232240 * @param classSym symbol of the class we export for
233241 */
234- def genMemberExports (classSym : ClassSymbol ): List [js.MemberDef ] = {
242+ def genMemberExports (classSym : ClassSymbol ): List [js.JSMethodPropDef ] = {
235243 val classInfo = classSym.info
236244 val allExports = classInfo.memberDenots(takeAllFilter, { (name, buf) =>
237245 if (isExportName(name))
@@ -251,7 +259,7 @@ final class JSExportsGen(jsCodeGen: JSCodeGen)(using Context) {
251259 newlyDeclaredExportNames.map(genMemberExport(classSym, _))
252260 }
253261
254- private def genMemberExport (classSym : ClassSymbol , name : TermName ): js.MemberDef = {
262+ private def genMemberExport (classSym : ClassSymbol , name : TermName ): js.JSMethodPropDef = {
255263 /* This used to be `.member(name)`, but it caused #3538, since we were
256264 * sometimes selecting mixin forwarders, whose type history does not go
257265 * far enough back in time to see varargs. We now explicitly exclude
@@ -284,11 +292,11 @@ final class JSExportsGen(jsCodeGen: JSCodeGen)(using Context) {
284292 genMemberExportOrDispatcher(JSName .Literal (jsName), isProp, alts.map(_.symbol), static = false )
285293 }
286294
287- def genJSClassDispatchers (classSym : Symbol , dispatchMethodsNames : List [JSName ]): List [js.MemberDef ] = {
295+ def genJSClassDispatchers (classSym : Symbol , dispatchMethodsNames : List [JSName ]): List [js.JSMethodPropDef ] = {
288296 dispatchMethodsNames.map(genJSClassDispatcher(classSym, _))
289297 }
290298
291- private def genJSClassDispatcher (classSym : Symbol , name : JSName ): js.MemberDef = {
299+ private def genJSClassDispatcher (classSym : Symbol , name : JSName ): js.JSMethodPropDef = {
292300 val alts = classSym.info.membersBasedOnFlags(required = Method , excluded = Bridge )
293301 .map(_.symbol)
294302 .filter { sym =>
@@ -311,14 +319,14 @@ final class JSExportsGen(jsCodeGen: JSCodeGen)(using Context) {
311319 em " Conflicting properties and methods for ${classSym.fullName}:: $name. " ,
312320 firstAlt.srcPos)
313321 implicit val pos = firstAlt.span
314- js.JSPropertyDef (js.MemberFlags .empty, genExpr(name)(firstAlt.sourcePos), None , None )
322+ js.JSPropertyDef (js.MemberFlags .empty, genExpr(name)(firstAlt.sourcePos), None , None )( Unversioned )
315323 } else {
316324 genMemberExportOrDispatcher(name, isProp, alts, static = false )
317325 }
318326 }
319327
320328 private def genMemberExportOrDispatcher (jsName : JSName , isProp : Boolean ,
321- alts : List [Symbol ], static : Boolean ): js.MemberDef = {
329+ alts : List [Symbol ], static : Boolean ): js.JSMethodPropDef = {
322330 withNewLocalNameScope {
323331 if (isProp)
324332 genExportProperty(alts, jsName, static)
@@ -362,7 +370,7 @@ final class JSExportsGen(jsCodeGen: JSCodeGen)(using Context) {
362370 }
363371 }
364372
365- js.JSPropertyDef (flags, genExpr(jsName)(alts.head.sourcePos), getterBody, setterArgAndBody)
373+ js.JSPropertyDef (flags, genExpr(jsName)(alts.head.sourcePos), getterBody, setterArgAndBody)( Unversioned )
366374 }
367375
368376 private def genExportMethod (alts0 : List [Symbol ], jsName : JSName , static : Boolean )(using Context ): js.JSMethodDef = {
@@ -389,7 +397,7 @@ final class JSExportsGen(jsCodeGen: JSCodeGen)(using Context) {
389397 genOverloadDispatch(jsName, overloads, jstpe.AnyType )
390398
391399 js.JSMethodDef (flags, genExpr(jsName), formalArgs, restParam, body)(
392- OptimizerHints .empty, None )
400+ OptimizerHints .empty, Unversioned )
393401 }
394402
395403 def genOverloadDispatch (jsName : JSName , alts : List [Exported ], tpe : jstpe.Type )(
0 commit comments