From 8df1ac4d876a0a1f73cd8e57646f57f3f867c5fd Mon Sep 17 00:00:00 2001 From: Enrico Tassi Date: Wed, 11 Oct 2023 16:58:38 +0200 Subject: [PATCH] Fix parser (#199) --- .github/workflows/main.yml | 7 ++++++- CHANGES.md | 8 ++++++++ src/parser/parse.ml | 14 ++++++++++---- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 53060272b..4f3d96502 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -66,12 +66,15 @@ jobs: - name: Extra setup on Linux if: runner.os == 'Linux' - run: opam exec -- echo "workspace=${{ github.workspace }}" >> $GITHUB_ENV + run: | + opam exec -- echo "workspace=${{ github.workspace }}" >> $GITHUB_ENV + sudo apt-get install wdiff - name: Extra setup on macOS if: runner.os == 'macOS' run: | brew install gnu-time + brew install wdiff opam exec -- echo "workspace=${{ github.workspace }}" >> $GITHUB_ENV - name: Extra setup on Windows @@ -82,9 +85,11 @@ jobs: opam exec -- sed -i ' ' tests/sources/*.elpi & "$Env:CYGWIN_ROOT/setup-x86_64.exe" -q -P time & "$Env:CYGWIN_ROOT/setup-x86_64.exe" -q -P which + & "$Env:CYGWIN_ROOT/setup-x86_64.exe" -q -P wdiff opam exec -- which which opam exec -- time which opam exec -- which time + opam exec -- which wdiff # Build ###################################################################### # diff --git a/CHANGES.md b/CHANGES.md index 3d4a55ddb..a3c57bd54 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,11 @@ +# v1.17.4 (October 2023) + +Requires Menhir 20211230 and OCaml 4.08 or above. +Camlp5 8.0 or above is optional. + +Parser: + - Fix location handling (used to ignore the char count of the initial loc) + # v1.17.3 (September 2023) Requires Menhir 20211230 and OCaml 4.08 or above. diff --git a/src/parser/parse.ml b/src/parser/parse.ml index f0170e50d..5ffbc4587 100644 --- a/src/parser/parse.ml +++ b/src/parser/parse.ml @@ -92,9 +92,16 @@ let to_lexing_loc { Util.Loc.source_name; line; line_starts_at; source_start; _ pos_bol = line_starts_at; pos_cnum = source_start; } +let lexing_set_position lexbuf loc = + let loc = to_lexing_loc loc in + let open Lexing in + lexbuf.lex_curr_p <- { loc with pos_fname = lexbuf.lex_curr_p.pos_fname }; + lexbuf.lex_abs_pos <- loc.pos_cnum; + lexbuf.lex_start_p <- loc; + lexbuf.lex_curr_p <- loc + let goal_from ~loc lexbuf = - let lexbuf = { lexbuf with Lexing.lex_start_p = to_lexing_loc loc } in - let lexbuf = { lexbuf with Lexing.lex_curr_p = to_lexing_loc loc } in + lexing_set_position lexbuf loc; snd @@ parse Grammar.goal "" lexbuf let goal ~loc ~text = @@ -103,8 +110,7 @@ let goal ~loc ~text = let program_from ~loc lexbuf = Hashtbl.clear already_parsed; - let lexbuf = { lexbuf with Lexing.lex_start_p = to_lexing_loc loc } in - let lexbuf = { lexbuf with Lexing.lex_curr_p = to_lexing_loc loc } in + lexing_set_position lexbuf loc; snd @@ parse Grammar.program "" lexbuf let program ~file =