On Fri, Jan 28, 2011 at 4:18 PM, Benjamin R. Haskell <[email protected]> wrote:
> On Fri, 28 Jan 2011, Britton Kerin wrote:
>
>> There is some strange bug that causes line numbers in errors coming from
>> perl to come out wrong in some circumstances.
>>
>> This code:
>>
>> perl <<END_PERL
>> # line 3 line_number_test.vim
>>
>> if ( 0 ) {
>> die "I don't cause trouble because I'm all on one line";
>> }
>>
>> die "I am really line 8";
>>
>> behaves as expected when openened and :so %.
>>
>> This code ends up wrongly reporting the error as being on line 10:
>>
>> perl <<END_PERL
>> # line 3 line_number_test.vim
>>
>> if ( 0 ) {
>> die
>> "I DO cause trouble perhaps because I'm not all on one line?";
>> }
>>
>> die "I am really line 9";
>>
>> The bug is not in perl because this script:
>>
>> #!/usr/bin/perl -w
>> # line 3
>>
>> use strict;
>>
>> if ( 0 ) {
>> die
>> "I don't happen";
>> }
>>
>> die "I do happen";
>>
>> works as expected.
>>
>> The problem is the same for compile time errors (e.g. $foo = "bar" with
>> $foo undeclared and warnings fatal) as for run-time ones.
>>
>> The scripts are attached in case anyone wants to try them.
>>
>> I suspect that vim is getting clever and rewriting the die code somehow
>> and accidently adding a line in some cases or something, but I haven't
>> looked into it at all.
>>
>> I'm really hoping someone can tell me what's going on or where to look. I
>> just released http://www.vim.org/scripts/script.php?script_id=3406 and
>> http://www.vim.org/scripts/script.php?script_id=3411 but I'll have to pull
>> them if they are inevitably going to commit that most unholy crime of lying
>> to people who are trying to debug.
>
> I doubt Vim would try anything clever with rewriting Perl code. That way
> lies madness.
>
> Both of your tests work fine for me under stock VIM 7.3. (7.3.000, I guess).
> Same results with and without -u NONE -i NONE -N (so, with and without the
> various plugins I have installed).
>
> Do the tests fail for you without the line directives? What if you move
> them to just above the fatal 'die'? (in which case the line number reported
> should match the comment exactly) Just wondering if something else in your
> Vim is altering the evaluated Perl code and/or whether line-number reporting
> is correct without the line directives.
>
> I was surprised to not get an error about the unclosed END_PERL heredoc.
> (But I don't use Perl from Vim, so maybe it's more lax about it.)
>
> How about line-endings (really doubtful, but checking)? I'm under Linux, so
> bare LFs.
>
> The fact that it works properly under "real" perl might not have much
> bearing on diagnosing this. Often libperl.so is a separately-compiled
> library that Vim would've been linked against, so running commandline perl
> wouldn't even necessarily be the same version of perl that Vim could be
> picking up.
Good point.
I rebuilt against perl 5.12.3 and the problem with the line numbers went away.
Could you do me a favor and let me know which perl version your setup
ends up call? Something like:
strace ./vim -i NONE -u NONE -N -g --nofork 2>&1 | grep 'perl'
And then :e line_number_test_fail.vim and :so % should show a version
number. If you are also using a more recent perl than 5.10 I'll blame
this one on perl.
> After installing your plugin (3406, the line-directive adding one), I notice
> a few things:
>
> 1. It seems to strip the last line of the file regardless of its contents.
>
> 2. As part of that, it removes the closing heredoc marker.
>
> perl <<END_PERL
> ## some perl stuff
> END_PERL
>
> becomes:
>
> perl <<END_PERL
> # line 3 filename
> ## some perl stuff
>
> 3. It seems to add a second line-directive even if one already exists, which
> kind of negates its purpose (end up with two "# line 3" directives, the
> second of which occurs before line 4, so off-by-one).
How tiresome that I can't reproduce either of these problems with either
version of perl. If you could send me the output of these commands:
vim --version
ldd (your vim binary)
strace vim -i NONE -u NONE -N -g --nofork -c ':edit
~/line_number_test_fail.vim' -c ':silent so %' -c ':quit' 2>&1 | grep
perl
I would really appreciate it.
Thanks,
Britton
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php