Example #1
0
            private void UpdateState(ConstantPropagationDomain state, IVariable v, Constant c)
            {
                var cpd = ConstantSetDomain.Bottom;

                cpd.Add(c);
                state.Set(v, cpd);
            }
Example #2
0
            private void UpdateState(ConstantPropagationDomain state, IFieldReference f, Constant c)
            {
                var cpd = ConstantSetDomain.Bottom;

                cpd.Add(c);
                state.Set(f, cpd);
            }
Example #3
0
        public ConstantPropagationDomain Clone()
        {
            var clone = new ConstantPropagationDomain();

            foreach (var v in varMapping.Keys)
            {
                clone.Set(v, varMapping[v].Clone());
            }
            foreach (var f in fieldMapping.Keys)
            {
                clone.Set(f, fieldMapping[f].Clone());
            }

            return(clone);
        }
Example #4
0
        public static ConstantPropagationDomain Bottom(IEnumerable <IVariable> vars, IEnumerable <IFieldReference> fields)
        {
            var cpd = new ConstantPropagationDomain();

            foreach (var v in vars)
            {
                cpd.Set(v, ConstantSetDomain.Bottom);
            }

            foreach (var f in fields)
            {
                cpd.Set(f, ConstantSetDomain.Bottom);
            }

            return(cpd);
        }
Example #5
0
        public void Join(ConstantPropagationDomain other)
        {
            if (VarCount != other.VarCount)
            {
                throw new IncompatibleConstantPropagationDomains("Not the same variable set!");
            }

            for (int i = 0; i < varMapping.Keys.Count; i++)
            {
                var v = varMapping.Keys.ElementAt(i);
                if (!other.Contains(v))
                {
                    throw new IncompatibleConstantPropagationDomains("Not the same variable set! " + v.ToString());
                }
                var ncsd = Constants(v).Clone();
                ncsd.Join(other.Constants(v));
                Set(v, ncsd);
            }

            if (FieldCount != other.FieldCount)
            {
                throw new IncompatibleConstantPropagationDomains("Not the same field set!");
            }

            for (int i = 0; i < fieldMapping.Keys.Count; i++)
            {
                var f = fieldMapping.Keys.ElementAt(i);
                if (!other.Contains(f))
                {
                    throw new IncompatibleConstantPropagationDomains("Not the same field set! " + f.ToString());
                }
                var ncsd = Constants(f).Clone();
                ncsd.Join(other.Constants(f));
                Set(f, ncsd);
            }
        }
Example #6
0
            private void UpdateStateCopy(ConstantPropagationDomain state, IVariable dest, IFieldReference src)
            {
                var cl = state.Constants(src).Clone();

                state.Set(dest, cl);
            }
Example #7
0
 private void UpdateStateNotConstant(ConstantPropagationDomain state)
 {
     state.SetNonConstant();
 }
Example #8
0
 private void UpdateStateNotConstant(ConstantPropagationDomain state, IFieldReference f)
 {
     state.SetNonConstant(f);
 }
Example #9
0
 private void UpdateStateNotConstant(ConstantPropagationDomain state, IVariable v)
 {
     state.SetNonConstant(v);
 }
Example #10
0
 private void SavePostState(Instruction instruction, ConstantPropagationDomain cpd)
 {
     postState[instruction] = cpd;
 }
Example #11
0
 private void SetCurrent(ConstantPropagationDomain curr)
 {
     current = curr;
 }
Example #12
0
 public ConstantPropagationTransferVisitor(ConstantPropagationDomain start, ConstantPropagationSetAnalysis dad)
 {
     parent = dad;
     SetCurrent(start);
 }