diff --git a/extra/peg/parsers/parsers.factor b/extra/peg/parsers/parsers.factor index 351e3b5fc1..f6c2820ac2 100755 --- a/extra/peg/parsers/parsers.factor +++ b/extra/peg/parsers/parsers.factor @@ -20,7 +20,7 @@ M: just-parser (compile) ( parser -- quot ) just-parser-p1 compiled-parser just-pattern curry ; : just ( parser -- parser ) - just-parser boa init-parser ; + just-parser boa wrap-peg ; : 1token ( ch -- parser ) 1string token ; diff --git a/extra/peg/peg-tests.factor b/extra/peg/peg-tests.factor index f9e4a0d4a6..62e041441f 100644 --- a/extra/peg/peg-tests.factor +++ b/extra/peg/peg-tests.factor @@ -181,7 +181,7 @@ IN: peg.tests { t } [ #! Ensure a circular parser doesn't loop infinitely [ f , "a" token , ] seq* - dup parsers>> + dup peg>> parsers>> dupd 0 swap set-nth compile word? ] unit-test diff --git a/extra/peg/peg.factor b/extra/peg/peg.factor index 3882315dc9..871db21084 100755 --- a/extra/peg/peg.factor +++ b/extra/peg/peg.factor @@ -245,12 +245,15 @@ C: peg-head GENERIC: (compile) ( peg -- quot ) -: execute-parser ( word -- result ) - pos get apply-rule dup failed? [ +: process-parser-result ( result -- result ) + dup failed? [ drop f ] [ input-slice swap - ] if ; inline + ] if ; + +: execute-parser ( word -- result ) + pos get apply-rule process-parser-result ; inline : parser-body ( parser -- quot ) #! Return the body of the word that is the compiled version @@ -323,7 +326,7 @@ TUPLE: token-parser symbol ; dup >r ?head-slice [ r> f f add-error ] [ - drop input-slice input-from "token '" r> append "'" append 1vector add-error f + drop pos get "token '" r> append "'" append 1vector add-error f ] if ; M: token-parser (compile) ( peg -- quot )