Ticket #5089: 5089.patch

File 5089.patch, 2.9 KB (added by wwalc, 6 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 – 2015 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy