# New Ticket Created by  Will Coleda 
# Please include the string:  [perl #41790]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=41790 >


I have some work for Tcl pending commit that requires I know the name  
a .Sub was invoked with at runtime, so I need a way to get at the  
name at runtime. Currently, the following code (jisom++)

.sub main :main
         'foo'()
.end

.sub 'foo'
         print "We're inside sub "
         $P0 = interpinfo 14
         $S0 = $P0
         say $S0
.end

says 'parrot;foo'. While I could strip off the leading namespace,  
this would fail for subs like:

.sub 'foo;bar'
  ...
.end

And, even if we fixed the semi-predicate problem during the  
stringification, stripping out the information needed will be even  
harder.

So, since we can we can already get the current namespace with:

current_ns = interp['namespace']

I vote we change Sub's get_string to return the simple name instead  
of the full name.

Below is a patch to do just that (mdiep++). Hearing no objections  
(anyone?), I'd like to get this into 0.4.10.

With it applied, there are ~13 core subtest failures, those will need  
to be fixed to expect the new behavior.

=== src/pmc/sub.pmc
==================================================================
--- src/pmc/sub.pmc     (revision 4399)
+++ src/pmc/sub.pmc     (local)
@@ -120,7 +120,8 @@
*/
      STRING* get_string() {
-        return Parrot_full_sub_name(INTERP, SELF);
+        struct Parrot_sub * const sub = PMC_sub(SELF);
+        return Parrot_make_COW_reference(INTERP, sub->name);
      }
      void set_string_native(STRING *subname) {



--
Will "Coke" Coleda
[EMAIL PROTECTED]


Reply via email to