The InterpFrame was only created so early so we could use getThis(). However, we need to know the Function when creating the InterpFrame and in the case of virtual functions, we need to determine what function to call at interpretation time. Get the This pointer ourselves and just create the InterpFrame later.
This is of course in preparation for virtual function calls.
Ooofda, this only differs from peek() on line 97 because this function has a templated return type, but otherwise the signatures only differ based on return type. This doesn't feel like the most clean overload set...
Also, should this be worrying about alignment of T compared to the offset we find it at? (Should there be an assert that the offset is sensible for a T?)