private static Tuple <Ast.section, Tuple <List <Tuple <string, Ast.expr> >, List <Tuple <string, Ast.expr> > > > ClockAssigns(List <Tuple <string, Tuple <Int64, Int64> > > variables) { List <Tuple <string, Ast.expr> > stringexprlstinit = new List <Tuple <string, Ast.expr> >(); List <Tuple <string, Ast.expr> > stringexprlstnext = new List <Tuple <string, Ast.expr> >(); Ast.expr clockindent = Ast.expr.NewInt(_clockbound); Ast.expr timerident = Ast.expr.NewIdent("time"); Ast.expr inctimerident = Ast.expr.NewAdd(timerident, Ast.expr.NewInt(1)); Ast.expr truident = Ast.expr.NewIdent("TRUE"); Ast.expr zeroident = Ast.expr.NewInt(0); Ast.expr guard = Ast.expr.NewLt(timerident, Ast.expr.NewInt(_clockbound)); // init Ast.assign initident = Ast.assign.NewInitAssign("time", zeroident); // next List <Tuple <Ast.expr, Ast.expr> > caseslst = new List <Tuple <Ast.expr, Ast.expr> >(); Tuple <Ast.expr, Ast.expr> guardcs = new Tuple <Ast.expr, Ast.expr>(guard, inctimerident); caseslst.Add(guardcs); stringexprlstinit.Add(new Tuple <string, Ast.expr>("time", zeroident)); Tuple <Ast.expr, Ast.expr> trucs = new Tuple <Ast.expr, Ast.expr>(truident, timerident); caseslst.Add(trucs); Ast.expr caseident = Ast.expr.NewCases(FSharpInteropExtensions.ToFSharplist <Tuple <Ast.expr, Ast.expr> >(caseslst)); Ast.assign nextident = Ast.assign.NewNextAssign("time", caseident); stringexprlstnext.Add(new Tuple <string, Ast.expr>("time", caseident)); List <Ast.assign> assignlst = new List <Ast.assign>(); assignlst.Add(initident); assignlst.Add(nextident); Ast.section assignsec = Ast.section.NewAssigns(FSharpInteropExtensions.ToFSharplist <Ast.assign>(assignlst)); Tuple <Ast.section, Tuple <List <Tuple <string, Ast.expr> >, List <Tuple <string, Ast.expr> > > > sectionwithmemoryvalues = new Tuple <Ast.section, Tuple <List <Tuple <string, Ast.expr> >, List <Tuple <string, Ast.expr> > > > (assignsec, new Tuple <List <Tuple <string, Ast.expr> >, List <Tuple <string, Ast.expr> > >(stringexprlstinit, stringexprlstnext)); return(sectionwithmemoryvalues); }
private static List <Ast.smv_module> GenSmvModlsFromMem() { List <Ast.smv_module> astmodules = new List <Ast.smv_module>(); foreach (var modl in _modules) { List <Ast.section> sections = new List <Ast.section>(); List <Tuple <string, Ast.types> > vrs = new List <Tuple <string, Ast.types> >(); //svars List <Tuple <string, Ast.types> > svars = ConvertSetTupleToTypes(_svars[modl]); foreach (var v in svars) { vrs.Add(v); } // Ast.section svarsec = Ast.section.NewVar(FSharpInteropExtensions.ToFSharplist<Tuple<string, Ast.types>> (svars)); //rvars List <Tuple <string, Ast.types> > rvars = ConvertRngTupleToTypes(_rvars[modl]); foreach (var v in rvars) { vrs.Add(v); } //mvars List <Tuple <string, Ast.types> > mvars = ConvertModlTupleToTypes(_mvars[modl]); foreach (var v in mvars) { vrs.Add(v); } Ast.section varsec = Ast.section.NewVar(FSharpInteropExtensions.ToFSharplist <Tuple <string, Ast.types> >(vrs)); sections.Add(varsec); //init foreach (var init in _init[modl]) { sections.Add(Ast.section.NewInit(init)); } //trans foreach (var trans in _trans[modl]) { sections.Add(Ast.section.NewTrans(trans)); } List <Ast.assign> assigns = new List <Ast.assign>(); using (var e1 = _iassigns[modl].GetEnumerator()) { while (e1.MoveNext()) { var iassign = e1.Current; Ast.assign iasgn = Ast.assign.NewInitAssign(iassign.Item1, iassign.Item2); assigns.Add(iasgn); } } //assigns Bug is here using (var e2 = _nassigns[modl].GetEnumerator()) { while (e2.MoveNext()) { var nassign = e2.Current; Ast.assign nasgn = Ast.assign.NewNextAssign(nassign.Item1, nassign.Item2); assigns.Add(nasgn); } } /* * foreach (var iassign in _iassigns[modl]) * { * Ast.assign asgn = Ast.assign.NewInitAssign(iassign.Item1, iassign.Item2); * assigns.Add(asgn); * } * foreach (var nassign in _nassigns[modl]) * { * Ast.assign asgn = Ast.assign.NewNextAssign(nassign.Item1, nassign.Item2); * assigns.Add(asgn); * }*/ if (assigns.Count > 0) { sections.Add(Ast.section.NewAssigns(FSharpInteropExtensions.ToFSharplist <Ast.assign>(assigns))); } Ast.smv_module asyncboundedmodl = new Ast.smv_module(modl.name, FSharpInteropExtensions.ToFSharplist <string>(_params[modl]) /*modl.parameters*/, FSharpInteropExtensions.ToFSharplist <Ast.section>(sections)); astmodules.Add(asyncboundedmodl); } return(astmodules); }