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