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.
101 lines
3.1 KiB
101 lines
3.1 KiB
/*
|
|
* The "set" and "get" tokens are a bit of a corner case for the lexer/compiler
|
|
* combination. They are not officially ReservedWords so they must be valid
|
|
* in many contexts which otherwise use the Identifier production which rejects
|
|
* ReservedWords:
|
|
*
|
|
* - Variable declaration name
|
|
* - Catch variable name
|
|
* - Break and continue labels
|
|
* - Function argument names
|
|
* - Function name
|
|
*
|
|
* On the other hand, "get" and "set" need to be recognized as tokens in the
|
|
* object literal notation.
|
|
*/
|
|
|
|
/*===
|
|
eval success
|
|
eval success
|
|
eval success
|
|
eval success
|
|
eval success
|
|
eval success
|
|
eval success
|
|
eval success
|
|
eval success
|
|
eval success
|
|
eval success
|
|
eval success
|
|
eval success
|
|
eval success
|
|
eval success
|
|
eval success
|
|
eval success
|
|
eval success
|
|
eval success
|
|
eval success
|
|
123
|
|
set foo 234
|
|
eval success
|
|
123
|
|
set foo 234
|
|
eval success
|
|
123
|
|
set set 234
|
|
eval success
|
|
123
|
|
set set 234
|
|
eval success
|
|
123
|
|
set get 234
|
|
eval success
|
|
123
|
|
set get 234
|
|
eval success
|
|
===*/
|
|
|
|
function tryEval(code) {
|
|
try {
|
|
eval(code);
|
|
print('eval success');
|
|
} catch (e) {
|
|
print(code, '-->', e);
|
|
}
|
|
}
|
|
|
|
tryEval('(function () { var set = 1; })');
|
|
tryEval('(function () { "use strict"; var set = 1; })');
|
|
tryEval('(function () { var get = 1; })');
|
|
tryEval('(function () { "use strict"; var get = 1; })');
|
|
|
|
tryEval('(function () { try {} catch(set) {} })');
|
|
tryEval('(function () { "use strict"; try {} catch(set) {} })');
|
|
tryEval('(function () { try {} catch(get) {} })');
|
|
tryEval('(function () { "use strict"; try {} catch(get) {} })');
|
|
|
|
tryEval('(function () { set: for(;;) { break set; } })');
|
|
tryEval('(function () { "use strict"; set: for(;;) { break set; } })');
|
|
tryEval('(function () { get: for(;;) { break get; } })');
|
|
tryEval('(function () { "use strict"; get: for(;;) { break get; } })');
|
|
|
|
tryEval('(function (set) {})');
|
|
tryEval('(function (set) { "use strict"; })');
|
|
tryEval('(function (get) {})');
|
|
tryEval('(function (get) { "use strict"; })');
|
|
|
|
tryEval('(function set(x) {})');
|
|
tryEval('(function set(x) { "use strict"; })');
|
|
tryEval('(function get(x) {})');
|
|
tryEval('(function get(x) { "use strict"; })');
|
|
|
|
var obj;
|
|
|
|
tryEval('obj = function (x) { return { get foo() { return 123; }, set foo(v) { print("set foo",v); } }; }(); print(obj.foo); obj.foo = 234;');
|
|
tryEval('obj = function (x) { "use strict"; return { get foo() { return 123; }, set foo(v) { print("set foo",v); } }; }(); print(obj.foo); obj.foo = 234;');
|
|
|
|
// add a bit more challenge and make the setter / getter names are 'set' and 'get'
|
|
tryEval('obj = function (x) { return { get set() { return 123; }, set set(v) { print("set set",v); } }; }(); print(obj.set); obj.set = 234;');
|
|
tryEval('obj = function (x) { "use strict"; return { get set() { return 123; }, set set(v) { print("set set",v); } }; }(); print(obj.set); obj.set = 234;');
|
|
tryEval('obj = function (x) { return { get get() { return 123; }, set get(v) { print("set get",v); } }; }(); print(obj.get); obj.get = 234;');
|
|
tryEval('obj = function (x) { "use strict"; return { get get() { return 123; }, set get(v) { print("set get",v); } }; }(); print(obj.get); obj.get = 234;');
|
|
|