@@ -552,11 +552,9 @@ struct
552552 | y , Blob (x ,s ,o ) -> Blob (join (x:t ) y, s, o)
553553 | (Thread x , Thread y ) -> Thread (Threads. join x y)
554554 | (Int x, Thread y)
555- | (Thread y , Int x ) ->
556- Thread y (* TODO: ignores int! *)
555+ | (Thread y , Int x ) -> Thread (Threads. join y (Threads. top () ))
557556 | (Address x, Thread y)
558- | (Thread y , Address x ) ->
559- Thread y (* TODO: ignores address! *)
557+ | (Thread y , Address x ) -> Thread (Threads. join y (Threads. top () ))
560558 | (JmpBuf x , JmpBuf y ) -> JmpBuf (JmpBufs. join x y)
561559 | (Mutex, Mutex) -> Mutex
562560 | (MutexAttr x , MutexAttr y ) -> MutexAttr (MutexAttr. join x y)
@@ -585,11 +583,9 @@ struct
585583 | (Blob x , Blob y ) -> Blob (Blobs. widen x y) (* TODO: why no blob special cases like in join? *)
586584 | (Thread x , Thread y ) -> Thread (Threads. widen x y)
587585 | (Int x, Thread y)
588- | (Thread y , Int x ) ->
589- Thread y (* TODO: ignores int! *)
586+ | (Thread y , Int x ) -> Thread (Threads. widen y (Threads. join y (Threads. top () )))
590587 | (Address x, Thread y)
591- | (Thread y , Address x ) ->
592- Thread y (* TODO: ignores address! *)
588+ | (Thread y , Address x ) -> Thread (Threads. widen y (Threads. join y (Threads. top () )))
593589 | (Mutex, Mutex) -> Mutex
594590 | (JmpBuf x , JmpBuf y ) -> JmpBuf (JmpBufs. widen x y)
595591 | (MutexAttr x , MutexAttr y ) -> MutexAttr (MutexAttr. widen x y)
@@ -708,7 +704,7 @@ struct
708704 let v = invalidate_value ask voidType (CArrays. get ask n (array_idx_top)) in
709705 Array (CArrays. set ask n (array_idx_top) v)
710706 | t , Blob n -> Blob (Blobs. invalidate_value ask t n)
711- | _ , Thread _ -> state (* TODO: no top thread ID set! * )
707+ | _ , Thread tid -> Thread ( Threads. join ( Threads. top () ) tid )
712708 | _ , JmpBuf _ -> state (* TODO: no top jmpbuf *)
713709 | _ , Bot -> Bot (* Leave uninitialized value (from malloc) alone in free to avoid trashing everything. TODO: sound? *)
714710 | t , _ -> top_value t
0 commit comments