1 Invocazione di metodi Com := Path Id (Expr_list) 4 path trattati come nelle variabili path p’ 4 Risoluzione del nome: Ide * (Ide | Loc) * Cenv * Heap fmet Ide * Blocco * (Ide | Loc)
2 Risoluzione del nome (nella classe) Ide * (Ide | Loc) * Cenv * Heap fmet Ide * Blocco * (Ide | Loc) (c) = (c1, _, , _, _) mdefined(f, ) _____________________________________________ fmet (f) (c) = (c1, _, , _, _) not mdefined(f, ) fmet md _____________________________________________ fmet md
3 Risoluzione del nome (nell’oggetto) Ide * (Ide | Loc) * Cenv * Heap fmet Ide * Blocco * (Ide | Loc) (l) = (c, _, ) mdefined(f, ) _____________________________________________ fmet (f) (l) = (c, _, ) not mdefined(f, ) fmet md _____________________________________________ fmet md
4 Invocazione di metodi Com := Id (Expr) un solo argomento Com * Cenv * Heap * Astack com Heap * Astack * Cenv Ide * (Ide | Loc) * Cenv * Heap fmet Ide * Blocco * (Ide | Loc) top( ) = (x, _) path p’ fmet (par, b, y) expr = bind(newframe(), par, v) ’ = push( , (y, push(emptystack(), ))) com ________________________________________________ com
5 Invocazione di metodi: commenti top( ) = (x, _) path p’ fmet (par, b, y) expr = bind(newframe(), par, v) ’ = push( , (y, push(emptystack(), ))) com ________________________________________________ com 4 si effettua la ricerca del metodo a partire dalla classe o dall’oggetto contenuti nella testa della pila 4 si valuta il parametro attuale 4 si crea un nuovo stack di frames, il cui unico frame contiene l’associazione tra parametro formale e valore del parametro attuale 4 si pusha sulla pila il record che contiene la classe o l’oggetto associato al metodo e la pila di frames 4 si valuta il corpo del metodo