COMPORT – Compilador Portugol - Nilo Menezes
COMPORT – Compilador Portugol - Nilo Menezes
COMPORT – Compilador Portugol - Nilo Menezes
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