Skip to content
Snippets Groups Projects
Commit 9a58bce4 authored by David Bühler's avatar David Bühler Committed by Michele Alberti
Browse files

[server] New synchronized array kernel.ast.markerKind.

Contains, for each created marker:
- the kind of the marker;
- if possible, a string identifying the marker for the end-user.
parent e10b5341
No related branches found
No related tags found
No related merge requests found
...@@ -41,6 +41,41 @@ let () = Request.register ~page ...@@ -41,6 +41,41 @@ let () = Request.register ~page
(* --- Printers --- *) (* --- Printers --- *)
(* -------------------------------------------------------------------------- *) (* -------------------------------------------------------------------------- *)
(* The kind of a marker. *)
module MarkerKind = struct
let t =
Enum.dictionary ~page ~name:"markerkind" ~title:"Marker kind"
~descr:(Md.plain "Marker kind") ()
let kind name = Enum.tag t ~name ~descr:(Md.plain name) ()
let expr = kind "expression"
let lval = kind "lvalue"
let var = kind "variable"
let fct = kind "function"
let decl = kind "declaration"
let stmt = kind "statement"
let glob = kind "global"
let term = kind "term"
let prop = kind "property"
let tag =
let open Printer_tag in
function
| PStmt _ -> stmt
| PStmtStart _ -> stmt
| PVDecl _ -> decl
| PLval (_, _, (Var vi, NoOffset)) ->
if Cil.isFunctionType vi.vtype then fct else var
| PLval _ -> lval
| PExp _ -> expr
| PTermLval _ -> term
| PGlobal _ -> glob
| PIP _ -> prop
let data = Enum.publish t ~tag ()
include (val data : S with type t = Printer_tag.localizable)
end
module Marker = module Marker =
struct struct
...@@ -75,6 +110,39 @@ struct ...@@ -75,6 +110,39 @@ struct
let default = index let default = index
end) end)
let get_name = function
| PLval (_, _, (Var vi, NoOffset)) -> Some vi.vname
| PLval (_, _, lval) -> Some (Format.asprintf "%a" Printer.pp_lval lval)
| PExp (_, _, expr) -> Some (Format.asprintf "%a" Printer.pp_exp expr)
| PStmt _ | PStmtStart _ | PVDecl _
| PTermLval _ | PGlobal _| PIP _ -> None
let iter f =
Localizable.Hashtbl.iter (fun key str -> f (key, str)) (STATE.get ()).tags
let array =
let model = States.model () in
let () =
States.column ~model
~name:"kind" ~descr:(Md.plain "Marker kind")
~data:(module MarkerKind) ~get:fst ()
in
let () =
States.column ~model
~name:"name"
~descr:(Md.plain "Marker identifier for the end-user, if any")
~data:(module Jstring.Joption)
~get:(fun (tag, _) -> get_name tag)
()
in
States.register_array
~page
~name:"kernel.ast.markerKind"
~descr:(Md.plain "Kind of markers")
~key:snd
~iter
model
let create_tag = function let create_tag = function
| PStmt(_,s) -> Printf.sprintf "#s%d" s.sid | PStmt(_,s) -> Printf.sprintf "#s%d" s.sid
| PStmtStart(_,s) -> Printf.sprintf "#k%d" s.sid | PStmtStart(_,s) -> Printf.sprintf "#k%d" s.sid
...@@ -92,6 +160,7 @@ struct ...@@ -92,6 +160,7 @@ struct
let tag = create_tag loc in let tag = create_tag loc in
Localizable.Hashtbl.add tags loc tag ; Localizable.Hashtbl.add tags loc tag ;
Hashtbl.add locs tag loc ; Hashtbl.add locs tag loc ;
States.update array (loc, tag);
tag tag
let lookup tag = Hashtbl.find (STATE.get()).locs tag let lookup tag = Hashtbl.find (STATE.get()).locs tag
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment