summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2013-07-13 16:19:42 -0700
committerKaz Kylheku <kaz@kylheku.com>2013-07-13 16:19:42 -0700
commit354b6cf42c3dad99aed8d7ed49454e69b5460824 (patch)
tree36166707a5855619c21456bdcf32d61eb104feb6
parentde3d43c9c1c102de5705984b016c0ab8d5cec602 (diff)
downloadtxr-354b6cf42c3dad99aed8d7ed49454e69b5460824.tar.gz
txr-354b6cf42c3dad99aed8d7ed49454e69b5460824.tar.bz2
txr-354b6cf42c3dad99aed8d7ed49454e69b5460824.zip
* parser.l: Diagnose unrecognized escape sequences in string
literals and quasiliterals and after @\. Support "\ " (backslash space) escape in string literals and quasiliterals.
-rw-r--r--ChangeLog7
-rw-r--r--parser.l10
2 files changed, 16 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 584e54b7..c090e34c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2013-07-13 Kaz Kylheku <kaz@kylheku.com>
+
+ * parser.l: Diagnose unrecognized escape sequences in string
+ literals and quasiliterals and after @\.
+ Support "\ " (backslash space) escape in string literals
+ and quasiliterals.
+
2013-07-12 Kaz Kylheku <kaz@kylheku.com>
* txr.1: Fix slipup, where call is referred to as funcall.
diff --git a/parser.l b/parser.l
index ad7b013f..8a95d2ec 100644
--- a/parser.l
+++ b/parser.l
@@ -564,6 +564,10 @@ UONLY {U2}{U}|{U3}{U}{U}|{U4}{U}{U}{U}
return TEXT;
}
+<SPECIAL>[\\]. {
+ yyerrorf(lit("unrecognized escape: \\~a"), chr(yytext[1]), nao);
+}
+
<SPECIAL,NESTED,BRACED>[;].* {
/* comment */
}
@@ -688,7 +692,7 @@ UONLY {U2}{U}|{U3}{U}{U}|{U4}{U}{U}{U}
return yytext[0];
}
-<STRLIT,QSILIT>[\\][abtnvfre"`'\\] {
+<STRLIT,QSILIT>[\\][abtnvfre "`'\\ ] {
yylval.chr = char_esc(yytext[1]);
return LITCHAR;
}
@@ -702,6 +706,10 @@ UONLY {U2}{U}|{U3}{U}{U}|{U4}{U}{U}{U}
return LITCHAR;
}
+<STRLIT,QSILIT>[\\]. {
+ yyerrorf(lit("unrecognized escape: \\~a"), chr(yytext[1]), nao);
+}
+
<CHRLIT>(x{HEX}+|o{OCT}+) {
yylval.chr = num_esc(yytext);
return LITCHAR;