diff --git a/pkgs/racket-test-core/tests/racket/read.rktl b/pkgs/racket-test-core/tests/racket/read.rktl index 9ccefe5004..c815ecf0c3 100644 --- a/pkgs/racket-test-core/tests/racket/read.rktl +++ b/pkgs/racket-test-core/tests/racket/read.rktl @@ -1472,6 +1472,15 @@ ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; srcloc->string +(test "x.rkt" srcloc->string (make-srcloc "x.rkt" #f #f #f #f)) +(test "x.rkt::90" srcloc->string (make-srcloc "x.rkt" #f #f 90 #f)) +(test "x.rkt" srcloc->string (make-srcloc "x.rkt" #f 80 #f #f)) + +(test "x.rkt::90" srcloc->string (make-srcloc "x.rkt" #f 80 90 #f)) +(test "x.rkt::90" srcloc->string (make-srcloc "x.rkt" 70 #f 90 #f)) +(test "x.rkt:70:80" srcloc->string (make-srcloc "x.rkt" 70 80 #f #f)) +(test "x.rkt:70:80" srcloc->string (make-srcloc "x.rkt" 70 80 90 #f)) + (test "x.rkt:10:11" srcloc->string (make-srcloc "x.rkt" 10 11 100 8)) (test "x.rkt::100" srcloc->string (make-srcloc "x.rkt" #f #f 100 8)) (test "x.rkt::100" srcloc->string (chaperone-struct (make-srcloc "x.rkt" #f #f 100 8) diff --git a/racket/src/bc/src/error.c b/racket/src/bc/src/error.c index cb1147d84f..64e0bcea20 100644 --- a/racket/src/bc/src/error.c +++ b/racket/src/bc/src/error.c @@ -2120,9 +2120,6 @@ static char *make_srcloc_string(Scheme_Object *src, intptr_t line, intptr_t col, return NULL; } - if (col < 0) - col = pos + 1; - if (src && SCHEME_PATHP(src)) { /* Strip off prefix matching the current directory: */ src = scheme_remove_current_directory_prefix(src); @@ -2144,12 +2141,18 @@ static char *make_srcloc_string(Scheme_Object *src, intptr_t line, intptr_t col, result = (char *)scheme_malloc_atomic(srclen + 15); - if (col >= 0) { + if (line >= 0 && col >= 0) { + /* If both line and column are available, use the format `path:line:col` */ rlen = scheme_sprintf(result, srclen + 15, "%t:%L%ld", - srcstr, srclen, line, col-1); + srcstr, srclen, line, col-1); + } else if (pos >= 0) { + /* If pos is available, use the format `path::pos` */ + rlen = scheme_sprintf(result, srclen + 15, "%t::%ld", + srcstr, srclen, pos); } else { - rlen = scheme_sprintf(result, srclen + 15, "%t::", - srcstr, srclen); + /* Otherwise, use the format `path` */ + rlen = scheme_sprintf(result, srclen + 15, "%t", + srcstr, srclen); } if (len) *len = rlen; diff --git a/racket/src/cs/schemified/io.scm b/racket/src/cs/schemified/io.scm index e949b95a2a..b3d7ea7206 100644 --- a/racket/src/cs/schemified/io.scm +++ b/racket/src/cs/schemified/io.scm @@ -31582,8 +31582,10 @@ (let ((app_0 (adjust-path (srcloc-source s_0)))) (let ((app_1 (srcloc-line s_0))) (1/format "~a:~s:~s" app_0 app_1 (srcloc-column s_0)))) - (let ((app_0 (adjust-path (srcloc-source s_0)))) - (1/format "~a::~s" app_0 (srcloc-position s_0)))) + (if (srcloc-position s_0) + (let ((app_0 (adjust-path (srcloc-source s_0)))) + (1/format "~a::~s" app_0 (srcloc-position s_0))) + (1/format "~a" (adjust-path (srcloc-source s_0))))) #f)))))) (define adjust-path (lambda (p_0) (if (is-path? p_0) (relative-to-user-directory p_0) p_0))) diff --git a/racket/src/io/srcloc/main.rkt b/racket/src/io/srcloc/main.rkt index 200a9753f0..536eccec9d 100644 --- a/racket/src/io/srcloc/main.rkt +++ b/racket/src/io/srcloc/main.rkt @@ -16,10 +16,13 @@ (adjust-path (srcloc-source s)) (srcloc-line s) (srcloc-column s))] - [else + [(srcloc-position s) (format "~a::~s" (adjust-path (srcloc-source s)) - (srcloc-position s))]))) + (srcloc-position s))] + [else + (format "~a" + (adjust-path (srcloc-source s)))]))) (define (adjust-path p) (cond