X-Git-Url: https://git.lukelau.me/?a=blobdiff_plain;f=typecheck.scm;h=a526620e7139665fd72273394914462419cb45d0;hb=c4a5f8ab1efce20f0e1181ffe34639facb19594a;hp=e3986062e358d763e99746f2ebdd26828337336f;hpb=7be98b67cbad421a0b041d20e0f4620e70bd4cd6;p=scheme.git diff --git a/typecheck.scm b/typecheck.scm index e398606..a526620 100644 --- a/typecheck.scm +++ b/typecheck.scm @@ -255,11 +255,12 @@ res)) (define (init-adts-env prog) - (flat-map data-tors-env (program-data-layouts prog))) + (flat-map data-tors-type-env (program-data-layouts prog))) ; we typecheck the lambda calculus only (only single arg lambdas) (define (typecheck prog) - (cadr (check (init-adts-env prog) (normalize (program-body prog))))) + (let ([expanded (program-map-exprs expand-pattern-matches prog)]) + (cadr (check (init-adts-env expanded) (normalize (program-body expanded)))))) ; before passing annotated types onto codegen @@ -309,8 +310,11 @@ (define ann-expr car) (define ann-type caddr) + + ; prerequisites: expand-pattern-matches (define (annotate-types prog) - (denormalize (program-body prog) + (denormalize + (program-body prog) (caddr (check (init-adts-env prog)(normalize (program-body prog))))))