Scanning: 1) rationalize end-of-input everywhere, 2) prevent infinite loop at end-of-input, 3) use positive chars.
Fixes issue #25. (char 255 aliased to -1 and missing tests for end of input). 1) All layers of input scanning now share a single EndOfInput value. This avoids translation of it across layers of encapsulation. 2) Some places looking for end of line were not stopping on EndOfInput. 3) Use of "char" for the input made char values > 127 be negative numbers. This allowed for aliasing of 255 to -1, etc. This is fixed by using unsigned char.
This commit is contained in:
parent
91b977e172
commit
c777fc2c4c
15 changed files with 134 additions and 112 deletions
|
|
@ -144,18 +144,12 @@ int TPpContext::LookUpAddString(const char* s)
|
|||
//
|
||||
const char* TPpContext::GetAtomString(int atom)
|
||||
{
|
||||
if (atom == 0)
|
||||
return "<null atom>";
|
||||
if (atom < 0)
|
||||
return "<EOF>";
|
||||
if ((size_t)atom < stringMap.size()) {
|
||||
if (stringMap[atom] == 0)
|
||||
return "<invalid atom>";
|
||||
else
|
||||
return stringMap[atom]->c_str();
|
||||
}
|
||||
if ((size_t)atom >= stringMap.size())
|
||||
return "<bad token>";
|
||||
|
||||
return "<invalid atom>";
|
||||
const TString* atomString = stringMap[atom];
|
||||
|
||||
return atomString ? atomString->c_str() : "<bad token>";
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue