~ chicken-core (chicken-5) 0788efbe0012e5a96317cfa5963823cca5b21696


commit 0788efbe0012e5a96317cfa5963823cca5b21696
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Sat Jun 12 15:16:40 2010 +0200
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Sat Jun 12 15:16:40 2010 +0200

    use global aliasing in declarations for symbols

diff --git a/compiler.scm b/compiler.scm
index 5cbdc8d9..fd56f241 100644
--- a/compiler.scm
+++ b/compiler.scm
@@ -1244,6 +1244,12 @@
   (define (strip x)			; raw symbol
     (##sys#strip-syntax x se))
   (define stripu ##sys#strip-syntax)
+  (define (globalize sym)
+    (let loop ((se se))			; ignores syntax bindings
+      (cond ((null? se) (##sys#alias-global-hook sym #f))
+	    ((and (eq? sym (caar se)) (symbol? (cdar se))) (cdar se))
+	    (else (loop (cdr se))))))
+  (define (globalize-all syms) (map globalize syms))
   (call-with-current-continuation
    (lambda (return)
      (unless (pair? spec)
@@ -1308,7 +1314,7 @@
        ((no-procedure-checks-for-toplevel-bindings)
 	(set! no-global-procedure-checks #t))
        ((bound-to-procedure)
-	(let ((vars (stripa (cdr spec))))
+	(let ((vars (globalize-all (cdr spec))))
 	  (for-each (cut mark-variable <> '##compiler#always-bound-to-procedure) vars)
 	  (for-each (cut mark-variable <> '##compiler#always-bound) vars)))
        ((foreign-declare)
@@ -1320,7 +1326,7 @@
        ((separate) (set! block-compilation #f))
        ((keep-shadowed-macros) (set! undefine-shadowed-macros #f))
        ((unused)
-	(for-each (cut mark-variable <> '##compiler#unused) (stripa (cdr spec))))
+	(for-each (cut mark-variable <> '##compiler#unused) (globalize-all (cdr spec))))
        ((not)
 	(check-decl spec 1)
 	(case (##sys#strip-syntax (second spec)) ; strip all
@@ -1341,7 +1347,7 @@
 	       (set! inline-locally #f)
 	       (for-each 
 		(cut mark-variable <> '##compiler#inline 'no)
-		(stripa (cddr spec)))) ]
+		(globalize-all (cddr spec)))) ]
 	  [(usual-integrations)      
 	   (cond [(null? (cddr spec))
 		  (set! standard-bindings '())
@@ -1355,7 +1361,7 @@
 	   (when (pair? (cddr spec))
 	     (for-each
 	      (cut mark-variable <> '##compiler#inline-global 'no)
-	      (stripa (cddr spec)))))
+	      (globalize-all (cddr spec)))))
 	  [else
 	   (check-decl spec 1 1)
 	   (let ((id (strip (cadr spec))))
@@ -1366,13 +1372,13 @@
        ((compile-syntax)
 	(set! ##sys#enable-runtime-macros #t))
        ((block-global hide) 
-	(let ([syms (stripa (cdr spec))])
+	(let ([syms (globalize-all (cdr spec))])
 	  (if (null? syms)
 	      (set! block-compilation #t)
 	      (for-each hide-variable syms))))
        ((export)
 	(set! block-compilation #t)
-	(let ((syms (stripa (cdr spec))))
+	(let ((syms (globalize-all (cdr spec))))
 	  (for-each export-variable syms)))
        ((emit-external-prototypes-first)
 	(set! external-protos-first #t) )
@@ -1382,7 +1388,7 @@
 	    (set! inline-locally #t)
 	    (for-each
 	     (cut mark-variable <> '##compiler#inline 'yes)
-	     (stripa (cdr spec)))))
+	     (globalize-all (cdr spec)))))
        ((inline-limit)
 	(check-decl spec 1 1)
 	(let ([n (cadr spec)])
@@ -1394,7 +1400,9 @@
        ((constant)
 	(let ((syms (cdr spec)))
 	  (if (every symbol? syms)
-	      (for-each (cut mark-variable <> '##compiler#pure #t) syms)
+	      (for-each 
+	       (cut mark-variable <> '##compiler#pure #t) 
+	       (globalize-all syms))
 	      (quit "invalid arguments to `constant' declaration: ~S" spec)) ) )
        ((emit-import-library)
 	(set! import-libraries
@@ -1418,7 +1426,7 @@
 	       (set! profiled-procedures 'some)
 	       (for-each 
 		(cut mark-variable <> '##compiler#profile)
-		(stripa (cdr spec))))))
+		(globalize-all (cdr spec))))))
        ((local)
 	(cond ((null? (cdr spec))
 	       (set! local-definitions #t) )
@@ -1432,7 +1440,7 @@
 	(when (pair? (cdr spec))
 	  (for-each
 	   (cut mark-variable <> '##compiler#inline-global 'yes)
-	   (stripa (cdr spec)))))
+	   (globalize-all (cdr spec)))))
        ((type)
 	(for-each
 	 (lambda (spec)
@@ -1441,7 +1449,7 @@
 		  (##sys#put! (car spec) '##core#declared-type #t))
 		 (else
 		  (warning "illegal `type' declaration item" spec))))
-	 (cdr spec)))
+	 (globalize-all (cdr spec))))
        ((scrutinize)
 	(set! do-scrutinize #t))
        (else (warning "illegal declaration specifier" spec)) )
diff --git a/optimizer.scm b/optimizer.scm
index e3233438..98f5b2ad 100644
--- a/optimizer.scm
+++ b/optimizer.scm
@@ -305,11 +305,7 @@
 				   (debugging 
 				    'o
 				    "removed call to pure procedure with unused result"
-				    (or (source-info->string info) var))
-				   (when (and (list? info) (memq pb '(standard extended)))
-				     (##sys#notice
-				      (sprintf "result of call to pure ~a procedure is not used: ~a"
-					pb (source-info->string info)))))
+				    (or (source-info->string info) var)))
 				 (make-node
 				  '##core#call '(#t)
 				  (list k (make-node '##core#undefined '() '())) ) ) 
Trap