# HG changeset patch # User Christian Wimmer # Date 1431645118 25200 # Node ID 3bf051bb2691e8652c1b1da3d168e8dbdab92cc1 # Parent 010d3e1099c39b349927e455fb23654c94eb2600 Remove final and abstract class restrictions diff -r 010d3e1099c3 -r 3bf051bb2691 graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Call.java --- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Call.java Thu May 14 16:10:39 2015 -0700 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Call.java Thu May 14 16:11:58 2015 -0700 @@ -71,9 +71,13 @@ } @Opcode("CALL_DIRECT") - public abstract static class DirectCallOp extends MethodCallOp { + public static class DirectCallOp extends MethodCallOp { public static final LIRInstructionClass TYPE = LIRInstructionClass.create(DirectCallOp.class); + public DirectCallOp(ResolvedJavaMethod callTarget, Value result, Value[] parameters, Value[] temps, LIRFrameState state) { + this(TYPE, callTarget, result, parameters, temps, state); + } + protected DirectCallOp(LIRInstructionClass c, ResolvedJavaMethod callTarget, Value result, Value[] parameters, Value[] temps, LIRFrameState state) { super(c, callTarget, result, parameters, temps, state); } diff -r 010d3e1099c3 -r 3bf051bb2691 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DirectCallTargetNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DirectCallTargetNode.java Thu May 14 16:10:39 2015 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DirectCallTargetNode.java Thu May 14 16:11:58 2015 -0700 @@ -31,10 +31,14 @@ import com.oracle.graal.nodeinfo.*; @NodeInfo -public abstract class DirectCallTargetNode extends LoweredCallTargetNode { +public class DirectCallTargetNode extends LoweredCallTargetNode { public static final NodeClass TYPE = NodeClass.create(DirectCallTargetNode.class); + public DirectCallTargetNode(List arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target, CallingConvention.Type callType, InvokeKind invokeKind) { + this(TYPE, arguments, returnStamp, signature, target, callType, invokeKind); + } + protected DirectCallTargetNode(NodeClass c, List arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target, CallingConvention.Type callType, InvokeKind invokeKind) { super(c, arguments, returnStamp, signature, target, callType, invokeKind); diff -r 010d3e1099c3 -r 3bf051bb2691 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IndirectCallTargetNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IndirectCallTargetNode.java Thu May 14 16:10:39 2015 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IndirectCallTargetNode.java Thu May 14 16:11:58 2015 -0700 @@ -31,11 +31,16 @@ import com.oracle.graal.nodeinfo.*; @NodeInfo -public abstract class IndirectCallTargetNode extends LoweredCallTargetNode { +public class IndirectCallTargetNode extends LoweredCallTargetNode { public static final NodeClass TYPE = NodeClass.create(IndirectCallTargetNode.class); @Input protected ValueNode computedAddress; + public IndirectCallTargetNode(ValueNode computedAddress, List arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target, CallingConvention.Type callType, + InvokeKind invokeKind) { + this(TYPE, computedAddress, arguments, returnStamp, signature, target, callType, invokeKind); + } + protected IndirectCallTargetNode(NodeClass c, ValueNode computedAddress, List arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target, CallingConvention.Type callType, InvokeKind invokeKind) { super(c, arguments, returnStamp, signature, target, callType, invokeKind); diff -r 010d3e1099c3 -r 3bf051bb2691 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerDivNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerDivNode.java Thu May 14 16:10:39 2015 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerDivNode.java Thu May 14 16:11:58 2015 -0700 @@ -31,11 +31,15 @@ import com.oracle.graal.nodes.spi.*; @NodeInfo(shortName = "/") -public final class IntegerDivNode extends FixedBinaryNode implements Lowerable, LIRLowerable { +public class IntegerDivNode extends FixedBinaryNode implements Lowerable, LIRLowerable { public static final NodeClass TYPE = NodeClass.create(IntegerDivNode.class); public IntegerDivNode(ValueNode x, ValueNode y) { - super(TYPE, IntegerStamp.OPS.getDiv().foldStamp(x.stamp(), y.stamp()), x, y); + this(TYPE, x, y); + } + + protected IntegerDivNode(NodeClass c, ValueNode x, ValueNode y) { + super(c, IntegerStamp.OPS.getDiv().foldStamp(x.stamp(), y.stamp()), x, y); } @Override diff -r 010d3e1099c3 -r 3bf051bb2691 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerRemNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerRemNode.java Thu May 14 16:10:39 2015 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerRemNode.java Thu May 14 16:11:58 2015 -0700 @@ -31,11 +31,15 @@ import com.oracle.graal.nodes.spi.*; @NodeInfo(shortName = "%") -public final class IntegerRemNode extends FixedBinaryNode implements Lowerable, LIRLowerable { +public class IntegerRemNode extends FixedBinaryNode implements Lowerable, LIRLowerable { public static final NodeClass TYPE = NodeClass.create(IntegerRemNode.class); public IntegerRemNode(ValueNode x, ValueNode y) { - super(TYPE, IntegerStamp.OPS.getRem().foldStamp(x.stamp(), y.stamp()), x, y); + this(TYPE, x, y); + } + + protected IntegerRemNode(NodeClass c, ValueNode x, ValueNode y) { + super(c, IntegerStamp.OPS.getRem().foldStamp(x.stamp(), y.stamp()), x, y); } @Override diff -r 010d3e1099c3 -r 3bf051bb2691 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedDivNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedDivNode.java Thu May 14 16:10:39 2015 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedDivNode.java Thu May 14 16:11:58 2015 -0700 @@ -31,12 +31,16 @@ import com.oracle.graal.nodes.spi.*; @NodeInfo(shortName = "|/|") -public final class UnsignedDivNode extends FixedBinaryNode implements Lowerable, LIRLowerable { +public class UnsignedDivNode extends FixedBinaryNode implements Lowerable, LIRLowerable { public static final NodeClass TYPE = NodeClass.create(UnsignedDivNode.class); public UnsignedDivNode(ValueNode x, ValueNode y) { - super(TYPE, x.stamp().unrestricted(), x, y); + this(TYPE, x, y); + } + + protected UnsignedDivNode(NodeClass c, ValueNode x, ValueNode y) { + super(c, x.stamp().unrestricted(), x, y); } @Override diff -r 010d3e1099c3 -r 3bf051bb2691 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedRemNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedRemNode.java Thu May 14 16:10:39 2015 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedRemNode.java Thu May 14 16:11:58 2015 -0700 @@ -31,12 +31,16 @@ import com.oracle.graal.nodes.spi.*; @NodeInfo(shortName = "|%|") -public final class UnsignedRemNode extends FixedBinaryNode implements Lowerable, LIRLowerable { +public class UnsignedRemNode extends FixedBinaryNode implements Lowerable, LIRLowerable { public static final NodeClass TYPE = NodeClass.create(UnsignedRemNode.class); public UnsignedRemNode(ValueNode x, ValueNode y) { - super(TYPE, x.stamp().unrestricted(), x, y); + this(TYPE, x, y); + } + + protected UnsignedRemNode(NodeClass c, ValueNode x, ValueNode y) { + super(c, x.stamp().unrestricted(), x, y); } @Override diff -r 010d3e1099c3 -r 3bf051bb2691 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ForeignCallNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ForeignCallNode.java Thu May 14 16:10:39 2015 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ForeignCallNode.java Thu May 14 16:11:58 2015 -0700 @@ -47,10 +47,7 @@ protected int bci = BytecodeFrame.UNKNOWN_BCI; public ForeignCallNode(@InjectedNodeParameter ForeignCallsProvider foreignCalls, ForeignCallDescriptor descriptor, ValueNode... arguments) { - super(TYPE, StampFactory.forKind(Kind.fromJavaClass(descriptor.getResultType()))); - this.arguments = new NodeInputList<>(this, arguments); - this.descriptor = descriptor; - this.foreignCalls = foreignCalls; + this(TYPE, foreignCalls, descriptor, arguments); } public ForeignCallNode(@InjectedNodeParameter ForeignCallsProvider foreignCalls, ForeignCallDescriptor descriptor, Stamp stamp, List arguments) { @@ -67,9 +64,9 @@ this.foreignCalls = foreignCalls; } - protected ForeignCallNode(NodeClass c, ForeignCallsProvider foreignCalls, ForeignCallDescriptor descriptor, Stamp stamp) { - super(c, stamp); - this.arguments = new NodeInputList<>(this); + protected ForeignCallNode(NodeClass c, ForeignCallsProvider foreignCalls, ForeignCallDescriptor descriptor, ValueNode... arguments) { + super(c, StampFactory.forKind(Kind.fromJavaClass(descriptor.getResultType()))); + this.arguments = new NodeInputList<>(this, arguments); this.descriptor = descriptor; this.foreignCalls = foreignCalls; } diff -r 010d3e1099c3 -r 3bf051bb2691 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java Thu May 14 16:10:39 2015 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java Thu May 14 16:11:58 2015 -0700 @@ -41,7 +41,7 @@ * Implements a type check against a compile-time known type. */ @NodeInfo -public final class CheckCastNode extends FixedWithNextNode implements Canonicalizable, Simplifiable, Lowerable, Virtualizable, ValueProxy { +public class CheckCastNode extends FixedWithNextNode implements Canonicalizable, Simplifiable, Lowerable, Virtualizable, ValueProxy { public static final NodeClass TYPE = NodeClass.create(CheckCastNode.class); @Input protected ValueNode object; @@ -55,7 +55,11 @@ protected final boolean forStoreCheck; public CheckCastNode(ResolvedJavaType type, ValueNode object, JavaTypeProfile profile, boolean forStoreCheck) { - super(TYPE, StampFactory.declaredTrusted(type)); + this(TYPE, type, object, profile, forStoreCheck); + } + + protected CheckCastNode(NodeClass c, ResolvedJavaType type, ValueNode object, JavaTypeProfile profile, boolean forStoreCheck) { + super(c, StampFactory.declaredTrusted(type)); assert object.stamp() instanceof ObjectStamp : object + ":" + object.stamp(); assert type != null; this.type = type; @@ -178,7 +182,7 @@ return this; } - private static ValueNode findSynonym(ResolvedJavaType type, ValueNode object) { + protected static ValueNode findSynonym(ResolvedJavaType type, ValueNode object) { ResolvedJavaType objectType = StampTool.typeOrNull(object); if (objectType != null && type.isAssignableFrom(objectType)) { // we don't have to check for null types here because they will also pass the diff -r 010d3e1099c3 -r 3bf051bb2691 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfNode.java Thu May 14 16:10:39 2015 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfNode.java Thu May 14 16:11:58 2015 -0700 @@ -36,14 +36,18 @@ * The {@code InstanceOfNode} represents an instanceof test. */ @NodeInfo -public final class InstanceOfNode extends UnaryOpLogicNode implements Lowerable, Virtualizable { +public class InstanceOfNode extends UnaryOpLogicNode implements Lowerable, Virtualizable { public static final NodeClass TYPE = NodeClass.create(InstanceOfNode.class); protected final ResolvedJavaType type; protected JavaTypeProfile profile; public InstanceOfNode(ResolvedJavaType type, ValueNode object, JavaTypeProfile profile) { - super(TYPE, object); + this(TYPE, type, object, profile); + } + + protected InstanceOfNode(NodeClass c, ResolvedJavaType type, ValueNode object, JavaTypeProfile profile) { + super(c, object); this.type = type; this.profile = profile; assert type != null; diff -r 010d3e1099c3 -r 3bf051bb2691 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java Thu May 14 16:10:39 2015 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java Thu May 14 16:11:58 2015 -0700 @@ -37,13 +37,17 @@ * The {@code NewInstanceNode} represents the allocation of an instance class object. */ @NodeInfo(nameTemplate = "New {p#instanceClass/s}") -public final class NewInstanceNode extends AbstractNewObjectNode implements VirtualizableAllocation { +public class NewInstanceNode extends AbstractNewObjectNode implements VirtualizableAllocation { public static final NodeClass TYPE = NodeClass.create(NewInstanceNode.class); protected final ResolvedJavaType instanceClass; public NewInstanceNode(ResolvedJavaType type, boolean fillContents) { - super(TYPE, StampFactory.exactNonNull(type), fillContents); + this(TYPE, type, fillContents); + } + + protected NewInstanceNode(NodeClass c, ResolvedJavaType type, boolean fillContents) { + super(c, StampFactory.exactNonNull(type), fillContents); assert !type.isArray() && !type.isInterface() && !type.isPrimitive(); this.instanceClass = type; } diff -r 010d3e1099c3 -r 3bf051bb2691 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewMultiArrayNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewMultiArrayNode.java Thu May 14 16:10:39 2015 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewMultiArrayNode.java Thu May 14 16:11:58 2015 -0700 @@ -33,7 +33,7 @@ * The {@code NewMultiArrayNode} represents an allocation of a multi-dimensional object array. */ @NodeInfo -public final class NewMultiArrayNode extends DeoptimizingFixedWithNextNode implements Lowerable, ArrayLengthProvider { +public class NewMultiArrayNode extends DeoptimizingFixedWithNextNode implements Lowerable, ArrayLengthProvider { public static final NodeClass TYPE = NodeClass.create(NewMultiArrayNode.class); @Input protected NodeInputList dimensions; @@ -52,7 +52,11 @@ } public NewMultiArrayNode(ResolvedJavaType type, ValueNode[] dimensions) { - super(TYPE, StampFactory.exactNonNull(type)); + this(TYPE, type, dimensions); + } + + protected NewMultiArrayNode(NodeClass c, ResolvedJavaType type, ValueNode[] dimensions) { + super(c, StampFactory.exactNonNull(type)); this.type = type; this.dimensions = new NodeInputList<>(this, dimensions); assert dimensions.length > 0 && type.isArray(); diff -r 010d3e1099c3 -r 3bf051bb2691 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualArrayNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualArrayNode.java Thu May 14 16:10:39 2015 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualArrayNode.java Thu May 14 16:11:58 2015 -0700 @@ -33,14 +33,18 @@ import com.oracle.graal.nodes.spi.*; @NodeInfo(nameTemplate = "VirtualArray {p#componentType/s}[{p#length}]") -public final class VirtualArrayNode extends VirtualObjectNode implements ArrayLengthProvider { +public class VirtualArrayNode extends VirtualObjectNode implements ArrayLengthProvider { public static final NodeClass TYPE = NodeClass.create(VirtualArrayNode.class); protected final ResolvedJavaType componentType; protected final int length; public VirtualArrayNode(ResolvedJavaType componentType, int length) { - super(TYPE, componentType.getArrayClass(), true); + this(TYPE, componentType, length); + } + + protected VirtualArrayNode(NodeClass c, ResolvedJavaType componentType, int length) { + super(c, componentType.getArrayClass(), true); this.componentType = componentType; this.length = length; }