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); |