public void VisitUnknownIndexCollectorNode(UnknownIndexCollectorNode node) { if (node.IsCollected) { collectUnknownIndexCollectorNode(node); } else { continueUnknownIndexCollectorNode(node); } }
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)); } }
/// <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); }
/// <summary> /// Perform custom assign operation on unknown node. /// </summary> /// <param name="node">The node.</param> protected abstract void collectUnknownIndexCollectorNode(UnknownIndexCollectorNode node);
protected override void collectUnknownIndexCollectorNode(UnknownIndexCollectorNode node) { storeAliasIndex(node); continueUnknownIndexCollectorNode(node); }