Mercurial > hg > truffle
annotate graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/FrameDescriptor.java @ 18161:94f16a759646
Truffle: remove FrameTypeConversion interface
author | Andreas Woess <andreas.woess@jku.at> |
---|---|
date | Thu, 23 Oct 2014 13:45:59 +0200 |
parents | 9d55732d0880 |
children | 79d212bfee22 |
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 |
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
|
27 import java.util.*; |
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
|
28 |
9258
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
29 import com.oracle.truffle.api.*; |
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
30 |
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
|
31 /** |
7530
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7267
diff
changeset
|
32 * 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
|
33 * 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
|
34 */ |
9258
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
35 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
|
36 |
18161
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
37 private final Object defaultValue; |
12644
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11810
diff
changeset
|
38 private final ArrayList<FrameSlot> slots; |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11810
diff
changeset
|
39 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
|
40 private Assumption version; |
11810
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
41 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
|
42 |
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
|
43 public FrameDescriptor() { |
18161
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
44 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
|
45 } |
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
|
46 |
18161
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
47 public FrameDescriptor(Object defaultValue) { |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
48 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
|
49 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
|
50 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
|
51 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
|
52 } |
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 |
18161
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
54 public static FrameDescriptor create() { |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
55 return new FrameDescriptor(); |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
56 } |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
57 |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
58 public static FrameDescriptor create(Object defaultValue) { |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
59 return new FrameDescriptor(defaultValue); |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
60 } |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
61 |
7722
f07cafa29db1
Allow arbitrary objects to serve as identifiers for a frame slot.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7530
diff
changeset
|
62 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
|
63 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
|
64 } |
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
|
65 |
9321
cd1a1d92b3e3
Frame API: Introduce FrameSlotKind.
Andreas Woess <andreas.woess@jku.at>
parents:
9258
diff
changeset
|
66 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
|
67 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
|
68 } |
9d55732d0880
additional info field on FrameSlot nodes (for language-specific use)
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16051
diff
changeset
|
69 |
9d55732d0880
additional info field on FrameSlot nodes (for language-specific use)
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16051
diff
changeset
|
70 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
|
71 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
|
72 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
|
73 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
|
74 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
|
75 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
|
76 updateVersion(); |
11810
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
77 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
|
78 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
|
79 } |
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
|
80 |
7722
f07cafa29db1
Allow arbitrary objects to serve as identifiers for a frame slot.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7530
diff
changeset
|
81 public FrameSlot findFrameSlot(Object identifier) { |
f07cafa29db1
Allow arbitrary objects to serve as identifiers for a frame slot.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7530
diff
changeset
|
82 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
|
83 } |
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
|
84 |
7722
f07cafa29db1
Allow arbitrary objects to serve as identifiers for a frame slot.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7530
diff
changeset
|
85 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
|
86 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
|
87 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
|
88 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
|
89 } |
7722
f07cafa29db1
Allow arbitrary objects to serve as identifiers for a frame slot.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7530
diff
changeset
|
90 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
|
91 } |
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
|
92 |
9321
cd1a1d92b3e3
Frame API: Introduce FrameSlotKind.
Andreas Woess <andreas.woess@jku.at>
parents:
9258
diff
changeset
|
93 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
|
94 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
|
95 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
|
96 return result; |
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
97 } |
9321
cd1a1d92b3e3
Frame API: Introduce FrameSlotKind.
Andreas Woess <andreas.woess@jku.at>
parents:
9258
diff
changeset
|
98 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
|
99 } |
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
|
100 |
18161
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
101 public FrameSlot findOrAddFrameSlot(Object identifier, Object info, FrameSlotKind kind) { |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
102 FrameSlot result = findFrameSlot(identifier); |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
103 if (result != null) { |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
104 return result; |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
105 } |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
106 return addFrameSlot(identifier, info, kind); |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
107 } |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
108 |
13875
042a2d972174
support frame slot removal
Michael Haupt <michael.haupt@oracle.com>
parents:
12644
diff
changeset
|
109 public void removeFrameSlot(Object identifier) { |
16051
da9b9b625818
Truffle FrameDescriptor: add compiler asserts
Bernhard Urban <bernhard.urban@jku.at>
parents:
13875
diff
changeset
|
110 CompilerAsserts.neverPartOfCompilation("interpreter-only. includes hashmap operations."); |
13875
042a2d972174
support frame slot removal
Michael Haupt <michael.haupt@oracle.com>
parents:
12644
diff
changeset
|
111 assert identifierToSlotMap.containsKey(identifier); |
042a2d972174
support frame slot removal
Michael Haupt <michael.haupt@oracle.com>
parents:
12644
diff
changeset
|
112 slots.remove(identifierToSlotMap.get(identifier)); |
042a2d972174
support frame slot removal
Michael Haupt <michael.haupt@oracle.com>
parents:
12644
diff
changeset
|
113 identifierToSlotMap.remove(identifier); |
042a2d972174
support frame slot removal
Michael Haupt <michael.haupt@oracle.com>
parents:
12644
diff
changeset
|
114 updateVersion(); |
042a2d972174
support frame slot removal
Michael Haupt <michael.haupt@oracle.com>
parents:
12644
diff
changeset
|
115 getNotInFrameAssumption(identifier); |
042a2d972174
support frame slot removal
Michael Haupt <michael.haupt@oracle.com>
parents:
12644
diff
changeset
|
116 } |
042a2d972174
support frame slot removal
Michael Haupt <michael.haupt@oracle.com>
parents:
12644
diff
changeset
|
117 |
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
|
118 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
|
119 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
|
120 } |
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
|
121 |
7530
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7267
diff
changeset
|
122 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
|
123 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
|
124 } |
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
|
125 |
9258
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
126 /** |
11808
0c4d7b468dd7
include isValid in Assumption.toString(); minor javadoc fix.
Andreas Woess <andreas.woess@jku.at>
parents:
11343
diff
changeset
|
127 * 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
|
128 * |
9258
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
129 * @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
|
130 */ |
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
131 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
|
132 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
|
133 } |
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
|
134 |
9258
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
135 public FrameDescriptor copy() { |
18161
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
136 FrameDescriptor clonedFrameDescriptor = new FrameDescriptor(this.defaultValue); |
9258
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
137 for (int i = 0; i < this.getSlots().size(); i++) { |
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
138 Object identifier = this.getSlots().get(i).getIdentifier(); |
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
139 clonedFrameDescriptor.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
|
140 } |
9258
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
141 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
|
142 } |
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
|
143 |
9952
5d91b0b67cba
Introduce Frame.isInitialized in the Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
9521
diff
changeset
|
144 public FrameDescriptor shallowCopy() { |
18161
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
145 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
|
146 clonedFrameDescriptor.slots.addAll(slots); |
5d91b0b67cba
Introduce Frame.isInitialized in the Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
9521
diff
changeset
|
147 clonedFrameDescriptor.identifierToSlotMap.putAll(identifierToSlotMap); |
5d91b0b67cba
Introduce Frame.isInitialized in the Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
9521
diff
changeset
|
148 return clonedFrameDescriptor; |
5d91b0b67cba
Introduce Frame.isInitialized in the Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
9521
diff
changeset
|
149 } |
5d91b0b67cba
Introduce Frame.isInitialized in the Truffle API.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
9521
diff
changeset
|
150 |
9258
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
151 void updateVersion() { |
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
152 version.invalidate(); |
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
153 version = createVersion(); |
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
154 } |
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
155 |
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
156 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
|
157 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
|
158 } |
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 |
9258
07f8d136a05e
Truffle API changes for the Frame API. Introduction of Assumptions class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7722
diff
changeset
|
160 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
|
161 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
|
162 } |
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
|
163 |
18161
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
164 public Object getDefaultValue() { |
94f16a759646
Truffle: remove FrameTypeConversion interface
Andreas Woess <andreas.woess@jku.at>
parents:
16727
diff
changeset
|
165 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
|
166 } |
11810
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
167 |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
168 public Assumption getNotInFrameAssumption(Object identifier) { |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
169 if (identifierToSlotMap.containsKey(identifier)) { |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
170 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
|
171 } |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
172 |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
173 if (identifierToNotInFrameAssumptionMap == null) { |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
174 identifierToNotInFrameAssumptionMap = new HashMap<>(); |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
175 } else { |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
176 Assumption assumption = identifierToNotInFrameAssumptionMap.get(identifier); |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
177 if (assumption != null) { |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
178 return assumption; |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
179 } |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
180 } |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
181 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
|
182 identifierToNotInFrameAssumptionMap.put(identifier, assumption); |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
183 return assumption; |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
184 } |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
185 |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
186 private void invalidateNotInFrameAssumption(Object identifier) { |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
187 if (identifierToNotInFrameAssumptionMap != null) { |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
188 Assumption assumption = identifierToNotInFrameAssumptionMap.get(identifier); |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
189 if (assumption != null) { |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
190 assumption.invalidate(); |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
191 identifierToNotInFrameAssumptionMap.remove(identifier); |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
192 } |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
193 } |
91a676d0bbbe
Truffle: add not-in-frame assumption feature.
Andreas Woess <andreas.woess@jku.at>
parents:
11808
diff
changeset
|
194 } |
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
|
195 } |