Skip to content

Commit

Permalink
fix #18129, optimize some more cases of captured variables
Browse files Browse the repository at this point in the history
(cherry picked from commit 0137899)
ref #18130
  • Loading branch information
JeffBezanson authored and tkelman committed Aug 20, 2016
1 parent 782cf36 commit 09f7005
Showing 1 changed file with 8 additions and 6 deletions.
14 changes: 8 additions & 6 deletions src/julia-syntax.scm
Original file line number Diff line number Diff line change
Expand Up @@ -2721,25 +2721,27 @@ f(x) = yt(x)
(any vinfo:sa vi))
(let* ((leading
(filter (lambda (x) (and (pair? x)
(or (and (eq? (car x) 'method)
(length> x 2))
(eq? (car x) '=))))
(let ((cx (car x)))
(or (and (eq? cx 'method) (length> x 2))
(eq? cx '=)
(eq? cx 'call)))))
(take-statements-while
(lambda (e)
(or (atom? e)
(memq (car e) '(quote top core line inert local unnecessary
meta inbounds boundscheck simdloop
implicit-global global globalref
const newvar = null method))))
const newvar = null method call))))
(lam:body lam))))
(unused (map cadr leading))
(unused (map cadr (filter (lambda (x) (memq (car x) '(method =)))
leading)))
(def (table)))
;; TODO: reorder leading statements to put assignments where the RHS is
;; `simple-atom?` at the top.
(for-each (lambda (e)
(set! unused (filter (lambda (v) (not (expr-uses-var e v)))
unused))
(if (memq (cadr e) unused)
(if (and (memq (car e) '(method =)) (memq (cadr e) unused))
(put! def (cadr e) #t)))
leading)
(for-each (lambda (v)
Expand Down

0 comments on commit 09f7005

Please sign in to comment.