diff --git a/lib/sasalib/sasaRun.ml b/lib/sasalib/sasaRun.ml index 180ff64cca318519c0d3f1816dcbb8155ddf8059..e73c3f937b091be67f51f3a0356560c92d8cd52a 100644 --- a/lib/sasalib/sasaRun.ml +++ b/lib/sasalib/sasaRun.ml @@ -1,6 +1,82 @@ -let (make: string array -> RdbgPlugin.t) = - fun _ -> - +open Sasacore +(* open SasArg *) +open RdbgPlugin + + +let (to_sasa_value : Data.v -> Algo.value) = function + | Data.I i -> Algo.I i + | Data.F f -> Algo.F f + | Data.B b -> Algo.B b + | Data.E(_id,_i) -> assert false (* xxx finishme *) + | Data.A _a -> assert false (* xxx finishme *) + | Data.S _s -> assert false (* xxx finishme *) + | Data.U -> assert false (* xxx finishme *) + + +let (_to_sasa_env : (string * Data.v) list -> string -> Algo.value) = + fun sl v -> + to_sasa_value (List.assoc v sl) +let (to_sasa_env : (string * Data.v) list -> Env.t) = + fun sl -> + (* inputs are actions of the form "pid_ActionName" *) + let split_var str = + match Str.split (Str.regexp "_") str with + | [pid;action] -> pid,action + | [] -> assert false + | [_] -> assert false + | _ -> assert false + in + let _sl = List.map (fun (var,v) -> split_var var, to_sasa_value v) sl in assert false + +let (make_do: string array -> SasArg.t -> RdbgPlugin.t) = + fun argv _opt -> + + let vntl_i = [] in + let vntl_o = [] in + let step sl_in = + let _ins = to_sasa_env sl_in in + assert false + in + let step_dbg _sl_in _ectx _cont = assert false + in + let (mems_in : Data.subst list) = [] in (* XXX todo *) + let (mems_out : Data.subst list) = [] in (* XXX todo *) + { + id = Printf.sprintf "%s (with sasa Version %s)" + (String.concat " " (Array.to_list argv)) SasaVersion.str; + inputs = vntl_i; + outputs= vntl_o; + reset=(fun () -> ()); + kill=(fun _ -> flush stdout; flush stderr); + init_inputs=mems_in; + init_outputs=mems_out; + step=step; + step_dbg=step_dbg; + } + + +let (make: string array -> RdbgPlugin.t) = + fun argv -> + let opt = SasArg.parse argv in + try make_do argv opt with + | Dynlink.Error e -> + Printf.printf "Error: %s\n" (Dynlink.error_message e); + flush stdout; + exit 2 + | Failure msg -> + Printf.printf "Error: %s\n" msg; + flush stdout; + exit 2 + + | Assert_failure (file, line, col) -> + prerr_string ( + "\nError: oops, sasa internal error\n\tFile \""^ file ^ + "\", line " ^ (string_of_int line) ^ ", column " ^ + (string_of_int col) ^ "\n") ; + flush stderr; + exit 2 + + diff --git a/lib/sasalib/sasaRun.mli b/lib/sasalib/sasaRun.mli index bb870ac874a5ece5156849e14c8117243b5f1586..ee1efe288463ad1bb26b8e506e07b582abd95e6c 100644 --- a/lib/sasalib/sasaRun.mli +++ b/lib/sasalib/sasaRun.mli @@ -1,2 +1,11 @@ +(* XXX finishme! + +Actually, the I/O mode of rdbg already makes it possible to use sasa + from rdbg and see all of its variable values after each step (exit + event). This plugin would only be necessary when we would need a + finer-grained intrumentation, e.g., to stop at enable step, or to + at each process call/exit. + +*) val make: string array -> RdbgPlugin.t diff --git a/test/bfs-spanning-tree/Makefile b/test/bfs-spanning-tree/Makefile index 61d2d8df8c90a3408c7e273488fa5494ac92a60b..5240eb9227b44836001b1ec79f356f693d076f14 100644 --- a/test/bfs-spanning-tree/Makefile +++ b/test/bfs-spanning-tree/Makefile @@ -1,4 +1,4 @@ -# Time-stamp: <modified the 14/03/2019 (at 16:46) by Erwan Jahier> +# Time-stamp: <modified the 17/03/2019 (at 21:40) by Erwan Jahier> test: test0 lurette0 @@ -31,6 +31,11 @@ lurette: lurette0 sim2chrogtk -ecran -in lurette.rif > /dev/null gnuplot-rif lurette.rif +rdbg: + rdbg -o lurette.rif \ + -env "$(sasa) fig5.1-noinit.dot -custd -rif" \ + -sut "lutin demon.lut -n distributed" + manual:cmxs lurette -o lurette.rif --sim2chro \