Opened 5 months ago

Closed 5 months ago

Last modified 5 months ago

#1760 closed defect (invalid)

IR-transformer not implicitly renaming?

Reported by: Idiomdrottning Owned by:
Priority: major Milestone: someday
Component: unknown Version: 5.2.0
Keywords: Cc:
Estimated difficulty:

Description

Is this by design or borked?

(define-syntax a-test

(ir-macro-transformer

(lambda (e i c)

'(define hey '(print "I said hey!")))))

(a-test)
hey

Prints "I said hey!"

Change History (7)

comment:1 Changed 5 months ago by Idiomdrottning

I was thinking it was gonna say

Error: unbound variable: hey

comment:2 Changed 5 months ago by Idiomdrottning

Oh, ok, I see. It only renames them inside of the macro.

(define-syntax maif

(ir-macro-transformer

(lambda (e i c)

`(let ((it ,(cadr e)))

(if it ,(caddr e) ,(cadddr e))))))

(maif (zero? 0) it 'no)

comment:3 Changed 5 months ago by Idiomdrottning

Resolution: invalid
Status: newclosed

comment:4 Changed 5 months ago by Idiomdrottning

Resolution: invalid
Status: closedreopened

comment:5 Changed 5 months ago by Idiomdrottning

OK I guess this is just normal.

(define-syntax stest

(syntax-rules ()

((stest)

(define (heyo) (print "Heyo!")))))

(stest)
(heyo)

So weird!
I thought this was "unhygienic"

comment:6 Changed 5 months ago by Idiomdrottning

Resolution: invalid
Status: reopenedclosed

Went back over and removed some unnecessary injects from my code!

comment:7 Changed 5 months ago by sjamaan

This is actually a corner case of ER macros, too. It's unspecified what should happen if you rename an identifier at toplevel. Currently, CHICKEN just strips the renaming, but this may change in the future, so it's better to leave those "unnecessary" injects, IMO.

Note: See TracTickets for help on using tickets.