Skip to content

Commit 0d7db1c

Browse files
Merge pull request #147 from goblint/fix-syntactic-search
Fix syntactic search
2 parents 98598d9 + 34fecf4 commit 0d7db1c

File tree

2 files changed

+41
-102
lines changed

2 files changed

+41
-102
lines changed

src/ext/syntacticsearch/funcVar.ml

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -27,37 +27,28 @@ let map_gvar f = function
2727

2828
let is_temporary id = Inthash.mem allTempVars id
2929

30-
let generate_func_loc_table cilfile =
31-
Util.list_filter_map
32-
(map_gfun (fun dec loc -> Some (dec.svar.vname, loc.line)))
33-
cilfile.globals
30+
(* fails when there is no function with name fname in cilfile *)
31+
let get_func_loc cilfile fname =
32+
let rec find_loc = function
33+
| [] -> failwith ("no function with name " ^ fname ^ " found")
34+
| GFun (fd, loc) :: l when fd.svar.vname = fname -> loc
35+
| _ :: l -> find_loc l
36+
in
37+
find_loc cilfile.globals
3438

3539
let generate_globalvar_list cilfile =
3640
Util.list_filter_map
3741
(map_gvar (fun varinfo _ _ -> Some varinfo.vname))
3842
cilfile.globals
3943

4044
let get_all_alphaconverted_in_fun varname funname cilfile =
41-
let fun_loc_table = generate_func_loc_table cilfile in
42-
let loc_start =
43-
snd
44-
@@ List.find (function x, _ -> String.compare x funname = 0) fun_loc_table
45-
in
46-
let rec iter_fun_loc list =
47-
match list with
48-
| (fname, _) :: xs ->
49-
if fname = funname then
50-
match xs with (_, line) :: _ -> line | [] -> max_int
51-
else iter_fun_loc xs
52-
| [] -> 0
53-
in
54-
let loc_end = iter_fun_loc fun_loc_table in
45+
let fun_loc = get_func_loc cilfile funname in
46+
let loc_within_fun loc = loc.file = fun_loc.file
47+
&& loc.line >= fun_loc.line && (loc.line < fun_loc.endLine || fun_loc.endLine < 0) in
5548
let tmp =
5649
Util.list_filter_map
5750
(function
58-
| EnvVar varinfo, loc when loc.line >= loc_start && loc.line < loc_end
59-
->
60-
Some varinfo.vname
51+
| EnvVar varinfo, loc when loc_within_fun loc-> Some varinfo.vname
6152
| _ -> None)
6253
(Hashtbl.find_all environment varname)
6354
in

src/ext/syntacticsearch/queryMapping.ml

Lines changed: 29 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ let rec and_several_lists list_of_lists =
4646

4747
(* Naming of functions: resolve_query_[kind]_[find]_[structure] *)
4848

49+
exception Not_supported
50+
4951
(* Resolution of datatype-oriented queries *)
5052
let resolve_query_datatype_uses_fun query cilfile funname =
5153
match query.tar with
@@ -60,9 +62,7 @@ let resolve_query_datatype_uses_fun query cilfile funname =
6062
(List.map
6163
(fun x -> FuncDatatype.find_uses_in_fun x funname cilfile)
6264
list)
63-
| _ ->
64-
Printf.printf "Not supported.\n";
65-
[ ("", loc_default, "", -1) ]
65+
| _ -> raise Not_supported
6666

6767
let resolve_query_datatype_uses_none query cilfile =
6868
match query.tar with
@@ -72,9 +72,7 @@ let resolve_query_datatype_uses_none query cilfile =
7272
(List.map (fun x -> FuncDatatype.find_uses x cilfile) list)
7373
| Or_t list ->
7474
List.flatten (List.map (fun x -> FuncDatatype.find_uses x cilfile) list)
75-
| _ ->
76-
Printf.printf "Not supported.\n";
77-
[ ("", loc_default, "", -1) ]
75+
| _ -> raise Not_supported
7876

7977
let resolve_query_datatype_uses_cond query cilfile =
8078
match query.tar with
@@ -85,9 +83,7 @@ let resolve_query_datatype_uses_cond query cilfile =
8583
| Or_t list ->
8684
List.flatten
8785
(List.map (fun x -> FuncDatatype.find_uses_in_cond x cilfile) list)
88-
| _ ->
89-
Printf.printf "Not supported.\n";
90-
[ ("", loc_default, "", -1) ]
86+
| _ -> raise Not_supported
9187

9288
let resolve_query_datatype_uses_noncond query cilfile =
9389
match query.tar with
@@ -98,9 +94,7 @@ let resolve_query_datatype_uses_noncond query cilfile =
9894
| Or_t list ->
9995
List.flatten
10096
(List.map (fun x -> FuncDatatype.find_uses_in_cond x cilfile) list)
101-
| _ ->
102-
Printf.printf "Not supported.\n";
103-
[ ("", loc_default, "", -1) ]
97+
| _ -> raise Not_supported
10498

10599
let resolve_query_datatype_uses query cilfile =
106100
match query.str with
@@ -115,24 +109,18 @@ let resolve_query_datatype_defs_none query cilfile =
115109
| Or_t list ->
116110
List.flatten (List.map (fun x -> FuncDatatype.find_def x cilfile) list)
117111
| All_t -> FuncDatatype.find_def_all cilfile
118-
| _ ->
119-
Printf.printf "Not supported.\n";
120-
[ ("", loc_default, "", -1) ]
112+
| _ -> raise Not_supported
121113

122114
let resolve_query_datatype_defs query cilfile =
123115
match query.str with
124116
| None_s -> resolve_query_datatype_defs_none query cilfile
125-
| _ ->
126-
Printf.printf "Not supported.\n";
127-
[ ("", loc_default, "", -1) ]
117+
| _ -> raise Not_supported
128118

129119
let resolve_query_datatype query cilfile =
130120
match query.f with
131121
| Uses_f -> resolve_query_datatype_uses query cilfile
132122
| Defs_f -> resolve_query_datatype_defs query cilfile
133-
| _ ->
134-
Printf.printf "Not supported.\n";
135-
[ ("", loc_default, "", -1) ]
123+
| _ -> raise Not_supported
136124

137125
(* Resolution of variable-oriented queries *)
138126
let resolve_query_var_uses_fun query cilfile funname =
@@ -216,9 +204,7 @@ let resolve_query_var_decl_fun query cilfile funname =
216204
(List.map
217205
(fun x -> FuncVar.find_decl_in_fun x (-1) funname cilfile)
218206
list)
219-
| _ ->
220-
Printf.printf "Not supported.\n";
221-
[ ("", loc_default, "", -1) ]
207+
| _ -> raise Not_supported
222208

223209
let resolve_query_var_decl_none query cilfile =
224210
match query.tar with
@@ -228,18 +214,14 @@ let resolve_query_var_decl_none query cilfile =
228214
| All_t -> FuncVar.find_decl_all cilfile
229215
| Or_t list ->
230216
List.flatten (List.map (fun x -> FuncVar.find_decl x (-1) cilfile) list)
231-
| _ ->
232-
Printf.printf "Not supported.\n";
233-
[ ("", loc_default, "", -1) ]
217+
| _ -> raise Not_supported
234218

235219
let resolve_query_var_decl query cilfile =
236220
match query.str with
237221
| Fun_s funname -> resolve_query_var_decl_fun query cilfile funname
238222
| None_s -> resolve_query_var_decl_none query cilfile
239223
| NonCond_s -> resolve_query_var_decl_none query cilfile
240-
| _ ->
241-
Printf.printf "Not supported.\n";
242-
[ ("", loc_default, "", -1) ]
224+
| _ -> raise Not_supported
243225

244226
let resolve_query_var_defs_fun query cilfile funname =
245227
match query.tar with
@@ -252,9 +234,7 @@ let resolve_query_var_defs_fun query cilfile funname =
252234
(List.map
253235
(fun x -> FuncVar.find_defs_in_fun x (-1) funname cilfile)
254236
list)
255-
| _ ->
256-
Printf.printf "Not supported.\n";
257-
[ ("", loc_default, "", -1) ]
237+
| _ -> raise Not_supported
258238

259239
let resolve_query_var_defs_none query cilfile =
260240
match query.tar with
@@ -264,26 +244,20 @@ let resolve_query_var_defs_none query cilfile =
264244
| All_t -> FuncVar.find_defs_all cilfile
265245
| Or_t list ->
266246
List.flatten (List.map (fun x -> FuncVar.find_defs x (-1) cilfile) list)
267-
| _ ->
268-
Printf.printf "Not supported.\n";
269-
[ ("", loc_default, "", -1) ]
247+
| _ -> raise Not_supported
270248

271249
let resolve_query_var_defs query cilfile =
272250
match query.str with
273251
| Fun_s funname -> resolve_query_var_defs_fun query cilfile funname
274252
| None_s -> resolve_query_var_defs_none query cilfile
275-
| _ ->
276-
Printf.printf "Not supported.\n";
277-
[ ("", loc_default, "", -1) ]
253+
| _ -> raise Not_supported
278254

279255
let resolve_query_var query cilfile =
280256
match query.f with
281257
| Uses_f -> resolve_query_var_uses query cilfile
282258
| Decl_f -> resolve_query_var_decl query cilfile
283259
| Defs_f -> resolve_query_var_defs query cilfile
284-
| _ ->
285-
Printf.printf "Not supported.\n";
286-
[ ("", loc_default, "", -1) ]
260+
| _ -> raise Not_supported
287261

288262
let resolve_query_fun_return_none query cilfile =
289263
match query.tar with
@@ -293,16 +267,12 @@ let resolve_query_fun_return_none query cilfile =
293267
| Or_t list ->
294268
List.flatten
295269
(List.map (fun x -> FuncFunction.find_returns x (-1) cilfile) list)
296-
| _ ->
297-
Printf.printf "Not supported.\n";
298-
[ ("", loc_default, "", -1) ]
270+
| _ -> raise Not_supported
299271

300272
let resolve_query_fun_return query cilfile =
301273
match query.str with
302274
| None_s -> resolve_query_fun_return_none query cilfile
303-
| _ ->
304-
Printf.printf "Not supported.\n";
305-
[ ("", loc_default, "", -1) ]
275+
| _ -> raise Not_supported
306276

307277
let resolve_query_fun_defs_none query cilfile =
308278
match query.tar with
@@ -312,16 +282,12 @@ let resolve_query_fun_defs_none query cilfile =
312282
| Or_t list ->
313283
List.flatten
314284
(List.map (fun x -> FuncFunction.find_def x (-1) cilfile) list)
315-
| _ ->
316-
Printf.printf "Not supported.\n";
317-
[ ("", loc_default, "", -1) ]
285+
| _ -> raise Not_supported
318286

319287
let resolve_query_fun_defs query cilfile =
320288
match query.str with
321289
| None_s -> resolve_query_fun_defs_none query cilfile
322-
| _ ->
323-
Printf.printf "Not supported.\n";
324-
[ ("", loc_default, "", -1) ]
290+
| _ -> raise Not_supported
325291

326292
let resolve_query_fun_uses_none query cilfile =
327293
match query.tar with
@@ -334,9 +300,7 @@ let resolve_query_fun_uses_none query cilfile =
334300
| Or_t list ->
335301
List.flatten
336302
(List.map (fun x -> FuncFunction.find_uses x (-1) cilfile) list)
337-
| _ ->
338-
Printf.printf "Not supported.\n";
339-
[ ("", loc_default, "", -1) ]
303+
| _ -> raise Not_supported
340304

341305
let resolve_query_fun_uses_fun query cilfile funname =
342306
match query.tar with
@@ -353,9 +317,7 @@ let resolve_query_fun_uses_fun query cilfile funname =
353317
(List.map
354318
(fun x -> FuncFunction.find_uses_in_fun x (-1) funname cilfile)
355319
list)
356-
| _ ->
357-
Printf.printf "Not supported.\n";
358-
[ ("", loc_default, "", -1) ]
320+
| _ -> raise Not_supported
359321

360322
let resolve_query_fun_uses_cond query cilfile =
361323
match query.tar with
@@ -368,9 +330,7 @@ let resolve_query_fun_uses_cond query cilfile =
368330
| Or_t list ->
369331
List.flatten
370332
(List.map (fun x -> FuncFunction.find_uses_cond x (-1) cilfile) list)
371-
| _ ->
372-
Printf.printf "Not supported.\n";
373-
[ ("", loc_default, "", -1) ]
333+
| _ -> raise Not_supported
374334

375335
let resolve_query_fun_uses_noncond query cilfile =
376336
match query.tar with
@@ -383,9 +343,7 @@ let resolve_query_fun_uses_noncond query cilfile =
383343
| Or_t list ->
384344
List.flatten
385345
(List.map (fun x -> FuncFunction.find_uses_noncond x (-1) cilfile) list)
386-
| _ ->
387-
Printf.printf "Not supported.\n";
388-
[ ("", loc_default, "", -1) ]
346+
| _ -> raise Not_supported
389347

390348
let resolve_query_fun_uses query cilfile =
391349
match query.str with
@@ -415,9 +373,7 @@ let resolve_query_fun_usesvar_fun query cilfile varname strucfunname =
415373
FuncFunction.find_usesvar_in_fun x (-1) strucfunname varname
416374
cilfile)
417375
list)
418-
| _ ->
419-
Printf.printf "Not supported.\n";
420-
[ ("", loc_default, "", -1) ]
376+
| _ -> raise Not_supported
421377

422378
let resolve_query_fun_usesvar_none query cilfile varname =
423379
match query.tar with
@@ -434,9 +390,7 @@ let resolve_query_fun_usesvar_none query cilfile varname =
434390
(List.map
435391
(fun x -> FuncFunction.find_usesvar x (-1) varname cilfile)
436392
list)
437-
| _ ->
438-
Printf.printf "Not supported.\n";
439-
[ ("", loc_default, "", -1) ]
393+
| _ -> raise Not_supported
440394

441395
let resolve_query_fun_usesvar_cond query cilfile varname =
442396
match query.tar with
@@ -454,9 +408,7 @@ let resolve_query_fun_usesvar_cond query cilfile varname =
454408
(List.map
455409
(fun x -> FuncFunction.find_usesvar_cond x (-1) varname cilfile)
456410
list)
457-
| _ ->
458-
Printf.printf "Not supported.\n";
459-
[ ("", loc_default, "", -1) ]
411+
| _ -> raise Not_supported
460412

461413
let resolve_query_fun_usesvar_noncond query cilfile varname =
462414
match query.tar with
@@ -474,9 +426,7 @@ let resolve_query_fun_usesvar_noncond query cilfile varname =
474426
(List.map
475427
(fun x -> FuncFunction.find_usesvar_noncond x (-1) varname cilfile)
476428
list)
477-
| _ ->
478-
Printf.printf "Not supported.\n";
479-
[ ("", loc_default, "", -1) ]
429+
| _ -> raise Not_supported
480430

481431
let resolve_query_fun_usesvar query cilfile varname =
482432
match query.str with
@@ -492,9 +442,7 @@ let resolve_query_fun query cilfile =
492442
| Defs_f -> resolve_query_fun_defs query cilfile
493443
| Uses_f -> resolve_query_fun_uses query cilfile
494444
| UsesWithVar_f varname -> resolve_query_fun_usesvar query cilfile varname
495-
| _ ->
496-
Printf.printf "Not supported.\n";
497-
[ ("", loc_default, "", -1) ]
445+
| _ -> raise Not_supported
498446

499447
(* Main mapping function *)
500448
let map_query query cilfile =

0 commit comments

Comments
 (0)