diff --git a/collects/tests/typed-scheme/succeed/struct-path-update.ss b/collects/tests/typed-scheme/succeed/struct-path-update.ss new file mode 100644 index 00000000..aeae5430 --- /dev/null +++ b/collects/tests/typed-scheme/succeed/struct-path-update.ss @@ -0,0 +1,9 @@ +#lang typed/scheme + +(define-struct: foo [(bar : Integer)]) + +(: f (foo -> Integer)) +(define (f x) + (if (zero? (foo-bar x)) + (error 'f "Nooooooo!") + (foo-bar x))) \ No newline at end of file diff --git a/collects/typed-scheme/typecheck/tc-envops.ss b/collects/typed-scheme/typecheck/tc-envops.ss index 832e6875..c009e869 100644 --- a/collects/typed-scheme/typecheck/tc-envops.ss +++ b/collects/typed-scheme/typecheck/tc-envops.ss @@ -46,7 +46,7 @@ ;; struct ops [((Struct: nm par flds proc poly pred cert acc-ids) (TypeFilter: u (list rst ... (StructPE: (? (lambda (s) (subtype t s)) s) idx)) x)) - (make-Struct nm par (replace-nth flds idx (lambda (e) (update e (make-TypeFilter u rst x)))) proc poly pred cert )] + (make-Struct nm par (replace-nth flds idx (lambda (e) (update e (make-TypeFilter u rst x)))) proc poly pred cert acc-ids)] [((Struct: nm par flds proc poly pred cert acc-ids) (NotTypeFilter: u (list rst ... (StructPE: (? (lambda (s) (subtype t s)) s) idx)) x)) (make-Struct nm par (replace-nth flds idx (lambda (e) (update e (make-NotTypeFilter u rst x)))) proc poly pred cert acc-ids)]