|
9008 | 9008 | (new q x)))))))
|
9009 | 9009 | (make-foo 3))))
|
9010 | 9010 | `(let ([ctr 0])
|
9011 |
| - (letrec ([g0 (lambda (new) (lambda (q) (set! ctr (#2%+ 1 xtr)) (new q ctr)))]) |
| 9011 | + (letrec ([g0 (lambda (new) (lambda (q) (new q (begin (set! ctr (#2%+ 1 xtr)) ctr))))]) |
9012 | 9012 | (#3%$value (#3%$make-record-constructor-descriptor ',record-type-descriptor? #f g0 'define-record-type))
|
9013 |
| - (set! ctr (#2%+ 1 xtr)) |
9014 |
| - (#3%$record ',record-type-descriptor? 3 ctr)))) |
| 9013 | + (#3%$record ',record-type-descriptor? 3 (begin (set! ctr (#2%+ 1 xtr)) ctr))))) |
9015 | 9014 | (equivalent-expansion?
|
9016 | 9015 | (parameterize ([optimize-level 3] [enable-cp0 #t] [#%$suppress-primitive-inlining #f])
|
9017 | 9016 | (expand/optimize
|
|
9028 | 9027 | (new q x)))))))
|
9029 | 9028 | (make-foo 3))))
|
9030 | 9029 | `(let ([ctr 0])
|
9031 |
| - (letrec ([g0 (lambda (new) (lambda (q) (set! ctr (#3%+ 1 xtr)) (new q ctr)))]) |
| 9030 | + (letrec ([g0 (lambda (new) (lambda (q) (new q (begin (set! ctr (#3%+ 1 xtr)) ctr))))]) |
9032 | 9031 | (#3%$value (#3%$make-record-constructor-descriptor ',record-type-descriptor? #f g0 'define-record-type))
|
9033 |
| - (set! ctr (#3%+ 1 xtr)) |
9034 |
| - (#3%$record ',record-type-descriptor? 3 ctr)))) |
| 9032 | + (#3%$record ',record-type-descriptor? 3 (begin (set! ctr (#3%+ 1 xtr)) ctr))))) |
9035 | 9033 | (error? ; invalid uid
|
9036 | 9034 | (let ()
|
9037 | 9035 | (define useless
|
|
9051 | 9049 | (foo-x (make-foo 3.0 y))))
|
9052 | 9050 | #t)
|
9053 | 9051 | (equal? ($foo 17) 3.0)
|
| 9052 | + ;; two regression tests as extra confirmation that `begin` rotation and let-binding |
| 9053 | + ;; dropping work together ok |
| 9054 | + (equivalent-expansion? |
| 9055 | + (parameterize ([optimize-level 2] [enable-cp0 #t] [#%$suppress-primitive-inlining #f]) |
| 9056 | + (expand/optimize |
| 9057 | + '(lambda (instance) |
| 9058 | + (define-record-type instance-variable-reference |
| 9059 | + (fields inst kind)) |
| 9060 | + (define (variable-reference-constant? v) |
| 9061 | + (eq? (instance-variable-reference-kind v) 'constant)) |
| 9062 | + (lambda (x_1 y_2 f_3) |
| 9063 | + (begin |
| 9064 | + (set! x_1 5) |
| 9065 | + (let ([app_6 (variable-reference-constant? |
| 9066 | + (letrec* ([z_4 (let ([z (lambda () z_4)]) z)]) |
| 9067 | + (begin |
| 9068 | + (f_3 z_4) |
| 9069 | + (make-instance-variable-reference |
| 9070 | + instance |
| 9071 | + 'mutable))))]) |
| 9072 | + (list #f #t app_6 |
| 9073 | + (variable-reference-constant? |
| 9074 | + (letrec* ([z_5 (let ([z (lambda () z_5)]) intentionally-free-x)]) |
| 9075 | + (begin |
| 9076 | + (f_3 z_5) |
| 9077 | + (make-instance-variable-reference |
| 9078 | + instance |
| 9079 | + 'constant))))))))))) |
| 9080 | + '(lambda (instance) |
| 9081 | + (let ([rtd (#2%$make-record-type-descriptor #!base-rtd 'instance-variable-reference #f #f #f #f |
| 9082 | + '#((immutable inst) (immutable kind)) 'define-record-type)]) |
| 9083 | + (lambda (x_1 y_2 f_3) |
| 9084 | + (letrec ([z_4 (lambda () z_4)]) |
| 9085 | + (f_3 z_4) |
| 9086 | + (let ([z_5 intentionally-free-x]) |
| 9087 | + (f_3 z_5) |
| 9088 | + (#2%list #f #t #f #t))))))) |
| 9089 | + (equivalent-expansion? |
| 9090 | + (parameterize ([optimize-level 3] [enable-cp0 #t] [#%$suppress-primitive-inlining #f]) |
| 9091 | + (expand/optimize |
| 9092 | + '(let () |
| 9093 | + (define-record variable-reference |
| 9094 | + (inst var-or-info)) |
| 9095 | + (define (variable-reference-constant? v) |
| 9096 | + (eq? (variable-reference-var-or-info v) 'constant)) |
| 9097 | + (lambda (instance-variable-reference) |
| 9098 | + (lambda (x_1 y_2 f_3) |
| 9099 | + (begin |
| 9100 | + (set! x_1 5) |
| 9101 | + (let ([app_6 (variable-reference-constant? |
| 9102 | + (letrec* ([z_4 (lambda () z_4)]) |
| 9103 | + (begin |
| 9104 | + (f_3 z_4) |
| 9105 | + (make-variable-reference |
| 9106 | + instance-variable-reference |
| 9107 | + 'mutable))))]) |
| 9108 | + (list app_4 app_5 #f #t app_6 |
| 9109 | + (variable-reference-constant? |
| 9110 | + (letrec* ([z_5 (lambda () z_5)]) |
| 9111 | + (begin |
| 9112 | + (f_3 z_5) |
| 9113 | + (make-variable-reference |
| 9114 | + instance-variable-reference |
| 9115 | + 'constant)))))))))))) |
| 9116 | + '(lambda (instance-variable-reference) |
| 9117 | + (lambda (x_1 y_2 f_3) |
| 9118 | + (letrec ([z_4 (lambda () z_4)]) |
| 9119 | + (f_3 z_4) |
| 9120 | + (letrec ([z_5 (lambda () z_5)]) |
| 9121 | + (#3%list app_4 app_5 #f #t #f (begin (f_3 z_5) #t))))))) |
9054 | 9122 | )
|
9055 | 9123 |
|
9056 | 9124 | (mat cp0-rtd-inspection-optimizations
|
|
0 commit comments