diff --git a/collects/scheme/promise.ss b/collects/scheme/promise.ss index 085e7f5e0a..4e437130f8 100644 --- a/collects/scheme/promise.ss +++ b/collects/scheme/promise.ss @@ -3,7 +3,7 @@ "private/more-scheme.ss" "private/define.ss" (rename "private/define-struct.ss" define-struct define-struct*) - (for-syntax '#%kernel "private/stxcase-scheme.ss") + (for-syntax '#%kernel "private/stxcase-scheme.ss" "private/name.ss") '#%unsafe) (#%provide force promise? promise-forced? promise-running?) @@ -189,14 +189,19 @@ (let-values ([(x) (assq (car k) kwds)]) (if x (cdr x) (cdr k)))) keywords) - #f)]) + #f)] + ;; some strange bug with `syntax-local-expand-expression' makes this not + ;; work well with identifiers, so turn the name into a symbol to work + ;; around this for now + [(name0) (syntax-local-infer-name stx)] + [(name) (if (syntax? name0) (syntax-e name0) name0)]) (syntax-case stx () [_ (pair? exprs) ; throw a syntax error if anything is wrong (with-syntax ([(expr ...) exprs] [(kwd-arg ...) kwd-args]) (with-syntax ([proc (syntax-property (syntax/loc stx (lambda () expr ...)) - 'inferred-name (syntax-local-name))] + 'inferred-name name)] [make maker]) (syntax/loc stx (make proc kwd-arg ...))))]))) diff --git a/collects/tests/eli-tester.ss b/collects/tests/eli-tester.ss index cdcc309336..dbe674f929 100644 --- a/collects/tests/eli-tester.ss +++ b/collects/tests/eli-tester.ss @@ -7,7 +7,7 @@ (syntax-case stx () [(_ expr) ;; catch syntax errors while expanding, turn them into runtime errors - (with-handlers ([exn? (lambda (e) #`(list 'error #,(exn-message e) #,e))]) + (with-handlers ([exn? (lambda (e) #`(list 'error #,(exn-message e) #f))]) (define-values (_ opaque) (syntax-local-expand-expression #'(with-handlers