No. 021 (2025.08.21)
前回
No. 020 (2025.08.07)
参加者
yuchi yamaguchi.icon abap34
antimon2
https://github.com/c42f/JuliaLowering.jl
読み進めていく
resolve_scopes の analyze_scope の終盤あたりから
selfarg = first(lambda_args)
#self# みたいなのを追加している。
https://github.com/c42f/JuliaLowering.jl/blob/90a6868c3abf6716a3cb48919cd630ff525f5f8f/src/desugaring.jl#L2956-L2969
そのあと var_ids (そのスコープで導入された変数たち) を入れていく (これはいい)
そのあと **使われているやつ** を追加していく
code:plaintext
# FIXME: This assumes used bindings are internal to the lambda and cannot
# be from the environment, and also assumes they are assigned. That's
# correct for now but in general we should go by the same code path that
# identifiers do.
eval(Main, Meta.parse("x = 1")) みたいなこと...?
**どういうときに BindingsId が ex に入った状態で analyze_scope に入ってくる??**
code:julia
function f(x, y::T) where T
z = x + 1
function g(inner_x)
z = 10
return inner_x + z
end
end
→
code:julia
[ Info: Dict{JuliaLowering.NameKey, Int64}()
[ Info: Int64[]
[ Info: JuliaLowering.NameKey("f", 1) => f
========================================
[ Info: Dict{JuliaLowering.NameKey, Int64}(JuliaLowering.NameKey("T", 1) => 6)
[ Info: 2
[ Info: JuliaLowering.NameKey("T", 1) => T, JuliaLowering.NameKey("f", 1) => f
========================================
[ Info: Dict{JuliaLowering.NameKey, Int64}(JuliaLowering.NameKey("g", 1) => 10, JuliaLowering.NameKey("y", 1) => 8, JuliaLowering.NameKey("T", 1) => 9, JuliaLowering.NameKey("z", 1) => 11, JuliaLowering.NameKey("x", 1) => 7)
[ Info: 1
[ Info: JuliaLowering.NameKey("+", 1) => +, JuliaLowering.NameKey("T", 1) => T, JuliaLowering.NameKey("g", 1) => g, JuliaLowering.NameKey("x", 1) => x, JuliaLowering.NameKey("y", 1) => y
========================================
[ Info: Dict{JuliaLowering.NameKey, Int64}()
[ Info: 4
[ Info: JuliaLowering.NameKey("g", 1) => g
========================================
[ Info: Dict{JuliaLowering.NameKey, Int64}(JuliaLowering.NameKey("inner_x", 1) => 13)
[ Info: 3
[ Info: JuliaLowering.NameKey("+", 1) => +, JuliaLowering.NameKey("inner_x", 1) => inner_x, JuliaLowering.NameKey("z", 1) => z
↑ これを読みとくところから?