From 9e6511f5ef913acf393535467eeaa16ee72c8da0 Mon Sep 17 00:00:00 2001 From: Chad Scherrer Date: Tue, 1 Mar 2022 08:49:00 -0800 Subject: [PATCH 1/3] Add unique_id field to Var --- src/JuliaVariables.jl | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/JuliaVariables.jl b/src/JuliaVariables.jl index ca586d0..e44926a 100644 --- a/src/JuliaVariables.jl +++ b/src/JuliaVariables.jl @@ -59,6 +59,7 @@ SymRef(sym::Symbol, ana::Union{Nothing, Analyzer}) = SymRef(sym, ana, false) struct Var name::Symbol + unique_id::Symbol is_mutable::Bool is_shared::Bool is_global::Bool @@ -135,6 +136,7 @@ function solve!(ast; toplevel=true) PHYSICAL = true PSEUDO = false IS_BOUND_INIT = Ref(false) + id = Dict{Symbol, Int}() @nospecialize function LHS(ex) @@ -442,7 +444,9 @@ function solve!(ast; toplevel=true) end function local_var_to_var(var::LocalVar)::Var - Var(var.sym, var.is_mutable[], var.is_shared[], false) + unique_id = Symbol(var.sym, "_", id[var.sym]) + @show unique_id # Remove after demo + Var(var.sym, unique_id, var.is_mutable[], var.is_shared[], false) end function to_symref(ex::Expr) @@ -477,6 +481,7 @@ function solve!(ast; toplevel=true) end function from_symref(s::SymRef) + id[s.sym] = get(id, s.sym, 0) + 1 s.as_non_sym && return s.sym s.ana === nothing && return Var(s.sym, true, true, true) var = s.ana.solved[s.sym] From 4d54e3328f7f1a26ce0c652d755de0cdce305725 Mon Sep 17 00:00:00 2001 From: Chad Scherrer Date: Tue, 1 Mar 2022 09:19:52 -0800 Subject: [PATCH 2/3] Missed some cases --- src/JuliaVariables.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/JuliaVariables.jl b/src/JuliaVariables.jl index e44926a..40e46b3 100644 --- a/src/JuliaVariables.jl +++ b/src/JuliaVariables.jl @@ -483,9 +483,9 @@ function solve!(ast; toplevel=true) function from_symref(s::SymRef) id[s.sym] = get(id, s.sym, 0) + 1 s.as_non_sym && return s.sym - s.ana === nothing && return Var(s.sym, true, true, true) + s.ana === nothing && return Var(s.sym, s.sym, true, true, true) var = s.ana.solved[s.sym] - var isa Symbol && return Var(var, true, true, true) + var isa Symbol && return Var(var, var, true, true, true) local_var_to_var(var) end From 78c93d21a60fcef1c493a33f36d74d0fb2b4f20b Mon Sep 17 00:00:00 2001 From: Chad Scherrer Date: Thu, 17 Mar 2022 12:31:34 -0700 Subject: [PATCH 3/3] Apply suggestions from https://github.com/JuliaStaging/JuliaVariables.jl/issues/28#issuecomment-1056035545 --- src/JuliaVariables.jl | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/JuliaVariables.jl b/src/JuliaVariables.jl index 40e46b3..279c202 100644 --- a/src/JuliaVariables.jl +++ b/src/JuliaVariables.jl @@ -59,7 +59,7 @@ SymRef(sym::Symbol, ana::Union{Nothing, Analyzer}) = SymRef(sym, ana, false) struct Var name::Symbol - unique_id::Symbol + unique_id:: Union{Ref{Bool}, Nothing} # nothing when it's a global variable is_mutable::Bool is_shared::Bool is_global::Bool @@ -444,8 +444,7 @@ function solve!(ast; toplevel=true) end function local_var_to_var(var::LocalVar)::Var - unique_id = Symbol(var.sym, "_", id[var.sym]) - @show unique_id # Remove after demo + unique_id = var.is_shared Var(var.sym, unique_id, var.is_mutable[], var.is_shared[], false) end @@ -483,9 +482,9 @@ function solve!(ast; toplevel=true) function from_symref(s::SymRef) id[s.sym] = get(id, s.sym, 0) + 1 s.as_non_sym && return s.sym - s.ana === nothing && return Var(s.sym, s.sym, true, true, true) + s.ana === nothing && return Var(s.sym, nothing, true, true, true) var = s.ana.solved[s.sym] - var isa Symbol && return Var(var, var, true, true, true) + var isa Symbol && return Var(var, nothing, true, true, true) local_var_to_var(var) end