Mercurial > hg > truffle
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); |