Lines 220-226
StringOpSymbol::eqRewrite(DagNode* subje
Link Here
|
220 |
case CODE('f', 'l'): |
220 |
case CODE('f', 'l'): |
221 |
{ |
221 |
{ |
222 |
bool error; |
222 |
bool error; |
223 |
//double fl = stringToDouble(left.c_str(), error); |
223 |
#ifdef ROPE_C_STR_BROKEN |
|
|
224 |
// |
225 |
// This kudge doesn't seem to be need nowadays, but copy() doesn't work. |
224 |
// |
226 |
// |
225 |
// This messing about is needed because Rope::c_str() |
227 |
// This messing about is needed because Rope::c_str() |
226 |
// fails in libstdc++-v3 |
228 |
// fails in libstdc++-v3 |
Lines 231-237
StringOpSymbol::eqRewrite(DagNode* subje
Link Here
|
231 |
t[len] = '\0'; |
233 |
t[len] = '\0'; |
232 |
double fl = stringToDouble(t, error); |
234 |
double fl = stringToDouble(t, error); |
233 |
delete [] t; |
235 |
delete [] t; |
234 |
// |
236 |
#else |
|
|
237 |
double fl = stringToDouble(left.c_str(), error); |
238 |
#endif |
235 |
if (error) |
239 |
if (error) |
236 |
goto fail; |
240 |
goto fail; |
237 |
return floatSymbol->rewriteToFloat(subject, context, fl); |
241 |
return floatSymbol->rewriteToFloat(subject, context, fl); |
Lines 282-287
StringOpSymbol::eqRewrite(DagNode* subje
Link Here
|
282 |
break; |
286 |
break; |
283 |
default: |
287 |
default: |
284 |
CantHappen("bad string op"); |
288 |
CantHappen("bad string op"); |
|
|
289 |
r = false; // avoid compiler warning |
285 |
} |
290 |
} |
286 |
Assert(trueTerm.getTerm() != 0 && falseTerm.getTerm() != 0, |
291 |
Assert(trueTerm.getTerm() != 0 && falseTerm.getTerm() != 0, |
287 |
"null true/false for relational op"); |
292 |
"null true/false for relational op"); |
Lines 358-363
StringOpSymbol::eqRewrite(DagNode* subje
Link Here
|
358 |
break; |
363 |
break; |
359 |
default: |
364 |
default: |
360 |
CantHappen("bad string op"); |
365 |
CantHappen("bad string op"); |
|
|
366 |
r = 0; // avoid compiler warning |
361 |
} |
367 |
} |
362 |
Assert(notFoundTerm.getTerm() != 0, "null notFound for find op"); |
368 |
Assert(notFoundTerm.getTerm() != 0, "null notFound for find op"); |
363 |
if (r == NONE) |
369 |
if (r == NONE) |
Lines 591-596
StringOpSymbol::ropeToNumber(const crope
Link Here
|
591 |
if (!isalnum(subject[j])) |
597 |
if (!isalnum(subject[j])) |
592 |
return false; |
598 |
return false; |
593 |
} |
599 |
} |
|
|
600 |
// |
601 |
// We have detected a fraction form. |
602 |
// |
603 |
#ifdef ROPE_C_STR_BROKEN |
604 |
// |
605 |
// This kudge doesn't seem to be need nowadays, but copy() doesn't work. |
606 |
// |
594 |
char* t = new char[len]; // longer than needed but who cares |
607 |
char* t = new char[len]; // longer than needed but who cares |
595 |
int dLen = len - (i + 1); |
608 |
int dLen = len - (i + 1); |
596 |
subject.copy(i + 1, dLen, t); |
609 |
subject.copy(i + 1, dLen, t); |
Lines 609-628
StringOpSymbol::ropeToNumber(const crope
Link Here
|
609 |
} |
622 |
} |
610 |
delete [] t; |
623 |
delete [] t; |
611 |
return true; |
624 |
return true; |
|
|
625 |
#else |
626 |
return mpz_set_str(denominator.get_mpz_t(), subject.substr(i + 1).c_str(), base) == 0 && |
627 |
mpz_set_str(numerator.get_mpz_t(), subject.substr(0,i).c_str(), base) == 0; |
628 |
#endif |
612 |
} |
629 |
} |
613 |
else |
630 |
else |
614 |
return false; |
631 |
return false; |
615 |
} |
632 |
} |
616 |
} |
633 |
} |
|
|
634 |
// |
635 |
// We have a regular integer form. |
636 |
// |
637 |
denominator = 0; |
638 |
#ifdef ROPE_C_STR_BROKEN |
639 |
// |
640 |
// This kudge doesn't seem to be need nowadays, but copy() doesn't work. |
641 |
// |
617 |
char* t = new char[len + 1]; |
642 |
char* t = new char[len + 1]; |
618 |
subject.copy(t); |
643 |
subject.copy(t); |
619 |
t[len] = '\0'; |
644 |
t[len] = '\0'; |
620 |
if (mpz_set_str(numerator.get_mpz_t(), t, base) == 0) |
645 |
if (mpz_set_str(numerator.get_mpz_t(), t, base) == 0) |
621 |
{ |
646 |
{ |
622 |
delete [] t; |
647 |
delete [] t; |
623 |
denominator = 0; |
|
|
624 |
return true; |
648 |
return true; |
625 |
} |
649 |
} |
626 |
delete [] t; |
650 |
delete [] t; |
627 |
return false; |
651 |
return false; |
|
|
652 |
#else |
653 |
return mpz_set_str(numerator.get_mpz_t(), subject.c_str(), base) == 0; |
654 |
#endif |
628 |
} |
655 |
} |