Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

Re^7: B::Xref buggy?

by dave_the_m (Monsignor)
on Nov 15, 2018 at 16:28 UTC ( [id://1225866]=note: print w/replies, xml ) Need Help??


in reply to Re^6: B::Xref buggy?
in thread B::Xref buggy?

It's possible to apply a callback to Concise to handle the logic with B::Concise::add_callback
That still doesn't make any sense. That just allows a per-node callback to affect how Concise dumps nodes. It doesn't help with scanning the op tree in the correct order to keep track of line numbers. Concise doesn't track line numbers, nor does it allow you to customise the order in which nodes are scanned.

Xref has all the logic to do that, it just needs tweaking.

Dave.

Replies are listed 'Best First'.
Re^8: B::Xref buggy?
by LanX (Saint) on Nov 15, 2018 at 16:42 UTC
    > Concise doesn't track line numbers,

    I'm confused ...did you look at the output I provided?

    This looks pretty much like the lexical order in the source which is needed to track variables and subs.

    and the line numbers are available:

    # 6: print "@row"; #: +line 6 - <;> ex-nextstate(main 7 tst_b_xref2.pl:6) v:*,&,x +*,x&,x$,$

    The -src option dumps the original source line just before every nextstate OP and the line number is available in tst_b_xref2.pl:6

    Could you please provide an example code where this behaviour is broken in the B::Concise output and information is lost?

    Probably I'm unaware of some Perl temporal magic ? ? ?

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

      This looks pretty much like the lexical order in the source which is needed to track variables and subs
      I think that is the heart of your misapprehension. Concise doesn't output ops in source lexical order, apart from happenstance. As a trivial counterexample, this source:
      unless ($var1) { $var2++; } else { $var3++; }
      gives:
      perl -MO=Concise,-exec /tmp/p | grep var 3 <#> gvsv[*var1] s 7 <#> gvsv[*var3] s d <#> gvsv[*var2] s
      Note that var3 comes before var2.

      Dave.

        Thanks, Dave.

        I was aware that OPs do kind of gotos to next-OPs (the ->label at the end of each line).

        But it didn't seem logical that the -src option could be offered if B::Concise wasn't respecting the order.*

        The solution is that the source lines they are not in order, but the line numbers are still reliable:

        D:\tmp>type tst_b_xref3.pl unless ($var1) { $var2++; } else { $var3++; }
        (Win Activestate 5.24)
        D:\tmp>perl -MO=Concise,-src tst_b_xref3.pl|find "var" tst_b_xref3.pl syntax OK # 1: unless ($var1) { 3 <#> gvsv[*var1] s ->4 # 5: $var3++; 7 <#> gvsv[*var3] s ->8 # 2: $var2++; d <#> gvsv[*var2] s ->e

        So strictly speaking it's still possible to use B::Concise to emulate B::Xref on line number level.

        Cheers Rolf
        (addicted to the Perl Programming Language :)
        Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

        *) Interestingly this also depends on the Perl version. Here the vars appear in order: (Ubuntu 5.18)

        $ perl -MO=Concise,-src tst_b_xref3.pl|grep var tst_b_xref3.pl syntax OK # 1: unless ($var1) { 3 <#> gvsv[*var1] s ->4 # 2: $var2++; 8 <#> gvsv[*var2] s ->9 # 5: $var3++; e <#> gvsv[*var3] s ->f

        update

        and that's the reason why, 5.24 is optimizing the negation away by swapping the branches:

        D:\tmp>perl -MO=Deparse tst_b_xref3.pl tst_b_xref3.pl syntax OK if ($var1) { ++$var3; } else { ++$var2; }

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1225866]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (8)
As of 2024-04-18 10:13 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found