26 lines
979 B
Racket
26 lines
979 B
Racket
#lang racket/base
|
|
|
|
(require tests/eli-tester (for-syntax racket/base))
|
|
|
|
;; All current uses of the errortrace collection (there are currently 4:
|
|
;; in the sandbox, drracket, and in htdp and deinprogramm) rely on
|
|
;; making "self-modifying" code by using a single mpair in source code.
|
|
;; This is a fragile hole, and it might be plugged at some point in the
|
|
;; future. (Another alternative is to inject a closure as a value into
|
|
;; the syntax, which is similarly hackish.) The purpose of this test is
|
|
;; to fail when that happens, so we remember to deal with it in these
|
|
;; uses. A convenient commit to refer to is 2189957 -- it touches all
|
|
;; four places. (BTW, note that this file cannot be compiled because of
|
|
;; this.)
|
|
|
|
(define-syntax m
|
|
(let ([b (mcons 0 0)])
|
|
(lambda (stx)
|
|
(with-syntax ([b b])
|
|
#'(lambda () (set-mcar! b (add1 (mcar b))) (mcar b))))))
|
|
|
|
(provide alert-tests)
|
|
(define (alert-tests)
|
|
(define f m)
|
|
(test (list (f) (f) (f)) => '(1 2 3)))
|