@@ -85,8 +85,9 @@ function get(d::IdDict{K,V}, @nospecialize(key), @nospecialize(default)) where {
85
85
val = ccall (:jl_eqtable_get , Any, (Any, Any, Any), d. ht, key, default)
86
86
val === default ? default : val:: V
87
87
end
88
+
88
89
function getindex (d:: IdDict{K,V} , @nospecialize (key)) where {K, V}
89
- val = get (d , key, secret_table_token)
90
+ val = ccall ( :jl_eqtable_get , Any, (Any, Any, Any), d . ht , key, secret_table_token)
90
91
val === secret_table_token && throw (KeyError (key))
91
92
return val:: V
92
93
end
@@ -134,23 +135,38 @@ length(d::IdDict) = d.count
134
135
135
136
copy (d:: IdDict ) = typeof (d)(d)
136
137
137
- get! (d:: IdDict{K,V} , @nospecialize (key), @nospecialize (default)) where {K, V} = (d[key] = get (d, key, default)):: V
138
+ function get! (d:: IdDict{K,V} , @nospecialize (key), @nospecialize (default)) where {K, V}
139
+ val = ccall (:jl_eqtable_get , Any, (Any, Any, Any), d. ht, key, secret_table_token)
140
+ if val === secret_table_token
141
+ val = isa (default, V) ? default : convert (V, default)
142
+ setindex! (d, val, key)
143
+ return val
144
+ else
145
+ return val:: V
146
+ end
147
+ end
138
148
139
149
function get (default:: Callable , d:: IdDict{K,V} , @nospecialize (key)) where {K, V}
140
- val = get (d , key, secret_table_token)
150
+ val = ccall ( :jl_eqtable_get , Any, (Any, Any, Any), d . ht , key, secret_table_token)
141
151
if val === secret_table_token
142
- val = default ()
152
+ return default ()
153
+ else
154
+ return val:: V
143
155
end
144
- return val
145
156
end
146
157
147
158
function get! (default:: Callable , d:: IdDict{K,V} , @nospecialize (key)) where {K, V}
148
- val = get (d , key, secret_table_token)
159
+ val = ccall ( :jl_eqtable_get , Any, (Any, Any, Any), d . ht , key, secret_table_token)
149
160
if val === secret_table_token
150
161
val = default ()
162
+ if ! isa (val, V)
163
+ val = convert (V, val)
164
+ end
151
165
setindex! (d, val, key)
166
+ return val
167
+ else
168
+ return val:: V
152
169
end
153
- return val
154
170
end
155
171
156
172
in (@nospecialize (k), v:: KeySet{<:Any,<:IdDict} ) = get (v. dict, k, secret_table_token) != = secret_table_token
0 commit comments