Changeset 11702 in project for chicken/trunk/eval.scm


Ignore:
Timestamp:
08/22/08 09:07:50 (12 years ago)
Author:
felix winkelmann
Message:

keywords are now implicitly quoted (during canonicalization in compiler and closure-compilation in eval)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • chicken/trunk/eval.scm

    r10992 r11702  
    602602        [cadadr cadadr]
    603603        [reverse reverse]
     604        (keyword? keyword?)
    604605        [open-output-string open-output-string]
    605606        [get-output-string get-output-string]
     
    665666      (define (compile x e h tf cntr)
    666667        (cond [(symbol? x)
    667                (receive (i j) (lookup x e)
    668                  (cond [(not i)
    669                         (let ((x (##sys#alias-global-hook x)))
    670                           (if ##sys#eval-environment
    671                               (let ([loc (##sys#hash-table-location ##sys#eval-environment x #t)])
    672                                 (unless loc (##sys#syntax-error-hook "reference to undefined identifier" x))
    673                                 (cond-expand
    674                                  [unsafe (lambda v (##sys#slot loc 1))]
    675                                  [else
    676                                   (lambda v
    677                                     (let ([val (##sys#slot loc 1)])
    678                                       (if (eq? unbound val)
    679                                           (##sys#error "unbound variable" x)
    680                                           val) ) ) ] ) )
    681                               (cond-expand
    682                                [unsafe (lambda v (##core#inline "C_slot" x 0))]
    683                                [else
    684                                 (when (and ##sys#unbound-in-eval (not (##sys#symbol-has-toplevel-binding? x)))
    685                                   (set! ##sys#unbound-in-eval (cons (cons x cntr) ##sys#unbound-in-eval)) )
    686                                 (lambda v (##core#inline "C_retrieve" x))] ) ) ) ]
    687                        [(zero? i) (lambda (v) (##sys#slot (##sys#slot v 0) j))]
    688                        [else (lambda (v) (##sys#slot (##core#inline "C_u_i_list_ref" v i) j))] ) ) ]
     668               (if (keyword? x)
     669                   (lambda v x)
     670                   (receive (i j) (lookup x e)
     671                     (cond [(not i)
     672                            (let ((x (##sys#alias-global-hook x)))
     673                              (if ##sys#eval-environment
     674                                  (let ([loc (##sys#hash-table-location ##sys#eval-environment x #t)])
     675                                    (unless loc (##sys#syntax-error-hook "reference to undefined identifier" x))
     676                                    (cond-expand
     677                                     [unsafe (lambda v (##sys#slot loc 1))]
     678                                     [else
     679                                      (lambda v
     680                                        (let ([val (##sys#slot loc 1)])
     681                                          (if (eq? unbound val)
     682                                              (##sys#error "unbound variable" x)
     683                                              val) ) ) ] ) )
     684                                  (cond-expand
     685                                   [unsafe (lambda v (##core#inline "C_slot" x 0))]
     686                                   [else
     687                                    (when (and ##sys#unbound-in-eval (not (##sys#symbol-has-toplevel-binding? x)))
     688                                      (set! ##sys#unbound-in-eval (cons (cons x cntr) ##sys#unbound-in-eval)) )
     689                                    (lambda v (##core#inline "C_retrieve" x))] ) ) ) ]
     690                           [(zero? i) (lambda (v) (##sys#slot (##sys#slot v 0) j))]
     691                           [else (lambda (v) (##sys#slot (##core#inline "C_u_i_list_ref" v i) j))] ) ) ) ]
    689692              [(##sys#number? x)
    690693               (case x
Note: See TracChangeset for help on using the changeset viewer.