@@ -4475,18 +4475,27 @@ Compiler.prototype.compile_function = function(node) {
44754475 var left = this . compile ( node . left ) ;
44764476 var rlist = node . rlist . map ( ( function ( vval ) { return this . compile ( vval ) ; } ) . bind ( this ) ) ;
44774477 var default_args = node . default_args . map ( ( function ( vval ) { return this . compile ( vval ) ; } ) . bind ( this ) ) ;
4478- if ( ! viml_empty ( rlist ) && rlist [ rlist . length - 1 ] == "..." ) {
4479- rlist [ rlist . length - 1 ] = ". ..." ;
4480- }
4481- if ( viml_empty ( rlist ) ) {
4482- this . out ( "(function (%s)" , left ) ;
4483- }
4484- else if ( viml_empty ( default_args ) ) {
4485- this . out ( "(function (%s (%s))" , left , viml_join ( rlist , " " ) ) ;
4486- }
4487- else {
4488- this . out ( "(function (%s (%s) (%s))" , left , viml_join ( rlist , " " ) , viml_join ( default_args , " " ) ) ;
4478+ if ( ! viml_empty ( rlist ) ) {
4479+ var remaining = v :false ;
4480+ if ( rlist [ rlist . length - 1 ] == "..." ) {
4481+ viml_remove ( rlist , - 1 ) ;
4482+ var remaining = v :true ;
4483+ }
4484+ var __c11 = viml_range ( viml_len ( rlist ) ) ;
4485+ for ( var __i11 = 0 ; __i11 < __c11 . length ; ++ __i11 ) {
4486+ var i = __c11 [ __i11 ] ;
4487+ if ( i < viml_len ( rlist ) - viml_len ( default_args ) ) {
4488+ left += viml_printf ( " (%s)" , rlist [ i ] ) ;
4489+ }
4490+ else {
4491+ left += viml_printf ( " (%s %s)" , rlist [ i ] , default_args [ i + viml_len ( default_args ) - viml_len ( rlist ) ] ) ;
4492+ }
4493+ }
4494+ if ( remaining ) {
4495+ left += " . ..." ;
4496+ }
44894497 }
4498+ this . out ( "(function (%s)" , left ) ;
44904499 this . incindent ( " " ) ;
44914500 this . compile_body ( node . body ) ;
44924501 this . out ( ")" ) ;
@@ -4573,9 +4582,9 @@ Compiler.prototype.compile_if = function(node) {
45734582 this . incindent ( " " ) ;
45744583 this . compile_body ( node . body ) ;
45754584 this . decindent ( ) ;
4576- var __c11 = node . elseif ;
4577- for ( var __i11 = 0 ; __i11 < __c11 . length ; ++ __i11 ) {
4578- var enode = __c11 [ __i11 ] ;
4585+ var __c12 = node . elseif ;
4586+ for ( var __i12 = 0 ; __i12 < __c12 . length ; ++ __i12 ) {
4587+ var enode = __c12 [ __i12 ] ;
45794588 this . out ( " elseif %s" , this . compile ( enode . cond ) ) ;
45804589 this . incindent ( " " ) ;
45814590 this . compile_body ( enode . body ) ;
@@ -4632,9 +4641,9 @@ Compiler.prototype.compile_try = function(node) {
46324641 this . out ( "(try" ) ;
46334642 this . incindent ( " " ) ;
46344643 this . compile_body ( node . body ) ;
4635- var __c12 = node . catch ;
4636- for ( var __i12 = 0 ; __i12 < __c12 . length ; ++ __i12 ) {
4637- var cnode = __c12 [ __i12 ] ;
4644+ var __c13 = node . catch ;
4645+ for ( var __i13 = 0 ; __i13 < __c13 . length ; ++ __i13 ) {
4646+ var cnode = __c13 [ __i13 ] ;
46384647 if ( cnode . pattern !== NIL ) {
46394648 this . decindent ( ) ;
46404649 this . out ( " catch /%s/" , cnode . pattern ) ;
@@ -5628,9 +5637,9 @@ RegexpParser.prototype.get_token_sq_char_class = function() {
56285637 var r = this . reader . read_alpha ( ) ;
56295638 if ( this . reader . p ( 0 ) == ":" && this . reader . p ( 1 ) == "]" ) {
56305639 this . reader . seek_cur ( 2 ) ;
5631- var __c13 = class_names ;
5632- for ( var __i13 = 0 ; __i13 < __c13 . length ; ++ __i13 ) {
5633- var name = __c13 [ __i13 ] ;
5640+ var __c14 = class_names ;
5641+ for ( var __i14 = 0 ; __i14 < __c14 . length ; ++ __i14 ) {
5642+ var name = __c14 [ __i14 ] ;
56345643 if ( r == name ) {
56355644 return "[:" + name + ":]" ;
56365645 }
@@ -5763,9 +5772,9 @@ RegexpParser.prototype.getoctchrs = function() {
57635772
57645773RegexpParser . prototype . gethexchrs = function ( n ) {
57655774 var r = "" ;
5766- var __c14 = viml_range ( n ) ;
5767- for ( var __i14 = 0 ; __i14 < __c14 . length ; ++ __i14 ) {
5768- var i = __c14 [ __i14 ] ;
5775+ var __c15 = viml_range ( n ) ;
5776+ for ( var __i15 = 0 ; __i15 < __c15 . length ; ++ __i15 ) {
5777+ var i = __c15 [ __i15 ] ;
57695778 var c = this . reader . peek ( ) ;
57705779 if ( ! isxdigit ( c ) ) {
57715780 break ;
0 commit comments