Skip to content

Commit b1ff106

Browse files
committed
call convert in Base.setfield! (fixes #16195)
1 parent e0e93fc commit b1ff106

File tree

6 files changed

+7
-3
lines changed

6 files changed

+7
-3
lines changed

base/base.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,3 +109,5 @@ immutable Nullable{T}
109109
Nullable() = new(true)
110110
Nullable(value::T, isnull::Bool=false) = new(isnull, value)
111111
end
112+
113+
setfield!{T}(x::T, i, v) = Core.setfield!(x, i, convert(fieldtype(T, i), v))

base/boot.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ export
141141
Expr, GotoNode, LabelNode, LineNumberNode, QuoteNode, TopNode,
142142
GlobalRef, NewvarNode, SSAValue, Slot, SlotNumber, TypedSlot,
143143
# object model functions
144-
fieldtype, getfield, setfield!, nfields, throw, tuple, is, ===, isdefined, eval,
144+
fieldtype, getfield, nfields, throw, tuple, is, ===, isdefined, eval,
145145
# sizeof # not exported, to avoid conflicting with Base.sizeof
146146
# type reflection
147147
issubtype, typeof, isa,

base/coreimg.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
Main.Core.eval(Main.Core, :(baremodule Inference
44
using Core.TopModule, Core.Intrinsics
5+
import Core.setfield!
56
ccall(:jl_set_istopmod, Void, (Bool,), false)
67

78
eval(x) = Core.eval(Inference,x)

base/exports.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1059,6 +1059,7 @@ export
10591059
promote,
10601060
promote_rule,
10611061
promote_type,
1062+
setfield!,
10621063
subtypes,
10631064
instances,
10641065
supertype,

base/serialize.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -745,7 +745,7 @@ function deserialize(s::SerializationState, ::Type{TypeName})
745745
ccall(:jl_set_const, Void, (Any, Any, Any), mod, name, ty)
746746
if !isdefined(ty,:instance)
747747
if isempty(parameters) && !abstr && size == 0 && (!mutable || isempty(names))
748-
setfield!(ty, :instance, ccall(:jl_new_struct, Any, (Any,Any...), ty))
748+
Core.setfield!(ty, :instance, ccall(:jl_new_struct, Any, (Any,Any...), ty))
749749
end
750750
end
751751
end

test/core.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -844,7 +844,7 @@ let
844844
@test_throws BoundsError getfield(z, 3)
845845

846846
strct = LoadError("", 0, "")
847-
setfield!(strct, 2, 8)
847+
setfield!(strct, 2, 8.0)
848848
@test strct.line == 8
849849
setfield!(strct, 3, "hi")
850850
@test strct.error == "hi"

0 commit comments

Comments
 (0)