public bool AddMember(ISymbol memberInstance, IVirtualStructInstance parent) { bool flag = ((IVirtualStructInstance)base.symbol).AddMember(memberInstance, parent); string instanceName = memberInstance.InstanceName; if (flag) { IDynamicSymbol symbol = memberInstance as IDynamicSymbol; if (symbol != null) { instanceName = symbol.NormalizedName; } base.normalizedDict.Add(instanceName, memberInstance); } return(flag); }
public bool AddMember(ISymbol memberInstance, IVirtualStructInstance parent) { bool flag = false; if (this._virtualMembers.isUnique(memberInstance)) { this._virtualMembers.Add(memberInstance); flag = true; } else { object[] args = new object[] { memberInstance, parent }; Module.Trace.TraceWarning("Cannot add ambiguous instance '{0}' to virtual parent '{1}!", args); flag = false; } return(flag); }
internal DynamicVirtualStructInstance(IVirtualStructInstance structInstance) : base(structInstance) { }
public ISymbol Bind(IHierarchicalSymbol subSymbol) { string str; string str2; IHierarchicalSymbol parent = (IHierarchicalSymbol)subSymbol.Parent; if (((parent == null) && this.UseVirtualInstances) && SymbolParser.TryParseParentPath(subSymbol, out str2, out str)) { string str3; IList <int[]> list; SymbolParser.ArrayIndexType type; string indicesStr = null; bool flag2 = SymbolParser.TryParseArrayElement(str2, out str3, out indicesStr, out list, out type); ISymbol symbol = null; if (this._provider.SymbolsInternal.TryGetInstanceHierarchically(str2, out symbol)) { parent = (IHierarchicalSymbol)symbol; } else if (!flag2) { parent = (IHierarchicalSymbol)this._symbolFactory.CreateVirtualStruct(str, str2, null); this.Bind(parent); } else { ISymbol symbol3 = null; if (!this._provider.SymbolsInternal.TryGetInstance(str3, out symbol3)) { object[] args = new object[] { subSymbol.InstancePath }; Module.Trace.TraceWarning("Cannot bind subSymbol '{0}'", args); } else { for (int i = 0; i < list.Count; i++) { parent = (IHierarchicalSymbol)this._symbolFactory.CreateArrayElement(list[i], (IArrayInstance)symbol3, (IArrayType)symbol3.DataType); this.Bind(parent); } } } if (parent != null) { subSymbol.SetParent(parent); IVirtualStructInstance instance = parent as IVirtualStructInstance; if (instance != null) { instance.AddMember(subSymbol, instance); } } } if (this._provider.SymbolsInternal.Contains(subSymbol)) { ((IInstanceInternal)subSymbol).SetInstanceName(this.createUniquePathName(subSymbol)); } try { if (subSymbol.Parent == null) { this._provider.SymbolsInternal.Add(subSymbol); } } catch (ArgumentException exception1) { string message = $"Cannot bind symbol '{subSymbol.InstancePath}' because of double registration. Ignoring symbol!"; Module.Trace.TraceWarning(message, exception1); } return(parent); }