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