00001 package edu.ksu.cis.bandera.spin;
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 import edu.ksu.cis.bandera.bir.Collection;
00036
00037 import java.io.*;
00038 import java.util.*;
00039
00040 import edu.ksu.cis.bandera.bir.*;
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055 public class SpinTypeName extends AbstractTypeSwitch {
00056
00057 public void caseArray(Array type, Object o)
00058 {
00059 if (o == null)
00060 setResult(type.typeName());
00061 else {
00062 type.getBaseType().apply(this,null);
00063 setResult("{ byte length; " + (String) getResult() +
00064 " element[" + type.getSize() + "] }");
00065 }
00066 }
00067 public void caseBool(Bool type, Object o)
00068 {
00069 if (o == null)
00070 setResult(type.typeName());
00071 else
00072 setResult("bool");
00073 }
00074 public void caseCollection(Collection type, Object o)
00075 {
00076 if (o == null)
00077 setResult(type.typeName());
00078 else {
00079 type.getBaseType().apply(this,null);
00080 setResult("{ bit inuse[" + type.getSize() + "]; "
00081 + (String) getResult() +
00082 " instance[" + type.getSize() + "] }");
00083 }
00084 }
00085 public void caseEnumerated(Enumerated type, Object o)
00086 {
00087 if (o == null)
00088 setResult(type.typeName());
00089 else {
00090 if (type.getEnumeratedSize() < 256 && type.getFirstElement() >= 0)
00091 setResult("byte");
00092 else
00093 setResult("int");
00094 }
00095 }
00096 public void caseField(Field type, Object o)
00097 {
00098 type.getType().apply(this,null);
00099 setResult( (String) getResult() + " " + type.getName() + "; ");
00100 }
00101 public void caseLock(Lock type, Object o)
00102 {
00103 if (o == null)
00104 setResult(type.typeName());
00105 else {
00106 String r = (type.isReentrant()) ? "R" : "";
00107 String w = (type.isWaiting()) ? "W" : "";
00108 setResult("lock_" + r + w);
00109 }
00110 }
00111 public void caseRange(Range type, Object o)
00112 {
00113 if (o == null)
00114 setResult(type.typeName());
00115 else {
00116 if (type.getRangeSize() < 256 && type.getFirstElement() >= 0)
00117 setResult("byte");
00118 else
00119 setResult("int");
00120 }
00121 }
00122 public void caseRecord(Record type, Object o)
00123 {
00124 if (o == null)
00125 setResult(type.typeName());
00126 else {
00127 String result = "";
00128 Vector fields = type.getFields();
00129 for (int i = 0; i < fields.size(); i++) {
00130 ((Field)fields.elementAt(i)).apply(this,null);
00131 result += (String) getResult();
00132 }
00133
00134 if (fields.size() == 0)
00135 result = "byte dummy;";
00136 setResult("{ " + result + "}");
00137 }
00138 }
00139 public void caseRef(Ref type, Object o)
00140 {
00141 if (o == null)
00142 setResult(type.typeName());
00143 else
00144 setResult("short");
00145 }
00146 public void defaultCase(Object obj) {
00147 throw new RuntimeException("Construct not handled: " + obj);
00148 }
00149 }