Mercurial > hg > truffle
changeset 22519:47c371370539
SL read node: update shape before going to the uncached case.
author | Benoit Daloze <benoit.daloze@jku.at> |
---|---|
date | Fri, 18 Dec 2015 16:35:25 +0100 |
parents | 72809fce725f |
children | 20ce790acc30 |
files | truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/access/SLReadPropertyCacheNode.java |
diffstat | 1 files changed, 12 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/access/SLReadPropertyCacheNode.java Fri Dec 18 16:33:00 2015 +0100 +++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/access/SLReadPropertyCacheNode.java Fri Dec 18 16:35:25 2015 +0100 @@ -40,6 +40,7 @@ */ package com.oracle.truffle.sl.nodes.access; +import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.dsl.Cached; import com.oracle.truffle.api.dsl.Specialization; @@ -102,13 +103,23 @@ } } + @Specialization(guards = "updateShape(receiver)") + public Object updateShapeAndRead(DynamicObject receiver) { + return executeObject(receiver); + } + /* * The generic case is used if the number of shapes accessed overflows the limit. */ - @Specialization(contains = "doCachedObject") + @Specialization(contains = {"doCachedObject", "updateShapeAndRead"}) @TruffleBoundary protected Object doGeneric(DynamicObject receiver) { return receiver.get(receiver, SLNull.SINGLETON); } + protected static boolean updateShape(DynamicObject object) { + CompilerDirectives.transferToInterpreter(); + return object.updateShape(); + } + }