4 #include <string>
5 #include <assert.h>
9 Reader::Reader(std::istream &rider): d_rider(rider), d_cancelled(false), d_readAlien(false), d_typeList(),
13 SHORTCHAR out;
16 }
20 }
23 CHAR buf;
29 CHAR out;
33 }
34 }
39 }
40 /*
41 char *bufPtr = (char *)buf;
42 int len2 = len * 2;
43 d_rider.read(bufPtr, len2);
44 if (isBigEndian()) {
45 char tmp;
46 for (int i = 0; i < len2; i += 2) {
47 tmp = bufPtr[i];
48 bufPtr[i] = bufPtr[i + 1];
49 bufPtr[i + 1] = tmp;
50 }
51 }
52 */
53 }
56 BYTE out;
59 }
62 SHORTINT buf;
68 SHORTINT out;
72 }
73 }
76 INTEGER buf;
82 INTEGER out;
86 }
87 }
92 }
93 }
100 }
104 }
110 }
112 }
117 //std::cout << "NIL STORE" << std::endl;
120 //std::cout << "LINK STORE" << std::endl;
123 //std::cout << "NEWLINK STORE" << std::endl;
126 //std::cout << "STORE STORE" << std::endl;
129 //std::cout << "ELEM STORE" << std::endl;
132 //std::cout << std::hex << (unsigned int)kind << std::endl;
134 }
135 }
136 // PROCEDURE (VAR rd: Reader) ReadStore* (OUT x: Store), NEW;
137 // VAR a: Alien; t: Kernel.Type;
138 // len, pos, pos1, id, comment, next, down, downPos, nextTypeId, nextElemId, nextStoreId: INTEGER;
139 // kind: SHORTCHAR; path: TypePath; type: TypeName;
140 // save: ReaderState;
150 }
152 }
153 // IF kind = nil THEN
154 // rd.ReadInt(comment); rd.ReadInt(next);
155 // rd.st.end := rd.Pos();
156 // IF (next > 0) OR ((next = 0) & ODD(comment)) THEN rd.st.next := rd.st.end + next ELSE rd.st.next := 0 END;
157 // x := NIL
161 }
162 // ELSIF kind = link THEN
163 // rd.ReadInt(id); rd.ReadInt(comment); rd.ReadInt(next);
164 // rd.st.end := rd.Pos();
165 // IF (next > 0) OR ((next = 0) & ODD(comment)) THEN rd.st.next := rd.st.end + next ELSE rd.st.next := 0 END;
166 // x := ThisStore(rd.eDict, id)
170 }
171 // ELSIF kind = newlink THEN
172 // rd.ReadInt(id); rd.ReadInt(comment); rd.ReadInt(next);
173 // rd.st.end := rd.Pos();
174 // IF (next > 0) OR ((next = 0) & ODD(comment)) THEN rd.st.next := rd.st.end + next ELSE rd.st.next := 0 END;
175 // x := ThisStore(rd.sDict, id)
180 //std::cout << path.toString() << std::endl;
192 }
196 }
204 }
205 }
209 }
217 }
229 }
233 // rd.cause := inconsistentType; AlienTypeReport(rd.cause, type);
235 }
236 }
242 // join(d_store, x)
243 }
248 }
256 // join(d_store, alien)
257 }
262 }
270 // we've just read the alien, so reset the state
275 }
278 }
295 }
296 }
297 }
303 }
305 }
308 TypePath path;
310 SHORTCHAR *buf = new SHORTCHAR[64]; // TypeName has a maximum of length 64 (including terminator).
317 // IF path[i] # elemTName THEN INC(i) END;
319 }
331 }
335 // IF path[i] # elemTName THEN INC(i) END
337 }
340 }
342 }
349 }
351 }