mirror of https://github.com/svaarala/duktape.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
1.2 KiB
81 lines
1.2 KiB
12 years ago
|
/*===
|
||
|
\u
|
||
|
1 u
|
||
|
\u1
|
||
|
2 u1
|
||
|
\u12
|
||
|
3 u12
|
||
|
\u123
|
||
|
4 u123
|
||
|
\u123G
|
||
|
5 u123G
|
||
|
\x
|
||
|
1 x
|
||
|
\x1
|
||
|
2 x1
|
||
|
\x1G
|
||
|
3 x1G
|
||
|
===*/
|
||
|
|
||
|
/* Unterminated hex or unicode escapes should apparently (?) be parsed with
|
||
|
* the longest match principle at least inside string literals.
|
||
|
*
|
||
|
* In other words, if the string ends or the escape is otherwise invalid,
|
||
|
* the escape characters should be parsed as itself: "\uX" -> "uX".
|
||
|
*
|
||
|
* Both V8 and Rhino parse these without a SyntaxError.
|
||
|
*/
|
||
|
|
||
|
function testString(x) {
|
||
|
var t;
|
||
|
|
||
|
print(x);
|
||
|
var t = eval('"' + x + '"');
|
||
|
print(t.length, t);
|
||
|
}
|
||
|
|
||
|
function testStrings() {
|
||
|
var strings = [
|
||
|
'\\u',
|
||
|
'\\u1',
|
||
|
'\\u12',
|
||
|
'\\u123',
|
||
|
'\\u123G',
|
||
|
'\\x',
|
||
|
'\\x1',
|
||
|
'\\x1G',
|
||
|
];
|
||
|
var i;
|
||
|
|
||
|
for (i = 0; i < strings.length; i++) {
|
||
|
try {
|
||
|
testString(strings[i]);
|
||
|
} catch (e) {
|
||
|
print(e);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
try {
|
||
|
testStrings();
|
||
|
} catch (e) {
|
||
|
print(e.name);
|
||
|
}
|
||
|
|
||
|
/*===
|
||
|
SyntaxError
|
||
|
===*/
|
||
|
|
||
|
/* However, an unterminated unicode escape outside a string literal
|
||
|
* won't be parsed by V8 or Rhino if it is broken.
|
||
|
*/
|
||
|
|
||
|
try {
|
||
|
// if "\u" parsed as "u", same as assignemtn: u123 = 1
|
||
|
print(eval('\\u123 = 1;'));
|
||
|
} catch (e) {
|
||
|
print(e.name);
|
||
|
}
|
||
|
|