From 89caa99ed29ff4844105044e2b8976cb77f6b39a Mon Sep 17 00:00:00 2001
From: Virgile Prevosto <virgile.prevosto@m4x.org>
Date: Tue, 14 Jan 2020 19:05:49 +0100
Subject: [PATCH] [lexer] more accurate lexing of filenames in #line directives

---
 src/kernel_internals/parsing/clexer.mll      |  4 +++-
 src/kernel_internals/parsing/logic_lexer.mll | 17 +++++++++--------
 2 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/src/kernel_internals/parsing/clexer.mll b/src/kernel_internals/parsing/clexer.mll
index 045d1ee3d24..48384ab69af 100644
--- a/src/kernel_internals/parsing/clexer.mll
+++ b/src/kernel_internals/parsing/clexer.mll
@@ -742,7 +742,9 @@ and file =  parse
 |       '"' ([^ '\012' '\t' '"']* as d) "//\"" {
         E.setCurrentWorkingDirectory d;
                                  endline lexbuf }
-|	'"' ([^ '\012' '\t' '"']* as f) '"' {
+|	'"' (([^ '\012' '\t' '"']|"\\\"")* as f) '"' {
+        let unescape = Str.regexp_string "\\\"" in
+        let f = Str.global_replace unescape "\"" f in
                                  E.setCurrentFile f;
 				 endline lexbuf}
 
diff --git a/src/kernel_internals/parsing/logic_lexer.mll b/src/kernel_internals/parsing/logic_lexer.mll
index cf1317591f6..e122cd7f80c 100644
--- a/src/kernel_internals/parsing/logic_lexer.mll
+++ b/src/kernel_internals/parsing/logic_lexer.mll
@@ -446,14 +446,15 @@ and hash = parse
 and file =  parse
         '\n'		        { update_newline_loc lexbuf; token lexbuf}
 |	[' ''\t''\r']			{ file lexbuf}
-|	'"' [^ '\012' '\t' '"']* '"'
-            {
-              let n = Lexing.lexeme lexbuf in
-              let n1 = String.sub n 1
-                ((String.length n) - 2) in
-              update_file_loc lexbuf n1;
-	      endline lexbuf
-            }
+|	'"' ([^ '\012' '\t' '"']|"\\\"")* '"' {
+    let n = Lexing.lexeme lexbuf in
+    let n1 = String.sub n 1
+        ((String.length n) - 2) in
+    let unescape = Str.regexp_string "\\\"" in
+    let n1 = Str.global_replace unescape "\"" n1 in
+    update_file_loc lexbuf n1;
+    endline lexbuf
+  }
 
 |	_			{ endline lexbuf}
 
-- 
GitLab