blob: 494accaf7b5ecb42cac5a4b95ea6499753a0b98f [file] [log] [blame]
/*
* Copyright 2022 Google LLC.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "include/sksl/SkSLPosition.h"
#include <algorithm>
namespace SkSL {
int Position::line(std::string_view source) const {
SkASSERT(this->valid());
if (fStartOffset == -1) {
return -1;
}
if (!source.data()) {
return -1;
}
// we allow the offset to equal the length, because that's where TK_END_OF_FILE is reported
SkASSERT(fStartOffset <= (int)source.length());
int offset = std::min(fStartOffset, (int)source.length());
int line = 1;
for (int i = 0; i < offset; i++) {
if (source[i] == '\n') {
++line;
}
}
return line;
}
} // namespace SkSL