CSC448: Code Generation: Run-Time Storage Location III [71/133] Previous pageContentsNext page

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

Previous pageContentsNext page