;;;; A container parameter is a copy of the caller's header. Growing it grows ;;;; the copy, so the caller's container does not see the push; the function ;;;; is warned at, at the parameter, and the fix it names is the (Ptr ...) ;;;; below, which reaches the caller's own header. (defn add-copy [v (Vec i32)] () (push v 1) (free v)) (defn add-ptr [v (Ptr (Vec i32))] () (push (deref v) 2)) (defn put-ptr [m (Ptr (Map i32 i32))] () (put (deref m) 7 8)) (defn main [] i32 (let [v (vec-new i32) m (map-new i32 i32)] (add-copy v) (println (length v)) ; 0 (add-ptr (addr v)) (add-ptr (addr v)) (println (length v)) ; 2 (println (at v 1)) ; 2 (put-ptr (addr m)) (println (length m)) ; 1 (free v) (free m)) 0)