public override bool MakeHeap(Sink sink, out Heap heap, out Bpl.Program/*?*/ program) {
   heap = this;
   program = null;
   this.sink = sink;
   string prelude = this.InitialPreludeText + this.CommonText;
   var b = RepresentationFor.ParsePrelude(prelude, this, out program);
   if (b) {
     this.FieldType = new Bpl.CtorType(this.FieldTypeDecl.tok, this.FieldTypeDecl, new List<Bpl.Type>());
     this.RefType = new Bpl.CtorType(this.RefTypeDecl.tok, this.RefTypeDecl, new List<Bpl.Type>());
     this.RealType = new Bpl.CtorType(this.RealTypeDecl.tok, this.RealTypeDecl, new List<Bpl.Type>());
   } 
   return b;
 }
 /// <summary>
 /// Returns two things: an object that determines the heap representation,
 /// and (optionally) an initial program that contains declarations needed
 /// for the heap representation.
 /// </summary>
 /// <param name="sink">
 /// The heap might need to generate declarations so it needs access to the Sink.
 /// </param>
 /// <returns>
 /// false if and only if an error occurrs and the heap and/or program are not in a
 /// good state to be used.
 /// </returns>
 public abstract bool MakeHeap(Sink sink, out Heap heap, out Bpl.Program/*?*/ program);