From 938be45146acaf739e8086d9f0918dc4169c7fe7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20B=C3=BChler?= <david.buhler@cea.fr> Date: Wed, 25 Nov 2020 11:07:51 +0100 Subject: [PATCH] [server] Kernel AST: adds new columns to the synchronized arrays of functions. Do not include builtins Frama_C_show_each & cie in the array. --- src/plugins/server/kernel_ast.ml | 38 ++++++++++++++++++- .../tests/batch/oracle/ast_services.out.json | 20 +++++++++- 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/src/plugins/server/kernel_ast.ml b/src/plugins/server/kernel_ast.ml index 832c1adce2b..2a5692d2dc7 100644 --- a/src/plugins/server/kernel_ast.ml +++ b/src/plugins/server/kernel_ast.ml @@ -354,6 +354,22 @@ struct let global = Kernel_function.get_global kf in Rich_text.to_string Printer_tag.pretty (PGlobal global) + let is_builtin kf = Cil.is_builtin (Kernel_function.get_vi kf) + + let is_stdlib kf = + let vi = Kernel_function.get_vi kf in + Cil.hasAttribute "fc_stdlib" vi.vattr || + Cil.hasAttribute "fc_stdlib_generated" vi.vattr + + let is_analyzed kf = + if Db.Value.is_computed () then Some (!Db.Value.is_called kf) else None + + let iter f = + Globals.Functions.iter + (fun kf -> + let name = Kernel_function.get_name kf in + if not (Ast_info.is_frama_c_builtin name) then f kf) + let array : kernel_function States.array = begin let model = States.model () in @@ -367,11 +383,31 @@ struct ~descr:(Md.plain "Signature") ~data:(module Data.Jstring) ~get:signature ; + States.column model + ~name:"defined" + ~descr:(Md.plain "Is the function defined?") + ~data:(module Data.Jbool) + ~get:Kernel_function.is_definition; + States.column model + ~name:"stdlib" + ~descr:(Md.plain "Is the function from the Frama-C stdlib?") + ~data:(module Data.Jbool) + ~get:is_stdlib; + States.column model + ~name:"builtin" + ~descr:(Md.plain "Is the function a Frama-C builtin?") + ~data:(module Data.Jbool) + ~get:is_builtin; + States.column model + ~name:"eva_analyzed" + ~descr:(Md.plain "Has the function been analyzed by Eva") + ~data:(module Data.Joption (Data.Jbool)) + ~get:is_analyzed; States.register_array model ~package ~key ~name:"functions" ~descr:(Md.plain "AST Functions") - ~iter:Globals.Functions.iter + ~iter ~add_reload_hook:Ast.add_hook_on_update ; end diff --git a/src/plugins/server/tests/batch/oracle/ast_services.out.json b/src/plugins/server/tests/batch/oracle/ast_services.out.json index 865d7d9f0c0..2738c8e311a 100644 --- a/src/plugins/server/tests/batch/oracle/ast_services.out.json +++ b/src/plugins/server/tests/batch/oracle/ast_services.out.json @@ -3,8 +3,24 @@ "id": "GET-1", "data": { "updated": [ - { "key": "kf#24", "name": "g", "signature": "int g(int y);" }, - { "key": "kf#20", "name": "f", "signature": "int f(int x);" } + { + "key": "kf#24", + "name": "g", + "signature": "int g(int y);", + "defined": true, + "stdlib": false, + "builtin": false, + "eva_analyzed": null + }, + { + "key": "kf#20", + "name": "f", + "signature": "int f(int x);", + "defined": true, + "stdlib": false, + "builtin": false, + "eva_analyzed": null + } ], "removed": [], "reload": true, -- GitLab