DEADSOFTWARE

Remove batch
[gpcp-linux.git] / J2CPS / TypeDesc.java
1 /**********************************************************************/
2 /* Type Descriptor class for J2CPS */
3 /* */
4 /* (c) copyright QUT */
5 /**********************************************************************/
6 package J2CPS;
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","?"};
39 public String name;
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;
46 int typeOrd = 0;
47 static ArrayList<TypeDesc> types = new ArrayList<TypeDesc>();
49 public TypeDesc() {
50 inTypeNum = 0;
51 outTypeNum = 0;
52 typeOrd = 0;
53 }
55 private TypeDesc(int ix) {
56 /* ONLY used for basic types */
57 inTypeNum = ix;
58 outTypeNum = ix;
59 typeOrd = ix;
60 }
62 public String getTypeMnemonic() {
63 return typeStrArr[typeOrd];
64 }
66 public static TypeDesc GetBasicType(int index) {
67 return basicTypes[index];
68 }
70 public static TypeDesc GetType(String sig,int start) {
71 int tOrd = GetTypeOrd(sig,start);
72 if (tOrd == classT) {
73 return ClassDesc.GetClassDesc(GetClassName(sig,start),null);
74 } else if (tOrd == arrT) {
75 return ArrayDesc.GetArrayType(sig,start,true);
76 } else {
77 return basicTypes[tOrd];
78 }
79 }
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!");
84 System.exit(1);
85 }
86 int endCName = sig.indexOf(';',start);
87 if (endCName == -1) {
88 return sig.substring(start+1);
89 } else {
90 return sig.substring(start+1,endCName);
91 }
92 }
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;
108 return 0;
111 public static TypeDesc[] GetParTypes(String sig) {
112 types.clear();
113 TypeDesc[] typeArr;
114 if (sig.charAt(0) != '(') {
115 System.out.println(sig + " is not a parameter list!");
116 System.exit(1);
118 int index = 1;
119 while (sig.charAt(index) != ')') {
120 if (sig.charAt(index) == '[') {
121 types.add(ArrayDesc.GetArrayType(sig,index,false));
122 } else {
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;
130 } else { index++; }
131 } else { index++; }
132 }
133 typeArr = new TypeDesc[types.size()];
134 for (int i=0; i < types.size(); i++) {
135 typeArr[i] = types.get(i);
137 return typeArr;
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)
149 throws IOException {
150 System.err.println("TRYING TO WRITE A TYPEDESC! with ord " + typeOrd);
151 System.exit(1);