251 enum Kind {
252 GENERIC("invoke"),
253 IDENTITY("identity"),
254 CONSTANT("constant"),
255 BOUND_REINVOKER("BMH.reinvoke", "reinvoke"),
256 REINVOKER("MH.reinvoke", "reinvoke"),
257 DELEGATE("MH.delegate", "delegate"),
258 EXACT_LINKER("MH.invokeExact_MT", "invokeExact_MT"),
259 EXACT_INVOKER("MH.exactInvoker", "exactInvoker"),
260 GENERIC_LINKER("MH.invoke_MT", "invoke_MT"),
261 GENERIC_INVOKER("MH.invoker", "invoker"),
262 LINK_TO_TARGET_METHOD("linkToTargetMethod"),
263 LINK_TO_CALL_SITE("linkToCallSite"),
264 DIRECT_INVOKE_VIRTUAL("DMH.invokeVirtual", "invokeVirtual"),
265 DIRECT_INVOKE_SPECIAL("DMH.invokeSpecial", "invokeSpecial"),
266 DIRECT_INVOKE_SPECIAL_IFC("DMH.invokeSpecialIFC", "invokeSpecialIFC"),
267 DIRECT_INVOKE_STATIC("DMH.invokeStatic", "invokeStatic"),
268 DIRECT_NEW_INVOKE_SPECIAL("DMH.newInvokeSpecial", "newInvokeSpecial"),
269 DIRECT_INVOKE_INTERFACE("DMH.invokeInterface", "invokeInterface"),
270 DIRECT_INVOKE_STATIC_INIT("DMH.invokeStaticInit", "invokeStaticInit"),
271 FIELD_ACCESS("fieldAccess"),
272 FIELD_ACCESS_INIT("fieldAccessInit"),
273 VOLATILE_FIELD_ACCESS("volatileFieldAccess"),
274 VOLATILE_FIELD_ACCESS_INIT("volatileFieldAccessInit"),
275 FIELD_ACCESS_B("fieldAccessB"),
276 FIELD_ACCESS_INIT_B("fieldAccessInitB"),
277 VOLATILE_FIELD_ACCESS_B("volatileFieldAccessB"),
278 VOLATILE_FIELD_ACCESS_INIT_B("volatileFieldAccessInitB"),
279 FIELD_ACCESS_C("fieldAccessC"),
280 FIELD_ACCESS_INIT_C("fieldAccessInitC"),
281 VOLATILE_FIELD_ACCESS_C("volatileFieldAccessC"),
282 VOLATILE_FIELD_ACCESS_INIT_C("volatileFieldAccessInitC"),
283 FIELD_ACCESS_S("fieldAccessS"),
284 FIELD_ACCESS_INIT_S("fieldAccessInitS"),
285 VOLATILE_FIELD_ACCESS_S("volatileFieldAccessS"),
286 VOLATILE_FIELD_ACCESS_INIT_S("volatileFieldAccessInitS"),
287 FIELD_ACCESS_Z("fieldAccessZ"),
288 FIELD_ACCESS_INIT_Z("fieldAccessInitZ"),
289 VOLATILE_FIELD_ACCESS_Z("volatileFieldAccessZ"),
290 VOLATILE_FIELD_ACCESS_INIT_Z("volatileFieldAccessInitZ"),
291 FIELD_ACCESS_CAST("fieldAccessCast"),
292 FIELD_ACCESS_INIT_CAST("fieldAccessInitCast"),
293 VOLATILE_FIELD_ACCESS_CAST("volatileFieldAccessCast"),
294 VOLATILE_FIELD_ACCESS_INIT_CAST("volatileFieldAccessInitCast"),
295 TRY_FINALLY("tryFinally"),
296 TABLE_SWITCH("tableSwitch"),
297 COLLECTOR("collector"),
298 LOOP("loop"),
299 GUARD("guard"),
300 GUARD_WITH_CATCH("guardWithCatch"),
301 VARHANDLE_EXACT_INVOKER("VH.exactInvoker"),
302 VARHANDLE_INVOKER("VH.invoker", "invoker"),
303 VARHANDLE_LINKER("VH.invoke_MT", "invoke_MT");
304
305 final String defaultLambdaName;
306 final String methodName;
307
308 private Kind(String defaultLambdaName) {
309 this(defaultLambdaName, defaultLambdaName);
310 }
311
312 private Kind(String defaultLambdaName, String methodName) {
313 this.defaultLambdaName = defaultLambdaName;
314 this.methodName = methodName;
|
251 enum Kind {
252 GENERIC("invoke"),
253 IDENTITY("identity"),
254 CONSTANT("constant"),
255 BOUND_REINVOKER("BMH.reinvoke", "reinvoke"),
256 REINVOKER("MH.reinvoke", "reinvoke"),
257 DELEGATE("MH.delegate", "delegate"),
258 EXACT_LINKER("MH.invokeExact_MT", "invokeExact_MT"),
259 EXACT_INVOKER("MH.exactInvoker", "exactInvoker"),
260 GENERIC_LINKER("MH.invoke_MT", "invoke_MT"),
261 GENERIC_INVOKER("MH.invoker", "invoker"),
262 LINK_TO_TARGET_METHOD("linkToTargetMethod"),
263 LINK_TO_CALL_SITE("linkToCallSite"),
264 DIRECT_INVOKE_VIRTUAL("DMH.invokeVirtual", "invokeVirtual"),
265 DIRECT_INVOKE_SPECIAL("DMH.invokeSpecial", "invokeSpecial"),
266 DIRECT_INVOKE_SPECIAL_IFC("DMH.invokeSpecialIFC", "invokeSpecialIFC"),
267 DIRECT_INVOKE_STATIC("DMH.invokeStatic", "invokeStatic"),
268 DIRECT_NEW_INVOKE_SPECIAL("DMH.newInvokeSpecial", "newInvokeSpecial"),
269 DIRECT_INVOKE_INTERFACE("DMH.invokeInterface", "invokeInterface"),
270 DIRECT_INVOKE_STATIC_INIT("DMH.invokeStaticInit", "invokeStaticInit"),
271 // Start field forms
272 // IJFDL, instance/static differ in method type, can share form
273 // init form only applicable to static
274 FIELD_ACCESS("fieldAccess"),
275 FIELD_ACCESS_INIT("fieldAccessInit"),
276 VOLATILE_FIELD_ACCESS("volatileFieldAccess"),
277 VOLATILE_FIELD_ACCESS_INIT("volatileFieldAccessInit"),
278 // BCSZ need own forms to avoid clashing with basic type I, +-init/volatile
279 FIELD_ACCESS_B("fieldAccessB"),
280 FIELD_ACCESS_INIT_B("fieldAccessInitB"),
281 VOLATILE_FIELD_ACCESS_B("volatileFieldAccessB"),
282 VOLATILE_FIELD_ACCESS_INIT_B("volatileFieldAccessInitB"),
283 FIELD_ACCESS_C("fieldAccessC"),
284 FIELD_ACCESS_INIT_C("fieldAccessInitC"),
285 VOLATILE_FIELD_ACCESS_C("volatileFieldAccessC"),
286 VOLATILE_FIELD_ACCESS_INIT_C("volatileFieldAccessInitC"),
287 FIELD_ACCESS_S("fieldAccessS"),
288 FIELD_ACCESS_INIT_S("fieldAccessInitS"),
289 VOLATILE_FIELD_ACCESS_S("volatileFieldAccessS"),
290 VOLATILE_FIELD_ACCESS_INIT_S("volatileFieldAccessInitS"),
291 FIELD_ACCESS_Z("fieldAccessZ"),
292 FIELD_ACCESS_INIT_Z("fieldAccessInitZ"),
293 VOLATILE_FIELD_ACCESS_Z("volatileFieldAccessZ"),
294 VOLATILE_FIELD_ACCESS_INIT_Z("volatileFieldAccessInitZ"),
295 // cast, nr, flat need their own forms to avoid clashing with L
296 FIELD_ACCESS_CAST("fieldAccessCast"),
297 FIELD_ACCESS_INIT_CAST("fieldAccessInitCast"),
298 VOLATILE_FIELD_ACCESS_CAST("volatileFieldAccessCast"),
299 VOLATILE_FIELD_ACCESS_INIT_CAST("volatileFieldAccessInitCast"),
300 // null-check and put reference, +-cast, +-init/volatile
301 // non-cast forms serve bytecode emulation purpose, which always enforces null checks
302 PUT_NULL_RESTRICTED_REFERENCE("putNullRestrictedReference"),
303 PUT_NULL_RESTRICTED_REFERENCE_INIT("putNullRestrictedReferenceInit"),
304 VOLATILE_PUT_NULL_RESTRICTED_REFERENCE("volatilePutNullRestrictedReference"),
305 VOLATILE_PUT_NULL_RESTRICTED_REFERENCE_INIT("volatilePutNullRestrictedReferenceInit"),
306 PUT_NULL_RESTRICTED_REFERENCE_CAST("putNullRestrictedReferenceCast"),
307 PUT_NULL_RESTRICTED_REFERENCE_CAST_INIT("putNullRestrictedReferenceInitCast"),
308 VOLATILE_PUT_NULL_RESTRICTED_REFERENCE_CAST("volatilePutNullRestrictedReferenceCast"),
309 VOLATILE_PUT_NULL_RESTRICTED_REFERENCE_CAST_INIT("volatilePutNullRestrictedReferenceCastInit"),
310 // flat implies cast, +-init/volatile
311 FIELD_ACCESS_FLAT("fieldAccessFlat"),
312 FIELD_ACCESS_INIT_FLAT("fieldAccessInitFlat"),
313 VOLATILE_FIELD_ACCESS_FLAT("volatileFieldAccessFlat"),
314 VOLATILE_FIELD_ACCESS_INIT_FLAT("volatileFieldAccessInitFlat"),
315 // write guard NR flat, implies cast; +-volatile; no init forms - no flat in static fields yet
316 PUT_NULL_RESTRICTED_FLAT_VALUE("putNullRestrictedFlatValue"),
317 VOLATILE_PUT_NULL_RESTRICTED_FLAT_VALUE("volatilePutNullRestrictedFlatValue"),
318 // End fields
319 TRY_FINALLY("tryFinally"),
320 TABLE_SWITCH("tableSwitch"),
321 COLLECTOR("collector"),
322 LOOP("loop"),
323 GUARD("guard"),
324 GUARD_WITH_CATCH("guardWithCatch"),
325 VARHANDLE_EXACT_INVOKER("VH.exactInvoker"),
326 VARHANDLE_INVOKER("VH.invoker", "invoker"),
327 VARHANDLE_LINKER("VH.invoke_MT", "invoke_MT");
328
329 final String defaultLambdaName;
330 final String methodName;
331
332 private Kind(String defaultLambdaName) {
333 this(defaultLambdaName, defaultLambdaName);
334 }
335
336 private Kind(String defaultLambdaName, String methodName) {
337 this.defaultLambdaName = defaultLambdaName;
338 this.methodName = methodName;
|