public ParsingFrame GetParentFor(ParsingFrame frame)
            {
                ParsingFrame parent = this;

                while (frame.LastSymbolIndex < parent.LastSymbolIndex || parent.NumberIndex == frame.NumberIndex)
                {
                    parent = parent.Parent !;
                }

                return(parent);
            }
        public override void ProcessLine(ReadOnlySpan <char> line)
        {
            var frame = new ParsingFrame(line);

            // Starting a new thread
            if (frame.LastSymbolIndex == -1)
            {
                CallGraph.Add(new Thread(frame.Frame));
            }
            else
            {
                var parent = lastFrame !.GetParentFor(frame);

                parent.Frame.AddChild(frame.Frame, true);
                frame.Parent = parent;
            }

            lastFrame = frame;
        }
示例#3
0
 public bool Equals(ParsingFrame other)
 {
     return(ind == other.ind && Misc.AreEqual(module, other.module));
 }
示例#4
0
 public bool Equals(ParsingFrame other)
 {
     return ind == other.ind && Misc.AreEqual(module, other.module);
 }