@@ -4475,18 +4475,27 @@ Compiler.prototype.compile_function = function(node) {
4475
4475
var left = this . compile ( node . left ) ;
4476
4476
var rlist = node . rlist . map ( ( function ( vval ) { return this . compile ( vval ) ; } ) . bind ( this ) ) ;
4477
4477
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
+ }
4489
4497
}
4498
+ this . out ( "(function (%s)" , left ) ;
4490
4499
this . incindent ( " " ) ;
4491
4500
this . compile_body ( node . body ) ;
4492
4501
this . out ( ")" ) ;
@@ -4573,9 +4582,9 @@ Compiler.prototype.compile_if = function(node) {
4573
4582
this . incindent ( " " ) ;
4574
4583
this . compile_body ( node . body ) ;
4575
4584
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 ] ;
4579
4588
this . out ( " elseif %s" , this . compile ( enode . cond ) ) ;
4580
4589
this . incindent ( " " ) ;
4581
4590
this . compile_body ( enode . body ) ;
@@ -4632,9 +4641,9 @@ Compiler.prototype.compile_try = function(node) {
4632
4641
this . out ( "(try" ) ;
4633
4642
this . incindent ( " " ) ;
4634
4643
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 ] ;
4638
4647
if ( cnode . pattern !== NIL ) {
4639
4648
this . decindent ( ) ;
4640
4649
this . out ( " catch /%s/" , cnode . pattern ) ;
@@ -5628,9 +5637,9 @@ RegexpParser.prototype.get_token_sq_char_class = function() {
5628
5637
var r = this . reader . read_alpha ( ) ;
5629
5638
if ( this . reader . p ( 0 ) == ":" && this . reader . p ( 1 ) == "]" ) {
5630
5639
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 ] ;
5634
5643
if ( r == name ) {
5635
5644
return "[:" + name + ":]" ;
5636
5645
}
@@ -5763,9 +5772,9 @@ RegexpParser.prototype.getoctchrs = function() {
5763
5772
5764
5773
RegexpParser . prototype . gethexchrs = function ( n ) {
5765
5774
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 ] ;
5769
5778
var c = this . reader . peek ( ) ;
5770
5779
if ( ! isxdigit ( c ) ) {
5771
5780
break ;
0 commit comments