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