src/share/vm/classfile/resolutionErrors.hpp

Sat, 07 Nov 2020 10:30:02 +0800

author
aoqi
date
Sat, 07 Nov 2020 10:30:02 +0800
changeset 10026
8c95980d0b66
parent 10015
eb7ce841ccec
permissions
-rw-r--r--

Added tag mips-jdk8u275-b01 for changeset d3b4d62f391f

     1 /*
     2  * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     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
     7  * published by the Free Software Foundation.
     8  *
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    12  * version 2 for more details (a copy is included in the LICENSE file that
    13  * accompanied this code).
    14  *
    15  * You should have received a copy of the GNU General Public License version
    16  * 2 along with this work; if not, write to the Free Software Foundation,
    17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    18  *
    19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    20  * or visit www.oracle.com if you need additional information or have any
    21  * questions.
    22  *
    23  */
    25 #ifndef SHARE_VM_CLASSFILE_RESOLUTIONERRORS_HPP
    26 #define SHARE_VM_CLASSFILE_RESOLUTIONERRORS_HPP
    28 #include "oops/constantPool.hpp"
    29 #include "utilities/hashtable.hpp"
    31 class ResolutionErrorEntry;
    33 // ResolutionError objects are used to record errors encountered during
    34 // constant pool resolution (JVMS 5.4.3).
    36 class ResolutionErrorTable : public Hashtable<ConstantPool*, mtClass> {
    38 public:
    39   ResolutionErrorTable(int table_size);
    41   ResolutionErrorEntry* new_entry(int hash, ConstantPool* pool, int cp_index,
    42                                   Symbol* error, Symbol* message);
    43   void free_entry(ResolutionErrorEntry *entry);
    45   ResolutionErrorEntry* bucket(int i) {
    46     return (ResolutionErrorEntry*)Hashtable<ConstantPool*, mtClass>::bucket(i);
    47   }
    49   ResolutionErrorEntry** bucket_addr(int i) {
    50     return (ResolutionErrorEntry**)Hashtable<ConstantPool*, mtClass>::bucket_addr(i);
    51   }
    53   void add_entry(int index, ResolutionErrorEntry* new_entry) {
    54     Hashtable<ConstantPool*, mtClass>::add_entry(index,
    55       (HashtableEntry<ConstantPool*, mtClass>*)new_entry);
    56   }
    58   void add_entry(int index, unsigned int hash,
    59                  constantPoolHandle pool, int which, Symbol* error, Symbol* message);
    62   // find error given the constant pool and constant pool index
    63   ResolutionErrorEntry* find_entry(int index, unsigned int hash,
    64                                    constantPoolHandle pool, int cp_index);
    67   unsigned int compute_hash(constantPoolHandle pool, int cp_index) {
    68     return (unsigned int) pool->identity_hash() + cp_index;
    69   }
    71   // purges unloaded entries from the table
    72   void purge_resolution_errors();
    74   // RedefineClasses support - remove obsolete constant pool entry
    75   void delete_entry(ConstantPool* c);
    76 };
    79 class ResolutionErrorEntry : public HashtableEntry<ConstantPool*, mtClass> {
    80  private:
    81   int               _cp_index;
    82   Symbol*           _error;
    83   Symbol*           _message;
    85  public:
    86   ConstantPool*      pool() const               { return literal(); }
    88   int                cp_index() const           { return _cp_index; }
    89   void               set_cp_index(int cp_index) { _cp_index = cp_index; }
    91   Symbol*            error() const              { return _error; }
    92   void               set_error(Symbol* e);
    94   Symbol*            message() const            { return _message; }
    95   void               set_message(Symbol* c);
    97   ResolutionErrorEntry* next() const {
    98     return (ResolutionErrorEntry*)HashtableEntry<ConstantPool*, mtClass>::next();
    99   }
   101   ResolutionErrorEntry** next_addr() {
   102     return (ResolutionErrorEntry**)HashtableEntry<ConstantPool*, mtClass>::next_addr();
   103   }
   104 };
   106 #endif // SHARE_VM_CLASSFILE_RESOLUTIONERRORS_HPP

mercurial