Mercurial > hg > graal-jvmci-8
comparison src/share/vm/runtime/fieldDescriptor.hpp @ 6948:e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Mon, 12 Nov 2012 23:14:12 +0100 |
parents | 957c266d8bc5 18fb7da42534 |
children | 989155e2d07a |
comparison
equal
deleted
inserted
replaced
6711:ae13cc658b80 | 6948:e522a00b91aa |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | 4 * |
5 * This code is free software; you can redistribute it and/or modify it | 5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as | 6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
23 */ | 23 */ |
24 | 24 |
25 #ifndef SHARE_VM_RUNTIME_FIELDDESCRIPTOR_HPP | 25 #ifndef SHARE_VM_RUNTIME_FIELDDESCRIPTOR_HPP |
26 #define SHARE_VM_RUNTIME_FIELDDESCRIPTOR_HPP | 26 #define SHARE_VM_RUNTIME_FIELDDESCRIPTOR_HPP |
27 | 27 |
28 #include "oops/constantPoolOop.hpp" | 28 #include "oops/constantPool.hpp" |
29 #include "oops/klassOop.hpp" | |
30 #include "oops/oop.inline.hpp" | |
31 #include "oops/symbol.hpp" | 29 #include "oops/symbol.hpp" |
32 #include "runtime/fieldType.hpp" | 30 #include "runtime/fieldType.hpp" |
33 #include "utilities/accessFlags.hpp" | 31 #include "utilities/accessFlags.hpp" |
34 #include "utilities/constantTag.hpp" | 32 #include "utilities/constantTag.hpp" |
35 | 33 |
43 int _index; // the field index | 41 int _index; // the field index |
44 constantPoolHandle _cp; | 42 constantPoolHandle _cp; |
45 | 43 |
46 // update the access_flags for the field in the klass | 44 // update the access_flags for the field in the klass |
47 void update_klass_field_access_flag() { | 45 void update_klass_field_access_flag() { |
48 instanceKlass* ik = instanceKlass::cast(field_holder()); | 46 InstanceKlass* ik = field_holder(); |
49 ik->field(index())->set_access_flags(_access_flags.as_short()); | 47 ik->field(index())->set_access_flags(_access_flags.as_short()); |
50 } | 48 } |
51 | 49 |
52 FieldInfo* field() const { | 50 FieldInfo* field() const { |
53 instanceKlass* ik = instanceKlass::cast(field_holder()); | 51 InstanceKlass* ik = field_holder(); |
54 return ik->field(_index); | 52 return ik->field(_index); |
55 } | 53 } |
56 | 54 |
57 public: | 55 public: |
58 Symbol* name() const { | 56 Symbol* name() const { |
59 return field()->name(_cp); | 57 return field()->name(_cp); |
60 } | 58 } |
61 Symbol* signature() const { | 59 Symbol* signature() const { |
62 return field()->signature(_cp); | 60 return field()->signature(_cp); |
63 } | 61 } |
64 int signature_index() const { return field()->signature_index(); } | 62 InstanceKlass* field_holder() const { return _cp->pool_holder(); } |
65 klassOop field_holder() const { return _cp->pool_holder(); } | 63 ConstantPool* constants() const { return _cp(); } |
66 constantPoolOop constants() const { return _cp(); } | 64 AccessFlags access_flags() const { return _access_flags; } |
67 AccessFlags access_flags() const { return _access_flags; } | 65 oop loader() const; |
68 oop loader() const; | 66 // Offset (in words) of field from start of instanceOop / Klass* |
69 // Offset (in words) of field from start of instanceOop / klassOop | 67 int offset() const { return field()->offset(); } |
70 int offset() const { return field()->offset(); } | 68 Symbol* generic_signature() const; |
71 Symbol* generic_signature() const; | 69 int index() const { return _index; } |
72 int index() const { return _index; } | 70 AnnotationArray* annotations() const; |
73 typeArrayOop annotations() const; | |
74 | 71 |
75 // Initial field value | 72 // Initial field value |
76 bool has_initial_value() const { return field()->initval_index() != 0; } | 73 bool has_initial_value() const { return field()->initval_index() != 0; } |
77 int initial_value_index() const { return field()->initval_index(); } | 74 int initial_value_index() const { return field()->initval_index(); } |
78 constantTag initial_value_tag() const; // The tag will return true on one of is_int(), is_long(), is_single(), is_double() | 75 constantTag initial_value_tag() const; // The tag will return true on one of is_int(), is_long(), is_single(), is_double() |
79 jint int_initial_value() const; | 76 jint int_initial_value() const; |
80 jlong long_initial_value() const; | 77 jlong long_initial_value() const; |
81 jfloat float_initial_value() const; | 78 jfloat float_initial_value() const; |
82 jdouble double_initial_value() const; | 79 jdouble double_initial_value() const; |
83 oop string_initial_value(TRAPS) const; | 80 oop string_initial_value(TRAPS) const; |
84 | 81 |
85 // Field signature type | 82 // Field signature type |
86 BasicType field_type() const { return FieldType::basic_type(signature()); } | 83 BasicType field_type() const { return FieldType::basic_type(signature()); } |
87 | 84 |
88 // Access flags | 85 // Access flags |
89 bool is_public() const { return access_flags().is_public(); } | 86 bool is_public() const { return access_flags().is_public(); } |
90 bool is_private() const { return access_flags().is_private(); } | 87 bool is_private() const { return access_flags().is_private(); } |
91 bool is_protected() const { return access_flags().is_protected(); } | 88 bool is_protected() const { return access_flags().is_protected(); } |
92 bool is_package_private() const { return !is_public() && !is_private() && !is_protected(); } | 89 bool is_package_private() const { return !is_public() && !is_private() && !is_protected(); } |
93 | 90 |
94 bool is_static() const { return access_flags().is_static(); } | 91 bool is_static() const { return access_flags().is_static(); } |
95 bool is_final() const { return access_flags().is_final(); } | 92 bool is_final() const { return access_flags().is_final(); } |
96 bool is_volatile() const { return access_flags().is_volatile(); } | 93 bool is_volatile() const { return access_flags().is_volatile(); } |
97 bool is_transient() const { return access_flags().is_transient(); } | 94 bool is_transient() const { return access_flags().is_transient(); } |
98 | 95 |
99 bool is_synthetic() const { return access_flags().is_synthetic(); } | 96 bool is_synthetic() const { return access_flags().is_synthetic(); } |
100 | 97 |
101 bool is_field_access_watched() const { return access_flags().is_field_access_watched(); } | 98 bool is_field_access_watched() const { return access_flags().is_field_access_watched(); } |
102 bool is_field_modification_watched() const | 99 bool is_field_modification_watched() const |
103 { return access_flags().is_field_modification_watched(); } | 100 { return access_flags().is_field_modification_watched(); } |
104 bool has_generic_signature() const { return access_flags().field_has_generic_signature(); } | 101 bool has_generic_signature() const { return access_flags().field_has_generic_signature(); } |
105 | 102 |
106 void set_is_field_access_watched(const bool value) { | 103 void set_is_field_access_watched(const bool value) { |
107 _access_flags.set_is_field_access_watched(value); | 104 _access_flags.set_is_field_access_watched(value); |
108 update_klass_field_access_flag(); | 105 update_klass_field_access_flag(); |
109 } | 106 } |
112 _access_flags.set_is_field_modification_watched(value); | 109 _access_flags.set_is_field_modification_watched(value); |
113 update_klass_field_access_flag(); | 110 update_klass_field_access_flag(); |
114 } | 111 } |
115 | 112 |
116 // Initialization | 113 // Initialization |
117 void initialize(klassOop k, int index); | 114 void initialize(InstanceKlass* ik, int index); |
118 | 115 |
119 // Print | 116 // Print |
120 void print() { print_on(tty); } | 117 void print() { print_on(tty); } |
121 void print_on(outputStream* st) const PRODUCT_RETURN; | 118 void print_on(outputStream* st) const PRODUCT_RETURN; |
122 void print_on_for(outputStream* st, oop obj) PRODUCT_RETURN; | 119 void print_on_for(outputStream* st, oop obj) PRODUCT_RETURN; |