@@ -2242,6 +2242,12 @@ impl<'a> std::fmt::Display for FunctionPrinter<'a> {
22422242 fn fmt ( & self , f : & mut std:: fmt:: Formatter ) -> std:: fmt:: Result {
22432243 let fun = & self . fun ;
22442244 let iseq_name = iseq_get_location ( fun. iseq , 0 ) ;
2245+ // In tests, strip the line number for builtin ISEQs to make tests stable across line changes
2246+ let iseq_name = if cfg ! ( test) && iseq_name. contains ( "@<internal:" ) {
2247+ iseq_name[ ..iseq_name. rfind ( ':' ) . unwrap ( ) ] . to_string ( )
2248+ } else {
2249+ iseq_name
2250+ } ;
22452251 writeln ! ( f, "fn {iseq_name}:" ) ?;
22462252 for block_id in fun. rpo ( ) {
22472253 write ! ( f, "{block_id}(" ) ?;
@@ -5003,7 +5009,7 @@ mod tests {
50035009 #[ test]
50045010 fn test_invokebuiltin_delegate_annotated ( ) {
50055011 assert_method_hir_with_opcode ( "Float" , YARVINSN_opt_invokebuiltin_delegate_leave , expect ! [ [ r#"
5006- fn Float@<internal:kernel>:197:
5012+ fn Float@<internal:kernel>:
50075013 bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject, v3:BasicObject):
50085014 v6:Flonum = InvokeBuiltin rb_f_float, v0, v1, v2
50095015 Jump bb1(v0, v1, v2, v3, v6)
@@ -5015,7 +5021,7 @@ mod tests {
50155021 #[ test]
50165022 fn test_invokebuiltin_cexpr_annotated ( ) {
50175023 assert_method_hir_with_opcode ( "class" , YARVINSN_opt_invokebuiltin_delegate_leave , expect ! [ [ r#"
5018- fn class@<internal:kernel>:20:
5024+ fn class@<internal:kernel>:
50195025 bb0(v0:BasicObject):
50205026 v3:Class = InvokeBuiltin _bi20, v0
50215027 Jump bb1(v0, v3)
@@ -5031,7 +5037,7 @@ mod tests {
50315037 assert ! ( iseq_contains_opcode( iseq, YARVINSN_opt_invokebuiltin_delegate ) , "iseq Dir.open does not contain invokebuiltin" ) ;
50325038 let function = iseq_to_hir ( iseq) . unwrap ( ) ;
50335039 assert_function_hir ( function, expect ! [ [ r#"
5034- fn open@<internal:dir>:184:
5040+ fn open@<internal:dir>:
50355041 bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject, v3:BasicObject, v4:BasicObject):
50365042 v5:NilClass = Const Value(nil)
50375043 v8:BasicObject = InvokeBuiltin dir_s_open, v0, v1, v2
@@ -5045,7 +5051,7 @@ mod tests {
50455051 assert ! ( iseq_contains_opcode( iseq, YARVINSN_opt_invokebuiltin_delegate_leave ) , "iseq GC.enable does not contain invokebuiltin" ) ;
50465052 let function = iseq_to_hir ( iseq) . unwrap ( ) ;
50475053 assert_function_hir ( function, expect ! [ [ r#"
5048- fn enable@<internal:gc>:55:
5054+ fn enable@<internal:gc>:
50495055 bb0(v0:BasicObject):
50505056 v3:BasicObject = InvokeBuiltin gc_enable, v0
50515057 Jump bb1(v0, v3)
@@ -5060,7 +5066,7 @@ mod tests {
50605066 assert ! ( iseq_contains_opcode( iseq, YARVINSN_invokebuiltin ) , "iseq GC.start does not contain invokebuiltin" ) ;
50615067 let function = iseq_to_hir ( iseq) . unwrap ( ) ;
50625068 assert_function_hir ( function, expect ! [ [ r#"
5063- fn start@<internal:gc>:36:
5069+ fn start@<internal:gc>:
50645070 bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject, v3:BasicObject, v4:BasicObject):
50655071 v6:FalseClass = Const Value(false)
50665072 v8:BasicObject = InvokeBuiltin gc_start_internal, v0, v1, v2, v3, v6
0 commit comments