- ; just copy over the tag
- (emit "movq $~a, ~a(%rbp)"
- (data-sum-tag (env-data-layouts env)
- stack-type
- name)
- si)
- (emit-stack-copy (cdr stack-offset) si (type-size dls stack-type)))
- (emit "movq ~a(%rbp), %rax" (cdr stack-offset)))))
+ ; just store the tag
+ (let ([tag (data-sum-tag (env-data-layouts env) name)])
+ (if (on-stack? e)
+ (emit "movq $~a, ~a(%rbp)" tag si)
+ (emit "movq $~a, %rax" tag)))]
+ [(on-stack? e) (emit-stack-copy (cdr stack-offset) si (type-size dls stack-type))]
+ [else (emit "movq ~a(%rbp), %rax" (cdr stack-offset))])))