(define impc:ir:compiler:bitcast
(lambda (ast types . hint?)
;; (println 'bitcast-hint: hint? ast (cddr ast))
(if (and (null? (car hint?))
(null? (cddr ast)))
(impc:compiler:print-could-not-resolve-type-error ast "try forcing the cast"))
(let* ((os (make-string 0))
(a (impc:ir:compiler (cadr ast) types))
(at (impc:ir:gname))
(type-str (if (null? (cddr ast))
(impc:ir:get-type-str (car hint?))
(impc:ir:get-type-str (impc:ir:convert-from-pretty-types (caddr ast))))))
(emit a os)
(emit (string-append (impc:ir:gname "val" type-str)
" = bitcast " (cadr at) " " (car at) " to " type-str "\n") os)
(impc:ir:strip-space os))))