Skip to content

Commit eb1c523

Browse files
committed
Support renaming of old types
1 parent e1def10 commit eb1c523

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

base/reflection.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,13 @@ function resolve(g::GlobalRef; force::Bool=false)
108108
return g
109109
end
110110

111+
function rename_binding(mod::Module, oldname::Symbol, newname::Symbol)
112+
T = getfield(mod, oldname)
113+
ccall(:jl_rename_binding, Void, (Any, Any, Any), mod, oldname, newname)
114+
T.name.name = newname
115+
T
116+
end
117+
111118
"""
112119
fieldname(x::DataType, i::Integer)
113120

src/module.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -519,6 +519,16 @@ void jl_binding_deprecation_warning(jl_binding_t *b)
519519
}
520520
}
521521

522+
JL_DLLEXPORT void jl_rename_binding(jl_module_t *m, jl_sym_t *oldvar, jl_sym_t *newvar)
523+
{
524+
jl_binding_t *b = jl_get_binding(m, oldvar);
525+
if (b) {
526+
b->name = newvar;
527+
ptrhash_remove(&m->bindings, oldvar);
528+
ptrhash_put(&m->bindings, newvar, b);
529+
}
530+
}
531+
522532
JL_DLLEXPORT void jl_checked_assignment(jl_binding_t *b, jl_value_t *rhs)
523533
{
524534
if (b->constp && b->value != NULL) {

0 commit comments

Comments
 (0)