Index: src/scanner-base.cc |
diff --git a/src/scanner-base.cc b/src/scanner-base.cc |
index e141d0eb70726bddab28d09c3540767cf0ef754d..fe33f38e7287e316b9a04902094446ab68499309 100644 |
--- a/src/scanner-base.cc |
+++ b/src/scanner-base.cc |
@@ -99,9 +99,9 @@ uc32 Scanner::ScanHexEscape(uc32 c, int length) { |
// Octal escapes of the forms '\0xx' and '\xxx' are not a part of |
// ECMA-262. Other JS VMs support them. |
uc32 Scanner::ScanOctalEscape(uc32 c, int length) { |
- octal_pos_ = source_pos() - 1; // Already advanced |
uc32 x = c - '0'; |
- for (int i = 0; i < length; i++) { |
+ int i = 0; |
+ for (; i < length; i++) { |
int d = c0_ - '0'; |
if (d < 0 || d > 7) break; |
int nx = x * 8 + d; |
@@ -109,6 +109,12 @@ uc32 Scanner::ScanOctalEscape(uc32 c, int length) { |
x = nx; |
Advance(); |
} |
+ // Anything excelt '\0' is an octal escape sequence, illegal in strict mode. |
+ // Remember the position of octal escape sequences so that better error |
+ // can be reported later (in strict mode). |
+ if (c != '0' || i > 0) { |
+ octal_pos_ = source_pos() - i - 1; // Already advanced |
+ } |
return x; |
} |