Ignore:
Timestamp:
Mar 2, 2011, 3:27:41 PM (9 years ago)
Author:
ayache
Message:

Update of D2.2 from Paris.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Deliverables/D2.2/8051/src/clight/clightInterpret.ml

    r486 r619  
    248248  (*Pointer*)
    249249  | ((v1,t1) , (v2,t2)) when is_pointer_type t1 && is_int_type t2 ->
    250       Value.add v1 (Value.of_int ((Value.to_int v2)*(sizeof (get_subtype t1))))
     250      Value.add v1 (Value.mul v2 (Value.of_int (sizeof (get_subtype t1))))
    251251  | ((v2,t2) , (v1,t1)) when is_pointer_type t1 && is_int_type t2 ->
    252       Value.add v1 (Value.of_int ((Value.to_int v2)*(sizeof (get_subtype t1))))
     252      Value.add v1 (Value.mul v2 (Value.of_int (sizeof (get_subtype t1))))
    253253  (*Error*)
    254254  | _ -> assert false (*Type error*)
     
    271271  (*Pointer*)
    272272  | ((v1,t1) , (v2,t2)) when is_pointer_type t1 && is_int_type t2 ->
    273       Value.sub v1 (Value.of_int ((Value.to_int v2)*(sizeof (get_subtype t1))))
    274   | ((v2,t2) , (v1,t1)) when is_pointer_type t1 && is_int_type t2 ->
    275       Value.sub v1 (Value.of_int ((Value.to_int v2)*(sizeof (get_subtype t1))))
     273      Value.sub v1 (Value.mul v2 (Value.of_int (sizeof (get_subtype t1))))
    276274  (*Error*)
    277275  | _ -> assert false (*Type error*)
     
    611609  | State(f,Sswitch(a,sl),k,e,m) ->
    612610      let (n,l) = (match eval_expr globalenv e m a with
    613                      | ((v,_),ll) when Value.is_int v -> (Value.to_int v,ll) 
     611                     | ((v,_),ll) when Value.is_int v -> (Value.to_int v,ll)
    614612                     | _ -> assert false (*Wrong switch index*)
    615613      ) in
     
    682680    (m,(g2,f))
    683681
     682let compute_result v =
     683  if Value.is_int v then IntValue.Int8.cast (Value.to_int_repr v)
     684  else IntValue.Int8.zero
     685
    684686let interpret debug prog = match prog.prog_main with
    685   | None -> []
     687  | None -> (IntValue.Int8.zero, [])
    686688  | Some main ->
    687689      let (m,g) = initmem_clight prog in
     
    689691      let rec exec trace = function
    690692        | (Returnstate(v,Kstop,m),l) ->
     693(*
    691694            if debug then (
    692695              print_string ("Result: "^(Value.to_string v));
     
    694697              Mem.print m
    695698            );
    696             l@trace
     699*)
     700          let (res, cost_labels) as trace = (compute_result v, l@trace) in
     701          if debug then
     702            Printf.printf "Clight: %s\n%!" (IntValue.Int8.to_string res) ;
     703          trace
    697704        | (State(_,Sskip,Kstop,_,m),l) -> (*Implicit return in main*)
     705(*
    698706            if debug then (
    699707              print_string ("Result: (implicit return)");
     
    701709              Mem.print m
    702710            );
    703             l@trace
     711*)
     712          let (res, cost_labels) as trace = (IntValue.Int8.zero, l@trace) in
     713          if debug then
     714            Printf.printf "Clight: %s\n%!" (IntValue.Int8.to_string res) ;
     715          trace
    704716        | (state,l) ->
     717(*
    705718            if debug then print_string ((string_of_state state)^"\n");
     719*)
    706720            exec (l@trace) (next_step g state)
    707721      in
     722(*
    708723      if debug then print_string "> --- Interpret Clight --- <\n";
    709       exec [] first_state
     724*)
     725      exec [] first_state
Note: See TracChangeset for help on using the changeset viewer.