Skip to content

Commit d6f2f7b

Browse files
committed
Updating PR yui#115 from siokoshou/yuicompressor.git
2 parents 0309dea + 05309de commit d6f2f7b

File tree

5 files changed

+32
-18
lines changed

5 files changed

+32
-18
lines changed

src/com/yahoo/platform/yui/compressor/JavaScriptCompressor.java

100644100755
Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -361,31 +361,34 @@ private static void processStringLiterals(ArrayList tokens, boolean merge) {
361361
if (merge) {
362362

363363
// Concatenate string literals that are being appended wherever
364-
// it is safe to do so. Note that we take care of the case:
364+
// it is safe to do so. Note that we take care of the cases:
365365
// "a" + "b".toUpperCase()
366+
// "a" + "bcd"[i]
366367

367-
for (i = 0; i < length; i++) {
368+
for (i = 1; i < length - 1; i++) {
368369
token = (JavaScriptToken) tokens.get(i);
369-
switch (token.getType()) {
370-
371-
case Token.ADD:
372-
if (i > 0 && i < length) {
373-
prevToken = (JavaScriptToken) tokens.get(i - 1);
374-
nextToken = (JavaScriptToken) tokens.get(i + 1);
375-
if (prevToken.getType() == Token.STRING && nextToken.getType() == Token.STRING &&
376-
(i == length - 1 || ((JavaScriptToken) tokens.get(i + 2)).getType() != Token.DOT)) {
377-
tokens.set(i - 1, new JavaScriptToken(Token.STRING,
378-
prevToken.getValue() + nextToken.getValue()));
379-
tokens.remove(i + 1);
380-
tokens.remove(i);
381-
i = i - 1;
382-
length = length - 2;
383-
break;
370+
if (token.getType() == Token.ADD) {
371+
prevToken = (JavaScriptToken) tokens.get(i - 1);
372+
nextToken = (JavaScriptToken) tokens.get(i + 1);
373+
if (prevToken.getType() == Token.STRING &&
374+
nextToken.getType() == Token.STRING ) {
375+
if (i < length - 2) {
376+
JavaScriptToken nextNextToken = (JavaScriptToken) tokens.get(i + 2);
377+
if (nextNextToken.getType() == Token.DOT ||
378+
nextNextToken.getType() == Token.LB) {
379+
i += 3;
380+
continue;
384381
}
385382
}
383+
tokens.set(i - 1, new JavaScriptToken(Token.STRING,
384+
prevToken.getValue() + nextToken.getValue()));
385+
tokens.remove(i + 1);
386+
tokens.remove(i);
387+
i--;
388+
length -= 2;
389+
}
386390
}
387391
}
388-
389392
}
390393

391394
// Second pass...

tests/_string_combo2.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
function test(){
2+
var a = "a" +
3+
"b".toUpperCase();
4+
}

tests/_string_combo2.js.min

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
function test(){var b="a"+"b".toUpperCase()};

tests/_string_combo3.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
function test(){
2+
for ( var i = 0; i < 3; i++ ) {
3+
var a = "a" + "bcd"[i];
4+
}
5+
}

tests/_string_combo3.js.min

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
function test(){for(var c=0;c<3;c++){var b="a"+"bcd"[c]}};

0 commit comments

Comments
 (0)