Infinite left recursion now causes a failed parser rather than a call stack error
parent
3003911e07
commit
38beaac720
|
@ -52,7 +52,11 @@ PRIVATE>
|
||||||
packrat-cache get [
|
packrat-cache get [
|
||||||
2dup get-cached dup not-in-cache? [
|
2dup get-cached dup not-in-cache? [
|
||||||
! "cache missed: " write over parser-id number>string write " - " write nl ! pick .
|
! "cache missed: " write over parser-id number>string write " - " write nl ! pick .
|
||||||
drop [ (parse) dup ] 2keep put-cached
|
drop
|
||||||
|
#! Protect against left recursion blowing the callstack
|
||||||
|
#! by storing a failed parse in the cache.
|
||||||
|
[ f ] dipd [ put-cached ] 2keep
|
||||||
|
[ (parse) dup ] 2keep put-cached
|
||||||
] [
|
] [
|
||||||
! "cache hit: " write over parser-id number>string write " - " write nl ! pick .
|
! "cache hit: " write over parser-id number>string write " - " write nl ! pick .
|
||||||
2nip
|
2nip
|
||||||
|
|
Loading…
Reference in New Issue