id,summary,reporter,owner,description,type,status,priority,milestone,component,version,resolution,keywords,cc,difficulty 1476,(scrutinizer) Should global types be smashed in local contexts?,megane,,"Currently types for globals are not smashed. Should they be smashed in, say functions? Similar to #1475. {{{ (define-type type (vector (or fixnum symbol))) (: g type) (define g (vector (the * 1))) ;; define pure alias, so printing doesn't smash (: p (* --> undefined)) (define p print) (define (foo) (compiler-typecase g (type (p ""global ok""))) (vector-set! g 0 'foo) (compiler-typecase g (type (p ""global not smashed""))) (let ([l g]) (compiler-typecase l (type (p ""alias ok""))) (compiler-typecase l (type (p ""alias ok after printing""))) (vector-set! g 0 'foo) (compiler-typecase g (type (p ""global not smashed""))) (compiler-typecase l (type 'oop) ((vector *) (p ""alias smashed"")))) (compiler-typecase g (type (p ""global not smashed"")) ((vector *) (p ""global smashed"")))) (foo) ;; $ csc -O3 global-smashing.scm && ./global-smashing ;; global ok ;; global not smashed ;; alias ok ;; alias ok after printing ;; global not smashed ;; alias smashed ;; global not smashed }}}",task,new,minor,someday,scrutinizer,5.0.0,,smashing,,