message: Use starlark_complex_values! for Def
  Summary: The new more powerful macro can cope with the disjoint types.
diff: @@ -34,8 +34,8 @@ use crate::{
  },
  syntax::ast::{AstExpr, AstParameter, AstStmt, Parameter},
  values::{
  - function::FUNCTION_TYPE, typing::TypeCompiled, AllocValue, ComplexValue, Freezer,
  - FrozenValue, Heap, SimpleValue, StarlarkValue, Trace, Tracer, Value, ValueLike, ValueRef,
  + function::FUNCTION_TYPE, typing::TypeCompiled, ComplexValue, Freezer, FrozenValue,
  + SimpleValue, StarlarkValue, Trace, Tracer, Value, ValueLike, ValueRef,
  },
  };
  use derivative::Derivative;
  @@ -191,8 +191,7 @@ pub(crate) struct DefGen<V, RefV> {
  pub(crate) type Def<'v> = DefGen<Value<'v>, ValueRef<'v>>;
  pub(crate) type FrozenDef = DefGen<FrozenValue, Option<FrozenValue>>;
  -any_lifetime!(Def<'v>);
  -any_lifetime!(FrozenDef);
  +starlark_complex_values!(Def);
  impl<'v> Def<'v> {
  fn new(
  @@ -225,8 +224,6 @@ impl<T1, T2> DefGen<T1, T2> {
  }
  }
  -impl SimpleValue for FrozenDef {}
  -
  unsafe impl<'v> Trace<'v> for Def<'v> {
  fn trace(&mut self, tracer: &Tracer<'v>) {
  self.parameters.trace(tracer);
  @@ -264,12 +261,6 @@ impl<'v> ComplexValue<'v> for Def<'v> {
  }
  }
  -impl<'v> AllocValue<'v> for Def<'v> {
  - fn alloc_value(self, heap: &'v Heap) -> Value<'v> {
  - heap.alloc_complex(self)
  - }
  -}
  -
  // We define two different StarlarkValue instances because
  // the invoker uses different types for both of them.
  impl<'v> StarlarkValue<'v> for FrozenDef {
  