
valuetype vt {
  public short x;
};

valuetype base {
  public short y;
};

valuetype derived : truncatable base {
  public vt z;
};

valuetype node {
  public node next;
};

interface iface {
  /*
   *   derived_var d = ...;
   *   ...
   *   iface->skipped_value (d, d->z());
   * even when the server doesnt have a factory for derived it
   * must be able to extract d->z() for the second parameter.
   */
  void skipped_value (in base b, in vt v);

  /*
   *   vt_var v = ...;
   *   ...
   *   iface->shared_parameter (v, v);
   * on the server side this must result in v1 == v2 (same pointer).
   */
  void shared_parameter (in vt v1, in vt v2);

  /*
   * the transmitted valuetype graph must be isomorphic to the
   * original valuetype graph. check this using a cyclic list.
   */
  void cyclic (in node n);
};
