Fix: AST_Accessor missing start / end tokens
authorOndřej Španěl <OndrejSpanel@users.noreply.github.com>
Mon, 20 Feb 2017 09:14:53 +0000 (17:14 +0800)
committeralexlamsl <alexlamsl@gmail.com>
Tue, 21 Feb 2017 05:32:16 +0000 (13:32 +0800)
fixes #1492
closes #1493

lib/parse.js
test/mocha/accessorTokens-1492.js [new file with mode: 0644]

index ec82d47..37f06df 100644 (file)
@@ -1308,6 +1308,10 @@ function parse($TEXT, options) {
         });
     });
 
+    var create_accessor = embed_tokens(function() {
+        return function_(AST_Accessor);
+    });
+
     var object_ = embed_tokens(function() {
         expect("{");
         var first = true, a = [];
@@ -1324,7 +1328,7 @@ function parse($TEXT, options) {
                     a.push(new AST_ObjectGetter({
                         start : start,
                         key   : as_atom_node(),
-                        value : function_(AST_Accessor),
+                        value : create_accessor(),
                         end   : prev()
                     }));
                     continue;
@@ -1333,7 +1337,7 @@ function parse($TEXT, options) {
                     a.push(new AST_ObjectSetter({
                         start : start,
                         key   : as_atom_node(),
-                        value : function_(AST_Accessor),
+                        value : create_accessor(),
                         end   : prev()
                     }));
                     continue;
diff --git a/test/mocha/accessorTokens-1492.js b/test/mocha/accessorTokens-1492.js
new file mode 100644 (file)
index 0000000..861414e
--- /dev/null
@@ -0,0 +1,32 @@
+var UglifyJS = require('../../');
+var assert = require("assert");
+
+describe("Accessor tokens", function() {
+    it("Should fill the token information for accessors (issue #1492)", function() {
+        // location               0         1         2         3         4
+        //                        01234567890123456789012345678901234567890123456789
+        var ast = UglifyJS.parse("var obj = { get latest() { return undefined; } }");
+
+        // test all AST_ObjectProperty tokens are set as expected
+        var checkedAST_ObjectProperty = false;
+        var checkWalker = new UglifyJS.TreeWalker(function(node, descend) {
+            if (node instanceof UglifyJS.AST_ObjectProperty) {
+                checkedAST_ObjectProperty = true;
+
+                assert.equal(node.start.pos, 12);
+                assert.equal(node.end.endpos, 46);
+
+                assert(node.key instanceof UglifyJS.AST_SymbolRef);
+                assert.equal(node.key.start.pos, 16);
+                assert.equal(node.key.end.endpos, 22);
+
+                assert(node.value instanceof UglifyJS.AST_Accessor);
+                assert.equal(node.value.start.pos, 22);
+                assert.equal(node.value.end.endpos, 46);
+
+            }
+        });
+        ast.walk(checkWalker);
+        assert(checkedAST_ObjectProperty, "AST_ObjectProperty not found");
+    });
+});
\ No newline at end of file