in reply to Re^2: Introspecting type informations? HvNAME(SvSTASH(SvRV(ST(0))))
in thread Introspecting type informations?

Heh. Didnt forget diagnostics always reminds. Show the B code then.
  • Comment on Re^3: Introspecting type informations? HvNAME(SvSTASH(SvRV(ST(0))))

Replies are listed 'Best First'.
Re^4: Introspecting type informations? HvNAME(SvSTASH(SvRV(ST(0))))
by LanX (Saint) on Aug 04, 2019 at 12:57 UTC

      LanX:

      In the page you linked, it looks like lines 1612 and 1613 (inside subroutine maybe_my) fetch the information from the PAD if it's a typed PAD:

      1607: if ($op->private & OPpLVAL_INTRO and not $self->{'avoid_local'}{ +$$op}) { 1608: # Check $padname->FLAGS for statehood, rather than $op->p +rivate, 1609: # because enteriter ops do not carry the flag. 1610: my $my = 1611: $self->keyword($padname->FLAGS & SVpad_STATE ? "state +" : "my"); 1612: if ($padname->FLAGS & SVpad_TYPED) { 1613: $my .= ' ' . $padname->SvSTASH->NAME; 1614: }

      I didn't dig any further into it because it looks like the right thing. Hopefully that'll get you on the trail to the info you're looking for.

      Note: I got lucky when looking for it, as I first did a ^F in the browser looking for my, but it indicated over 1000 results. However, it also added highlights, drawing my attention to the first item: OPpTARGET_MY. Changing the search to _my gave a mere 6 locations, and the third one shows where the type name gets added to the "my TYPE VAR" output for Deparse. Had it not done so, it may have taken a while to dig it up.

      ...roboticus

      When your only tool is a hammer, all problems look like your thumb.

        Hi roboticus

        Thanks!

        You seem to be spot on, though this $padname->SvSTASH->NAME is a strange name for the type.

        So the information seems to be hidden in the lexical pad.

        After this year's YAPC I'll try to find out for sure, patching B::Deparse to through debug information is actually not that difficult.

        Ideally B::Concise could be patched to show it too.

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