#lang typed/racket/base
(require "expression-structs.rkt"
"analyzer-structs.rkt")
(provide (all-defined-out))
(define-type ValuesContext (U 'tail
'drop-multiple
'keep-multiple
Natural))
(define-struct: NextLinkage ([context : ValuesContext]))
(define next-linkage/drop-multiple (make-NextLinkage 'drop-multiple))
(define next-linkage/expects-single (make-NextLinkage 1))
(define next-linkage/keep-multiple-on-stack (make-NextLinkage 'keep-multiple))
(define-struct: LabelLinkage ([label : Symbol]
[context : ValuesContext]))
(define-struct: ReturnLinkage ([tail? : Boolean]))
(define return-linkage (make-ReturnLinkage #t))
(define return-linkage/nontail (make-ReturnLinkage #f))
(define-type Linkage (U NextLinkage
LabelLinkage
ReturnLinkage))
(define-struct: lam+cenv ([lam : (U Lam CaseLam)]
[cenv : CompileTimeEnvironment]))