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

Reply via email to