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.
166 lines
2.1 KiB
166 lines
2.1 KiB
/*
|
|
* PrimaryExpression
|
|
*/
|
|
|
|
/* FIXME: needs more tests */
|
|
/* FIXME: comprehensive tests here or specific test files?
|
|
* - regexp tests
|
|
* - number literal tests
|
|
*/
|
|
|
|
function printThisProperty(propName) {
|
|
print(this[propName]);
|
|
}
|
|
|
|
/*===
|
|
Infinity
|
|
true
|
|
bar
|
|
===*/
|
|
|
|
/* 'this' */
|
|
|
|
var this_obj = { 'foo': 'bar' };
|
|
|
|
this.is_global = true;
|
|
|
|
try {
|
|
// global object
|
|
print(this.Number.POSITIVE_INFINITY);
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
try {
|
|
// global object
|
|
printThisProperty('is_global');
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
try {
|
|
// forced binding
|
|
printThisProperty.call(this_obj, 'foo');
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
/*===
|
|
===*/
|
|
|
|
/* Identifier */
|
|
|
|
try {
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
/*===
|
|
null
|
|
true
|
|
false
|
|
123
|
|
65
|
|
33
|
|
63
|
|
SyntaxError
|
|
SyntaxError
|
|
===*/
|
|
|
|
/* Literal:
|
|
* -> NullLiteral -> 'null'
|
|
* -> BooleanLiteral -> 'true' | 'false'
|
|
* -> NumericLiteral -> DecimalLiteral | HexIntegerLiteral | OctalIntegerLiteral (compatibility)
|
|
* -> StringLiteral -> '"' chars '"' | "'" chars "'"
|
|
* -> RegularExpressionLiteral
|
|
*
|
|
* OctalLiteral evaluation is inside an eval() call because it is optional.
|
|
*/
|
|
|
|
try {
|
|
print(null);
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
try {
|
|
print(true);
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
try {
|
|
print(false);
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
try {
|
|
print(123);
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
try {
|
|
print(0x41);
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
try {
|
|
// = 4*8+1 = 33
|
|
print(eval("041"));
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
try {
|
|
// 077 = 7*8 + 7 = 63
|
|
print(eval("077"));
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
try {
|
|
// 088 is an invalid NumericLiteral (it must NOT be parsed as a decimal
|
|
// literal); V8 and Rhino will parse 088 as decimal 88.
|
|
print(eval("088"));
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
try {
|
|
// 099 is similar to 088
|
|
print(eval("099"));
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
/*===
|
|
1,2,3
|
|
===*/
|
|
|
|
/* ArrayLiteral */
|
|
|
|
var arr;
|
|
|
|
arr = [1,2,3];
|
|
print(arr);
|
|
|
|
|
|
/*===
|
|
1 2
|
|
===*/
|
|
|
|
/* ObjectLiteral */
|
|
|
|
var obj;
|
|
|
|
obj = { foo:1, bar:2 };
|
|
print(obj.foo, obj.bar);
|
|
|
|
/*===
|
|
===*/
|
|
|
|
/* Parenthesized expression */
|
|
|
|
|