diff options
| -rw-r--r-- | src/SymbolicToPure.ml | 16 | 
1 files changed, 15 insertions, 1 deletions
diff --git a/src/SymbolicToPure.ml b/src/SymbolicToPure.ml index 469021a0..bae2925b 100644 --- a/src/SymbolicToPure.ml +++ b/src/SymbolicToPure.ml @@ -406,7 +406,21 @@ and translate_expansion (sv : V.symbolic_value) (exp : S.expansion)    let scrutinee = Place (mk_place_from_var scrutinee_var) in    (* Translate the branches *)    match exp with -  | ExpandNoBranch (_, _) -> raise Unimplemented +  | ExpandNoBranch (sexp, e) -> ( +      match sexp with +      | V.SeConcrete _ -> +          (* Actually, we don't *register* symbolic expansions to constant +           * values in the symbolic ADT *) +          failwith "Unreachable" +      | SeMutRef (_, sv) | SeSharedRef (_, sv) -> +          (* The (mut/shared) borrow type is extracted to identity: we thus simply +           * introduce an reassignment *) +          let ctx, var = fresh_var_for_symbolic_value sv ctx in +          let e = translate_expression e ctx in +          Let (Assignment (var, scrutinee), e) +      | SeAdt _ -> +          (* Should be in the [ExpandAdt] case *) +          failwith "Unreachable")    | ExpandAdt branches -> (        (* We don't do the same thing if there is a branching or not *)        match branches with  | 
