Fix bug in field mutation on contracted objects.
svn: r18390
This commit is contained in:
parent
cd076ae512
commit
16dbb0edc1
|
@ -4378,9 +4378,9 @@
|
||||||
[ext-field-ref (vector-ref old-ext-refs n)]
|
[ext-field-ref (vector-ref old-ext-refs n)]
|
||||||
[ext-field-set (vector-ref old-ext-sets n)])
|
[ext-field-set (vector-ref old-ext-sets n)])
|
||||||
(vector-set! int-field-refs n (λ (o) (int-field-ref obj)))
|
(vector-set! int-field-refs n (λ (o) (int-field-ref obj)))
|
||||||
(vector-set! int-field-sets n (λ (o) (int-field-set obj)))
|
(vector-set! int-field-sets n (λ (o v) (int-field-set obj v)))
|
||||||
(vector-set! ext-field-refs n (λ (o) (ext-field-ref obj)))
|
(vector-set! ext-field-refs n (λ (o) (ext-field-ref obj)))
|
||||||
(vector-set! ext-field-sets n (λ (o) (ext-field-set obj))))))
|
(vector-set! ext-field-sets n (λ (o v) (ext-field-set obj v))))))
|
||||||
|
|
||||||
;; Handle external field contracts
|
;; Handle external field contracts
|
||||||
(unless (null? fields)
|
(unless (null? fields)
|
||||||
|
|
|
@ -5142,7 +5142,6 @@
|
||||||
; ;;;;
|
; ;;;;
|
||||||
; ;;;
|
; ;;;
|
||||||
|
|
||||||
#|
|
|
||||||
(test/pos-blame
|
(test/pos-blame
|
||||||
'object/c-first-order-object-1
|
'object/c-first-order-object-1
|
||||||
'(contract (object/c)
|
'(contract (object/c)
|
||||||
|
@ -5184,7 +5183,85 @@
|
||||||
(new (class object% (super-new) (field [n 3])))
|
(new (class object% (super-new) (field [n 3])))
|
||||||
'pos
|
'pos
|
||||||
'neg))
|
'neg))
|
||||||
|#
|
|
||||||
|
(test/spec-passed/result
|
||||||
|
'object/c-higher-order-field-1
|
||||||
|
'(get-field
|
||||||
|
n
|
||||||
|
(contract (object/c (field [n number?]))
|
||||||
|
(new (class object% (super-new) (field [n 3])))
|
||||||
|
'pos
|
||||||
|
'neg))
|
||||||
|
3)
|
||||||
|
|
||||||
|
(test/pos-blame
|
||||||
|
'object/c-higher-order-field-2
|
||||||
|
'(get-field
|
||||||
|
n
|
||||||
|
(contract (object/c (field [n number?]))
|
||||||
|
(new (class object% (super-new) (field [n #t])))
|
||||||
|
'pos
|
||||||
|
'neg)))
|
||||||
|
|
||||||
|
(test/spec-passed/result
|
||||||
|
'object/c-higher-order-field-3
|
||||||
|
'(let ([o (contract (object/c (field [n number?]))
|
||||||
|
(new (class object% (super-new) (field [n 3])))
|
||||||
|
'pos
|
||||||
|
'neg)])
|
||||||
|
(set-field! n o 5)
|
||||||
|
(get-field n o))
|
||||||
|
5)
|
||||||
|
|
||||||
|
(test/neg-blame
|
||||||
|
'object/c-higher-order-field-4
|
||||||
|
'(let ([o (contract (object/c (field [n number?]))
|
||||||
|
(new (class object% (super-new) (field [n 3])))
|
||||||
|
'pos
|
||||||
|
'neg)])
|
||||||
|
(set-field! n o #t)))
|
||||||
|
|
||||||
|
(test/spec-passed/result
|
||||||
|
'object/c-higher-order-field-5
|
||||||
|
'(let* ([pre-o (new (class object% (super-new) (field [n 3])))]
|
||||||
|
[o (contract (object/c (field [n number?]))
|
||||||
|
pre-o
|
||||||
|
'pos
|
||||||
|
'neg)])
|
||||||
|
(set-field! n pre-o 5)
|
||||||
|
(get-field n o))
|
||||||
|
5)
|
||||||
|
|
||||||
|
(test/spec-passed/result
|
||||||
|
'object/c-higher-order-field-6
|
||||||
|
'(let* ([pre-o (new (class object% (super-new) (field [n 3])))]
|
||||||
|
[o (contract (object/c (field [n number?]))
|
||||||
|
pre-o
|
||||||
|
'pos
|
||||||
|
'neg)])
|
||||||
|
(set-field! n o 5)
|
||||||
|
(get-field n pre-o))
|
||||||
|
5)
|
||||||
|
|
||||||
|
(test/neg-blame
|
||||||
|
'object/c-higher-order-field-7
|
||||||
|
'(let* ([pre-o (new (class object% (super-new) (field [n 3])))]
|
||||||
|
[o (contract (object/c (field [n number?]))
|
||||||
|
pre-o
|
||||||
|
'pos
|
||||||
|
'neg)])
|
||||||
|
(set-field! n o #t)
|
||||||
|
(get-field n pre-o)))
|
||||||
|
|
||||||
|
(test/pos-blame
|
||||||
|
'object/c-higher-order-field-8
|
||||||
|
'(let* ([pre-o (new (class object% (super-new) (field [n 3])))]
|
||||||
|
[o (contract (object/c (field [n number?]))
|
||||||
|
pre-o
|
||||||
|
'pos
|
||||||
|
'neg)])
|
||||||
|
(set-field! n pre-o #t)
|
||||||
|
(get-field n o)))
|
||||||
|
|
||||||
;
|
;
|
||||||
;
|
;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user