Author: richter
Date: Sun Jan 10 14:49:24 2016
New Revision: 1723934

URL: http://svn.apache.org/viewvc?rev=1723934&view=rev
Log:
Fix circular references

Modified:
    perl/embperl/trunk/Embperl/Form.pm

Modified: perl/embperl/trunk/Embperl/Form.pm
URL: 
http://svn.apache.org/viewvc/perl/embperl/trunk/Embperl/Form.pm?rev=1723934&r1=1723933&r2=1723934&view=diff
==============================================================================
--- perl/embperl/trunk/Embperl/Form.pm (original)
+++ perl/embperl/trunk/Embperl/Form.pm Sun Jan 10 14:49:24 2016
@@ -101,8 +101,11 @@ sub sub_new
         $self -> {code_refs}    = $self -> parent_form -> {code_refs} ;
         $self -> {do_validate}  = $self -> parent_form -> {do_validate} ;
         }
-    push @{$self -> {code_refs}}, $self if ($self -> has_code_refs) ;
-
+    if ($self -> has_code_refs)
+        {
+        push @{$self -> {code_refs}}, $self  ;
+        weaken ($self -> {code_refs}[-1]) ;
+        }
     $self -> new_controls ($controls, $options, undef, $id, $options -> 
{masks}, $options -> {defaults}) ;
 
     $self -> {noframe} = 1 if ($controls && @$controls > 0 &&
@@ -312,11 +315,31 @@ sub new_controls
             $control = $self -> new_object ($packages, $type, $control) ;
             if (!$no_init)
                 {
-                push @{$self -> {init_data}}, $control if ($control -> can 
('init_data')) ;
-                push @{$self -> {init_markup}}, $control if ($control -> can 
('init_markup')) ;
-                push @{$self -> {prepare_fdat}}, $control if ($control -> can 
('prepare_fdat')) ;
-                push @{$self -> {code_refs}}, $control if ($control -> 
has_code_refs) ;
-                push @{$self -> {do_validate}}, $control if ($control -> 
has_validate_rules) ;
+                if ($control -> can ('init_data'))
+                    {
+                    push @{$self -> {init_data}}, $control ;
+                    weaken ($self -> {init_data}[-1]) ;
+                    }
+                if ($control -> can ('init_markup'))
+                    {
+                    push @{$self -> {init_markup}}, $control ;
+                    weaken ($self -> {init_markup}[-1]) ;
+                    }
+                if ($control -> can ('prepare_fdat'))
+                    {
+                    push @{$self -> {prepare_fdat}}, $control ;
+                    weaken ($self -> {prepare_fdat}[-1]) ;
+                    }
+                if ($control -> has_code_refs)
+                    {
+                    push @{$self -> {code_refs}}, $control ;
+                    weaken ($self -> {code_refs}[-1]) ;
+                    }
+                if ($control -> has_code_refs)
+                    {
+                    push @{$self -> {do_validate}}, $control ;
+                    weaken ($self -> {do_validate}[-1]) ;
+                    }
                 push @{$self -> {constrain_attrs}}, $control -> 
constrain_attrs ;
                 }
             }
@@ -354,7 +377,8 @@ sub new_controls
                 local $options -> {disable} = $control -> {disables}[$i] ;
                 my $subform = $class -> sub_new ($subcontrols, $options, 
$ctlid, 0, $self -> {formptr}) ;
                 $subform -> {text} ||= $control -> {options}[$i] if (exists 
($control -> {options}) && $control -> {options}[$i]) ;
-                $subform -> {parent_control} = $control ;
+                $subform -> {parent_control} = $control ;
+                weaken ($subform -> {parent_control}) ;
                 push @ids, $ctlid ;
                 push @obj, $subform ;
                 $i++ ;



---------------------------------------------------------------------
To unsubscribe, e-mail: embperl-cvs-unsubscr...@perl.apache.org
For additional commands, e-mail: embperl-cvs-h...@perl.apache.org

Reply via email to