Mercurial > hg > truffle
comparison src/share/vm/classfile/systemDictionary.cpp @ 676:d3676b4cb78c
Merge
author | kvn |
---|---|
date | Tue, 31 Mar 2009 10:02:01 -0700 |
parents | c89f86385056 |
children | e5b0439ef4ae |
comparison
equal
deleted
inserted
replaced
662:9ab385cb0c42 | 676:d3676b4cb78c |
---|---|
1962 return (BasicType)i; | 1962 return (BasicType)i; |
1963 } | 1963 } |
1964 return T_OBJECT; | 1964 return T_OBJECT; |
1965 } | 1965 } |
1966 | 1966 |
1967 KlassHandle SystemDictionaryHandles::box_klass(BasicType t) { | |
1968 if (t >= T_BOOLEAN && t <= T_VOID) | |
1969 return KlassHandle(&SystemDictionary::_box_klasses[t], true); | |
1970 else | |
1971 return KlassHandle(); | |
1972 } | |
1973 | |
1967 // Constraints on class loaders. The details of the algorithm can be | 1974 // Constraints on class loaders. The details of the algorithm can be |
1968 // found in the OOPSLA'98 paper "Dynamic Class Loading in the Java | 1975 // found in the OOPSLA'98 paper "Dynamic Class Loading in the Java |
1969 // Virtual Machine" by Sheng Liang and Gilad Bracha. The basic idea is | 1976 // Virtual Machine" by Sheng Liang and Gilad Bracha. The basic idea is |
1970 // that the system dictionary needs to maintain a set of contraints that | 1977 // that the system dictionary needs to maintain a set of contraints that |
1971 // must be satisfied by all classes in the dictionary. | 1978 // must be satisfied by all classes in the dictionary. |
2172 return (entry != NULL) ? entry->error() : (symbolOop)NULL; | 2179 return (entry != NULL) ? entry->error() : (symbolOop)NULL; |
2173 } | 2180 } |
2174 } | 2181 } |
2175 | 2182 |
2176 | 2183 |
2184 // Signature constraints ensure that callers and callees agree about | |
2185 // the meaning of type names in their signatures. This routine is the | |
2186 // intake for constraints. It collects them from several places: | |
2187 // | |
2188 // * LinkResolver::resolve_method (if check_access is true) requires | |
2189 // that the resolving class (the caller) and the defining class of | |
2190 // the resolved method (the callee) agree on each type in the | |
2191 // method's signature. | |
2192 // | |
2193 // * LinkResolver::resolve_interface_method performs exactly the same | |
2194 // checks. | |
2195 // | |
2196 // * LinkResolver::resolve_field requires that the constant pool | |
2197 // attempting to link to a field agree with the field's defining | |
2198 // class about the type of the field signature. | |
2199 // | |
2200 // * klassVtable::initialize_vtable requires that, when a class | |
2201 // overrides a vtable entry allocated by a superclass, that the | |
2202 // overriding method (i.e., the callee) agree with the superclass | |
2203 // on each type in the method's signature. | |
2204 // | |
2205 // * klassItable::initialize_itable requires that, when a class fills | |
2206 // in its itables, for each non-abstract method installed in an | |
2207 // itable, the method (i.e., the callee) agree with the interface | |
2208 // on each type in the method's signature. | |
2209 // | |
2210 // All those methods have a boolean (check_access, checkconstraints) | |
2211 // which turns off the checks. This is used from specialized contexts | |
2212 // such as bootstrapping, dumping, and debugging. | |
2213 // | |
2214 // No direct constraint is placed between the class and its | |
2215 // supertypes. Constraints are only placed along linked relations | |
2216 // between callers and callees. When a method overrides or implements | |
2217 // an abstract method in a supertype (superclass or interface), the | |
2218 // constraints are placed as if the supertype were the caller to the | |
2219 // overriding method. (This works well, since callers to the | |
2220 // supertype have already established agreement between themselves and | |
2221 // the supertype.) As a result of all this, a class can disagree with | |
2222 // its supertype about the meaning of a type name, as long as that | |
2223 // class neither calls a relevant method of the supertype, nor is | |
2224 // called (perhaps via an override) from the supertype. | |
2225 // | |
2226 // | |
2227 // SystemDictionary::check_signature_loaders(sig, l1, l2) | |
2228 // | |
2177 // Make sure all class components (including arrays) in the given | 2229 // Make sure all class components (including arrays) in the given |
2178 // signature will be resolved to the same class in both loaders. | 2230 // signature will be resolved to the same class in both loaders. |
2179 // Returns the name of the type that failed a loader constraint check, or | 2231 // Returns the name of the type that failed a loader constraint check, or |
2180 // NULL if no constraint failed. The returned C string needs cleaning up | 2232 // NULL if no constraint failed. The returned C string needs cleaning up |
2181 // with a ResourceMark in the caller | 2233 // with a ResourceMark in the caller. No exception except OOME is thrown. |
2182 char* SystemDictionary::check_signature_loaders(symbolHandle signature, | 2234 char* SystemDictionary::check_signature_loaders(symbolHandle signature, |
2183 Handle loader1, Handle loader2, | 2235 Handle loader1, Handle loader2, |
2184 bool is_method, TRAPS) { | 2236 bool is_method, TRAPS) { |
2185 // Nothing to do if loaders are the same. | 2237 // Nothing to do if loaders are the same. |
2186 if (loader1() == loader2()) { | 2238 if (loader1() == loader2()) { |