1 /**********************************************************************/
2 /* Type Descriptor class for J2CPS */
4 /* (c) copyright QUT */
5 /**********************************************************************/
8 import java
.io
.DataOutputStream
;
9 import java
.io
.IOException
;
10 import java
.util
.ArrayList
;
12 public class TypeDesc
{
14 public static final int noTyp
= 0;
15 public static final int boolT
= 1;
16 public static final int sCharT
= 2;
17 public static final int charT
= 3;
18 public static final int byteT
= 4;
19 public static final int shortT
= 5;
20 public static final int intT
= 6;
21 public static final int longT
= 7;
22 public static final int floatT
= 8;
23 public static final int dbleT
= 9;
24 public static final int setT
= 10;
25 public static final int anyRT
= 11;
26 public static final int anyPT
= 12;
27 public static final int strT
= 13;
28 public static final int sStrT
= 14;
29 public static final int specT
= 15;
30 public static final int ordT
= 16;
31 public static final int arrT
= 17;
32 public static final int classT
= 18;
33 public static final int arrPtr
= 19;
34 public int typeFixUp
= 0;
36 private static final String
[] typeStrArr
=
37 { "?","B","c","C","b","i","I","L","r","R",
38 "?","?","?","?","?","?","?","a","O","?"};
40 public boolean writeDetails
= false;
41 public PackageDesc packageDesc
= null;
43 private static TypeDesc
[] basicTypes
= new TypeDesc
[specT
];
45 int inTypeNum
=0, outTypeNum
=0, inBaseTypeNum
= 0;
47 static ArrayList
<TypeDesc
> types
= new ArrayList
<TypeDesc
>();
55 private TypeDesc(int ix
) {
56 /* ONLY used for basic types */
62 public String
getTypeMnemonic() {
63 return typeStrArr
[typeOrd
];
66 public static TypeDesc
GetBasicType(int index
) {
67 return basicTypes
[index
];
70 public static TypeDesc
GetType(String sig
,int start
) {
71 int tOrd
= GetTypeOrd(sig
,start
);
73 return ClassDesc
.GetClassDesc(GetClassName(sig
,start
),null);
74 } else if (tOrd
== arrT
) {
75 return ArrayDesc
.GetArrayType(sig
,start
,true);
77 return basicTypes
[tOrd
];
81 private static String
GetClassName(String sig
,int start
) {
82 if (sig
.charAt(start
) != 'L') {
83 System
.out
.println(sig
.substring(0) + " is not a class name string!");
86 int endCName
= sig
.indexOf(';',start
);
88 return sig
.substring(start
+1);
90 return sig
.substring(start
+1,endCName
);
94 private static int GetTypeOrd(String sig
,int start
) {
95 switch (sig
.charAt(start
)) {
96 case 'B' : return byteT
;
97 case 'C' : return charT
;
98 case 'D' : return dbleT
;
99 case 'F' : return floatT
;
100 case 'I' : return intT
;
101 case 'J' : return longT
;
102 case 'S' : return shortT
;
103 case 'Z' : return boolT
;
104 case 'V' : return noTyp
;
105 case 'L' : return classT
;
106 case '[' : return arrT
;
111 public static TypeDesc
[] GetParTypes(String sig
) {
114 if (sig
.charAt(0) != '(') {
115 System
.out
.println(sig
+ " is not a parameter list!");
119 while (sig
.charAt(index
) != ')') {
120 if (sig
.charAt(index
) == '[') {
121 types
.add(ArrayDesc
.GetArrayType(sig
,index
,false));
123 types
.add(GetType(sig
,index
));
125 if (sig
.charAt(index
) == 'L') {
126 index
= sig
.indexOf(';',index
) + 1;
127 } else if (sig
.charAt(index
) == '[') {
128 while (sig
.charAt(index
) == '[') { index
++; }
129 if (sig
.charAt(index
) == 'L') { index
= sig
.indexOf(';',index
) + 1;
133 typeArr
= new TypeDesc
[types
.size()];
134 for (int i
=0; i
< types
.size(); i
++) {
135 typeArr
[i
] = types
.get(i
);
140 public static void InitTypes() {
141 for (int i
=0; i
< specT
; i
++) {
142 basicTypes
[i
] = new TypeDesc(i
);
143 basicTypes
[i
].name
= "BasicType" + i
;
144 SymbolFile
.typeList
[i
] = basicTypes
[i
];
148 public void writeType (DataOutputStream out
, PackageDesc thisPack
)
150 System
.err
.println("TRYING TO WRITE A TYPEDESC! with ord " + typeOrd
);