protected override void GenerateConvertTraceEntry_LH() { var cases = new List <MatchCaseExpr>(); foreach (var nextRoutine in pgp.symbolsLow.NextRoutines) { cases.Add(GetTraceEntryCaseForNextRoutine_LH(nextRoutine)); } ExpressionBuilder bodyBuilder = new ExpressionBuilder(pgp.prog); var ls = AH.MakeNameSegment("ls", "L.Armada_TraceEntry"); var entry = AH.MakeNameSegment("entry", "L.Armada_TraceEntry"); var tid = AH.MakeExprDotName(entry, "tid", "L.Armada_ThreadHandle"); var locv = AH.MakeApply2("L.Armada_GetThreadLocalView", ls, tid, "L.Armada_SharedMemory"); var threads = AH.MakeExprDotName(ls, "threads", "map<Armada_ThreadHandle, Armada_Thread>"); var t = AH.MakeSeqSelectExpr(threads, tid, "L.Armada_Thread"); // var t = AH.ParseExpression(pgp.prog, "", "ls.threads[tid]"); locv = bodyBuilder.AddVariableDeclaration("locv", locv); t = bodyBuilder.AddVariableDeclaration("t", t); var source = AH.MakeNameSegment("entry", "L.Armada_TraceEntry"); var body = AH.MakeMatchExpr(source, cases, "H.Armada_TraceEntry"); bodyBuilder.SetBody(body); var formals = new List <Formal> { AH.MakeFormal("ls", "LState"), AH.MakeFormal("entry", "L.Armada_TraceEntry") }; var validTraceEntryPredicate = AH.MakeApply2("L.Armada_ValidStep", ls, entry, new BoolType()); var fn = AH.MakeFunctionWithReq("ConvertTraceEntry_LH", formals, validTraceEntryPredicate, bodyBuilder.Extract()); pgp.AddDefaultClassDecl(fn, "convert"); }
public void SetNextState(string e) { getNextStateBuilder.SetBody(e); }
public void SetNextState(Expression e) { getNextStateBuilder.SetBody(e); }