diff options
author | Son Ho | 2024-04-11 19:40:08 +0200 |
---|---|---|
committer | Son Ho | 2024-04-11 19:40:08 +0200 |
commit | 86c3680b1f3f50b4c4e6198eebc145cadfff3876 (patch) | |
tree | c79ea2c4a35198d9011287db4767599b0c5c1c42 /compiler/Interpreter.ml | |
parent | 9c1773530a7056c161e69471b36eaa3603f6ed26 (diff) | |
parent | 4fb9c9f655a9ffc3b4a1a717988311c057c9c599 (diff) |
Merge remote-tracking branch 'origin/main' into son/clean
Diffstat (limited to '')
-rw-r--r-- | compiler/Interpreter.ml | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/compiler/Interpreter.ml b/compiler/Interpreter.ml index a65e1663..769e3144 100644 --- a/compiler/Interpreter.ml +++ b/compiler/Interpreter.ml @@ -191,6 +191,18 @@ let initialize_symbolic_context_for_fun (ctx : decls_ctx) (fdef : fun_decl) : * do it, and because it gives a bit of sanity. * *) let sg = fdef.signature in + (* Sanity check: no nested borrows, borrows in ADTs, etc. *) + cassert __FILE__ __LINE__ + (List.for_all + (fun ty -> not (ty_has_nested_borrows ctx.type_ctx.type_infos ty)) + (sg.output :: sg.inputs)) + fdef.meta "Nested borrows are not supported yet"; + cassert __FILE__ __LINE__ + (List.for_all + (fun ty -> not (ty_has_adt_with_borrows ctx.type_ctx.type_infos ty)) + (sg.output :: sg.inputs)) + fdef.meta "ADTs containing borrows are not supported yet"; + (* Create the context *) let regions_hierarchy = FunIdMap.find (FRegular fdef.def_id) ctx.fun_ctx.regions_hierarchies @@ -612,7 +624,8 @@ let evaluate_function_symbolic (synthesize : bool) (ctx : decls_ctx) (* Evaluate the function *) let symbolic = - eval_function_body config (Option.get fdef.body).body cf_finish ctx + try eval_function_body config (Option.get fdef.body).body cf_finish ctx + with CFailure (meta, msg) -> Some (Error (meta, msg)) in (* Return *) |