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);