Exemple #1
0
        /// <summary>
        /// Tests the and create implicit object.
        /// </summary>
        /// <param name="node">The node.</param>
        /// <param name="values">The values.</param>
        private void testAndCreateImplicitObject(MemoryCollectorNode node, HashSet <Value> values)
        {
            if (node.HasNewImplicitObject)
            {
                ObjectValue value = Snapshot.MemoryAssistant.CreateImplicitObject();
                values.Add(value);

                IObjectValueContainerBuilder objectValues = Structure.GetObjects(node.TargetIndex).Builder(Structure);
                objectValues.Add(value);
                Structure.SetObjects(node.TargetIndex, objectValues.Build(Structure));

                IObjectDescriptor        oldDescriptor = Structure.GetDescriptor(value);
                IObjectDescriptorBuilder builder       = oldDescriptor.Builder(Structure);

                foreach (var newChild in node.ImplicitObjectNode.UndefinedChildren)
                {
                    string childName = newChild.Item1;
                    MemoryCollectorNode childNode = newChild.Item2;

                    MemoryIndex index = ObjectIndex.Create(value, childName);
                    childNode.TargetIndex = index;

                    builder.AddIndex(childName, index);
                }

                IObjectDescriptor newDescriptor = builder.Build(Structure);
                Structure.SetDescriptor(value, newDescriptor);

                enqueueChildNodes(node.ImplicitObjectNode);
            }
        }
Exemple #2
0
 /// <summary>
 /// Tests the and create implicit array.
 /// </summary>
 /// <param name="node">The node.</param>
 /// <param name="values">The values.</param>
 public void testAndCreateImplicitArray(MemoryCollectorNode node, ICollection <Value> values)
 {
     if (node.HasNewImplicitArray)
     {
         createArray(node, values);
     }
 }
Exemple #3
0
        /// <summary>
        /// Processes the source array.
        /// </summary>
        /// <param name="node">The node.</param>
        /// <param name="arrayValue">The array value.</param>
        /// <param name="values">The values.</param>
        private void processSourceArray(MemoryCollectorNode node, AssociativeArray arrayValue, ICollection <Value> values)
        {
            if (arrayValue != null)
            {
                IArrayDescriptor sourceArray = Structure.GetDescriptor(arrayValue);

                if (node.AnyChildNode == null)
                {
                    node.CreateMemoryIndexAnyChild(sourceArray.UnknownIndex);
                }

                foreach (var item in sourceArray.Indexes)
                {
                    string      name  = item.Key;
                    MemoryIndex index = item.Value;

                    if (!node.NamedChildNodes.ContainsKey(name))
                    {
                        LocationCollectorNode newChild = node.CreateMemoryIndexChildFromAny(name, sourceArray.UnknownIndex);
                        newChild.IsMust = node.IsMust;
                    }
                }

                createArray(node, values);
            }
            else
            {
                testAndCreateImplicitArray(node, values);
            }
        }
Exemple #4
0
        /// <summary>
        /// Processes the source aliases.
        /// </summary>
        /// <param name="node">The node.</param>
        /// <param name="memoryAlias">The memory alias.</param>
        private void processSourceAliases(MemoryCollectorNode node, IMemoryAlias memoryAlias)
        {
            if (memoryAlias != null && memoryAlias.HasAliases)
            {
                if (node.IsMust)
                {
                    foreach (MemoryIndex alias in memoryAlias.MustAliases)
                    {
                        Snapshot.AddAlias(alias, node.TargetIndex, null);
                    }

                    foreach (MemoryIndex alias in memoryAlias.MayAliases)
                    {
                        Snapshot.AddAlias(alias, null, node.TargetIndex);
                    }

                    Snapshot.MustSetAliases(node.TargetIndex, memoryAlias.MustAliases, memoryAlias.MayAliases);
                }
                else
                {
                    HashSet <MemoryIndex> aliases = new HashSet <MemoryIndex>();
                    CollectionMemoryUtils.AddAll(aliases, memoryAlias.MustAliases);
                    CollectionMemoryUtils.AddAll(aliases, memoryAlias.MayAliases);

                    foreach (MemoryIndex alias in aliases)
                    {
                        Snapshot.AddAlias(alias, null, node.TargetIndex);
                    }

                    Snapshot.MaySetAliases(node.TargetIndex, aliases);
                }
            }
        }
Exemple #5
0
 /// <summary>
 /// Processes the source objects.
 /// </summary>
 /// <param name="node">The node.</param>
 /// <param name="objects">The objects.</param>
 private void processSourceObjects(MemoryCollectorNode node, IObjectValueContainer objects)
 {
     if (objects != null && objects.Count > 0)
     {
         IObjectValueContainer targetObjects = Factories.StructuralContainersFactories.ObjectValueContainerFactory.CreateObjectValueContainer(Structure, objects);
         Structure.SetObjects(node.TargetIndex, targetObjects);
     }
 }
Exemple #6
0
        /// <summary>
        /// Creates the array.
        /// </summary>
        /// <param name="node">The node.</param>
        /// <param name="values">The values.</param>
        /// <returns>New created array</returns>
        public AssociativeArray createArray(MemoryCollectorNode node, ICollection <Value> values)
        {
            AssociativeArray createdArrayValue = Snapshot.CreateArray(node.TargetIndex);

            values.Add(createdArrayValue);

            if (node.AnyChildNode != null)
            {
                IArrayDescriptor descriptor = Structure.GetDescriptor(createdArrayValue);
                node.AnyChildNode.TargetIndex = descriptor.UnknownIndex;
            }

            return(createdArrayValue);
        }
Exemple #7
0
        /// <summary>
        /// Processes the variables.
        /// </summary>
        /// <param name="stackLevel">The stack level.</param>
        /// <param name="node">The node.</param>
        private void processVariables(int stackLevel, CollectorNode node)
        {
            if (node.HasUndefinedChildren)
            {
                IWriteableIndexContainer writeableVariableContainer = Structure.GetWriteableStackContext(stackLevel).WriteableVariables;
                foreach (var newChild in node.UndefinedChildren)
                {
                    string childName = newChild.Item1;
                    MemoryCollectorNode childNode = newChild.Item2;

                    MemoryIndex index = VariableIndex.Create(childName, stackLevel);
                    childNode.TargetIndex = index;

                    writeableVariableContainer.AddIndex(childName, index);
                }
            }
            enqueueChildNodes(node);
        }
Exemple #8
0
        /// <summary>
        /// Processes the object.
        /// </summary>
        /// <param name="objectValue">The object value.</param>
        /// <param name="node">The node.</param>
        private void processObject(ObjectValue objectValue, ContainerCollectorNode node)
        {
            if (node.HasUndefinedChildren)
            {
                IObjectDescriptor        oldDescriptor = Structure.GetDescriptor(objectValue);
                IObjectDescriptorBuilder builder       = oldDescriptor.Builder(Structure);
                foreach (var newChild in node.UndefinedChildren)
                {
                    string childName = newChild.Item1;
                    MemoryCollectorNode childNode = newChild.Item2;

                    MemoryIndex index = ObjectIndex.Create(objectValue, childName);
                    childNode.TargetIndex = index;

                    builder.AddIndex(childName, index);
                }

                IObjectDescriptor newDescriptor = builder.Build(Structure);
                Structure.SetDescriptor(objectValue, newDescriptor);
            }
            enqueueChildNodes(node);
        }
Exemple #9
0
        /// <summary>
        /// Tests the and create undefined children.
        /// </summary>
        /// <param name="node">The node.</param>
        private void testAndCreateUndefinedChildren(MemoryCollectorNode node)
        {
            if (node.HasUndefinedChildren)
            {
                AssociativeArray arrayValue = Structure.GetArray(node.TargetIndex);

                IArrayDescriptor        oldDescriptor = Structure.GetDescriptor(arrayValue);
                IArrayDescriptorBuilder builder       = oldDescriptor.Builder(Structure);

                foreach (var newChild in node.UndefinedChildren)
                {
                    string childName = newChild.Item1;
                    MemoryCollectorNode childNode = newChild.Item2;

                    MemoryIndex index = node.TargetIndex.CreateIndex(childName);
                    childNode.TargetIndex = index;

                    builder.AddIndex(childName, index);
                }

                IArrayDescriptor newDescriptor = builder.Build(Structure);
                Structure.SetDescriptor(arrayValue, newDescriptor);
            }
        }