private void CreateCoStateValues() { foreach (var kvp in _coFSMs) { ITransactionSite target = kvp.Key; CoFSMInfo cfi = kvp.Value; string ename, fname; if (target.Name == null) { ename = "E_" + target.Host.Descriptor.Name + "_CoState"; fname = "m_" + target.Host.Descriptor.Name + "_CoState"; } else { ename = "E_" + target.Host.Descriptor.Name + "_" + target.Name + "_CoState"; fname = "m_" + target.Host.Descriptor.Name + "_" + target.Name + "_CoState"; } Type tState = CreateEnum(ename, cfi.TotalStates); TypeDescriptor tdState = (TypeDescriptor)tState; ComponentDescriptor owner = (ComponentDescriptor)_code.Owner; owner.AddChild(tdState, tdState.Name); Type tStateSignal = typeof(Signal <>).MakeGenericType(tState); FieldBuilder fbStateSignal = _tComponent.DefineField(fname, tStateSignal, FieldAttributes.Private); Array enumValues = tState.GetEnumValues(); object initVal; if (cfi.HasNeutralTA) { initVal = cfi.FirstNeutral.StateValue; } else { initVal = enumValues.GetValue(0); } var sdState = owner.CreateSignalInstance(fname, initVal); cfi.CoStateSignal = new SignalRef(sdState, SignalRef.EReferencedProperty.Instance); cfi.CoStateType = tStateSignal; cfi.NextCoState.PlaceHolder = new SignalRef(sdState, SignalRef.EReferencedProperty.Next); foreach (CoStateInfo csi in cfi.StateInfos) { csi.StateValue = enumValues.GetValue(csi.StateIndex); csi.StateExpr.PlaceHolder = LiteralReference.CreateConstant(csi.StateValue); } } }