Opened 3 years ago

Last modified 15 months ago

#1286 new enhancement

define-constant and define-inline should shadow imported identifiers

Reported by: evhan Owned by:
Priority: minor Milestone: 5.1
Component: compiler Version: 4.10.x
Keywords: modules, inlining, define-inline, define-constant Cc:
Estimated difficulty: hard


The following should print yes rather than the procedure exact:

(use (only data-structures exact))
(define-constant exact 'yes)
(print exact) ; => #<procedure (numbers#inexact->exact x1007)> instead of 'yes

The same applies for define-inline:

(use (only numbers exact))
(define-inline (exact n) 'yes)
(print (exact 1.0)) ; => 1 instead of 'yes

This happens because variables are module-resolved (via lookup against the current environment) in resolve-variable before they're keyed into the constant and inline tables. I think the raw identifier should be used when looking up inlined and constant idenfifiers instead (x0 rather than x), but haven't looked too deeply at this issue yet.

Change History (2)

comment:1 Changed 2 years ago by sjamaan

  • Estimated difficulty set to hard

comment:2 Changed 15 months ago by felix

  • Milestone changed from 5.0 to 5.1
Note: See TracTickets for help on using tickets.