From c271df943c312e7d6e9102703218e7253282f35e Mon Sep 17 00:00:00 2001 From: Brian Fraser Date: Fri, 22 Jul 2011 09:51:03 -0300 Subject: [PATCH] pp_ctl.c: pp_goto UTF8 cleanup. --- MANIFEST | 1 + pp_ctl.c | 5 +++-- t/uni/goto.t | 41 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 t/uni/goto.t diff --git a/MANIFEST b/MANIFEST index bcd14aa..0dad869 100644 --- a/MANIFEST +++ b/MANIFEST @@ -5238,6 +5238,7 @@ t/uni/chomp.t See if Unicode chomp works t/uni/chr.t See if Unicode chr works t/uni/class.t See if Unicode classes work (\p) t/uni/fold.t See if Unicode folding works +t/uni/goto.t See if Unicode goto &sub works t/uni/greek.t See if Unicode in greek works t/uni/gv.t See if Unicode GVs work. t/uni/latin2.t See if Unicode in latin2 works diff --git a/pp_ctl.c b/pp_ctl.c index 054de67..0364723 100644 --- a/pp_ctl.c +++ b/pp_ctl.c @@ -2813,8 +2813,9 @@ PP(pp_goto) /* autoloaded stub? */ if (cv != GvCV(gv) && (cv = GvCV(gv))) goto retry; - autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv), - GvNAMELEN(gv), FALSE); + autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv), + GvNAMELEN(gv), + GvNAMEUTF8(gv) ? SVf_UTF8 : 0); if (autogv && (cv = GvCV(autogv))) goto retry; tmpstr = sv_newmortal(); diff --git a/t/uni/goto.t b/t/uni/goto.t new file mode 100644 index 0000000..922ddc1 --- /dev/null +++ b/t/uni/goto.t @@ -0,0 +1,41 @@ +#!./perl -w + +BEGIN { + require './test.pl'; +} + +plan tests => 4; + +use utf8; +use open qw( :utf8 :std ); + +sub goto_baresub { + goto &問題の原因; +} + +sub goto_softref { + goto &{"問題の原因"}; +} + +sub goto_softref_octal { + goto &{"\345\225\217\351\241\214\343\201\256\345\216\237\345\233\240"}; +} + +sub 問題の原因 { + 1; +} + +ok goto_baresub(), "Magical goto works on an UTF-8 sub,"; +ok goto_softref(), "..and an UTF-8 softref sub,"; + +{ + local $@; + eval { goto_softref_octal() }; + like $@, qr/Goto undefined subroutine &main::\345\225\217\351\241\214\343\201\256\345\216\237\345\233\240/, "But does NOT find the softref sub when it's lacking the UTF-8 flag"; +} + +{ + local $@; + eval { goto &因 }; + like $@, qr/Goto undefined subroutine &main::因/, "goto undefined sub gets the right error message"; +} -- 2.7.4