Ejemplo n.º 1
0
 public void VisitMemoryIndexCollectorNode(MemoryIndexCollectorNode node)
 {
     if (node.IsCollected)
     {
         collectMemoryIndexCollectorNode(node);
     }
     else
     {
         continueMemoryIndexCollectorNode(node);
     }
 }
Ejemplo n.º 2
0
        protected override void collectMemoryIndexCollectorNode(MemoryIndexCollectorNode node)
        {
            PathModifications.GetOrCreateModification(node.TargetIndex).SetCollectedIndex();

            if (node.IsMust || ForceStrongWrite)
            {
                AddOperation(new MemoryIndexMustAssignOperation(this, node.TargetIndex, memoryEntryCollector.RootNode, AssignAliasesIntoCollectedIndexes));
            }
            else
            {
                AddOperation(new MemoryIndexMayAssignOperation(this, node.TargetIndex, memoryEntryCollector.RootNode, AssignAliasesIntoCollectedIndexes));
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Continues the memory index collector node.
        /// </summary>
        /// <param name="node">The node.</param>
        protected void continueMemoryIndexCollectorNode(MemoryIndexCollectorNode node)
        {
            HashSet <Value> values = new HashSet <Value>();

            testAndCreateImplicitArray(node, values);
            testAndCreateImplicitObject(node, values);
            testAndCreateUndefinedChildren(node);

            bool removeUndefined = node.IsMust && node.ContainsUndefinedValue;

            if (removeUndefined || values.Count > 0)
            {
                MemoryEntry entry = SnapshotDataUtils.GetMemoryEntry(Snapshot, Data, node.TargetIndex);
                copyEntryValues(entry, values, removeUndefined, false);
                Data.SetMemoryEntry(node.TargetIndex, Snapshot.CreateMemoryEntry(values));
            }

            enqueueLocationChildNodes(node);
        }
Ejemplo n.º 4
0
 /// <summary>
 /// Perform custom assign operation on memory index node.
 /// </summary>
 /// <param name="node">The node.</param>
 protected abstract void collectMemoryIndexCollectorNode(MemoryIndexCollectorNode node);
Ejemplo n.º 5
0
 /// <summary>
 /// Processes the temporary.
 /// </summary>
 /// <param name="memoryIndexNode">The memory index node.</param>
 private void processTemporary(MemoryIndexCollectorNode memoryIndexNode)
 {
     collectorNodesQueue.AddLast(memoryIndexNode);
 }
Ejemplo n.º 6
0
 protected override void collectMemoryIndexCollectorNode(MemoryIndexCollectorNode node)
 {
     storeAliasIndex(node);
     continueMemoryIndexCollectorNode(node);
 }