11
11
12
12
function lookup_expr (frame, e:: Expr )
13
13
head = e. head
14
- head == :the_exception && return frame. framedata. last_exception[]
15
- if head == :static_parameter
14
+ head === :the_exception && return frame. framedata. last_exception[]
15
+ if head === :static_parameter
16
16
arg = e. args[1 ]:: Int
17
17
if isassigned (frame. framedata. sparams, arg)
18
18
return frame. framedata. sparams[arg]
@@ -21,7 +21,7 @@ function lookup_expr(frame, e::Expr)
21
21
throw (UndefVarError (syms[arg]))
22
22
end
23
23
end
24
- head == :boundscheck && length (e. args) == 0 && return true
24
+ head === :boundscheck && length (e. args) == 0 && return true
25
25
error (" invalid lookup expr " , e)
26
26
end
27
27
@@ -86,7 +86,7 @@ function lookup_or_eval(@nospecialize(recurse), frame, @nospecialize(node))
86
86
for arg in node. args
87
87
push! (ex. args, lookup_or_eval (recurse, frame, arg))
88
88
end
89
- if ex. head == :call
89
+ if ex. head === :call
90
90
f = ex. args[1 ]
91
91
if f === Core. svec
92
92
return Core. svec (ex. args[2 : end ]. .. )
@@ -124,9 +124,9 @@ function resolvefc(frame, @nospecialize(expr))
124
124
isa (expr, Tuple{Symbol,String}) && return expr
125
125
isa (expr, Tuple{String,Symbol}) && return expr
126
126
if isexpr (expr, :call )
127
- a = expr. args[1 ]
128
- (isa (a, QuoteNode) && a. value == Core. tuple) || error (" unexpected ccall to " , expr)
129
- return Expr (:call , GlobalRef (Core, :tuple ), expr. args[2 : end ]. .. )
127
+ a = ( expr:: Expr ) . args[1 ]
128
+ (isa (a, QuoteNode) && a. value === Core. tuple) || error (" unexpected ccall to " , expr)
129
+ return Expr (:call , GlobalRef (Core, :tuple ), ( expr:: Expr ) . args[2 : end ]. .. )
130
130
end
131
131
error (" unexpected ccall to " , expr)
132
132
end
@@ -154,7 +154,7 @@ function evaluate_foreigncall(frame::Frame, call_expr::Expr)
154
154
arg = args[i]
155
155
args[i] = isa (arg, Symbol) ? QuoteNode (arg) : arg
156
156
end
157
- head == :cfunction && (args[2 ] = QuoteNode (args[2 ]))
157
+ head === :cfunction && (args[2 ] = QuoteNode (args[2 ]))
158
158
scope = frame. framecode. scope
159
159
data = frame. framedata
160
160
if ! isempty (data. sparams) && scope isa Method
@@ -369,35 +369,35 @@ maybe_assign!(frame, @nospecialize(val)) = maybe_assign!(frame, pc_expr(frame),
369
369
370
370
function eval_rhs (@nospecialize (recurse), frame, node:: Expr )
371
371
head = node. head
372
- if head == :new
372
+ if head === :new
373
373
mod = moduleof (frame)
374
374
args = [@lookup (mod, frame, arg) for arg in node. args]
375
375
T = popfirst! (args)
376
376
rhs = ccall (:jl_new_structv , Any, (Any, Ptr{Any}, UInt32), T, args, length (args))
377
377
return rhs
378
- elseif head == :splatnew # Julia 1.2+
378
+ elseif head === :splatnew # Julia 1.2+
379
379
mod = moduleof (frame)
380
380
rhs = ccall (:jl_new_structt , Any, (Any, Any), @lookup (mod, frame, node. args[1 ]), @lookup (mod, frame, node. args[2 ]))
381
381
return rhs
382
- elseif head == :isdefined
382
+ elseif head === :isdefined
383
383
return check_isdefined (frame, node. args[1 ])
384
- elseif head == :call
384
+ elseif head === :call
385
385
# here it's crucial to avoid dynamic dispatch
386
386
isa (recurse, Compiled) && return evaluate_call_compiled! (recurse, frame, node)
387
387
return evaluate_call_recurse! (recurse, frame, node)
388
- elseif head == :foreigncall || head == :cfunction
388
+ elseif head === :foreigncall || head = == :cfunction
389
389
return evaluate_foreigncall (frame, node)
390
- elseif head == :copyast
390
+ elseif head === :copyast
391
391
val = (node. args[1 ]:: QuoteNode ). value
392
392
return isa (val, Expr) ? copy (val) : val
393
- elseif head == :enter
393
+ elseif head === :enter
394
394
return length (frame. framedata. exception_frames)
395
- elseif head == :boundscheck
395
+ elseif head === :boundscheck
396
396
return true
397
- elseif head == :meta || head == :inbounds || head == (@static VERSION >= v " 1.2.0-DEV.462" ? :loopinfo : :simdloop ) ||
398
- head == :gc_preserve_begin || head == :gc_preserve_end
397
+ elseif head === :meta || head = == :inbounds || head == (@static VERSION >= v " 1.2.0-DEV.462" ? :loopinfo : :simdloop ) ||
398
+ head === :gc_preserve_begin || head = == :gc_preserve_end
399
399
return nothing
400
- elseif head == :method && length (node. args) == 1
400
+ elseif head === :method && length (node. args) == 1
401
401
return evaluate_methoddef (frame, node)
402
402
end
403
403
return lookup_expr (frame, node)
@@ -437,7 +437,7 @@ function step_expr!(@nospecialize(recurse), frame, @nospecialize(node), istoplev
437
437
# _location[location_key] = get(_location, location_key, 0) + 1
438
438
try
439
439
if isa (node, Expr)
440
- if node. head == :(= )
440
+ if node. head === :(= )
441
441
lhs, rhs = node. args
442
442
if isa (rhs, Expr)
443
443
rhs = eval_rhs (recurse, frame, rhs)
@@ -446,40 +446,40 @@ function step_expr!(@nospecialize(recurse), frame, @nospecialize(node), istoplev
446
446
end
447
447
isa (rhs, BreakpointRef) && return rhs
448
448
do_assignment! (frame, lhs, rhs)
449
- elseif node. head == :gotoifnot
449
+ elseif node. head === :gotoifnot
450
450
arg = @lookup (frame, node. args[1 ])
451
451
if ! isa (arg, Bool)
452
452
throw (TypeError (nameof (frame), " if" , Bool, node. args[1 ]))
453
453
end
454
454
if ! arg
455
455
return (frame. pc = node. args[2 ]:: Int )
456
456
end
457
- elseif node. head == :enter
457
+ elseif node. head === :enter
458
458
rhs = node. args[1 ]
459
459
push! (data. exception_frames, rhs)
460
- elseif node. head == :leave
460
+ elseif node. head === :leave
461
461
for _ = 1 : node. args[1 ]
462
462
pop! (data. exception_frames)
463
463
end
464
- elseif node. head == :pop_exception
464
+ elseif node. head === :pop_exception
465
465
n = lookup_var (frame, node. args[1 ])
466
466
deleteat! (data. exception_frames, n+ 1 : length (data. exception_frames))
467
- elseif node. head == :return
467
+ elseif node. head === :return
468
468
return nothing
469
469
elseif istoplevel
470
- if node. head == :method && length (node. args) > 1
470
+ if node. head === :method && length (node. args) > 1
471
471
evaluate_methoddef (frame, node)
472
- elseif node. head == :struct_type
472
+ elseif node. head === :struct_type
473
473
evaluate_structtype (recurse, frame, node)
474
- elseif node. head == :abstract_type
474
+ elseif node. head === :abstract_type
475
475
evaluate_abstracttype (recurse, frame, node)
476
- elseif node. head == :primitive_type
476
+ elseif node. head === :primitive_type
477
477
evaluate_primitivetype (recurse, frame, node)
478
- elseif node. head == :module
478
+ elseif node. head === :module
479
479
error (" this should have been handled by split_expressions" )
480
- elseif node. head == :using || node. head == :import || node. head == :export
480
+ elseif node. head === :using || node. head === :import || node. head = == :export
481
481
Core. eval (moduleof (frame), node)
482
- elseif node. head == :const
482
+ elseif node. head === :const
483
483
g = node. args[1 ]
484
484
if isa (g, GlobalRef)
485
485
mod, name = g. module, g. name
@@ -489,7 +489,7 @@ function step_expr!(@nospecialize(recurse), frame, @nospecialize(node), istoplev
489
489
if VERSION >= v " 1.2.0-DEV.239" # depends on https://github.com/JuliaLang/julia/pull/30893
490
490
Core. eval (mod, Expr (:const , name))
491
491
end
492
- elseif node. head == :thunk
492
+ elseif node. head === :thunk
493
493
newframe = prepare_thunk (moduleof (frame), node)
494
494
if isa (recurse, Compiled)
495
495
finish! (recurse, newframe, true )
@@ -500,9 +500,9 @@ function step_expr!(@nospecialize(recurse), frame, @nospecialize(node), istoplev
500
500
frame. callee = nothing
501
501
end
502
502
return_from (newframe)
503
- elseif node. head == :global
503
+ elseif node. head === :global
504
504
Core. eval (moduleof (frame), node)
505
- elseif node. head == :toplevel
505
+ elseif node. head === :toplevel
506
506
mod = moduleof (frame)
507
507
modexs, _ = split_expressions (mod, node)
508
508
rhs = Core. eval (mod, Expr (:toplevel ,
@@ -514,14 +514,14 @@ function step_expr!(@nospecialize(recurse), frame, @nospecialize(node), istoplev
514
514
end
515
515
$ return_from (newframe)
516
516
end )))
517
- elseif node. head == :error
517
+ elseif node. head === :error
518
518
error (" unexpected error statement " , node)
519
- elseif node. head == :incomplete
519
+ elseif node. head === :incomplete
520
520
error (" incomplete statement " , node)
521
521
else
522
522
rhs = eval_rhs (recurse, frame, node)
523
523
end
524
- elseif node. head == :thunk || node. head == :toplevel
524
+ elseif node. head === :thunk || node. head = == :toplevel
525
525
error (" this frame needs to be run at top level" )
526
526
else
527
527
rhs = eval_rhs (recurse, frame, node)
0 commit comments