Mercurial > hg > truffle
annotate graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ImplicitCastTest.java @ 13334:39694f3b0ed9
Truffle: set default TruffleInliningMaxCallerSize to 2250.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Sun, 15 Dec 2013 21:43:35 +0100 |
parents | 8e8347ecabbc |
children | 5a0c694ef735 |
rev | line source |
---|---|
11545
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
1 /* |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
2 * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
4 * |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
7 * published by the Free Software Foundation. |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
8 * |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
13 * accompanied this code). |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
14 * |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
18 * |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
21 * questions. |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
22 */ |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
23 package com.oracle.truffle.api.dsl.test; |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
24 |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
25 import org.junit.*; |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
26 |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
27 import com.oracle.truffle.api.dsl.*; |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
28 import com.oracle.truffle.api.dsl.test.ImplicitCastTestFactory.ImplicitCast0NodeFactory; |
12392
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
29 import com.oracle.truffle.api.dsl.test.ImplicitCastTestFactory.ImplicitCast1NodeFactory; |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
30 import com.oracle.truffle.api.dsl.test.ImplicitCastTestFactory.ImplicitCast2NodeFactory; |
11545
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
31 import com.oracle.truffle.api.dsl.test.NodeContainerTest.Str; |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
32 import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode; |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
33 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode; |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
34 import com.oracle.truffle.api.frame.*; |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
35 |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
36 public class ImplicitCastTest { |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
37 |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
38 @TypeSystem({int.class, boolean.class, String.class, Str.class}) |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
39 static class ImplicitCast0Types { |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
40 |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
41 @ImplicitCast |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
42 boolean castInt(int intvalue) { |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
43 return intvalue == 1 ? true : false; |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
44 } |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
45 |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
46 @ImplicitCast |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
47 boolean castString(String strvalue) { |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
48 return strvalue.equals("1"); |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
49 } |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
50 |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
51 } |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
52 |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
53 @TypeSystemReference(ImplicitCast0Types.class) |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
54 @NodeChild(value = "operand", type = ImplicitCast0Node.class) |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
55 abstract static class ImplicitCast0Node extends ValueNode { |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
56 |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
57 public abstract Object executeEvaluated(VirtualFrame frame, Object value2); |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
58 |
12392
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
59 @Specialization(order = 1) |
12391
7aa2a8c69ba3
TruffleDSL: improved code generation layout for implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
11545
diff
changeset
|
60 public String op1(String value) { |
11545
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
61 return value; |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
62 } |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
63 |
12392
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
64 @Specialization(order = 2) |
12391
7aa2a8c69ba3
TruffleDSL: improved code generation layout for implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
11545
diff
changeset
|
65 public boolean op1(boolean value) { |
11545
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
66 return value; |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
67 } |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
68 |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
69 } |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
70 |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
71 @Test |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
72 public void testImplicitCast0() { |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
73 ImplicitCast0Node node = ImplicitCast0NodeFactory.create(null); |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
74 TestRootNode<ImplicitCast0Node> root = new TestRootNode<>(node); |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
75 Assert.assertEquals("2", root.getNode().executeEvaluated(null, "2")); |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
76 Assert.assertEquals(true, root.getNode().executeEvaluated(null, 1)); |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
77 Assert.assertEquals("1", root.getNode().executeEvaluated(null, "1")); |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
78 Assert.assertEquals(true, root.getNode().executeEvaluated(null, 1)); |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
79 Assert.assertEquals(true, root.getNode().executeEvaluated(null, true)); |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
80 } |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
81 |
12392
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
82 @TypeSystemReference(ImplicitCast0Types.class) |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
83 @NodeChild(value = "operand", type = ImplicitCast1Node.class) |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
84 // TODO temporary workaround |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
85 abstract static class ImplicitCast1Node extends ValueNode { |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
86 |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
87 public abstract Object executeEvaluated(VirtualFrame frame, Object operand); |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
88 |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
89 @Specialization(order = 0) |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
90 public String op0(String value) { |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
91 return value; |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
92 } |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
93 |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
94 @Specialization(order = 1, rewriteOn = RuntimeException.class) |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
95 public boolean op1(@SuppressWarnings("unused") boolean value) throws RuntimeException { |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
96 throw new RuntimeException(); |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
97 } |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
98 |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
99 @Specialization(order = 2) |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
100 public boolean op2(boolean value) { |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
101 return value; |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
102 } |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
103 |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
104 } |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
105 |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
106 @Test |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
107 public void testImplicitCast1() { |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
108 ImplicitCast1Node node = ImplicitCast1NodeFactory.create(null); |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
109 TestRootNode<ImplicitCast1Node> root = new TestRootNode<>(node); |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
110 Assert.assertEquals("2", root.getNode().executeEvaluated(null, "2")); |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
111 Assert.assertEquals(true, root.getNode().executeEvaluated(null, 1)); |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
112 Assert.assertEquals("1", root.getNode().executeEvaluated(null, "1")); |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
113 Assert.assertEquals(true, root.getNode().executeEvaluated(null, 1)); |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
114 Assert.assertEquals(true, root.getNode().executeEvaluated(null, true)); |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
115 } |
12391
7aa2a8c69ba3
TruffleDSL: improved code generation layout for implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
11545
diff
changeset
|
116 |
12392
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
117 @TypeSystemReference(ImplicitCast0Types.class) |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
118 @NodeChildren({@NodeChild(value = "operand0", type = ImplicitCast2Node.class), @NodeChild(value = "operand1", type = ImplicitCast2Node.class, executeWith = "operand0")}) |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
119 // TODO temporary workaround |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
120 abstract static class ImplicitCast2Node extends ValueNode { |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
121 |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
122 @Specialization(order = 0) |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
123 public String op0(String v0, String v1) { |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
124 return v0 + v1; |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
125 } |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
126 |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
127 @SuppressWarnings("unused") |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
128 @Specialization(order = 1, rewriteOn = RuntimeException.class) |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
129 public boolean op1(boolean v0, boolean v1) throws RuntimeException { |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
130 throw new RuntimeException(); |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
131 } |
11545
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
132 |
12392
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
133 @Specialization(order = 2) |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
134 public boolean op2(boolean v0, boolean v1) { |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
135 return v0 && v1; |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
136 } |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
137 |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
138 public abstract Object executeEvaluated(VirtualFrame frame, Object v1); |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
139 |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
140 public abstract Object executeEvaluated(VirtualFrame frame, Object v1, Object v2); |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
141 |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
142 public abstract Object executeEvaluated(VirtualFrame frame, boolean v1, boolean v2); |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
143 |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
144 } |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
145 |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
146 @Test |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
147 public void testImplicitCast2() { |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
148 ImplicitCast2Node node = ImplicitCast2NodeFactory.create(null, null); |
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
149 TestRootNode<ImplicitCast2Node> root = new TestRootNode<>(node); |
12393
7cce548b0b60
Truffle-DSL: fixed minor issue in implicit cast tests.
Christian Humer <christian.humer@gmail.com>
parents:
12392
diff
changeset
|
150 Assert.assertEquals("42", root.getNode().executeEvaluated(null, "4", "2")); |
7cce548b0b60
Truffle-DSL: fixed minor issue in implicit cast tests.
Christian Humer <christian.humer@gmail.com>
parents:
12392
diff
changeset
|
151 Assert.assertEquals(true, root.getNode().executeEvaluated(null, 1, 1)); |
7cce548b0b60
Truffle-DSL: fixed minor issue in implicit cast tests.
Christian Humer <christian.humer@gmail.com>
parents:
12392
diff
changeset
|
152 Assert.assertEquals("42", root.getNode().executeEvaluated(null, "4", "2")); |
7cce548b0b60
Truffle-DSL: fixed minor issue in implicit cast tests.
Christian Humer <christian.humer@gmail.com>
parents:
12392
diff
changeset
|
153 Assert.assertEquals(true, root.getNode().executeEvaluated(null, 1, 1)); |
7cce548b0b60
Truffle-DSL: fixed minor issue in implicit cast tests.
Christian Humer <christian.humer@gmail.com>
parents:
12392
diff
changeset
|
154 Assert.assertEquals(true, root.getNode().executeEvaluated(null, true, true)); |
12392
4e26955b6da2
Truffle-DSL: new implicit cast code generation layout supports now executeWith.
Christian Humer <christian.humer@gmail.com>
parents:
12391
diff
changeset
|
155 } |
11545
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
156 |
2fb276f5e3e9
Truffle-DSL: implemented implicit casts.
Christian Humer <christian.humer@gmail.com>
parents:
diff
changeset
|
157 } |