Originally committed as revision 6713 to svn://svn.ffmpeg.org/ffmpeg/trunk
| ... | ... |
@@ -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){
|