aboutsummaryrefslogtreecommitdiffstats
path: root/cparser/pre_parser_aux.ml
diff options
context:
space:
mode:
authorJacques-Henri Jourdan <jacques-henri.jourdan@inria.fr>2015-09-30 18:41:50 +0200
committerJacques-Henri Jourdan <jacques-henri.jourdan@inria.fr>2015-09-30 18:41:50 +0200
commit504228b1f7b875550eae9e3782a5f2c1033b0233 (patch)
treef3e5121f9694fb57974697475f88361b42da8330 /cparser/pre_parser_aux.ml
parentc212ab7a8adea516db72f17d818393629dbde1b3 (diff)
downloadcompcert-kvx-504228b1f7b875550eae9e3782a5f2c1033b0233.tar.gz
compcert-kvx-504228b1f7b875550eae9e3782a5f2c1033b0233.zip
Fixed a few bugs in the pre parser. In particular, the following code
was not parsed correctly: typedef int a; int f() { for(int a; ;) if(1); a * x; } Additionnaly, I tried to add some comments in the pre-parser code, especially for the different hacks used to solve various conflicts.
Diffstat (limited to 'cparser/pre_parser_aux.ml')
-rw-r--r--cparser/pre_parser_aux.ml16
1 files changed, 14 insertions, 2 deletions
diff --git a/cparser/pre_parser_aux.ml b/cparser/pre_parser_aux.ml
index 55dfdfde..c6b48608 100644
--- a/cparser/pre_parser_aux.ml
+++ b/cparser/pre_parser_aux.ml
@@ -18,8 +18,20 @@ type identifier_type =
| TypedefId
| OtherId
-let push_context:(unit -> unit) ref= ref (fun () -> assert false)
-let pop_context:(unit -> unit) ref = ref (fun () -> assert false)
+(* These functions push and pop a context on the contexts stack. *)
+let open_context:(unit -> unit) ref = ref (fun () -> assert false)
+let close_context:(unit -> unit) ref = ref (fun () -> assert false)
+(* Applying once this functions saves the whole contexts stack, and
+ applying it the second time restores it.
+
+ This is mainly used to rollback the context stack to a previous
+ state. This is usefull for example when we pop too much contexts at
+ the end of the first branch of an if statement. See
+ pre_parser.mly. *)
+let save_contexts_stk:(unit -> (unit -> unit)) ref = ref (fun _ -> assert false)
+
+(* Change the context at the top of the top stack of context, by
+ changing an identifier to be a varname or a typename*)
let declare_varname:(string -> unit) ref = ref (fun _ -> assert false)
let declare_typename:(string -> unit) ref = ref (fun _ -> assert false)