«« ( Date ) »» // «« ( Thread ) »» // ri4pp - 2006

Re: Za asistena ili ako neko zna

by Milan Aleksic
subota, 10. jun 2006 - 18:53.

load_0 ti je uzimanje adrese objekta od this, a getfield ti je fizicki
pristup polju objekta cija je adr malopre postavljena na stek. To uvek
radis tako ili getfield dize stack underflow. procitaj uputstvo za
opkodove, tamo sve pise na ovu temu.
E sad, zanimljiviji deo je kako ces da nateras komp da prepozna da je
u pitanju polje i da pre getfield postavi this... samo prodji kroz
tabelu!
poz

On 6/10/06, Ivan Mitic <mitkebgd@gmail.com> wrote:
Imam jedan problem koji nikako ne uspevam da resim.

Kako da iz metode pristupim lokalnim clanovima klase tj. kako da generisem
kod. U kontekstu sa ovim ne znam sta da radim sa parametrom(literalom)
'this' kada naidjem na njega. Ako mozete da okacite neki kod ili da ukratko
objasnite sta da radim.

Evo npr. kod iz primera5

class X{
int x,y,z;
void printX()
{ print(x);
}
}
kod koji se generise je
0: enter 1 1
//print(x);<=>print(this.x);
3: load_0
4: getfield 1
7: const_0
8: print
9: exit
10: return

Mi kada pozivamo metodu, na stek postavljamo adresu objekta i ostale
parametre sto ustvari predstavlja prvi parametar funkcije(this) i ostatak
parametara pa je u ovom primeru jasno zasto load_0. Da li to sada znaci da
kada generisemo kod za operacije metoda uvek stavljamo load_0 pre koriscenja
lokalnih polja klasa ili mi je ceo koncept pogresan?
stvarno bi bilo dobro da okacite primer u kome se malo vise koriste lokalna
polja klasa!


Pozdrav




--
Milan Aleksić
WebGrafit: http://galeb.etf.bg.ac.yu/~aleksicm/webgrafit.php
email+jabber: milanaleksic@gmail.com
web: http://drop.to/goblin
ICQ: 53177884