Skip to content

Commit d1cf7b1

Browse files
committed
Merge pull request #1512 from mgreter/bugfix/fixup-error-reporting
Fix error reporting regression
2 parents 51449ed + 8861bc1 commit d1cf7b1

File tree

2 files changed

+29
-15
lines changed

2 files changed

+29
-15
lines changed

src/parser.cpp

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -996,7 +996,7 @@ namespace Sass {
996996
prop->is_delayed(true);
997997
}
998998
else {
999-
error("invalid property name", pstate);
999+
css_error("Invalid CSS", " after ", ": expected \"}\", was ");
10001000
}
10011001
bool is_indented = true;
10021002
const std::string property(lexed);
@@ -2417,34 +2417,48 @@ namespace Sass {
24172417
{
24182418
int max_len = 14;
24192419
const char* pos = peek < optional_spaces >();
2420+
2421+
const char* last_pos(pos - 1);
24202422
// backup position to last significant char
2421-
while (!*pos || Prelexer::is_space(*pos)) -- pos;
2423+
while ((!*last_pos || Prelexer::is_space(*last_pos)) && last_pos > source) -- last_pos;
2424+
24222425
bool ellipsis_left = false;
2423-
const char* pos_left(pos + 1);
2424-
if (pos_left < source) pos_left = source;
2425-
while (*pos_left && pos_left > source) {
2426-
if (pos - pos_left > max_len) {
2426+
const char* pos_left(last_pos);
2427+
const char* end_left(last_pos);
2428+
std::cerr << "we have " << int(*pos_left) << "\n";
2429+
while (pos_left > source) {
2430+
if (end_left - pos_left > max_len) {
24272431
ellipsis_left = true;
24282432
break;
24292433
}
2434+
std::cerr << "back up\n";
2435+
24302436
const char* prev = pos_left - 1;
24312437
if (*prev == '\r') break;
24322438
if (*prev == '\n') break;
24332439
pos_left = prev;
24342440
}
2441+
if (pos_left < source) {
2442+
std::cerr << "NOW RESET\n";
2443+
pos_left = source;
2444+
}
2445+
24352446
bool ellipsis_right = false;
2436-
const char* pos_right(pos + 1);
2437-
while (*pos_right && pos_right <= end) {
2438-
if (pos_right - pos > max_len) {
2447+
const char* end_right(pos);
2448+
const char* pos_right(pos);
2449+
while (end_right <= end) {
2450+
if (end_right - pos_right > max_len) {
24392451
ellipsis_right = true;
24402452
break;
24412453
}
2442-
if (*pos_right == '\r') break;
2443-
if (*pos_right == '\n') break;
2444-
++ pos_right;
2454+
if (*end_right == '\r') break;
2455+
if (*end_right == '\n') break;
2456+
++ end_right;
24452457
}
2446-
std::string left(pos_left, pos + 1);
2447-
std::string right(pos + 1, pos_right);
2458+
if (end_right > end) end_right = end;
2459+
2460+
std::string left(pos_left, end_left);
2461+
std::string right(pos_right, end_right);
24482462
if (ellipsis_left) left = ellipsis + left;
24492463
if (ellipsis_right) right = right + ellipsis;
24502464
// now pass new message to the more generic error function

src/util.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,7 @@ namespace Sass {
430430

431431
int cp = utf8::next(it, end);
432432

433-
if (cp == 10) {
433+
if (cp == '\n') {
434434
quoted.push_back('\\');
435435
quoted.push_back('a');
436436
// we hope we can remove this flag once we figure out

0 commit comments

Comments
 (0)