1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283(**************************************************************************)(* *)(* SPDX-License-Identifier LGPL-2.1 *)(* Copyright (C) *)(* CEA (Commissariat à l'énergie atomique et aux énergies alternatives) *)(* *)(**************************************************************************)openMetrics_parametersletsyntactic()=letlibc=Libc.get()inbeginmatchAstType.get()with|"cil"->Metrics_cilast.compute_on_cilast~libc(* Cabs metrics are experimental. unregistered *)|"cabs"->Metrics_cabs.compute_on_cabs()|"acsl"->Metrics_acsl.dump()|_->assertfalse(* the possible values are checked by the kernel*)end;SyntacticallyReachable.iter(funkf->letreachable=Metrics_coverage.compute_syntactic~libckfinletcov_printer=newMetrics_coverage.syntactic_printer~libcreachableinMetrics_parameters.result"%a"cov_printer#pp_reached_from_functionkf)letsyntactic_deps=[Ast.self;AstType.self;OutputFile.self;SyntacticallyReachable.self;Libc.self]letsyntactic_once,_=State_builder.apply_once"Metrics.syntactic"syntactic_depssyntacticletdkey_eva_coverage=Metrics_parameters.register_category"eva:coverage"~default:true~help:"print messages about Eva coverage"letdkey_eva_unreached=Metrics_parameters.register_category"eva:unreached"~default:true~help:"print messages about function calls not reached by Eva"letdkey_eva_reached_stmts=Metrics_parameters.register_category"eva:reached-stmts"~default:true~help:"print messages about statements reached by Eva"leteva()=Eva.Analysis.compute();ifEva.Analysis.is_computed()thenbeginletlibc=Libc.get()inletcov_metrics=Metrics_coverage.compute~libcinletcov_printer=newMetrics_coverage.semantic_printer~libccov_metricsinMetrics_parameters.result~dkey:dkey_eva_coverage"%t"cov_printer#pp_value_coverage;Metrics_parameters.result~dkey:dkey_eva_unreached"%t"cov_printer#pp_unreached_calls;Metrics_parameters.result~dkey:dkey_eva_reached_stmts"%t"cov_printer#pp_stmts_reached_by_function;endleteva_deps=[Eva.Analysis.self;Libc.self]leteva_once,_=State_builder.apply_once"Metrics.eva"eva_depsevaletmain()=ifEnabled.get()thensyntactic_once();ifValueCoverage.get()theneva_once();ifLocalsSize.is_set()thenbeginAst.compute();Metrics_parameters.result"function\tlocals_size_no_temps\t\
locals_size_with_temps\t\
max_call_size_no_temps\t\
max_call_size_with_temps";LocalsSize.iter(funkf->Metrics_cilast.compute_locals_sizekf);end;ifUsedFiles.get()thenbeginletused_files=Metrics_cilast.used_files()inMetrics_cilast.pretty_used_filesused_filesend;;(* Register main entry points *)let()=Boot.Main.extendmain