Project

General

Profile

« Previous | Next » 

Revision 8605c4a4

Added by Pierre-Loïc Garoche almost 10 years ago

Ongoing ...

git-svn-id: https://cavale.enseeiht.fr/svn/lustrec/lustre_compiler/branches/horn_encoding@144 041b043f-8d7c-46b2-b46e-ef0dd855326e

View differences:

src/horn_backend.ml
38 38
let rename_machine machine_name = rename (fun n -> machine_name ^ "." ^ n)
39 39
let rename_machine_list machine_name = List.map (rename_machine machine_name)
40 40

  
41
let full_memory_vars machine instance =
42
  (rename_current_list machine.mname.node_id machine.mmemory) @
43
    (rename_next_list machine.mname.node_id machine.mmemory)
44

  
41 45
let machine_vars m = 
42
  (rename_current_list m.mname.node_id m.mmemory)@
43
    (rename_next_list m.mname.node_id m.mmemory)@
44 46
    (rename_machine_list m.mname.node_id m.mstep.step_inputs)@
45
    (rename_machine_list m.mname.node_id m.mstep.step_outputs)
46

  
47
    (rename_machine_list m.mname.node_id m.mstep.step_outputs)@
48
  full_memory_vars m ()
47 49

  
50
  
48 51
(********************************************************************************************)
49 52
(*                    Instruction Printing functions                                        *)
50 53
(********************************************************************************************)
......
104 107
let pp_assign m self pp_var fmt var_type var_name value =
105 108
  fprintf fmt "(%a = %a)" (pp_horn_val ~is_lhs:true self pp_var) var_name (pp_value_suffix self pp_var) value
106 109
  
107
let pp_instance_call machines ?(init=false) m self fmt i (inputs: value_t list) (outputs: var_decl list) =
108
 try (* stateful node instance *) (
109
   let (n,_) = List.assoc i m.minstances in
110
   match node_name n, inputs, outputs with
111
   | "_arrow", [i1; i2], [o] -> (
112
     if init then
113
       pp_assign
114
	 m self (pp_horn_val self (pp_horn_var m) fmt o) fmt
115
	 o.var_type (LocalVar o) i1
116
     else
117
       pp_assign
118
	 m self (pp_horn_val self (pp_horn_var m) fmt o) fmt
119
	 o.var_type (LocalVar o) i2
120
       
121
   )
122
   | name, _, _ ->  (
123
     let target_machine = List.find (fun m  -> m.mname.node_id = name) machines in
124
     Format.fprintf fmt "(%s_%s %a%txxx%axxx%t%a)"
125
       (node_name n) (if init then "init" else "step")
126
       (Utils.fprintf_list ~sep:" " (pp_horn_val self (pp_horn_var m))) inputs
127
       (Utils.pp_final_char_if_non_empty " " inputs) 
128
       (Utils.fprintf_list ~sep:" " (pp_horn_val self (pp_horn_var m))) outputs
129
       (Utils.pp_final_char_if_non_empty " " outputs)
130
       
131
       (Utils.fprintf_list ~sep:" " pp_var) (machine_vars target_machine)
132
       
133
   )
134
 )
135
 with Not_found -> (* stateless node instance *)
136
   let (n,_) = List.assoc i m.mcalls in
110
let pp_instance_call 
111
    machines ?(init=false) m self fmt i (inputs: value_t list) (outputs: var_decl list) =
112
  try (* stateful node instance *) 
113
    begin
114
      let (n,_) = List.assoc i m.minstances in
115
      match node_name n, inputs, outputs with
116
      | "_arrow", [i1; i2], [o] -> begin
117
         if init then
118
           pp_assign
119
   	     m
120
   	     self
121
   	     (pp_horn_var m)
122
	     (* (pp_horn_val self (pp_horn_var m) fmt o) *)  fmt
123
   	     o.var_type (LocalVar o) i1
124
         else
125
           pp_assign
126
   	     m self (pp_horn_var m) fmt
127
   	     o.var_type (LocalVar o) i2
128
	     
129
      end
130
      | name, _, _ ->  
131
	begin
132
	  let target_machine = List.find (fun m  -> m.mname.node_id = name) machines in
133
	  Format.fprintf fmt "(%s_%s %a%t%a%t%a)"
134
	    (node_name n) 
135
	    (if init then "init" else "step")
136
	    (Utils.fprintf_list ~sep:" " (pp_horn_val self (pp_horn_var m))) inputs
137
	    (Utils.pp_final_char_if_non_empty " " inputs) 
138
	    (Utils.fprintf_list ~sep:" " (pp_horn_val self (pp_horn_var m))) (List.map (fun v -> LocalVar v) outputs)
139
	       (Utils.pp_final_char_if_non_empty " " outputs)
140
	    (Utils.fprintf_list ~sep:" " pp_var) (full_memory_vars target_machine i)
141
	    
142
	     end
143
    end
144
    with Not_found -> ( (* stateless node instance *)
145
      let (n,_) = List.assoc i m.mcalls in
137 146
   Format.fprintf fmt "(%s %a%t%a)"
138 147
     (node_name n)
139 148
     (Utils.fprintf_list ~sep:" " (pp_horn_val self (pp_horn_var m))) inputs
140 149
     (Utils.pp_final_char_if_non_empty " " inputs) 
141 150
     (Utils.fprintf_list ~sep:" " (pp_horn_var m)) outputs 
151
    )
142 152

  
143 153
let pp_machine_reset (m: machine_t) self fmt inst =
144 154
  let (node, static) = List.assoc inst m.minstances in

Also available in: Unified diff