On Mar 31, 2017, at 8:57 AM, Remi Forax <fo...@univ-mlv.fr> wrote:
> 
> I've some trouble to see how value types are laid on stack (conceptually, not 
> necessary the real implementation).
> 
> First, i may be wrong but it seems that vload do not reference the 
> corresponding Q-type, so i wonder how the verifier knows that it can then 
> access to component of the value type.
> Then, it seems that value type use one slot on stack, so the components (and 
> the boxed reference if it exists) has to be stored somewhere but there is no 
> corresponding max value type buffer size.

In the interpreter value types all share a common _carrier type_ which includes
metadata about the size and type of the value being stored, plus a pointer to
the actual storage.  The actual storage may be on the heap, or maybe not.
We are prototyping with thread-local arenas for the non-heap case.
There are also ways to store value payloads in the stack frame, but
in that case there is a special handshake when you want to return a
value from a method call.

From the verifier's point of view, there isn't much difference between
the various Q-types.  We will probably track classes of Q-types, mainly
to simplify vgetfield operations.

— John

Reply via email to