more fixing redex / undefined interactions

This commit is contained in:
Robby Findler 2014-04-22 22:14:27 -05:00
parent 875fa7bf57
commit 28e9bdcbab
6 changed files with 28 additions and 28 deletions

View File

@ -1,14 +1,7 @@
#lang racket/base #lang racket/base
(require "error.rkt" (require "error.rkt")
racket/undefined) (provide check-defined-module)
(provide check-defined-lexical
check-defined-module)
(define (check-defined-lexical value name desc)
;; Needed?
(when (eq? undefined value)
(report-undefined name desc)))
(define (check-defined-module thunk name desc) (define (check-defined-module thunk name desc)
(with-handlers ([exn:fail:contract:variable? (with-handlers ([exn:fail:contract:variable?

View File

@ -528,6 +528,10 @@
(define-values (judgment-form-name dup-form-names mode position-contracts clauses rule-names) (define-values (judgment-form-name dup-form-names mode position-contracts clauses rule-names)
(parse-judgment-form-body body syn-err-name stx (identifier? orig) is-relation?)) (parse-judgment-form-body body syn-err-name stx (identifier? orig) is-relation?))
(define definitions (define definitions
(with-syntax ([judgment-form-runtime-proc
(syntax-property (syntax/loc judgment-form-name judgment-form-runtime-proc)
'undefined-error-name
(syntax-e judgment-form-name))])
#`(begin #`(begin
(define-syntax #,judgment-form-name (define-syntax #,judgment-form-name
(judgment-form '#,judgment-form-name '#,(cdr (syntax->datum mode)) #'judgment-form-runtime-proc (judgment-form '#,judgment-form-name '#,(cdr (syntax->datum mode)) #'judgment-form-runtime-proc
@ -539,7 +543,7 @@
(define judgment-form-runtime-proc (mk-judgment-form-proc #,lang)) (define judgment-form-runtime-proc (mk-judgment-form-proc #,lang))
(define jf-lws (compiled-judgment-form-lws #,clauses #,judgment-form-name #,stx)) (define jf-lws (compiled-judgment-form-lws #,clauses #,judgment-form-name #,stx))
(define judgment-runtime-gen-clauses (mk-judgment-gen-clauses #,lang (λ () (judgment-runtime-gen-clauses)))) (define judgment-runtime-gen-clauses (mk-judgment-gen-clauses #,lang (λ () (judgment-runtime-gen-clauses))))
(define jf-term-proc (make-jf-term-proc #,judgment-form-name #,syn-err-name #,lang #,nts #,mode)))) (define jf-term-proc (make-jf-term-proc #,judgment-form-name #,syn-err-name #,lang #,nts #,mode)))))
(syntax-property (syntax-property
(values ;prune-syntax (values ;prune-syntax
(if (eq? 'top-level (syntax-local-context)) (if (eq? 'top-level (syntax-local-context))

View File

@ -52,8 +52,8 @@
(transformer-predicate defined-term? stx)) (transformer-predicate defined-term? stx))
(define (defined-check id desc #:external [external id]) (define (defined-check id desc #:external [external id])
(if (eq? (identifier-binding id) 'lexical) (if (equal? (identifier-binding id) 'lexical)
(quasisyntax/loc external (check-defined-lexical #,id '#,external #,desc)) (datum->syntax id (syntax-e id) external id)
(quasisyntax/loc external (check-defined-module (λ () #,id) '#,external #,desc)))) (quasisyntax/loc external (check-defined-module (λ () #,id) '#,external #,desc))))
(define (not-expression-context stx) (define (not-expression-context stx)

View File

@ -467,6 +467,9 @@
(syntax-parse stx (syntax-parse stx
[(_ x:id t:expr) [(_ x:id t:expr)
(not-expression-context stx) (not-expression-context stx)
(with-syntax ([term-val (syntax-property (syntax/loc #'x term-val)
'undefined-error-name
(syntax-e #'x))])
#'(begin #'(begin
(define term-val (term t)) (define term-val (term t))
(define-syntax x (defined-term #'term-val)))])) (define-syntax x (defined-term #'term-val))))]))

View File

@ -1,4 +1,4 @@
("reference to judgment form q before its definition" ("q: undefined;\n cannot use before initialization"
([use q]) ([def q]) ([use q]) ([def q])
(let () (let ()
(judgment-holds (use 1)) (judgment-holds (use 1))

View File

@ -41,7 +41,7 @@
([rhs 'a]) ([ellipsis ...]) ([rhs 'a]) ([ellipsis ...])
(term-let ([(x ellipsis) rhs]) 3)) (term-let ([(x ellipsis) rhs]) 3))
("reference to term x before its definition" ("x: undefined;\n cannot use before initialization"
([use x]) ([def x]) ([use x]) ([def x])
(let () (let ()
(define t (term (use y))) (define t (term (use y)))