richter     00/12/19 01:11:11

  Modified:    .        Tag: Embperl2c Embperl.pm Embperl.xs ep.h epmain.c
                        eputil.c test.pl
  Log:
  Embperl 2 - new cleanup
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.118.4.20 +182 -160  embperl/Embperl.pm
  
  Index: Embperl.pm
  ===================================================================
  RCS file: /home/cvs/embperl/Embperl.pm,v
  retrieving revision 1.118.4.19
  retrieving revision 1.118.4.20
  diff -u -r1.118.4.19 -r1.118.4.20
  --- Embperl.pm        2000/12/18 12:43:22     1.118.4.19
  +++ Embperl.pm        2000/12/19 09:11:02     1.118.4.20
  @@ -10,7 +10,7 @@
   #   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   #   WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
   #
  -#   $Id: Embperl.pm,v 1.118.4.19 2000/12/18 12:43:22 richter Exp $
  +#   $Id: Embperl.pm,v 1.118.4.20 2000/12/19 09:11:02 richter Exp $
   #
   ###################################################################################
   
  @@ -86,7 +86,7 @@
   
   
   ##ep2##
  -$VERSION = '2.0a16' ;
  +$VERSION = '2.0a17' ;
   ##/ep2##
   ##ep1##$VERSION = '1.3b8_dev';
   
  @@ -1225,199 +1225,215 @@
   
   sub cleanup 
       {
  -    # --- return 0 ;
  -
  -    #log_svs ("cleanup entry") ;
  -    my $glob ;
  -    my $val ;
  -    my $key ;
  -    local $^W = 0 ;
  -    my $package ;
       my %seen ;
  -    my $Debugflags ;
  -    my $packfile ;
  -    my %addcleanup ;
  -    my $varfile ;
  -    my %revinc = map { ($_ => 1) } values (%INC) if ($multiplicity) ;
  -    my ($k, $v) ;
  -    
  -    $seen{''}      = 1 ;
  -    $seen{'dbgShowCleanup'} = 1 ;
  -    foreach $package (@cleanups)
  -        {
  -        $Debugflags = dbgShowCleanup if ($package eq 'dbgShowCleanup') ;
  -        next if ($seen{$package}) ;
  -
  -     $seen{$package} = 1 ;
  -        
  -        #print LOG "GVFile $package\::__ANON__\n" ;
  -     $packfile = GVFile (*{"$package\::__ANON__"}) ;
  -     if ($multiplicity && !$revinc{$packfile})
  -            {
  -            print LOG "$packfile -> -- eval --\n" ;
  -            $packfile = "-- eval --" ;
  -            }
  -        $packfile = '-> No Perl in Source <-' if ($packfile eq ('_<' . __FILE__) || 
$packfile eq __FILE__) ;
  -     $addcleanup = \%{"$package\:\:CLEANUP"} ;
  -     $addcleanup -> {'CLEANUP'} = 0 ;
  -     $addcleanup -> {'EXPIRES'} = 0 ;
  -     $addcleanup -> {'CACHE_KEY'} = 0 ;
  -     if ($Debugflags & dbgShowCleanup)
  -         {
  -         print LOG "[$$]CUP:  ***** Cleanup package: $package *****\n" ;
  -         print LOG "[$$]CUP:  Source $packfile\n" ;
  -         }
  -     if (defined (&{"$package\:\:CLEANUP"}))
  -         {
  -         #$package =~ /^([a-zA-Z0-9\:\:\_]+)$/ ;
  -         #eval "\&$1\:\:CLEANUP;" ;
  -         eval "\&$package\:\:CLEANUP;" ;
  -         print LOG "[$$]CUP:  Call \&$package\:\:CLEANUP;\n" if ($Debugflags & 
dbgShowCleanup);
  -         logevalerr ($@) if ($@) ;
  -         }
  +    my $package ;
   
   
  -        if ($Debugflags & dbgShowCleanup)
  +    if (!$ENV{EMBPERL_EP1COMPAT})
  +        {
  +        $seen{''}      = 1 ;
  +        $seen{'dbgShowCleanup'} = 1 ;
  +        foreach $package (@cleanups)
               {
  -         my @vars = sort keys %{*{"$package\::"}} ;
  -            my $cleanfile = \%{"$package\:\:CLEANUPFILE"} ;
  -         foreach $key (@vars)
  -             {
  -             $val =  ${*{"$package\::"}}{$key} ;
  -             local(*ENTRY) = $val;
  -             #print LOG "$key = " . GVFile (*ENTRY) . "\n" ;
  -             $varfile = GVFile (*ENTRY) ;
  -             if ($multiplicity && !$revinc{$varfile})
  -                    {
  -                    print LOG "$varfile -> -- eval --\n" ;
  -                    $varfile = "-- eval --" ;
  -                    }
  -                
  -                $glob = $package.'::'.$key ;
  -             if (defined (*ENTRY{SCALAR}) && defined (${$glob}) && ref (${$glob}) 
eq 'DBIx::Recordset')
  -                 {
  -                 print LOG "[$$]CUP:  Recordset $key\n" ;
  -                 eval { DBIx::Recordset::Undef ($glob) ; } ;
  -                 print LOG "[$$]CUP:  Error: $@\n" if ($@) ;
  -                 } 
  -             elsif (($packfile eq $varfile || $addcleanup -> {$key} || 
  -                        $cleanfile->{$varfile}) &&  
  -                  (!($key =~ /\:\:$/) && !(defined ($addcleanup -> {$key}) && 
$addcleanup -> {$key} == 0)))
  -                 { # Only cleanup vars which are defined in the sourcefile
  -                   # ignore all imported vars, unless they are in the CLEANUP hash 
which is set by VARS
  -                    if (defined (*ENTRY{SCALAR}) && defined (${$glob})) 
  -                     {
  -                     print LOG "[$$]CUP:  \$$key = ${$glob}\n" ;
  -                     eval { undef ${$glob} } ;
  -                     print LOG "[$$]CUP:  Error: $@\n" if ($@) ;
  -                     }
  -                 if (defined (*ENTRY{IO})) 
  -                     {
  -                     print LOG "[$$]CUP:  IO     $key\n" ;
  -                     eval { close *{$glob} ; } ;
  -                     print LOG "[$$]CUP:  Error: $@\n" if ($@) ;
  -                     }
  -                 if (defined (*ENTRY{HASH})) 
  -                     {
  -                     print LOG "[$$]CUP:  \%$key = (" ;           
  -                     my $i = 0 ;
  -                     my $k ;
  -                     my $v ;
  -                        eval { # ignore errors here (for ActiveState Perl)
  -                        while (($k, $v) = each (%{$glob}))
  -                         {
  -                         if ($i++ > 5) 
  -                             {
  -                             print LOG '...' ;
  -                             last 
  -                             }
  -                         print LOG "$k => $v, "
  -                         } } ;
  -                     print LOG ")\n" ;
  -                     eval { untie %{$glob} ; } ;
  -                     print LOG "[$$]CUP:  Error: $@\n" if ($@) ;
  -                     eval { undef %{$glob} ; } ;
  -                     print LOG "[$$]CUP:  Error: $@\n" if ($@) ;
  -                     }
  -                 if (defined (*ENTRY{ARRAY})) 
  -                     {
  -                     print LOG "[$$]CUP:  \@$key = ("  ;          
  -                     my $i = 0 ;
  -                     my $v ;
  -                     foreach $v (@{$glob})
  -                         {
  -                         if ($i++ > 5) 
  -                             {
  -                             print LOG '...' ;
  -                             last 
  -                             }
  -                         print LOG "$v, "
  -                         }
  -                     print LOG ")\n" ;
  -                     eval { untie @{$glob} ; } ;
  -                     print LOG "[$$]CUP:  Error: $@\n" if ($@) ;
  -                     eval { undef @{$glob} ; } ;
  -                     print LOG "[$$]CUP:  Error: $@\n" if ($@) ;
  -                     }
  -                 print LOG "[$$]CUP:  leave unchanged LVALUE $key\n"       if 
(defined (*ENTRY{LVALUE})) ;
  -                 print LOG "[$$]CUP:  leave unchanged FORMAT $key\n"       if 
(defined (*ENTRY{FORMAT})) ;
  -                 print LOG "[$$]CUP:  leave unchanged \&$key\n"            if 
(defined (*ENTRY{CODE})) ;
  -                    }
  -             }
  +            $Debugflags = dbgShowCleanup if ($package eq 'dbgShowCleanup') ;
  +            next if ($seen{$package}) ;
  +
  +         $seen{$package} = 1 ;
  +            ClearSymtab ($package) ;
               }
  -        else
  +        }
  +    else
  +        {            
  +        #log_svs ("cleanup entry") ;
  +        my $glob ;
  +        my $val ;
  +        my $key ;
  +        local $^W = 0 ;
  +        my $Debugflags ;
  +        my $packfile ;
  +        my %addcleanup ;
  +        my $varfile ;
  +        my %revinc = map { ($_ => 1) } values (%INC) if ($multiplicity) ;
  +        my ($k, $v) ;
  +    
  +        $seen{''}      = 1 ;
  +        $seen{'dbgShowCleanup'} = 1 ;
  +        foreach $package (@cleanups)
               {
  -            my $cleanfile = \%{"$package\:\:CLEANUPFILE"} ;
  -            while (($key,$val) = each(%{*{"$package\::"}}))
  +            $Debugflags = dbgShowCleanup if ($package eq 'dbgShowCleanup') ;
  +            next if ($seen{$package}) ;
  +
  +         $seen{$package} = 1 ;
  +        
  +            #print LOG "GVFile $package\::__ANON__\n" ;
  +         $packfile = GVFile (*{"$package\::__ANON__"}) ;
  +         if ($multiplicity && !$revinc{$packfile})
                   {
  -             local(*ENTRY) = $val;
  -             $glob = $package.'::'.$key ;
  -             if (defined (*ENTRY{SCALAR}) && defined (${$glob}) && ref (${$glob}) 
eq 'DBIx::Recordset')
  +                print LOG "$packfile -> -- eval --\n" ;
  +                $packfile = "-- eval --" ;
  +                }
  +            $packfile = '-> No Perl in Source <-' if ($packfile eq ('_<' . 
__FILE__) || $packfile eq __FILE__) ;
  +         $addcleanup = \%{"$package\:\:CLEANUP"} ;
  +         $addcleanup -> {'CLEANUP'} = 0 ;
  +         $addcleanup -> {'EXPIRES'} = 0 ;
  +         $addcleanup -> {'CACHE_KEY'} = 0 ;
  +         if ($Debugflags & dbgShowCleanup)
  +             {
  +             print LOG "[$$]CUP:  ***** Cleanup package: $package *****\n" ;
  +             print LOG "[$$]CUP:  Source $packfile\n" ;
  +             }
  +         if (defined (&{"$package\:\:CLEANUP"}))
  +             {
  +             #$package =~ /^([a-zA-Z0-9\:\:\_]+)$/ ;
  +             #eval "\&$1\:\:CLEANUP;" ;
  +             eval "\&$package\:\:CLEANUP;" ;
  +             print LOG "[$$]CUP:  Call \&$package\:\:CLEANUP;\n" if ($Debugflags & 
dbgShowCleanup);
  +             logevalerr ($@) if ($@) ;
  +             }
  +
  +
  +            if ($Debugflags & dbgShowCleanup)
  +                {
  +             my @vars = sort keys %{*{"$package\::"}} ;
  +                my $cleanfile = \%{"$package\:\:CLEANUPFILE"} ;
  +             foreach $key (@vars)
                    {
  -                 eval { DBIx::Recordset::Undef ($glob) ; } ;
  -                 print LOG "[$$]CUP:  Error: $@\n" if ($@) ;
  -                 } 
  -             else
  -                    {
  +                 $val =  ${*{"$package\::"}}{$key} ;
  +                 local(*ENTRY) = $val;
  +                 #print LOG "$key = " . GVFile (*ENTRY) . "\n" ;
                    $varfile = GVFile (*ENTRY) ;
                    if ($multiplicity && !$revinc{$varfile})
                           {
                           print LOG "$varfile -> -- eval --\n" ;
                           $varfile = "-- eval --" ;
                           }
  -
  -                    if (($packfile eq $varfile || $addcleanup -> {$key} ||
  -                        $cleanfile->{$varfile}) &&  
  +                
  +                    $glob = $package.'::'.$key ;
  +                 if (defined (*ENTRY{SCALAR}) && defined (${$glob}) && ref 
(${$glob}) eq 'DBIx::Recordset')
  +                     {
  +                     print LOG "[$$]CUP:  Recordset $key\n" ;
  +                     eval { DBIx::Recordset::Undef ($glob) ; } ;
  +                     print LOG "[$$]CUP:  Error: $@\n" if ($@) ;
  +                     } 
  +                 elsif (($packfile eq $varfile || $addcleanup -> {$key} || 
  +                            $cleanfile->{$varfile}) &&  
                         (!($key =~ /\:\:$/) && !(defined ($addcleanup -> {$key}) && 
$addcleanup -> {$key} == 0)))
                        { # Only cleanup vars which are defined in the sourcefile
                          # ignore all imported vars, unless they are in the CLEANUP 
hash which is set by VARS
                           if (defined (*ENTRY{SCALAR}) && defined (${$glob})) 
                            {
  -                         eval { undef ${$glob} ; } ;
  -                         print LOG "[$$]CUP:  Error while cleanup \$$glob: $@\n" if 
($@) ;
  +                         print LOG "[$$]CUP:  \$$key = ${$glob}\n" ;
  +                         eval { undef ${$glob} } ;
  +                         print LOG "[$$]CUP:  Error: $@\n" if ($@) ;
                            }
                        if (defined (*ENTRY{IO})) 
                            {
  -                         eval { close *{"$package\:\:$key"} ; } ;
  -                         print LOG "[$$]CUP:  Error while closing $glob: $@\n" if 
($@) ;
  +                         print LOG "[$$]CUP:  IO     $key\n" ;
  +                         eval { close *{$glob} ; } ;
  +                         print LOG "[$$]CUP:  Error: $@\n" if ($@) ;
                            }
                        if (defined (*ENTRY{HASH})) 
                            {
  +                         print LOG "[$$]CUP:  \%$key = (" ;           
  +                         my $i = 0 ;
  +                         my $k ;
  +                         my $v ;
  +                            eval { # ignore errors here (for ActiveState Perl)
  +                            while (($k, $v) = each (%{$glob}))
  +                             {
  +                             if ($i++ > 5) 
  +                                 {
  +                                 print LOG '...' ;
  +                                 last 
  +                                 }
  +                             print LOG "$k => $v, "
  +                             } } ;
  +                         print LOG ")\n" ;
                            eval { untie %{$glob} ; } ;
  -                         print LOG "[$$]CUP:  Error while cleanup \%$glob: $@\n" if 
($@) ;
  +                         print LOG "[$$]CUP:  Error: $@\n" if ($@) ;
                            eval { undef %{$glob} ; } ;
  -                         print LOG "[$$]CUP:  Error while cleanup \%$glob: $@\n" if 
($@) ;
  +                         print LOG "[$$]CUP:  Error: $@\n" if ($@) ;
                            }
                        if (defined (*ENTRY{ARRAY})) 
                            {
  +                         print LOG "[$$]CUP:  \@$key = ("  ;          
  +                         my $i = 0 ;
  +                         my $v ;
  +                         foreach $v (@{$glob})
  +                             {
  +                             if ($i++ > 5) 
  +                                 {
  +                                 print LOG '...' ;
  +                                 last 
  +                                 }
  +                             print LOG "$v, "
  +                             }
  +                         print LOG ")\n" ;
                            eval { untie @{$glob} ; } ;
  -                         print LOG "[$$]CUP:  Error while cleanup \@$glob: $@\n" if 
($@) ;
  +                         print LOG "[$$]CUP:  Error: $@\n" if ($@) ;
                            eval { undef @{$glob} ; } ;
  -                         print LOG "[$$]CUP:  Error while cleanup \@$glob: $@\n" if 
($@) ;
  +                         print LOG "[$$]CUP:  Error: $@\n" if ($@) ;
                            }
  +                     print LOG "[$$]CUP:  leave unchanged LVALUE $key\n"       if 
(defined (*ENTRY{LVALUE})) ;
  +                     print LOG "[$$]CUP:  leave unchanged FORMAT $key\n"       if 
(defined (*ENTRY{FORMAT})) ;
  +                     print LOG "[$$]CUP:  leave unchanged \&$key\n"        if 
(defined (*ENTRY{CODE})) ;
                           }
                    }
  -             }
  +                }
  +            else
  +                {
  +                my $cleanfile = \%{"$package\:\:CLEANUPFILE"} ;
  +                while (($key,$val) = each(%{*{"$package\::"}}))
  +                    {
  +                 local(*ENTRY) = $val;
  +                 $glob = $package.'::'.$key ;
  +                 if (defined (*ENTRY{SCALAR}) && defined (${$glob}) && ref 
(${$glob}) eq 'DBIx::Recordset')
  +                     {
  +                     eval { DBIx::Recordset::Undef ($glob) ; } ;
  +                     print LOG "[$$]CUP:  Error: $@\n" if ($@) ;
  +                     } 
  +                 else
  +                        {
  +                     $varfile = GVFile (*ENTRY) ;
  +                     if ($multiplicity && !$revinc{$varfile})
  +                            {
  +                            print LOG "$varfile -> -- eval --\n" ;
  +                            $varfile = "-- eval --" ;
  +                            }
  +
  +                        if (($packfile eq $varfile || $addcleanup -> {$key} ||
  +                            $cleanfile->{$varfile}) &&  
  +                          (!($key =~ /\:\:$/) && !(defined ($addcleanup -> {$key}) 
&& $addcleanup -> {$key} == 0)))
  +                         { # Only cleanup vars which are defined in the sourcefile
  +                           # ignore all imported vars, unless they are in the 
CLEANUP hash which is set by VARS
  +                            if (defined (*ENTRY{SCALAR}) && defined (${$glob})) 
  +                             {
  +                             eval { undef ${$glob} ; } ;
  +                             print LOG "[$$]CUP:  Error while cleanup \$$glob: 
$@\n" if ($@) ;
  +                             }
  +                         if (defined (*ENTRY{IO})) 
  +                             {
  +                             eval { close *{"$package\:\:$key"} ; } ;
  +                             print LOG "[$$]CUP:  Error while closing $glob: $@\n" 
if ($@) ;
  +                             }
  +                         if (defined (*ENTRY{HASH})) 
  +                             {
  +                             eval { untie %{$glob} ; } ;
  +                             print LOG "[$$]CUP:  Error while cleanup \%$glob: 
$@\n" if ($@) ;
  +                             eval { undef %{$glob} ; } ;
  +                             print LOG "[$$]CUP:  Error while cleanup \%$glob: 
$@\n" if ($@) ;
  +                             }
  +                         if (defined (*ENTRY{ARRAY})) 
  +                             {
  +                             eval { untie @{$glob} ; } ;
  +                             print LOG "[$$]CUP:  Error while cleanup \@$glob: 
$@\n" if ($@) ;
  +                             eval { undef @{$glob} ; } ;
  +                             print LOG "[$$]CUP:  Error while cleanup \@$glob: 
$@\n" if ($@) ;
  +                             }
  +                            }
  +                     }
  +                 }
  +                }
               }
           }
   
  @@ -1897,6 +1913,12 @@
   
           #print LOG  "[$$]MEM:  Created Aliases for $package\n" ;
   
  +     my $addcleanup = \%{"$package\:\:CLEANUP"} ;
  +     $addcleanup -> {'CLEANUP'} = 0 ;
  +     $addcleanup -> {'EXPIRES'} = 0 ;
  +     $addcleanup -> {'CACHE_KEY'} = 0 ;
  +     $addcleanup -> {'OUT'} = 0 ;
  +     $addcleanup -> {'LOG'} = 0 ;
           }
   
   
  
  
  
  1.29.4.7  +6 -0      embperl/Embperl.xs
  
  Index: Embperl.xs
  ===================================================================
  RCS file: /home/cvs/embperl/Embperl.xs,v
  retrieving revision 1.29.4.6
  retrieving revision 1.29.4.7
  diff -u -r1.29.4.6 -r1.29.4.7
  --- Embperl.xs        2000/11/08 21:40:17     1.29.4.6
  +++ Embperl.xs        2000/12/19 09:11:02     1.29.4.7
  @@ -319,6 +319,12 @@
   
        sv_unmagic(ERRSV, 'U');
   
  +void 
  +embperl_ClearSymtab(sPackage)
  +    char * sPackage
  +CODE:
  +    ClearSymtab (pCurrReq, sPackage) ;
  +
   
   ################################################################################
   
  
  
  
  1.27.4.7  +2 -0      embperl/ep.h
  
  Index: ep.h
  ===================================================================
  RCS file: /home/cvs/embperl/ep.h,v
  retrieving revision 1.27.4.6
  retrieving revision 1.27.4.7
  diff -u -r1.27.4.6 -r1.27.4.7
  --- ep.h      2000/11/15 07:21:52     1.27.4.6
  +++ ep.h      2000/12/19 09:11:03     1.27.4.7
  @@ -461,6 +461,8 @@
                   /*in*/  const char *   sName) ;
   
   
  +void ClearSymtab (/*i/o*/ register req * r,
  +               /*in*/  const char *    sPackage) ;
   
   /* ---- from epeval.c ----- */
   
  
  
  
  1.75.4.21 +1 -0      embperl/epmain.c
  
  Index: epmain.c
  ===================================================================
  RCS file: /home/cvs/embperl/epmain.c,v
  retrieving revision 1.75.4.20
  retrieving revision 1.75.4.21
  diff -u -r1.75.4.20 -r1.75.4.21
  --- epmain.c  2000/12/18 20:41:41     1.75.4.20
  +++ epmain.c  2000/12/19 09:11:03     1.75.4.21
  @@ -1272,6 +1272,7 @@
       
       pSV = perl_get_sv (sVarName, TRUE) ;
       sv_magic (pSV, NULL, 0, sVarName, strlen (sVarName)) ;
  +    sv_setiv (pSV, 0) ;
       pMagic = mg_find (pSV, 0) ;
   
       if (pMagic)
  
  
  
  1.15.4.2  +155 -1    embperl/eputil.c
  
  Index: eputil.c
  ===================================================================
  RCS file: /home/cvs/embperl/eputil.c,v
  retrieving revision 1.15.4.1
  retrieving revision 1.15.4.2
  diff -u -r1.15.4.1 -r1.15.4.2
  --- eputil.c  2000/11/15 08:11:27     1.15.4.1
  +++ eputil.c  2000/12/19 09:11:03     1.15.4.2
  @@ -822,4 +822,158 @@
       *ppSV = newSViv (nPos) ;
       
       return ok ;
  -    }
  \ No newline at end of file
  +    }
  +
  +
  +
  +/* ------------------------------------------------------------------------- */
  +/*                                                                           */
  +/* SetSubTextPos                                                          */
  +/*                                                                           */
  +/*                                                                            */
  +/* in        sName = name of sub                                                  */
  +/* in   nPos  = position within the file for a given Embperl sub             */
  +/*                                                                           */
  +/* ------------------------------------------------------------------------- */
  +
  +
  +
  +void ClearSymtab (/*i/o*/ register req * r,
  +               /*in*/  const char *    sPackage) 
  +
  +    {
  +    SV *     val;
  +    char *   key;
  +    I32              klen;
  +    int              bDebug = 1 ;
  +    SV *     sv;
  +    HV *     hv;
  +    AV *     av;
  +    struct io *      io ;
  +    HV *     symtab ;
  +    STRLEN   l ;
  +    CV *     pCV ;
  +    SV *     pSV ;
  +    SV * *   ppSV ;
  +    SV *     pSVErr ;
  +    HV *     pCleanupHV ;
  +    char *      s ;
  +    GV *     pFileGV ;
  +    GV *     symtabgv ;
  +    GV *     symtabfilegv ;
  +
  +    dTHR;
  +
  +    if ((symtab = gv_stashpv ((char *)sPackage, 0)) == NULL)
  +     return ;
  +
  +    ppSV = hv_fetch (symtab, "__ANON__", 8, 0) ;
  +    if (!ppSV || !*ppSV)
  +     {
  +     if (bDebug)
  +         lprintf (r, "[%d]CUP: No Perl code in %s\n", r -> nPid, sPackage) ;
  +     return ;
  +     }
  +
  +    symtabgv = (GV *)*ppSV ;
  +    symtabfilegv = (GV *)GvFILEGV (symtabgv) ;
  +    
  +    pSV = newSVpvf ("%s::CLEANUP", sPackage) ;
  +    s   = SvPV (pSV, l) ;
  +    pCV = perl_get_cv (s, 0) ;
  +    if (pCV)
  +     {
  +     if (bDebug)
  +         lprintf (r, "[%d]CUP: Call &%s::CLEANUP\n", r -> nPid, sPackage) ;
  +     perl_call_sv ((SV *)pCV, G_EVAL | G_NOARGS | G_DISCARD) ;
  +     pSVErr = ERRSV ;
  +     if (SvTRUE (pSVErr))
  +         {
  +         STRLEN l ;
  +         char * p = SvPV (pSVErr, l) ;
  +         if (l > sizeof (r -> errdat1) - 1)
  +             l = sizeof (r -> errdat1) - 1 ;
  +         strncpy (r -> errdat1, p, l) ;
  +         if (l > 0 && r -> errdat1[l-1] == '\n')
  +             l-- ;
  +         r -> errdat1[l] = '\0' ;
  +     
  +         LogError (r, rcEvalErr) ;
  +
  +         sv_setpv(pSVErr,"");
  +         }
  +     }
  +    
  +    
  +    pCleanupHV = perl_get_hv (s, 1) ;
  +    
  +    SvREFCNT_dec(pSV) ;
  +
  +    (void)hv_iterinit(symtab);
  +    while ((val = hv_iternextsv(symtab, &key, &klen))) 
  +     {
  +     if(SvTYPE(val) != SVt_PVGV)
  +         continue;
  +
  +     s = GvNAME((GV *)val) ;
  +     l = strlen (s) ;
  +
  +     ppSV = hv_fetch (pCleanupHV, s, l, 0) ;
  +
  +     if (ppSV && *ppSV && SvIV (*ppSV) == 0)
  +         {
  +         if (bDebug)
  +             lprintf (r, "[%d]CUP: Ignore %s because it's in %%CLEANUP\n", r -> 
nPid, s) ;
  +         continue ;
  +         }
  +
  +     
  +     if (!(ppSV && *ppSV && SvIV (*ppSV) == 1))
  +         {
  +         if(GvIMPORTED((GV*)val))
  +             {
  +             if (bDebug)
  +                 lprintf (r, "[%d]CUP: Ignore %s because it's imported\n", r -> 
nPid, s) ;
  +             continue ;
  +             }
  +         
  +         pFileGV = GvFILEGV ((GV *)val) ;
  +         if (pFileGV != symtabfilegv)
  +             {
  +             if (bDebug)
  +                 lprintf (r, "[%d]CUP: Ignore %s because it's defined in another 
source file\n", r -> nPid, s) ;
  +             continue ;
  +             }
  +         }
  +     
  +     if((sv = GvSV((GV*)val)) && SvOK (sv))
  +         {
  +         if (bDebug)
  +             lprintf (r, "[%d]CUP: $%s = %s\n", r -> nPid, s, SvPV (sv, l)) ;
  +     
  +         sv_unmagic (sv, 'q') ; /* untie */
  +         sv_setsv(sv, &sv_undef);
  +         }
  +     if((hv = GvHV((GV*)val)))
  +         {
  +         if (bDebug)
  +             lprintf (r, "[%d]CUP: %%%s = ...\n", r -> nPid, s) ;
  +         sv_unmagic ((SV *)hv, 'P') ; /* untie */
  +         hv_clear(hv);
  +         }
  +     if((av = GvAV((GV*)val)))
  +         {
  +         if (bDebug)
  +             lprintf (r, "[%d]CUP: @%s = ...\n", r -> nPid, s) ;
  +         sv_unmagic ((SV *)av, 'P') ; /* untie */
  +         av_clear(av);
  +         }
  +     if((io = GvIO((GV*)val)))
  +         {
  +         if (bDebug)
  +             lprintf (r, "[%d]CUP: IO %s = ...\n", r -> nPid, s) ;
  +         //sv_unmagic ((SV *)io, 'q') ; /* untie */
  +         //do_close((GV *)val, 0);
  +         }
  +     }
  +    }
  
  
  
  1.70.4.24 +1 -1      embperl/test.pl
  
  Index: test.pl
  ===================================================================
  RCS file: /home/cvs/embperl/test.pl,v
  retrieving revision 1.70.4.23
  retrieving revision 1.70.4.24
  diff -u -r1.70.4.23 -r1.70.4.24
  --- test.pl   2000/12/04 09:17:36     1.70.4.23
  +++ test.pl   2000/12/19 09:11:03     1.70.4.24
  @@ -1141,7 +1141,7 @@
            $testnum = -1 + $startnumber ;
               #next if (($ep1compat && !($opt_ep1))  || (!$ep1compat && 
!($opt_offline)));
   
  -            $ENV{EMBPERL_EP1COMPAT} = $ep1compat ;
  +            $ENV{EMBPERL_EP1COMPAT} = $ep1compat?1:0 ;
            print "\nTesting Embperl 1.x compatibility mode...\n\n" if ($ep1compat) ;
               
               foreach $testno (@tests)
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to