Skip to content

Commit

Permalink
speed up part of resolve-scopes lowering pass
Browse files Browse the repository at this point in the history
  • Loading branch information
JeffBezanson committed Jul 10, 2020
1 parent 901f1e2 commit 5c70ee6
Showing 1 changed file with 36 additions and 30 deletions.
66 changes: 36 additions & 30 deletions src/julia-syntax.scm
Original file line number Diff line number Diff line change
Expand Up @@ -2499,38 +2499,44 @@
;; pass 2: identify and rename local vars

(define (find-assigned-vars e)
(if (or (not (pair? e)) (quoted? e))
'()
(case (car e)
((lambda scope-block module toplevel) '())
((method)
(let ((v (decl-var (method-expr-name e))))
(append!
(if (length= e 2) '() (find-assigned-vars (caddr e)))
(if (not (symbol? v))
'()
(list v)))))
((=)
(let ((v (decl-var (cadr e)))
(rest (find-assigned-vars (caddr e))))
(if (or (ssavalue? v) (globalref? v) (outerref? v) (underscore-symbol? v))
rest
(cons v rest))))
(else
(apply append! (map find-assigned-vars e))))))
(define vars '())
(define (find-assigned-vars- e)
(if (or (not (pair? e)) (quoted? e))
'()
(case (car e)
((lambda scope-block module toplevel) '())
((method)
(let ((v (decl-var (method-expr-name e))))
(if (symbol? v)
(set! vars (cons v vars)))
(if (not (length= e 2))
(find-assigned-vars- (caddr e)))))
((=)
(let ((v (decl-var (cadr e))))
(find-assigned-vars- (caddr e))
(if (or (ssavalue? v) (globalref? v) (outerref? v) (underscore-symbol? v))
'()
(set! vars (cons v vars)))))
(else
(for-each find-assigned-vars- (cdr e))))))
(find-assigned-vars- e)
(delete-duplicates vars))

(define (find-decls kind e)
(if (or (not (pair? e)) (quoted? e))
'()
(cond ((memq (car e) '(lambda scope-block module toplevel))
'())
((eq? (car e) kind)
(if (underscore-symbol? (cadr e))
'()
(list (decl-var (cadr e)))))
(else
(apply append! (map (lambda (x) (find-decls kind x))
e))))))
(define vars '())
(define (find-decls- e)
(cond ((or (not (pair? e)) (quoted? e))
'())
((memq (car e) '(lambda scope-block module toplevel))
'())
((eq? (car e) kind)
(if (underscore-symbol? (cadr e))
'()
(set! vars (cons (decl-var (cadr e)) vars))))
(else
(for-each find-decls- (cdr e)))))
(find-decls- e)
vars)

(define (find-local-decls e) (find-decls 'local e))
(define (find-local-def-decls e) (find-decls 'local-def e))
Expand Down

0 comments on commit 5c70ee6

Please sign in to comment.