Skip to content

Commit a380056

Browse files
JeffBezansonKristofferC
authored andcommitted
syntax: keyword sorter location should just be definition line (#45199)
fix #45171 (cherry picked from commit 5c557b2)
1 parent fb45a1a commit a380056

File tree

3 files changed

+26
-2
lines changed

3 files changed

+26
-2
lines changed

src/julia-syntax.scm

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -529,7 +529,7 @@
529529
,(method-def-expr-
530530
name positional-sparams pargl-all
531531
`(block
532-
,@(without-generated prologue)
532+
,@(keep-first linenum? (without-generated prologue))
533533
,(let (;; call mangled(vals..., [rest_kw,] pargs..., [vararg]...)
534534
(ret `(return (call ,mangled
535535
,@(if ordered-defaults keynames vals)
@@ -548,7 +548,10 @@
548548
,(if (any kwarg? pargl) (gensy) UNUSED)
549549
(call (core kwftype) ,ftype)) ,kw ,@pargl ,@vararg)
550550
`(block
551-
,@(filter linenum? prologue)
551+
,@(let ((lnns (filter linenum? prologue)))
552+
(if (pair? lnns)
553+
(list (car lnns))
554+
'()))
552555
;; nospecialize meta for just positional args
553556
,@(map (lambda (m)
554557
`(meta ,(cadr m) ,@(filter (lambda (v) (not (memq v keynames)))

src/utils.scm

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,3 +104,11 @@
104104
(begin (put! tbl (car xs) i)
105105
(loop (cdr xs) (+ i 1)))))
106106
tbl))
107+
108+
;; keep at most the first element matching a given predicate
109+
(define (keep-first pred lst)
110+
(cond ((null? lst) lst)
111+
((pred (car lst))
112+
(cons (car lst) (filter (lambda (x) (not (pred x))) (cdr lst))))
113+
(else
114+
(cons (car lst) (keep-first pred (cdr lst))))))

test/backtrace.jl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,19 @@ let trace = try
224224
@test trace[1].line == 2
225225
end
226226

227+
# issue #45171
228+
linenum = @__LINE__; function f45171(;kwarg = true)
229+
1
230+
error()
231+
end
232+
let trace = try
233+
f45171()
234+
catch
235+
stacktrace(catch_backtrace())
236+
end
237+
@test trace[3].line == linenum
238+
end
239+
227240
# issue #29695 (see also test for #28442)
228241
let code = """
229242
f29695(c) = g29695(c)

0 commit comments

Comments
 (0)