From 7a03eadfa9c1a24b38792d7e874364dafab90ae5 Mon Sep 17 00:00:00 2001 From: Waldemar Kornewald Date: Tue, 5 Nov 2013 14:15:28 +0100 Subject: [PATCH] fixed dot and bracket accessors on immediate numbers --- src/slimit/tests/test_minifier.py | 8 ++++++++ src/slimit/visitors/ecmavisitor.py | 5 ++++- src/slimit/visitors/minvisitor.py | 10 ++++++++-- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/slimit/tests/test_minifier.py b/src/slimit/tests/test_minifier.py index e999335..6fd9faf 100644 --- a/src/slimit/tests/test_minifier.py +++ b/src/slimit/tests/test_minifier.py @@ -398,6 +398,14 @@ def assertMinified(self, source, expected): """, "(function($){$.hello='world';}(jQuery));"), + # function call on immediate number + ('((25)).toString()', '(25).toString();'), + ('((25))["toString"]()', '(25).toString();'), + + # attribute access on immediate number + ('((25)).attr', '(25).attr;'), + ('((25))["attr"]', '(25).attr;'), + # function call in FOR init ('for(o(); i < 3; i++) {}', 'for(o();i<3;i++){}'), diff --git a/src/slimit/visitors/ecmavisitor.py b/src/slimit/visitors/ecmavisitor.py index 1c98598..c2e798c 100644 --- a/src/slimit/visitors/ecmavisitor.py +++ b/src/slimit/visitors/ecmavisitor.py @@ -354,7 +354,10 @@ def visit_DotAccessor(self, node): template = '(%s.%s)' else: template = '%s.%s' - s = template % (self.visit(node.node), self.visit(node.identifier)) + left = self.visit(node.node) + if isinstance(node.node, ast.Number): + left = '(%s)' % left + s = template % (left, self.visit(node.identifier)) return s def visit_BracketAccessor(self, node): diff --git a/src/slimit/visitors/minvisitor.py b/src/slimit/visitors/minvisitor.py index 1c6fd15..9846493 100644 --- a/src/slimit/visitors/minvisitor.py +++ b/src/slimit/visitors/minvisitor.py @@ -388,7 +388,10 @@ def visit_DotAccessor(self, node): template = '(%s.%s)' else: template = '%s.%s' - s = template % (self.visit(node.node), self.visit(node.identifier)) + left = self.visit(node.node) + if isinstance(node.node, ast.Number): + left = '(%s)' % left + s = template % (left, self.visit(node.identifier)) return s def visit_BracketAccessor(self, node): @@ -400,7 +403,10 @@ def visit_BracketAccessor(self, node): elif value.startswith('"'): value = value.strip('"') if _is_identifier(value): - s = '%s.%s' % (self.visit(node.node), value) + left = self.visit(node.node) + if isinstance(node.node, ast.Number): + left = '(%s)' % left + s = '%s.%s' % (left, value) return s s = '%s[%s]' % (self.visit(node.node), self.visit(node.expr))