Mercurial > hg > graal-compiler
annotate graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/FrameSlot.java @ 16051:da9b9b625818
Truffle FrameDescriptor: add compiler asserts
author | Bernhard Urban <bernhard.urban@jku.at> |
---|---|
date | Fri, 06 Jun 2014 09:40:22 +0200 |
parents | e122dc0436be |
children | 80b0bd9e29c8 |
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:
9321
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:
9321
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:
9321
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 |
12644
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
27 import com.oracle.truffle.api.*; |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
28 |
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
|
29 /** |
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
|
30 * A slot in a frame that can store a value of a given type. |
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 */ |
12644
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
32 public final class FrameSlot implements Cloneable { |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
33 |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
34 private final FrameDescriptor descriptor; |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
35 private final Object identifier; |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
36 private final int index; |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
37 @com.oracle.truffle.api.CompilerDirectives.CompilationFinal private FrameSlotKind kind; |
7530
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7267
diff
changeset
|
38 |
12644
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
39 public FrameSlot(FrameDescriptor descriptor, Object identifier, int index, FrameSlotKind kind) { |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
40 this.descriptor = descriptor; |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
41 this.identifier = identifier; |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
42 this.index = index; |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
43 this.kind = kind; |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
44 } |
7530
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7267
diff
changeset
|
45 |
12644
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
46 public Object getIdentifier() { |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
47 return identifier; |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
48 } |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
49 |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
50 public int getIndex() { |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
51 return index; |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
52 } |
7530
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7267
diff
changeset
|
53 |
12644
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
54 public FrameSlotKind getKind() { |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
55 return kind; |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
56 } |
7530
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7267
diff
changeset
|
57 |
12644
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
58 public void setKind(final FrameSlotKind kind) { |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
59 if (this.kind != kind) { |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
60 CompilerDirectives.transferToInterpreter(); |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
61 this.kind = kind; |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
62 this.descriptor.updateVersion(); |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
63 } |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
64 } |
7530
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7267
diff
changeset
|
65 |
12644
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
66 @Override |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
67 public String toString() { |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
68 return "[" + index + "," + identifier + "," + kind + "]"; |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
69 } |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
70 |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
71 public FrameDescriptor getFrameDescriptor() { |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
72 return this.descriptor; |
e122dc0436be
convert FrameSlot interface to a final class.
Andreas Woess <andreas.woess@jku.at>
parents:
11279
diff
changeset
|
73 } |
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 } |