     0 emit ! pointer to bignum 0
     0 emit ! pointer to bignum 1
     0 emit ! pointer to bignum -1
-    special-object-count [ f ' emit ] times ;
+    special-object-count [ f prepare-object emit ] times ;
 
 ! Bignums
 

                    [ word-sub-primitive ]
                    [ drop 0 ] ! entry point
                } cleave
            ] output>array [ ' ] map!
        ] bi
        \ word [ emit-seq ] emit-object
    ] keep put-object ;

    [ [ (emit-tuple) ] cache-eq-object ]
    if ;

M: tuple prepare-object emit-tuple ;

M: tombstone prepare-object
    state>> "((tombstone))" "((empty))" ?
    "hashtables.private" lookup-word def>> first
    [ emit-tuple ] cache-eql-object ;

! Arrays
: emit-array ( array -- offset )
    [ prepare-object ] map array [ [ length emit-fixnum ] [ emit-seq ] bi ] emit-object ;

M: array prepare-object [ emit-array ] cache-eq-object ;

! This is a hack. We need to detect arrays which are tuple
! layout arrays so that they can be internalized, but making
