Mercurial > hg > graal-compiler
changeset 13875:042a2d972174
support frame slot removal
author | Michael Haupt <michael.haupt@oracle.com> |
---|---|
date | Wed, 05 Feb 2014 11:40:13 +0100 |
parents | d04be74665fb |
children | 54892f32714e |
files | graal/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/FrameTest.java graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/FrameDescriptor.java |
diffstat | 2 files changed, 20 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/FrameTest.java Wed Feb 05 09:32:30 2014 +0100 +++ b/graal/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/FrameTest.java Wed Feb 05 11:40:13 2014 +0100 @@ -37,7 +37,8 @@ * {@link FrameDescriptor} represents the current structure of the frame. The method * {@link FrameDescriptor#addFrameSlot(Object, FrameSlotKind)} can be used to create predefined * frame slots. The setter and getter methods in the {@link Frame} class can be used to access the - * current value of a particular frame slot. + * current value of a particular frame slot. Values can be removed from a frame via the + * {@link FrameDescriptor#removeFrameSlot(Object)} method. * </p> * * <p> @@ -64,11 +65,20 @@ public void test() { TruffleRuntime runtime = Truffle.getRuntime(); FrameDescriptor frameDescriptor = new FrameDescriptor(); - FrameSlot slot = frameDescriptor.addFrameSlot("localVar", FrameSlotKind.Int); + String varName = "localVar"; + FrameSlot slot = frameDescriptor.addFrameSlot(varName, FrameSlotKind.Int); TestRootNode rootNode = new TestRootNode(frameDescriptor, new AssignLocal(slot), new ReadLocal(slot)); CallTarget target = runtime.createCallTarget(rootNode); Object result = target.call(); Assert.assertEquals(42, result); + frameDescriptor.removeFrameSlot(varName); + boolean slotMissing = false; + try { + result = target.call(); + } catch (IllegalArgumentException iae) { + slotMissing = true; + } + Assert.assertTrue(slotMissing); } class TestRootNode extends RootNode {
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/FrameDescriptor.java Wed Feb 05 09:32:30 2014 +0100 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/FrameDescriptor.java Wed Feb 05 11:40:13 2014 +0100 @@ -86,6 +86,14 @@ return addFrameSlot(identifier, kind); } + public void removeFrameSlot(Object identifier) { + assert identifierToSlotMap.containsKey(identifier); + slots.remove(identifierToSlotMap.get(identifier)); + identifierToSlotMap.remove(identifier); + updateVersion(); + getNotInFrameAssumption(identifier); + } + public int getSize() { return slots.size(); }