From: Sam H. v. a. <act...@de...> - 2005-01-07 20:53:13
|
Log Message: ----------- HEAD backport: Fixed a bug in processing absolute values with implicit multiplication. (dpvc) Tags: ---- rel-2-1-patches Modified Files: -------------- pg/lib: Parser.pm Revision Data ------------- Index: Parser.pm =================================================================== RCS file: /webwork/cvs/system/pg/lib/Parser.pm,v retrieving revision 1.22 retrieving revision 1.22.2.1 diff -Llib/Parser.pm -Llib/Parser.pm -u -r1.22 -r1.22.2.1 --- lib/Parser.pm +++ lib/Parser.pm @@ -111,7 +111,7 @@ return if ($self->{error}); } $self->Close('start'); return if ($self->{error}); - $self->{tree} = $self->{stack}->[0]->{value}; + $self->{tree} = $self->{stack}[0]{value}; } @@ -119,7 +119,7 @@ # sub top { my $self = shift; my $i = shift || 0; - return $self->{stack}->[$i-1]; + return $self->{stack}[$i-1]; } sub prev {(shift)->top(-1)} @@ -267,8 +267,15 @@ my $self = shift; my $type = shift; my $paren = $self->{context}{parens}{$type}; if ($self->state eq 'operand') { - if ($type eq $paren->{close}) - {$self->Close($type,$self->{ref}); return} else {$self->ImplicitMult()} + if ($type eq $paren->{close}) { + my $stack = $self->{stack}; my $i = scalar(@{$stack})-1; + while ($i >= 0 && $stack->[$i]{type} ne "open") {$i--} + if ($i >= 0 && $stack->[$i]{value} eq $type) { + $self->Close($type,$self->{ref}); + return; + } + } + $self->ImplicitMult(); } $self->push({type => 'open', value => $type, ref => $self->{ref}}); } |