diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2006-10-16 23:06:56 +0400 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2006-10-16 23:06:56 +0400 |
commit | 2c409cc7af4a593a9a96162b6faeb9e814ee3eeb (patch) | |
tree | cc89ed92caf35bf38e9603add170626466eb6b7c /libavcodec/eval.c | |
parent | cacb17b47f18a697900cd2fd4ecb66535c52c873 (diff) |
fix -a^b which was interpreted as (-a)^b
Originally committed as revision 6713 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/eval.c')
-rw-r--r-- | libavcodec/eval.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/libavcodec/eval.c b/libavcodec/eval.c index 9bc0c4b725..a676b95ca7 100644 --- a/libavcodec/eval.c +++ b/libavcodec/eval.c @@ -209,19 +209,22 @@ static double evalPrimary(Parser *p){ return d; } -static double evalPow(Parser *p){ - int sign= (*p->s == '+') - (*p->s == '-'); - p->s += sign&1; - return (sign|1) * evalPrimary(p); +static double evalPow(Parser *p, int *sign){ + *sign= (*p->s == '+') - (*p->s == '-'); + p->s += *sign&1; + return evalPrimary(p); } static double evalFactor(Parser *p){ - double ret= evalPow(p); + int sign, sign2; + double ret, e; + ret= evalPow(p, &sign); while(p->s[0]=='^'){ p->s++; - ret= pow(ret, evalPow(p)); + e= evalPow(p, &sign2); + ret= pow(ret, (sign2|1) * e); } - return ret; + return (sign|1) * ret; } static double evalTerm(Parser *p){ |