annotate truffle/com.oracle.truffle.tck/src/com/oracle/truffle/tck/TckLanguage.java @ 22499:9bba3a7b34be

Check foreign arguments when accessing ComplexNumber/Sequence objects
author Matthias Grimmer <grimmer@ssw.jku.at>
date Mon, 14 Dec 2015 15:07:19 +0100
parents fb607f23d1eb
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22376
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
1 /*
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
2 * Copyright (c) 2015, 2015, Oracle and/or its affiliates. All rights reserved.
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
4 *
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
7 * published by the Free Software Foundation. Oracle designates this
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
8 * particular file as subject to the "Classpath" exception as provided
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
9 * by Oracle in the LICENSE file that accompanied this code.
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
10 *
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
11 * This code is distributed in the hope that it will be useful, but WITHOUT
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
14 * version 2 for more details (a copy is included in the LICENSE file that
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
15 * accompanied this code).
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
16 *
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License version
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
18 * 2 along with this work; if not, write to the Free Software Foundation,
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
20 *
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
22 * or visit www.oracle.com if you need additional information or have any
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
23 * questions.
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
24 */
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
25 package com.oracle.truffle.tck;
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
26
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
27 import com.oracle.truffle.api.CallTarget;
22499
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
28 import com.oracle.truffle.api.CompilerDirectives;
22376
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
29 import com.oracle.truffle.api.Truffle;
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
30 import com.oracle.truffle.api.TruffleLanguage;
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
31 import com.oracle.truffle.api.TruffleLanguage.Env;
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
32 import com.oracle.truffle.api.frame.MaterializedFrame;
22378
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
33 import com.oracle.truffle.api.frame.VirtualFrame;
22376
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
34 import com.oracle.truffle.api.instrument.Visualizer;
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
35 import com.oracle.truffle.api.instrument.WrapperNode;
22378
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
36 import com.oracle.truffle.api.interop.ForeignAccess;
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
37 import com.oracle.truffle.api.interop.Message;
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
38 import com.oracle.truffle.api.interop.TruffleObject;
22376
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
39 import com.oracle.truffle.api.nodes.Node;
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
40 import com.oracle.truffle.api.nodes.RootNode;
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
41 import com.oracle.truffle.api.source.Source;
22499
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
42
22376
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
43 import java.io.IOException;
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
44
22378
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
45 @TruffleLanguage.Registration(mimeType = "application/x-tck", name = "TCK", version = "1.0")
22376
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
46 public final class TckLanguage extends TruffleLanguage<Env> {
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
47 public static final TckLanguage INSTANCE = new TckLanguage();
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
48
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
49 @Override
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
50 protected Env createContext(Env env) {
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
51 return env;
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
52 }
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
53
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
54 @Override
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
55 protected CallTarget parse(Source code, Node context, String... argumentNames) throws IOException {
22378
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
56 final RootNode root;
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
57 final String txt = code.getCode();
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
58 if (txt.startsWith("TCK42:")) {
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
59 int nextColon = txt.indexOf(":", 6);
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
60 String mimeType = txt.substring(6, nextColon);
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
61 Source toParse = Source.fromText(txt.substring(nextColon + 1), "").withMimeType(mimeType);
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
62 root = new MultiplyNode(toParse);
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
63 } else {
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
64 final double value = Double.parseDouble(txt);
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
65 root = RootNode.createConstantNode(value);
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
66 }
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
67 return Truffle.getRuntime().createCallTarget(root);
22376
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
68 }
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
69
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
70 @Override
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
71 protected Object findExportedSymbol(Env context, String globalName, boolean onlyExplicit) {
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
72 return null;
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
73 }
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
74
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
75 @Override
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
76 protected Object getLanguageGlobal(Env context) {
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
77 return null;
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
78 }
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
79
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
80 @Override
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
81 protected boolean isObjectOfLanguage(Object object) {
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
82 return false;
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
83 }
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
84
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
85 @Override
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
86 protected Visualizer getVisualizer() {
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
87 return null;
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
88 }
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
89
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
90 @Override
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
91 protected boolean isInstrumentable(Node node) {
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
92 return false;
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
93 }
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
94
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
95 @Override
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
96 protected WrapperNode createWrapperNode(Node node) {
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
97 throw new UnsupportedOperationException();
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
98 }
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
99
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
100 @Override
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
101 protected Object evalInContext(Source source, Node node, MaterializedFrame mFrame) throws IOException {
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
102 throw new IOException();
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
103 }
22378
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
104
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
105 private static final class MultiplyNode extends RootNode implements TruffleObject, ForeignAccess.Factory {
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
106 private final Source code;
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
107
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
108 public MultiplyNode(Source toParse) {
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
109 super(TckLanguage.class, null, null);
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
110 this.code = toParse;
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
111 }
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
112
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
113 @Override
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
114 public Object execute(VirtualFrame frame) {
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
115 Env env = TckLanguage.INSTANCE.findContext(TckLanguage.INSTANCE.createFindContextNode());
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
116 if (frame.getArguments().length == 0) {
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
117 return this;
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
118 }
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
119 try {
22382
fb607f23d1eb Apply formating rules
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22378
diff changeset
120 CallTarget call = env.parse(code, (String) frame.getArguments()[1], (String) frame.getArguments()[2]);
22378
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
121 return call.call(6, 7);
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
122 } catch (IOException ex) {
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
123 throw new AssertionError("Cannot parse " + code, ex);
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
124 }
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
125 }
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
126
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
127 @Override
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
128 public ForeignAccess getForeignAccess() {
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
129 return ForeignAccess.create(this);
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
130 }
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
131
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
132 @Override
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
133 public boolean canHandle(TruffleObject obj) {
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
134 return obj instanceof MultiplyNode;
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
135 }
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
136
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
137 @Override
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
138 public CallTarget accessMessage(Message tree) {
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
139 if (tree == Message.IS_EXECUTABLE) {
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
140 return Truffle.getRuntime().createCallTarget(RootNode.createConstantNode(Boolean.TRUE));
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
141 } else if (Message.createExecute(2).equals(tree)) {
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
142 return Truffle.getRuntime().createCallTarget(this);
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
143 } else {
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
144 throw new IllegalArgumentException("" + tree);
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
145 }
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
146 }
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
147
06bdf4a43126 Adding parse with argument names into the API and TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22376
diff changeset
148 }
22499
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
149
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
150 public static Number expectNumber(Object o) {
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
151 if (o instanceof Number) {
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
152 return (Number) o;
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
153 }
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
154 CompilerDirectives.transferToInterpreter();
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
155 throw new IllegalArgumentException(o + " not a Number");
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
156 }
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
157
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
158 public static String expectString(Object o) {
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
159 if (o instanceof String) {
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
160 return (String) o;
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
161 }
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
162 CompilerDirectives.transferToInterpreter();
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
163 throw new IllegalArgumentException(o + " not a String");
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
164 }
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
165
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
166 public static TruffleObject expectTruffleObject(Object o) {
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
167 if (o instanceof TruffleObject) {
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
168 return (TruffleObject) o;
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
169 }
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
170 CompilerDirectives.transferToInterpreter();
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
171 throw new IllegalArgumentException(o + " not a TruffleObject");
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
172 }
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
173
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
174 public static int checkBounds(int idx, int size) {
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
175 if (idx < 0 || idx >= size) {
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
176 CompilerDirectives.transferToInterpreter();
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
177 throw new IndexOutOfBoundsException("Index: " + idx + " Size: " + size);
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
178 }
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
179 return idx;
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
180 }
9bba3a7b34be Check foreign arguments when accessing ComplexNumber/Sequence objects
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 22382
diff changeset
181
22376
72545ac338eb Adding also the TckLanguage class
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
diff changeset
182 }