17.05.2015 Views

Pascal News

Pascal News

Pascal News

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

225<br />

226<br />

228<br />

229<br />

l!30<br />

231<br />

232<br />

233<br />

235<br />

236<br />

237<br />

238<br />

23'9<br />

240<br />

242<br />

243<br />

24lj<br />

246<br />

241<br />

248<br />

249<br />

250<br />

251<br />

252<br />

253<br />

254<br />

255<br />

256<br />

258<br />

259<br />

260<br />

261<br />

262<br />

263<br />

264<br />

266<br />

267<br />

268<br />

269<br />

270<br />

271<br />

272<br />

273<br />

274<br />

215<br />

276<br />

277<br />

278<br />

279<br />

280<br />

O •• rwlim;<br />

0 •• t8m1;<br />

{pointer typesl<br />

IIP= Alltruoture:<br />

11>= "identi fier :<br />

Ip= 'labl;<br />

bp. 'blockini'o:<br />

np= ""nameinfo;<br />

{set types}<br />

sOS'S<br />

setofids.<br />

f'ormset.<br />

sflagset.<br />

iflagset=<br />

set of symbol;<br />

set of idol ass :<br />

set Of strootfo"";<br />

set of struotflag;<br />

set of identflag;<br />

{array types I<br />

alpha .packed array[ idrangeJ afchar;<br />

fntype'paoked a .... ay[ fnrange] of char;<br />

{record typesl<br />

-errec=record<br />

erno:lnt-eger;<br />

mess: alph:a;<br />

me$i ~lnteger;<br />

chno:lntecger;<br />

lino:integer ;<br />

linr :integer;<br />

orig:integer :<br />

fnam:fntype;<br />

end;<br />

position'record<br />

ad :integer;<br />

Iv :integer;<br />

Uirder SEGMENTS<br />

·sg :sgrange<br />

Dendir<br />

end;<br />

{error numbed<br />

!identifier parameter if required}<br />

{numeric parameter if required}<br />

{column number}<br />

{lin en umber}<br />

{relative to start. of (included) file}<br />

{idem, but. before preproces!ling)<br />

{source· file neme}<br />

{the addr info of certain variable}<br />

{for locals it is the byte offsetl<br />

{the level of the beast)<br />

{only relevant for globals (lv"O) }<br />

{records of type attr are used to remember qualities of<br />

expression parts to delay the loading of them.<br />

Reasons to delay the loading of one word constants:<br />

- bound checking<br />

- set building.<br />

Reasons to delay the loading of direct accessible objects:<br />

- efficient handling of read/wri'te<br />

- efficient handling of the with statement.<br />

attr=record<br />

asp:sp;<br />

packbit :boolean;<br />

ak :attrkind;<br />

pos :po sition;<br />

{If ak=cst then the val ue is stored<br />

{type of expressionl<br />

{true for packed elementsl<br />

{access method}<br />

{sg. Iv and ad}<br />

in ad}<br />

281 end;<br />

283<br />

2M<br />

285<br />

286<br />

281<br />

288<br />

289<br />

290<br />

292<br />

293<br />

294<br />

295<br />

296<br />

297<br />

298<br />

300<br />

301<br />

302<br />

303<br />

3011<br />

305<br />

306<br />

307<br />

308<br />

309<br />

310<br />

311<br />

312<br />

313<br />

314<br />

315<br />

316<br />

317<br />

318<br />

319<br />

320<br />

321<br />

322<br />

323<br />

324<br />

325<br />

326<br />

327<br />

328<br />

329<br />

331<br />

332<br />

333<br />

334<br />

335<br />

336<br />

nameinfo=record<br />

nlin-k:np;<br />

fname:ip;<br />

case occur :where of<br />

blck:();<br />

reo: 0;<br />

wrec.:(wa:attr)<br />

end;<br />

blockinfo=reoord<br />

nextbp:bp;<br />

lc:integer;<br />

ilbno:integer:<br />

rorwcount :integer;<br />

lchain :lp;<br />

end;<br />

st.rueture~record<br />

s.1ze.:integer;<br />

sflag:sflagset;<br />

case form:structform of<br />

scalar : (scalno:integer;<br />

fconst:ip<br />

);<br />

subrange: (min .max :integer;<br />

rangetype :sp;<br />

subrno:lnteger<br />

);<br />

pointer : (eHype :sp);<br />

power : (elset:sp);<br />

files : (flltype:sp);<br />

arrays ,csrray:<br />

(aeltype:sp:<br />

inx type :sp ~<br />

arpos :posl tion<br />

);<br />

records:( fstfld :ip;<br />

tagsp:sp<br />

);<br />

variant ': (varval :integer;<br />

nxtvar':sp;<br />

subtsp:sp<br />

);<br />

tag :(fstvar:sp;<br />

tfldsp:sp<br />

)<br />

identifier. record<br />

idtype:sp;<br />

narile:alpha;<br />

llink.rl1nk:ip;<br />

next :ip;<br />

iflag:iflagset;<br />

{one for each separate name space J<br />

{one deeper}<br />

{first name:· root of treel<br />

{name space opened by with statement}<br />

{all info of the current procedurel<br />

{pointer to blockinfo Of surrounding proc}<br />

{data" location "ounter (from begin of proc)<br />

{number of last local label}<br />

{number of not yet spe"lfied forward procs}<br />

{first label: header of chain}<br />

{size of structure in bytes}<br />

{flag bits}<br />

{number of range descriptor}<br />

{names of constants}<br />

{lower and upper bound}<br />

{type of bounds}<br />

{number of subr descriptor}<br />

{type ofpolnted object}<br />

{type of set elementsl<br />

{type of file elements}<br />

{type of array elements}<br />

{type of array index}<br />

{position of array descriptor}<br />

{points to first fieldl<br />

{points to tag if present}<br />

{tag value for this variantl<br />

{next equilevel Variant}<br />

{points to tag for sub-case }<br />

{first variant of case}<br />

{type of tagl<br />

{type of identifier!<br />

{name of identified<br />

{see enterid,search1d}<br />

{used to make several chains)<br />

{several flag bitsl<br />

--<br />

'" m

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!