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