wip 2
This commit is contained in:
parent
647ea45733
commit
b13264feed
@ -130,20 +130,20 @@
|
||||
[(objE fields) (let* ([extract-exp (lambda (obj) (pair (fst obj) (typecheck (snd obj) env)))]
|
||||
[field-list (map extract-exp fields)])
|
||||
(objT (make-hash field-list)))]
|
||||
[(msgE obj selector) (type-case Exp obj
|
||||
[(objE fields) (type-case (Optionof Exp) (hash-ref (make-hash fields) selector)
|
||||
[(none) (error 'typecheck "unknown field")]
|
||||
[(some v) (typecheck v env)])]
|
||||
[(varE name) (type-case Type (type-lookup name env)
|
||||
[(objT fields) (type-case (Optionof Type) (hash-ref fields selector)
|
||||
[(none) (error 'typecheck "dasdas")]
|
||||
[(some v) (type-case Type v
|
||||
[(arrowT a b) b]
|
||||
[else (error 'dasdas "dasdas")])])]
|
||||
[else (error 'typecheck "bound variable is not an object")])]
|
||||
|
||||
[else (error 'typecheck "passing message to non-object")])]
|
||||
)))
|
||||
[(msgE obj selector)
|
||||
(type-case Exp obj
|
||||
[(objE fields)
|
||||
(type-case (Optionof Exp) (hash-ref (make-hash fields) selector)
|
||||
[(none) (error 'typecheck "unknown field")]
|
||||
[(some v) (typecheck v env)])]
|
||||
[(varE name)
|
||||
(type-case Type (type-lookup name env)
|
||||
[(objT fields)
|
||||
(type-case (Optionof Type) (hash-ref fields selector)
|
||||
[(none) (error 'typecheck "unknown field")]
|
||||
[(some v) v])]
|
||||
[else (error 'typecheck "bound variable is not an object")])]
|
||||
[else (error 'typecheck "passing message to non-object")])])))
|
||||
|
||||
(define (parse-error sx)
|
||||
(error 'parse (string-append "parse error: " (to-string sx))))
|
||||
|
Loading…
x
Reference in New Issue
Block a user