On Tue, Nov 22, 2005 at 09:42:38AM -0800, jerry gay wrote:
> your example in the previous message made me think. what will parrot
> do if a parrot sub declares the :outer subpragma, and the sub to which
> it refers doesn't have a lexical pad?

Nothing; that's entirely legal.  And it's even useful, *if* the outer
sub has a :outer of its own.

   sub foo ($a) {
      my sub bar {
         my sub baz { $a }
         &baz;   #note - this returns a reference
      }
      bar();
   }

While &bar has no pad, it does have :outer(foo), so the find_lex in
&baz will work.

>         .sub do_add3
>                 .const .Sub add3 = "add3"
>                 $P1 = newclosure add3
>                 $P1()
>         .end
> 
>         .sub add3 :anon :outer(do_add3)
>                 .return ($P1)
>         .end
> 
> compile error? runtime error? warning only, and error on lexical
> access in inner sub?

I'd call this correct but silly, kind of like assigning to a register
that doesn't get used afterwards.
-- 
Chip Salzenberg <[EMAIL PROTECTED]>

Reply via email to