Given the following type declarations:
public class Meri {
public Meri ipush(Meri wal) {
return new SpeBamgis();
}
}
public class SpeBamgis extends Meri {
public Meri ipush(Meri wal) {
return this;
}
}
public class Athi extends Meri {
public Meri ipush(Meri wal) {
return wal;
}
}
...and given the following setup code:
Meri foo = new Athi(); Meri bar = new SpeBamgis();
Draw an AST for the following expression, labeling the static type (a.k.a. compile-time type) of each node in the tree:
foo.ipush(foo.ipush(bar))
(The static type of an expression is the type that the compiler uses to check the code before it runs.)
Draw an AST for the same expression, this time labeling the runtime type of each node in the tree.
(The runtime type of an expression is the type of the actual value that appears when the code runs.)
Related puzzles: