1 /*
2  * Copyright (c) 2001, 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  */
24 
25 package sun.jvm.hotspot.runtime;
26 
27 import sun.jvm.hotspot.oops.*;
28 
29 public abstract class SignatureInfo extends SignatureIterator {
30   protected boolean hasIterated; // need this because iterate cannot be called in constructor (set is virtual!)
31   protected int     size;
32   protected int     type;        // BasicType
33 
lazyIterate()34   protected void lazyIterate() {
35     if (!hasIterated) {
36       iterate();
37       hasIterated = true;
38     }
39   }
40 
set(int size, int type)41   protected abstract void set(int size, int /*BasicType*/ type);
42 
doBool()43   public void doBool()                     { set(BasicTypeSize.getTBooleanSize(), BasicType.getTBoolean()); }
doChar()44   public void doChar()                     { set(BasicTypeSize.getTCharSize(),    BasicType.getTChar());    }
doFloat()45   public void doFloat()                    { set(BasicTypeSize.getTFloatSize(),   BasicType.getTFloat());   }
doDouble()46   public void doDouble()                   { set(BasicTypeSize.getTDoubleSize(),  BasicType.getTDouble());  }
doByte()47   public void doByte()                     { set(BasicTypeSize.getTByteSize(),    BasicType.getTByte());    }
doShort()48   public void doShort()                    { set(BasicTypeSize.getTShortSize(),   BasicType.getTShort());   }
doInt()49   public void doInt()                      { set(BasicTypeSize.getTIntSize(),     BasicType.getTInt());     }
doLong()50   public void doLong()                     { set(BasicTypeSize.getTLongSize(),    BasicType.getTLong());    }
doVoid()51   public void doVoid()                     { set(BasicTypeSize.getTVoidSize(),    BasicType.getTVoid());    }
doObject(int begin, int end)52   public void doObject(int begin, int end) { set(BasicTypeSize.getTObjectSize(),  BasicType.getTObject());  }
doArray(int begin, int end)53   public void doArray(int begin, int end)  { set(BasicTypeSize.getTArraySize(),   BasicType.getTArray());   }
54 
SignatureInfo(Symbol signature)55   public SignatureInfo(Symbol signature) {
56     super(signature);
57 
58     type = BasicType.getTIllegal();
59   }
60 
size()61   public int size() { lazyIterate(); return size; }
type()62   public int type() { lazyIterate(); return type; }
63 }
64