From eca6d16fde3b88a33392ac0e772bb2db723fd4de Mon Sep 17 00:00:00 2001 From: Jeff Bezanson Date: Fri, 10 Jul 2015 12:38:46 -0400 Subject: [PATCH] disallow module expressions in contexts where we can't handle them fixes #12075 --- src/jlfrontend.scm | 1 + src/julia-syntax.scm | 20 ++++++++------------ 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/jlfrontend.scm b/src/jlfrontend.scm index 5e86643683c04..678c580f46dc7 100644 --- a/src/jlfrontend.scm +++ b/src/jlfrontend.scm @@ -38,6 +38,7 @@ ((lambda) tab) ((local local!) tab) ((break-block) (find-possible-globals- (caddr e) tab)) + ((module) '()) (else (for-each (lambda (x) (find-possible-globals- x tab)) (cdr e)) diff --git a/src/julia-syntax.scm b/src/julia-syntax.scm index 6cfa41ae9b447..0953bc2f436de 100644 --- a/src/julia-syntax.scm +++ b/src/julia-syntax.scm @@ -1299,6 +1299,8 @@ (expand-binding-forms `(const (= ,(cadr e) ,(caddr e)))))) + ((module) e) + (else (map expand-binding-forms e)))))) @@ -1631,6 +1633,7 @@ 'inert identity 'top identity 'line identity + 'module identity 'lambda (lambda (e) (list* 'lambda (map expand-forms (cadr e)) (map expand-forms (cddr e)))) @@ -2566,14 +2569,7 @@ (map-to-lff e dest tail))) ((module) - (if (and dest (not tail)) - (let ((ex (to-lff (caddr e) dest tail)) - (fu (to-lff e #f #f))) - (cons (car ex) - (append fu (cdr ex)))) - (if tail - (cons `(return ,e) '()) - (cons e '())))) + (cons e '())) ((symbolicgoto symboliclabel) (cons (if tail '(return (null)) '(null)) @@ -2611,7 +2607,7 @@ So far only the second case can actually occur. (if (or (not (pair? e)) (quoted? e)) '() (case (car e) - ((lambda scope-block) '()) + ((lambda scope-block module) '()) ((method) (let ((v (decl-var (method-expr-name e)))) (if (or (not (symbol? v)) (memq v env)) @@ -2629,7 +2625,7 @@ So far only the second case can actually occur. (define (find-decls kind e) (if (or (not (pair? e)) (quoted? e)) '() - (cond ((or (eq? (car e) 'lambda) (eq? (car e) 'scope-block)) + (cond ((memq (car e) '(lambda scope-block module)) '()) ((eq? (car e) kind) (list (decl-var (cadr e)))) @@ -2706,8 +2702,7 @@ So far only the second case can actually occur. vars) ,(remove-local-decls body)))) - ((and (eq? (car e) 'module) - (not (null? env))) + ((eq? (car e) 'module) (error "module expression not at top level")) (else @@ -3055,6 +3050,7 @@ So far only the second case can actually occur. (delete-duplicates (append sp (method-expr-static-parameters e)))) ,(caddddr e)))) + ((module) e) (else (cons (car e) (map (lambda (x) (analyze-vars x env captvars sp)) (cdr e)))))))