diff --git a/src/reader.rls b/src/reader.rls index 0ff8269..c605879 100644 --- a/src/reader.rls +++ b/src/reader.rls @@ -2,7 +2,7 @@ (load "hash-table.rls") (define s:symbol (struct-type 'a)) -(define *symbols* '()) +(define *symbols* (make-hash-table)) (define (make-symbol name) (let ([sym (make-struct s:symbol)]) @@ -30,15 +30,11 @@ (define (memq? val lst) (and (memq val lst) #t)) -(define (find-symbol name) - (findf (lambda (x) (byte-string= (symbol-name x) name)) *symbols*)) - (define (intern name) - (let ([sym (find-symbol name)]) - (or sym - (let ([sym (make-symbol name)]) - (set! *symbols* (cons sym *symbols*)) - sym)))) + (or (hash-table-lookup *symbols* name) + (let ([sym (make-symbol name)]) + (hash-table-insert *symbols* name sym) + sym))) (define (read-from-fd fd) (let/cc toplevel-return