From 58c919c04e3e49e6347f49f0807db78796debb12 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Thu, 5 Nov 2015 06:40:05 -0700 Subject: [PATCH] fix getting port name for reader errors Closes #1121 --- pkgs/racket-test-core/tests/racket/port.rktl | 18 ++++++++++++++++++ racket/src/racket/include/scheme.h | 4 ---- racket/src/racket/src/error.c | 2 +- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/pkgs/racket-test-core/tests/racket/port.rktl b/pkgs/racket-test-core/tests/racket/port.rktl index 77a06e6091..d53324ace8 100644 --- a/pkgs/racket-test-core/tests/racket/port.rktl +++ b/pkgs/racket-test-core/tests/racket/port.rktl @@ -888,6 +888,24 @@ (delete-file path)) +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Check reader error-message formatting for a struct port + +(let () + (define-struct wrapper (other port) + #:property prop:input-port 1) + (err/rt-test + (read (wrapper #f + (make-input-port "wrapped" + (lambda (bstr) + (bytes-set! bstr 0 (char->integer #\))) + 1) + (lambda (bstr d evt) + (bytes-set! bstr 0 (char->integer #\))) + 1) + void))) + exn:fail:read?)) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (report-errs) diff --git a/racket/src/racket/include/scheme.h b/racket/src/racket/include/scheme.h index 4381de52e2..eda74a245d 100644 --- a/racket/src/racket/include/scheme.h +++ b/racket/src/racket/include/scheme.h @@ -1545,10 +1545,6 @@ struct Scheme_Output_Port struct Scheme_Input_Port *input_half; }; -#define SCHEME_INPORT_VAL(obj) (((Scheme_Input_Port *)(obj))->port_data) -#define SCHEME_OUTPORT_VAL(obj) (((Scheme_Output_Port *)(obj))->port_data) -#define SCHEME_IPORT_NAME(obj) (((Scheme_Input_Port *)obj)->name) - #define SCHEME_SPECIAL (-2) #define SCHEME_UNLESS_READY (-3) diff --git a/racket/src/racket/src/error.c b/racket/src/racket/src/error.c index fd768f074f..ec7db16c28 100644 --- a/racket/src/racket/src/error.c +++ b/racket/src/racket/src/error.c @@ -2175,7 +2175,7 @@ void scheme_read_err(Scheme_Object *port, if (port) { Scheme_Object *pn; - pn = SCHEME_IPORT_NAME(port); + pn = scheme_input_port_record(port)->name; if (SCHEME_PATHP(pn)) { pn = scheme_remove_current_directory_prefix(pn); fn = SCHEME_PATH_VAL(pn);