The pattern of failures certainly looks like that of a program that assumes char is signed... and, indeed, this seems to fix it:
- In io.web, change the return type of get() and peek() from char to int. - In scan.web, change the type of prev_char, curr_char and next_char from char to int.