
vladimir@codesourcery.com wrote:
Fun. The most relevant code is probably in tools/jam/src/regexp.c, and looks like this:
case ANYBUT: if (*reginput == '\0' || strchr(OPERAND(scan), *reginput) != NULL) return(0); reginput++; break;
you might want to modify it like this:
case ANYBUT: if (strcmp (reginput, "03") == 0) printf ("you were supposed to break here\n"); if (*reginput == '\0' || strchr(OPERAND(scan), *reginput) != NULL) return(0); reginput++; break;
then rebuild bjam and set breakpoint on the printf. I am not aware of any assumptions that 0-9 range is <0x80, but apparently something does not like this, or something else
- Volodya
Thanks for the hint! Apparently, the match in numbers.jam is performed by the code in glob.c that assumes that all character values are <128. Surprisingly it did not fail in a more drastic way since array bounds are being exceeded. I adapted glob.c for EBCDIC and the numbers.check rule now works correctly. Next I will have a closer look at regexp.c . It is being heavily used with expressions like [a-z] that have a very strange meaning whithout taking into account that a-z on EBCDIC is not encoded as a consecutive range of character values. I keep you tuned on the progress. regards, Norbert