Esempio n. 1
0
        private Positions ExprReplacementPositions(DareResult r, int tokPos, bool hasReplacement)
        {
            var ending           = InvarDecEndPosition(r);
            var tokLen           = ending.Item1 - tokPos;
            var usesTrailingSemi = ending.Item2;

            if (!hasReplacement && usesTrailingSemi)
            {
                tokLen++;
            }

            var current = tokPos + tokLen;
            var looking = true;

            while (looking)
            {
                var currentWord = new SnapshotSpan(Snapshot, current - 1, 1).GetText();
                looking = currentWord.Trim() == "";
                if (--current <= 0)
                {
                    throw new IndexOutOfRangeException($"Managed to escape {r.TypeOfRemovable}");
                }
            }

            tokLen--;

            return(new Positions(tokPos, tokLen));
        }
Esempio n. 2
0
        private DeadAnnotationTag FindStmtTag(DareResult r)
        {
            var replacement = FindReplacement(r.Replace, r.StartTok.pos, r.TypeOfRemovable);
            var pos         = StmtReplacementPositions(r.StartTok.pos, r.Length, r.Replace != null);

            return(new DeadAnnotationTag(Snapshot, pos.ReplaceStart, pos.ReplaceLength, replacement, r.TypeOfRemovable, r.StartTok.filename));
        }
Esempio n. 3
0
        private DeadAnnotationTag FindExprTag(DareResult r)
        {
            var actualTokPos = InvarDecStartPosition(r);
            var replacement  = FindReplacement(r.Replace, actualTokPos, r.TypeOfRemovable);
            var pos          = ExprReplacementPositions(r, actualTokPos, r.Replace != null);

            return(new DeadAnnotationTag(Snapshot, pos.ReplaceStart, pos.ReplaceLength, replacement, r.TypeOfRemovable, r.StartTok.filename));
        }
Esempio n. 4
0
        private int InvarDecStartPosition(DareResult r)
        {
            var current     = r.StartTok.pos;
            var currentSpan = new SnapshotSpan();
            var looking     = true;
            var matchers    = new [] { "invariant", "decreases" };

            while (looking)
            {
                currentSpan = _tsn.GetExtentOfWord(new SnapshotPoint(Snapshot, current)).Span;
                var currentWord = currentSpan.GetText();
                looking = matchers.All(x => x != currentWord);
                current--;
                if (currentWord == ";" || currentWord == "}" || current <= 0)
                {
                    throw new IndexOutOfRangeException($"Managed to escape {r.TypeOfRemovable}");
                }
            }
            return(currentSpan.Start.Position);
        }
Esempio n. 5
0
        private Tuple <int, bool> InvarDecEndPosition(DareResult r)
        {
            var current     = r.StartTok.pos;
            var currentSpan = new SnapshotSpan();
            var currentWord = "";
            var looking     = true;
            var matchers    = new [] { "invariant", "decreases", ";", "{" };

            while (looking)
            {
                currentSpan = _tsn.GetExtentOfWord(new SnapshotPoint(Snapshot, current)).Span;
                currentWord = currentSpan.GetText();
                looking     = matchers.All(x => x != currentWord);
                current++;
                if (currentWord == "}" || current >= Snapshot.Length)
                {
                    throw new IndexOutOfRangeException($"Managed to escape {r.TypeOfRemovable}");
                }
            }
            return(new Tuple <int, bool>(currentSpan.Start.Position, currentWord == ";"));
        }
Esempio n. 6
0
        private DeadAnnotationTag ProcessValidResult(DareResult r)
        {
            DeadAnnotationTag tag;

            switch (r.TypeOfRemovable)
            {
            case "Assert Statement":
            case "Calc Statement":
            case "Lemma Call":
                tag = FindStmtTag(r);
                break;

            case "Decreases Expression":
            case "Invariant":
                tag = FindExprTag(r);
                break;

            default:
                throw new Tcce.UnreachableException();
            }
            AddTag(tag);
            return(tag);
        }