1
1
package scala .tools .nsc
2
2
package backend .jvm
3
3
4
+ import scala .annotation .switch
5
+ import scala .tools .asm
4
6
import scala .tools .nsc .backend .jvm .BTypes .InternalName
5
7
6
8
/**
@@ -111,8 +113,10 @@ class CoreBTypes[BTFS <: BTypesFromSymbols[_ <: Global]](val bTypes: BTFS) {
111
113
lazy val jliMethodTypeRef : ClassBType = classBTypeFromSymbol(requiredClass[java.lang.invoke.MethodType ])
112
114
lazy val jliCallSiteRef : ClassBType = classBTypeFromSymbol(requiredClass[java.lang.invoke.CallSite ])
113
115
lazy val jliLambdaMetafactoryRef : ClassBType = classBTypeFromSymbol(requiredClass[java.lang.invoke.LambdaMetafactory ])
114
- lazy val srLambdaDeserializerRef : ClassBType = classBTypeFromSymbol(requiredModule[scala.runtime.LambdaDeserializer .type ].moduleClass)
115
116
lazy val srBoxesRunTimeRef : ClassBType = classBTypeFromSymbol(requiredClass[scala.runtime.BoxesRunTime ])
117
+ lazy val srSymbolLiteral : ClassBType = classBTypeFromSymbol(requiredClass[scala.runtime.SymbolLiteral ])
118
+ lazy val srStructuralCallSite : ClassBType = classBTypeFromSymbol(requiredClass[scala.runtime.StructuralCallSite ])
119
+ lazy val srLambdaDeserialize : ClassBType = classBTypeFromSymbol(requiredClass[scala.runtime.LambdaDeserialize ])
116
120
lazy val srBoxedUnitRef : ClassBType = classBTypeFromSymbol(requiredClass[scala.runtime.BoxedUnit ])
117
121
118
122
private def methodNameAndType (cls : Symbol , name : Name , static : Boolean = false , filterOverload : Symbol => Boolean = _ => true ): MethodNameAndType = {
@@ -265,6 +269,30 @@ class CoreBTypes[BTFS <: BTypesFromSymbols[_ <: Global]](val bTypes: BTFS) {
265
269
case _ => false
266
270
})
267
271
}
272
+
273
+ lazy val lambdaMetaFactoryBootstrapHandle =
274
+ new asm.Handle (asm.Opcodes .H_INVOKESTATIC ,
275
+ coreBTypes.jliLambdaMetafactoryRef.internalName, sn.AltMetafactory .toString,
276
+ MethodBType (
277
+ List (
278
+ coreBTypes.jliMethodHandlesLookupRef,
279
+ coreBTypes.StringRef ,
280
+ coreBTypes.jliMethodTypeRef,
281
+ ArrayBType (ObjectRef )),
282
+ coreBTypes.jliCallSiteRef
283
+ ).descriptor)
284
+
285
+ lazy val lambdaDeserializeBootstrapHandle =
286
+ new scala.tools.asm.Handle (scala.tools.asm.Opcodes .H_INVOKESTATIC ,
287
+ coreBTypes.srLambdaDeserialize.internalName, sn.Bootstrap .toString,
288
+ MethodBType (
289
+ List (
290
+ coreBTypes.jliMethodHandlesLookupRef,
291
+ coreBTypes.StringRef ,
292
+ coreBTypes.jliMethodTypeRef
293
+ ),
294
+ coreBTypes.jliCallSiteRef
295
+ ).descriptor)
268
296
}
269
297
270
298
/**
@@ -292,10 +320,10 @@ trait CoreBTypesProxyGlobalIndependent[BTS <: BTypes] {
292
320
def jiSerializableRef : ClassBType
293
321
def juHashMapRef : ClassBType
294
322
def juMapRef : ClassBType
323
+ def jliCallSiteRef : ClassBType
324
+ def jliMethodTypeRef : ClassBType
295
325
def jliSerializedLambdaRef : ClassBType
296
- def jliMethodHandlesRef : ClassBType
297
326
def jliMethodHandlesLookupRef : ClassBType
298
- def srLambdaDeserializerRef : ClassBType
299
327
def srBoxesRunTimeRef : ClassBType
300
328
def srBoxedUnitRef : ClassBType
301
329
@@ -316,6 +344,9 @@ trait CoreBTypesProxyGlobalIndependent[BTS <: BTypes] {
316
344
def tupleClassConstructors : Map [InternalName , MethodNameAndType ]
317
345
318
346
def srJFunctionRefs : Set [InternalName ]
347
+
348
+ def lambdaMetaFactoryBootstrapHandle : asm.Handle
349
+ def lambdaDeserializeBootstrapHandle : asm.Handle
319
350
}
320
351
321
352
/**
@@ -360,7 +391,6 @@ final class CoreBTypesProxy[BTFS <: BTypesFromSymbols[_ <: Global]](val bTypes:
360
391
def jliMethodTypeRef : ClassBType = _coreBTypes.jliMethodTypeRef
361
392
def jliCallSiteRef : ClassBType = _coreBTypes.jliCallSiteRef
362
393
def jliLambdaMetafactoryRef : ClassBType = _coreBTypes.jliLambdaMetafactoryRef
363
- def srLambdaDeserializerRef : ClassBType = _coreBTypes.srLambdaDeserializerRef
364
394
def srBoxesRunTimeRef : ClassBType = _coreBTypes.srBoxesRunTimeRef
365
395
def srBoxedUnitRef : ClassBType = _coreBTypes.srBoxedUnitRef
366
396
@@ -382,6 +412,10 @@ final class CoreBTypesProxy[BTFS <: BTypesFromSymbols[_ <: Global]](val bTypes:
382
412
383
413
def srJFunctionRefs : Set [InternalName ] = _coreBTypes.srJFunctionRefs
384
414
415
+ def srSymbolLiteral : ClassBType = _coreBTypes.srSymbolLiteral
416
+ def srStructuralCallSite : ClassBType = _coreBTypes.srStructuralCallSite
417
+ def srLambdaDeserialize : ClassBType = _coreBTypes.srLambdaDeserialize
418
+
385
419
def typeOfArrayOp : Map [Int , BType ] = _coreBTypes.typeOfArrayOp
386
420
387
421
// Some symbols. These references should probably be moved to Definitions.
@@ -394,4 +428,7 @@ final class CoreBTypesProxy[BTFS <: BTypesFromSymbols[_ <: Global]](val bTypes:
394
428
def BeanInfoAttr : Symbol = _coreBTypes.BeanInfoAttr
395
429
396
430
def String_valueOf : Symbol = _coreBTypes.String_valueOf
431
+
432
+ def lambdaMetaFactoryBootstrapHandle = _coreBTypes.lambdaMetaFactoryBootstrapHandle
433
+ def lambdaDeserializeBootstrapHandle = _coreBTypes.lambdaDeserializeBootstrapHandle
397
434
}
0 commit comments