imple oo lang 2

Upload: dilip-thelip

Post on 03-Apr-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/28/2019 Imple OO Lang 2

    1/16

    Implementing

    Object-Oriented Languages - Part 2Y.N. Srikant

    Computer Science and Automation

    Indian Institute of Science

    Bangalore 560 012

    NPTEL Course on Compiler Design

  • 7/28/2019 Imple OO Lang 2

    2/16

    Y.N. Srikant 2

    Outline of the Lecture

    Language requirements

    Mapping names to methods Variable name visibility

    Code generation for methods

    Simple optimizations Parts of this lecture are based on the book,

    Engineering a Compiler, by Keith Cooper andLinda Torczon, Morgan Kaufmann, 2004, sections6.3.3 and 7.10.

    Topics 1,2,3, and, 4 were covered in Part 1 of the lecture.

  • 7/28/2019 Imple OO Lang 2

    3/16

    Y.N. Srikant 3

    Example of Class Hierarchy with

    Complete Method Tablesn: 0

    fee

    fum

    n: 1

    fee

    fum

    n: 2

    fee

    fum

    x: 5

    x: 5

    y: 3

    z:

    foe foe

    fie

    x: 2

    y: 0

    z:

    y: 3

    fum

    ...

    fee...

    foe...

    fee

    ...

    fee...

    fie...

    one

    two

    threec

    a

    b

    object

    class

    method

  • 7/28/2019 Imple OO Lang 2

    4/16

    Y.N. Srikant 4

    Implementing Multiple Inheritance

    %new_

    pointer

    %new_

    pointer

    %new_

    pointer

    fum...

    foe...

    fee

    ...

    fie...

    class a class b

    class c

  • 7/28/2019 Imple OO Lang 2

    5/16

    Y.N. Srikant 5

    Implementing Multiple Inheritance

    class

    pointer

    a data

    members

    b data

    members

    c data

    members

    object layout

    for objects

    of class c

    class

    pointer

    a data

    members

    object layout

    for objects

    of class a

    classpointer

    b datamembers

    object layout

    for objects

    of class b

  • 7/28/2019 Imple OO Lang 2

    6/16

    Y.N. Srikant 6

    Implementing Multiple Inheritance

    - Fixed Offset Method Record the constant offset in the method

    table along with the methods

    Offsets for this example are as follows: (c) fee : 0, (a) fie: 0, (b) foe : 8, (b) fum : 8,

    assuming that instance variables of class a take 8bytes

    Generated code adds this offset to thereceivers pointer address before invoking the

    method

    class

    pointer

    a data

    members

    b data

    members

    c data

    members

    object layout

    for objects

    of class c

  • 7/28/2019 Imple OO Lang 2

    7/16

    Y.N. Srikant 7

    Implementing Multiple Inheritance

    %new_

    pointer

    %new_

    pointer

    %new_

    pointer

    fum...

    foe...

    fee

    ...

    fie...

    class a class b

    class c

    class

    pointer

    a data

    members

    b data

    members

    c data

    members

    object layout

    for objects

    of class c

    data pointer for c.foe()

  • 7/28/2019 Imple OO Lang 2

    8/16

    Y.N. Srikant 8

    Implementing Multiple Inheritance

    - Trampoline Functions Create trampoline functions for each method

    of class b A function that increments this (pointer to

    receiver) by the required offset and then invokes

    the actual method fromb. On return, it decrements the receiver pointer, if it

    was passed by reference

  • 7/28/2019 Imple OO Lang 2

    9/16

    Y.N. Srikant 9

    Implementing Multiple Inheritance

    Trampolines appear to be more expensive

    than the fixed offset method, but not really so They are used only for calls to methods inherited

    fromb

    In the other method, offset (possibly 0) was added for allcalls

    Method inlining will make it better than option 1,since the offset is a constant

    Finally, a duplicate class pointer (pointing toclass c) may need to be inserted just before

    instance variables ofb (for convenience)

  • 7/28/2019 Imple OO Lang 2

    10/16

    Y.N. Srikant 10

    Fast Type Inclusion Tests

    The need

    If classY is a subclass of class X X a = new Y(); //a is of type base class of Y, okay

    // other code omittedY b = a; // a holds a value of type Y

    The above assignment is valid, but the following is not

    X a = new X();// other code omittedY b = a; // a holds a value of type X

    Runtime type checking to verify the above is

    needed J ava has an explicit instanceoftest that requires a

    runtime type checking

  • 7/28/2019 Imple OO Lang 2

    11/16

    Y.N. Srikant 11

    Fast Type Inclusion Tests

    Searching the

    Class Hierarchy Graph Store the class hierarchy graph in memory

    Search and check if one node is an ancestorof another

    Traversal is straight forward to implement

    only for single inheritance Cumbersome and slow for multiple

    inheritance

    Execution time increases with depth of classhierarchy

  • 7/28/2019 Imple OO Lang 2

    12/16

    Y.N. Srikant 12

    Class Hierarchy Graph -

    Example

    A

    B C

    D E

    G

    F

    Single

    inheritance A

    B C

    D E

    G

    F

    HMultiple

    inheritance

  • 7/28/2019 Imple OO Lang 2

    13/16

    Y.N. Srikant 13

    Fast Type Inclusion Tests

    Binary Matrix

    0 1 0 0 1

    0 0 1 0 1

    1 0 0 1 0

    1 0 0 0 1

    0 0 1 0 0

    C1 C2 C3 C4 C5

    C1

    C2

    C3

    C4

    C5

    Class types

    Class types

    BM [Ci, Cj] = 1, iff Ci is a subclass ofCj

    Tests areefficient, butMatrix will belarge in practice.

    The matrix canbe compacted,but thisincreases

    access time.This can handlemultipleinheritance also.

  • 7/28/2019 Imple OO Lang 2

    14/16

    Y.N. Srikant 14

    Relative (Schuberts) Numbering

    A

    B C

    D E

    G

    F

    {3,3}

    {1,1}

    {5,5}{3,4}

    {3,6}{1,2}

    {1,7}

    { la

    , ra

    } for a node a

    :

    ra

    is the ordinal number of the

    node a

    in a postorder

    traversal

    of the tree. Let denotesubtype of

    relation. All

    descendants of a node are

    subtypes of that node.

    is reflexive and transitive.

    la

    = min { rp

    | p is a descendant

    of

    a }.

    Now,

    a

    b, iff

    lb