Mercurial > hg > truffle
annotate truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/SLLanguage.java @ 22126:7d4e42092f39
Removing unused fields. Plus applying formatter which is able to make any comment undreadable.
author | Jaroslav Tulach <jaroslav.tulach@oracle.com> |
---|---|
date | Thu, 03 Sep 2015 16:17:00 +0200 |
parents | 8d2bdc802002 |
children | dc83cc1f94f2 ffadd23c63c8 3aad794eec0e |
rev | line source |
---|---|
7292
213c1297a814
Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff
changeset
|
1 /* |
18990
d1c1cd2530d7
Truffle/Instrumentation: clean up and repair some old unit tests
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18962
diff
changeset
|
2 * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. |
7292
213c1297a814
Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
213c1297a814
Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff
changeset
|
4 * |
21997
c07e64ecb528
Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21987
diff
changeset
|
5 * The Universal Permissive License (UPL), Version 1.0 |
22065
503529c65456
Remove trailing whitespace from UPL license
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22049
diff
changeset
|
6 * |
21997
c07e64ecb528
Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21987
diff
changeset
|
7 * Subject to the condition set forth below, permission is hereby granted to any |
c07e64ecb528
Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21987
diff
changeset
|
8 * person obtaining a copy of this software, associated documentation and/or |
c07e64ecb528
Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21987
diff
changeset
|
9 * data (collectively the "Software"), free of charge and under any and all |
c07e64ecb528
Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21987
diff
changeset
|
10 * copyright rights in the Software, and any and all patent rights owned or |
c07e64ecb528
Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21987
diff
changeset
|
11 * freely licensable by each licensor hereunder covering either (i) the |
c07e64ecb528
Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21987
diff
changeset
|
12 * unmodified Software as contributed to or provided by such licensor, or (ii) |
c07e64ecb528
Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21987
diff
changeset
|
13 * the Larger Works (as defined below), to deal in both |
22065
503529c65456
Remove trailing whitespace from UPL license
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22049
diff
changeset
|
14 * |
21997
c07e64ecb528
Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21987
diff
changeset
|
15 * (a) the Software, and |
22065
503529c65456
Remove trailing whitespace from UPL license
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22049
diff
changeset
|
16 * |
21997
c07e64ecb528
Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21987
diff
changeset
|
17 * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if |
c07e64ecb528
Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21987
diff
changeset
|
18 * one is included with the Software each a "Larger Work" to which the Software |
c07e64ecb528
Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21987
diff
changeset
|
19 * is contributed by such licensors), |
22065
503529c65456
Remove trailing whitespace from UPL license
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22049
diff
changeset
|
20 * |
21997
c07e64ecb528
Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21987
diff
changeset
|
21 * without restriction, including without limitation the rights to copy, create |
c07e64ecb528
Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21987
diff
changeset
|
22 * derivative works of, display, perform, and distribute the Software and make, |
c07e64ecb528
Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21987
diff
changeset
|
23 * use, sell, offer for sale, import, export, have made, and have sold the |
c07e64ecb528
Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21987
diff
changeset
|
24 * Software and the Larger Work(s), and to sublicense the foregoing rights on |
c07e64ecb528
Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21987
diff
changeset
|
25 * either these or other terms. |
22065
503529c65456
Remove trailing whitespace from UPL license
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22049
diff
changeset
|
26 * |
21997
c07e64ecb528
Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21987
diff
changeset
|
27 * This license is subject to the following condition: |
22065
503529c65456
Remove trailing whitespace from UPL license
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22049
diff
changeset
|
28 * |
21997
c07e64ecb528
Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21987
diff
changeset
|
29 * The above copyright notice and either this complete permission notice or at a |
c07e64ecb528
Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21987
diff
changeset
|
30 * minimum a reference to the UPL must be included in all copies or substantial |
c07e64ecb528
Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21987
diff
changeset
|
31 * portions of the Software. |
22065
503529c65456
Remove trailing whitespace from UPL license
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22049
diff
changeset
|
32 * |
21997
c07e64ecb528
Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21987
diff
changeset
|
33 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
c07e64ecb528
Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21987
diff
changeset
|
34 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
c07e64ecb528
Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21987
diff
changeset
|
35 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
c07e64ecb528
Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21987
diff
changeset
|
36 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
c07e64ecb528
Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21987
diff
changeset
|
37 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
c07e64ecb528
Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21987
diff
changeset
|
38 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
c07e64ecb528
Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21987
diff
changeset
|
39 * SOFTWARE. |
7292
213c1297a814
Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff
changeset
|
40 */ |
213c1297a814
Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff
changeset
|
41 package com.oracle.truffle.sl; |
213c1297a814
Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff
changeset
|
42 |
213c1297a814
Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff
changeset
|
43 import com.oracle.truffle.api.*; |
21890
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
44 import com.oracle.truffle.api.debug.*; |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
45 import com.oracle.truffle.api.dsl.*; |
21890
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
46 import com.oracle.truffle.api.frame.*; |
18990
d1c1cd2530d7
Truffle/Instrumentation: clean up and repair some old unit tests
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18962
diff
changeset
|
47 import com.oracle.truffle.api.instrument.*; |
7503
31da1716950f
Updated truffle-sl for the changed operation code generation.
Christian Humer <christian.humer@gmail.com>
parents:
7292
diff
changeset
|
48 import com.oracle.truffle.api.nodes.*; |
13761
7c418666c6c9
Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13455
diff
changeset
|
49 import com.oracle.truffle.api.source.*; |
21554
b1530a6cce8c
renamed com.oracle.graal.[debug|options|hotspotvmconfig]* modules to com.oracle.jvmci.[debug|options|hotspotvmconfig]* modules (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21481
diff
changeset
|
50 import com.oracle.truffle.api.vm.*; |
21490
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
51 import com.oracle.truffle.api.vm.TruffleVM.Symbol; |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
52 import com.oracle.truffle.sl.builtins.*; |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
53 import com.oracle.truffle.sl.nodes.*; |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
54 import com.oracle.truffle.sl.nodes.call.*; |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
55 import com.oracle.truffle.sl.nodes.controlflow.*; |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
56 import com.oracle.truffle.sl.nodes.expression.*; |
18990
d1c1cd2530d7
Truffle/Instrumentation: clean up and repair some old unit tests
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18962
diff
changeset
|
57 import com.oracle.truffle.sl.nodes.instrument.*; |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
58 import com.oracle.truffle.sl.nodes.local.*; |
13761
7c418666c6c9
Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13455
diff
changeset
|
59 import com.oracle.truffle.sl.parser.*; |
12752
71991b7a0f14
SL: Enhanced SimpleLanguage with support for if statements, function calls, function caching + inlining and builtins.
Christian Humer <christian.humer@gmail.com>
parents:
8959
diff
changeset
|
60 import com.oracle.truffle.sl.runtime.*; |
22126
7d4e42092f39
Removing unused fields. Plus applying formatter which is able to make any comment undreadable.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22125
diff
changeset
|
61 import java.io.BufferedReader; |
7d4e42092f39
Removing unused fields. Plus applying formatter which is able to make any comment undreadable.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22125
diff
changeset
|
62 import java.io.IOException; |
7d4e42092f39
Removing unused fields. Plus applying formatter which is able to make any comment undreadable.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22125
diff
changeset
|
63 import java.io.InputStreamReader; |
7d4e42092f39
Removing unused fields. Plus applying formatter which is able to make any comment undreadable.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22125
diff
changeset
|
64 import java.io.PrintWriter; |
7d4e42092f39
Removing unused fields. Plus applying formatter which is able to make any comment undreadable.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22125
diff
changeset
|
65 import java.math.BigInteger; |
22104
cf19259edf87
TruffleVM.eval and Source.withMimeType
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22070
diff
changeset
|
66 import java.nio.file.Path; |
22126
7d4e42092f39
Removing unused fields. Plus applying formatter which is able to make any comment undreadable.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22125
diff
changeset
|
67 import java.util.Collections; |
7d4e42092f39
Removing unused fields. Plus applying formatter which is able to make any comment undreadable.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22125
diff
changeset
|
68 import java.util.List; |
7292
213c1297a814
Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff
changeset
|
69 |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
70 /** |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
71 * SL is a simple language to demonstrate and showcase features of Truffle. The implementation is as |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
72 * simple and clean as possible in order to help understanding the ideas and concepts of Truffle. |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
73 * The language has first class functions, but no object model. |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
74 * <p> |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
75 * SL is dynamically typed, i.e., there are no type names specified by the programmer. SL is |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
76 * strongly typed, i.e., there is no automatic conversion between types. If an operation is not |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
77 * available for the types encountered at run time, a type error is reported and execution is |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
78 * stopped. For example, {@code 4 - "2"} results in a type error because subtraction is only defined |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
79 * for numbers. |
14906 | 80 * |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
81 * <p> |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
82 * <b>Types:</b> |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
83 * <ul> |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
84 * <li>Number: arbitrary precision integer numbers. The implementation uses the Java primitive type |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
85 * {@code long} to represent numbers that fit into the 64 bit range, and {@link BigInteger} for |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
86 * numbers that exceed the range. Using a primitive type such as {@code long} is crucial for |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
87 * performance. |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
88 * <li>Boolean: implemented as the Java primitive type {@code boolean}. |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
89 * <li>String: implemented as the Java standard type {@link String}. |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
90 * <li>Function: implementation type {@link SLFunction}. |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
91 * <li>Null (with only one value {@code null}): implemented as the singleton |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
92 * {@link SLNull#SINGLETON}. |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
93 * </ul> |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
94 * The class {@link SLTypes} lists these types for the Truffle DSL, i.e., for type-specialized |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
95 * operations that are specified using Truffle DSL annotations. |
14906 | 96 * |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
97 * <p> |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
98 * <b>Language concepts:</b> |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
99 * <ul> |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
100 * <li>Literals for {@link SLBigIntegerLiteralNode numbers} , {@link SLStringLiteralNode strings}, |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
101 * and {@link SLFunctionLiteralNode functions}. |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
102 * <li>Basic arithmetic, logical, and comparison operations: {@link SLAddNode +}, {@link SLSubNode |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
103 * -}, {@link SLMulNode *}, {@link SLDivNode /}, {@link SLLogicalAndNode logical and}, |
14906 | 104 * {@link SLLogicalOrNode logical or}, {@link SLEqualNode ==}, !=, {@link SLLessThanNode <}, |
105 * {@link SLLessOrEqualNode ≤}, >, ≥. | |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
106 * <li>Local variables: local variables must be defined (via a {@link SLWriteLocalVariableNode |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
107 * write}) before they can be used (by a {@link SLReadLocalVariableNode read}). Local variables are |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
108 * not visible outside of the block where they were first defined. |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
109 * <li>Basic control flow statements: {@link SLBlockNode blocks}, {@link SLIfNode if}, |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
110 * {@link SLWhileNode while} with {@link SLBreakNode break} and {@link SLContinueNode continue}, |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
111 * {@link SLReturnNode return}. |
13943
89ac75425681
SL: small cleanups
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13882
diff
changeset
|
112 * <li>Function calls: {@link SLInvokeNode invocations} are efficiently implemented with |
20956
2170de9acab0
SL: use DSL for call dispatches.
Christian Humer <christian.humer@gmail.com>
parents:
18990
diff
changeset
|
113 * {@link SLDispatchNode polymorphic inline caches}. |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
114 * </ul> |
14906 | 115 * |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
116 * <p> |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
117 * <b>Syntax and parsing:</b><br> |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
118 * The syntax is described as an attributed grammar. The {@link Parser} and {@link Scanner} are |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
119 * automatically generated by the parser generator Coco/R (available from <a |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
120 * href="http://ssw.jku.at/coco/">http://ssw.jku.at/coco/</a>). The grammar contains semantic |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
121 * actions that build the AST for a method. To keep these semantic actions short, they are mostly |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
122 * calls to the {@link SLNodeFactory} that performs the actual node creation. All functions found in |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
123 * the SL source are added to the {@link SLFunctionRegistry}, which is accessible from the |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
124 * {@link SLContext}. |
14906 | 125 * |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
126 * <p> |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
127 * <b>Builtin functions:</b><br> |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
128 * Library functions that are available to every SL source without prior definition are called |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
129 * builtin functions. They are added to the {@link SLFunctionRegistry} when the {@link SLContext} is |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
130 * created. There current builtin functions are |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
131 * <ul> |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
132 * <li>{@link SLReadlnBuiltin readln}: Read a String from the {@link SLContext#getInput() standard |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
133 * input}. |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
134 * <li>{@link SLPrintlnBuiltin println}: Write a value to the {@link SLContext#getOutput() standard |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
135 * output}. |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
136 * <li>{@link SLNanoTimeBuiltin nanoTime}: Returns the value of a high-resolution time, in |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
137 * nanoseconds. |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
138 * <li>{@link SLDefineFunctionBuiltin defineFunction}: Parses the functions provided as a String |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
139 * argument and adds them to the function registry. Functions that are already defined are replaced |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
140 * with the new version. |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
141 * </ul> |
22126
7d4e42092f39
Removing unused fields. Plus applying formatter which is able to make any comment undreadable.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22125
diff
changeset
|
142 */ |
7d4e42092f39
Removing unused fields. Plus applying formatter which is able to make any comment undreadable.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22125
diff
changeset
|
143 |
7d4e42092f39
Removing unused fields. Plus applying formatter which is able to make any comment undreadable.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22125
diff
changeset
|
144 /* |
7d4e42092f39
Removing unused fields. Plus applying formatter which is able to make any comment undreadable.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22125
diff
changeset
|
145 * |
7d4e42092f39
Removing unused fields. Plus applying formatter which is able to make any comment undreadable.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22125
diff
changeset
|
146 * <p> <b>Tools:</b><br> The use of some of Truffle's support for developer tools (based on the |
7d4e42092f39
Removing unused fields. Plus applying formatter which is able to make any comment undreadable.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22125
diff
changeset
|
147 * Truffle Instrumentation Framework) are demonstrated in this file, for example: <ul> <li>a |
7d4e42092f39
Removing unused fields. Plus applying formatter which is able to make any comment undreadable.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22125
diff
changeset
|
148 * {@linkplain NodeExecCounter counter for node executions}, tabulated by node type; and</li> <li>a |
7d4e42092f39
Removing unused fields. Plus applying formatter which is able to make any comment undreadable.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22125
diff
changeset
|
149 * simple {@linkplain CoverageTracker code coverage engine}.</li> </ul> In each case, the tool is |
7d4e42092f39
Removing unused fields. Plus applying formatter which is able to make any comment undreadable.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22125
diff
changeset
|
150 * enabled if a corresponding local boolean variable in this file is set to {@code true}. Results |
7d4e42092f39
Removing unused fields. Plus applying formatter which is able to make any comment undreadable.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22125
diff
changeset
|
151 * are printed at the end of the execution using each tool's <em>default printer</em>. |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
152 */ |
21890
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
153 @TruffleLanguage.Registration(name = "SL", version = "0.5", mimeType = "application/x-sl") |
22067
e206ebd965f2
checkstyle lint
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22066
diff
changeset
|
154 public final class SLLanguage extends TruffleLanguage<SLContext> { |
21490
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
155 private static List<NodeFactory<? extends SLBuiltinNode>> builtins = Collections.emptyList(); |
21890
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
156 private static Visualizer visualizer = new SLDefaultVisualizer(); |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
157 private static ASTProber registeredASTProber; // non-null if prober already registered |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
158 private DebugSupportProvider debugSupport; |
21468
99942eac9c6d
Introducing TruffleVM - a central place to invoke code in any registered TruffleLanguage.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
20956
diff
changeset
|
159 |
22066
78c3d3d8d86e
Clearly separating the TruffleLanguage definition from context used during its execution. TruffleLanguage now has to have public static field INSTANCE and override createContext method.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22065
diff
changeset
|
160 private SLLanguage() { |
78c3d3d8d86e
Clearly separating the TruffleLanguage definition from context used during its execution. TruffleLanguage now has to have public static field INSTANCE and override createContext method.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22065
diff
changeset
|
161 } |
78c3d3d8d86e
Clearly separating the TruffleLanguage definition from context used during its execution. TruffleLanguage now has to have public static field INSTANCE and override createContext method.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22065
diff
changeset
|
162 |
78c3d3d8d86e
Clearly separating the TruffleLanguage definition from context used during its execution. TruffleLanguage now has to have public static field INSTANCE and override createContext method.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22065
diff
changeset
|
163 public static final SLLanguage INSTANCE = new SLLanguage(); |
78c3d3d8d86e
Clearly separating the TruffleLanguage definition from context used during its execution. TruffleLanguage now has to have public static field INSTANCE and override createContext method.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22065
diff
changeset
|
164 |
78c3d3d8d86e
Clearly separating the TruffleLanguage definition from context used during its execution. TruffleLanguage now has to have public static field INSTANCE and override createContext method.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22065
diff
changeset
|
165 @Override |
78c3d3d8d86e
Clearly separating the TruffleLanguage definition from context used during its execution. TruffleLanguage now has to have public static field INSTANCE and override createContext method.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22065
diff
changeset
|
166 protected SLContext createContext(Env env) { |
78c3d3d8d86e
Clearly separating the TruffleLanguage definition from context used during its execution. TruffleLanguage now has to have public static field INSTANCE and override createContext method.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22065
diff
changeset
|
167 SLContext context = new SLContext(this, new BufferedReader(env.stdIn()), new PrintWriter(env.stdOut(), true)); |
21490
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
168 for (NodeFactory<? extends SLBuiltinNode> builtin : builtins) { |
22046
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
169 context.installBuiltin(builtin, true); |
21490
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
170 } |
22066
78c3d3d8d86e
Clearly separating the TruffleLanguage definition from context used during its execution. TruffleLanguage now has to have public static field INSTANCE and override createContext method.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22065
diff
changeset
|
171 return context; |
21468
99942eac9c6d
Introducing TruffleVM - a central place to invoke code in any registered TruffleLanguage.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
20956
diff
changeset
|
172 } |
7292
213c1297a814
Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff
changeset
|
173 |
21686
5fa7935c5de3
Truffle/Instrumentation: fix the small tool demonstration in SL
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21649
diff
changeset
|
174 /* Small tools that can be installed for demonstration */ |
22125
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
175 // private static NodeExecCounter nodeExecCounter = null; |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
176 // private static NodeExecCounter statementExecCounter = null; |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
177 // private static CoverageTracker coverageTracker = null; |
21686
5fa7935c5de3
Truffle/Instrumentation: fix the small tool demonstration in SL
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21649
diff
changeset
|
178 |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
179 /** |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
180 * The main entry point. Use the mx command "mx sl" to run it with the correct class path setup. |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
181 */ |
13836
64c77f0577bb
More documentation and improvements of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13821
diff
changeset
|
182 public static void main(String[] args) throws IOException { |
21490
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
183 TruffleVM vm = TruffleVM.newVM().build(); |
21468
99942eac9c6d
Introducing TruffleVM - a central place to invoke code in any registered TruffleLanguage.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
20956
diff
changeset
|
184 assert vm.getLanguages().containsKey("application/x-sl"); |
13836
64c77f0577bb
More documentation and improvements of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13821
diff
changeset
|
185 |
21686
5fa7935c5de3
Truffle/Instrumentation: fix the small tool demonstration in SL
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21649
diff
changeset
|
186 setupToolDemos(); |
5fa7935c5de3
Truffle/Instrumentation: fix the small tool demonstration in SL
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21649
diff
changeset
|
187 |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
188 int repeats = 1; |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
189 if (args.length >= 2) { |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
190 repeats = Integer.parseInt(args[1]); |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
191 } |
12752
71991b7a0f14
SL: Enhanced SimpleLanguage with support for if statements, function calls, function caching + inlining and builtins.
Christian Humer <christian.humer@gmail.com>
parents:
8959
diff
changeset
|
192 |
22104
cf19259edf87
TruffleVM.eval and Source.withMimeType
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22070
diff
changeset
|
193 Source source; |
21490
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
194 if (args.length == 0) { |
22104
cf19259edf87
TruffleVM.eval and Source.withMimeType
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22070
diff
changeset
|
195 source = Source.fromReader(new InputStreamReader(System.in), "<stdin>").withMimeType("application/x-sl"); |
21490
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
196 } else { |
22104
cf19259edf87
TruffleVM.eval and Source.withMimeType
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22070
diff
changeset
|
197 source = Source.fromFileName(args[0]); |
21490
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
198 } |
22104
cf19259edf87
TruffleVM.eval and Source.withMimeType
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22070
diff
changeset
|
199 vm.eval(source); |
21490
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
200 Symbol main = vm.findGlobalSymbol("main"); |
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
201 if (main == null) { |
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
202 throw new SLException("No function main() defined in SL source file."); |
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
203 } |
21468
99942eac9c6d
Introducing TruffleVM - a central place to invoke code in any registered TruffleLanguage.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
20956
diff
changeset
|
204 while (repeats-- > 0) { |
21490
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
205 main.invoke(null); |
21468
99942eac9c6d
Introducing TruffleVM - a central place to invoke code in any registered TruffleLanguage.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
20956
diff
changeset
|
206 } |
21686
5fa7935c5de3
Truffle/Instrumentation: fix the small tool demonstration in SL
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21649
diff
changeset
|
207 reportToolDemos(); |
13455
69d2e4baa215
Truffle: new infrastructure related to instrumentation, and in particular debugging: support for managing Source objects; framework for generalized "instrumentation proxy nodes" (to be inserted into ASTs with no runtime cost when inactive), and "probes" (which can be attached to proxy nodes to receive event notification); a rudimentary interface and abstract implementation for a "debug manager" (mostly a placeholder at this point); and the beginning of a language-agnostic ExecutionContext interface.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
12752
diff
changeset
|
208 } |
69d2e4baa215
Truffle: new infrastructure related to instrumentation, and in particular debugging: support for managing Source objects; framework for generalized "instrumentation proxy nodes" (to be inserted into ASTs with no runtime cost when inactive), and "probes" (which can be attached to proxy nodes to receive event notification); a rudimentary interface and abstract implementation for a "debug manager" (mostly a placeholder at this point); and the beginning of a language-agnostic ExecutionContext interface.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
12752
diff
changeset
|
209 |
21649
1c76a5662753
Merge with 645f170013a451083414ff695412c465e9d2ebf0
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21578
diff
changeset
|
210 /** |
1c76a5662753
Merge with 645f170013a451083414ff695412c465e9d2ebf0
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21578
diff
changeset
|
211 * Temporary method during API evolution, supports debugger integration. |
1c76a5662753
Merge with 645f170013a451083414ff695412c465e9d2ebf0
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21578
diff
changeset
|
212 */ |
21573
ffdd2ec86f42
Truffle/Debugging: temporary patches so the DebugEngine will work (partially) with the new TruffleVM framework.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21570
diff
changeset
|
213 public static void run(Source source) throws IOException { |
ffdd2ec86f42
Truffle/Debugging: temporary patches so the DebugEngine will work (partially) with the new TruffleVM framework.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21570
diff
changeset
|
214 TruffleVM vm = TruffleVM.newVM().build(); |
ffdd2ec86f42
Truffle/Debugging: temporary patches so the DebugEngine will work (partially) with the new TruffleVM framework.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21570
diff
changeset
|
215 assert vm.getLanguages().containsKey("application/x-sl"); |
22104
cf19259edf87
TruffleVM.eval and Source.withMimeType
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22070
diff
changeset
|
216 vm.eval(source); |
21573
ffdd2ec86f42
Truffle/Debugging: temporary patches so the DebugEngine will work (partially) with the new TruffleVM framework.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21570
diff
changeset
|
217 Symbol main = vm.findGlobalSymbol("main"); |
ffdd2ec86f42
Truffle/Debugging: temporary patches so the DebugEngine will work (partially) with the new TruffleVM framework.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21570
diff
changeset
|
218 if (main == null) { |
ffdd2ec86f42
Truffle/Debugging: temporary patches so the DebugEngine will work (partially) with the new TruffleVM framework.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21570
diff
changeset
|
219 throw new SLException("No function main() defined in SL source file."); |
ffdd2ec86f42
Truffle/Debugging: temporary patches so the DebugEngine will work (partially) with the new TruffleVM framework.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21570
diff
changeset
|
220 } |
ffdd2ec86f42
Truffle/Debugging: temporary patches so the DebugEngine will work (partially) with the new TruffleVM framework.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21570
diff
changeset
|
221 main.invoke(null); |
13455
69d2e4baa215
Truffle: new infrastructure related to instrumentation, and in particular debugging: support for managing Source objects; framework for generalized "instrumentation proxy nodes" (to be inserted into ASTs with no runtime cost when inactive), and "probes" (which can be attached to proxy nodes to receive event notification); a rudimentary interface and abstract implementation for a "debug manager" (mostly a placeholder at this point); and the beginning of a language-agnostic ExecutionContext interface.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
12752
diff
changeset
|
222 } |
69d2e4baa215
Truffle: new infrastructure related to instrumentation, and in particular debugging: support for managing Source objects; framework for generalized "instrumentation proxy nodes" (to be inserted into ASTs with no runtime cost when inactive), and "probes" (which can be attached to proxy nodes to receive event notification); a rudimentary interface and abstract implementation for a "debug manager" (mostly a placeholder at this point); and the beginning of a language-agnostic ExecutionContext interface.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
12752
diff
changeset
|
223 |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
224 /** |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
225 * Parse and run the specified SL source. Factored out in a separate method so that it can also |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
226 * be used by the unit test harness. |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
227 */ |
22104
cf19259edf87
TruffleVM.eval and Source.withMimeType
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22070
diff
changeset
|
228 public static long run(TruffleVM context, Path path, PrintWriter logOutput, PrintWriter out, int repeats, List<NodeFactory<? extends SLBuiltinNode>> currentBuiltins) throws IOException { |
21490
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
229 builtins = currentBuiltins; |
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
230 |
13761
7c418666c6c9
Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13455
diff
changeset
|
231 if (logOutput != null) { |
7c418666c6c9
Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13455
diff
changeset
|
232 logOutput.println("== running on " + Truffle.getRuntime().getName()); |
16512
abe7128ca473
SL: upgrade source attribution
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16067
diff
changeset
|
233 // logOutput.println("Source = " + source.getCode()); |
13455
69d2e4baa215
Truffle: new infrastructure related to instrumentation, and in particular debugging: support for managing Source objects; framework for generalized "instrumentation proxy nodes" (to be inserted into ASTs with no runtime cost when inactive), and "probes" (which can be attached to proxy nodes to receive event notification); a rudimentary interface and abstract implementation for a "debug manager" (mostly a placeholder at this point); and the beginning of a language-agnostic ExecutionContext interface.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
12752
diff
changeset
|
234 } |
69d2e4baa215
Truffle: new infrastructure related to instrumentation, and in particular debugging: support for managing Source objects; framework for generalized "instrumentation proxy nodes" (to be inserted into ASTs with no runtime cost when inactive), and "probes" (which can be attached to proxy nodes to receive event notification); a rudimentary interface and abstract implementation for a "debug manager" (mostly a placeholder at this point); and the beginning of a language-agnostic ExecutionContext interface.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
12752
diff
changeset
|
235 |
22104
cf19259edf87
TruffleVM.eval and Source.withMimeType
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22070
diff
changeset
|
236 Source src = Source.fromFileName(path.toString()); |
18485
e3c95cbbb50c
Truffle Instrumentation: major API revision, based around the Probe and Instrument classes; add Instrumentable API for language implementors, with most details automated; reimplemented to handle AST splitting automatically; more JUnit tests.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16880
diff
changeset
|
237 /* Parse the SL source file. */ |
22121
d045a505c2b3
Asynchronous TruffleVM can be created by providing own Executor when configuring the TruffleVM.Builder
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22105
diff
changeset
|
238 Object result = context.eval(src.withMimeType("application/x-sl")).get(); |
21490
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
239 if (result != null) { |
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
240 out.println(result); |
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
241 } |
15891
09ac9ac9c4fc
Truffle: SourceManager renamed to SourceFactory
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
14991
diff
changeset
|
242 |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
243 /* Lookup our main entry point, which is per definition always named "main". */ |
21490
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
244 Symbol main = context.findGlobalSymbol("main"); |
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
245 if (main == null) { |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
246 throw new SLException("No function main() defined in SL source file."); |
7292
213c1297a814
Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff
changeset
|
247 } |
213c1297a814
Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff
changeset
|
248 |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
249 /* Change to true if you want to see the AST on the console. */ |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
250 boolean printASTToLog = false; |
16512
abe7128ca473
SL: upgrade source attribution
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16067
diff
changeset
|
251 /* Change to true if you want to see source attribution for the AST to the console */ |
16687
7c8ddb4233cd
SL/SourceAttribution: restore some attribution fixes that were lost in a tussle with hg; turn off tracing code in SL tests.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16675
diff
changeset
|
252 boolean printSourceAttributionToLog = false; |
13862
f9b934e1e172
SL: Make SL use the new UnsupportedSpecializationException#getSuppliedNodes() for error messages; Disabled dumping by default to IGV.
Christian Humer <christian.humer@gmail.com>
parents:
13836
diff
changeset
|
253 /* Change to dump the AST to IGV over the network. */ |
f9b934e1e172
SL: Make SL use the new UnsupportedSpecializationException#getSuppliedNodes() for error messages; Disabled dumping by default to IGV.
Christian Humer <christian.humer@gmail.com>
parents:
13836
diff
changeset
|
254 boolean dumpASTToIGV = false; |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
255 |
22047
227ed03852de
Findbugs complains about the LAST static variable assignment. Remove, as it is not used anyway.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22046
diff
changeset
|
256 printScript("before execution", null, logOutput, printASTToLog, printSourceAttributionToLog, dumpASTToIGV); |
18962
cfb85e1f4ca5
Prevent polluting SLFunctionRegistry (via SLNodeFactory.createRead()) with LHS names of assignment
Paul Woegerer <paul.woegerer@oracle.com>
parents:
18762
diff
changeset
|
257 long totalRuntime = 0; |
7292
213c1297a814
Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff
changeset
|
258 try { |
213c1297a814
Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff
changeset
|
259 for (int i = 0; i < repeats; i++) { |
213c1297a814
Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff
changeset
|
260 long start = System.nanoTime(); |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
261 /* Call the main entry point, without any arguments. */ |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
262 try { |
22121
d045a505c2b3
Asynchronous TruffleVM can be created by providing own Executor when configuring the TruffleVM.Builder
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22105
diff
changeset
|
263 result = main.invoke(null).get(); |
21689
ed234a3178af
Behavior of null-like values is now part of the TCK
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21686
diff
changeset
|
264 if (result != null) { |
21490
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
265 out.println(result); |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
266 } |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
267 } catch (UnsupportedSpecializationException ex) { |
21490
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
268 out.println(formatTypeError(ex)); |
21493
99e3f4c5c853
SL: handle undefined functions gracefully.
Christian Humer <christian.humer@gmail.com>
parents:
21490
diff
changeset
|
269 } catch (SLUndefinedFunctionException ex) { |
99e3f4c5c853
SL: handle undefined functions gracefully.
Christian Humer <christian.humer@gmail.com>
parents:
21490
diff
changeset
|
270 out.println(String.format("Undefined function: %s", ex.getFunctionName())); |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
271 } |
7292
213c1297a814
Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff
changeset
|
272 long end = System.nanoTime(); |
18962
cfb85e1f4ca5
Prevent polluting SLFunctionRegistry (via SLNodeFactory.createRead()) with LHS names of assignment
Paul Woegerer <paul.woegerer@oracle.com>
parents:
18762
diff
changeset
|
273 totalRuntime += end - start; |
7292
213c1297a814
Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff
changeset
|
274 |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
275 if (logOutput != null && repeats > 1) { |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
276 logOutput.println("== iteration " + (i + 1) + ": " + ((end - start) / 1000000) + " ms"); |
7292
213c1297a814
Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff
changeset
|
277 } |
213c1297a814
Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff
changeset
|
278 } |
213c1297a814
Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff
changeset
|
279 |
213c1297a814
Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff
changeset
|
280 } finally { |
22047
227ed03852de
Findbugs complains about the LAST static variable assignment. Remove, as it is not used anyway.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22046
diff
changeset
|
281 printScript("after execution", null, logOutput, printASTToLog, printSourceAttributionToLog, dumpASTToIGV); |
7292
213c1297a814
Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff
changeset
|
282 } |
18962
cfb85e1f4ca5
Prevent polluting SLFunctionRegistry (via SLNodeFactory.createRead()) with LHS names of assignment
Paul Woegerer <paul.woegerer@oracle.com>
parents:
18762
diff
changeset
|
283 return totalRuntime; |
7292
213c1297a814
Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff
changeset
|
284 } |
12752
71991b7a0f14
SL: Enhanced SimpleLanguage with support for if statements, function calls, function caching + inlining and builtins.
Christian Humer <christian.humer@gmail.com>
parents:
8959
diff
changeset
|
285 |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
286 /** |
13882
afd6fa5e8229
SL: Feedback from reviewers
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13862
diff
changeset
|
287 * When dumpASTToIGV is true: dumps the AST of all functions to the IGV visualizer, via a socket |
afd6fa5e8229
SL: Feedback from reviewers
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13862
diff
changeset
|
288 * connection. IGV can be started with the mx command "mx igv". |
afd6fa5e8229
SL: Feedback from reviewers
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13862
diff
changeset
|
289 * <p> |
afd6fa5e8229
SL: Feedback from reviewers
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13862
diff
changeset
|
290 * When printASTToLog is true: prints the ASTs to the console. |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
291 */ |
21469
286aef83a9a7
Replacing PrintStream with PrintWriter in the simple language
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21468
diff
changeset
|
292 private static void printScript(String groupName, SLContext context, PrintWriter logOutput, boolean printASTToLog, boolean printSourceAttributionToLog, boolean dumpASTToIGV) { |
13862
f9b934e1e172
SL: Make SL use the new UnsupportedSpecializationException#getSuppliedNodes() for error messages; Disabled dumping by default to IGV.
Christian Humer <christian.humer@gmail.com>
parents:
13836
diff
changeset
|
293 if (dumpASTToIGV) { |
f9b934e1e172
SL: Make SL use the new UnsupportedSpecializationException#getSuppliedNodes() for error messages; Disabled dumping by default to IGV.
Christian Humer <christian.humer@gmail.com>
parents:
13836
diff
changeset
|
294 GraphPrintVisitor graphPrinter = new GraphPrintVisitor(); |
f9b934e1e172
SL: Make SL use the new UnsupportedSpecializationException#getSuppliedNodes() for error messages; Disabled dumping by default to IGV.
Christian Humer <christian.humer@gmail.com>
parents:
13836
diff
changeset
|
295 graphPrinter.beginGroup(groupName); |
f9b934e1e172
SL: Make SL use the new UnsupportedSpecializationException#getSuppliedNodes() for error messages; Disabled dumping by default to IGV.
Christian Humer <christian.humer@gmail.com>
parents:
13836
diff
changeset
|
296 for (SLFunction function : context.getFunctionRegistry().getFunctions()) { |
f9b934e1e172
SL: Make SL use the new UnsupportedSpecializationException#getSuppliedNodes() for error messages; Disabled dumping by default to IGV.
Christian Humer <christian.humer@gmail.com>
parents:
13836
diff
changeset
|
297 RootCallTarget callTarget = function.getCallTarget(); |
f9b934e1e172
SL: Make SL use the new UnsupportedSpecializationException#getSuppliedNodes() for error messages; Disabled dumping by default to IGV.
Christian Humer <christian.humer@gmail.com>
parents:
13836
diff
changeset
|
298 if (callTarget != null) { |
f9b934e1e172
SL: Make SL use the new UnsupportedSpecializationException#getSuppliedNodes() for error messages; Disabled dumping by default to IGV.
Christian Humer <christian.humer@gmail.com>
parents:
13836
diff
changeset
|
299 graphPrinter.beginGraph(function.toString()).visit(callTarget.getRootNode()); |
f9b934e1e172
SL: Make SL use the new UnsupportedSpecializationException#getSuppliedNodes() for error messages; Disabled dumping by default to IGV.
Christian Humer <christian.humer@gmail.com>
parents:
13836
diff
changeset
|
300 } |
f9b934e1e172
SL: Make SL use the new UnsupportedSpecializationException#getSuppliedNodes() for error messages; Disabled dumping by default to IGV.
Christian Humer <christian.humer@gmail.com>
parents:
13836
diff
changeset
|
301 } |
f9b934e1e172
SL: Make SL use the new UnsupportedSpecializationException#getSuppliedNodes() for error messages; Disabled dumping by default to IGV.
Christian Humer <christian.humer@gmail.com>
parents:
13836
diff
changeset
|
302 graphPrinter.printToNetwork(true); |
f9b934e1e172
SL: Make SL use the new UnsupportedSpecializationException#getSuppliedNodes() for error messages; Disabled dumping by default to IGV.
Christian Humer <christian.humer@gmail.com>
parents:
13836
diff
changeset
|
303 } |
f9b934e1e172
SL: Make SL use the new UnsupportedSpecializationException#getSuppliedNodes() for error messages; Disabled dumping by default to IGV.
Christian Humer <christian.humer@gmail.com>
parents:
13836
diff
changeset
|
304 if (printASTToLog && logOutput != null) { |
f9b934e1e172
SL: Make SL use the new UnsupportedSpecializationException#getSuppliedNodes() for error messages; Disabled dumping by default to IGV.
Christian Humer <christian.humer@gmail.com>
parents:
13836
diff
changeset
|
305 for (SLFunction function : context.getFunctionRegistry().getFunctions()) { |
f9b934e1e172
SL: Make SL use the new UnsupportedSpecializationException#getSuppliedNodes() for error messages; Disabled dumping by default to IGV.
Christian Humer <christian.humer@gmail.com>
parents:
13836
diff
changeset
|
306 RootCallTarget callTarget = function.getCallTarget(); |
f9b934e1e172
SL: Make SL use the new UnsupportedSpecializationException#getSuppliedNodes() for error messages; Disabled dumping by default to IGV.
Christian Humer <christian.humer@gmail.com>
parents:
13836
diff
changeset
|
307 if (callTarget != null) { |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
308 logOutput.println("=== " + function); |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
309 NodeUtil.printTree(logOutput, callTarget.getRootNode()); |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
310 } |
13761
7c418666c6c9
Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13455
diff
changeset
|
311 } |
7c418666c6c9
Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13455
diff
changeset
|
312 } |
16512
abe7128ca473
SL: upgrade source attribution
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16067
diff
changeset
|
313 if (printSourceAttributionToLog && logOutput != null) { |
abe7128ca473
SL: upgrade source attribution
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16067
diff
changeset
|
314 for (SLFunction function : context.getFunctionRegistry().getFunctions()) { |
abe7128ca473
SL: upgrade source attribution
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16067
diff
changeset
|
315 RootCallTarget callTarget = function.getCallTarget(); |
abe7128ca473
SL: upgrade source attribution
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16067
diff
changeset
|
316 if (callTarget != null) { |
abe7128ca473
SL: upgrade source attribution
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16067
diff
changeset
|
317 logOutput.println("=== " + function); |
abe7128ca473
SL: upgrade source attribution
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16067
diff
changeset
|
318 NodeUtil.printSourceAttributionTree(logOutput, callTarget.getRootNode()); |
abe7128ca473
SL: upgrade source attribution
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16067
diff
changeset
|
319 } |
abe7128ca473
SL: upgrade source attribution
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16067
diff
changeset
|
320 } |
abe7128ca473
SL: upgrade source attribution
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16067
diff
changeset
|
321 } |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
322 } |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
323 |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
324 /** |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
325 * Provides a user-readable message for run-time type errors. SL is strongly typed, i.e., there |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
326 * are no automatic type conversions of values. Therefore, Truffle does the type checking for |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
327 * us: if no matching node specialization for the actual values is found, then we have a type |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
328 * error. Specialized nodes use the {@link UnsupportedSpecializationException} to report that no |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
329 * specialization was found. We therefore just have to convert the information encapsulated in |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
330 * this exception in a user-readable form. |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
331 */ |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
332 private static String formatTypeError(UnsupportedSpecializationException ex) { |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
333 StringBuilder result = new StringBuilder(); |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
334 result.append("Type error"); |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
335 if (ex.getNode() != null && ex.getNode().getSourceSection() != null) { |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
336 SourceSection ss = ex.getNode().getSourceSection(); |
21987
b2d1c8ff592a
Less classes in the source API package. Merging interfaces and their only implementation into final classes. Hiding NullSourceSection behind factory method. Using JDK's standard CharsetDecoder instead of proprietary BytesDecoder.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21986
diff
changeset
|
337 if (ss != null && ss.getSource() != null) { |
21490
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
338 result.append(" at ").append(ss.getSource().getShortName()).append(" line ").append(ss.getStartLine()).append(" col ").append(ss.getStartColumn()); |
16512
abe7128ca473
SL: upgrade source attribution
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16067
diff
changeset
|
339 } |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
340 } |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
341 result.append(": operation"); |
18762
0ef23ff7d5a1
SL: make lookup of NodeInfo annotation more rebust.
Christian Humer <christian.humer@gmail.com>
parents:
18485
diff
changeset
|
342 if (ex.getNode() != null) { |
0ef23ff7d5a1
SL: make lookup of NodeInfo annotation more rebust.
Christian Humer <christian.humer@gmail.com>
parents:
18485
diff
changeset
|
343 NodeInfo nodeInfo = SLContext.lookupNodeInfo(ex.getNode().getClass()); |
0ef23ff7d5a1
SL: make lookup of NodeInfo annotation more rebust.
Christian Humer <christian.humer@gmail.com>
parents:
18485
diff
changeset
|
344 if (nodeInfo != null) { |
0ef23ff7d5a1
SL: make lookup of NodeInfo annotation more rebust.
Christian Humer <christian.humer@gmail.com>
parents:
18485
diff
changeset
|
345 result.append(" \"").append(nodeInfo.shortName()).append("\""); |
0ef23ff7d5a1
SL: make lookup of NodeInfo annotation more rebust.
Christian Humer <christian.humer@gmail.com>
parents:
18485
diff
changeset
|
346 } |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
347 } |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
348 result.append(" not defined for"); |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
349 |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
350 String sep = " "; |
13862
f9b934e1e172
SL: Make SL use the new UnsupportedSpecializationException#getSuppliedNodes() for error messages; Disabled dumping by default to IGV.
Christian Humer <christian.humer@gmail.com>
parents:
13836
diff
changeset
|
351 for (int i = 0; i < ex.getSuppliedValues().length; i++) { |
f9b934e1e172
SL: Make SL use the new UnsupportedSpecializationException#getSuppliedNodes() for error messages; Disabled dumping by default to IGV.
Christian Humer <christian.humer@gmail.com>
parents:
13836
diff
changeset
|
352 Object value = ex.getSuppliedValues()[i]; |
f9b934e1e172
SL: Make SL use the new UnsupportedSpecializationException#getSuppliedNodes() for error messages; Disabled dumping by default to IGV.
Christian Humer <christian.humer@gmail.com>
parents:
13836
diff
changeset
|
353 Node node = ex.getSuppliedNodes()[i]; |
f9b934e1e172
SL: Make SL use the new UnsupportedSpecializationException#getSuppliedNodes() for error messages; Disabled dumping by default to IGV.
Christian Humer <christian.humer@gmail.com>
parents:
13836
diff
changeset
|
354 if (node != null) { |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
355 result.append(sep); |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
356 sep = ", "; |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
357 |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
358 if (value instanceof Long || value instanceof BigInteger) { |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
359 result.append("Number ").append(value); |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
360 } else if (value instanceof Boolean) { |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
361 result.append("Boolean ").append(value); |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
362 } else if (value instanceof String) { |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
363 result.append("String \"").append(value).append("\""); |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
364 } else if (value instanceof SLFunction) { |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
365 result.append("Function ").append(value); |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
366 } else if (value == SLNull.SINGLETON) { |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
367 result.append("NULL"); |
13862
f9b934e1e172
SL: Make SL use the new UnsupportedSpecializationException#getSuppliedNodes() for error messages; Disabled dumping by default to IGV.
Christian Humer <christian.humer@gmail.com>
parents:
13836
diff
changeset
|
368 } else if (value == null) { |
f9b934e1e172
SL: Make SL use the new UnsupportedSpecializationException#getSuppliedNodes() for error messages; Disabled dumping by default to IGV.
Christian Humer <christian.humer@gmail.com>
parents:
13836
diff
changeset
|
369 // value is not evaluated because of short circuit evaluation |
f9b934e1e172
SL: Make SL use the new UnsupportedSpecializationException#getSuppliedNodes() for error messages; Disabled dumping by default to IGV.
Christian Humer <christian.humer@gmail.com>
parents:
13836
diff
changeset
|
370 result.append("ANY"); |
13821
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
371 } else { |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
372 result.append(value); |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
373 } |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
374 } |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
375 } |
b16ec83edc73
Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents:
13761
diff
changeset
|
376 return result.toString(); |
12752
71991b7a0f14
SL: Enhanced SimpleLanguage with support for if statements, function calls, function caching + inlining and builtins.
Christian Humer <christian.humer@gmail.com>
parents:
8959
diff
changeset
|
377 } |
18990
d1c1cd2530d7
Truffle/Instrumentation: clean up and repair some old unit tests
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18962
diff
changeset
|
378 |
21468
99942eac9c6d
Introducing TruffleVM - a central place to invoke code in any registered TruffleLanguage.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
20956
diff
changeset
|
379 @Override |
22049 | 380 protected CallTarget parse(Source code, Node node, String... argumentNames) throws IOException { |
22046
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
381 final SLContext c = new SLContext(this); |
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
382 final Exception[] failed = {null}; |
21690
e59895e16377
TCK now checks behavior when parsing unparseable code
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21493
diff
changeset
|
383 try { |
22046
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
384 c.evalSource(code); |
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
385 failed[0] = null; |
21690
e59895e16377
TCK now checks behavior when parsing unparseable code
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21493
diff
changeset
|
386 } catch (Exception e) { |
22046
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
387 failed[0] = e; |
21690
e59895e16377
TCK now checks behavior when parsing unparseable code
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21493
diff
changeset
|
388 } |
22046
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
389 return new CallTarget() { |
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
390 @Override |
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
391 public Object call(Object... arguments) { |
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
392 if (failed[0] instanceof RuntimeException) { |
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
393 throw (RuntimeException) failed[0]; |
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
394 } |
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
395 if (failed[0] != null) { |
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
396 throw new IllegalStateException(failed[0]); |
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
397 } |
22068
fec8f8a61f6c
Introducing FindContextNode
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22067
diff
changeset
|
398 Node n = createFindContextNode(); |
22070
a7ca9e9a1d51
Removing VirtualFrame parameter. Documenting.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22068
diff
changeset
|
399 SLContext fillIn = findContext(n); |
22046
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
400 final SLFunctionRegistry functionRegistry = fillIn.getFunctionRegistry(); |
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
401 for (SLFunction f : c.getFunctionRegistry().getFunctions()) { |
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
402 RootCallTarget callTarget = f.getCallTarget(); |
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
403 if (callTarget == null) { |
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
404 continue; |
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
405 } |
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
406 functionRegistry.lookup(f.getName()); |
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
407 functionRegistry.register(f.getName(), (SLRootNode) f.getCallTarget().getRootNode()); |
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
408 } |
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
409 return null; |
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
410 } |
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
411 }; |
21468
99942eac9c6d
Introducing TruffleVM - a central place to invoke code in any registered TruffleLanguage.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
20956
diff
changeset
|
412 } |
99942eac9c6d
Introducing TruffleVM - a central place to invoke code in any registered TruffleLanguage.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
20956
diff
changeset
|
413 |
99942eac9c6d
Introducing TruffleVM - a central place to invoke code in any registered TruffleLanguage.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
20956
diff
changeset
|
414 @Override |
22066
78c3d3d8d86e
Clearly separating the TruffleLanguage definition from context used during its execution. TruffleLanguage now has to have public static field INSTANCE and override createContext method.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22065
diff
changeset
|
415 protected Object findExportedSymbol(SLContext context, String globalName, boolean onlyExplicit) { |
21490
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
416 for (SLFunction f : context.getFunctionRegistry().getFunctions()) { |
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
417 if (globalName.equals(f.getName())) { |
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
418 return f; |
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
419 } |
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
420 } |
21468
99942eac9c6d
Introducing TruffleVM - a central place to invoke code in any registered TruffleLanguage.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
20956
diff
changeset
|
421 return null; |
99942eac9c6d
Introducing TruffleVM - a central place to invoke code in any registered TruffleLanguage.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
20956
diff
changeset
|
422 } |
99942eac9c6d
Introducing TruffleVM - a central place to invoke code in any registered TruffleLanguage.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
20956
diff
changeset
|
423 |
99942eac9c6d
Introducing TruffleVM - a central place to invoke code in any registered TruffleLanguage.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
20956
diff
changeset
|
424 @Override |
22066
78c3d3d8d86e
Clearly separating the TruffleLanguage definition from context used during its execution. TruffleLanguage now has to have public static field INSTANCE and override createContext method.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22065
diff
changeset
|
425 protected Object getLanguageGlobal(SLContext context) { |
21490
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
426 return context; |
21468
99942eac9c6d
Introducing TruffleVM - a central place to invoke code in any registered TruffleLanguage.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
20956
diff
changeset
|
427 } |
99942eac9c6d
Introducing TruffleVM - a central place to invoke code in any registered TruffleLanguage.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
20956
diff
changeset
|
428 |
99942eac9c6d
Introducing TruffleVM - a central place to invoke code in any registered TruffleLanguage.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
20956
diff
changeset
|
429 @Override |
99942eac9c6d
Introducing TruffleVM - a central place to invoke code in any registered TruffleLanguage.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
20956
diff
changeset
|
430 protected boolean isObjectOfLanguage(Object object) { |
21490
3286fb5fea4a
Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21481
diff
changeset
|
431 return object instanceof SLFunction; |
21468
99942eac9c6d
Introducing TruffleVM - a central place to invoke code in any registered TruffleLanguage.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
20956
diff
changeset
|
432 } |
99942eac9c6d
Introducing TruffleVM - a central place to invoke code in any registered TruffleLanguage.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
20956
diff
changeset
|
433 |
21890
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
434 @Override |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
435 protected ToolSupportProvider getToolSupport() { |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
436 return getDebugSupport(); |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
437 } |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
438 |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
439 @Override |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
440 protected DebugSupportProvider getDebugSupport() { |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
441 if (debugSupport == null) { |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
442 debugSupport = new SLDebugProvider(); |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
443 } |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
444 return debugSupport; |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
445 } |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
446 |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
447 // TODO (mlvdv) remove the static hack when we no longer have the static demo variables |
21686
5fa7935c5de3
Truffle/Instrumentation: fix the small tool demonstration in SL
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21649
diff
changeset
|
448 private static void setupToolDemos() { |
22125
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
449 // if (statementCounts || coverage) { |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
450 // if (registeredASTProber == null) { |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
451 // final ASTProber newProber = new SLStandardASTProber(); |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
452 // // This should be registered on the TruffleVM |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
453 // Probe.registerASTProber(newProber); |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
454 // registeredASTProber = newProber; |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
455 // } |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
456 // } |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
457 // if (nodeExecCounts) { |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
458 // nodeExecCounter = new NodeExecCounter(); |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
459 // nodeExecCounter.install(); |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
460 // } |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
461 // |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
462 // if (statementCounts) { |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
463 // statementExecCounter = new NodeExecCounter(StandardSyntaxTag.STATEMENT); |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
464 // statementExecCounter.install(); |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
465 // } |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
466 // |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
467 // if (coverage) { |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
468 // coverageTracker = new CoverageTracker(); |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
469 // coverageTracker.install(); |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
470 // } |
21649
1c76a5662753
Merge with 645f170013a451083414ff695412c465e9d2ebf0
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21578
diff
changeset
|
471 } |
1c76a5662753
Merge with 645f170013a451083414ff695412c465e9d2ebf0
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21578
diff
changeset
|
472 |
21686
5fa7935c5de3
Truffle/Instrumentation: fix the small tool demonstration in SL
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21649
diff
changeset
|
473 private static void reportToolDemos() { |
22125
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
474 // if (nodeExecCounter != null) { |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
475 // nodeExecCounter.print(System.out); |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
476 // nodeExecCounter.dispose(); |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
477 // } |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
478 // if (statementExecCounter != null) { |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
479 // statementExecCounter.print(System.out); |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
480 // statementExecCounter.dispose(); |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
481 // } |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
482 // if (coverageTracker != null) { |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
483 // coverageTracker.print(System.out); |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
484 // coverageTracker.dispose(); |
8d2bdc802002
Fixing the formating the way E. formater likes it
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22124
diff
changeset
|
485 // } |
21649
1c76a5662753
Merge with 645f170013a451083414ff695412c465e9d2ebf0
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21578
diff
changeset
|
486 } |
1c76a5662753
Merge with 645f170013a451083414ff695412c465e9d2ebf0
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21578
diff
changeset
|
487 |
22068
fec8f8a61f6c
Introducing FindContextNode
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22067
diff
changeset
|
488 public Node createFindContextNode0() { |
fec8f8a61f6c
Introducing FindContextNode
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22067
diff
changeset
|
489 return createFindContextNode(); |
22046
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
490 } |
e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22003
diff
changeset
|
491 |
22070
a7ca9e9a1d51
Removing VirtualFrame parameter. Documenting.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22068
diff
changeset
|
492 public SLContext findContext0(Node contextNode) { |
a7ca9e9a1d51
Removing VirtualFrame parameter. Documenting.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22068
diff
changeset
|
493 return findContext(contextNode); |
a7ca9e9a1d51
Removing VirtualFrame parameter. Documenting.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22068
diff
changeset
|
494 } |
a7ca9e9a1d51
Removing VirtualFrame parameter. Documenting.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22068
diff
changeset
|
495 |
21890
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
496 private final class SLDebugProvider implements DebugSupportProvider { |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
497 |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
498 public SLDebugProvider() { |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
499 if (registeredASTProber == null) { |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
500 registeredASTProber = new SLStandardASTProber(); |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
501 // This should be registered on the TruffleVM |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
502 Probe.registerASTProber(registeredASTProber); |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
503 } |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
504 } |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
505 |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
506 public Visualizer getVisualizer() { |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
507 if (visualizer == null) { |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
508 visualizer = new SLDefaultVisualizer(); |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
509 } |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
510 return visualizer; |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
511 } |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
512 |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
513 public void enableASTProbing(ASTProber prober) { |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
514 if (prober != null) { |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
515 // This should be registered on the TruffleVM |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
516 Probe.registerASTProber(prober); |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
517 } |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
518 } |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
519 |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
520 public Object evalInContext(Source source, Node node, MaterializedFrame mFrame) throws DebugSupportException { |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
521 throw new DebugSupportException("evalInContext not supported in this language"); |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
522 } |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
523 |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
524 public AdvancedInstrumentRootFactory createAdvancedInstrumentRootFactory(String expr, AdvancedInstrumentResultListener resultListener) throws DebugSupportException { |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
525 throw new DebugSupportException("createAdvancedInstrumentRootFactory not supported in this language"); |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
526 } |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
527 |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
528 } |
894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21889
diff
changeset
|
529 |
7292
213c1297a814
Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff
changeset
|
530 } |