comparison truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLFunctionForeignAccess.java @ 22139:597953a8e6f0

Testing behavior of primitive types returned from an interop method.
author Jaroslav Tulach <jaroslav.tulach@oracle.com>
date Wed, 09 Sep 2015 19:18:44 +0200
parents e70b20f4bb00
children dc83cc1f94f2
comparison
equal deleted inserted replaced
22138:a583d7ffd285 22139:597953a8e6f0
47 import com.oracle.truffle.api.interop.TruffleObject; 47 import com.oracle.truffle.api.interop.TruffleObject;
48 import com.oracle.truffle.api.nodes.RootNode; 48 import com.oracle.truffle.api.nodes.RootNode;
49 import com.oracle.truffle.sl.SLLanguage; 49 import com.oracle.truffle.sl.SLLanguage;
50 import com.oracle.truffle.sl.nodes.call.SLDispatchNode; 50 import com.oracle.truffle.sl.nodes.call.SLDispatchNode;
51 import com.oracle.truffle.sl.nodes.call.SLDispatchNodeGen; 51 import com.oracle.truffle.sl.nodes.call.SLDispatchNodeGen;
52 import java.math.BigInteger; 52 import static com.oracle.truffle.sl.runtime.SLContext.fromForeignValue;
53 import java.util.List; 53 import java.util.List;
54 54
55 /** 55 /**
56 * Implementation of foreign access for {@link SLFunction}. 56 * Implementation of foreign access for {@link SLFunction}.
57 */ 57 */
100 arr = args.subList(1, args.size()).toArray(); 100 arr = args.subList(1, args.size()).toArray();
101 } else { 101 } else {
102 arr = args.toArray(); 102 arr = args.toArray();
103 } 103 }
104 for (int i = 0; i < arr.length; i++) { 104 for (int i = 0; i < arr.length; i++) {
105 Object a = arr[i]; 105 arr[i] = fromForeignValue(arr[i]);
106 if (a instanceof Long) {
107 continue;
108 }
109 if (a instanceof BigInteger) {
110 continue;
111 }
112 if (a instanceof Number) {
113 arr[i] = ((Number) a).longValue();
114 }
115 } 106 }
116 return dispatch.executeDispatch(frame, function, arr); 107 return dispatch.executeDispatch(frame, function, arr);
117 } 108 }
118
119 } 109 }
120 110
121 private static class SLForeignNullCheckNode extends RootNode { 111 private static class SLForeignNullCheckNode extends RootNode {
122 public SLForeignNullCheckNode() { 112 public SLForeignNullCheckNode() {
123 super(SLLanguage.class, null, null); 113 super(SLLanguage.class, null, null);