コード例 #1
0
            public override void EnterIfDef(VariableStateCalculatorGrammarParser.IfDefContext context)
            {
                Int32 usedParameter = Int32.Parse(context.NUMBER().GetText());

                FrameStack.Push(new ExecutionFrame(usedParameter));
                base.EnterIfDef(context);
            }
コード例 #2
0
        public static FrameStack reloadFrame(FrameStack fs, SysLinkedNode xs)
        {
            Frame fr = Frame.create(xs);
            FrameStack nextFS = fs.getNext();

            return FrameStack.cons(nextFS, fr);
        }
コード例 #3
0
            public override void ExitIfDef(VariableStateCalculatorGrammarParser.IfDefContext context)
            {
                ExecutionFrame frame = FrameStack.Pop();

                FrameStack.Peek().Merge(frame);
                base.ExitIfDef(context);
            }
コード例 #4
0
            public override void VisitLocalDeclarationStatement(LocalDeclarationStatementSyntax node)
            {
                if (node.Declaration.Variables.Count != 1)
                {
                    // unexpected case
                    throw new NotSupportedException();
                }
                VariableDeclaratorSyntax variable = node.Declaration.Variables[0];
                String variableId = variable.Identifier.Text;

                if (variableId != VariableName)
                {
                    // unexpected case
                    throw new NotSupportedException();
                }
                IList <SyntaxNode> variableChildren = variable.ChildNodes().ToList();

                if (variableChildren.Count == 1 && variableChildren[0] is EqualsValueClauseSyntax)
                {
                    EqualsValueClauseSyntax value = (EqualsValueClauseSyntax)variableChildren[0];
                    FrameStack.Peek().States.Clear();
                    FrameStack.Peek().States.Add(new ExecutionState(Int32.Parse(value.Value.GetText().ToString())));
                }
                base.VisitLocalDeclarationStatement(node);
            }
コード例 #5
0
            public override void EnterAssignmentDef(VariableStateCalculatorGrammarParser.AssignmentDefContext context)
            {
                Int32 value = Int32.Parse(context.NUMBER().GetText());

                FrameStack.Peek().States.Clear();
                FrameStack.Peek().States.Add(new ExecutionState(value));
                base.EnterAssignmentDef(context);
            }
コード例 #6
0
        public static FrameStack retopr(FrameStack fs, ref Object v)
        {
            Frame x = fs.getAtPos(0);
            v = x.getFromTop(0);
            fs = fs.getNext();
            return fs;

        }
コード例 #7
0
        public static FrameStack push(FrameStack fs, Object v)
        {
            Frame x = fs.getValue();
            FrameStack sStack = fs.getNext();

            Frame x2 = Frame.push(x, v);

            return FrameStack.cons(sStack, x2);
        }
コード例 #8
0
            public override void EnterXVariableDef(VariableStateCalculatorGrammarParser.XVariableDefContext context)
            {
                ITerminalNode valueNode = context.NUMBER();

                if (valueNode != null)
                {
                    Int32 value = Int32.Parse(valueNode.GetText());
                    FrameStack.Peek().States.Clear();
                    FrameStack.Peek().States.Add(new ExecutionState(value));
                }
                base.EnterXVariableDef(context);
            }
コード例 #9
0
            internal void StopAndPop(Frame frame)
            {
                var removed = FrameStack.Pop();

                if (removed != frame)
                {
                    throw new Exception($"Profiler stack mismatch! {removed.Node} != {frame.Node}!");
                }
                removed.Stop();
                if (FrameStack.Count > 0)
                {
                    var top = FrameStack.Peek();
                    top.Resume();
                }
            }
コード例 #10
0
            internal Frame PushAndStart(Node node)
            {
                var top = FrameStack.Peek();

                if (!top.ChildFrames.TryGetValue(node, out var frame))
                {
                    frame = new Frame(node, this);
                    top.ChildFrames.Add(node, frame);
                }

                top.Pause();
                FrameStack.Push(frame);
                frame.Start();
                return(frame);
            }
コード例 #11
0
            public override void VisitIfStatement(IfStatementSyntax node)
            {
                if (node.Else != null)
                {
                    // unexpected case
                    throw new NotSupportedException();
                }
                Int32 usedParameter = ExtractParameterFromCondition(node.Condition);

                FrameStack.Push(new ExecutionFrame(usedParameter));
                base.VisitIfStatement(node);
                ExecutionFrame frame = FrameStack.Pop();

                FrameStack.Peek().Merge(frame);
            }
コード例 #12
0
        public Stream GetSuspensionStream()
        {
            var stack = new FrameStack
            {
                Back = (from pse in BackStack
                        select pse.Parameter + "").ToList(),
                Current = CurrentPageStackEntry.Parameter + "",
                Forward = (from pse in ForwardStack
                           select pse.Parameter + "").ToList(),
            };

            var ms         = new MemoryStream();
            var serializer = new DataContractJsonSerializer(typeof(FrameStack), new DataContractJsonSerializerSettings());

            serializer.WriteObject(ms, stack);
            ms.Position = 0;
            return(ms);
        }
コード例 #13
0
            public override void VisitAssignmentExpression(AssignmentExpressionSyntax node)
            {
                IdentifierNameSyntax    left  = node.Left as IdentifierNameSyntax;
                LiteralExpressionSyntax right = node.Right as LiteralExpressionSyntax;

                if (left == null || right == null)
                {
                    // unexpected case
                    throw new NotSupportedException();
                }
                String identifier = left.Identifier.Text;
                Object value      = right.Token.Value;

                if (identifier != VariableName)
                {
                    // unexpected case
                    throw new NotSupportedException();
                }
                FrameStack.Peek().States.Clear();
                FrameStack.Peek().States.Add(new ExecutionState((Int32)value));
                base.VisitAssignmentExpression(node);
            }
コード例 #14
0
 public static FrameStack addFrame(FrameStack fs, SysLinkedNode xs)
 {
     Frame fr = Frame.create(xs);
     return FrameStack.cons(fs, fr);
 }
コード例 #15
0
 public static FrameStack deleteFrame(FrameStack fs)
 {
     return fs.getNext();
 }
コード例 #16
0
 public static Object get(FrameStack fs, int frameno, int index)
 {
     Frame x = fs.getAtPos(frameno);
     return x.getFromBottom(index);
 }
コード例 #17
0
 public ThreadInfo(Node root)
 {
     Root = new Frame(root, this);
     Root.Start();
     FrameStack.Push(Root);
 }
コード例 #18
0
 public static FrameStack newFrame(FrameStack fs)
 {
     return FrameStack.cons(fs, Frame.create());
 }
コード例 #19
0
 public override void EnterEvaluateBodyDef(VariableStateCalculatorGrammarParser.EvaluateBodyDefContext context)
 {
     FrameStack.Push(new ExecutionFrame());
     base.EnterEvaluateBodyDef(context);
 }