This commit is contained in:
Isaac Shoebottom 2025-04-10 05:13:46 -03:00
parent 647ea45733
commit b13264feed

View File

@ -130,20 +130,20 @@
[(objE fields) (let* ([extract-exp (lambda (obj) (pair (fst obj) (typecheck (snd obj) env)))] [(objE fields) (let* ([extract-exp (lambda (obj) (pair (fst obj) (typecheck (snd obj) env)))]
[field-list (map extract-exp fields)]) [field-list (map extract-exp fields)])
(objT (make-hash field-list)))] (objT (make-hash field-list)))]
[(msgE obj selector) (type-case Exp obj [(msgE obj selector)
[(objE fields) (type-case (Optionof Exp) (hash-ref (make-hash fields) selector) (type-case Exp obj
[(objE fields)
(type-case (Optionof Exp) (hash-ref (make-hash fields) selector)
[(none) (error 'typecheck "unknown field")] [(none) (error 'typecheck "unknown field")]
[(some v) (typecheck v env)])] [(some v) (typecheck v env)])]
[(varE name) (type-case Type (type-lookup name env) [(varE name)
[(objT fields) (type-case (Optionof Type) (hash-ref fields selector) (type-case Type (type-lookup name env)
[(none) (error 'typecheck "dasdas")] [(objT fields)
[(some v) (type-case Type v (type-case (Optionof Type) (hash-ref fields selector)
[(arrowT a b) b] [(none) (error 'typecheck "unknown field")]
[else (error 'dasdas "dasdas")])])] [(some v) v])]
[else (error 'typecheck "bound variable is not an object")])] [else (error 'typecheck "bound variable is not an object")])]
[else (error 'typecheck "passing message to non-object")])])))
[else (error 'typecheck "passing message to non-object")])]
)))
(define (parse-error sx) (define (parse-error sx)
(error 'parse (string-append "parse error: " (to-string sx)))) (error 'parse (string-append "parse error: " (to-string sx))))