- public void generateLocalTransCode(FlatMethod fm, LocalityBinding lb,PrefetchPair pp,Vector oids, Vector fieldoffset,Vector endoffset, int tuplecount) {
- int i, j;
- short offsetcount = 0;
-
- Vector prefix = new Vector();
- prefix.add(generateTemp(fm,pp.base,lb));
- String tstlbl = new String("(" + prefix.get(0) + " != NULL ");
- for (i = 0; i < pp.desc.size(); i++) {
- Object newdesc = pp.desc.get(i);
- if(newdesc instanceof FieldDescriptor) {
- FieldDescriptor fd = (FieldDescriptor) newdesc;
- if(fd.isGlobal()){
- /* Field descriptor is global */
- String oid = new String(" (unsigned int) (");
- tstlbl += ") ? ";
- for(j = 0; j < prefix.size(); j++) {
- tstlbl += prefix.get(j) + "->";
- }
- tstlbl += fd.getSafeSymbol() + ": NULL";
- oid += tstlbl+ " )";
- oids.add(oid);
- for(j=i+1; j < pp.desc.size(); j++) {
- TypeDescriptor newtd;
- String newfieldoffset;
- Object desc = pp.getDescAt(j);
- offsetcount++;
- if(desc instanceof FieldDescriptor) {
- Object prevdesc = pp.getDescAt(j-1);
- if(prevdesc instanceof IndexDescriptor){
- //FIXME currently handles one dimensional arrays
- newtd = ((FieldDescriptor)pp.getDescAt(j-2)).getType();
- } else {
- newtd = ((FieldDescriptor) pp.getDescAt(j-1)).getType();
- }
- newfieldoffset = new String("(short)(&(((struct "+ newtd.getSafeSymbol()+" *)0)->"+
- ((FieldDescriptor)desc).getSafeSymbol()+ "))");
- } else {
- String indexlbl = new String();
- for(i=0; i<((IndexDescriptor)desc).tddesc.size(); i++) {
- indexlbl += generateTemp(fm, ((IndexDescriptor)desc).getTempDescAt(i), lb) + "+";
- }
- indexlbl += ((IndexDescriptor)desc).offset.toString();
- newfieldoffset = new String("(short)("+indexlbl+")");
- }
- fieldoffset.add(newfieldoffset);
- }
- if(tuplecount > 0) {
- int tmp = (int) ((Short)(endoffset.get(tuplecount-1))).shortValue() + (int) offsetcount;
- short endoffsetval = (short) tmp;
- endoffset.add(endoffsetval);
- }else {
- endoffset.add(offsetcount);
- }
- tuplecount++;
- break; //break from outer for loop
- } else {
- tstlbl += "&& ";
- for(j = 0; j < prefix.size(); j++) {
- tstlbl += prefix.get(j) + "->";
- }
- prefix.add(fd.getSafeSymbol());
- tstlbl += fd.getSafeSymbol() + " != NULL";
- }
- } else { /* if Index descriptor */
- String indexstring = new String();
- IndexDescriptor id = (IndexDescriptor) newdesc;
- if(i == 0) {
- indexstring = generateTemp(fm, pp.base, lb);
- } else {
- indexstring = ((FieldDescriptor)pp.getDescAt(i-1)).getSafeSymbol();
- }
- tstlbl += "&& ";
- for(j = 0; j < prefix.size(); j++) {
- tstlbl += prefix.get(j) + "[";
- }
- indexstring += "[";
- for(j=0; j<id.tddesc.size(); j++) {
- tstlbl += generateTemp(fm, id.getTempDescAt(j), lb) + "+";
- indexstring += generateTemp(fm,id.getTempDescAt(j), lb) + "+";
- }
- tstlbl += id.offset.toString()+ "]";
- indexstring += id.offset.toString()+ "]";
- prefix. removeElementAt(prefix.size() -1);
- prefix.add(indexstring);
- tstlbl += " != NULL";
- }
- }