From 29a2a2595476d6ccb04d17c33979ad1a1a090d21 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Sat, 11 Jun 2016 15:22:20 -0700 Subject: [PATCH] peg.javascript: add some other escapes since we're doing this. :-) --- extra/peg/javascript/tokenizer/tokenizer-tests.factor | 8 ++++++-- extra/peg/javascript/tokenizer/tokenizer.factor | 9 +++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/extra/peg/javascript/tokenizer/tokenizer-tests.factor b/extra/peg/javascript/tokenizer/tokenizer-tests.factor index f3c5fc726e..1e9df1cf52 100644 --- a/extra/peg/javascript/tokenizer/tokenizer-tests.factor +++ b/extra/peg/javascript/tokenizer/tokenizer-tests.factor @@ -25,5 +25,9 @@ IN: peg.javascript.tokenizer.tests ] unit-test { - V{ T{ ast-string { value "abc\"def\"" } } } -} [ "\"abc\\\"def\\\"\"" tokenize-javascript ] unit-test \ No newline at end of file + V{ T{ ast-string { value "abc\"def\"" } } } +} [ "\"abc\\\"def\\\"\"" tokenize-javascript ] unit-test + +{ + V{ T{ ast-string { value "\b\f\n\r\t\v'\"\\" } } } +} [ "\"\\b\\f\\n\\r\\t\\v\\'\\\"\\\\\"" tokenize-javascript ] unit-test diff --git a/extra/peg/javascript/tokenizer/tokenizer.factor b/extra/peg/javascript/tokenizer/tokenizer.factor index 1a027e99e6..8dcbc70e85 100644 --- a/extra/peg/javascript/tokenizer/tokenizer.factor +++ b/extra/peg/javascript/tokenizer/tokenizer.factor @@ -48,10 +48,15 @@ Name = !(Keyword) iName => [[ ast-name boa ]] Number = Digits:ws '.' Digits:fs => [[ ws "." fs 3array "" concat-as string>number ast-number boa ]] | Digits => [[ >string string>number ast-number boa ]] -EscapeChar = "\\n" => [[ CHAR: \n ]] +EscapeChar = "\\b" => [[ CHAR: \b ]] + | "\\f" => [[ CHAR: \f ]] + | "\\n" => [[ CHAR: \n ]] | "\\r" => [[ CHAR: \r ]] | "\\t" => [[ CHAR: \t ]] - | "\\\"" => [[ CHAR: \" ]] + | "\\v" => [[ CHAR: \v ]] + | "\\'" => [[ CHAR: ' ]] + | "\\\"" => [[ CHAR: " ]] + | "\\\\" => [[ CHAR: \\ ]] StringChars1 = (EscapeChar | !('"""') .)* => [[ >string ]] StringChars2 = (EscapeChar | !('"') .)* => [[ >string ]] StringChars3 = (EscapeChar | !("'") .)* => [[ >string ]]