[Pkg-ocaml-maint-commits] [cppo] 03/11: Imported Upstream version 1.2.1

Stéphane Glondu glondu at moszumanska.debian.org
Tue Jan 26 14:56:28 UTC 2016


This is an automated email from the git hooks/post-receive script.

glondu pushed a commit to branch master
in repository cppo.

commit e0454ff56c5dc219c6ffff93d4df0c7cfacc1036
Author: Stephane Glondu <steph at glondu.net>
Date:   Tue Jan 26 15:48:04 2016 +0100

    Imported Upstream version 1.2.1
---
 cppo_eval.ml   |  2 +-
 cppo_lexer.mll | 26 ++++++++++++++++++++++++--
 test/Makefile  |  6 ++++++
 test/cond.ref  | 17 +++++++++++++++++
 test/loc.cppo  |  8 ++++++++
 test/loc.ref   | 21 +++++++++++++++++++++
 test/tuple.ref | 20 ++++++++++++++++++++
 7 files changed, 97 insertions(+), 3 deletions(-)

diff --git a/cppo_eval.ml b/cppo_eval.ml
index bb09c0e..f50417b 100644
--- a/cppo_eval.ml
+++ b/cppo_eval.ml
@@ -451,7 +451,7 @@ and expand_node ?(top = false) g env0 x =
           with Not_found -> None
         in
         let g =
-          if top && def <> None then
+          if top && def <> None || g.call_loc == dummy_loc then
             { g with call_loc = loc }
           else g
         in
diff --git a/cppo_lexer.mll b/cppo_lexer.mll
index 94d4c47..ea590ab 100644
--- a/cppo_lexer.mll
+++ b/cppo_lexer.mll
@@ -102,6 +102,26 @@ let add_char env c =
 let get env = Buffer.contents env.buf
 
 let long_loc e = (e.token_start, pos2 e.lexbuf)
+
+let cppo_directives = [
+  "define";
+  "elif";
+  "else";
+  "endif";
+  "error";
+  "if";
+  "ifdef";
+  "ifndef";
+  "include";
+  "undef";
+  "warning";
+]
+
+let is_reserved_directive =
+  let tbl = Hashtbl.create 20 in
+  List.iter (fun s -> Hashtbl.add tbl s ()) cppo_directives;
+  fun s -> Hashtbl.mem tbl s
+
 }
 
 (* standard character classes used for macro identifiers *)
@@ -271,8 +291,10 @@ and directive e = parse
         add e (lexeme lexbuf);
         TEXT (long_loc e, true, get e) }
 
-  | blank* ['a'-'z']+
-      { e.in_directive <- false;
+  | blank* (['a'-'z']+ as s)
+      { if is_reserved_directive s then
+          error (loc lexbuf) "cppo directive with missing or wrong arguments";
+        e.in_directive <- false;
         add e (lexeme lexbuf);
         TEXT (long_loc e, false, get e) }
 
diff --git a/test/Makefile b/test/Makefile
index cfbbcb3..1521b86 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -15,9 +15,15 @@ comments:
 
 cond:
 	../cppo cond.cppo > cond.out
+	diff -u cond.ref cond.out
 
 tuple:
 	../cppo tuple.cppo > tuple.out
+	diff -u tuple.ref tuple.out
+
+loc:
+	../cppo loc.cppo > loc.out
+	diff -u loc.ref loc.out
 
 version:
 	../cppo -V X:123.05.2-alpha.1+foo-2.1 version.cppo > version.out
diff --git a/test/cond.ref b/test/cond.ref
new file mode 100644
index 0000000..a9e2902
--- /dev/null
+++ b/test/cond.ref
@@ -0,0 +1,17 @@
+
+  
+# 7 "cond.cppo"
+  banana
+
+  
+# 17
+  apricot
+
+    
+# 28
+    nest
+
+
+    
+# 45
+    sea urchin
diff --git a/test/loc.cppo b/test/loc.cppo
new file mode 100644
index 0000000..d7c2c52
--- /dev/null
+++ b/test/loc.cppo
@@ -0,0 +1,8 @@
+#define loc __FILE__ __LINE__
+loc
+X(loc)
+X(loc)
+X(Y(loc))
+
+#define F(x) loc
+F()
diff --git a/test/loc.ref b/test/loc.ref
new file mode 100644
index 0000000..bb6c6b2
--- /dev/null
+++ b/test/loc.ref
@@ -0,0 +1,21 @@
+# 2 "loc.cppo"
+  "loc.cppo"   2  
+# 3
+X(
+# 3
+    "loc.cppo"   3  
+# 3
+)
+X(
+# 4
+    "loc.cppo"   4  
+# 4
+)
+X(Y(
+# 5
+      "loc.cppo"   5  
+# 5
+  ))
+
+# 8
+   "loc.cppo"   8   
diff --git a/test/tuple.ref b/test/tuple.ref
new file mode 100644
index 0000000..23b2e46
--- /dev/null
+++ b/test/tuple.ref
@@ -0,0 +1,20 @@
+  
+# 5 "tuple.cppo"
+  pistachios
+
+  
+# 9
+  trees
+
+  
+# 16
+  waves
+
+
+  
+# 28
+  bees
+
+  
+# 34
+  steamboat

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ocaml-maint/packages/cppo.git



More information about the Pkg-ocaml-maint-commits mailing list