break;
}
break;
+ case "operator":
+ if (!is_identifier_string(tok.value)) {
+ throw new JS_Parse_Error("Invalid getter/setter name: " + tok.value,
+ tok.file, tok.line, tok.col, tok.pos);
+ }
+ ret = _make_symbol(AST_SymbolRef);
+ break;
}
next();
return ret;
input: { a = { set foo () {} } }
expect: { a = { set foo () {} } }
}
+
+setter_with_operator_keys: {
+ input: {
+ var tokenCodes = {
+ get instanceof(){
+ return test0;
+ },
+ set instanceof(value){
+ test0 = value;
+ },
+ set typeof(value){
+ test1 = value;
+ },
+ get typeof(){
+ return test1;
+ },
+ set else(value){
+ test2 = value;
+ },
+ get else(){
+ return test2;
+ }
+ };
+ }
+ expect: {
+ var tokenCodes = {
+ get instanceof(){
+ return test0;
+ },
+ set instanceof(value){
+ test0 = value;
+ },
+ set typeof(value){
+ test1 = value;
+ },
+ get typeof(){
+ return test1;
+ },
+ set else(value){
+ test2 = value;
+ },
+ get else(){
+ return test2;
+ }
+ };
+ }
+}
\ No newline at end of file
--- /dev/null
+var UglifyJS = require('../../');
+var assert = require("assert");
+
+describe("Getters and setters", function() {
+ it("Should not accept operator symbols as getter/setter name", function() {
+ var illegalOperators = [
+ "++",
+ "--",
+ "+",
+ "-",
+ "!",
+ "~",
+ "&",
+ "|",
+ "^",
+ "*",
+ "/",
+ "%",
+ ">>",
+ "<<",
+ ">>>",
+ "<",
+ ">",
+ "<=",
+ ">=",
+ "==",
+ "===",
+ "!=",
+ "!==",
+ "?",
+ "=",
+ "+=",
+ "-=",
+ "/=",
+ "*=",
+ "%=",
+ ">>=",
+ "<<=",
+ ">>>=",
+ "|=",
+ "^=",
+ "&=",
+ "&&",
+ "||"
+ ];
+ var generator = function() {
+ var results = [];
+
+ for (var i in illegalOperators) {
+ results.push({
+ code: "var obj = { get " + illegalOperators[i] + "() { return test; }};",
+ operator: illegalOperators[i],
+ method: "get"
+ });
+ results.push({
+ code: "var obj = { set " + illegalOperators[i] + "(value) { test = value}};",
+ operator: illegalOperators[i],
+ method: "set"
+ });
+ }
+
+ return results;
+ };
+
+ var testCase = function(data) {
+ return function() {
+ UglifyJS.parse(data.code);
+ };
+ };
+
+ var fail = function(data) {
+ return function (e) {
+ return e instanceof UglifyJS.JS_Parse_Error &&
+ e.message === "Invalid getter/setter name: " + data.operator;
+ };
+ };
+
+ var errorMessage = function(data) {
+ return "Expected but didn't get a syntax error while parsing following line:\n" + data.code;
+ };
+
+ var tests = generator();
+ for (var i = 0; i < tests.length; i++) {
+ var test = tests[i];
+ assert.throws(testCase(test), fail(test), errorMessage(test));
+ }
+ });
+
+});