17.05.2015 Views

Pascal News

Pascal News

Pascal News

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

2801<br />

2802<br />

2803<br />

2804<br />

2805<br />

2806<br />

2807<br />

2808<br />

2809<br />

2810<br />

2811<br />

2812<br />

2813<br />

2814<br />

2815<br />

2816<br />

2817<br />

2818<br />

2819<br />

2820<br />

2821<br />

2822<br />

2823<br />

2824<br />

2825<br />

2826<br />

2827<br />

2828<br />

2829<br />

2830<br />

2831<br />

2832<br />

2833<br />

2834<br />

2835<br />

2836<br />

2837<br />

2838<br />

2839<br />

2840<br />

2841<br />

2842<br />

2843<br />

2844<br />

2846<br />

2848<br />

2849<br />

2851<br />

2852<br />

2853<br />

2854<br />

2855<br />

2856<br />

if aspnil then<br />

case asp'.form of<br />

scalar:<br />

if asp=realptr then genO (op emf) else<br />

if asp=longptr then genO(op::::emd) else genO(op_cmi);<br />

pointer:<br />

if (lsy=eqsy) or (lsy=nesy) then genO(op_cmp) else<br />

asperr(+0216);<br />

power:<br />

case lsy of<br />

eqsy,nesy: setop(op emu);<br />

ltsy,gtsy: asperr(+0217);<br />

lesy: l'a=b' equivalent to 'a=b+a')<br />

begin sz:=even(sizeof(asp»; gen1(op dup,2*sz);<br />

gen1(op beg,-sz); setop(op ior); -<br />

setop(op emu); lsy:=eqsy -<br />

end -<br />

end; {case)<br />

arrays:<br />

if string( asp) then<br />

begin 13: =lino; gen1(op mrk,O); exehange(ll,13);<br />

gen1(op loe,asp' .size); gensp(BCP)<br />

end -<br />

else asperr{+0218);<br />

records: asperr(+0219);<br />

files: asperr(+0220)<br />

end; {case)<br />

case lsy of<br />

ltsy: genO (op tlt);<br />

lesy: genO (op-tle);<br />

gtsy: genO(op-tgt);<br />

gesy: genO(op-tge);<br />

nesy: genO(op-tne);<br />

eqsy: genO(op::::teq)<br />

end<br />

end;<br />

asp:=boolptr; ak:=loaded<br />

end;<br />

end end;<br />

{== = = = == = = = == = = === = == = ==== = = = = = == = = = = == = = == = = == = = = = = = = = = = = = = == == = = = = )<br />

proc"liure statement(fsys :sos); forward;<br />

{this forward declaration can be avoided}<br />

procedure assigrnnent( fSys :sos; fiD :ip);<br />

var la:attr; 11,12:integer;<br />

begin<br />

11: =lino; seleetor( fsys+[becomesl, fip, [assigned l); 12: =lino;<br />

la:=a; nextif(beeomes,+0221);<br />

expression(fsys}; loadcheap; cbeckasp( la.asp,+(222);<br />

2857<br />

2858<br />

2859<br />

2860<br />

2861<br />

2862<br />

2863<br />

2864<br />

2865<br />

2866<br />

2867<br />

2869<br />

2870<br />

2871<br />

2872<br />

2873<br />

2874<br />

2875<br />

2876<br />

2877<br />

2878<br />

2879<br />

2880<br />

2881<br />

2882<br />

2883<br />

2884<br />

2885<br />

2886<br />

2887<br />

2888<br />

2889<br />

2890<br />

2891<br />

2892<br />

2893<br />

2894<br />

2895<br />

2896<br />

2897<br />

2899<br />

2900<br />

2901<br />

2902<br />

2903<br />

2905<br />

2906<br />

2907<br />

2908<br />

2909<br />

2910<br />

2911<br />

2912<br />

exehange(ll,12); a:=la;<br />

if not formof(la.asp,[arrays .. recordsJ) then store else<br />

begin loadaddr;<br />

if la.asp' .formearray then<br />

gen 1(op blm,even(sizeof(la.asp»)<br />

else -<br />

begin genl(op mrk,O); descraddr(la.asp' .arpos); gensp(ASZ);<br />

genO (op blsT<br />

end; -<br />

end;<br />

end;<br />

procedure gotostatement;<br />

{jtunps into structured statements can give strange results. }<br />

label 1;<br />

var 11p:lp; lbp:bp; diff:integer;<br />

begin<br />

if syintcst then error(+0223) else<br />

begin IIp:=searehlab(b.lehain,val);<br />

if 11pnil then<br />

if 11p' .seen then ·genl (op brb,11p' .labname)<br />

else gen 1 (op brf ,11p' .labname)<br />

else -<br />

begin lbp:=b.nextbp; diff:=l;<br />

while lbpnil do<br />

begin 11p:=searehlab( lbp' .lehain, val);<br />

if 11pnil then goto 1;<br />

lbp:=lbp' .nextbp; diff:·=diff+l;<br />

end;<br />

1: if 11p=nil then errint(+0224, val) else<br />

begin<br />

if 11p' .labdlb=O then<br />

begin dlbno:=dlbno+l; Up' .labdlb:=dlbno;<br />

gend(ps fwa,dlbno); {forward data reference}<br />

end; -<br />

gen 1 (op mrk,diffl; gend (op_lae·, 11p' .labdlb); gensp(GTO);<br />

end; -<br />

end;<br />

insym;<br />

end<br />

end;<br />

procedure compoundstatement( fsys :808; err :integer);<br />

begin<br />

repeat statement(fsys+[semieolonJ)<br />

until endofloop( fsys I [beginsy .. casesy] I semicolon ,err)<br />

end;<br />

procedure ifstatement(fsys :808);<br />

var Ib1,lb2:integer;<br />

begin with b do begin<br />

expression( fsys+[ thensy ,elsesyl);<br />

force(boolptr ,+0225); ilbno :=ilbno+l; lbl: =i1bno; gen 1(op_zeq,lbl );<br />

next1f(thensy ,+0226); statement( fsys+[elsesyl);<br />

if find3(elsesy,fsys,+0227) then<br />

begin ilbno:=ilbno+l; lb2:=ilbno; gen1(op_brf,lb2);<br />

,.<br />

-0<br />

'"<br />

'"

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

Saved successfully!

Ooh no, something went wrong!