# HG changeset patch # User Andreas Woess # Date 1375182468 -7200 # Node ID 3c398866d634b5e0ccb5ff8a830cc7a597880999 # Parent b61c13ad27d09158783af3df234cd3640e43cef8 Frame.isInitialized: add method substitution and suppress AIOOBE if frame size < descriptor size. diff -r b61c13ad27d0 -r 3c398866d634 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/FrameWithoutBoxing.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/FrameWithoutBoxing.java Mon Jul 29 17:13:00 2013 -0700 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/FrameWithoutBoxing.java Tue Jul 30 13:07:48 2013 +0200 @@ -283,6 +283,14 @@ @Override public boolean isInitialized(FrameSlot slot) { - return tags[slot.getIndex()] != FrameSlotKind.Illegal.ordinal(); + try { + return tags[slot.getIndex()] != 0; + } catch (ArrayIndexOutOfBoundsException ex) { + CompilerDirectives.transferToInterpreter(); + if (slot.getIndex() >= 0 && slot.getIndex() < descriptor.getSize()) { + return false; + } + throw ex; + } } } diff -r b61c13ad27d0 -r 3c398866d634 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/FrameWithoutBoxingSubstitutions.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/FrameWithoutBoxingSubstitutions.java Mon Jul 29 17:13:00 2013 -0700 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/FrameWithoutBoxingSubstitutions.java Tue Jul 30 13:07:48 2013 +0200 @@ -209,4 +209,9 @@ public static MaterializedFrame materialize(FrameWithoutBoxing frame) { return MaterializeFrameNode.materialize(frame); } + + @MethodSubstitution(isStatic = false, forced = true) + public static boolean isInitialized(FrameWithoutBoxing frame, FrameSlot slot) { + return getTag(frame, slot) != 0; + } } diff -r b61c13ad27d0 -r 3c398866d634 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultVirtualFrame.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultVirtualFrame.java Mon Jul 29 17:13:00 2013 -0700 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultVirtualFrame.java Tue Jul 30 13:07:48 2013 +0200 @@ -204,6 +204,13 @@ @Override public boolean isInitialized(FrameSlot slot) { - return tags[slot.getIndex()] != FrameSlotKind.Illegal.ordinal(); + try { + return tags[slot.getIndex()] != 0; + } catch (ArrayIndexOutOfBoundsException ex) { + if (slot.getIndex() >= 0 && slot.getIndex() < descriptor.getSize()) { + return false; + } + throw ex; + } } }