Example #1
0
        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);
        }
Example #3
0
 internal DynamicVirtualStructInstance(IVirtualStructInstance structInstance) : base(structInstance)
 {
 }
Example #4
0
        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);
        }