From 2dc93ac345523892ac9cd7bd9370e1da300f8897 Mon Sep 17 00:00:00 2001 From: Itsuki Toyota Date: Sat, 13 Jan 2018 21:23:45 +0900 Subject: [PATCH 1/2] Add error messages for Perl5-style pragma (e.g., "use 6.0", "need 6.0") Fixes RT#126669: https://rt.perl.org/Public/Bug/Display.html?id=126669 When the name of an undeclared routine matches any keys of the table $obs, it shows the associated error message. This fix leverages this table; it stores "use" and "need" each as a key and their associated error messages each as a value. --- src/core/Exception.pm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/core/Exception.pm b/src/core/Exception.pm index d5b73458af0..0dddcd4db85 100644 --- a/src/core/Exception.pm +++ b/src/core/Exception.pm @@ -1049,6 +1049,8 @@ my class X::Undeclared::Symbols does X::Comp { local => "temp (or dynamic var)", new => "method call syntax", foreach => "for", + use => '"v" prefix for pragma (e.g., "use v6;", "use v6.c;")', + need => '"v" prefix for pragma (e.g., "need v6;", "need v6.c;")', } $r ~= "Undeclared routine" ~ (%.unk_routines.elems == 1 ?? "" !! "s") ~ ":\n"; for %.unk_routines.sort(*.key) { From 4ec5936cd5da0d2e361546923d1cdfc6a2d1548b Mon Sep 17 00:00:00 2001 From: Itsuki Toyota Date: Sat, 13 Jan 2018 22:35:50 +0900 Subject: [PATCH 2/2] Add tests for X::Undeclared::Symbols exception for when Perl5-style pragma is used Fixes RT#126669: https://rt.perl.org/Public/Bug/Display.html?id=126669 --- t/05-messages/02-errors.t | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/t/05-messages/02-errors.t b/t/05-messages/02-errors.t index b22f54f941f..174b0b887eb 100644 --- a/t/05-messages/02-errors.t +++ b/t/05-messages/02-errors.t @@ -2,7 +2,7 @@ use lib ; use Test; use Test::Helpers; -plan 33; +plan 35; # RT #132295 @@ -272,4 +272,15 @@ throws-like { my $r = 1..5; $r[42] = 21 }, X::Assignment::RO, is-run 'EVAL "*+*"', :compiler-args[<--optimize=off>], 'optimizer flag gets propagated to EVAL'; + +# RT126669 + +throws-like { EVAL "use 6.0;" }, X::Undeclared::Symbols, + :message{ .contains: 'use "v" prefix for pragma (e.g., "use v6;", "use v6.c;")' }, + 'suggests to use "use v6;" or "use v6.c;" when "use 6.0" is called'; + +throws-like { EVAL "need 6.0;" }, X::Undeclared::Symbols, + :message{ .contains: 'use "v" prefix for pragma (e.g., "need v6;", "need v6.c;")' }, + 'suggests to use "need v6;" or "need v6.c;" when "need 6.0" is called'; + # vim: ft=perl6 expandtab sw=4