Browse code

fix -a^b which was interpreted as (-a)^b

Originally committed as revision 6713 to svn://svn.ffmpeg.org/ffmpeg/trunk

Michael Niedermayer authored on 2006/10/17 04:06:56
Showing 1 changed files
... ...
@@ -209,19 +209,22 @@ static double evalPrimary(Parser *p){
209 209
     return d;
210 210
 }
211 211
 
212
-static double evalPow(Parser *p){
213
-    int sign= (*p->s == '+') - (*p->s == '-');
214
-    p->s += sign&1;
215
-    return (sign|1) * evalPrimary(p);
212
+static double evalPow(Parser *p, int *sign){
213
+    *sign= (*p->s == '+') - (*p->s == '-');
214
+    p->s += *sign&1;
215
+    return evalPrimary(p);
216 216
 }
217 217
 
218 218
 static double evalFactor(Parser *p){
219
-    double ret= evalPow(p);
219
+    int sign, sign2;
220
+    double ret, e;
221
+    ret= evalPow(p, &sign);
220 222
     while(p->s[0]=='^'){
221 223
         p->s++;
222
-        ret= pow(ret, evalPow(p));
224
+        e= evalPow(p, &sign2);
225
+        ret= pow(ret, (sign2|1) * e);
223 226
     }
224
-    return ret;
227
+    return (sign|1) * ret;
225 228
 }
226 229
 
227 230
 static double evalTerm(Parser *p){