Skip to content

Commit a060e87

Browse files
Merge pull request #137 from KristofferC/kc/kw
fix kw handling and filter out a new internal symbol from arguments
2 parents 5da177a + bdad6cb commit a060e87

File tree

2 files changed

+5
-3
lines changed

2 files changed

+5
-3
lines changed

src/utilities.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,7 @@ function keywords(func, m::Method)
419419
# table is a MethodTable object. For some reason, the :kwsorter field is not always
420420
# defined. An undefined kwsorter seems to imply that there are no methods in the
421421
# MethodTable with keyword arguments.
422-
if isdefined(table, :kwsorter)
422+
if !(Base.fieldindex(Core.MethodTable, :kwsorter, false) > 0) || isdefined(table, :kwsorter)
423423
# Fetching method keywords stolen from base/replutil.jl:572-576 (commit 3b45cdc9aab0):
424424
kwargs = VERSION < v"1.4.0-DEV.215" ? Base.kwarg_decl(m, typeof(table.kwsorter)) : Base.kwarg_decl(m)
425425
if isa(kwargs, Vector) && length(kwargs) > 0
@@ -463,7 +463,7 @@ function arguments(m::Method)
463463
local args = map(argnames[1:nargs(m)]) do arg
464464
arg === Symbol("#unused#") ? "_" : arg
465465
end
466-
return filter(arg -> arg !== Symbol("#self#"), args)
466+
return filter(arg -> arg !== Symbol("#self#") && arg !== Symbol("#ctor-self#"), args)
467467
end
468468
return Symbol[]
469469
end

test/tests.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@ end
4242
@test isdefined(methods(M.j_1), :mt)
4343
local mt = methods(M.j_1).mt
4444
@test isa(mt, Core.MethodTable)
45-
@test isdefined(mt, :kwsorter)
45+
if Base.fieldindex(Core.MethodTable, :kwsorter, false) > 0
46+
@test isdefined(mt, :kwsorter)
47+
end
4648
# .kwsorter is not always defined -- namely, it seems when none of the methods
4749
# have keyword arguments:
4850
@test isdefined(methods(M.f).mt, :kwsorter) === false

0 commit comments

Comments
 (0)