~ 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