< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/BytecodeParser.java

Print this page
rev 52509 : [mq]: graal

*** 422,431 **** --- 422,432 ---- import org.graalvm.compiler.nodes.type.StampTool; import org.graalvm.compiler.nodes.util.GraphUtil; import org.graalvm.compiler.options.OptionValues; import org.graalvm.compiler.phases.OptimisticOptimizations; import org.graalvm.compiler.phases.util.ValueMergeUtil; + import org.graalvm.compiler.serviceprovider.GraalServices; import jdk.internal.vm.compiler.word.LocationIdentity; import jdk.vm.ci.code.BailoutException; import jdk.vm.ci.code.BytecodeFrame; import jdk.vm.ci.code.CodeUtil;
*** 1035,1044 **** --- 1036,1054 ---- DeoptimizeNode deopt = append(new DeoptimizeNode(InvalidateRecompile, Unresolved)); deopt.updateNodeSourcePosition(() -> createBytecodePosition()); } /** + * @param type the type being instantiated + */ + protected void handleIllegalNewInstance(JavaType type) { + assert !graphBuilderConfig.unresolvedIsError(); + DeoptimizeNode deopt = append(new DeoptimizeNode(InvalidateRecompile, Unresolved)); + deopt.updateNodeSourcePosition(() -> createBytecodePosition()); + } + + /** * @param type the type of the array being instantiated * @param length the length of the array */ protected void handleUnresolvedNewObjectArray(JavaType type, ValueNode length) { assert !graphBuilderConfig.unresolvedIsError();
*** 1416,1425 **** --- 1426,1443 ---- return resolvedType.isInterface() || resolvedType.isLinked(); } return false; } + /** + * Check if a type is resolved. Can be overwritten by sub-classes to implement different type + * resolution rules. + */ + protected boolean typeIsResolved(JavaType type) { + return type instanceof ResolvedJavaType; + } + protected void genInvokeStatic(int cpi, int opcode) { JavaMethod target = lookupMethod(cpi, opcode); assert !uninitializedIsError || (target instanceof ResolvedJavaMethod && ((ResolvedJavaMethod) target).getDeclaringClass().isInitialized()) : target; genInvokeStatic(target);
*** 1475,1485 **** } } protected void genInvokeVirtual(int cpi, int opcode) { JavaMethod target = lookupMethod(cpi, opcode); ! genInvokeVirtual(target); } private boolean genDynamicInvokeHelper(ResolvedJavaMethod target, int cpi, int opcode) { assert opcode == INVOKEDYNAMIC || opcode == INVOKEVIRTUAL; --- 1493,1524 ---- } } protected void genInvokeVirtual(int cpi, int opcode) { JavaMethod target = lookupMethod(cpi, opcode); ! if (callTargetIsResolved(target)) { ! genInvokeVirtual((ResolvedJavaMethod) target); ! } else { ! handleUnresolvedInvoke(target, InvokeKind.Virtual); ! } ! } ! ! protected void genInvokeVirtual(ResolvedJavaMethod resolvedTarget) { ! int cpi = stream.readCPI(); ! ! /* ! * Special handling for runtimes that rewrite an invocation of MethodHandle.invoke(...) or ! * MethodHandle.invokeExact(...) to a static adapter. HotSpot does this - see ! * https://wiki.openjdk.java.net/display/HotSpot/Method+handles+and+invokedynamic ! */ ! ! if (genDynamicInvokeHelper(resolvedTarget, cpi, INVOKEVIRTUAL)) { ! return; ! } ! ! ValueNode[] args = frameState.popArguments(resolvedTarget.getSignature().getParameterCount(true)); ! appendInvoke(InvokeKind.Virtual, resolvedTarget, args); } private boolean genDynamicInvokeHelper(ResolvedJavaMethod target, int cpi, int opcode) { assert opcode == INVOKEDYNAMIC || opcode == INVOKEVIRTUAL;
*** 1528,1567 **** } return true; } - void genInvokeVirtual(JavaMethod target) { - if (!genInvokeVirtualHelper(target)) { - handleUnresolvedInvoke(target, InvokeKind.Virtual); - } - } - - private boolean genInvokeVirtualHelper(JavaMethod target) { - if (!callTargetIsResolved(target)) { - return false; - } - - ResolvedJavaMethod resolvedTarget = (ResolvedJavaMethod) target; - int cpi = stream.readCPI(); - - /* - * Special handling for runtimes that rewrite an invocation of MethodHandle.invoke(...) or - * MethodHandle.invokeExact(...) to a static adapter. HotSpot does this - see - * https://wiki.openjdk.java.net/display/HotSpot/Method+handles+and+invokedynamic - */ - - if (genDynamicInvokeHelper(resolvedTarget, cpi, INVOKEVIRTUAL)) { - return true; - } - - ValueNode[] args = frameState.popArguments(target.getSignature().getParameterCount(true)); - appendInvoke(InvokeKind.Virtual, (ResolvedJavaMethod) target, args); - - return true; - } - protected void genInvokeSpecial(int cpi, int opcode) { JavaMethod target = lookupMethod(cpi, opcode); genInvokeSpecial(target); } --- 1567,1576 ----
*** 3016,3026 **** JavaType catchType = block.handler.getCatchType(); if (graphBuilderConfig.eagerResolving()) { catchType = lookupType(block.handler.catchTypeCPI(), INSTANCEOF); } ! if (catchType instanceof ResolvedJavaType) { TypeReference checkedCatchType = TypeReference.createTrusted(graph.getAssumptions(), (ResolvedJavaType) catchType); if (graphBuilderConfig.getSkippedExceptionTypes() != null) { for (ResolvedJavaType skippedType : graphBuilderConfig.getSkippedExceptionTypes()) { if (skippedType.isAssignableFrom(checkedCatchType.getType())) { --- 3025,3035 ---- JavaType catchType = block.handler.getCatchType(); if (graphBuilderConfig.eagerResolving()) { catchType = lookupType(block.handler.catchTypeCPI(), INSTANCEOF); } ! if (typeIsResolved(catchType)) { TypeReference checkedCatchType = TypeReference.createTrusted(graph.getAssumptions(), (ResolvedJavaType) catchType); if (graphBuilderConfig.getSkippedExceptionTypes() != null) { for (ResolvedJavaType skippedType : graphBuilderConfig.getSkippedExceptionTypes()) { if (skippedType.isAssignableFrom(checkedCatchType.getType())) {
*** 3665,3675 **** Object con = lookupConstant(cpi, opcode); if (con instanceof JavaType) { // this is a load of class constant which might be unresolved JavaType type = (JavaType) con; ! if (type instanceof ResolvedJavaType) { frameState.push(JavaKind.Object, appendConstant(getConstantReflection().asJavaClass((ResolvedJavaType) type))); } else { handleUnresolvedLoadConstant(type); } } else if (con instanceof JavaConstant) { --- 3674,3684 ---- Object con = lookupConstant(cpi, opcode); if (con instanceof JavaType) { // this is a load of class constant which might be unresolved JavaType type = (JavaType) con; ! if (typeIsResolved(type)) { frameState.push(JavaKind.Object, appendConstant(getConstantReflection().asJavaClass((ResolvedJavaType) type))); } else { handleUnresolvedLoadConstant(type); } } else if (con instanceof JavaConstant) {
*** 3921,3940 **** JavaType result = constantPool.lookupType(cpi, bytecode); assert !graphBuilderConfig.unresolvedIsError() || result instanceof ResolvedJavaType; return result; } private JavaMethod lookupMethod(int cpi, int opcode) { maybeEagerlyResolve(cpi, opcode); JavaMethod result = constantPool.lookupMethod(cpi, opcode); ! assert !graphBuilderConfig.unresolvedIsError() || result instanceof ResolvedJavaMethod : result; return result; } protected JavaField lookupField(int cpi, int opcode) { maybeEagerlyResolve(cpi, opcode); JavaField result = constantPool.lookupField(cpi, method, opcode); assert !graphBuilderConfig.unresolvedIsError() || result instanceof ResolvedJavaField : "Not resolved: " + result; if (parsingIntrinsic() || eagerInitializing) { if (result instanceof ResolvedJavaField) { ResolvedJavaType declaringClass = ((ResolvedJavaField) result).getDeclaringClass(); if (!declaringClass.isInitialized()) { --- 3930,3989 ---- JavaType result = constantPool.lookupType(cpi, bytecode); assert !graphBuilderConfig.unresolvedIsError() || result instanceof ResolvedJavaType; return result; } + private String unresolvedMethodAssertionMessage(JavaMethod result) { + String message = result.format("%H.%n(%P)%R"); + if (GraalServices.Java8OrEarlier) { + JavaType declaringClass = result.getDeclaringClass(); + String className = declaringClass.getName(); + switch (className) { + case "Ljava/nio/ByteBuffer;": + case "Ljava/nio/ShortBuffer;": + case "Ljava/nio/CharBuffer;": + case "Ljava/nio/IntBuffer;": + case "Ljava/nio/LongBuffer;": + case "Ljava/nio/FloatBuffer;": + case "Ljava/nio/DoubleBuffer;": + case "Ljava/nio/MappedByteBuffer;": { + switch (result.getName()) { + case "position": + case "limit": + case "mark": + case "reset": + case "clear": + case "flip": + case "rewind": { + String returnType = result.getSignature().getReturnType(null).toJavaName(); + if (returnType.equals(declaringClass.toJavaName())) { + message += String.format(" [Probably cause: %s was compiled with javac from JDK 9+ using " + + "`-target 8` and `-source 8` options. See https://bugs.openjdk.java.net/browse/JDK-4774077 for details.]", method.getDeclaringClass().toClassName()); + } + } + } + break; + } + } + } + return message; + } + private JavaMethod lookupMethod(int cpi, int opcode) { maybeEagerlyResolve(cpi, opcode); JavaMethod result = constantPool.lookupMethod(cpi, opcode); ! assert !graphBuilderConfig.unresolvedIsError() || result instanceof ResolvedJavaMethod : unresolvedMethodAssertionMessage(result); return result; } protected JavaField lookupField(int cpi, int opcode) { maybeEagerlyResolve(cpi, opcode); JavaField result = constantPool.lookupField(cpi, method, opcode); + return lookupField(result); + } + + protected JavaField lookupField(JavaField result) { assert !graphBuilderConfig.unresolvedIsError() || result instanceof ResolvedJavaField : "Not resolved: " + result; if (parsingIntrinsic() || eagerInitializing) { if (result instanceof ResolvedJavaField) { ResolvedJavaType declaringClass = ((ResolvedJavaField) result).getDeclaringClass(); if (!declaringClass.isInitialized()) {
*** 3982,4001 **** } else { return profilingInfo.getTypeProfile(bci()); } } ! private void genCheckCast() { ! int cpi = getStream().readCPI(); JavaType type = lookupType(cpi, CHECKCAST); ValueNode object = frameState.pop(JavaKind.Object); ! if (!(type instanceof ResolvedJavaType)) { handleUnresolvedCheckCast(type, object); - return; } ! ResolvedJavaType resolvedType = (ResolvedJavaType) type; TypeReference checkedType = TypeReference.createTrusted(graph.getAssumptions(), resolvedType); JavaTypeProfile profile = getProfileForTypeCheck(checkedType); for (NodePlugin plugin : graphBuilderConfig.getPlugins().getNodePlugins()) { if (plugin.handleCheckCast(this, object, checkedType.getType(), profile)) { --- 4031,4056 ---- } else { return profilingInfo.getTypeProfile(bci()); } } ! private void genCheckCast(int cpi) { JavaType type = lookupType(cpi, CHECKCAST); ValueNode object = frameState.pop(JavaKind.Object); + genCheckCast(type, object); + } ! protected void genCheckCast(JavaType type, ValueNode object) { ! if (typeIsResolved(type)) { ! genCheckCast((ResolvedJavaType) type, object); ! } else { handleUnresolvedCheckCast(type, object); } ! } ! ! protected void genCheckCast(ResolvedJavaType resolvedType, ValueNode objectIn) { ! ValueNode object = objectIn; TypeReference checkedType = TypeReference.createTrusted(graph.getAssumptions(), resolvedType); JavaTypeProfile profile = getProfileForTypeCheck(checkedType); for (NodePlugin plugin : graphBuilderConfig.getPlugins().getNodePlugins()) { if (plugin.handleCheckCast(this, object, checkedType.getType(), profile)) {
*** 4039,4062 **** } } frameState.push(JavaKind.Object, castNode); } ! private void genInstanceOf() { ! int cpi = getStream().readCPI(); JavaType type = lookupType(cpi, INSTANCEOF); ValueNode object = frameState.pop(JavaKind.Object); ! if (!(type instanceof ResolvedJavaType)) { handleUnresolvedInstanceOf(type, object); - return; } ! TypeReference resolvedType = TypeReference.createTrusted(graph.getAssumptions(), (ResolvedJavaType) type); ! JavaTypeProfile profile = getProfileForTypeCheck(resolvedType); for (NodePlugin plugin : graphBuilderConfig.getPlugins().getNodePlugins()) { ! if (plugin.handleInstanceOf(this, object, resolvedType.getType(), profile)) { return; } } LogicNode instanceOfNode = null; --- 4094,4124 ---- } } frameState.push(JavaKind.Object, castNode); } ! private void genInstanceOf(int cpi) { JavaType type = lookupType(cpi, INSTANCEOF); ValueNode object = frameState.pop(JavaKind.Object); + genInstanceOf(type, object); + } ! protected void genInstanceOf(JavaType type, ValueNode object) { ! if (typeIsResolved(type)) { ! genInstanceOf((ResolvedJavaType) type, object); ! } else { handleUnresolvedInstanceOf(type, object); } ! } ! ! protected void genInstanceOf(ResolvedJavaType resolvedType, ValueNode objectIn) { ! ValueNode object = objectIn; ! TypeReference checkedType = TypeReference.createTrusted(graph.getAssumptions(), resolvedType); ! JavaTypeProfile profile = getProfileForTypeCheck(checkedType); for (NodePlugin plugin : graphBuilderConfig.getPlugins().getNodePlugins()) { ! if (plugin.handleInstanceOf(this, object, checkedType.getType(), profile)) { return; } } LogicNode instanceOfNode = null;
*** 4067,4082 **** if (singleType != null) { LogicNode typeCheck = append(createInstanceOf(TypeReference.createExactTrusted(singleType), object, profile)); if (!typeCheck.isTautology()) { append(new FixedGuardNode(typeCheck, DeoptimizationReason.TypeCheckedInliningViolated, DeoptimizationAction.InvalidateReprofile)); } ! instanceOfNode = LogicConstantNode.forBoolean(resolvedType.getType().isAssignableFrom(singleType)); } } } if (instanceOfNode == null) { ! instanceOfNode = createInstanceOf(resolvedType, object, null); } LogicNode logicNode = genUnique(instanceOfNode); int next = getStream().nextBCI(); int value = getStream().readUByte(next); --- 4129,4144 ---- if (singleType != null) { LogicNode typeCheck = append(createInstanceOf(TypeReference.createExactTrusted(singleType), object, profile)); if (!typeCheck.isTautology()) { append(new FixedGuardNode(typeCheck, DeoptimizationReason.TypeCheckedInliningViolated, DeoptimizationAction.InvalidateReprofile)); } ! instanceOfNode = LogicConstantNode.forBoolean(checkedType.getType().isAssignableFrom(singleType)); } } } if (instanceOfNode == null) { ! instanceOfNode = createInstanceOf(checkedType, object, null); } LogicNode logicNode = genUnique(instanceOfNode); int next = getStream().nextBCI(); int value = getStream().readUByte(next);
*** 4104,4127 **** protected void genNewInstance(int cpi) { JavaType type = lookupType(cpi, NEW); genNewInstance(type); } ! void genNewInstance(JavaType type) { ! if (!(type instanceof ResolvedJavaType)) { handleUnresolvedNewInstance(type); - return; } ! ResolvedJavaType resolvedType = (ResolvedJavaType) type; if (resolvedType.isAbstract() || resolvedType.isInterface()) { ! handleUnresolvedNewInstance(type); return; } ClassInitializationPlugin classInitializationPlugin = graphBuilderConfig.getPlugins().getClassInitializationPlugin(); if (!resolvedType.isInitialized() && classInitializationPlugin == null) { ! handleUnresolvedNewInstance(type); return; } ResolvedJavaType[] skippedExceptionTypes = this.graphBuilderConfig.getSkippedExceptionTypes(); if (skippedExceptionTypes != null) { --- 4166,4192 ---- protected void genNewInstance(int cpi) { JavaType type = lookupType(cpi, NEW); genNewInstance(type); } ! protected void genNewInstance(JavaType type) { ! if (typeIsResolved(type)) { ! genNewInstance((ResolvedJavaType) type); ! } else { handleUnresolvedNewInstance(type); } ! } ! ! protected void genNewInstance(ResolvedJavaType resolvedType) { if (resolvedType.isAbstract() || resolvedType.isInterface()) { ! handleIllegalNewInstance(resolvedType); return; } ClassInitializationPlugin classInitializationPlugin = graphBuilderConfig.getPlugins().getClassInitializationPlugin(); if (!resolvedType.isInitialized() && classInitializationPlugin == null) { ! handleIllegalNewInstance(resolvedType); return; } ResolvedJavaType[] skippedExceptionTypes = this.graphBuilderConfig.getSkippedExceptionTypes(); if (skippedExceptionTypes != null) {
*** 4190,4207 **** frameState.push(JavaKind.Object, append(createNewArray(elementType, length, true))); } private void genNewObjectArray(int cpi) { JavaType type = lookupType(cpi, ANEWARRAY); ! if (!(type instanceof ResolvedJavaType)) { ValueNode length = frameState.pop(JavaKind.Int); handleUnresolvedNewObjectArray(type, length); ! return; } ! ResolvedJavaType resolvedType = (ResolvedJavaType) type; ClassInitializationPlugin classInitializationPlugin = this.graphBuilderConfig.getPlugins().getClassInitializationPlugin(); if (classInitializationPlugin != null && classInitializationPlugin.shouldApply(this, resolvedType.getArrayClass())) { FrameState stateBefore = frameState.create(bci(), getNonIntrinsicAncestor(), false, null, null); classInitializationPlugin.apply(this, resolvedType.getArrayClass(), stateBefore); --- 4255,4277 ---- frameState.push(JavaKind.Object, append(createNewArray(elementType, length, true))); } private void genNewObjectArray(int cpi) { JavaType type = lookupType(cpi, ANEWARRAY); + genNewObjectArray(type); + } ! private void genNewObjectArray(JavaType type) { ! if (typeIsResolved(type)) { ! genNewObjectArray((ResolvedJavaType) type); ! } else { ValueNode length = frameState.pop(JavaKind.Int); handleUnresolvedNewObjectArray(type, length); ! } } ! private void genNewObjectArray(ResolvedJavaType resolvedType) { ClassInitializationPlugin classInitializationPlugin = this.graphBuilderConfig.getPlugins().getClassInitializationPlugin(); if (classInitializationPlugin != null && classInitializationPlugin.shouldApply(this, resolvedType.getArrayClass())) { FrameState stateBefore = frameState.create(bci(), getNonIntrinsicAncestor(), false, null, null); classInitializationPlugin.apply(this, resolvedType.getArrayClass(), stateBefore);
*** 4219,4237 **** private void genNewMultiArray(int cpi) { JavaType type = lookupType(cpi, MULTIANEWARRAY); int rank = getStream().readUByte(bci() + 3); ValueNode[] dims = new ValueNode[rank]; ! if (!(type instanceof ResolvedJavaType)) { for (int i = rank - 1; i >= 0; i--) { dims[i] = frameState.pop(JavaKind.Int); } handleUnresolvedNewMultiArray(type, dims); - return; } ! ResolvedJavaType resolvedType = (ResolvedJavaType) type; ClassInitializationPlugin classInitializationPlugin = this.graphBuilderConfig.getPlugins().getClassInitializationPlugin(); if (classInitializationPlugin != null && classInitializationPlugin.shouldApply(this, resolvedType)) { FrameState stateBefore = frameState.create(bci(), getNonIntrinsicAncestor(), false, null, null); classInitializationPlugin.apply(this, resolvedType, stateBefore); --- 4289,4313 ---- private void genNewMultiArray(int cpi) { JavaType type = lookupType(cpi, MULTIANEWARRAY); int rank = getStream().readUByte(bci() + 3); ValueNode[] dims = new ValueNode[rank]; + genNewMultiArray(type, rank, dims); + } ! private void genNewMultiArray(JavaType type, int rank, ValueNode[] dims) { ! if (typeIsResolved(type)) { ! genNewMultiArray((ResolvedJavaType) type, rank, dims); ! } else { for (int i = rank - 1; i >= 0; i--) { dims[i] = frameState.pop(JavaKind.Int); } handleUnresolvedNewMultiArray(type, dims); } ! } ! ! private void genNewMultiArray(ResolvedJavaType resolvedType, int rank, ValueNode[] dims) { ClassInitializationPlugin classInitializationPlugin = this.graphBuilderConfig.getPlugins().getClassInitializationPlugin(); if (classInitializationPlugin != null && classInitializationPlugin.shouldApply(this, resolvedType)) { FrameState stateBefore = frameState.create(bci(), getNonIntrinsicAncestor(), false, null, null); classInitializationPlugin.apply(this, resolvedType, stateBefore);
*** 4258,4273 **** JavaField field = lookupField(cpi, opcode); genGetField(field, receiverInput); } private void genGetField(JavaField field, ValueNode receiverInput) { - ValueNode receiver = maybeEmitExplicitNullCheck(receiverInput); if (field instanceof ResolvedJavaField) { ResolvedJavaField resolvedField = (ResolvedJavaField) field; genGetField(resolvedField, receiver); } else { ! handleUnresolvedLoadField(field, receiver); } } private void genGetField(ResolvedJavaField resolvedField, ValueNode receiver) { if (!parsingIntrinsic() && GeneratePIC.getValue(getOptions())) { --- 4334,4349 ---- JavaField field = lookupField(cpi, opcode); genGetField(field, receiverInput); } private void genGetField(JavaField field, ValueNode receiverInput) { if (field instanceof ResolvedJavaField) { + ValueNode receiver = maybeEmitExplicitNullCheck(receiverInput); ResolvedJavaField resolvedField = (ResolvedJavaField) field; genGetField(resolvedField, receiver); } else { ! handleUnresolvedLoadField(field, receiverInput); } } private void genGetField(ResolvedJavaField resolvedField, ValueNode receiver) { if (!parsingIntrinsic() && GeneratePIC.getValue(getOptions())) {
*** 4368,4380 **** protected void genPutField(JavaField field) { genPutField(field, frameState.pop(field.getJavaKind())); } private void genPutField(JavaField field, ValueNode value) { ! ValueNode receiver = maybeEmitExplicitNullCheck(frameState.pop(JavaKind.Object)); if (field instanceof ResolvedJavaField) { ResolvedJavaField resolvedField = (ResolvedJavaField) field; if (!parsingIntrinsic() && GeneratePIC.getValue(getOptions())) { graph.recordField(resolvedField); } --- 4444,4457 ---- protected void genPutField(JavaField field) { genPutField(field, frameState.pop(field.getJavaKind())); } private void genPutField(JavaField field, ValueNode value) { ! ValueNode receiverInput = frameState.pop(JavaKind.Object); if (field instanceof ResolvedJavaField) { + ValueNode receiver = maybeEmitExplicitNullCheck(receiverInput); ResolvedJavaField resolvedField = (ResolvedJavaField) field; if (!parsingIntrinsic() && GeneratePIC.getValue(getOptions())) { graph.recordField(resolvedField); }
*** 4388,4398 **** if (resolvedField.isFinal() && method.isConstructor()) { finalBarrierRequired = true; } genStoreField(receiver, resolvedField, value); } else { ! handleUnresolvedStoreField(field, value, receiver); } } protected void genGetStatic(int cpi, int opcode) { JavaField field = lookupField(cpi, opcode); --- 4465,4475 ---- if (resolvedField.isFinal() && method.isConstructor()) { finalBarrierRequired = true; } genStoreField(receiver, resolvedField, value); } else { ! handleUnresolvedStoreField(field, value, receiverInput); } } protected void genGetStatic(int cpi, int opcode) { JavaField field = lookupField(cpi, opcode);
*** 4482,4491 **** --- 4559,4569 ---- JavaField field = lookupField(cpi, opcode); genPutStatic(field); } protected void genPutStatic(JavaField field) { + int stackSizeBefore = frameState.stackSize(); ValueNode value = frameState.pop(field.getJavaKind()); ResolvedJavaField resolvedField = resolveStaticFieldAccess(field, value); if (resolvedField == null) { return; }
*** 4494,4504 **** graph.recordField(resolvedField); } ClassInitializationPlugin classInitializationPlugin = this.graphBuilderConfig.getPlugins().getClassInitializationPlugin(); if (classInitializationPlugin != null && classInitializationPlugin.shouldApply(this, resolvedField.getDeclaringClass())) { ! FrameState stateBefore = frameState.create(bci(), getNonIntrinsicAncestor(), false, null, null); classInitializationPlugin.apply(this, resolvedField.getDeclaringClass(), stateBefore); } for (NodePlugin plugin : graphBuilderConfig.getPlugins().getNodePlugins()) { if (plugin.handleStoreStaticField(this, resolvedField, value)) { --- 4572,4585 ---- graph.recordField(resolvedField); } ClassInitializationPlugin classInitializationPlugin = this.graphBuilderConfig.getPlugins().getClassInitializationPlugin(); if (classInitializationPlugin != null && classInitializationPlugin.shouldApply(this, resolvedField.getDeclaringClass())) { ! JavaKind[] pushedSlotKinds = {field.getJavaKind()}; ! ValueNode[] pushedValues = {value}; ! FrameState stateBefore = frameState.create(bci(), getNonIntrinsicAncestor(), false, pushedSlotKinds, pushedValues); ! assert stackSizeBefore == stateBefore.stackSize(); classInitializationPlugin.apply(this, resolvedField.getDeclaringClass(), stateBefore); } for (NodePlugin plugin : graphBuilderConfig.getPlugins().getNodePlugins()) { if (plugin.handleStoreStaticField(this, resolvedField, value)) {
*** 4867,4878 **** case NEW : genNewInstance(stream.readCPI()); break; case NEWARRAY : genNewPrimitiveArray(stream.readLocalIndex()); break; case ANEWARRAY : genNewObjectArray(stream.readCPI()); break; case ARRAYLENGTH : genArrayLength(); break; case ATHROW : genThrow(); break; ! case CHECKCAST : genCheckCast(); break; ! case INSTANCEOF : genInstanceOf(); break; case MONITORENTER : genMonitorEnter(frameState.pop(JavaKind.Object), stream.nextBCI()); break; case MONITOREXIT : genMonitorExit(frameState.pop(JavaKind.Object), null, stream.nextBCI()); break; case MULTIANEWARRAY : genNewMultiArray(stream.readCPI()); break; case IFNULL : genIfNull(Condition.EQ); break; case IFNONNULL : genIfNull(Condition.NE); break; --- 4948,4959 ---- case NEW : genNewInstance(stream.readCPI()); break; case NEWARRAY : genNewPrimitiveArray(stream.readLocalIndex()); break; case ANEWARRAY : genNewObjectArray(stream.readCPI()); break; case ARRAYLENGTH : genArrayLength(); break; case ATHROW : genThrow(); break; ! case CHECKCAST : genCheckCast(stream.readCPI()); break; ! case INSTANCEOF : genInstanceOf(stream.readCPI()); break; case MONITORENTER : genMonitorEnter(frameState.pop(JavaKind.Object), stream.nextBCI()); break; case MONITOREXIT : genMonitorExit(frameState.pop(JavaKind.Object), null, stream.nextBCI()); break; case MULTIANEWARRAY : genNewMultiArray(stream.readCPI()); break; case IFNULL : genIfNull(Condition.EQ); break; case IFNONNULL : genIfNull(Condition.NE); break;
< prev index next >