So finally, I use only the 0.44.1 patch and this one. Right ?
Because I have reinstalled everything using these two patch and the same
error appears :
sabcmd: expr.cpp:1558: char * Expression::tostringCharPtr():
l'assertion `(functor == EXF_ATOM) && (type == EX_STRING)' a �chou�.
Abandon
Did I miss something ?
nico
Kaiserovi a �crit :
>
> OK it wasn't that hard after all; this patch should work with 0.44.1
> (ie. with our patch #1 applied). Use inside of the engine subdirectory,
> no -p or --strip argument is necessary. It fixes a few other things as
> well.
>
> 'patch' might complain about Robin's patch if you used it; you can undo
> that patch using "patch -R" (reversed).
>
> Hope that helps (and works!),
> Tom
>
> ---------------------patch begins
> --- expr.cpp Tue Nov 14 17:56:31 2000
> +++ expr.cpp.new Tue Nov 14 17:58:14 2000
> @@ -2098,13 +2098,20 @@
> E( e -> parse(t,from,leftmost - 1) );
> int another = leftmost,
> lastone = leftmost;
> - t.getDelim(another);
> + // tom 24-10-00
> + // the following fails for "x and not(x and x)"
> + // t.getDelim(another);
> + // changing it to:
> + another = t.findTop(t.items[another]->tok, another+1);
> while((another <= to) && (t.items[another]->tok !=
> TOK_END))
> {
> args.append(e = new Expression(ownerV,proc));
> E( e -> parse(t, lastone + 1, another - 1));
> lastone = another;
> - t.getDelim(another);
> +
> + // tom 14-11-00
> + // t.getDelim(another); failed too, for "x and
> x and (x and x)"
> + another = t.findTop(t.items[another]->tok,
> another+1);
> };
> args.append(e = new Expression(ownerV,proc));
> E( e -> parse(t,lastone + 1, to) );
> @@ -2692,13 +2699,14 @@
> case EXFF_SUBSTRING_AFTER:
> {
> Str s;
> - const Str& theSmaller = atoms[1] -> tostringRef();
> - char *thestring;
> + const Str&
> + theBigger = atoms[0] -> tostring(),
> + theSmaller = atoms[1] -> tostring();
> checkArgsCount(2);
> checkIsString2(0,1);
> int where = firstOccurence(
> // changing tostringCharPtr() to tostring():
> - thestring = atoms[0] -> tostring(),
> + theBigger,
> theSmaller);
> if (where == -1)
> s.empty();
> @@ -2709,10 +2717,10 @@
> if (where == 0)
> s.empty();
> else
> - getBetween(s, thestring, 0, where-1);
> + getBetween(s, theBigger, 0, where-1);
> }
> else
> - getBetween(s, thestring, where +
> theSmaller.length(), -1);
> + getBetween(s, theBigger, where +
> theSmaller.length(), -1);
> };
> retxpr.setAtom(s);
> }; break;
> @@ -2799,11 +2807,14 @@
> checkIsString(2);
>
> DStr resulting;
> + Str baseStr = atoms[0] -> tostring(),
> + srcStr = atoms[1] -> tostring(),
> + destStr = atoms[2] -> tostring();
> char *q,
> // changing tostringCharPtr() to tostring():
> - *p = atoms[0] -> tostring(),
> - *src = atoms[1] -> tostring(),
> - *dest = atoms[2] -> tostring();
> + *p = baseStr,
> + *src = srcStr,
> + *dest = destStr;
> int ndx,
> destlen = strlen(dest);
> while(*p)
>
> -----------------------------patch ends