Skip to content

Julia: functions with a where clause are dropped entirely #4126

Description

@rajatnagda45

Version / commit

v0.9.77 (v8 @ 5c7b847)

Environment

macOS, Python 3.13, clean checkout of v8.

What happens

Any Julia method written with a where clause is silently dropped from the graph — no node, no defines edge, and none of the calls made from its body are recorded.

where constraints are everywhere in idiomatic generic Julia, so this erases a large fraction of a real codebase's functions.

Minimal reproduction

# where.jl
function combine(a::Vector{T}, b::Vector{T}) where {T<:Number}
    merge_all(a, b)
end
function merge_all(a, b)
    return a
end
from graphify.extract import extract_julia
r = extract_julia("where.jl")
print([n["label"] for n in r["nodes"]])
# -> ['where.jl', 'merge_all()']   # 'combine()' is missing
print([(e["source"], e["target"]) for e in r["edges"] if e["relation"] == "calls"])
# -> []                            # combine -> merge_all lost

Expected vs actual

  • Expected: a combine() node with a calls edge to merge_all.
  • Actual: combine is absent and its body call vanishes.

Root cause

The signature reader only looks for a direct call_expression child of the signature node, but a where method wraps the call head in a where_expression, so the name is never found and the definition falls through.

A clean checkout of v8 reproduces it. Fix PR to follow.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions