17.01.2013 Views

COMPORT – Compilador Portugol - Nilo Menezes

COMPORT – Compilador Portugol - Nilo Menezes

COMPORT – Compilador Portugol - Nilo Menezes

SHOW MORE
SHOW LESS

Create successful ePaper yourself

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

}<br />

x.r = 0;<br />

else if (y->lev == curlev)<br />

x.r = FP;<br />

else<br />

{<br />

Mark ("level!");<br />

x.r = 0;<br />

}<br />

if (y->Class == Par)<br />

{<br />

GetReg (r);<br />

Put (LDW, r, x.r, x.a);<br />

x.mode = Var;<br />

x.r = r;<br />

x.a = 0;<br />

}<br />

void<br />

Field (Item & x, Object & y)<br />

{<br />

x.a += y->val;<br />

x.type = y->type;<br />

}<br />

void<br />

Index (Item & x, Item & y)<br />

{<br />

if (y.type != intType)<br />

Mark ("index not integer");<br />

if (y.mode == Const)<br />

{<br />

if (y.a < 0 || y.a >= x.type->len)<br />

Mark ("bad index");<br />

x.a += y.a * x.type->base->size;<br />

}<br />

else<br />

{<br />

if (y.mode != Reg)<br />

load (y);<br />

Put (CHKI, y.r, 0, x.type->len);<br />

Put (MULI, y.r, y.r, x.type->base->size);<br />

if (x.r != 0)<br />

{<br />

Put (ADD, y.r, x.r, y.r);<br />

EXCL (regs, x.r);<br />

}<br />

x.r = y.r;<br />

}<br />

x.type = x.type->base;<br />

}<br />

void<br />

Op1 (int op, Item & x)<br />

{<br />

long t;<br />

if (op == MENOS)<br />

{<br />

if (x.type->form != Integer)<br />

Mark ("bad type");<br />

else<br />

ComPort <strong>–</strong> <strong>Compilador</strong> <strong>Portugol</strong><br />

91

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

Saved successfully!

Ooh no, something went wrong!