Mailing List Archive

svn commit: r1723934 - /perl/embperl/trunk/Embperl/Form.pm
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-unsubscribe@perl.apache.org
For additional commands, e-mail: embperl-cvs-help@perl.apache.org