Commit bcf4c0dd authored by Julien Signoles's avatar Julien Signoles
Browse files

[translate] optimize logic function applications

parent 91e9333c
...@@ -450,14 +450,14 @@ and context_insensitive_term_to_exp kf env t = ...@@ -450,14 +450,14 @@ and context_insensitive_term_to_exp kf env t =
Cil.mkAddrOrStartOf ~loc lv, env, false, "startof" Cil.mkAddrOrStartOf ~loc lv, env, false, "startof"
| Tapp(li, [], targs) -> | Tapp(li, [], targs) ->
let fname = li.l_var_info.lv_name in let fname = li.l_var_info.lv_name in
let args, env = (* args computed in the reverse order *) let args, env =
try try
List.fold_left List.fold_right
(fun (l, env) a -> (fun targ (l, env) ->
let e, env = term_to_exp kf env a in let e, env = term_to_exp kf env targ in
e :: l, env) e :: l, env)
([], env)
targs targs
([], env)
with Invalid_argument _ -> with Invalid_argument _ ->
Options.fatal "[Tapp] unexpected number of arguments when calling %s" Options.fatal "[Tapp] unexpected number of arguments when calling %s"
fname fname
...@@ -465,7 +465,7 @@ and context_insensitive_term_to_exp kf env t = ...@@ -465,7 +465,7 @@ and context_insensitive_term_to_exp kf env t =
(* build the varinfo (as an expression) which stores the result of the (* build the varinfo (as an expression) which stores the result of the
function call. *) function call. *)
let _, e, env = let _, e, env =
if Builtins.mem li.l_var_info.lv_name then begin if Builtins.mem li.l_var_info.lv_name then
(* E-ACSL built-in function call *) (* E-ACSL built-in function call *)
Env.new_var Env.new_var
~loc ~loc
...@@ -473,9 +473,7 @@ and context_insensitive_term_to_exp kf env t = ...@@ -473,9 +473,7 @@ and context_insensitive_term_to_exp kf env t =
env env
(Some t) (Some t)
(Misc.cty (Extlib.the li.l_type)) (Misc.cty (Extlib.the li.l_type))
(fun vi _ -> (fun vi _ -> [ Misc.mk_call ~loc ~result:(Cil.var vi) fname args ])
[ Misc.mk_call ~loc ~result:(Cil.var vi) fname (List.rev args) ])
end
else else
let args_lty = let args_lty =
List.map List.map
...@@ -485,7 +483,7 @@ and context_insensitive_term_to_exp kf env t = ...@@ -485,7 +483,7 @@ and context_insensitive_term_to_exp kf env t =
| Typing.C_type _ | Typing.Other -> Ctype (Typing.get_typ targ)) | Typing.C_type _ | Typing.Other -> Ctype (Typing.get_typ targ))
targs targs
in in
Logic_functions.generate ~loc env t li (List.rev args) args_lty Logic_functions.generate ~loc env t li args args_lty
in in
e, env, false, "app" e, env, false, "app"
| Tapp(_, _ :: _, _) -> | Tapp(_, _ :: _, _) ->
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment