fix bad word detection

llvm
Clyne 2 years ago
parent 24a61f3c99
commit 12cb6b9e56
Signed by: clyne
GPG Key ID: 3267C8EBF3F9AFC7

@ -1,6 +1,9 @@
( : variable create 0 , ; )
( : create here const ; )
: 1+ 1 + ;
: 1- 1 - ;
: ! 2 _! ;
: @ 2 _@ ;
: , here ! 2 allot ;
@ -38,14 +41,6 @@
: 2* 2 * ;
: 2/ 2 / ;
: 0= 0 = ;
: 0< 0 < ;
: <= 2dup < -rot = and ;
: > <= 0= ;
: 1+ 1 + ;
: 1- 1 - ;
: 2drop drop drop ;
: 2dup over over ;
: 2over 3 pick 3 pick ;
@ -55,6 +50,11 @@
: 2! swap over ! cell+ ! ;
: 2@ dup cell+ @ swap @ ;
: 0= 0 = ;
: 0< 0 < ;
: <= 2dup - 1- 0< ;
: > <= 0= ;
: cr 9 emit ;
: bl 32 ;
: space bl emit ;

@ -74,15 +74,16 @@ ParseStatus Parser::parseWord(State& state, Word word)
state.execute(e);
}
} else {
char buf[word.size()];
char buf[word.size() + 1];
for (unsigned i = 0; i < word.size(); ++i)
buf[i] = state.dict.readbyte(word.start + i);
buf[word.size()] = '\0';
char *p;
const auto base = state.dict.read(0);
const Cell l = std::strtol(buf, &p, base);
if (p != buf) {
if (std::distance(buf, p) == word.size()) {
if (state.compiling()) {
state.dict.add(CoreWords::HiddenWordLiteral);
state.dict.add(l);

Loading…
Cancel
Save