Skip to content

Commit b6cf649

Browse files
authored
update builtins.jl (#655)
1 parent cc89e74 commit b6cf649

File tree

1 file changed

+51
-7
lines changed

1 file changed

+51
-7
lines changed

src/builtins.jl

Lines changed: 51 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,11 @@ function maybe_evaluate_builtin(frame, call_expr, expand::Bool)
152152
return Some{Any}(Core.finalizer(getargs(args, frame)...))
153153
end
154154
elseif f === Core.get_binding_type
155-
return Some{Any}(Core.get_binding_type(getargs(args, frame)...))
155+
if nargs == 2
156+
return Some{Any}(Core.get_binding_type(@lookup(frame, args[2]), @lookup(frame, args[3])))
157+
else
158+
return Some{Any}(Core.get_binding_type(getargs(args, frame)...))
159+
end
156160
elseif f === Core.ifelse
157161
if nargs == 3
158162
return Some{Any}(Core.ifelse(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4])))
@@ -252,7 +256,13 @@ function maybe_evaluate_builtin(frame, call_expr, expand::Bool)
252256
return Some{Any}(getfield(getargs(args, frame)...))
253257
end
254258
elseif f === getglobal
255-
return Some{Any}(getglobal(getargs(args, frame)...))
259+
if nargs == 2
260+
return Some{Any}(getglobal(@lookup(frame, args[2]), @lookup(frame, args[3])))
261+
elseif nargs == 3
262+
return Some{Any}(getglobal(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4])))
263+
else
264+
return Some{Any}(getglobal(getargs(args, frame)...))
265+
end
256266
elseif f === invoke
257267
if !expand
258268
argswrapped = getargs(args, frame)
@@ -284,7 +294,13 @@ function maybe_evaluate_builtin(frame, call_expr, expand::Bool)
284294
return Some{Any}(modifyfield!(getargs(args, frame)...))
285295
end
286296
elseif @static isdefined(Core, :modifyglobal!) && f === modifyglobal!
287-
return Some{Any}(modifyglobal!(getargs(args, frame)...))
297+
if nargs == 4
298+
return Some{Any}(modifyglobal!(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5])))
299+
elseif nargs == 5
300+
return Some{Any}(modifyglobal!(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5]), @lookup(frame, args[6])))
301+
else
302+
return Some{Any}(modifyglobal!(getargs(args, frame)...))
303+
end
288304
elseif f === nfields
289305
if nargs == 1
290306
return Some{Any}(nfields(@lookup(frame, args[2])))
@@ -302,7 +318,15 @@ function maybe_evaluate_builtin(frame, call_expr, expand::Bool)
302318
return Some{Any}(replacefield!(getargs(args, frame)...))
303319
end
304320
elseif @static isdefined(Core, :replaceglobal!) && f === replaceglobal!
305-
return Some{Any}(replaceglobal!(getargs(args, frame)...))
321+
if nargs == 4
322+
return Some{Any}(replaceglobal!(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5])))
323+
elseif nargs == 5
324+
return Some{Any}(replaceglobal!(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5]), @lookup(frame, args[6])))
325+
elseif nargs == 6
326+
return Some{Any}(replaceglobal!(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5]), @lookup(frame, args[6]), @lookup(frame, args[7])))
327+
else
328+
return Some{Any}(replaceglobal!(getargs(args, frame)...))
329+
end
306330
elseif f === setfield!
307331
if nargs == 3
308332
return Some{Any}(setfield!(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4])))
@@ -322,9 +346,23 @@ function maybe_evaluate_builtin(frame, call_expr, expand::Bool)
322346
return Some{Any}(setfieldonce!(getargs(args, frame)...))
323347
end
324348
elseif f === setglobal!
325-
return Some{Any}(setglobal!(getargs(args, frame)...))
349+
if nargs == 3
350+
return Some{Any}(setglobal!(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4])))
351+
elseif nargs == 4
352+
return Some{Any}(setglobal!(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5])))
353+
else
354+
return Some{Any}(setglobal!(getargs(args, frame)...))
355+
end
326356
elseif @static isdefined(Core, :setglobalonce!) && f === setglobalonce!
327-
return Some{Any}(setglobalonce!(getargs(args, frame)...))
357+
if nargs == 3
358+
return Some{Any}(setglobalonce!(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4])))
359+
elseif nargs == 4
360+
return Some{Any}(setglobalonce!(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5])))
361+
elseif nargs == 5
362+
return Some{Any}(setglobalonce!(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5]), @lookup(frame, args[6])))
363+
else
364+
return Some{Any}(setglobalonce!(getargs(args, frame)...))
365+
end
328366
elseif f === swapfield!
329367
if nargs == 3
330368
return Some{Any}(swapfield!(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4])))
@@ -334,7 +372,13 @@ function maybe_evaluate_builtin(frame, call_expr, expand::Bool)
334372
return Some{Any}(swapfield!(getargs(args, frame)...))
335373
end
336374
elseif @static isdefined(Core, :swapglobal!) && f === swapglobal!
337-
return Some{Any}(swapglobal!(getargs(args, frame)...))
375+
if nargs == 3
376+
return Some{Any}(swapglobal!(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4])))
377+
elseif nargs == 4
378+
return Some{Any}(swapglobal!(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5])))
379+
else
380+
return Some{Any}(swapglobal!(getargs(args, frame)...))
381+
end
338382
elseif f === throw
339383
if nargs == 1
340384
return Some{Any}(throw(@lookup(frame, args[2])))

0 commit comments

Comments
 (0)