hotspot/src/share/vm/ci/ciSymbol.hpp
changeset 4567 7fc02fbe5c7a
parent 1 489c9b5090e2
child 5420 586d3988e72b
equal deleted inserted replaced
4566:b363f6ef4068 4567:7fc02fbe5c7a
     1 /*
     1 /*
     2  * Copyright 1999-2001 Sun Microsystems, Inc.  All Rights Reserved.
     2  * Copyright 1999-2009 Sun Microsystems, Inc.  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.
    26 //
    26 //
    27 // This class represents a symbolOop in the HotSpot virtual
    27 // This class represents a symbolOop in the HotSpot virtual
    28 // machine.
    28 // machine.
    29 class ciSymbol : public ciObject {
    29 class ciSymbol : public ciObject {
    30   CI_PACKAGE_ACCESS
    30   CI_PACKAGE_ACCESS
       
    31   // These friends all make direct use of get_symbolOop:
    31   friend class ciEnv;
    32   friend class ciEnv;
    32   friend class ciInstanceKlass;
    33   friend class ciInstanceKlass;
    33   friend class ciSignature;
    34   friend class ciSignature;
    34   friend class ciMethod;
    35   friend class ciMethod;
    35   friend class ciObjArrayKlass;
    36   friend class ciObjArrayKlass;
    36 
    37 
    37 private:
    38 private:
    38   ciSymbol(symbolOop s) : ciObject(s) {}
    39   ciSymbol(symbolOop s) : ciObject(s) {}
    39   ciSymbol(symbolHandle s);   // for use with vmSymbolHandles
    40   ciSymbol(symbolHandle s);   // for use with vmSymbolHandles
    40 
    41 
    41   symbolOop get_symbolOop() { return (symbolOop)get_oop(); }
    42   symbolOop get_symbolOop() const { return (symbolOop)get_oop(); }
    42 
    43 
    43   const char* type_string() { return "ciSymbol"; }
    44   const char* type_string() { return "ciSymbol"; }
    44 
    45 
    45   void print_impl(outputStream* st);
    46   void print_impl(outputStream* st);
    46 
    47 
    47   int         byte_at(int i);
    48   // This is public in symbolOop but private here, because the base can move:
    48   jbyte*      base();
    49   jbyte*      base();
    49 
    50 
    50   // Make a ciSymbol from a C string (implementation).
    51   // Make a ciSymbol from a C string (implementation).
    51   static ciSymbol* make_impl(const char* s);
    52   static ciSymbol* make_impl(const char* s);
    52 
    53 
    53 public:
    54 public:
    54   // The text of the symbol as a null-terminated utf8 string.
    55   // The text of the symbol as a null-terminated utf8 string.
    55   const char* as_utf8();
    56   const char* as_utf8();
    56   int         utf8_length();
    57   int         utf8_length();
       
    58 
       
    59   // Return the i-th utf8 byte, where i < utf8_length
       
    60   int         byte_at(int i);
       
    61 
       
    62   // Tests if the symbol starts with the given prefix.
       
    63   bool starts_with(const char* prefix, int len) const;
       
    64 
       
    65   // Determines where the symbol contains the given substring.
       
    66   int index_of_at(int i, const char* str, int len) const;
    57 
    67 
    58   // What kind of ciObject is this?
    68   // What kind of ciObject is this?
    59   bool is_symbol() { return true; }
    69   bool is_symbol() { return true; }
    60 
    70 
    61   void print_symbol_on(outputStream* st);
    71   void print_symbol_on(outputStream* st);