(define impc:ir:compile:push_zone
(lambda (ast types)
(let* ((os (make-string 0))
(zone-str (impc:ir:compiler (cadr ast) types))
(zone (impc:ir:gname)))
(emit zone-str os)
(emit "call void @llvm_push_zone_stack(%mzone* " (car zone) ")\n" os)
(emit (impc:ir:gname "zone_ptr" "i8*") " = bitcast %mzone* " (car zone) " to i8*\n" os)
(emit "store i8* " (car (impc:ir:gname "zone_ptr")) ", i8** %_impzPtr\n" os)
(impc:ir:gname "voidmark" (impc:ir:get-type-str *impc:ir:void*))
(impc:ir:strip-space os))))