[cfe-commits] r166265 - /cfe/trunk/lib/Basic/SourceManager.cpp

Matt Beaumont-Gay matthewbg at google.com
Fri Dec 14 15:58:32 PST 2012


Hi Craig,

Looks like this caused PR14570.

On Thu, Oct 18, 2012 at 9:40 PM, Craig Topper <craig.topper at gmail.com> wrote:
> Author: ctopper
> Date: Thu Oct 18 23:40:38 2012
> New Revision: 166265
>
> URL: http://llvm.org/viewvc/llvm-project?rev=166265&view=rev
> Log:
> Teach getColumnNumber to use the line cache to get the start of the line if its on the same line as the last call to getLineNumber. Prevents needing to scan backwards for the new line. Fixes PR14106.
>
> Modified:
>     cfe/trunk/lib/Basic/SourceManager.cpp
>
> Modified: cfe/trunk/lib/Basic/SourceManager.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/SourceManager.cpp?rev=166265&r1=166264&r2=166265&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Basic/SourceManager.cpp (original)
> +++ cfe/trunk/lib/Basic/SourceManager.cpp Thu Oct 18 23:40:38 2012
> @@ -1029,6 +1029,17 @@
>      return 1;
>    }
>
> +  // See if we just calculated the line number for this FilePos and can use
> +  // that to lookup the start of the line instead of searching for it.
> +  if (LastLineNoFileIDQuery == FID &&
> +      LastLineNoContentCache->SourceLineCache != 0) {
> +    unsigned *SourceLineCache = LastLineNoContentCache->SourceLineCache;
> +    unsigned LineStart = SourceLineCache[LastLineNoResult - 1];
> +    unsigned LineEnd = SourceLineCache[LastLineNoResult];
> +    if (FilePos >= LineStart && FilePos < LineEnd)
> +      return FilePos - LineStart + 1;
> +  }
> +
>    const char *Buf = MemBuf->getBufferStart();
>    unsigned LineStart = FilePos;
>    while (LineStart && Buf[LineStart-1] != '\n' && Buf[LineStart-1] != '\r')
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits



More information about the cfe-commits mailing list