Opened 6 months ago

Last modified 6 months ago

#1765 new defect

enable-warnings time-travelling shenanigans

Reported by: Idiomdrottning Owned by:
Priority: not urgent at all Milestone: someday
Component: unknown Version: 5.2.0
Keywords: REPL Cc:
Estimated difficulty:

Description

(import miscmacros (chicken condition))
(define-syntax-rule

(bound-procedure? name)
(handle-exceptions

ex

#f
(procedure? name)))

(enable-warnings #f)
(define wtf (bound-procedure? if))
(enable-warnings #t)
wtf

;; ↑↑ quietly and politely evals to #f

(begin

(enable-warnings #f)
(define wtf (bound-procedure? if))

(enable-warnings #t)
wtf)

;; ↑↑ expands to a let form (which is fine of course) and complains in
;; the REPL because warnings apply retroactively to the entire form.

I've tried enabling the warnings via (let ((ret ...)) enable ret) dynamic-wind or via force/delay or via just a lambda that gets called, but no matter how I do it, it retroactively wants to print warnings.

I even did

(define (re-enable-warnings val ret)

(enable-warnings val)
ret)

(re-enable-warnings #f (bound-procedure? if))

;;; politely evals to #f

(re-enable-warnings #t (bound-procedure? if))

;;; causes a ruckus

The time travelling super powers of call-with-current-continuation that the REPL uses is haunting me…!

This just can't be right!

Change History (2)

comment:1 Changed 6 months ago by Idiomdrottning

Oh, ignore-errors already exist so forget my custom bound-procedure.

Here is an already miscmacros-established way to get the same weird behavior:

(import miscmacros)

(enable-warnings #f)
(define wtf (ignore-errors (procedure? if)))
(enable-warnings #t)
wtf

;; politely evals #f

(begin

(enable-warnings #f)
(define wtf (ignore-errors (procedure? if)))
(enable-warnings #t)
wtf)

;; notices at the REPL

comment:2 Changed 6 months ago by Idiomdrottning

Priority: majornot urgent at all
Note: See TracTickets for help on using tickets.