Skip to content

Commit 9afdf71

Browse files
authored
follow up #596 (#600)
1 parent 9d50726 commit 9afdf71

File tree

3 files changed

+37
-32
lines changed

3 files changed

+37
-32
lines changed

bin/generate_builtins.jl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -260,11 +260,12 @@ function maybe_evaluate_builtin(frame, call_expr, expand::Bool)
260260
elseif name === :arraysize
261261
maxarg = 2
262262
end
263-
fcall = generate_fcall_nargs(name, minarg, maxarg)
263+
_scopedname = "$mod.$name"
264+
fcall = generate_fcall_nargs(_scopedname, minarg, maxarg)
264265
rname = repr(name)
265266
print(io,
266267
"""
267-
elseif @static isdefined($mod, $rname) && f === $name
268+
elseif @static (isdefined($mod, $rname) && $_scopedname isa Core.Builtin) && f === $_scopedname
268269
$fcall
269270
""")
270271
end

src/builtins.jl

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -330,65 +330,65 @@ function maybe_evaluate_builtin(frame, call_expr, expand::Bool)
330330
call_expr.args[3] = @lookup(frame, args[3])
331331
return Some{Any}(Core.eval(moduleof(frame), call_expr))
332332
end
333-
elseif @static isdefined(Core, :arrayref) && f === :arrayref
333+
elseif @static (isdefined(Core, :arrayref) && Core.arrayref isa Core.Builtin) && f === Core.arrayref
334334
if nargs == 1
335-
return Some{Any}(arrayref(@lookup(frame, args[2])))
335+
return Some{Any}(Core.arrayref(@lookup(frame, args[2])))
336336
elseif nargs == 2
337-
return Some{Any}(arrayref(@lookup(frame, args[2]), @lookup(frame, args[3])))
337+
return Some{Any}(Core.arrayref(@lookup(frame, args[2]), @lookup(frame, args[3])))
338338
elseif nargs == 3
339-
return Some{Any}(arrayref(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4])))
339+
return Some{Any}(Core.arrayref(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4])))
340340
elseif nargs == 4
341-
return Some{Any}(arrayref(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5])))
341+
return Some{Any}(Core.arrayref(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5])))
342342
elseif nargs == 5
343-
return Some{Any}(arrayref(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5]), @lookup(frame, args[6])))
343+
return Some{Any}(Core.arrayref(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5]), @lookup(frame, args[6])))
344344
else
345-
return Some{Any}(arrayref(getargs(args, frame)...))
345+
return Some{Any}(Core.arrayref(getargs(args, frame)...))
346346
end
347-
elseif @static isdefined(Core, :arrayset) && f === :arrayset
347+
elseif @static (isdefined(Core, :arrayset) && Core.arrayset isa Core.Builtin) && f === Core.arrayset
348348
if nargs == 1
349-
return Some{Any}(arrayset(@lookup(frame, args[2])))
349+
return Some{Any}(Core.arrayset(@lookup(frame, args[2])))
350350
elseif nargs == 2
351-
return Some{Any}(arrayset(@lookup(frame, args[2]), @lookup(frame, args[3])))
351+
return Some{Any}(Core.arrayset(@lookup(frame, args[2]), @lookup(frame, args[3])))
352352
elseif nargs == 3
353-
return Some{Any}(arrayset(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4])))
353+
return Some{Any}(Core.arrayset(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4])))
354354
elseif nargs == 4
355-
return Some{Any}(arrayset(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5])))
355+
return Some{Any}(Core.arrayset(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5])))
356356
elseif nargs == 5
357-
return Some{Any}(arrayset(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5]), @lookup(frame, args[6])))
357+
return Some{Any}(Core.arrayset(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5]), @lookup(frame, args[6])))
358358
elseif nargs == 6
359-
return Some{Any}(arrayset(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5]), @lookup(frame, args[6]), @lookup(frame, args[7])))
359+
return Some{Any}(Core.arrayset(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5]), @lookup(frame, args[6]), @lookup(frame, args[7])))
360360
else
361-
return Some{Any}(arrayset(getargs(args, frame)...))
361+
return Some{Any}(Core.arrayset(getargs(args, frame)...))
362362
end
363-
elseif @static isdefined(Core, :arrayset) && f === :arrayset
363+
elseif @static (isdefined(Core, :arrayset) && Core.arrayset isa Core.Builtin) && f === Core.arrayset
364364
if nargs == 1
365-
return Some{Any}(arrayset(@lookup(frame, args[2])))
365+
return Some{Any}(Core.arrayset(@lookup(frame, args[2])))
366366
elseif nargs == 2
367-
return Some{Any}(arrayset(@lookup(frame, args[2]), @lookup(frame, args[3])))
367+
return Some{Any}(Core.arrayset(@lookup(frame, args[2]), @lookup(frame, args[3])))
368368
elseif nargs == 3
369-
return Some{Any}(arrayset(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4])))
369+
return Some{Any}(Core.arrayset(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4])))
370370
elseif nargs == 4
371-
return Some{Any}(arrayset(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5])))
371+
return Some{Any}(Core.arrayset(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5])))
372372
elseif nargs == 5
373-
return Some{Any}(arrayset(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5]), @lookup(frame, args[6])))
373+
return Some{Any}(Core.arrayset(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5]), @lookup(frame, args[6])))
374374
elseif nargs == 6
375-
return Some{Any}(arrayset(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5]), @lookup(frame, args[6]), @lookup(frame, args[7])))
375+
return Some{Any}(Core.arrayset(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5]), @lookup(frame, args[6]), @lookup(frame, args[7])))
376376
else
377-
return Some{Any}(arrayset(getargs(args, frame)...))
377+
return Some{Any}(Core.arrayset(getargs(args, frame)...))
378378
end
379-
elseif @static isdefined(Core, :const_arrayref) && f === :const_arrayref
379+
elseif @static (isdefined(Core, :const_arrayref) && Core.const_arrayref isa Core.Builtin) && f === Core.const_arrayref
380380
if nargs == 1
381-
return Some{Any}(const_arrayref(@lookup(frame, args[2])))
381+
return Some{Any}(Core.const_arrayref(@lookup(frame, args[2])))
382382
elseif nargs == 2
383-
return Some{Any}(const_arrayref(@lookup(frame, args[2]), @lookup(frame, args[3])))
383+
return Some{Any}(Core.const_arrayref(@lookup(frame, args[2]), @lookup(frame, args[3])))
384384
elseif nargs == 3
385-
return Some{Any}(const_arrayref(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4])))
385+
return Some{Any}(Core.const_arrayref(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4])))
386386
elseif nargs == 4
387-
return Some{Any}(const_arrayref(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5])))
387+
return Some{Any}(Core.const_arrayref(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5])))
388388
elseif nargs == 5
389-
return Some{Any}(const_arrayref(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5]), @lookup(frame, args[6])))
389+
return Some{Any}(Core.const_arrayref(@lookup(frame, args[2]), @lookup(frame, args[3]), @lookup(frame, args[4]), @lookup(frame, args[5]), @lookup(frame, args[6])))
390390
else
391-
return Some{Any}(const_arrayref(getargs(args, frame)...))
391+
return Some{Any}(Core.const_arrayref(getargs(args, frame)...))
392392
end
393393
elseif f === Core.Intrinsics.llvmcall
394394
return Some{Any}(Core.Intrinsics.llvmcall(getargs(args, frame)...))

test/interpret.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -993,3 +993,7 @@ end
993993
@test (@interpret string("", "pcre_h.jl")) == string("", "pcre_h.jl")
994994
@test (@interpret Base.strcat("", "build_h.jl")) == Base.strcat("", "build_h.jl")
995995
end
996+
997+
# test for using generic functions that were previously builtin
998+
func_arrayref(a, i) = Core.arrayref(true, a, i)
999+
@test 2 == @interpret func_arrayref([1,2,3], 2)

0 commit comments

Comments
 (0)