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}});
}
|