Skip to content

Commit 2f0b04a

Browse files
committed
.
1 parent adfbaba commit 2f0b04a

1 file changed

Lines changed: 77 additions & 0 deletions

File tree

zjit/src/hir/opt_tests.rs

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22285,4 +22285,81 @@ mod hir_opt_tests {
2228522285
Return v46
2228622286
");
2228722287
}
22288+
22289+
#[test]
22290+
fn test_opt_case_dispatch_integer_eqq_redefined_not_specialized() {
22291+
eval(r#"
22292+
class Integer
22293+
def ===(other) = other.to_s == "1"
22294+
end
22295+
22296+
def test(x)
22297+
case x
22298+
when 1 then :a
22299+
when 2 then :b
22300+
else :c
22301+
end
22302+
end
22303+
22304+
test(1)
22305+
test(1)
22306+
"#);
22307+
assert_snapshot!(hir_string("test"), @"
22308+
fn test@<compiled>:7:
22309+
bb1():
22310+
EntryPoint interpreter
22311+
v1:BasicObject = LoadSelf
22312+
v2:CPtr = LoadSP
22313+
v3:BasicObject = LoadField v2, :x@0x1000
22314+
Jump bb3(v1, v3)
22315+
bb2():
22316+
EntryPoint JIT(0)
22317+
v6:BasicObject = LoadArg :self@0
22318+
v7:BasicObject = LoadArg :x@1
22319+
Jump bb3(v6, v7)
22320+
bb3(v9:BasicObject, v10:BasicObject):
22321+
v17:Fixnum[1] = Const Value(1)
22322+
PatchPoint MethodRedefined(Integer@0x1008, ===@0x1010, cme:0x1018)
22323+
PushInlineFrame :===, v17 (0x1040), num_args=1
22324+
PatchPoint MethodRedefined(Integer@0x1008, to_s@0x1068, cme:0x1070)
22325+
v125:Fixnum = GuardType v10, Fixnum recompile
22326+
v126:StringExact = CCallVariadic v125, :Integer#to_s@0x1098
22327+
v88:StringExact[VALUE(0x10a0)] = Const Value(VALUE(0x10a0))
22328+
v89:StringExact = StringCopy v88
22329+
PatchPoint NoSingletonClass(String@0x10a8)
22330+
PatchPoint MethodRedefined(String@0x10a8, ==@0x10b0, cme:0x10b8)
22331+
v131:BoolExact = StringEqual v126, v89
22332+
CheckInterrupts
22333+
PopInlineFrame
22334+
v22:CBool = Test v131
22335+
CondBranch v22, bb5(), bb7()
22336+
bb5():
22337+
v44:StaticSymbol[:a] = Const Value(VALUE(0x10e0))
22338+
CheckInterrupts
22339+
Return v44
22340+
bb7():
22341+
v27:Fixnum[2] = Const Value(2)
22342+
PatchPoint MethodRedefined(Integer@0x1008, ===@0x1010, cme:0x1018)
22343+
PushInlineFrame :===, v27 (0x1040), num_args=1
22344+
PatchPoint MethodRedefined(Integer@0x1008, to_s@0x1068, cme:0x1070)
22345+
v135:StringExact = CCallVariadic v125, :Integer#to_s@0x1098
22346+
v110:StringExact[VALUE(0x10a0)] = Const Value(VALUE(0x10a0))
22347+
v111:StringExact = StringCopy v110
22348+
PatchPoint NoSingletonClass(String@0x10a8)
22349+
PatchPoint MethodRedefined(String@0x10a8, ==@0x10b0, cme:0x10b8)
22350+
v140:BoolExact = StringEqual v135, v111
22351+
CheckInterrupts
22352+
PopInlineFrame
22353+
v32:CBool = Test v140
22354+
CondBranch v32, bb6(), bb8()
22355+
bb6():
22356+
v56:StaticSymbol[:b] = Const Value(VALUE(0x10e8))
22357+
CheckInterrupts
22358+
Return v56
22359+
bb8():
22360+
v68:StaticSymbol[:c] = Const Value(VALUE(0x10f0))
22361+
CheckInterrupts
22362+
Return v68
22363+
");
22364+
}
2228822365
}

0 commit comments

Comments
 (0)