(define impc:ir:pointer--
(lambda (type . ptr-depth)
(if (null? ptr-depth)
(set! ptr-depth 1)
(set! ptr-depth (car ptr-depth)))
(if (string? type) ;; this used to check for tuple? as well
(substring type 0 (- (string-length type) ptr-depth))
(if (or (impc:ir:closure? type)
(impc:ir:array? type)
(impc:ir:vector? type)
(impc:ir:tuple? type))
(let ((nl (cl:copy-list (if (string? type) (impc:ir:get-type-from-str type) type))))
(set-car! nl (- (impc:ir:str-list-check type) (* *impc:ir:pointer* ptr-depth)))
nl)
(- (impc:ir:str-list-check type) (* *impc:ir:pointer* ptr-depth))))))