Exemplo n.º 1
0
        internal IndexStorageVisitor(SnapshotStorageEntry indexedEntry, Snapshot context, MemberIdentifier index)
        {
            _context = context;
            _index   = index;
            var indexedValues = indexedEntry.ReadMemory(context);

            VisitMemoryEntry(indexedValues);

            if (implicitArray != null)
            {
                //TODO replace only undefined values
                indexedEntry.WriteMemoryWithoutCopy(context, new MemoryEntry(implicitArray));
            }

            var forceStrong = indexedEntry.ForceStrong;

            if (_hasOnlyArrays && indexedEntry.HasDirectIdentifier && index.IsDirect)
            {
                //optimization
                forceStrong = true;
            }

            if (_needsTemporaryIndex)
            {
                foreach (var key in indexedEntry.Storages)
                {
                    _indexStorages.Add(new VariableIndexKey(key, _index));
                }
            }

            IndexedValue = new SnapshotStorageEntry(null, forceStrong, _indexStorages.ToArray());
        }
Exemplo n.º 2
0
        public override void Foreach(MemoryEntry enumeree, ReadWriteSnapshotEntryBase keyVariable,
                                     ReadWriteSnapshotEntryBase valueVariable)
        {
            var values = new HashSet <Value>();

            var array      = enumeree.PossibleValues.First() as AssociativeArray;
            var arrayEntry = OutSet.CreateSnapshotEntry(new MemoryEntry(array));

            var indexes = arrayEntry.IterateIndexes(OutSnapshot);

            foreach (var index in indexes)
            {
                var indexEntry = arrayEntry.ReadIndex(OutSnapshot, index);
                var element    = indexEntry.ReadMemory(OutSnapshot);
                values.UnionWith(element.PossibleValues);
            }

            valueVariable.WriteMemory(OutSnapshot, new MemoryEntry(values));
        }
Exemplo n.º 3
0
 public void Write(ReadWriteSnapshotEntryBase snapshotEntry, int value)
 {
     Write(snapshotEntry, Snapshot.CreateInt(value));
 }
Exemplo n.º 4
0
 public void Write(ReadWriteSnapshotEntryBase snapshotEntry, Value value)
 {
     AddOperation(new WriteOperation <T>(snapshotEntry, value));
 }
Exemplo n.º 5
0
 public void Read(ReadWriteSnapshotEntryBase snapshotEntry)
 {
     AddOperation(new ReadOperation <T>(snapshotEntry));
 }
Exemplo n.º 6
0
 internal void Alias(ReadWriteSnapshotEntryBase targetEntry, ReadWriteSnapshotEntryBase sourceEntry)
 {
     AddOperation(new AliasOperation <T>(targetEntry, sourceEntry));
 }
Exemplo n.º 7
0
 public ReadOperation(ReadWriteSnapshotEntryBase snapshotEntry)
 {
     // TODO: Complete member initialization
     this.snapshotEntry = snapshotEntry;
 }
Exemplo n.º 8
0
 /// <summary>
 /// Determine whether a variable is considered to be empty (i.e. null, false, 0, 0.0, "" etc.)
 /// </summary>
 /// <param name="snapshotEntry">A variable to be checked</param>
 /// <returns><c>true</c> whether a variable is empty, otherwise <c>false</c></returns>
 public abstract MemoryEntry EmptyEx(ReadWriteSnapshotEntryBase snapshotEntry);
Exemplo n.º 9
0
 /// <summary>
 /// Assign possible values to given target
 /// </summary>
 /// <param name="target">Target snapshot entry</param>
 /// <param name="entry">Possible values to be assigned</param>
 public abstract void Assign(ReadWriteSnapshotEntryBase target, MemoryEntry entry);
Exemplo n.º 10
0
 public SnapshotEntryFactory(SnapshotTester <T> tester, ReadWriteSnapshotEntryBase readWriteSnapshotEntryBase)
 {
     this.snapshotEntry = readWriteSnapshotEntryBase;
     this.tester        = tester;
 }
Exemplo n.º 11
0
 public override void AliasAssign(ReadWriteSnapshotEntryBase target, ReadSnapshotEntryBase aliasedValue)
 {
     target.SetAliases(OutSnapshot, aliasedValue);
 }
Exemplo n.º 12
0
 public override MemoryEntry EmptyEx(ReadWriteSnapshotEntryBase variable)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 13
0
 public override void Assign(ReadWriteSnapshotEntryBase target, MemoryEntry value)
 {
     target.WriteMemory(OutSnapshot, value);
 }
Exemplo n.º 14
0
 public WriteFromMemoryOperation(ReadWriteSnapshotEntryBase targetEntry, ReadWriteSnapshotEntryBase sourceEntry)
 {
     this.targetEntry = targetEntry;
     this.sourceEntry = sourceEntry;
 }
Exemplo n.º 15
0
 public WriteOperation(ReadWriteSnapshotEntryBase snapshotEntry, Value value)
 {
     // TODO: Complete member initialization
     this.snapshotEntry = snapshotEntry;
     this.value         = value;
 }
Exemplo n.º 16
0
 public void Write(ReadWriteSnapshotEntryBase snapshotEntry, string value)
 {
     Write(snapshotEntry, Snapshot.CreateString(value));
 }
Exemplo n.º 17
0
 /// <summary>
 /// Assign possible aliases to given target
 /// </summary>
 /// <param name="target">Target variable specifier</param>
 /// <param name="aliasedValue">Possible aliases to be assigned</param>
 public abstract void AliasAssign(ReadWriteSnapshotEntryBase target,
                                  ReadSnapshotEntryBase aliasedValue);
Exemplo n.º 18
0
        private void setTaint(ReadWriteSnapshotEntryBase variable, bool taint)
        {
            var infoValue = Output.CreateInfo(taint);

            variable.WriteMemory(Output, new MemoryEntry(infoValue));
        }
Exemplo n.º 19
0
 /// <summary>
 /// Process foreach statement on given variables
 /// </summary>
 /// <remarks>
 /// Is intended to store all possible values from enumeration into keyVariable and valueVariable
 /// </remarks>
 /// <param name="enumeree">Enumerated value</param>
 /// <param name="keyVariable">Variable where keys are stored</param>
 /// <param name="valueVariable">Variable where values are stored</param>
 public abstract void Foreach(MemoryEntry enumeree, ReadWriteSnapshotEntryBase keyVariable,
                              ReadWriteSnapshotEntryBase valueVariable);
Exemplo n.º 20
0
 internal void Write(ReadWriteSnapshotEntryBase targetEntry, ReadWriteSnapshotEntryBase sourceEntry)
 {
     AddOperation(new WriteFromMemoryOperation <T>(targetEntry, sourceEntry));
 }
Exemplo n.º 21
0
        private void setPropagation(ReadWriteSnapshotEntryBase variable, PropagationInfo propagation)
        {
            var infoValue = Output.CreateInfo(propagation);

            variable.WriteMemory(Output, new MemoryEntry(infoValue));
        }
Exemplo n.º 22
0
 public AliasOperation(ReadWriteSnapshotEntryBase targetEntry, ReadWriteSnapshotEntryBase sourceEntry)
 {
     this.targetEntry = targetEntry;
     this.sourceEntry = sourceEntry;
 }