Mercurial > hg > graal-jvmci-8
changeset 17056:0e7894989f37
Truffle: fix AssumedValue.
author | Chris Seaton <chris.seaton@oracle.com> |
---|---|
date | Sat, 06 Sep 2014 17:14:00 +0100 |
parents | 3e4d3be0b6bf |
children | d51c097cca37 |
files | graal/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/AssumedValue.java |
diffstat | 1 files changed, 17 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/AssumedValue.java Thu Sep 04 20:12:10 2014 +0200 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/AssumedValue.java Sat Sep 06 17:14:00 2014 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,12 +35,19 @@ */ public class AssumedValue<T> { + private final String name; + @CompilationFinal private T value; - private final CyclicAssumption assumption; + @CompilationFinal private Assumption assumption; + + public AssumedValue(T initialValue) { + this(null, initialValue); + } public AssumedValue(String name, T initialValue) { - assumption = new CyclicAssumption(name); + this.name = name; value = initialValue; + assumption = Truffle.getRuntime().createAssumption(name); } /** @@ -49,9 +56,9 @@ */ public T get() { try { - assumption.getAssumption().check(); + assumption.check(); } catch (InvalidAssumptionException e) { - // No need to rewrite anything - just pick up the new value + // No need to rewrite anything - just pick up the new values } return value; @@ -61,8 +68,12 @@ * Set a new value, which will be picked up the next time {@link #get} is called. */ public void set(T newValue) { + CompilerDirectives.transferToInterpreter(); + value = newValue; - assumption.invalidate(); + final Assumption oldAssumption = assumption; + assumption = Truffle.getRuntime().createAssumption(name); + oldAssumption.invalidate(); } }