hotspot/src/share/vm/runtime/signature.hpp
changeset 8076 96d498ec7ae1
parent 7397 5b173b4ca846
child 8921 14bfe81f2a9d
--- a/hotspot/src/share/vm/runtime/signature.hpp	Thu Jan 27 13:42:28 2011 -0800
+++ b/hotspot/src/share/vm/runtime/signature.hpp	Thu Jan 27 16:11:27 2011 -0800
@@ -47,7 +47,7 @@
 
 class SignatureIterator: public ResourceObj {
  protected:
-  symbolHandle _signature;             // the signature to iterate over
+  Symbol*      _signature;             // the signature to iterate over
   int          _index;                 // the current character index (only valid during iteration)
   int          _parameter_index;       // the current parameter index (0 outside iteration phase)
   BasicType    _return_type;
@@ -87,9 +87,7 @@
   };
 
   // Constructors
-  SignatureIterator(symbolOop signature);
-  SignatureIterator(Thread *thread, symbolOop signature);
-  SignatureIterator(symbolHandle signature);
+  SignatureIterator(Symbol* signature);
 
   // Iteration
   void dispatch_field();               // dispatches once for field signatures
@@ -138,7 +136,7 @@
   void do_array (int begin, int end)   { type_name("jobject" ); }
 
  public:
-  SignatureTypeNames(symbolHandle signature) : SignatureIterator(signature) {}
+  SignatureTypeNames(Symbol* signature) : SignatureIterator(signature) {}
 };
 
 
@@ -166,7 +164,7 @@
   void do_array (int begin, int end)   { set(T_ARRAY_size  , T_ARRAY  ); }
 
  public:
-  SignatureInfo(symbolHandle signature) : SignatureIterator(signature) {
+  SignatureInfo(Symbol* signature) : SignatureIterator(signature) {
     _has_iterated = _has_iterated_return = false;
     _size         = 0;
     _return_type  = T_ILLEGAL;
@@ -181,7 +179,7 @@
  private:
   void set(int size, BasicType type)   { _size += size; }
  public:
-  ArgumentSizeComputer(symbolHandle signature) : SignatureInfo(signature) {}
+  ArgumentSizeComputer(Symbol* signature) : SignatureInfo(signature) {}
 
   int       size()                     { lazy_iterate_parameters(); return _size; }
 };
@@ -191,7 +189,7 @@
  private:
   void set(int size, BasicType type)   { _size ++; }
  public:
-  ArgumentCount(symbolHandle signature) : SignatureInfo(signature) {}
+  ArgumentCount(Symbol* signature) : SignatureInfo(signature) {}
 
   int       size()                     { lazy_iterate_parameters(); return _size; }
 };
@@ -205,7 +203,7 @@
  public:
   BasicType type()                     { lazy_iterate_return(); return _return_type; }
 
-  ResultTypeFinder(symbolHandle signature) : SignatureInfo(signature) {}
+  ResultTypeFinder(Symbol* signature) : SignatureInfo(signature) {}
 };
 
 
@@ -238,11 +236,6 @@
     _fingerprint = 0;
   }
 
-  Fingerprinter(Thread *thread, methodHandle method) : SignatureIterator(thread, method->signature()) {
-    mh = method;
-    _fingerprint = 0;
-  }
-
   uint64_t fingerprint() {
     // See if we fingerprinted this method already
     if (mh->constMethod()->fingerprint() != CONST64(0)) {
@@ -356,18 +349,19 @@
 
 class SignatureStream : public StackObj {
  private:
-  symbolHandle _signature;
+  Symbol*      _signature;
   int          _begin;
   int          _end;
   BasicType    _type;
   bool         _at_return_type;
+  GrowableArray<Symbol*>* _names;  // symbols created while parsing signature
 
  public:
   bool at_return_type() const                    { return _at_return_type; }
   bool is_done() const;
   void next_non_primitive(int t);
   void next() {
-    symbolOop sig = _signature();
+    Symbol* sig = _signature;
     int len = sig->utf8_length();
     if (_end >= len) {
       _end = len + 1;
@@ -392,32 +386,28 @@
     _end++;
   }
 
-  SignatureStream(symbolHandle signature,
-                  bool is_method = true) :
-                   _signature(signature), _at_return_type(false) {
-    _begin = _end = (is_method ? 1 : 0);  // skip first '(' in method signatures
-    next();
-  }
+  SignatureStream(Symbol* signature, bool is_method = true);
+  ~SignatureStream();
 
   bool is_object() const;                        // True if this argument is an object
   bool is_array() const;                         // True if this argument is an array
   BasicType type() const                         { return _type; }
-  symbolOop as_symbol(TRAPS);
+  Symbol* as_symbol(TRAPS);
   enum FailureMode { ReturnNull, CNFException, NCDFError };
   klassOop as_klass(Handle class_loader, Handle protection_domain, FailureMode failure_mode, TRAPS);
   oop as_java_mirror(Handle class_loader, Handle protection_domain, FailureMode failure_mode, TRAPS);
 
   // return same as_symbol except allocation of new symbols is avoided.
-  symbolOop as_symbol_or_null();
+  Symbol* as_symbol_or_null();
 };
 
 class SignatureVerifier : public StackObj {
   public:
     // Returns true if the symbol is valid method or type signature
-    static bool is_valid_signature(symbolHandle sig);
+    static bool is_valid_signature(Symbol* sig);
 
-    static bool is_valid_method_signature(symbolHandle sig);
-    static bool is_valid_type_signature(symbolHandle sig);
+    static bool is_valid_method_signature(Symbol* sig);
+    static bool is_valid_type_signature(Symbol* sig);
   private:
 
     static ssize_t is_valid_type(const char*, ssize_t);