Mercurial > hg > graal-jvmci-8
diff graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/access/SLReadPropertyNode.java @ 18412:997bc9764a9a
SL: use the truffle object storage model to represent SL objects
author | Andreas Woess <andreas.woess@jku.at> |
---|---|
date | Tue, 18 Nov 2014 12:08:51 +0100 |
parents | dc2e000bed40 |
children | 73211b2c7c7a |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/access/SLReadPropertyNode.java Tue Nov 18 23:02:58 2014 +0100 +++ b/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/access/SLReadPropertyNode.java Tue Nov 18 12:08:51 2014 +0100 @@ -22,13 +22,13 @@ */ package com.oracle.truffle.sl.nodes.access; -import java.util.*; - import com.oracle.truffle.api.frame.*; import com.oracle.truffle.api.nodes.*; import com.oracle.truffle.api.source.*; +import com.oracle.truffle.api.utilities.*; import com.oracle.truffle.sl.*; import com.oracle.truffle.sl.nodes.*; +import com.oracle.truffle.sl.runtime.*; /** * The node for accessing a property of an object. When executed, this node first evaluates the @@ -43,18 +43,21 @@ @Child protected SLExpressionNode receiverNode; protected final String propertyName; + @Child protected SLReadPropertyCacheNode cacheNode; + private final ConditionProfile receiverTypeCondition = ConditionProfile.createBinaryProfile(); private SLReadPropertyNode(SourceSection src, SLExpressionNode receiverNode, String propertyName) { super(src); this.receiverNode = receiverNode; this.propertyName = propertyName; + this.cacheNode = SLReadPropertyCacheNode.create(propertyName); } @Override public Object executeGeneric(VirtualFrame frame) { Object object = receiverNode.executeGeneric(frame); - if (object instanceof Map) { - return ((Map<?, ?>) object).get(propertyName); + if (receiverTypeCondition.profile(SLContext.isSLObject(object))) { + return cacheNode.executeObject(SLContext.castSLObject(object)); } else { throw new SLException("unexpected receiver type"); }