| CSC448: Code Generation: Run-Time Storage Location III [71/133] | ![]() ![]() ![]() |
Corin did not show
For example, consider this method:
clazz LinkedList
{
...
method sort () : LinkedList
{
var t : Tree;
t := this.toTree ();
return t.toLinkedList ();
}
...
}
It is transformed to:
clazz LinkedList
{
...
method sort () : LinkedList
{
var tmpvar449 : Tree;
var tmpvar485 : Tree;
var tmpvar486 : LinkedList;
(tmpvar485 := (this.toTree ()));
(tmpvar449 := tmpvar485);
(tmpvar486 := (tmpvar449.toLinkedList ()));
return tmpvar486;
}
...
}
The code generator produces:
/* method sort of clazz LinkedList */
.align 4
.global LinkedList$sort
LinkedList$sort:
pushl %ebp
movl %esp, %ebp
subl $12, %esp
/* var tmpvar449 : Tree; */
/* stored in -4(%ebp) */
/* var tmpvar485 : Tree; */
/* stored in -8(%ebp) */
/* var tmpvar486 : LinkedList; */
/* stored in -12(%ebp) */
... some assembly language removed here ...
/* return tmpvar486; */
movl -12(%ebp), %eax
movl %ebp, %esp
popl %ebp
ret