Skip Menu |

This queue is for tickets about the Method-Signatures CPAN distribution.

Report information
The Basics
Id: 81366
Status: rejected
Priority: 0/
Queue: Method-Signatures

People
Owner: Nobody in particular
Requestors: MAUKE [...] cpan.org
Cc:
AdminCc:

Bug Information
Severity: (no value)
Broken in: 20120523
Fixed in: (no value)



Subject: long parameter list causes error
See the attached test file. When I run it, I get: $ perl t/hueg.t 1..1 PL_linestr not long enough, was Devel::Declare loaded soon enough in t/hueg.t at /home/mauke/usr/lib/perl5/site_perl/5.16.1/i686-linux/Devel/Declare/Context/Simple.pm line 71. # Looks like your test exited with 2 before it could output anything.
Subject: hueg.t
#!perl use warnings FATAL => 'all'; use strict; use Test::More tests => 1; use Method::Signatures; func yes_this_is_an_unusually_long_function_name_wouldnt_you_agree_with_me_there ( $the_first_parameter_is_the_only_one_I_really_care_about_and_gets_a_very_special_name, $stupid_prefix_0, $stupid_prefix_1, $stupid_prefix_2, $stupid_prefix_3, $stupid_prefix_4, $stupid_prefix_5, $stupid_prefix_6, $stupid_prefix_7, $stupid_prefix_8, $stupid_prefix_9, $stupid_prefix_10, $stupid_prefix_11, $stupid_prefix_12, $stupid_prefix_13, $stupid_prefix_14, $stupid_prefix_15, $stupid_prefix_16, $stupid_prefix_17, $stupid_prefix_18, $stupid_prefix_19, $stupid_prefix_20, $stupid_prefix_21, $stupid_prefix_22, $stupid_prefix_23, $stupid_prefix_24, $stupid_prefix_25, $stupid_prefix_26, $stupid_prefix_27, $stupid_prefix_28, $stupid_prefix_29, $stupid_prefix_30, $stupid_prefix_31, $stupid_prefix_32, $stupid_prefix_33, $stupid_prefix_34, $stupid_prefix_35, $stupid_prefix_36, $stupid_prefix_37, $stupid_prefix_38, $stupid_prefix_39, $stupid_prefix_40, $stupid_prefix_41, $stupid_prefix_42, $stupid_prefix_43, $stupid_prefix_44, $stupid_prefix_45, $stupid_prefix_46, $stupid_prefix_47, $stupid_prefix_48, $stupid_prefix_49, $stupid_prefix_50, $stupid_prefix_51, $stupid_prefix_52, $stupid_prefix_53, $stupid_prefix_54, $stupid_prefix_55, $stupid_prefix_56, $stupid_prefix_57, $stupid_prefix_58, $stupid_prefix_59, $stupid_prefix_60, $stupid_prefix_61, $stupid_prefix_62, $stupid_prefix_63, $stupid_prefix_64, $stupid_prefix_65, $stupid_prefix_66, $stupid_prefix_67, $stupid_prefix_68, $stupid_prefix_69, $stupid_prefix_70, $stupid_prefix_71, $stupid_prefix_72, $stupid_prefix_73, $stupid_prefix_74, $stupid_prefix_75, $stupid_prefix_76, $stupid_prefix_77, $stupid_prefix_78, $stupid_prefix_79, $stupid_prefix_80, $stupid_prefix_81, $stupid_prefix_82, $stupid_prefix_83, $stupid_prefix_84, $stupid_prefix_85, $stupid_prefix_86, $stupid_prefix_87, $stupid_prefix_88, $stupid_prefix_89, $stupid_prefix_90, $stupid_prefix_91, $stupid_prefix_92, $stupid_prefix_93, $stupid_prefix_94, $stupid_prefix_95, $stupid_prefix_96, $stupid_prefix_97, $stupid_prefix_98, $stupid_prefix_99, $stupid_prefix_100, $stupid_prefix_101, $stupid_prefix_102, $stupid_prefix_103, $stupid_prefix_104, $stupid_prefix_105, $stupid_prefix_106, $stupid_prefix_107, $stupid_prefix_108, $stupid_prefix_109, $stupid_prefix_110, $stupid_prefix_111, $stupid_prefix_112, $stupid_prefix_113, $stupid_prefix_114, $stupid_prefix_115, $stupid_prefix_116, $stupid_prefix_117, $stupid_prefix_118, $stupid_prefix_119, $stupid_prefix_120, $stupid_prefix_121, $stupid_prefix_122, $stupid_prefix_123, $stupid_prefix_124, $stupid_prefix_125, $stupid_prefix_126, $stupid_prefix_127, $stupid_prefix_128, $stupid_prefix_129, $stupid_prefix_130, $stupid_prefix_131, $stupid_prefix_132, $stupid_prefix_133, $stupid_prefix_134, $stupid_prefix_135, $stupid_prefix_136, $stupid_prefix_137, $stupid_prefix_138, $stupid_prefix_139, $stupid_prefix_140, $stupid_prefix_141, $stupid_prefix_142, $stupid_prefix_143, $stupid_prefix_144, $stupid_prefix_145, $stupid_prefix_146, $stupid_prefix_147, $stupid_prefix_148, $stupid_prefix_149, $stupid_prefix_150, $stupid_prefix_151, $stupid_prefix_152, $stupid_prefix_153, $stupid_prefix_154, $stupid_prefix_155, $stupid_prefix_156, $stupid_prefix_157, $stupid_prefix_158, $stupid_prefix_159, $stupid_prefix_160, $stupid_prefix_161, $stupid_prefix_162, $stupid_prefix_163, $stupid_prefix_164, $stupid_prefix_165, $stupid_prefix_166, $stupid_prefix_167, $stupid_prefix_168, $stupid_prefix_169, $stupid_prefix_170, $stupid_prefix_171, $stupid_prefix_172, $stupid_prefix_173, $stupid_prefix_174, $stupid_prefix_175, $stupid_prefix_176, $stupid_prefix_177, $stupid_prefix_178, $stupid_prefix_179, $stupid_prefix_180, $stupid_prefix_181, $stupid_prefix_182, $stupid_prefix_183, $stupid_prefix_184, $stupid_prefix_185, $stupid_prefix_186, $stupid_prefix_187, $stupid_prefix_188, $stupid_prefix_189, $stupid_prefix_190, $stupid_prefix_191, $stupid_prefix_192, $stupid_prefix_193, $stupid_prefix_194, $stupid_prefix_195, $stupid_prefix_196, $stupid_prefix_197, $stupid_prefix_198, $stupid_prefix_199, $stupid_prefix_200, $stupid_prefix_201, $stupid_prefix_202, $stupid_prefix_203, $stupid_prefix_204, $stupid_prefix_205, $stupid_prefix_206, $stupid_prefix_207, $stupid_prefix_208, $stupid_prefix_209, $stupid_prefix_210, $stupid_prefix_211, $stupid_prefix_212, $stupid_prefix_213, $stupid_prefix_214, $stupid_prefix_215, $stupid_prefix_216, $stupid_prefix_217, $stupid_prefix_218, $stupid_prefix_219, $stupid_prefix_220, $stupid_prefix_221, $stupid_prefix_222, $stupid_prefix_223, $stupid_prefix_224, $stupid_prefix_225, $stupid_prefix_226, $stupid_prefix_227, $stupid_prefix_228, $stupid_prefix_229, $stupid_prefix_230, $stupid_prefix_231, $stupid_prefix_232, $stupid_prefix_233, $stupid_prefix_234, $stupid_prefix_235, $stupid_prefix_236, $stupid_prefix_237, $stupid_prefix_238, $stupid_prefix_239, $stupid_prefix_240, $stupid_prefix_241, $stupid_prefix_242, $stupid_prefix_243, $stupid_prefix_244, $stupid_prefix_245, $stupid_prefix_246, $stupid_prefix_247, $stupid_prefix_248, $stupid_prefix_249, $stupid_prefix_250, $stupid_prefix_251, $stupid_prefix_252, $stupid_prefix_253, $stupid_prefix_254, $stupid_prefix_255, $stupid_prefix_256, $stupid_prefix_257, $stupid_prefix_258, $stupid_prefix_259, $stupid_prefix_260, $stupid_prefix_261, $stupid_prefix_262, $stupid_prefix_263, $stupid_prefix_264, $stupid_prefix_265, $stupid_prefix_266, $stupid_prefix_267, $stupid_prefix_268, $stupid_prefix_269, $stupid_prefix_270, $stupid_prefix_271, $stupid_prefix_272, $stupid_prefix_273, $stupid_prefix_274, $stupid_prefix_275, $stupid_prefix_276, $stupid_prefix_277, $stupid_prefix_278, $stupid_prefix_279, $stupid_prefix_280, $stupid_prefix_281, $stupid_prefix_282, $stupid_prefix_283, $stupid_prefix_284, $stupid_prefix_285, $stupid_prefix_286, $stupid_prefix_287, $stupid_prefix_288, $stupid_prefix_289, $stupid_prefix_290, $stupid_prefix_291, $stupid_prefix_292, $stupid_prefix_293, $stupid_prefix_294, $stupid_prefix_295, $stupid_prefix_296, $stupid_prefix_297, $stupid_prefix_298, $stupid_prefix_299 ) { $the_first_parameter_is_the_only_one_I_really_care_about_and_gets_a_very_special_name } is yes_this_is_an_unusually_long_function_name_wouldnt_you_agree_with_me_there("all is well"), "all is well";
Subject: Re: [rt.cpan.org #81366] long parameter list causes error
Date: Fri, 23 Nov 2012 16:55:56 -0800
To: bug-Method-Signatures [...] rt.cpan.org
From: Michael G Schwern <schwern [...] pobox.com>
On 2012.11.23 1:01 AM, Lukas Mai via RT wrote: Show quoted text
> When I run it, I get: > $ perl t/hueg.t > 1..1 > PL_linestr not long enough, was Devel::Declare loaded soon enough in > t/hueg.t at > /home/mauke/usr/lib/perl5/site_perl/5.16.1/i686-linux/Devel/Declare/Context/Simple.pm > line 71. > # Looks like your test exited with 2 before it could output anything.
Thanks for reporting this, but it's a known limitation of Devel::Declare. Feel free to report it upstream. Static limits suck, but playing with your test code it can accommodate 150 long parameter names which is about an order of magnitude more than I've ever seen in the wild. If you were to hit that absurd situation I'd do this... func foo($param, @rest) { die "Not enough parameters" if @rest != 300; ... } If you really want to take a crack at it, I can tell you what's probably going wrong. Method::Signatures takes great pains to ensure the line numbers don't change, so it puts all the parameter unpacking and checks on a single line. Devel::Declare->set_linestr probably doesn't accommodate that. There's two solutions: 1) Fix set_linestr() to dynamically grow PL_linestr. 2) Change Method::Signatures to write out multiple lines, use #line to keep the line numbers straight.
In addition to schwern's suggestion of using `@rest', you can also use the `...' syntax if you _really_ don't care about the remainder of the parameters (which is how your example is structured). Since this is an upstream limitation, I'm rejecting this ticket.