Beispiel #1
0
 public override void Visit(IPCNodeVisitor visitor, string methodName, List <PCNode> states, List <StepDescriptor> steps,
                            Dictionary <ArmadaPC, int> visitedLoops, List <bool> branches)
 {
     states.Add(this);
     visitor.Visit(methodName, states, steps, visitedLoops, branches);
     states.RemoveAt(states.Count - 1);
 }
Beispiel #2
0
 public override void Visit(IPCNodeVisitor visitor, string methodName, List <PCNode> states, List <StepDescriptor> steps,
                            Dictionary <ArmadaPC, int> visitedLoops, List <bool> branches)
 {
     states.Add(this);
     visitor.Visit(methodName, states, steps, visitedLoops, branches);
     steps.Add(new StepDescriptor(StepDescriptorType.Direct, nextRoutine));
     successor.Visit(visitor, methodName, states, steps, visitedLoops, branches);
     steps.RemoveAt(steps.Count - 1);
     states.RemoveAt(states.Count - 1);
 }
Beispiel #3
0
        public static void Visit(ArmadaSymbolTable symbols, MethodInfo methodInfo, IPCNodeVisitor visitor)
        {
            var states    = new List <PCNode>();
            var steps     = new List <StepDescriptor>();
            var loopHeads = new HashSet <ArmadaPC>();
            var branches  = new List <bool>();

            var rootNode = methodInfo.method.Body == null?GeneratePCStructureForMethodWithNoBody(symbols, methodInfo, loopHeads)
                               : GeneratePCStructureForMethodWithBody(methodInfo, loopHeads);

            var visitedLoops = loopHeads.ToDictionary(h => h, h => - 1);

            rootNode.Visit(visitor, methodInfo.method.Name, states, steps, visitedLoops, branches);
        }
Beispiel #4
0
 public override void Visit(IPCNodeVisitor visitor, string methodName, List <PCNode> states, List <StepDescriptor> steps,
                            Dictionary <ArmadaPC, int> visitedLoops, List <bool> branches)
 {
     states.Add(this);
     visitor.Visit(methodName, states, steps, visitedLoops, branches);
     visitedLoops[pc] = states.Count - 1;
     steps.Add(new StepDescriptor(StepDescriptorType.WhileTrue, nextRoutineWhenTrue));
     branches.Add(true);
     successorWhenTrue.Visit(visitor, methodName, states, steps, visitedLoops, branches);
     steps.RemoveAt(steps.Count - 1);
     steps.Add(new StepDescriptor(StepDescriptorType.WhileFalse, nextRoutineWhenFalse));
     branches.RemoveAt(branches.Count - 1);
     branches.Add(false);
     successorWhenFalse.Visit(visitor, methodName, states, steps, visitedLoops, branches);
     steps.RemoveAt(steps.Count - 1);
     states.RemoveAt(states.Count - 1);
     branches.RemoveAt(branches.Count - 1);
     visitedLoops[pc] = -1;
 }
Beispiel #5
0
 public abstract void Visit(IPCNodeVisitor visitor, string methodName, List <PCNode> states, List <StepDescriptor> steps,
                            Dictionary <ArmadaPC, int> visitedLoops, List <bool> branches);