summaryrefslogtreecommitdiffstats
path: root/camlp4/ocaml_src/lib/token.ml
diff options
context:
space:
mode:
authorLuc Maranget <luc.maranget@inria.fr>2003-02-24 15:13:01 +0000
committerLuc Maranget <luc.maranget@inria.fr>2003-02-24 15:13:01 +0000
commit22589806252efb6ab2d629eed8a3faf63dfbeb95 (patch)
treeb6f350e0226953f925515394165455bead221e2f /camlp4/ocaml_src/lib/token.ml
parent477788b86b4864f67bf846c2cb2d314aa50fb737 (diff)
merci damien (locations fantomes)
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@5400 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'camlp4/ocaml_src/lib/token.ml')
-rw-r--r--camlp4/ocaml_src/lib/token.ml19
1 files changed, 19 insertions, 0 deletions
diff --git a/camlp4/ocaml_src/lib/token.ml b/camlp4/ocaml_src/lib/token.ml
index 99bbd2f21..63f09bc19 100644
--- a/camlp4/ocaml_src/lib/token.ml
+++ b/camlp4/ocaml_src/lib/token.ml
@@ -110,6 +110,8 @@ let mstore len s =
let get_buff len = String.sub !buff 0 len;;
let valch x = Char.code x - Char.code '0';;
+let valch_a x = Char.code x - Char.code 'a' + 10;;
+let valch_A x = Char.code x - Char.code 'A' + 10;;
let rec backslash s i =
if i = String.length s then raise Not_found
@@ -123,6 +125,7 @@ let rec backslash s i =
| '\"' -> '\"', i + 1
| '\'' -> '\'', i + 1
| '0'..'9' as c -> backslash1 (valch c) s (i + 1)
+ | 'x' -> backslash1h s (i + 1)
| _ -> raise Not_found
and backslash1 cod s i =
if i = String.length s then '\\', i - 1
@@ -136,6 +139,22 @@ and backslash2 cod s i =
match s.[i] with
'0'..'9' as c -> Char.chr (10 * cod + valch c), i + 1
| _ -> '\\', i - 2
+and backslash1h s i =
+ if i = String.length s then '\\', i - 1
+ else
+ match s.[i] with
+ '0'..'9' as c -> backslash2h (valch c) s (i + 1)
+ | 'a'..'f' as c -> backslash2h (valch_a c) s (i + 1)
+ | 'A'..'F' as c -> backslash2h (valch_A c) s (i + 1)
+ | _ -> '\\', i - 1
+and backslash2h cod s i =
+ if i = String.length s then '\\', i - 2
+ else
+ match s.[i] with
+ '0'..'9' as c -> Char.chr (16 * cod + valch c), i + 1
+ | 'a'..'f' as c -> Char.chr (16 * cod + valch_a c), i + 1
+ | 'A'..'F' as c -> Char.chr (16 * cod + valch_A c), i + 1
+ | _ -> '\\', i - 2
;;
let rec skip_indent s i =