Changeset 14656 in project for chicken/trunk/compiler.scm


Ignore:
Timestamp:
05/15/09 23:02:26 (11 years ago)
Author:
felix winkelmann
Message:

bumped version to 4.0.4; fixed various bugs in chicken-install; fixed name-resolution bug in compiler handling of assignment

File:
1 edited

Legend:

Unmodified
Added
Removed
  • chicken/trunk/compiler.scm

    r14590 r14656  
    510510                      t)
    511511                     e se dest))) ]
     512            ((##sys#get x '##core#primitive))
    512513            ((not (memq x e)) (##sys#alias-global-hook x #f)) ; only if global
    513             ((##sys#get x '##core#primitive))
    514514            (else x))))
    515515 
     
    639639                                    se2 dest) ) ) )
    640640
    641                          ((letrec ##core#letrec)
    642                           (##sys#check-syntax 'letrec x '(_ #((symbol _) 0) . #(_ 1)))
    643                           (let ((bindings (cadr x))
    644                                 (body (cddr x)) )
    645                             (walk
    646                              `(##core#let
    647                                ,(map (lambda (b)
    648                                        (list (car b) '(##core#undefined)))
     641                        ((letrec ##core#letrec)
     642                         (##sys#check-syntax 'letrec x '(_ #((symbol _) 0) . #(_ 1)))
     643                         (let ((bindings (cadr x))
     644                               (body (cddr x)) )
     645                           (walk
     646                            `(##core#let
     647                              ,(map (lambda (b)
     648                                      (list (car b) '(##core#undefined)))
     649                                    bindings)
     650                              ,@(map (lambda (b)
     651                                       `(##core#set! ,(car b) ,(cadr b)))
    649652                                     bindings)
    650                                ,@(map (lambda (b)
    651                                         `(##core#set! ,(car b) ,(cadr b)))
    652                                       bindings)
    653                                (##core#let () ,@body) )
    654                              e se dest)))
     653                              (##core#let () ,@body) )
     654                            e se dest)))
    655655
    656656                        ((lambda ##core#lambda)
     
    926926                                              ,(foreign-type-check tmp type) ) )
    927927                                          e se #f))))
    928                                  (else
    929                                   (when (eq? var var0) ; global?
    930                                     (set! var (##sys#alias-global-hook var #t))
     928                                 (else
     929                                  (unless (memq var e) ; global?
     930                                    (set! var (or (##sys#get var '##core#primitive)
     931                                                  (##sys#alias-global-hook var #t)))
    931932                                    (when safe-globals-flag
    932933                                      (mark-variable var '##compiler#always-bound-to-procedure)
    933                                       (mark-variable var '##compiler#always-bound))
    934                                     (when (##sys#macro? var)
    935                                       (compiler-warning
    936                                        'var "assigned global variable `~S' is a macro ~A"
    937                                        var
    938                                        (if ln (sprintf "in line ~S" ln) "") )
    939                                       (when undefine-shadowed-macros (##sys#undefine-macro! var) ) ) )
     934                                      (mark-variable var '##compiler#always-bound)))
     935                                  (when (##sys#macro? var)
     936                                    (compiler-warning
     937                                     'var "assigned global variable `~S' is a macro ~A"
     938                                     var
     939                                     (if ln (sprintf "in line ~S" ln) "") )
     940                                    (when undefine-shadowed-macros (##sys#undefine-macro! var) ) )
    940941                                  (when (keyword? var)
    941942                                    (compiler-warning 'syntax "assignment to keyword `~S'" var) )
Note: See TracChangeset for help on using the changeset viewer.