Mercurial > hg > truffle
annotate truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/source/Source.java @ 22093:0f0e34039769
Truffle/instrumentation: remove SourceTag machinery, not used so far. It will eventually be restored in the new API framework.
author | Michael Van De Vanter <michael.van.de.vanter@oracle.com> |
---|---|
date | Mon, 17 Aug 2015 15:24:00 -0700 |
parents | e7c2d36daf72 |
children | 0556c0056d71 |
rev | line source |
---|---|
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
1 /* |
19687
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
2 * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
4 * |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
7 * published by the Free Software Foundation. Oracle designates this |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
8 * particular file as subject to the "Classpath" exception as provided |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
9 * by Oracle in the LICENSE file that accompanied this code. |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
10 * |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
11 * This code is distributed in the hope that it will be useful, but WITHOUT |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
14 * version 2 for more details (a copy is included in the LICENSE file that |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
15 * accompanied this code). |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
16 * |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
17 * You should have received a copy of the GNU General Public License version |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
18 * 2 along with this work; if not, write to the Free Software Foundation, |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
20 * |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
22 * or visit www.oracle.com if you need additional information or have any |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
23 * questions. |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
24 */ |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
25 package com.oracle.truffle.api.source; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
26 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
27 import java.io.*; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
28 import java.lang.ref.*; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
29 import java.net.*; |
22093
0f0e34039769
Truffle/instrumentation: remove SourceTag machinery, not used so far. It will eventually be restored in the new API framework.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
22046
diff
changeset
|
30 import java.nio.*; |
0f0e34039769
Truffle/instrumentation: remove SourceTag machinery, not used so far. It will eventually be restored in the new API framework.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
22046
diff
changeset
|
31 import java.nio.charset.*; |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
32 import java.util.*; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
33 |
21966
5023b913e2ba
Help the partial evaluator / language developer by marking API methods as neverPartOfCompilation() when they are too complicated to be compiled.
Christian Wimmer <christian.wimmer@oracle.com>
parents:
21964
diff
changeset
|
34 import com.oracle.truffle.api.*; |
19697
191c55f08ed2
Truffle: add the ability to "tag" Sources with any number of standard or private tags, for example so that Sources might be marked as "FROM_FILE", "LIBRARY", "BUILTIN", or any other distinction that matters to some tools. Those tags can be applied by the language runtime when sources are created, for example when loading builtins. Alternately, you can listen for newly created sources from outside the implementation, where you might tag sources based on pattern matching against file paths or any other meta-information in the Source.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
19690
diff
changeset
|
35 |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
36 /** |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
37 * Representation of a guest language source code unit and its contents. Sources originate in |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
38 * several ways: |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
39 * <ul> |
21270
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
40 * <li><strong>Literal:</strong> An anonymous text string: not named and not indexed. These should |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
41 * be considered value objects; equality is defined based on contents.<br> |
18672
f17b2a0303db
Truffle/Source: change signature of Source factory methods to take literal text as CharSequence instead of String.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18485
diff
changeset
|
42 * See {@link Source#fromText(CharSequence, String)}</li> |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
43 * <p> |
21270
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
44 * <li><strong>Named Literal:</strong> A text string that can be retrieved by name as if it were a |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
45 * file, but without any assumption that the name is related to a file path. Creating a new literal |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
46 * with an already existing name will replace its predecessor in the index.<br> |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
47 * See {@link Source#fromNamedText(CharSequence, String)}<br> |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
48 * See {@link Source#find(String)}</li> |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
49 * <p> |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
50 * <li><strong>File:</strong> Each file is represented as a canonical object, indexed by the |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
51 * absolute, canonical path name of the file. File contents are <em>read lazily</em> and contents |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
52 * optionally <em>cached</em>. <br> |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
53 * See {@link Source#fromFileName(String)}<br> |
21270
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
54 * See {@link Source#fromFileName(String, boolean)}<br> |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
55 * See {@link Source#find(String)}</li> |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
56 * <p> |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
57 * <li><strong>URL:</strong> Each URL source is represented as a canonical object, indexed by the |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
58 * URL. Contents are <em>read eagerly</em> and <em>cached</em>. <br> |
21270
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
59 * See {@link Source#fromURL(URL, String)}<br> |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
60 * See {@link Source#find(String)}</li> |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
61 * <p> |
21270
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
62 * <li><strong>Reader:</strong> Contents are <em>read eagerly</em> and treated as an anonymous |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
63 * (non-indexed) <em>Literal</em> . <br> |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
64 * See {@link Source#fromReader(Reader, String)}</li> |
21271
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
65 * <p> |
21291
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
66 * <li><strong>Sub-Source:</strong> A representation of the contents of a sub-range of another |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
67 * {@link Source}.<br> |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
68 * See @link {@link Source#subSource(Source, int, int)}<br> |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
69 * See @link {@link Source#subSource(Source, int)}</li> |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
70 * <p> |
21271
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
71 * <li><strong>AppendableSource:</strong> Literal contents are provided by the client, |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
72 * incrementally, after the instance is created.<br> |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
73 * See {@link Source#fromAppendableText(String)}<br> |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
74 * See {@link Source#fromNamedAppendableText(String)}</li> |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
75 * </ul> |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
76 * <p> |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
77 * <strong>File cache:</strong> |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
78 * <ol> |
21270
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
79 * <li>File content caching is optional, <em>on</em> by default.</li> |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
80 * <li>The first access to source file contents will result in the contents being read, and (if |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
81 * enabled) cached.</li> |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
82 * <li>If file contents have been cached, access to contents via {@link Source#getInputStream()} or |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
83 * {@link Source#getReader()} will be provided from the cache.</li> |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
84 * <li>Any access to file contents via the cache will result in a timestamp check and possible cache |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
85 * reload.</li> |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
86 * </ol> |
19697
191c55f08ed2
Truffle: add the ability to "tag" Sources with any number of standard or private tags, for example so that Sources might be marked as "FROM_FILE", "LIBRARY", "BUILTIN", or any other distinction that matters to some tools. Those tags can be applied by the language runtime when sources are created, for example when loading builtins. Alternately, you can listen for newly created sources from outside the implementation, where you might tag sources based on pattern matching against file paths or any other meta-information in the Source.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
19690
diff
changeset
|
87 * <p> |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
88 */ |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
89 public abstract class Source { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
90 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
91 // TODO (mlvdv) consider canonicalizing and reusing SourceSection instances |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
92 // TOOD (mlvdv) connect SourceSections into a spatial tree for fast geometric lookup |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
93 |
21270
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
94 /** |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
95 * Index of all named sources. |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
96 */ |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
97 private static final Map<String, WeakReference<Source>> nameToSource = new HashMap<>(); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
98 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
99 private static boolean fileCacheEnabled = true; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
100 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
101 /** |
21270
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
102 * Locates an existing instance by the name under which it was indexed. |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
103 */ |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
104 public static Source find(String name) { |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
105 final WeakReference<Source> nameRef = nameToSource.get(name); |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
106 return nameRef == null ? null : nameRef.get(); |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
107 } |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
108 |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
109 /** |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
110 * Gets the canonical representation of a source file, whose contents will be read lazily and |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
111 * then cached. |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
112 * |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
113 * @param fileName name |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
114 * @param reset forces any existing {@link Source} cache to be cleared, forcing a re-read |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
115 * @return canonical representation of the file's contents. |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
116 * @throws IOException if the file can not be read |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
117 */ |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
118 public static Source fromFileName(String fileName, boolean reset) throws IOException { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
119 |
21270
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
120 final WeakReference<Source> nameRef = nameToSource.get(fileName); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
121 Source source = nameRef == null ? null : nameRef.get(); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
122 if (source == null) { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
123 final File file = new File(fileName); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
124 if (!file.canRead()) { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
125 throw new IOException("Can't read file " + fileName); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
126 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
127 final String path = file.getCanonicalPath(); |
21270
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
128 final WeakReference<Source> pathRef = nameToSource.get(path); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
129 source = pathRef == null ? null : pathRef.get(); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
130 if (source == null) { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
131 source = new FileSource(file, fileName, path); |
21270
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
132 nameToSource.put(path, new WeakReference<>(source)); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
133 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
134 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
135 if (reset) { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
136 source.reset(); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
137 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
138 return source; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
139 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
140 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
141 /** |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
142 * Gets the canonical representation of a source file, whose contents will be read lazily and |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
143 * then cached. |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
144 * |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
145 * @param fileName name |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
146 * @return canonical representation of the file's contents. |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
147 * @throws IOException if the file can not be read |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
148 */ |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
149 public static Source fromFileName(String fileName) throws IOException { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
150 return fromFileName(fileName, false); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
151 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
152 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
153 /** |
19687
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
154 * Gets the canonical representation of a source file, whose contents have already been read and |
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
155 * need not be read again. It is confirmed that the file resolves to a file name, so it can be |
19690
c152a485d747
Truffle: new method Source.getLength() and semantic adjustments to the new factory method for creating files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
19688
diff
changeset
|
156 * indexed by canonical path. It is not confirmed that the text supplied agrees with the file's |
c152a485d747
Truffle: new method Source.getLength() and semantic adjustments to the new factory method for creating files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
19688
diff
changeset
|
157 * contents or even whether the file is readable. |
19687
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
158 * |
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
159 * @param chars textual source code already read from the file |
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
160 * @param fileName |
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
161 * @return canonical representation of the file's contents. |
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
162 * @throws IOException if the file cannot be found |
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
163 */ |
19690
c152a485d747
Truffle: new method Source.getLength() and semantic adjustments to the new factory method for creating files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
19688
diff
changeset
|
164 public static Source fromFileName(CharSequence chars, String fileName) throws IOException { |
21966
5023b913e2ba
Help the partial evaluator / language developer by marking API methods as neverPartOfCompilation() when they are too complicated to be compiled.
Christian Wimmer <christian.wimmer@oracle.com>
parents:
21964
diff
changeset
|
165 CompilerAsserts.neverPartOfCompilation(); |
19690
c152a485d747
Truffle: new method Source.getLength() and semantic adjustments to the new factory method for creating files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
19688
diff
changeset
|
166 |
21270
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
167 final WeakReference<Source> nameRef = nameToSource.get(fileName); |
19687
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
168 Source source = nameRef == null ? null : nameRef.get(); |
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
169 if (source == null) { |
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
170 final File file = new File(fileName); |
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
171 // We are going to trust that the fileName is readable. |
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
172 final String path = file.getCanonicalPath(); |
21270
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
173 final WeakReference<Source> pathRef = nameToSource.get(path); |
19687
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
174 source = pathRef == null ? null : pathRef.get(); |
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
175 if (source == null) { |
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
176 source = new FileSource(file, fileName, path, chars); |
21270
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
177 nameToSource.put(path, new WeakReference<>(source)); |
19687
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
178 } |
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
179 } |
19690
c152a485d747
Truffle: new method Source.getLength() and semantic adjustments to the new factory method for creating files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
19688
diff
changeset
|
180 return source; |
19687
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
181 } |
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
182 |
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
183 /** |
21270
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
184 * Creates an anonymous source from literal text: not named and not indexed. |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
185 * |
18672
f17b2a0303db
Truffle/Source: change signature of Source factory methods to take literal text as CharSequence instead of String.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18485
diff
changeset
|
186 * @param chars textual source code |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
187 * @param description a note about the origin, for error messages and debugging |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
188 * @return a newly created, non-indexed source representation |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
189 */ |
18672
f17b2a0303db
Truffle/Source: change signature of Source factory methods to take literal text as CharSequence instead of String.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18485
diff
changeset
|
190 public static Source fromText(CharSequence chars, String description) { |
21966
5023b913e2ba
Help the partial evaluator / language developer by marking API methods as neverPartOfCompilation() when they are too complicated to be compiled.
Christian Wimmer <christian.wimmer@oracle.com>
parents:
21964
diff
changeset
|
191 CompilerAsserts.neverPartOfCompilation(); |
18672
f17b2a0303db
Truffle/Source: change signature of Source factory methods to take literal text as CharSequence instead of String.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18485
diff
changeset
|
192 assert chars != null; |
22093
0f0e34039769
Truffle/instrumentation: remove SourceTag machinery, not used so far. It will eventually be restored in the new API framework.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
22046
diff
changeset
|
193 return new LiteralSource(description, chars.toString()); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
194 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
195 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
196 /** |
21271
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
197 * Creates an anonymous source from literal text that is provided incrementally after creation: |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
198 * not named and not indexed. |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
199 * |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
200 * @param description a note about the origin, for error messages and debugging |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
201 * @return a newly created, non-indexed, initially empty, appendable source representation |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
202 */ |
21291
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
203 public static Source fromAppendableText(String description) { |
21966
5023b913e2ba
Help the partial evaluator / language developer by marking API methods as neverPartOfCompilation() when they are too complicated to be compiled.
Christian Wimmer <christian.wimmer@oracle.com>
parents:
21964
diff
changeset
|
204 CompilerAsserts.neverPartOfCompilation(); |
22093
0f0e34039769
Truffle/instrumentation: remove SourceTag machinery, not used so far. It will eventually be restored in the new API framework.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
22046
diff
changeset
|
205 return new AppendableLiteralSource(description); |
21271
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
206 } |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
207 |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
208 /** |
21270
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
209 * Creates a source from literal text that can be retrieved by name, with no assumptions about |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
210 * the structure or meaning of the name. If the name is already in the index, the new instance |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
211 * will replace the previously existing instance in the index. |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
212 * |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
213 * @param chars textual source code |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
214 * @param name string to use for indexing/lookup |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
215 * @return a newly created, source representation |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
216 */ |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
217 public static Source fromNamedText(CharSequence chars, String name) { |
21966
5023b913e2ba
Help the partial evaluator / language developer by marking API methods as neverPartOfCompilation() when they are too complicated to be compiled.
Christian Wimmer <christian.wimmer@oracle.com>
parents:
21964
diff
changeset
|
218 CompilerAsserts.neverPartOfCompilation(); |
21270
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
219 final Source source = new LiteralSource(name, chars.toString()); |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
220 nameToSource.put(name, new WeakReference<>(source)); |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
221 return source; |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
222 } |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
223 |
a43c7adc9d99
Truffle/Source: rename asPseudoFile() to fromNamedText(), which more accurately describes its use cases. Rework Javadoc for completeness and clarity.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
20906
diff
changeset
|
224 /** |
21271
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
225 * Creates a source from literal text that is provided incrementally after creation and which |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
226 * can be retrieved by name, with no assumptions about the structure or meaning of the name. If |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
227 * the name is already in the index, the new instance will replace the previously existing |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
228 * instance in the index. |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
229 * |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
230 * @param name string to use for indexing/lookup |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
231 * @return a newly created, indexed, initially empty, appendable source representation |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
232 */ |
21291
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
233 public static Source fromNamedAppendableText(String name) { |
21966
5023b913e2ba
Help the partial evaluator / language developer by marking API methods as neverPartOfCompilation() when they are too complicated to be compiled.
Christian Wimmer <christian.wimmer@oracle.com>
parents:
21964
diff
changeset
|
234 CompilerAsserts.neverPartOfCompilation(); |
21271
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
235 final Source source = new AppendableLiteralSource(name); |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
236 nameToSource.put(name, new WeakReference<>(source)); |
21291
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
237 return source; |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
238 } |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
239 |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
240 /** |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
241 * Creates a {@linkplain Source Source instance} that represents the contents of a sub-range of |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
242 * an existing {@link Source}. |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
243 * |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
244 * @param base an existing Source instance |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
245 * @param baseCharIndex 0-based index of the first character of the sub-range |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
246 * @param length the number of characters in the sub-range |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
247 * @return a new instance representing a sub-range of another Source |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
248 * @throws IllegalArgumentException if the specified sub-range is not contained in the base |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
249 */ |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
250 public static Source subSource(Source base, int baseCharIndex, int length) { |
21966
5023b913e2ba
Help the partial evaluator / language developer by marking API methods as neverPartOfCompilation() when they are too complicated to be compiled.
Christian Wimmer <christian.wimmer@oracle.com>
parents:
21964
diff
changeset
|
251 CompilerAsserts.neverPartOfCompilation(); |
21291
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
252 final SubSource subSource = SubSource.create(base, baseCharIndex, length); |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
253 return subSource; |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
254 } |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
255 |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
256 /** |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
257 * Creates a {@linkplain Source Source instance} that represents the contents of a sub-range at |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
258 * the end of an existing {@link Source}. |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
259 * |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
260 * @param base an existing Source instance |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
261 * @param baseCharIndex 0-based index of the first character of the sub-range |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
262 * @return a new instance representing a sub-range at the end of another Source |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
263 * @throws IllegalArgumentException if the index is out of range |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
264 */ |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
265 public static Source subSource(Source base, int baseCharIndex) { |
21966
5023b913e2ba
Help the partial evaluator / language developer by marking API methods as neverPartOfCompilation() when they are too complicated to be compiled.
Christian Wimmer <christian.wimmer@oracle.com>
parents:
21964
diff
changeset
|
266 CompilerAsserts.neverPartOfCompilation(); |
5023b913e2ba
Help the partial evaluator / language developer by marking API methods as neverPartOfCompilation() when they are too complicated to be compiled.
Christian Wimmer <christian.wimmer@oracle.com>
parents:
21964
diff
changeset
|
267 |
21291
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
268 return subSource(base, baseCharIndex, base.getLength() - baseCharIndex); |
21271
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
269 } |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
270 |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
271 /** |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
272 * Creates a source whose contents will be read immediately from a URL and cached. |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
273 * |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
274 * @param url |
18672
f17b2a0303db
Truffle/Source: change signature of Source factory methods to take literal text as CharSequence instead of String.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18485
diff
changeset
|
275 * @param description identifies the origin, possibly useful for debugging |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
276 * @return a newly created, non-indexed source representation |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
277 * @throws IOException if reading fails |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
278 */ |
18672
f17b2a0303db
Truffle/Source: change signature of Source factory methods to take literal text as CharSequence instead of String.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18485
diff
changeset
|
279 public static Source fromURL(URL url, String description) throws IOException { |
21966
5023b913e2ba
Help the partial evaluator / language developer by marking API methods as neverPartOfCompilation() when they are too complicated to be compiled.
Christian Wimmer <christian.wimmer@oracle.com>
parents:
21964
diff
changeset
|
280 CompilerAsserts.neverPartOfCompilation(); |
22093
0f0e34039769
Truffle/instrumentation: remove SourceTag machinery, not used so far. It will eventually be restored in the new API framework.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
22046
diff
changeset
|
281 return URLSource.get(url, description); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
282 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
283 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
284 /** |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
285 * Creates a source whose contents will be read immediately and cached. |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
286 * |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
287 * @param reader |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
288 * @param description a note about the origin, possibly useful for debugging |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
289 * @return a newly created, non-indexed source representation |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
290 * @throws IOException if reading fails |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
291 */ |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
292 public static Source fromReader(Reader reader, String description) throws IOException { |
21966
5023b913e2ba
Help the partial evaluator / language developer by marking API methods as neverPartOfCompilation() when they are too complicated to be compiled.
Christian Wimmer <christian.wimmer@oracle.com>
parents:
21964
diff
changeset
|
293 CompilerAsserts.neverPartOfCompilation(); |
22093
0f0e34039769
Truffle/instrumentation: remove SourceTag machinery, not used so far. It will eventually be restored in the new API framework.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
22046
diff
changeset
|
294 return new LiteralSource(description, read(reader)); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
295 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
296 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
297 /** |
17066
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
298 * Creates a source from raw bytes. This can be used if the encoding of strings in your language |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
299 * is not compatible with Java strings, or if your parser returns byte indices instead of |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
300 * character indices. The returned source is then indexed by byte, not by character. |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
301 * |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
302 * @param bytes the raw bytes of the source |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
303 * @param description a note about the origin, possibly useful for debugging |
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:
21972
diff
changeset
|
304 * @param charset how to decode the bytes into Java strings |
17066
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
305 * @return a newly created, non-indexed source representation |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
306 */ |
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:
21972
diff
changeset
|
307 public static Source fromBytes(byte[] bytes, String description, Charset charset) { |
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:
21972
diff
changeset
|
308 return fromBytes(bytes, 0, bytes.length, description, charset); |
17066
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
309 } |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
310 |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
311 /** |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
312 * Creates a source from raw bytes. This can be used if the encoding of strings in your language |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
313 * is not compatible with Java strings, or if your parser returns byte indices instead of |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
314 * character indices. The returned source is then indexed by byte, not by character. Offsets are |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
315 * relative to byteIndex. |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
316 * |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
317 * @param bytes the raw bytes of the source |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
318 * @param byteIndex where the string starts in the byte array |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
319 * @param length the length of the string in the byte array |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
320 * @param description a note about the origin, possibly useful for debugging |
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:
21972
diff
changeset
|
321 * @param charset how to decode the bytes into Java strings |
17066
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
322 * @return a newly created, non-indexed source representation |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
323 */ |
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:
21972
diff
changeset
|
324 public static Source fromBytes(byte[] bytes, int byteIndex, int length, String description, Charset charset) { |
21966
5023b913e2ba
Help the partial evaluator / language developer by marking API methods as neverPartOfCompilation() when they are too complicated to be compiled.
Christian Wimmer <christian.wimmer@oracle.com>
parents:
21964
diff
changeset
|
325 CompilerAsserts.neverPartOfCompilation(); |
22093
0f0e34039769
Truffle/instrumentation: remove SourceTag machinery, not used so far. It will eventually be restored in the new API framework.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
22046
diff
changeset
|
326 return new BytesSource(description, bytes, byteIndex, length, charset); |
17066
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
327 } |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
328 |
16989
19faa7ca37c1
Truffle/Source: use a synchronized hash table
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16140
diff
changeset
|
329 // TODO (mlvdv) enable per-file choice whether to cache? |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
330 /** |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
331 * Enables/disables caching of file contents, <em>disabled</em> by default. Caching of sources |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
332 * created from literal text or readers is always enabled. |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
333 */ |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
334 public static void setFileCaching(boolean enabled) { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
335 fileCacheEnabled = enabled; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
336 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
337 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
338 private static String read(Reader reader) throws IOException { |
18672
f17b2a0303db
Truffle/Source: change signature of Source factory methods to take literal text as CharSequence instead of String.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18485
diff
changeset
|
339 final BufferedReader bufferedReader = new BufferedReader(reader); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
340 final StringBuilder builder = new StringBuilder(); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
341 final char[] buffer = new char[1024]; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
342 |
21989
72010b401152
Truffle/Source: close the Reader when finished.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21987
diff
changeset
|
343 try { |
72010b401152
Truffle/Source: close the Reader when finished.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21987
diff
changeset
|
344 while (true) { |
72010b401152
Truffle/Source: close the Reader when finished.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21987
diff
changeset
|
345 final int n = bufferedReader.read(buffer); |
72010b401152
Truffle/Source: close the Reader when finished.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21987
diff
changeset
|
346 if (n == -1) { |
72010b401152
Truffle/Source: close the Reader when finished.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21987
diff
changeset
|
347 break; |
72010b401152
Truffle/Source: close the Reader when finished.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21987
diff
changeset
|
348 } |
72010b401152
Truffle/Source: close the Reader when finished.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21987
diff
changeset
|
349 builder.append(buffer, 0, n); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
350 } |
21989
72010b401152
Truffle/Source: close the Reader when finished.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21987
diff
changeset
|
351 } finally { |
72010b401152
Truffle/Source: close the Reader when finished.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21987
diff
changeset
|
352 bufferedReader.close(); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
353 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
354 return builder.toString(); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
355 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
356 |
21271
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
357 private Source() { |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
358 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
359 |
16130
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
360 private TextMap textMap = null; |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
361 |
21964
9d15f06f3537
Using protected access modifier in non-subclassable class is suspicious. Making package private.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21951
diff
changeset
|
362 abstract void reset(); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
363 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
364 /** |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
365 * Returns the name of this resource holding a guest language program. An example would be the |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
366 * name of a guest language source code file. |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
367 * |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
368 * @return the name of the guest language program |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
369 */ |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
370 public abstract String getName(); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
371 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
372 /** |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
373 * Returns a short version of the name of the resource holding a guest language program (as |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
374 * described in @getName). For example, this could be just the name of the file, rather than a |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
375 * full path. |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
376 * |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
377 * @return the short name of the guest language program |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
378 */ |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
379 public abstract String getShortName(); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
380 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
381 /** |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
382 * The normalized, canonical name if the source is a file. |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
383 */ |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
384 public abstract String getPath(); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
385 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
386 /** |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
387 * The URL if the source is retrieved via URL. |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
388 */ |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
389 public abstract URL getURL(); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
390 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
391 /** |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
392 * Access to the source contents. |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
393 */ |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
394 public abstract Reader getReader(); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
395 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
396 /** |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
397 * Access to the source contents. |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
398 */ |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
399 public final InputStream getInputStream() { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
400 return new ByteArrayInputStream(getCode().getBytes()); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
401 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
402 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
403 /** |
19690
c152a485d747
Truffle: new method Source.getLength() and semantic adjustments to the new factory method for creating files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
19688
diff
changeset
|
404 * Gets the number of characters in the source. |
c152a485d747
Truffle: new method Source.getLength() and semantic adjustments to the new factory method for creating files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
19688
diff
changeset
|
405 */ |
c152a485d747
Truffle: new method Source.getLength() and semantic adjustments to the new factory method for creating files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
19688
diff
changeset
|
406 public final int getLength() { |
21292
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
407 return getTextMap().length(); |
19690
c152a485d747
Truffle: new method Source.getLength() and semantic adjustments to the new factory method for creating files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
19688
diff
changeset
|
408 } |
c152a485d747
Truffle: new method Source.getLength() and semantic adjustments to the new factory method for creating files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
19688
diff
changeset
|
409 |
c152a485d747
Truffle: new method Source.getLength() and semantic adjustments to the new factory method for creating files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
19688
diff
changeset
|
410 /** |
19687
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
411 * Returns the complete text of the code. |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
412 */ |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
413 public abstract String getCode(); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
414 |
19687
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
415 /** |
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
416 * Returns a subsection of the code test. |
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
417 */ |
17066
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
418 public String getCode(int charIndex, int charLength) { |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
419 return getCode().substring(charIndex, charIndex + charLength); |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
420 } |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
421 |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
422 /** |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
423 * Gets the text (not including a possible terminating newline) in a (1-based) numbered line. |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
424 */ |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
425 public final String getCode(int lineNumber) { |
21292
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
426 final int offset = getTextMap().lineStartOffset(lineNumber); |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
427 final int length = getTextMap().lineLength(lineNumber); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
428 return getCode().substring(offset, offset + length); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
429 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
430 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
431 /** |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
432 * The number of text lines in the source, including empty lines; characters at the end of the |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
433 * source without a terminating newline count as a line. |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
434 */ |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
435 public final int getLineCount() { |
21292
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
436 return getTextMap().lineCount(); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
437 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
438 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
439 /** |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
440 * Given a 0-based character offset, return the 1-based number of the line that includes the |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
441 * position. |
16130
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
442 * |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
443 * @throws IllegalArgumentException if the offset is outside the text contents |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
444 */ |
16130
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
445 public final int getLineNumber(int offset) throws IllegalArgumentException { |
21292
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
446 return getTextMap().offsetToLine(offset); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
447 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
448 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
449 /** |
16130
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
450 * Given a 0-based character offset, return the 1-based number of the column at the position. |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
451 * |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
452 * @throws IllegalArgumentException if the offset is outside the text contents |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
453 */ |
16130
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
454 public final int getColumnNumber(int offset) throws IllegalArgumentException { |
21292
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
455 return getTextMap().offsetToCol(offset); |
16130
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
456 } |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
457 |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
458 /** |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
459 * Given a 1-based line number, return the 0-based offset of the first character in the line. |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
460 * |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
461 * @throws IllegalArgumentException if there is no such line in the text |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
462 */ |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
463 public final int getLineStartOffset(int lineNumber) throws IllegalArgumentException { |
21292
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
464 return getTextMap().lineStartOffset(lineNumber); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
465 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
466 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
467 /** |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
468 * The number of characters (not counting a possible terminating newline) in a (1-based) |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
469 * numbered line. |
16130
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
470 * |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
471 * @throws IllegalArgumentException if there is no such line in the text |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
472 */ |
16130
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
473 public final int getLineLength(int lineNumber) throws IllegalArgumentException { |
21292
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
474 return getTextMap().lineLength(lineNumber); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
475 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
476 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
477 /** |
21291
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
478 * Append text to a Source explicitly created as <em>Appendable</em>. |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
479 * |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
480 * @param chars the text to append |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
481 * @throws UnsupportedOperationException by concrete subclasses that do not support appending |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
482 */ |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
483 public void appendCode(CharSequence chars) { |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
484 throw new UnsupportedOperationException(); |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
485 } |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
486 |
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
487 /** |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
488 * Creates a representation of a contiguous region of text in the source. |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
489 * <p> |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
490 * This method performs no checks on the validity of the arguments. |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
491 * <p> |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
492 * The resulting representation defines hash/equality around equivalent location, presuming that |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
493 * {@link Source} representations are canonical. |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
494 * |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
495 * @param identifier terse description of the region |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
496 * @param startLine 1-based line number of the first character in the section |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
497 * @param startColumn 1-based column number of the first character in the section |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
498 * @param charIndex the 0-based index of the first character of the section |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
499 * @param length the number of characters in the section |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
500 * @return newly created object representing the specified region |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
501 */ |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
502 public final SourceSection createSection(String identifier, int startLine, int startColumn, int charIndex, int length) { |
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:
21972
diff
changeset
|
503 return new SourceSection(null, this, identifier, startLine, startColumn, charIndex, length); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
504 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
505 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
506 /** |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
507 * Creates a representation of a contiguous region of text in the source. Computes the |
21972
ff6f34159b8a
Providing package-info for most of API packages. Feel free to provide your package-info.java for anything that has API in its name.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21966
diff
changeset
|
508 * {@code charIndex} value by building a {@code TextMap map} of lines in the source. |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
509 * <p> |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
510 * Checks the position arguments for consistency with the source. |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
511 * <p> |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
512 * The resulting representation defines hash/equality around equivalent location, presuming that |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
513 * {@link Source} representations are canonical. |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
514 * |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
515 * @param identifier terse description of the region |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
516 * @param startLine 1-based line number of the first character in the section |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
517 * @param startColumn 1-based column number of the first character in the section |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
518 * @param length the number of characters in the section |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
519 * @return newly created object representing the specified region |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
520 * @throws IllegalArgumentException if arguments are outside the text of the source |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
521 * @throws IllegalStateException if the source is one of the "null" instances |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
522 */ |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
523 public final SourceSection createSection(String identifier, int startLine, int startColumn, int length) { |
21292
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
524 final int lineStartOffset = getTextMap().lineStartOffset(startLine); |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
525 if (startColumn > getTextMap().lineLength(startLine)) { |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
526 throw new IllegalArgumentException("column out of range"); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
527 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
528 final int startOffset = lineStartOffset + startColumn - 1; |
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:
21972
diff
changeset
|
529 return new SourceSection(null, this, identifier, startLine, startColumn, startOffset, length); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
530 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
531 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
532 /** |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
533 * Creates a representation of a contiguous region of text in the source. Computes the |
21972
ff6f34159b8a
Providing package-info for most of API packages. Feel free to provide your package-info.java for anything that has API in its name.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21966
diff
changeset
|
534 * {@code (startLine, startColumn)} values by building a {@code TextMap map} of lines in the |
ff6f34159b8a
Providing package-info for most of API packages. Feel free to provide your package-info.java for anything that has API in its name.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21966
diff
changeset
|
535 * source. |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
536 * <p> |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
537 * Checks the position arguments for consistency with the source. |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
538 * <p> |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
539 * The resulting representation defines hash/equality around equivalent location, presuming that |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
540 * {@link Source} representations are canonical. |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
541 * |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
542 * |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
543 * @param identifier terse description of the region |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
544 * @param charIndex 0-based position of the first character in the section |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
545 * @param length the number of characters in the section |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
546 * @return newly created object representing the specified region |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
547 * @throws IllegalArgumentException if either of the arguments are outside the text of the |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
548 * source |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
549 * @throws IllegalStateException if the source is one of the "null" instances |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
550 */ |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
551 public final SourceSection createSection(String identifier, int charIndex, int length) throws IllegalArgumentException { |
17066
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
552 checkRange(charIndex, length); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
553 final int startLine = getLineNumber(charIndex); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
554 final int startColumn = charIndex - getLineStartOffset(startLine) + 1; |
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:
21972
diff
changeset
|
555 return new SourceSection(null, this, identifier, startLine, startColumn, charIndex, length); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
556 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
557 |
21964
9d15f06f3537
Using protected access modifier in non-subclassable class is suspicious. Making package private.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21951
diff
changeset
|
558 void checkRange(int charIndex, int length) { |
17066
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
559 if (!(charIndex >= 0 && length >= 0 && charIndex + length <= getCode().length())) { |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
560 throw new IllegalArgumentException("text positions out of range"); |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
561 } |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
562 } |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
563 |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
564 /** |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
565 * Creates a representation of a line of text in the source identified only by line number, from |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
566 * which the character information will be computed. |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
567 * |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
568 * @param identifier terse description of the line |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
569 * @param lineNumber 1-based line number of the first character in the section |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
570 * @return newly created object representing the specified line |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
571 * @throws IllegalArgumentException if the line does not exist the source |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
572 * @throws IllegalStateException if the source is one of the "null" instances |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
573 */ |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
574 public final SourceSection createSection(String identifier, int lineNumber) { |
21292
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
575 final int charIndex = getTextMap().lineStartOffset(lineNumber); |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
576 final int length = getTextMap().lineLength(lineNumber); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
577 return createSection(identifier, charIndex, length); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
578 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
579 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
580 /** |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
581 * Creates a representation of a line number in this source, suitable for use as a hash table |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
582 * key with equality defined to mean equivalent location. |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
583 * |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
584 * @param lineNumber a 1-based line number in this source |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
585 * @return a representation of a line in this source |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
586 */ |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
587 public final LineLocation createLineLocation(int lineNumber) { |
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:
21972
diff
changeset
|
588 return new LineLocation(this, lineNumber); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
589 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
590 |
21271
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
591 /** |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
592 * An object suitable for using as a key into a hashtable that defines equivalence between |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
593 * different source types. |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
594 */ |
21964
9d15f06f3537
Using protected access modifier in non-subclassable class is suspicious. Making package private.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21951
diff
changeset
|
595 Object getHashKey() { |
21271
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
596 return getName(); |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
597 } |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
598 |
21964
9d15f06f3537
Using protected access modifier in non-subclassable class is suspicious. Making package private.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21951
diff
changeset
|
599 final TextMap getTextMap() { |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
600 if (textMap == null) { |
17066
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
601 textMap = createTextMap(); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
602 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
603 return textMap; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
604 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
605 |
21964
9d15f06f3537
Using protected access modifier in non-subclassable class is suspicious. Making package private.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21951
diff
changeset
|
606 final void clearTextMap() { |
21271
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
607 textMap = null; |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
608 } |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
609 |
21964
9d15f06f3537
Using protected access modifier in non-subclassable class is suspicious. Making package private.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21951
diff
changeset
|
610 TextMap createTextMap() { |
17066
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
611 final String code = getCode(); |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
612 if (code == null) { |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
613 throw new RuntimeException("can't read file " + getName()); |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
614 } |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
615 return TextMap.fromString(code); |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
616 } |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
617 |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
618 private static final class LiteralSource extends Source { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
619 |
21271
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
620 private final String description; |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
621 private final String code; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
622 |
21271
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
623 public LiteralSource(String description, String code) { |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
624 this.description = description; |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
625 this.code = code; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
626 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
627 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
628 @Override |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
629 public String getName() { |
21271
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
630 return description; |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
631 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
632 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
633 @Override |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
634 public String getShortName() { |
21271
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
635 return description; |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
636 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
637 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
638 @Override |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
639 public String getCode() { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
640 return code; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
641 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
642 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
643 @Override |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
644 public String getPath() { |
21271
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
645 return description; |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
646 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
647 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
648 @Override |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
649 public URL getURL() { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
650 return null; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
651 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
652 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
653 @Override |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
654 public Reader getReader() { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
655 return new StringReader(code); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
656 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
657 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
658 @Override |
21964
9d15f06f3537
Using protected access modifier in non-subclassable class is suspicious. Making package private.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21951
diff
changeset
|
659 void reset() { |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
660 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
661 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
662 @Override |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
663 public int hashCode() { |
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:
22036
diff
changeset
|
664 return description.hashCode() * code.hashCode(); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
665 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
666 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
667 @Override |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
668 public boolean equals(Object obj) { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
669 if (this == obj) { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
670 return true; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
671 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
672 if (obj == null) { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
673 return false; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
674 } |
21271
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
675 if (obj instanceof LiteralSource) { |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
676 LiteralSource other = (LiteralSource) obj; |
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:
22036
diff
changeset
|
677 return description.equals(other.description) && code.equals(other.code); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
678 } |
21271
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
679 return false; |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
680 } |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
681 } |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
682 |
21291
70bbc530a2d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21271
diff
changeset
|
683 private static final class AppendableLiteralSource extends Source { |
21271
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
684 private String description; |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
685 final List<CharSequence> codeList = new ArrayList<>(); |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
686 |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
687 public AppendableLiteralSource(String description) { |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
688 this.description = description; |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
689 } |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
690 |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
691 @Override |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
692 public String getName() { |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
693 return description; |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
694 } |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
695 |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
696 @Override |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
697 public String getShortName() { |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
698 return description; |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
699 } |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
700 |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
701 @Override |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
702 public String getCode() { |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
703 return getCodeFromIndex(0); |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
704 } |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
705 |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
706 @Override |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
707 public String getPath() { |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
708 return description; |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
709 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
710 |
21271
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
711 @Override |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
712 public URL getURL() { |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
713 return null; |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
714 } |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
715 |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
716 @Override |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
717 public Reader getReader() { |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
718 return new StringReader(getCode()); |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
719 } |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
720 |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
721 @Override |
21964
9d15f06f3537
Using protected access modifier in non-subclassable class is suspicious. Making package private.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21951
diff
changeset
|
722 void reset() { |
21271
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
723 } |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
724 |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
725 private String getCodeFromIndex(int index) { |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
726 StringBuilder sb = new StringBuilder(); |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
727 for (int i = index; i < codeList.size(); i++) { |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
728 CharSequence s = codeList.get(i); |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
729 sb.append(s); |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
730 } |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
731 return sb.toString(); |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
732 } |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
733 |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
734 @Override |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
735 public void appendCode(CharSequence chars) { |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
736 codeList.add(chars); |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
737 clearTextMap(); |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
738 } |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
739 |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
740 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
741 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
742 private static final class FileSource extends Source { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
743 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
744 private final File file; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
745 private final String name; // Name used originally to describe the source |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
746 private final String path; // Normalized path description of an actual file |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
747 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
748 private String code = null; // A cache of the file's contents |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
749 private long timeStamp; // timestamp of the cache in the file system |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
750 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
751 public FileSource(File file, String name, String path) { |
19687
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
752 this(file, name, path, null); |
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
753 } |
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
754 |
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
755 public FileSource(File file, String name, String path, CharSequence chars) { |
18980
ae0eb836e6f4
store absolute file in FileSource
Lukas Stadler <lukas.stadler@oracle.com>
parents:
18979
diff
changeset
|
756 this.file = file.getAbsoluteFile(); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
757 this.name = name; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
758 this.path = path; |
19687
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
759 if (chars != null) { |
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
760 this.code = chars.toString(); |
787b5aa53401
Truffle: new factory method for files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18980
diff
changeset
|
761 } |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
762 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
763 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
764 @Override |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
765 public String getName() { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
766 return name; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
767 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
768 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
769 @Override |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
770 public String getShortName() { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
771 return file.getName(); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
772 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
773 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
774 @Override |
21964
9d15f06f3537
Using protected access modifier in non-subclassable class is suspicious. Making package private.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21951
diff
changeset
|
775 Object getHashKey() { |
21271
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
776 return path; |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
777 } |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
778 |
1516d26e8f2b
Truffle/Source: add a new kind of Source (both indexed and non-indexed flavors) whose contents are unavailable at creation, but will be provided incrementally.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21270
diff
changeset
|
779 @Override |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
780 public String getCode() { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
781 if (fileCacheEnabled) { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
782 if (code == null || timeStamp != file.lastModified()) { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
783 try { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
784 code = read(getReader()); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
785 timeStamp = file.lastModified(); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
786 } catch (IOException e) { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
787 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
788 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
789 return code; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
790 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
791 try { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
792 return read(new FileReader(file)); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
793 } catch (IOException e) { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
794 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
795 return null; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
796 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
797 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
798 @Override |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
799 public String getPath() { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
800 return path; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
801 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
802 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
803 @Override |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
804 public URL getURL() { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
805 return null; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
806 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
807 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
808 @Override |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
809 public Reader getReader() { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
810 if (code != null && timeStamp == file.lastModified()) { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
811 return new StringReader(code); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
812 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
813 try { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
814 return new FileReader(file); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
815 } catch (FileNotFoundException e) { |
18979
bdb24e259c11
include original exception in FileSource.getReader
Lukas Stadler <lukas.stadler@oracle.com>
parents:
18676
diff
changeset
|
816 |
bdb24e259c11
include original exception in FileSource.getReader
Lukas Stadler <lukas.stadler@oracle.com>
parents:
18676
diff
changeset
|
817 throw new RuntimeException("Can't find file " + path, e); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
818 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
819 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
820 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
821 @Override |
18676
1c12cf39281d
Truffle/Source: redefine equality of FileSource objects strictly in terms of the canonicalized file path, for use as hash key.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18672
diff
changeset
|
822 public int hashCode() { |
1c12cf39281d
Truffle/Source: redefine equality of FileSource objects strictly in terms of the canonicalized file path, for use as hash key.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18672
diff
changeset
|
823 return path.hashCode(); |
1c12cf39281d
Truffle/Source: redefine equality of FileSource objects strictly in terms of the canonicalized file path, for use as hash key.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18672
diff
changeset
|
824 } |
1c12cf39281d
Truffle/Source: redefine equality of FileSource objects strictly in terms of the canonicalized file path, for use as hash key.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18672
diff
changeset
|
825 |
1c12cf39281d
Truffle/Source: redefine equality of FileSource objects strictly in terms of the canonicalized file path, for use as hash key.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18672
diff
changeset
|
826 @Override |
1c12cf39281d
Truffle/Source: redefine equality of FileSource objects strictly in terms of the canonicalized file path, for use as hash key.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18672
diff
changeset
|
827 public boolean equals(Object obj) { |
1c12cf39281d
Truffle/Source: redefine equality of FileSource objects strictly in terms of the canonicalized file path, for use as hash key.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18672
diff
changeset
|
828 if (this == obj) { |
1c12cf39281d
Truffle/Source: redefine equality of FileSource objects strictly in terms of the canonicalized file path, for use as hash key.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18672
diff
changeset
|
829 return true; |
1c12cf39281d
Truffle/Source: redefine equality of FileSource objects strictly in terms of the canonicalized file path, for use as hash key.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18672
diff
changeset
|
830 } |
1c12cf39281d
Truffle/Source: redefine equality of FileSource objects strictly in terms of the canonicalized file path, for use as hash key.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18672
diff
changeset
|
831 if (obj instanceof FileSource) { |
1c12cf39281d
Truffle/Source: redefine equality of FileSource objects strictly in terms of the canonicalized file path, for use as hash key.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18672
diff
changeset
|
832 FileSource other = (FileSource) obj; |
1c12cf39281d
Truffle/Source: redefine equality of FileSource objects strictly in terms of the canonicalized file path, for use as hash key.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18672
diff
changeset
|
833 return path.equals(other.path); |
1c12cf39281d
Truffle/Source: redefine equality of FileSource objects strictly in terms of the canonicalized file path, for use as hash key.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18672
diff
changeset
|
834 } |
1c12cf39281d
Truffle/Source: redefine equality of FileSource objects strictly in terms of the canonicalized file path, for use as hash key.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18672
diff
changeset
|
835 return false; |
1c12cf39281d
Truffle/Source: redefine equality of FileSource objects strictly in terms of the canonicalized file path, for use as hash key.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18672
diff
changeset
|
836 } |
1c12cf39281d
Truffle/Source: redefine equality of FileSource objects strictly in terms of the canonicalized file path, for use as hash key.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18672
diff
changeset
|
837 |
1c12cf39281d
Truffle/Source: redefine equality of FileSource objects strictly in terms of the canonicalized file path, for use as hash key.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
18672
diff
changeset
|
838 @Override |
21964
9d15f06f3537
Using protected access modifier in non-subclassable class is suspicious. Making package private.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21951
diff
changeset
|
839 void reset() { |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
840 this.code = null; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
841 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
842 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
843 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
844 private static final class URLSource extends Source { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
845 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
846 private static final Map<URL, WeakReference<URLSource>> urlToSource = new HashMap<>(); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
847 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
848 public static URLSource get(URL url, String name) throws IOException { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
849 WeakReference<URLSource> sourceRef = urlToSource.get(url); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
850 URLSource source = sourceRef == null ? null : sourceRef.get(); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
851 if (source == null) { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
852 source = new URLSource(url, name); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
853 urlToSource.put(url, new WeakReference<>(source)); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
854 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
855 return source; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
856 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
857 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
858 private final URL url; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
859 private final String name; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
860 private String code = null; // A cache of the source contents |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
861 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
862 public URLSource(URL url, String name) throws IOException { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
863 this.url = url; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
864 this.name = name; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
865 code = read(new InputStreamReader(url.openStream())); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
866 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
867 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
868 @Override |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
869 public String getName() { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
870 return name; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
871 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
872 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
873 @Override |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
874 public String getShortName() { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
875 return name; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
876 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
877 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
878 @Override |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
879 public String getPath() { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
880 return url.getPath(); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
881 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
882 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
883 @Override |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
884 public URL getURL() { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
885 return url; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
886 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
887 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
888 @Override |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
889 public Reader getReader() { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
890 return new StringReader(code); |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
891 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
892 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
893 @Override |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
894 public String getCode() { |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
895 return code; |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
896 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
897 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
898 @Override |
21964
9d15f06f3537
Using protected access modifier in non-subclassable class is suspicious. Making package private.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21951
diff
changeset
|
899 void reset() { |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
900 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
901 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
902 |
21292
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
903 private static final class SubSource extends Source { |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
904 private final Source base; |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
905 private final int baseIndex; |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
906 private final int subLength; |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
907 |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
908 private static SubSource create(Source base, int baseIndex, int length) { |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
909 if (baseIndex < 0 || length < 0 || baseIndex + length > base.getLength()) { |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
910 throw new IllegalArgumentException("text positions out of range"); |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
911 } |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
912 return new SubSource(base, baseIndex, length); |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
913 } |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
914 |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
915 private SubSource(Source base, int baseIndex, int length) { |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
916 this.base = base; |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
917 this.baseIndex = baseIndex; |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
918 this.subLength = length; |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
919 } |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
920 |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
921 @Override |
21964
9d15f06f3537
Using protected access modifier in non-subclassable class is suspicious. Making package private.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21951
diff
changeset
|
922 void reset() { |
21292
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
923 assert false; |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
924 } |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
925 |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
926 @Override |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
927 public String getName() { |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
928 return base.getName(); |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
929 } |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
930 |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
931 @Override |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
932 public String getShortName() { |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
933 return base.getShortName(); |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
934 } |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
935 |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
936 @Override |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
937 public String getPath() { |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
938 return base.getPath(); |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
939 } |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
940 |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
941 @Override |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
942 public URL getURL() { |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
943 return null; |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
944 } |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
945 |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
946 @Override |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
947 public Reader getReader() { |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
948 assert false; |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
949 return null; |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
950 } |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
951 |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
952 @Override |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
953 public String getCode() { |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
954 return base.getCode(baseIndex, subLength); |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
955 } |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
956 } |
8eadc82f4a93
Truffle/Source: fix an inconsistency in the ordering of the private subclass sources; clean up the getTextMap() abstraction for more safety.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
21291
diff
changeset
|
957 |
17066
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
958 private static final class BytesSource extends Source { |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
959 |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
960 private final String name; |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
961 private final byte[] bytes; |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
962 private final int byteIndex; |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
963 private final int length; |
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:
21972
diff
changeset
|
964 private final CharsetDecoder decoder; |
17066
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
965 |
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:
21972
diff
changeset
|
966 public BytesSource(String name, byte[] bytes, int byteIndex, int length, Charset decoder) { |
17066
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
967 this.name = name; |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
968 this.bytes = bytes; |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
969 this.byteIndex = byteIndex; |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
970 this.length = length; |
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:
21972
diff
changeset
|
971 this.decoder = decoder.newDecoder(); |
17066
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
972 } |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
973 |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
974 @Override |
21964
9d15f06f3537
Using protected access modifier in non-subclassable class is suspicious. Making package private.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21951
diff
changeset
|
975 void reset() { |
17066
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
976 } |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
977 |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
978 @Override |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
979 public String getName() { |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
980 return name; |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
981 } |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
982 |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
983 @Override |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
984 public String getShortName() { |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
985 return name; |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
986 } |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
987 |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
988 @Override |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
989 public String getPath() { |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
990 return name; |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
991 } |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
992 |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
993 @Override |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
994 public URL getURL() { |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
995 return null; |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
996 } |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
997 |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
998 @Override |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
999 public Reader getReader() { |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1000 return null; |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1001 } |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1002 |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1003 @Override |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1004 public String getCode() { |
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:
21972
diff
changeset
|
1005 ByteBuffer bb = ByteBuffer.wrap(bytes, byteIndex, length); |
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:
21972
diff
changeset
|
1006 CharBuffer chb; |
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:
21972
diff
changeset
|
1007 try { |
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:
21972
diff
changeset
|
1008 chb = decoder.decode(bb); |
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:
21972
diff
changeset
|
1009 } catch (CharacterCodingException ex) { |
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:
21972
diff
changeset
|
1010 return ""; |
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:
21972
diff
changeset
|
1011 } |
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:
21972
diff
changeset
|
1012 return chb.toString(); |
17066
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1013 } |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1014 |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1015 @Override |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1016 public String getCode(int byteOffset, int codeLength) { |
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:
21972
diff
changeset
|
1017 ByteBuffer bb = ByteBuffer.wrap(bytes, byteIndex + byteOffset, codeLength); |
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:
21972
diff
changeset
|
1018 CharBuffer chb; |
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:
21972
diff
changeset
|
1019 try { |
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:
21972
diff
changeset
|
1020 chb = decoder.decode(bb); |
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:
21972
diff
changeset
|
1021 } catch (CharacterCodingException ex) { |
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:
21972
diff
changeset
|
1022 return ""; |
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:
21972
diff
changeset
|
1023 } |
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:
21972
diff
changeset
|
1024 return chb.toString(); |
17066
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1025 } |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1026 |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1027 @Override |
21964
9d15f06f3537
Using protected access modifier in non-subclassable class is suspicious. Making package private.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21951
diff
changeset
|
1028 void checkRange(int charIndex, int rangeLength) { |
17066
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1029 if (!(charIndex >= 0 && rangeLength >= 0 && charIndex + rangeLength <= length)) { |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1030 throw new IllegalArgumentException("text positions out of range"); |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1031 } |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1032 } |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1033 |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1034 @Override |
21964
9d15f06f3537
Using protected access modifier in non-subclassable class is suspicious. Making package private.
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21951
diff
changeset
|
1035 TextMap createTextMap() { |
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:
21972
diff
changeset
|
1036 return TextMap.fromString(getCode()); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
1037 } |
16130
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1038 } |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1039 |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1040 /** |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1041 * A utility for converting between coordinate systems in a string of text interspersed with |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1042 * newline characters. The coordinate systems are: |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1043 * <ul> |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1044 * <li>0-based character offset from the beginning of the text, where newline characters count |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1045 * as a single character and the first character in the text occupies position 0.</li> |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1046 * <li>1-based position in the 2D space of lines and columns, in which the first position in the |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1047 * text is at (1,1).</li> |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1048 * </ul> |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1049 * <p> |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1050 * This utility is based on positions occupied by characters, not text stream positions as in a |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1051 * text editor. The distinction shows up in editors where you can put the cursor just past the |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1052 * last character in a buffer; this is necessary, among other reasons, so that you can put the |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1053 * edit cursor in a new (empty) buffer. For the purposes of this utility, however, there are no |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1054 * character positions in an empty text string and there are no lines in an empty text string. |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1055 * <p> |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1056 * A newline character designates the end of a line and occupies a column position. |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1057 * <p> |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1058 * If the text ends with a character other than a newline, then the characters following the |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1059 * final newline character count as a line, even though not newline-terminated. |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1060 * <p> |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1061 * <strong>Limitations:</strong> |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1062 * <ul> |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1063 * <li>Does not handle multiple character encodings correctly.</li> |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1064 * <li>Treats tabs as occupying 1 column.</li> |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1065 * <li>Does not handle multiple-character line termination sequences correctly.</li> |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1066 * </ul> |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1067 */ |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1068 private static final class TextMap { |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1069 |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1070 // 0-based offsets of newline characters in the text, with sentinel |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1071 private final int[] nlOffsets; |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1072 |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1073 // The number of characters in the text, including newlines (which count as 1). |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1074 private final int textLength; |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1075 |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1076 // Is the final text character a newline? |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1077 final boolean finalNL; |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1078 |
17066
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1079 public TextMap(int[] nlOffsets, int textLength, boolean finalNL) { |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1080 this.nlOffsets = nlOffsets; |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1081 this.textLength = textLength; |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1082 this.finalNL = finalNL; |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1083 } |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1084 |
16130
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1085 /** |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1086 * Constructs map permitting translation between 0-based character offsets and 1-based |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1087 * lines/columns. |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1088 */ |
17066
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1089 public static TextMap fromString(String text) { |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1090 final int textLength = text.length(); |
16130
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1091 final ArrayList<Integer> lines = new ArrayList<>(); |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1092 lines.add(0); |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1093 int offset = 0; |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1094 |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1095 while (offset < text.length()) { |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1096 final int nlIndex = text.indexOf('\n', offset); |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1097 if (nlIndex >= 0) { |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1098 offset = nlIndex + 1; |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1099 lines.add(offset); |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1100 } else { |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1101 break; |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1102 } |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1103 } |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1104 lines.add(Integer.MAX_VALUE); |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1105 |
17066
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1106 final int[] nlOffsets = new int[lines.size()]; |
16130
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1107 for (int line = 0; line < lines.size(); line++) { |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1108 nlOffsets[line] = lines.get(line); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
1109 } |
16130
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1110 |
17066
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1111 final boolean finalNL = textLength > 0 && (textLength == nlOffsets[nlOffsets.length - 2]); |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1112 |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1113 return new TextMap(nlOffsets, textLength, finalNL); |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1114 } |
0bcefb0f8488
Truffle: byte[] sources.
Chris Seaton <chris.seaton@oracle.com>
parents:
16989
diff
changeset
|
1115 |
16130
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1116 /** |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1117 * Converts 0-based character offset to 1-based number of the line containing the character. |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1118 * |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1119 * @throws IllegalArgumentException if the offset is outside the string. |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1120 */ |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1121 public int offsetToLine(int offset) throws IllegalArgumentException { |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1122 if (offset < 0 || offset >= textLength) { |
22036
f26b6524e5e0
fixes for empty sources
Mick Jordan <mick.jordan@oracle.com>
parents:
21989
diff
changeset
|
1123 if (offset == 0 && textLength == 0) { |
f26b6524e5e0
fixes for empty sources
Mick Jordan <mick.jordan@oracle.com>
parents:
21989
diff
changeset
|
1124 return 1; |
f26b6524e5e0
fixes for empty sources
Mick Jordan <mick.jordan@oracle.com>
parents:
21989
diff
changeset
|
1125 } |
16130
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1126 throw new IllegalArgumentException("offset out of bounds"); |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1127 } |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1128 int line = 1; |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1129 while (offset >= nlOffsets[line]) { |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1130 line++; |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1131 } |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1132 return line; |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1133 } |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1134 |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1135 /** |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1136 * Converts 0-based character offset to 1-based number of the column occupied by the |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1137 * character. |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1138 * <p> |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1139 * Tabs are not expanded; they occupy 1 column. |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1140 * |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1141 * @throws IllegalArgumentException if the offset is outside the string. |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1142 */ |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1143 public int offsetToCol(int offset) throws IllegalArgumentException { |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1144 return 1 + offset - nlOffsets[offsetToLine(offset) - 1]; |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1145 } |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1146 |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1147 /** |
19690
c152a485d747
Truffle: new method Source.getLength() and semantic adjustments to the new factory method for creating files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
19688
diff
changeset
|
1148 * The number of characters in the mapped text. |
c152a485d747
Truffle: new method Source.getLength() and semantic adjustments to the new factory method for creating files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
19688
diff
changeset
|
1149 */ |
c152a485d747
Truffle: new method Source.getLength() and semantic adjustments to the new factory method for creating files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
19688
diff
changeset
|
1150 public int length() { |
c152a485d747
Truffle: new method Source.getLength() and semantic adjustments to the new factory method for creating files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
19688
diff
changeset
|
1151 return textLength; |
c152a485d747
Truffle: new method Source.getLength() and semantic adjustments to the new factory method for creating files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
19688
diff
changeset
|
1152 } |
c152a485d747
Truffle: new method Source.getLength() and semantic adjustments to the new factory method for creating files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
19688
diff
changeset
|
1153 |
c152a485d747
Truffle: new method Source.getLength() and semantic adjustments to the new factory method for creating files whose contents have already been read.
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
19688
diff
changeset
|
1154 /** |
16130
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1155 * The number of lines in the text; if characters appear after the final newline, then they |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1156 * also count as a line, even though not newline-terminated. |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1157 */ |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1158 public int lineCount() { |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1159 if (textLength == 0) { |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1160 return 0; |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1161 } |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1162 return finalNL ? nlOffsets.length - 2 : nlOffsets.length - 1; |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1163 } |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1164 |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1165 /** |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1166 * Converts 1-based line number to the 0-based offset of the line's first character; this |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1167 * would be the offset of a newline if the line is empty. |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1168 * |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1169 * @throws IllegalArgumentException if there is no such line in the text. |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1170 */ |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1171 public int lineStartOffset(int line) throws IllegalArgumentException { |
22036
f26b6524e5e0
fixes for empty sources
Mick Jordan <mick.jordan@oracle.com>
parents:
21989
diff
changeset
|
1172 if (textLength == 0) { |
f26b6524e5e0
fixes for empty sources
Mick Jordan <mick.jordan@oracle.com>
parents:
21989
diff
changeset
|
1173 return 0; |
f26b6524e5e0
fixes for empty sources
Mick Jordan <mick.jordan@oracle.com>
parents:
21989
diff
changeset
|
1174 } |
f26b6524e5e0
fixes for empty sources
Mick Jordan <mick.jordan@oracle.com>
parents:
21989
diff
changeset
|
1175 if (lineOutOfRange(line)) { |
16130
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1176 throw new IllegalArgumentException("line out of bounds"); |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1177 } |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1178 return nlOffsets[line - 1]; |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1179 } |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1180 |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1181 /** |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1182 * Gets the number of characters in a line, identified by 1-based line number; |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1183 * <em>does not</em> include the final newline, if any. |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1184 * |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1185 * @throws IllegalArgumentException if there is no such line in the text. |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1186 */ |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1187 public int lineLength(int line) throws IllegalArgumentException { |
22036
f26b6524e5e0
fixes for empty sources
Mick Jordan <mick.jordan@oracle.com>
parents:
21989
diff
changeset
|
1188 if (textLength == 0) { |
f26b6524e5e0
fixes for empty sources
Mick Jordan <mick.jordan@oracle.com>
parents:
21989
diff
changeset
|
1189 return 0; |
f26b6524e5e0
fixes for empty sources
Mick Jordan <mick.jordan@oracle.com>
parents:
21989
diff
changeset
|
1190 } |
f26b6524e5e0
fixes for empty sources
Mick Jordan <mick.jordan@oracle.com>
parents:
21989
diff
changeset
|
1191 if (lineOutOfRange(line)) { |
16130
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1192 throw new IllegalArgumentException("line out of bounds"); |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1193 } |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1194 if (line == nlOffsets.length - 1 && !finalNL) { |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1195 return textLength - nlOffsets[line - 1]; |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1196 } |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1197 return (nlOffsets[line] - nlOffsets[line - 1]) - 1; |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1198 |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1199 } |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1200 |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1201 /** |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1202 * Is the line number out of range. |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1203 */ |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1204 private boolean lineOutOfRange(int line) { |
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1205 return line <= 0 || line >= nlOffsets.length || (line == nlOffsets.length - 1 && finalNL); |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
1206 } |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
1207 |
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
1208 } |
16130
6f7d3f3703d3
Truffle/Source:
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
16068
diff
changeset
|
1209 |
16068
74e142bd2b12
Truffle/Source: major API revision
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
1210 } |