Mercurial > hg > truffle
annotate truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/FrameDescriptor.java @ 22490:fa86f9f3848d
change FrameDescriptor#copy to also copy info
author | Andreas Woess <andreas.woess@oracle.com> |
---|---|
date | Thu, 10 Dec 2015 18:51:41 +0100 |
parents | dc2bfc816011 |
children | a73f1d7a5a3e |
rev | line source |
---|---|
7267
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
1 /* |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
2 * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
4 * |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
11279
494b818b527c
Adding "Classpath" exception to the classes in the com.oracle.truffle.api and the com.oracle.truffle.api.dsl package.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
9952
diff
changeset
|
7 * published by the Free Software Foundation. Oracle designates this |
494b818b527c
Adding "Classpath" exception to the classes in the com.oracle.truffle.api and the com.oracle.truffle.api.dsl package.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
9952
diff
changeset
|
8 * particular file as subject to the "Classpath" exception as provided |
494b818b527c
Adding "Classpath" exception to the classes in the com.oracle.truffle.api and the com.oracle.truffle.api.dsl package.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
9952
diff
changeset
|
9 * by Oracle in the LICENSE file that accompanied this code. |
7267
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
10 * |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
11 * This code is distributed in the hope that it will be useful, but WITHOUT |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
14 * version 2 for more details (a copy is included in the LICENSE file that |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
15 * accompanied this code). |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
16 * |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
17 * You should have received a copy of the GNU General Public License version |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
18 * 2 along with this work; if not, write to the Free Software Foundation, |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
20 * |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
22 * or visit www.oracle.com if you need additional information or have any |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
23 * questions. |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
24 */ |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
25 package com.oracle.truffle.api.frame; |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
26 |
22157
dc83cc1f94f2
Using fully qualified imports
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21966
diff
changeset
|
27 import com.oracle.truffle.api.Assumption; |
dc83cc1f94f2
Using fully qualified imports
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21966
diff
changeset
|
28 import com.oracle.truffle.api.CompilerAsserts; |
dc83cc1f94f2
Using fully qualified imports
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21966
diff
changeset
|
29 import com.oracle.truffle.api.Truffle; |
dc83cc1f94f2
Using fully qualified imports
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21966
diff
changeset
|
30 import java.util.ArrayList; |
dc83cc1f94f2
Using fully qualified imports
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21966
diff
changeset
|
31 import java.util.Collections; |
dc83cc1f94f2
Using fully qualified imports
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21966
diff
changeset
|
32 import java.util.HashMap; |
dc83cc1f94f2
Using fully qualified imports
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21966
diff
changeset
|
33 import java.util.List; |
dc83cc1f94f2
Using fully qualified imports
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
21966
diff
changeset
|
34 import java.util.Set; |
9258
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
35 |
7267
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
36 /** |
7530
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7267
diff
changeset
|
37 * Descriptor of the slots of frame objects. Multiple frame instances are associated with one such |
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7267
diff
changeset
|
38 * descriptor. |
7267
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
39 */ |
9258
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
40 public final class FrameDescriptor implements Cloneable { |
7267
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
41 |
18161
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
42 private final Object defaultValue; |
12644
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11810
diff
changeset
|
43 private final ArrayList<FrameSlot> slots; |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11810
diff
changeset
|
44 private final HashMap<Object, FrameSlot> identifierToSlotMap; |
9258
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
45 private Assumption version; |
11810
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
46 private HashMap<Object, Assumption> identifierToNotInFrameAssumptionMap; |
7267
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
47 |
22432
079cd9183128
Documenting and testing some aspects of FrameDescriptor behavior
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22298
diff
changeset
|
48 /** |
079cd9183128
Documenting and testing some aspects of FrameDescriptor behavior
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22298
diff
changeset
|
49 * Constructs empty descriptor. The {@link #getDefaultValue()} is <code>null</code>. |
079cd9183128
Documenting and testing some aspects of FrameDescriptor behavior
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22298
diff
changeset
|
50 */ |
7267
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
51 public FrameDescriptor() { |
18161
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
52 this(null); |
7267
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
53 } |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
54 |
22432
079cd9183128
Documenting and testing some aspects of FrameDescriptor behavior
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22298
diff
changeset
|
55 /** |
079cd9183128
Documenting and testing some aspects of FrameDescriptor behavior
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22298
diff
changeset
|
56 * Constructs new descriptor with specified {@link #getDefaultValue()}. |
22490
fa86f9f3848d
change FrameDescriptor#copy to also copy info
Andreas Woess <andreas.woess@oracle.com>
parents:
22435
diff
changeset
|
57 * |
22432
079cd9183128
Documenting and testing some aspects of FrameDescriptor behavior
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22298
diff
changeset
|
58 * @param defaultValue to be returned from {@link #getDefaultValue()} |
079cd9183128
Documenting and testing some aspects of FrameDescriptor behavior
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22298
diff
changeset
|
59 */ |
18161
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
60 public FrameDescriptor(Object defaultValue) { |
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:
21951
diff
changeset
|
61 CompilerAsserts.neverPartOfCompilation(); |
18161
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
62 this.defaultValue = defaultValue; |
7267
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
63 slots = new ArrayList<>(); |
7722
f07cafa29db1
Allow arbitrary objects to serve as identifiers for a frame slot.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7530
diff
changeset
|
64 identifierToSlotMap = new HashMap<>(); |
9258
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
65 version = createVersion(); |
7267
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
66 } |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
67 |
22432
079cd9183128
Documenting and testing some aspects of FrameDescriptor behavior
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22298
diff
changeset
|
68 /** |
079cd9183128
Documenting and testing some aspects of FrameDescriptor behavior
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22298
diff
changeset
|
69 * Use {@link #FrameDescriptor()}. |
22490
fa86f9f3848d
change FrameDescriptor#copy to also copy info
Andreas Woess <andreas.woess@oracle.com>
parents:
22435
diff
changeset
|
70 * |
22432
079cd9183128
Documenting and testing some aspects of FrameDescriptor behavior
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22298
diff
changeset
|
71 * @return new instance of the descriptor |
079cd9183128
Documenting and testing some aspects of FrameDescriptor behavior
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22298
diff
changeset
|
72 * @deprecated |
079cd9183128
Documenting and testing some aspects of FrameDescriptor behavior
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22298
diff
changeset
|
73 */ |
079cd9183128
Documenting and testing some aspects of FrameDescriptor behavior
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22298
diff
changeset
|
74 @Deprecated |
18161
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
75 public static FrameDescriptor create() { |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
76 return new FrameDescriptor(); |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
77 } |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
78 |
22432
079cd9183128
Documenting and testing some aspects of FrameDescriptor behavior
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22298
diff
changeset
|
79 /** |
079cd9183128
Documenting and testing some aspects of FrameDescriptor behavior
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22298
diff
changeset
|
80 * Use {@link #FrameDescriptor(java.lang.Object) }. |
22490
fa86f9f3848d
change FrameDescriptor#copy to also copy info
Andreas Woess <andreas.woess@oracle.com>
parents:
22435
diff
changeset
|
81 * |
22432
079cd9183128
Documenting and testing some aspects of FrameDescriptor behavior
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22298
diff
changeset
|
82 * @return new instance of the descriptor |
079cd9183128
Documenting and testing some aspects of FrameDescriptor behavior
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22298
diff
changeset
|
83 * @deprecated |
079cd9183128
Documenting and testing some aspects of FrameDescriptor behavior
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22298
diff
changeset
|
84 */ |
079cd9183128
Documenting and testing some aspects of FrameDescriptor behavior
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22298
diff
changeset
|
85 @Deprecated |
18161
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
86 public static FrameDescriptor create(Object defaultValue) { |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
87 return new FrameDescriptor(defaultValue); |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
88 } |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
89 |
22433
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
90 /** |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
91 * Adds frame slot. Delegates to |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
92 * {@link #addFrameSlot(java.lang.Object, java.lang.Object, com.oracle.truffle.api.frame.FrameSlotKind) |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
93 * addFrameSlot}(identifier, <code>null</code>, {@link FrameSlotKind#Illegal}). This is slow |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
94 * operation that switches to interpreter mode. |
22490
fa86f9f3848d
change FrameDescriptor#copy to also copy info
Andreas Woess <andreas.woess@oracle.com>
parents:
22435
diff
changeset
|
95 * |
22433
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
96 * @param identifier key for the slot |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
97 * @return the newly created slot |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
98 */ |
7722
f07cafa29db1
Allow arbitrary objects to serve as identifiers for a frame slot.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7530
diff
changeset
|
99 public FrameSlot addFrameSlot(Object identifier) { |
16727
9d55732d0880
additional info field on FrameSlot nodes (for language-specific use)
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16051
diff
changeset
|
100 return addFrameSlot(identifier, null, FrameSlotKind.Illegal); |
7267
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
101 } |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
102 |
22433
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
103 /** |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
104 * Adds frame slot. Delegates to |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
105 * {@link #addFrameSlot(java.lang.Object, java.lang.Object, com.oracle.truffle.api.frame.FrameSlotKind) |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
106 * addFrameSlot}(identifier, <code>null</code>, <code>kind</code>). This is slow operation that |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
107 * switches to interpreter mode. |
22490
fa86f9f3848d
change FrameDescriptor#copy to also copy info
Andreas Woess <andreas.woess@oracle.com>
parents:
22435
diff
changeset
|
108 * |
22433
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
109 * @param identifier key for the slot |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
110 * @param kind the kind of the new slot |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
111 * @return the newly created slot |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
112 */ |
9321
cd1a1d92b3e3
Frame API: Introduce FrameSlotKind.
Andreas Woess <andreas.woess@jku.at>
parents:
9258
diff
changeset
|
113 public FrameSlot addFrameSlot(Object identifier, FrameSlotKind kind) { |
16727
9d55732d0880
additional info field on FrameSlot nodes (for language-specific use)
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16051
diff
changeset
|
114 return addFrameSlot(identifier, null, kind); |
9d55732d0880
additional info field on FrameSlot nodes (for language-specific use)
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16051
diff
changeset
|
115 } |
9d55732d0880
additional info field on FrameSlot nodes (for language-specific use)
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16051
diff
changeset
|
116 |
22433
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
117 /** |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
118 * Adds new frame slot to {@link #getSlots()} list. This is slow operation that switches to |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
119 * interpreter mode. |
22490
fa86f9f3848d
change FrameDescriptor#copy to also copy info
Andreas Woess <andreas.woess@oracle.com>
parents:
22435
diff
changeset
|
120 * |
22433
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
121 * @param identifier key for the slot - it needs proper {@link #equals(java.lang.Object)} and |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
122 * {@link Object#hashCode()} implementations |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
123 * @param info additional {@link FrameSlot#getInfo() information for the slot} |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
124 * @param kind the kind of the new slot |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
125 * @return the newly created slot |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
126 */ |
16727
9d55732d0880
additional info field on FrameSlot nodes (for language-specific use)
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16051
diff
changeset
|
127 public FrameSlot addFrameSlot(Object identifier, Object info, FrameSlotKind kind) { |
16051
da9b9b625818
Truffle FrameDescriptor: add compiler asserts
Bernhard Urban <bernhard.urban@jku.at>
parents:
13875
diff
changeset
|
128 CompilerAsserts.neverPartOfCompilation("interpreter-only. includes hashmap operations."); |
7722
f07cafa29db1
Allow arbitrary objects to serve as identifiers for a frame slot.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7530
diff
changeset
|
129 assert !identifierToSlotMap.containsKey(identifier); |
16727
9d55732d0880
additional info field on FrameSlot nodes (for language-specific use)
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16051
diff
changeset
|
130 FrameSlot slot = new FrameSlot(this, identifier, info, slots.size(), kind); |
7267
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
131 slots.add(slot); |
7722
f07cafa29db1
Allow arbitrary objects to serve as identifiers for a frame slot.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7530
diff
changeset
|
132 identifierToSlotMap.put(identifier, slot); |
9258
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
133 updateVersion(); |
11810
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
134 invalidateNotInFrameAssumption(identifier); |
7267
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
135 return slot; |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
136 } |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
137 |
22433
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
138 /** |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
139 * Finds an existing slot. This is slow operation. |
22490
fa86f9f3848d
change FrameDescriptor#copy to also copy info
Andreas Woess <andreas.woess@oracle.com>
parents:
22435
diff
changeset
|
140 * |
22433
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
141 * @param identifier the key of the slot to search for |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
142 * @return the slot or <code>null</code> |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
143 */ |
7722
f07cafa29db1
Allow arbitrary objects to serve as identifiers for a frame slot.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7530
diff
changeset
|
144 public FrameSlot findFrameSlot(Object identifier) { |
22298
e2e5168618fc
FrameDescriptor.findFrameSlot() should not be called in compiled code.
Benoit Daloze <benoit.daloze@jku.at>
parents:
22157
diff
changeset
|
145 CompilerAsserts.neverPartOfCompilation("interpreter-only. includes hashmap operations."); |
7722
f07cafa29db1
Allow arbitrary objects to serve as identifiers for a frame slot.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7530
diff
changeset
|
146 return identifierToSlotMap.get(identifier); |
7267
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
147 } |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
148 |
22433
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
149 /** |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
150 * Finds an existing slot or creates new one. This is slow operation. |
22490
fa86f9f3848d
change FrameDescriptor#copy to also copy info
Andreas Woess <andreas.woess@oracle.com>
parents:
22435
diff
changeset
|
151 * |
22433
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
152 * @param identifier the key of the slot to search for |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
153 * @return the slot |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
154 */ |
7722
f07cafa29db1
Allow arbitrary objects to serve as identifiers for a frame slot.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7530
diff
changeset
|
155 public FrameSlot findOrAddFrameSlot(Object identifier) { |
f07cafa29db1
Allow arbitrary objects to serve as identifiers for a frame slot.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7530
diff
changeset
|
156 FrameSlot result = findFrameSlot(identifier); |
7267
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
157 if (result != null) { |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
158 return result; |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
159 } |
7722
f07cafa29db1
Allow arbitrary objects to serve as identifiers for a frame slot.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7530
diff
changeset
|
160 return addFrameSlot(identifier); |
7267
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
161 } |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
162 |
22433
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
163 /** |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
164 * Finds an existing slot or creates new one. This is slow operation. |
22490
fa86f9f3848d
change FrameDescriptor#copy to also copy info
Andreas Woess <andreas.woess@oracle.com>
parents:
22435
diff
changeset
|
165 * |
22433
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
166 * @param identifier the key of the slot to search for |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
167 * @param kind the kind for the newly created slot |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
168 * @return the found or newly created slot |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
169 */ |
9321
cd1a1d92b3e3
Frame API: Introduce FrameSlotKind.
Andreas Woess <andreas.woess@jku.at>
parents:
9258
diff
changeset
|
170 public FrameSlot findOrAddFrameSlot(Object identifier, FrameSlotKind kind) { |
9258
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
171 FrameSlot result = findFrameSlot(identifier); |
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
172 if (result != null) { |
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
173 return result; |
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
174 } |
9321
cd1a1d92b3e3
Frame API: Introduce FrameSlotKind.
Andreas Woess <andreas.woess@jku.at>
parents:
9258
diff
changeset
|
175 return addFrameSlot(identifier, kind); |
7267
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
176 } |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
177 |
22433
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
178 /** |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
179 * Finds an existing slot or creates new one. This is slow operation. |
22490
fa86f9f3848d
change FrameDescriptor#copy to also copy info
Andreas Woess <andreas.woess@oracle.com>
parents:
22435
diff
changeset
|
180 * |
22433
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
181 * @param identifier the key of the slot to search for |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
182 * @param info info for the newly created slot |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
183 * @param kind the kind for the newly created slot |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
184 * @return the found or newly created slot |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
185 */ |
18161
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
186 public FrameSlot findOrAddFrameSlot(Object identifier, Object info, FrameSlotKind kind) { |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
187 FrameSlot result = findFrameSlot(identifier); |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
188 if (result != null) { |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
189 return result; |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
190 } |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
191 return addFrameSlot(identifier, info, kind); |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
192 } |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
193 |
22433
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
194 /** |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
195 * Removes a slot. If the identifier is found, its slot is removed from this descriptor. This is |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
196 * slow operation. |
22490
fa86f9f3848d
change FrameDescriptor#copy to also copy info
Andreas Woess <andreas.woess@oracle.com>
parents:
22435
diff
changeset
|
197 * |
22433
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
198 * @param identifier identifies the slot to remove |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
199 */ |
13875
042a2d972174
support frame slot removal
Michael Haupt <michael.haupt@oracle.com>
parents:
12644
diff
changeset
|
200 public void removeFrameSlot(Object identifier) { |
16051
da9b9b625818
Truffle FrameDescriptor: add compiler asserts
Bernhard Urban <bernhard.urban@jku.at>
parents:
13875
diff
changeset
|
201 CompilerAsserts.neverPartOfCompilation("interpreter-only. includes hashmap operations."); |
13875
042a2d972174
support frame slot removal
Michael Haupt <michael.haupt@oracle.com>
parents:
12644
diff
changeset
|
202 assert identifierToSlotMap.containsKey(identifier); |
042a2d972174
support frame slot removal
Michael Haupt <michael.haupt@oracle.com>
parents:
12644
diff
changeset
|
203 slots.remove(identifierToSlotMap.get(identifier)); |
042a2d972174
support frame slot removal
Michael Haupt <michael.haupt@oracle.com>
parents:
12644
diff
changeset
|
204 identifierToSlotMap.remove(identifier); |
042a2d972174
support frame slot removal
Michael Haupt <michael.haupt@oracle.com>
parents:
12644
diff
changeset
|
205 updateVersion(); |
042a2d972174
support frame slot removal
Michael Haupt <michael.haupt@oracle.com>
parents:
12644
diff
changeset
|
206 getNotInFrameAssumption(identifier); |
042a2d972174
support frame slot removal
Michael Haupt <michael.haupt@oracle.com>
parents:
12644
diff
changeset
|
207 } |
042a2d972174
support frame slot removal
Michael Haupt <michael.haupt@oracle.com>
parents:
12644
diff
changeset
|
208 |
22432
079cd9183128
Documenting and testing some aspects of FrameDescriptor behavior
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22298
diff
changeset
|
209 /** |
079cd9183128
Documenting and testing some aspects of FrameDescriptor behavior
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22298
diff
changeset
|
210 * Returns number of slots in the descriptor. |
22490
fa86f9f3848d
change FrameDescriptor#copy to also copy info
Andreas Woess <andreas.woess@oracle.com>
parents:
22435
diff
changeset
|
211 * |
22432
079cd9183128
Documenting and testing some aspects of FrameDescriptor behavior
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22298
diff
changeset
|
212 * @return the same value as {@link #getSlots()}.{@link List#size()} would return |
079cd9183128
Documenting and testing some aspects of FrameDescriptor behavior
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22298
diff
changeset
|
213 */ |
7267
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
214 public int getSize() { |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
215 return slots.size(); |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
216 } |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
217 |
22432
079cd9183128
Documenting and testing some aspects of FrameDescriptor behavior
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22298
diff
changeset
|
218 /** |
079cd9183128
Documenting and testing some aspects of FrameDescriptor behavior
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22298
diff
changeset
|
219 * Current set of slots in the descriptor. |
22490
fa86f9f3848d
change FrameDescriptor#copy to also copy info
Andreas Woess <andreas.woess@oracle.com>
parents:
22435
diff
changeset
|
220 * |
22432
079cd9183128
Documenting and testing some aspects of FrameDescriptor behavior
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22298
diff
changeset
|
221 * @return unmodifiable list of {@link FrameSlot} |
079cd9183128
Documenting and testing some aspects of FrameDescriptor behavior
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22298
diff
changeset
|
222 */ |
7530
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7267
diff
changeset
|
223 public List<? extends FrameSlot> getSlots() { |
7267
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
224 return Collections.unmodifiableList(slots); |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
225 } |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
226 |
9258
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
227 /** |
11808
0c4d7b468dd7
include isValid in Assumption.toString(); minor javadoc fix.
Andreas Woess <andreas.woess@jku.at>
parents:
11343
diff
changeset
|
228 * Retrieve the list of all the identifiers associated with this frame descriptor. |
16051
da9b9b625818
Truffle FrameDescriptor: add compiler asserts
Bernhard Urban <bernhard.urban@jku.at>
parents:
13875
diff
changeset
|
229 * |
9258
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
230 * @return the list of all the identifiers in this frame descriptor |
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
231 */ |
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
232 public Set<Object> getIdentifiers() { |
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
233 return Collections.unmodifiableSet(identifierToSlotMap.keySet()); |
7267
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
234 } |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
235 |
22434
c11ce7d2e2c3
Documenting that FrameDescriptor#copy doesn't copy info and kind - isn't that an error?
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22433
diff
changeset
|
236 /** |
22490
fa86f9f3848d
change FrameDescriptor#copy to also copy info
Andreas Woess <andreas.woess@oracle.com>
parents:
22435
diff
changeset
|
237 * Deeper copy of the descriptor. Copies all slots in the descriptor, but only their |
fa86f9f3848d
change FrameDescriptor#copy to also copy info
Andreas Woess <andreas.woess@oracle.com>
parents:
22435
diff
changeset
|
238 * {@linkplain FrameSlot#getIdentifier() identifier} and {@linkplain FrameSlot#getInfo() info} |
fa86f9f3848d
change FrameDescriptor#copy to also copy info
Andreas Woess <andreas.woess@oracle.com>
parents:
22435
diff
changeset
|
239 * but not their {@linkplain FrameSlot#getKind() kind}! |
fa86f9f3848d
change FrameDescriptor#copy to also copy info
Andreas Woess <andreas.woess@oracle.com>
parents:
22435
diff
changeset
|
240 * |
22435
dc2bfc816011
Documenting and testing behavior of FrameDescriptor#shallowCopy
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22434
diff
changeset
|
241 * @return new instance of a descriptor with copies of values from this one |
22434
c11ce7d2e2c3
Documenting that FrameDescriptor#copy doesn't copy info and kind - isn't that an error?
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22433
diff
changeset
|
242 */ |
9258
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
243 public FrameDescriptor copy() { |
18161
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
244 FrameDescriptor clonedFrameDescriptor = new FrameDescriptor(this.defaultValue); |
22490
fa86f9f3848d
change FrameDescriptor#copy to also copy info
Andreas Woess <andreas.woess@oracle.com>
parents:
22435
diff
changeset
|
245 for (int i = 0; i < slots.size(); i++) { |
fa86f9f3848d
change FrameDescriptor#copy to also copy info
Andreas Woess <andreas.woess@oracle.com>
parents:
22435
diff
changeset
|
246 FrameSlot slot = slots.get(i); |
fa86f9f3848d
change FrameDescriptor#copy to also copy info
Andreas Woess <andreas.woess@oracle.com>
parents:
22435
diff
changeset
|
247 clonedFrameDescriptor.addFrameSlot(slot.getIdentifier(), slot.getInfo(), FrameSlotKind.Illegal); |
7267
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
248 } |
9258
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
249 return clonedFrameDescriptor; |
7267
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
250 } |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
251 |
22435
dc2bfc816011
Documenting and testing behavior of FrameDescriptor#shallowCopy
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22434
diff
changeset
|
252 /** |
dc2bfc816011
Documenting and testing behavior of FrameDescriptor#shallowCopy
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22434
diff
changeset
|
253 * Shallow copy of the descriptor. Re-uses the existing slots in new descriptor. As a result, if |
dc2bfc816011
Documenting and testing behavior of FrameDescriptor#shallowCopy
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22434
diff
changeset
|
254 * you {@link FrameSlot#setKind(com.oracle.truffle.api.frame.FrameSlotKind) change kind} of one |
dc2bfc816011
Documenting and testing behavior of FrameDescriptor#shallowCopy
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22434
diff
changeset
|
255 * of the slots it is changed in the original as well as in the shallow copy. |
22490
fa86f9f3848d
change FrameDescriptor#copy to also copy info
Andreas Woess <andreas.woess@oracle.com>
parents:
22435
diff
changeset
|
256 * |
22435
dc2bfc816011
Documenting and testing behavior of FrameDescriptor#shallowCopy
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22434
diff
changeset
|
257 * @return new instance of a descriptor with copies of values from this one |
dc2bfc816011
Documenting and testing behavior of FrameDescriptor#shallowCopy
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22434
diff
changeset
|
258 */ |
9952
5d91b0b67cba
Introduce Frame.isInitialized in the Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
9521
diff
changeset
|
259 public FrameDescriptor shallowCopy() { |
18161
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
260 FrameDescriptor clonedFrameDescriptor = new FrameDescriptor(this.defaultValue); |
9952
5d91b0b67cba
Introduce Frame.isInitialized in the Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
9521
diff
changeset
|
261 clonedFrameDescriptor.slots.addAll(slots); |
5d91b0b67cba
Introduce Frame.isInitialized in the Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
9521
diff
changeset
|
262 clonedFrameDescriptor.identifierToSlotMap.putAll(identifierToSlotMap); |
5d91b0b67cba
Introduce Frame.isInitialized in the Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
9521
diff
changeset
|
263 return clonedFrameDescriptor; |
5d91b0b67cba
Introduce Frame.isInitialized in the Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
9521
diff
changeset
|
264 } |
5d91b0b67cba
Introduce Frame.isInitialized in the Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
9521
diff
changeset
|
265 |
9258
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
266 void updateVersion() { |
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
267 version.invalidate(); |
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
268 version = createVersion(); |
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
269 } |
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
270 |
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
271 public Assumption getVersion() { |
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
272 return version; |
7267
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
273 } |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
274 |
9258
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
275 private static Assumption createVersion() { |
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
276 return Truffle.getRuntime().createAssumption("frame version"); |
7267
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
277 } |
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
278 |
22433
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
279 /** |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
280 * Default value for the created slots. |
22490
fa86f9f3848d
change FrameDescriptor#copy to also copy info
Andreas Woess <andreas.woess@oracle.com>
parents:
22435
diff
changeset
|
281 * |
22433
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
282 * @return value provided to {@link #FrameDescriptor(java.lang.Object)} |
7f3fbd797e39
More Javadoc for FrameDescriptor
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents:
22432
diff
changeset
|
283 */ |
18161
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
284 public Object getDefaultValue() { |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
285 return defaultValue; |
7267
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
286 } |
11810
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
287 |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
288 public Assumption getNotInFrameAssumption(Object identifier) { |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
289 if (identifierToSlotMap.containsKey(identifier)) { |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
290 throw new IllegalArgumentException("Cannot get not-in-frame assumption for existing frame slot!"); |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
291 } |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
292 |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
293 if (identifierToNotInFrameAssumptionMap == null) { |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
294 identifierToNotInFrameAssumptionMap = new HashMap<>(); |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
295 } else { |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
296 Assumption assumption = identifierToNotInFrameAssumptionMap.get(identifier); |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
297 if (assumption != null) { |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
298 return assumption; |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
299 } |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
300 } |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
301 Assumption assumption = Truffle.getRuntime().createAssumption("not in frame: " + identifier); |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
302 identifierToNotInFrameAssumptionMap.put(identifier, assumption); |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
303 return assumption; |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
304 } |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
305 |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
306 private void invalidateNotInFrameAssumption(Object identifier) { |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
307 if (identifierToNotInFrameAssumptionMap != null) { |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
308 Assumption assumption = identifierToNotInFrameAssumptionMap.get(identifier); |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
309 if (assumption != null) { |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
310 assumption.invalidate(); |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
311 identifierToNotInFrameAssumptionMap.remove(identifier); |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
312 } |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
313 } |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
314 } |
20818
79d212bfee22
Truffle: include slots in FrameDescriptor#toString()
Andreas Woess <andreas.woess@oracle.com>
parents:
18161
diff
changeset
|
315 |
79d212bfee22
Truffle: include slots in FrameDescriptor#toString()
Andreas Woess <andreas.woess@oracle.com>
parents:
18161
diff
changeset
|
316 @Override |
79d212bfee22
Truffle: include slots in FrameDescriptor#toString()
Andreas Woess <andreas.woess@oracle.com>
parents:
18161
diff
changeset
|
317 public String toString() { |
79d212bfee22
Truffle: include slots in FrameDescriptor#toString()
Andreas Woess <andreas.woess@oracle.com>
parents:
18161
diff
changeset
|
318 StringBuilder sb = new StringBuilder(); |
79d212bfee22
Truffle: include slots in FrameDescriptor#toString()
Andreas Woess <andreas.woess@oracle.com>
parents:
18161
diff
changeset
|
319 sb.append("FrameDescriptor@").append(Integer.toHexString(hashCode())); |
79d212bfee22
Truffle: include slots in FrameDescriptor#toString()
Andreas Woess <andreas.woess@oracle.com>
parents:
18161
diff
changeset
|
320 sb.append("{"); |
79d212bfee22
Truffle: include slots in FrameDescriptor#toString()
Andreas Woess <andreas.woess@oracle.com>
parents:
18161
diff
changeset
|
321 boolean comma = false; |
79d212bfee22
Truffle: include slots in FrameDescriptor#toString()
Andreas Woess <andreas.woess@oracle.com>
parents:
18161
diff
changeset
|
322 for (FrameSlot slot : slots) { |
79d212bfee22
Truffle: include slots in FrameDescriptor#toString()
Andreas Woess <andreas.woess@oracle.com>
parents:
18161
diff
changeset
|
323 if (comma) { |
79d212bfee22
Truffle: include slots in FrameDescriptor#toString()
Andreas Woess <andreas.woess@oracle.com>
parents:
18161
diff
changeset
|
324 sb.append(", "); |
79d212bfee22
Truffle: include slots in FrameDescriptor#toString()
Andreas Woess <andreas.woess@oracle.com>
parents:
18161
diff
changeset
|
325 } else { |
79d212bfee22
Truffle: include slots in FrameDescriptor#toString()
Andreas Woess <andreas.woess@oracle.com>
parents:
18161
diff
changeset
|
326 comma = true; |
79d212bfee22
Truffle: include slots in FrameDescriptor#toString()
Andreas Woess <andreas.woess@oracle.com>
parents:
18161
diff
changeset
|
327 } |
79d212bfee22
Truffle: include slots in FrameDescriptor#toString()
Andreas Woess <andreas.woess@oracle.com>
parents:
18161
diff
changeset
|
328 sb.append(slot.getIndex()).append(":").append(slot.getIdentifier()); |
79d212bfee22
Truffle: include slots in FrameDescriptor#toString()
Andreas Woess <andreas.woess@oracle.com>
parents:
18161
diff
changeset
|
329 } |
79d212bfee22
Truffle: include slots in FrameDescriptor#toString()
Andreas Woess <andreas.woess@oracle.com>
parents:
18161
diff
changeset
|
330 sb.append("}"); |
79d212bfee22
Truffle: include slots in FrameDescriptor#toString()
Andreas Woess <andreas.woess@oracle.com>
parents:
18161
diff
changeset
|
331 return sb.toString(); |
79d212bfee22
Truffle: include slots in FrameDescriptor#toString()
Andreas Woess <andreas.woess@oracle.com>
parents:
18161
diff
changeset
|
332 } |
7267
a4b84ba6dc2e
Introduction of the Truffle API for efficient implementation of dynamic languages on top of the Graal VM. New projects com.oracle.truffle.api for the API definition and com.oracle.truffle.api.test for API tests and documentation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
333 } |