示例#1
0
 public void VisitUnknownIndexCollectorNode(UnknownIndexCollectorNode node)
 {
     if (node.IsCollected)
     {
         collectUnknownIndexCollectorNode(node);
     }
     else
     {
         continueUnknownIndexCollectorNode(node);
     }
 }
示例#2
0
        protected override void collectUnknownIndexCollectorNode(UnknownIndexCollectorNode node)
        {
            PathModifications.GetOrCreateModification(node.TargetIndex).SetCollectedIndex();

            if (node.IsMust || ForceStrongWrite)
            {
                AddOperation(new UndefinedMustAssignOperation(this, node.TargetIndex, memoryEntryCollector.RootNode, AssignAliasesIntoCollectedIndexes));
            }
            else
            {
                AddOperation(new UnknownIndexMayAssign(this, node.SourceIndex, node.TargetIndex, memoryEntryCollector.RootNode, AssignAliasesIntoCollectedIndexes));
            }
        }
示例#3
0
        /// <summary>
        /// Continues the unknown index collector node.
        /// </summary>
        /// <param name="node">The node.</param>
        protected void continueUnknownIndexCollectorNode(UnknownIndexCollectorNode node)
        {
            Structure.NewIndex(node.TargetIndex);
            PathModifications.GetOrCreateModification(node.TargetIndex).AddDatasource(node.SourceIndex, Snapshot);

            IIndexDefinition definition = Structure.GetIndexDefinition(node.SourceIndex);
            HashSet <Value>  values     = new HashSet <Value>();

            processSourceAliases(node, definition.Aliases);
            processSourceArray(node, definition.Array, values);
            processSourceObjects(node, definition.Objects);
            testAndCreateImplicitObject(node, values);
            testAndCreateUndefinedChildren(node);

            MemoryEntry entry = SnapshotDataUtils.GetMemoryEntry(Snapshot, Data, node.SourceIndex);

            copyEntryValues(entry, values, node.IsMust, true);
            Data.SetMemoryEntry(node.TargetIndex, Snapshot.CreateMemoryEntry(values));

            enqueueLocationChildNodes(node);
        }
示例#4
0
 /// <summary>
 /// Perform custom assign operation on unknown node.
 /// </summary>
 /// <param name="node">The node.</param>
 protected abstract void collectUnknownIndexCollectorNode(UnknownIndexCollectorNode node);
示例#5
0
 protected override void collectUnknownIndexCollectorNode(UnknownIndexCollectorNode node)
 {
     storeAliasIndex(node);
     continueUnknownIndexCollectorNode(node);
 }