Ticket #5089: 5089.patch

File 5089.patch, 2.9 KB (added by wwalc, 5 years ago)
  • _source/includes/scriptcompressor.js

     
    267267                                break; 
    268268 
    269269                        case Token.SETNAME : 
    270                                 var name = node.getFirstChild().getString(); 
     270                                var name = node.getFirstChild().getString(), 
     271                                        value = node.getLastChild(); 
    271272 
     273                                if ( value.getType() == Token.THISFN ) 
     274                                        break; 
     275 
    272276                                writeNode( node.getFirstChild() ); 
    273277 
    274                                 var value = node.getLastChild(); 
    275  
    276278                                switch ( value.getType() ) 
    277279                                { 
    278280                                        case Token.MUL : 
     
    399401 
    400402                                out( '}' ); 
    401403 
    402                                 if ( name.length() ) 
     404                                if ( name.length() && ( !opt || !opt.noSemiColon ) ) 
    403405                                        out( ';' ); 
    404406                                break; 
    405407 
     
    441443 
    442444                                out( '(' ); 
    443445 
    444                                 var param = child.getNext(); 
     446                                var opt, 
     447                                        paramType, 
     448                                        param = child.getNext(); 
     449 
    445450                                while( param ) 
    446451                                { 
    447                                         if ( param.getType() == Token.COMMA ) 
     452                                        paramType = param.getType(); 
     453 
     454                                        if ( paramType == Token.COMMA ) 
    448455                                                out( '(' ); 
    449456 
    450                                         if ( !writeNode( param ) ) 
     457                                        opt = ( paramType == Token.FUNCTION ) ? { noSemiColon : true } : {}; 
     458 
     459                                        if ( !writeNode( param, opt ) ) 
    451460                                                break; 
    452461 
    453                                         if ( param.getType() == Token.COMMA ) 
     462                                        if ( paramType == Token.COMMA ) 
    454463                                                out( ')' ); 
    455464 
    456465                                        param = param.getNext(); 
     
    683692                                break; 
    684693 
    685694                        case Token.EXPR_RESULT : 
    686                         case Token.EXPR_VOID : 
    687695                                writeChildren( node ); 
    688  
    689696                                if ( !opt || !opt.noSemiColon ) 
    690697                                        out( ';' ); 
     698                                break; 
    691699 
     700                        case Token.EXPR_VOID : 
     701                                writeChildren( node ); 
     702                                if ( !opt || !opt.noSemiColon ) 
     703                                { 
     704                                        var child = node.getFirstChild(); 
     705                                        if ( child.getType() != Token.SETNAME || child.getLastChild().getType() != Token.THISFN ) 
     706                                                out( ';' ); 
     707                                } 
    692708                                break; 
    693709 
    694710                        case Token.GETPROP : 
     
    924940                                                out( id ); 
    925941 
    926942                                        out( ':' ); 
    927                                         if ( !writeNode( child ) ) 
     943 
     944                                        opt = ( child.getType() == Token.FUNCTION ) ? { noSemiColon : true } : {}; 
     945 
     946                                        if ( !writeNode( child, opt ) ) 
    928947                                                break; 
    929948 
    930949                                        child = child.getNext(); 
     
    960979                                out( 'return' ); 
    961980 
    962981                                if ( value ) 
    963                                         writeNode( value ); 
     982                                { 
     983                                        opt = ( value.getType() == Token.FUNCTION ) ? { noSemiColon : true } : {}; 
     984                                        writeNode( value, opt ); 
     985                                } 
    964986 
    965987                                out( ';' ); 
    966988 
  • test/test.js

     
    303303 
    304304                [       "var a=(1,2,3,4);" ], 
    305305 
    306                 [       "a=(1,2,3,4);" ] 
     306                [       "a=(1,2,3,4);" ], 
     307 
     308                [       "app.on('event',function b(a){return a+1;});" ], 
     309 
     310                [       "add('a',{a:'2',init:function b(){return false;}});" ], 
     311 
     312                [       "function(){function a(){return function b(b){return b+1;};};}" ] 
    307313        ]; 
    308314 
    309315        var tests = 
© 2003 – 2012 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy