Mercurial > hg > truffle
comparison truffle/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/GenericObjectAccessNode.java @ 22502:d2b4fe945c23
Add missing Truffle boundary
author | Christian Wimmer <christian.wimmer@oracle.com> |
---|---|
date | Wed, 16 Dec 2015 15:32:23 -0800 |
parents | a016a0239ad9 |
children |
comparison
equal
deleted
inserted
replaced
22501:a63bda98cfdb | 22502:d2b4fe945c23 |
---|---|
24 */ | 24 */ |
25 package com.oracle.truffle.api.interop; | 25 package com.oracle.truffle.api.interop; |
26 | 26 |
27 import com.oracle.truffle.api.CallTarget; | 27 import com.oracle.truffle.api.CallTarget; |
28 import com.oracle.truffle.api.CompilerDirectives; | 28 import com.oracle.truffle.api.CompilerDirectives; |
29 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; | |
29 import com.oracle.truffle.api.Truffle; | 30 import com.oracle.truffle.api.Truffle; |
30 import com.oracle.truffle.api.frame.VirtualFrame; | 31 import com.oracle.truffle.api.frame.VirtualFrame; |
31 import com.oracle.truffle.api.nodes.IndirectCallNode; | 32 import com.oracle.truffle.api.nodes.IndirectCallNode; |
32 | 33 |
33 final class GenericObjectAccessNode extends ObjectAccessNode { | 34 final class GenericObjectAccessNode extends ObjectAccessNode { |
45 this(prev.access); | 46 this(prev.access); |
46 } | 47 } |
47 | 48 |
48 @Override | 49 @Override |
49 public Object executeWith(VirtualFrame frame, TruffleObject truffleObject, Object[] arguments) { | 50 public Object executeWith(VirtualFrame frame, TruffleObject truffleObject, Object[] arguments) { |
51 final CallTarget ct = findCallTarget(truffleObject); | |
52 return indirectCallNode.call(frame, ct, accessArguments.executeCreate(truffleObject, arguments)); | |
53 } | |
54 | |
55 @TruffleBoundary | |
56 protected CallTarget findCallTarget(TruffleObject truffleObject) { | |
50 final ForeignAccess fa = truffleObject.getForeignAccess(); | 57 final ForeignAccess fa = truffleObject.getForeignAccess(); |
51 final CallTarget ct = fa.access(access); | 58 final CallTarget ct = fa.access(access); |
52 if (ct == null) { | 59 if (ct == null) { |
53 throw messageNotRecognizedException(fa); | 60 throw messageNotRecognizedException(fa); |
54 } | 61 } |
55 return indirectCallNode.call(frame, ct, accessArguments.executeCreate(truffleObject, arguments)); | 62 return ct; |
56 } | 63 } |
57 | 64 |
58 @CompilerDirectives.TruffleBoundary | 65 @CompilerDirectives.TruffleBoundary |
59 private RuntimeException messageNotRecognizedException(final ForeignAccess fa) { | 66 private RuntimeException messageNotRecognizedException(final ForeignAccess fa) { |
60 throw new IllegalStateException("Message " + access + " not recognized by " + fa); | 67 throw new IllegalStateException("Message " + access + " not recognized by " + fa); |