red 4.0.6 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/source/ruby.rb CHANGED
@@ -29,6 +29,14 @@
29
29
  };
30
30
  },
31
31
 
32
+ donateConstantsToClass: function(donor,recipient,overwrite) {
33
+ for(var x in donor) {
34
+ if(x.slice(0,2)==='c$' && (overwrite || recipient[x]===undefined)) {
35
+ recipient[x]=donor[x];
36
+ };
37
+ };
38
+ },
39
+
32
40
  updateChildren: function(parentClass) {
33
41
  for(var x in parentClass.__children__) {
34
42
  var childClass=Red.inferConstantFromString(x);
@@ -54,7 +62,7 @@
54
62
  newClass.__children__ = {};
55
63
  newClass.__class__ = c$Class;
56
64
  newClass.prototype.__class__=newClass;
57
- Red.donateMethodsToSingleton(c$Class.prototype,newClass,true)
65
+ Red.donateMethodsToSingleton(c$Class.prototype,newClass,true);
58
66
  },
59
67
 
60
68
  interpretNamespace: function(longName) {
@@ -70,53 +78,49 @@
70
78
  },
71
79
 
72
80
  _module: function(longName,block){
73
- var newModule,context=Red.interpretNamespace(longName),namespace=context[0],name=context[1];
74
- if(namespace['c$'+name]) {
75
- newModule = namespace['c$'+name];
81
+ var newModule,context=Red.interpretNamespace(longName),namespace=context[0],name=context[1],c$name='c$'+name;
82
+ if(namespace[c$name]) {
83
+ if(namespace[c$name].m$class&&namespace[c$name].m$class()!==c$Module){m$raise(c$TypeError,$q(longName+' is not a Module'));};
84
+ newModule = namespace[c$name];
76
85
  } else {
77
86
  newModule = c$Module.m$new(longName);
78
- namespace['c$'+name] = newModule;
87
+ namespace[c$name] = newModule;
79
88
  newModule.__includers__={};
80
89
  };
81
90
  if(typeof(block)=='function') { block.call(newModule); };
91
+ Red.updateIncluders(newModule);
82
92
  },
83
93
 
84
94
  _class: function(longName,superclass,block){
85
- var newClass,context=Red.interpretNamespace(longName),namespace=context[0],name=context[1];
86
- if(namespace['c$'+name]) {
87
- if(name!=='Object' && superclass!==namespace['c$'+name].__superclass__){m$raise(c$TypeError,$q('superclass mismatch for class '+longName));};
88
- newClass = namespace['c$'+name];
95
+ var newClass,context=Red.interpretNamespace(longName),namespace=context[0],name=context[1],c$name='c$'+name;
96
+ if(namespace[c$name]) {
97
+ if(namespace[c$name].m$class&&namespace[c$name].m$class()!==c$Class){m$raise(c$TypeError,$q(longName+' is not a Class'));};
98
+ if(name!=='Object'&&superclass!==namespace[c$name].__superclass__){m$raise(c$TypeError,$q('superclass mismatch for class '+longName));};
99
+ newClass = namespace[c$name];
89
100
  if(name=='Module'&&!(newClass.__superclass__.__children__[name])){Red.conferInheritance(c$Module,c$Object);}
90
101
  if(name=='Class'&&!(newClass.__superclass__.__children__[name])){Red.conferInheritance(c$Class,c$Module);}
91
102
  } else {
92
- switch(name){
93
- case 'Array':newClass=Array;break;case 'Numeric':newClass=Number;break;
94
- default: newClass = function() { this.__id__ = Red.id++ };
95
- };
103
+ switch(name){case 'Array':newClass=Array;break;case 'Numeric':newClass=Number;break;default:newClass=function(){this.__id__=Red.id++;};};
104
+ if(superclass.m$class&&superclass.m$class()!==c$Class){m$raise(c$TypeError,$q('superclass must be a Class ('+superclass.m$class().__name__+' given)'))}
96
105
  Red.conferInheritance(newClass,superclass);
97
106
  Red.initializeClass(longName,newClass);
98
107
  superclass.__children__[newClass.__name__]=true;
99
108
  superclass.m$inherited && superclass.m$inherited(newClass);
100
- namespace['c$'+name] = newClass;
101
- };
102
- if(name == 'Object' || superclass == c$Object){
103
- newClass.cvset = function(var_name,object) { return newClass['v$'+var_name] = object; };
104
- newClass.cvget = function(var_name) { return newClass['v$'+var_name]; };
105
- } else {
106
- newClass.cvset = function() { return superclass.cvset.apply(null,arguments); };
107
- newClass.cvget = function() { return superclass.cvget.apply(null,arguments); };
109
+ namespace[c$name]=newClass;
108
110
  };
109
- if(typeof(block)=='function') { block.call(newClass); };
111
+ if(name=='Object'||superclass==c$Object){newClass.cvset=function(v,o){return newClass['v$'+v]=o;};newClass.cvget=function(v){return newClass['v$'+v];};}else{newClass.cvset=function(v,o){return superclass.cvset(v,o);};newClass.cvget=function(v){return superclass.cvget(v);};};
112
+ if(typeof(block)=='function'){block.call(newClass);};
110
113
  Red.updateChildren(newClass);
111
- if((typeof(c$TrueClass)!='undefined'&&newClass==c$TrueClass)||(typeof(c$FalseClass)!='undefined'&&newClass==c$FalseClass)) { Red.donateMethodsToClass(newClass.prototype,Boolean.prototype,true); };
114
+ if((typeof(c$TrueClass)!='undefined'&&newClass==c$TrueClass)||(typeof(c$FalseClass)!='undefined'&&newClass==c$FalseClass)){Red.donateMethodsToClass(newClass.prototype,Boolean.prototype,true);};
112
115
  },
113
116
 
114
117
  LoopError: {
115
- _break:function(value){var e=new(Error);e.__keyword__='break';e._value=value==null?nil:value;throw(e);},
116
- _next:function(value){var e=new(Error);e.__keyword__='next';e._value=value==null?nil:value;throw(e);},
118
+ _break:function(returnValue){var e=new(Error);e.__keyword__='break';e.__return__=returnValue==null?nil:returnValue;throw(e);},
119
+ _next:function(returnValue){var e=new(Error);e.__keyword__='next';e.__return__=returnValue==null?nil:returnValue;throw(e);},
117
120
  _redo:function(){var e=new(Error);e.__keyword__='redo';throw(e);},
118
121
  }
119
- };
122
+ }
123
+ ;
120
124
 
121
125
  var $u=undefined,nil=null,$={};
122
126
 
@@ -125,18 +129,21 @@ c$Module = function(){this.__id__=Red.id++};c$Module.__name__='Module';c$Module.
125
129
  c$Object = function(){this.__id__=Red.id++};c$Object.__name__='Object';c$Object.__children__={};c$Module.__superclass__=c$Object;
126
130
 
127
131
  c$Object.prototype.toString=function(){return '#<'+this.m$class().__name__.replace(/\\./g,'::')+':0x'+(this.__id__*999^4000000).toString(16)+'>'};
128
- Function.prototype.m$=function(o){var f=this;var p=function(){return f.apply(o,arguments);};p._arity=f.arity;p.__id__=Red.id++;return p;};
132
+ Function.prototype.m$=function(o){var f=this;var p=function(){return f.apply(o,arguments);};p.__unbound__=f;p.__arity__=f.arity;p.__id__=Red.id++;return p;};
129
133
  window.__name__='window';
130
134
  window.prototype=window;
131
135
  window.__children__={'Object':true};
132
136
  window.m$include=function(){for(var i=0,modules=arguments,l=modules.length;i<l;++i){var mp=modules[i].prototype;for(var x in mp){if(x.slice(0,2)=='m$'){var f=function(){return arguments.callee._source[arguments.callee._name].apply(window,arguments) };f._source=mp;f._name=x;window[x]=f;};};modules[i].m$included(window);modules[i].__includers__['window']=true;};if(modules[0]!=c$Kernel){Red.donateMethodsToClass(window,c$Object.prototype);Red.updateChildren(c$Object);};return window;};
133
- window.m$blockGivenBool=function(){typeof(arguments[0])=='function'}
137
+ window.m$block_given_bool=function(){typeof(arguments[0])=='function'}
134
138
 
135
- function $e(e,ary){if(e.m$isABool){for(var i=0,l=ary.length;i<l;++i){if(e.m$isABool(ary[i])){return true;};};};return false;};
136
- function $Q(){for(var i=1,s=arguments[0],l=arguments.length;i<l;++i){s+=$q(arguments[i]).m$toS()._value;};return $q(s);};
139
+ function $a(min,max,args,bg){var a=args.length-bg;if(a<min){n=min;}else{if(max!=-1&&a>max){n=max;}else{return;};};m$raise(c$ArgumentError, $q('wrong number of arguments ('+a+' for '+n+')'));}
140
+ function $e(e,ary){if(e.m$is_a_bool){for(var i=0,l=ary.length;i<l;++i){if(e.m$is_a_bool(ary[i])){return true;};};};return false;};
141
+ function $m(obj,name){var str=obj.m$inspect().__value__;str=str[0]=='#'?str:str+':'+obj.m$class().__name__;m$raise(c$NoMethodError, $q('undefined method "'+name+'" for '+str));}
142
+ function $n(obj,name){var str=obj.m$inspect().__value__;str=str[0]=='#'?str:str+':'+obj.m$class().__name__;m$raise(c$NameError, $q('undefined local variable or method "'+name+'" for '+str));}
143
+ function $Q(){for(var i=1,s=arguments[0],l=arguments.length;i<l;++i){s+=$q(arguments[i]).m$to_s().__value__;};return $q(s);};
137
144
  function $q(obj){if(typeof obj!=='string'){return obj;};return c$String.m$new(obj);};
138
145
  function $r(value,options){return c$Regexp.m$new(value,options);};
139
- function $s(value){return(c$Symbol._table[value]||c$Symbol.m$new(value));};
146
+ function $s(value){return(c$Symbol.__table__[value]||c$Symbol.m$new(value));};
140
147
  function $T(x){return x!==false&&x!==nil&&x!=undefined;};
141
148
 
142
149
  `
@@ -170,7 +177,7 @@ class Object
170
177
  # may override this behavior.
171
178
  #
172
179
  def ==(other)
173
- `this.__id__==other.__id__`
180
+ `this.__id__===other.__id__`
174
181
  end
175
182
 
176
183
  # call-seq:
@@ -181,7 +188,7 @@ class Object
181
188
  # semantics in case statements.
182
189
  #
183
190
  def ===(other)
184
- `this.__id__==other.__id__`
191
+ `this.__id__===other.__id__`
185
192
  end
186
193
 
187
194
  # call-seq:
@@ -224,8 +231,8 @@ class Object
224
231
  # k.__send__(:hello, "gentle", "readers") #=> "Hello gentle readers"
225
232
  #
226
233
  def __send__(method,*args)
227
- `method=this['m$'+sym._value.replace('=','Eql')]`
228
- `if(!method){m$raise(c$NoMethodError,$q('undefined method "'+sym._value+'" for '+this));}`
234
+ `method=this['m$'+sym.__value__.replace('=','_eql').replace('!','_bang').replace('?','_bool')]`
235
+ `if(!method){m$raise(c$NoMethodError,$q('undefined method "'+sym.__value__+'" for '+this));}`
229
236
  `method.apply(this,args)`
230
237
  end
231
238
 
@@ -364,7 +371,7 @@ class Object
364
371
  # k.hello #=> "Hello from Mod"
365
372
  #
366
373
  def extend(*modules)
367
- `for(var i=0,l=modules.length;i<l;++i){modules[i].m$extendObject(this);modules[i].m$extended(this);}`
374
+ `for(var i=0,l=modules.length;i<l;++i){modules[i].m$extend_object(this);modules[i].m$extended(this);}`
368
375
  return self
369
376
  end
370
377
 
@@ -387,7 +394,7 @@ class Object
387
394
  # not overridden, uses the +to_s+ method to generate the string.
388
395
  #
389
396
  def inspect
390
- `this.m$toS()`
397
+ `this.m$to_s()`
391
398
  end
392
399
 
393
400
  # call-seq:
@@ -407,7 +414,7 @@ class Object
407
414
  # k.instance_eval { @secret } #=> 99
408
415
  #
409
416
  def instance_eval(&block)
410
- `block._block.m$(this)()`
417
+ `block.__block__.m$(this)()`
411
418
  end
412
419
 
413
420
  # call-seq:
@@ -436,7 +443,7 @@ class Object
436
443
  # k.instance_variable_defined?("@b") #=> false
437
444
  #
438
445
  def instance_variable_defined?(name)
439
- `this[name._value.replace('@','i$')]!=null`
446
+ `this[name.__value__.replace('@','i$')]!=null`
440
447
  end
441
448
 
442
449
  # call-seq:
@@ -456,7 +463,7 @@ class Object
456
463
  # k.instance_variable_get(:@a) #=> 99
457
464
  #
458
465
  def instance_variable_get(name)
459
- `var v=this[name._value.replace('@','i$')]`
466
+ `var v=this[name.__value__.replace('@','i$')]`
460
467
  `v==null?nil:v`
461
468
  end
462
469
 
@@ -478,7 +485,7 @@ class Object
478
485
  #
479
486
  # FIX: Incomplete
480
487
  def instance_variable_set(name, obj)
481
- `this[name._value.replace('@','i$')]=obj`
488
+ `this[name.__value__.replace('@','i$')]=obj`
482
489
  end
483
490
 
484
491
  # call-seq:
@@ -500,7 +507,7 @@ class Object
500
507
  #
501
508
  def instance_variables
502
509
  `var result=[]`
503
- `for(var x in this){if(x.slice(0,2)=='i$'){result.push($q('@'+$_uncamel(x.slice(2,x.length))));};}`
510
+ `for(var x in this){if(x.slice(0,2)=='i$'){result.push($q('@'+x.slice(2,x.length)));};}`
504
511
  return `result`
505
512
  end
506
513
 
@@ -616,8 +623,8 @@ class Object
616
623
  # k.methods.length #=> 42
617
624
  #
618
625
  def methods
619
- `var result=[]`
620
- `for(var x in this){if(x.slice(0,2)=='m$'&&x!='m$initialize'){$q($_uncamel(x.slice(2,x.length)));};}`
626
+ `var result=[],sub={_eql2:'==',_eql3:'===',_etld:'=~',_brac:'[]',_breq:'[]=',_lteq:'<=',_gteq:'>=',_ltlt:'<<',_gtgt:'>>',_lthn:'<',_gthn:'>',_ltgt:'<=>',_pipe:'|',_ampe:'&',_plus:'+',_posi:'+@',_nega:'-@',_star:'*',_str2:'**',_slsh:'/',_perc:'%',_care:'^',_tild:'~'}`
627
+ `for(var x in this){if(x.slice(0,2)=='m$'&&x!='m$initialize'){var str=x.slice(2,x.length);str=sub[str]||str;result.push($q(str.replace('_bool','?').replace('_bang','!').replace('_eql','=')));};}`
621
628
  return `result`
622
629
  end
623
630
 
@@ -671,7 +678,7 @@ class Object
671
678
  # Returns +true+ if _obj_ responds to the given method.
672
679
  #
673
680
  def respond_to?(method)
674
- `typeof(this['m$'+method._value])=='function'`
681
+ `typeof(this['m$'+method.__value__])=='function'`
675
682
  end
676
683
 
677
684
  # call-seq:
@@ -692,8 +699,9 @@ class Object
692
699
  # k.send(:hello, "gentle", "readers") #=> "Hello gentle readers"
693
700
  #
694
701
  def send(sym,*args)
695
- `method=this['m$'+sym._value.replace('=','Eql')]`
696
- `if(!method){m$raise(c$NoMethodError,$q('undefined method "'+sym._value+'" for '+this));}`
702
+ `var str=sym.__value__.replace('=','_eql').replace('!','_bang').replace('?','_bool');sub={'==':'_eql2','===':'_eql3','=~':'_etld','[]':'_brac','[]=':'_breq','<=':'_lteq','>=':'_gteq','<<':'_ltlt','>>':'_gtgt','<':'_lthn','>':'_gthn','<=>':'_ltgt','|':'_pipe','&':'_ampe','+':'_plus','+@':'_posi','-@':'_nega','*':'_star','**':'_str2','/':'_slsh','%':'_perc','^':'_care','~':'_tild'}`
703
+ `var method=this['m$'+(sub[str]||str)]`
704
+ `if(!method){m$raise(c$NoMethodError,$q('undefined method "'+sym.__value__+'" for '+this));}`
697
705
  `method.apply(this,args)`
698
706
  end
699
707
 
@@ -778,7 +786,7 @@ class Module
778
786
  # a.say_bye #=> "goodbye"
779
787
  #
780
788
  def initialize(module_name, &block)
781
- `this.__name__=moduleName._value||moduleName`
789
+ `this.__name__=module_name.__value__||module_name`
782
790
  `this.prototype={}`
783
791
  end
784
792
 
@@ -792,7 +800,7 @@ class Module
792
800
  end
793
801
 
794
802
  def ===(obj)
795
- `obj.m$isABool(this)`
803
+ `obj.m$is_a_bool(this)`
796
804
  end
797
805
 
798
806
  def >(other_module)
@@ -820,28 +828,29 @@ class Module
820
828
  def append_features(mod)
821
829
  `Red.donateMethodsToSingleton(this,mod)`
822
830
  `Red.donateMethodsToClass(this.prototype,mod.prototype)`
831
+ `Red.donateConstantsToClass(this,mod)`
823
832
  return `mod`
824
833
  end
825
834
 
826
835
  def attr(attribute, writer = false)
827
- `var a=attribute._value`
836
+ `var a=attribute.__value__`
828
837
  `f1=this.prototype['m$'+a]=function(){return this['i$'+arguments.callee._name];};f1._name=a`
829
- `if(writer){f2=this.prototype['m$'+a._value+'Eql']=function(x){return this['i$'+arguments.callee._name]=x;};f2._name=a;}`
838
+ `if(writer){f2=this.prototype['m$'+a.__value__+'_eql']=function(x){return this['i$'+arguments.callee._name]=x;};f2._name=a;}`
830
839
  return nil
831
840
  end
832
841
 
833
842
  def attr_accessor(*symbols)
834
843
  `for(var i=0,l=symbols.length;i<l;++i){
835
- var a=symbols[i]._value;
844
+ var a=symbols[i].__value__;
836
845
  f1=this.prototype['m$'+a]=function(){return this['i$'+arguments.callee._name];};f1._name=a;
837
- f2=this.prototype['m$'+a+'Eql']=function(x){return this['i$'+arguments.callee._name]=x;};f2._name=a;
846
+ f2=this.prototype['m$'+a+'_eql']=function(x){return this['i$'+arguments.callee._name]=x;};f2._name=a;
838
847
  }`
839
848
  return nil
840
849
  end
841
850
 
842
851
  def attr_reader(*symbols)
843
852
  `for(var i=0,l=symbols.length;i<l;++i){
844
- var a=symbols[i]._value;
853
+ var a=symbols[i].__value__;
845
854
  f=this.prototype['m$'+a]=function(){return this['i$'+arguments.callee._name];};f._name=a;
846
855
  }`
847
856
  return nil
@@ -849,8 +858,8 @@ class Module
849
858
 
850
859
  def attr_writer(*symbols)
851
860
  `for(var i=0,l=symbols.length;i<l;++i){
852
- var a=symbols[i]._value;
853
- f=this.prototype['m$'+a+'Eql']=function(x){return this['i$'+arguments.callee._name]=x;};f._name=a;
861
+ var a=symbols[i].__value__;
862
+ f=this.prototype['m$'+a+'_eql']=function(x){return this['i$'+arguments.callee._name]=x;};f._name=a;
854
863
  }`
855
864
  return nil
856
865
  end
@@ -975,7 +984,7 @@ class Module
975
984
  # k.hello #=> "Hello from Mod"
976
985
  #
977
986
  def include(*modules)
978
- `for(var i=0,l=modules.length;i<l;++i){var mod=modules[i];mod.m$appendFeatures(this);mod.m$included(this);mod.__includers__[this.__name__]=true;}`
987
+ `for(var i=0,l=modules.length;i<l;++i){var mod=modules[i];mod.m$append_features(this);mod.m$included(this);mod.__includers__[this.__name__]=true;}`
979
988
  return self
980
989
  end
981
990
 
@@ -1077,8 +1086,8 @@ class Class < Module
1077
1086
  #
1078
1087
  # FIX: Incomplete
1079
1088
  def self.new(class_name, superclass = Object)
1080
- `Red._class(className._value,superclass,function(){})`
1081
- return `window['c$'+className._value]`
1089
+ `Red._class(class_name.__value__,superclass,function(){})`
1090
+ return `window['c$'+class_name.__value__]`
1082
1091
  end
1083
1092
 
1084
1093
  # call-seq:
@@ -1294,8 +1303,8 @@ end
1294
1303
  #
1295
1304
  module Kernel
1296
1305
  # FIX: Incomplete
1297
- def block_given?
1298
- `typeof(arguments[0])=='function'`
1306
+ def block_given?(x)
1307
+ `typeof(x)=='function'`
1299
1308
  end
1300
1309
 
1301
1310
  # FIX: Incomplete
@@ -1318,8 +1327,9 @@ module Kernel
1318
1327
  #
1319
1328
  # FIX: Incomplete
1320
1329
  def lambda(func)
1321
- `result=new(c$Proc)()`
1322
- `result._block=func`
1330
+ `var result=new(c$Proc)()`
1331
+ `result.__block__=func`
1332
+ `result.__block__.__id__=Red.id++`
1323
1333
  return `result`
1324
1334
  end
1325
1335
 
@@ -1358,8 +1368,9 @@ module Kernel
1358
1368
  #
1359
1369
  # FIX: Incomplete
1360
1370
  def proc(func)
1361
- `result=new(c$Proc)()`
1362
- `result._block=func`
1371
+ `var result=new(c$Proc)()`
1372
+ `result.__block__=func`
1373
+ `result.__block__.__id__=Red.id++`
1363
1374
  return `result`
1364
1375
  end
1365
1376
 
@@ -1375,15 +1386,15 @@ module Kernel
1375
1386
  #
1376
1387
  # FIX: Incomplete
1377
1388
  def puts(obj)
1378
- `var string=obj.m$toS&&obj.m$toS()||$q(''+obj)`
1379
- `console.log(string._value.replace(/\\\\/g,'\\\\\\\\'))`
1389
+ `var string=obj.m$to_s&&obj.m$to_s()||$q(''+obj)`
1390
+ `console.log(string.__value__.replace(/\\\\/g,'\\\\\\\\'))`
1380
1391
  return nil
1381
1392
  end
1382
1393
 
1383
1394
  # FIX: Incomplete
1384
- def raise
1395
+ def raise(*args)
1385
1396
  `var exception_class=c$RuntimeError,msg=$q('')`
1386
- `if(arguments[0]&&arguments[0].m$isABool(c$Exception)){
1397
+ `if(arguments[0]&&arguments[0].m$is_a_bool(c$Exception)){
1387
1398
  var e=arguments[0];
1388
1399
  }else{
1389
1400
  if(arguments[0]&&arguments[0].m$class()==c$String){
@@ -1395,7 +1406,7 @@ module Kernel
1395
1406
  }
1396
1407
  }`
1397
1408
  `var e=e||exception_class.m$new(msg)`
1398
- `e._stack=new Error().stack`
1409
+ `e.__stack__=new Error().stack`
1399
1410
  `throw(e)`
1400
1411
  return nil
1401
1412
  end
@@ -1437,13 +1448,13 @@ module Kernel
1437
1448
 
1438
1449
  # FIX: Incomplete
1439
1450
  def sprintf(string)
1440
- `var i=1,source=string._value,result=[],m=$u,arg=$u,val=$u,str=$u,dL=$u,chr=$u,pad=$u;
1451
+ `var i=1,source=string.__value__,result=[],m=$u,arg=$u,val=$u,str=$u,dL=$u,chr=$u,pad=$u;
1441
1452
  while(source){
1442
1453
  if(m=source.match(/^[^%]+/)){result.push(m[0]);source=source.slice(m[0].length);continue;};
1443
1454
  if(m=source.match(/^%%/)) {result.push('%'); source=source.slice(m[0].length);continue;};
1444
1455
  // 1(0)2(wdth) 3(prec) 4(field-type )
1445
1456
  if(m=source.match(/^%(0)?(\\d+)?(?:\\.(\\d+))?([bcdEefGgiopsuXx])/)){
1446
- arg = arguments[i]._value||arguments[i];
1457
+ arg = arguments[i].__value__||arguments[i];
1447
1458
  switch(m[4]){
1448
1459
  case'b':str=parseFloat(arg).toString(2);break;
1449
1460
  case'c':str=String.fromCharCode(arg);break;
@@ -1455,8 +1466,8 @@ module Kernel
1455
1466
  case'g':str='-FIX-';break;
1456
1467
  case'i':val=parseInt(arg);str=''+val;break;
1457
1468
  case'o':str=parseFloat(arg).toString(8);break;
1458
- case'p':str=$q(arg).m$inspect()._value;break;
1459
- case's':val=arg.m$toS&&arg.m$toS()._value||arg;str=(m[3]?val.slice(0,m[2]):val);break;
1469
+ case'p':str=$q(arg).m$inspect().__value__;break;
1470
+ case's':val=arg.m$to_s&&arg.m$to_s().__value__||arg;str=(m[3]?val.slice(0,m[2]):val);break;
1460
1471
  case'u':val=parseInt(arg);str=''+(val<0?'..'+(Math.pow(2,32)+val):val);break;
1461
1472
  case'X':str=parseInt(arg).toString(16).toUpperCase();break;
1462
1473
  case'x':str=parseInt(arg).toString(16);break;
@@ -1758,7 +1769,7 @@ class Array
1758
1769
  # [1,2,3] * 3 #=> [1, 2, 3, 1, 2, 3, 1, 2, 3]
1759
1770
  #
1760
1771
  def *(arg)
1761
- `if(arg.m$class()==c$String){return this.join(arg);}`
1772
+ `if(arg.m$class()==c$String){return $q(this.join(arg));}`
1762
1773
  `var result=[],i=0,l=parseInt(arg)`
1763
1774
  `while(i<l){result=result.concat(this);i++;}`
1764
1775
  return `result`
@@ -1866,10 +1877,10 @@ class Array
1866
1877
  # a[5,1] #=> []
1867
1878
  # a[5..10] #=> []
1868
1879
  #
1869
- def [](index, length)
1880
+ def [](index, length = nil)
1870
1881
  `var l=this.length`
1871
1882
  `if(index.m$class()==c$Range){
1872
- var start=index._start,end=index._exclusive?index._end-1:index._end;
1883
+ var start=index.__start__,end=index.__exclusive__?index.__end__-1:index.__end__;
1873
1884
  index=start<0?start+l:start;
1874
1885
  length=(end<0?end+l:end)-index+1;
1875
1886
  if(length<0){length=0};
@@ -1910,13 +1921,17 @@ class Array
1910
1921
  def []=(index, length, object)
1911
1922
  `var l=this.length`
1912
1923
  `if(object==null){object=length;length=$u;}`
1913
- `if(index.m$class()==c$Range){var start=index._start,end=index._exclusive?index._end-1:index._end;index=start<0?start+l:start;length=(end<0?end+l:end)-index+1;if(length<0){length=0};}else{if(index<0){index+=l;};if(length<0){throw('IndexError: negative length')}}`
1924
+ `if(index.m$class()==c$Range){var start=index.__start__,end=index.__exclusive__?index.__end__-1:index.__end__;index=start<0?start+l:start;length=(end<0?end+l:end)-index+1;if(length<0){length=0};}else{if(index<0){index+=l;};if(length<0){throw('IndexError: negative length')}}`
1914
1925
  `if(index<0){throw('RangeError: out of range');}`
1915
1926
  `while(this.length<index){this.push(nil);}`
1916
1927
  `if($T(length)){var l=this.length,final=(index+length>l)?l:index+length;this._replace(this.slice(0,index).concat(object===nil?[]:(object.m$class()==c$Array?object:[object])).concat(this.slice(final,l)))}else{this[index]=object}`
1917
1928
  return `object`
1918
1929
  end
1919
1930
 
1931
+ def __id__ # :nodoc:
1932
+ `this.__id__||(this.__id__=Red.id++)`
1933
+ end
1934
+
1920
1935
  # call-seq:
1921
1936
  # ary.assoc(obj) -> array or nil
1922
1937
  #
@@ -1981,7 +1996,7 @@ class Array
1981
1996
  # a #=> [1, 2, 3, 4]
1982
1997
  #
1983
1998
  def collect
1984
- `for(var i=0,l=this.length,result=[];i<l;++i){try{result[i]=#{yield `this[i]`};}catch(e){switch(e.__keyword__){case 'next':result[i]=e._value;break;case 'break':return e._value;break;case 'redo':--i;break;default:throw(e);};};}`
1999
+ `for(var i=0,l=this.length,result=[];i<l;++i){try{result[i]=#{yield `this[i]`};}catch(e){switch(e.__keyword__){case 'next':result[i]=e.__return__;break;case 'break':return e.__return__;break;case 'redo':--i;break;default:throw(e);};};}`
1985
2000
  return `result`
1986
2001
  end
1987
2002
 
@@ -1999,7 +2014,7 @@ class Array
1999
2014
  # a.collect! {|x| x + 100 } #=> [201, 202, 203, 204]
2000
2015
  #
2001
2016
  def collect!
2002
- `for(var i=0,l=this.length;i<l;++i){try{this[i]=#{yield `this[i]`};}catch(e){switch(e.__keyword__){case 'next':this[i]=e._value;break;case 'break':return e._value;break;case 'redo':--i;break;default:throw(e);};};}`
2017
+ `for(var i=0,l=this.length;i<l;++i){try{this[i]=#{yield `this[i]`};}catch(e){switch(e.__keyword__){case 'next':this[i]=e.__return__;break;case 'break':return e.__return__;break;case 'redo':--i;break;default:throw(e);};};}`
2003
2018
  return self
2004
2019
  end
2005
2020
 
@@ -2062,7 +2077,7 @@ class Array
2062
2077
  def delete(obj)
2063
2078
  `for(var i=0,l=this.length,temp=[];i<l;++i){if(!(this[i].m$_eql2(obj))){temp.push(this[i]);};}`
2064
2079
  `this._replace(temp)`
2065
- return `l===this.length?(blockGivenBool?#{yield}:nil):obj`
2080
+ return `l===this.length?(#{block_given?}?#{yield}:nil):obj`
2066
2081
  end
2067
2082
 
2068
2083
  # call-seq:
@@ -2098,7 +2113,7 @@ class Array
2098
2113
  # a.delete_if {|element| element >= 'b' } #=> ["a"]
2099
2114
  #
2100
2115
  def delete_if
2101
- `for(var temp=[],i=0,l=this.length;i<l;++i){try{if(!$T(#{yield `this[i]`})){temp.push(this[i]);};}catch(e){switch(e.__keyword__){case 'next':if(!$T(e._value)){temp.push(this[i]);};break;case 'break':return e._value;break;case 'redo':--i;break;default:throw(e);};};}`
2116
+ `for(var temp=[],i=0,l=this.length;i<l;++i){try{if(!$T(#{yield `this[i]`})){temp.push(this[i]);};}catch(e){switch(e.__keyword__){case 'next':if(!$T(e.__return__)){temp.push(this[i]);};break;case 'break':return e.__return__;break;case 'redo':--i;break;default:throw(e);};};}`
2102
2117
  `this._replace(temp)`
2103
2118
  end
2104
2119
 
@@ -2116,7 +2131,7 @@ class Array
2116
2131
  # C
2117
2132
  #
2118
2133
  def each
2119
- `for(var i=0,l=this.length;i<l;++i){try{#{yield `this[i]`};}catch(e){switch(e.__keyword__){case 'next':break;case 'break':return e._value;break;case 'redo':--i;break;default:throw(e);};};}`
2134
+ `for(var i=0,l=this.length;i<l;++i){try{#{yield `this[i]`};}catch(e){switch(e.__keyword__){case 'next':break;case 'break':return e.__return__;break;case 'redo':--i;break;default:throw(e);};};}`
2120
2135
  return self
2121
2136
  end
2122
2137
 
@@ -2134,7 +2149,7 @@ class Array
2134
2149
  # 102
2135
2150
  #
2136
2151
  def each_index
2137
- `for(var i=0,l=this.length;i<l;++i){try{#{yield `i`};}catch(e){switch(e.__keyword__){case 'next':break;case 'break':return e._value;break;case 'redo':--i;break;default:throw(e);};};}`
2152
+ `for(var i=0,l=this.length;i<l;++i){try{#{yield `i`};}catch(e){switch(e.__keyword__){case 'next':break;case 'break':return e.__return__;break;case 'redo':--i;break;default:throw(e);};};}`
2138
2153
  return self
2139
2154
  end
2140
2155
 
@@ -2163,10 +2178,15 @@ class Array
2163
2178
  #
2164
2179
  def eql?(ary)
2165
2180
  `if(ary.m$class()!==c$Array||ary.length!==this.length){return false;}`
2166
- `for(var i=0,l=this.length;i<l;++i){if(!(this[i].m$eqlBool(ary[i]))){return false;};}`
2181
+ `for(var i=0,l=this.length;i<l;++i){if(!(this[i].m$eql_bool(ary[i]))){return false;};}`
2167
2182
  return true
2168
2183
  end
2169
2184
 
2185
+ def equal?(ary) # :nodoc:
2186
+ `var thisId=this.__id__||(this.__id__=Red.id++),aryId=ary.__id__||(ary.__id__=Red.id++)`
2187
+ `thisId==aryId`
2188
+ end
2189
+
2170
2190
  # call-seq:
2171
2191
  # ary.fetch(index) -> object or nil
2172
2192
  # ary.fetch(index, default) -> object or default
@@ -2272,8 +2292,9 @@ class Array
2272
2292
  # a.flatten! #=> nil
2273
2293
  #
2274
2294
  def flatten!
2275
- `for(var i=0,l=this.length,result=[];i<l;++i){if(this[i].m$class()==c$Array){result=result.concat(this[i].m$flattenBang());}else{result.push(this[i]);};}`
2276
- return `this.length==result.length?nil:this._replace(result)`
2295
+ `var flatten=function(ary){for(var i=0,l=ary.length,result=[];i<l;++i){if(ary[i].m$class()==c$Array){result=result.concat(ary[i].m$flatten());}else{result.push(ary[i]);};};return result;}`
2296
+ `for(var i=0,l=this.length,result=[];i<l;++i){if(this[i].m$class()==c$Array){result=result.concat(flatten(this[i]));}else{result.push(this[i]);};}`
2297
+ return `l==result.length?nil:this._replace(result)`
2277
2298
  end
2278
2299
 
2279
2300
  def hash # :nodoc:
@@ -2336,7 +2357,7 @@ class Array
2336
2357
  # [1,2,3].inspect #=> "[1, 2, 3]"
2337
2358
  #
2338
2359
  def inspect
2339
- `for(var i=1,l=this.length,result='['+(this[0]!=null?this[0].m$inspect()._value:'');i<l;++i){result+=', '+this[i].m$inspect()._value;}`
2360
+ `for(var i=1,l=this.length,result='['+(this[0]!=null?this[0].m$inspect().__value__:'');i<l;++i){result+=', '+this[i].m$inspect().__value__;}`
2340
2361
  return `$q(result+']')`
2341
2362
  end
2342
2363
 
@@ -2351,8 +2372,8 @@ class Array
2351
2372
  # %w(a b c).join('.') #=> "a.b.c"
2352
2373
  #
2353
2374
  def join(str = '')
2354
- `var result=this[0]!=null?this[0].m$join?this[0].m$join(str._value)._value:this[0].m$toS()._value:''`
2355
- `for(var i=1,l=this.length;i<l;++i){result+=(str._value||'')+(this[i].m$join?this[i].m$join(str)._value:this[i].m$toS()._value);}`
2375
+ `var result=this[0]!=null?this[0].m$join?this[0].m$join(str.__value__).__value__:this[0].m$to_s().__value__:''`
2376
+ `for(var i=1,l=this.length;i<l;++i){result+=(str.__value__||'')+(this[i].m$join?this[i].m$join(str).__value__:this[i].m$to_s().__value__);}`
2356
2377
  return `$q(result)`
2357
2378
  end
2358
2379
 
@@ -2402,7 +2423,7 @@ class Array
2402
2423
  # a #=> [1, 2, 3, 4]
2403
2424
  #
2404
2425
  def map
2405
- `for(var i=0,l=this.length,result=[];i<l;++i){try{result[i]=#{yield `this[i]`};}catch(e){switch(e.__keyword__){case 'next':result[i]=e._value;break;case 'break':return e._value;break;case 'redo':--i;break;default:throw(e);};};}`
2426
+ `for(var i=0,l=this.length,result=[];i<l;++i){try{result[i]=#{yield `this[i]`};}catch(e){switch(e.__keyword__){case 'next':result[i]=e.__return__;break;case 'break':return e.__return__;break;case 'redo':--i;break;default:throw(e);};};}`
2406
2427
  return `result`
2407
2428
  end
2408
2429
 
@@ -2420,7 +2441,7 @@ class Array
2420
2441
  # a.map! {|x| x + 100 } #=> [201, 202, 203, 204]
2421
2442
  #
2422
2443
  def map!
2423
- `for(var i=0,l=this.length;i<l;++i){try{this[i]=#{yield `this[i]`};}catch(e){switch(e.__keyword__){case 'next':this[i]=e._value;break;case 'break':return e._value;break;case 'redo':--i;break;default:throw(e);};};}`
2444
+ `for(var i=0,l=this.length;i<l;++i){try{this[i]=#{yield `this[i]`};}catch(e){switch(e.__keyword__){case 'next':this[i]=e.__return__;break;case 'break':return e.__return__;break;case 'redo':--i;break;default:throw(e);};};}`
2424
2445
  return self
2425
2446
  end
2426
2447
 
@@ -2436,6 +2457,10 @@ class Array
2436
2457
  return `result`
2437
2458
  end
2438
2459
 
2460
+ def object_id # :nodoc:
2461
+ `this.__id__||(this.__id__=Red.id++)`
2462
+ end
2463
+
2439
2464
  # call-seq:
2440
2465
  # ary.pop -> object or nil
2441
2466
  #
@@ -2498,7 +2523,7 @@ class Array
2498
2523
  # a #=> [1, 2, 3, 4, 5]
2499
2524
  #
2500
2525
  def reject
2501
- `for(var i=0,l=this.length,result=[];i<l;++i){try{if(!$T(#{yield `this[i]`})){result.push(this[i]);};}catch(e){switch(e.__keyword__){case 'next':if(!$T(e._value)){result.push(this[i]);};break;case 'break':return e._value;break;case 'redo':--i;break;default:throw(e);};};}`
2526
+ `for(var i=0,l=this.length,result=[];i<l;++i){try{if(!$T(#{yield `this[i]`})){result.push(this[i]);};}catch(e){switch(e.__keyword__){case 'next':if(!$T(e.__return__)){result.push(this[i]);};break;case 'break':return e.__return__;break;case 'redo':--i;break;default:throw(e);};};}`
2502
2527
  return `result`
2503
2528
  end
2504
2529
 
@@ -2515,7 +2540,7 @@ class Array
2515
2540
  # a #=> [1, 2, 3]
2516
2541
  #
2517
2542
  def reject!
2518
- `for(var i=0,l=this.length,temp=[];i<l;++i){try{if(!$T(#{yield `this[i]`})){temp.push(this[i]);};}catch(e){switch(e.__keyword__){case 'next':if(!$T(e._value)){temp.push(this[i]);};break;case 'break':return e._value;break;case 'redo':--i;break;default:throw(e);};};}`
2543
+ `for(var i=0,l=this.length,temp=[];i<l;++i){try{if(!$T(#{yield `this[i]`})){temp.push(this[i]);};}catch(e){switch(e.__keyword__){case 'next':if(!$T(e.__return__)){temp.push(this[i]);};break;case 'break':return e.__return__;break;case 'redo':--i;break;default:throw(e);};};}`
2519
2544
  return `temp.length==l?nil:this._replace(temp)`
2520
2545
  end
2521
2546
 
@@ -2545,7 +2570,8 @@ class Array
2545
2570
  # a #=> [1, 2, 3, 4, 5]
2546
2571
  #
2547
2572
  def reverse
2548
- `this.reverse()`
2573
+ `for(var i=this.length,result=[];i>0;){result.push(this[--i]);}`
2574
+ return `result`
2549
2575
  end
2550
2576
 
2551
2577
  # call-seq:
@@ -2559,8 +2585,7 @@ class Array
2559
2585
  # a #=> [5, 4, 3, 2, 1]
2560
2586
  #
2561
2587
  def reverse!
2562
- `for(var i=0,l=this.length,last=l-1;i<l;++i){j=last-i;if(i>=j){break;};this._swap(i,j);}`
2563
- return self
2588
+ `this.reverse()`
2564
2589
  end
2565
2590
 
2566
2591
  # call-seq:
@@ -2578,7 +2603,7 @@ class Array
2578
2603
  # A
2579
2604
  #
2580
2605
  def reverse_each
2581
- `for(var i=this.length;i>0;){try{#{yield `this[--i]`};}catch(e){switch(e.__keyword__){case 'next':break;case 'break':return e._value;break;case 'redo':++i;break;default:throw(e);};};}`
2606
+ `for(var i=this.length;i>0;){try{#{yield `this[--i]`};}catch(e){switch(e.__keyword__){case 'next':break;case 'break':return e.__return__;break;case 'redo':++i;break;default:throw(e);};};}`
2582
2607
  return self
2583
2608
  end
2584
2609
 
@@ -2607,7 +2632,7 @@ class Array
2607
2632
  # [1,2,3,4,5].select {|x| x > 3 } #=> [4, 5]
2608
2633
  #
2609
2634
  def select
2610
- `for(var i=0,l=this.length,result=[];i<l;++i){try{if($T(#{yield `this[i]`})){result.push(this[i]);};}catch(e){switch(e.__keyword__){case 'next':if($T(e._value)){result.push(this[i]);};break;case 'break':return e._value;break;case 'redo':--i;break;default:throw(e);};};}`
2635
+ `for(var i=0,l=this.length,result=[];i<l;++i){try{if($T(#{yield `this[i]`})){result.push(this[i]);};}catch(e){switch(e.__keyword__){case 'next':if($T(e.__return__)){result.push(this[i]);};break;case 'break':return e.__return__;break;case 'redo':--i;break;default:throw(e);};};}`
2611
2636
  return `result`
2612
2637
  end
2613
2638
 
@@ -2690,7 +2715,7 @@ class Array
2690
2715
  #
2691
2716
  def slice!(index, length)
2692
2717
  `var l=this.length`
2693
- `if(index.m$class()==c$Range){var start=index._start,end=index._exclusive?index._end-1:index._end;index=start<0?start+l:start;length=(end<0?end+l:end)-index+1;if(length<0){length=0};}else{if(index<0){index+=l;};if(length<0){throw('IndexError: negative length')};}`
2718
+ `if(index.m$class()==c$Range){var start=index.__start__,end=index.__exclusive__?index.__end__-1:index.__end__;index=start<0?start+l:start;length=(end<0?end+l:end)-index+1;if(length<0){length=0};}else{if(index<0){index+=l;};if(length<0){throw('IndexError: negative length')};}`
2694
2719
  `if(index>=l){return nil;}`
2695
2720
  `if(index<0){throw('RangeError: out of range');}`
2696
2721
  `if($T(length)){if(length<=0){return [];};result=this.slice(index,index+length);this._replace(this.slice(0,index).concat(this.slice(index+length)));}else{result=this[index];this._replace(this.slice(0,index).concat(this.slice(index+1,l)));}`
@@ -2713,7 +2738,7 @@ class Array
2713
2738
  #
2714
2739
  # FIX: Doesn't handle loop control keywords
2715
2740
  def sort(block)
2716
- `c$Array.apply(null,this)._quickSort(0,this.length,block)`
2741
+ `c$Array.apply(null,this)._quick_sort(0,this.length,block)`
2717
2742
  end
2718
2743
 
2719
2744
  # call-seq:
@@ -2732,7 +2757,7 @@ class Array
2732
2757
  #
2733
2758
  # FIX: Doesn't handle loop control keywords
2734
2759
  def sort!(block)
2735
- `this._quickSort(0,this.length,block)`
2760
+ `this._quick_sort(0,this.length,block)`
2736
2761
  end
2737
2762
 
2738
2763
  # call-seq:
@@ -2841,7 +2866,7 @@ class Array
2841
2866
  end
2842
2867
 
2843
2868
  `_._partition=function(first,last,pivot,block){var value=this[pivot],store=first;this._swap(pivot,last);for(var i=0,l=this.length;i<l;++i){if(i<first||i>=last){continue;};var cmp=block?block(this[i],value):this[i].m$_ltgt(value);if(cmp==-1||cmp==0){this._swap(store++,i);};};this._swap(last,store);return(store);}`
2844
- `_._quickSort=function(start,finish,block){if(finish-1>start){var pivot=start+Math.floor(Math.random()*(finish-start));pivot=this._partition(start,(finish-1),pivot,block);this._quickSort(start,pivot,block);this._quickSort((pivot+1),finish,block);};return(this);}`
2869
+ `_._quick_sort=function(start,finish,block){if(finish-1>start){var pivot=start+Math.floor(Math.random()*(finish-start));pivot=this._partition(start,(finish-1),pivot,block);this._quick_sort(start,pivot,block);this._quick_sort((pivot+1),finish,block);};return(this);}`
2845
2870
  `_._replace=function(ary){this.length=0;for(var i=0,l=ary.length;i<l;++i){this.push(ary[i])};return this;}`
2846
2871
  `_._swap=function(x,y){var z=this[x];this[x]=this[y];this[y]=z;return this;}`
2847
2872
  end
@@ -2869,7 +2894,7 @@ class Exception
2869
2894
  # Returns a new +Exception+ object, with an optional _message_.
2870
2895
  #
2871
2896
  def initialize(msg)
2872
- `if(msg!=null){this._message=msg._value;}`
2897
+ `if(msg!=null){this.__message__=msg.__value__;}`
2873
2898
  end
2874
2899
 
2875
2900
  # call-seq:
@@ -2879,8 +2904,8 @@ class Exception
2879
2904
  # array of strings, each containing <i>"/path/to/filename:line"</i>.
2880
2905
  #
2881
2906
  def backtrace
2882
- `if(this._stack==null){return [];}`
2883
- `for(var i=0,lines=this._stack.match(/@[^\\n]+:\\d+/g),l=lines.length,result=[];i<l;++i){result.push($q(lines[i].match(/@\\w+:\\/*(\\/[^\\n]+:\\d+)/)[1]));}`
2907
+ `if(this.__stack__==null){return [];}`
2908
+ `for(var i=0,lines=this.__stack__.match(/@[^\\n]+:\\d+/g),l=lines.length,result=[];i<l;++i){result.push($q(lines[i].match(/@\\w+:\\/*(\\/[^\\n]+:\\d+)/)[1]));}`
2884
2909
  return `result`
2885
2910
  end
2886
2911
 
@@ -2893,7 +2918,7 @@ class Exception
2893
2918
  #
2894
2919
  def exception(arg)
2895
2920
  `if(arg==null||arg==this){return this;}`
2896
- `this.m$class().m$new(arg.m$toStr())`
2921
+ `this.m$class().m$new(arg.m$to_str())`
2897
2922
  end
2898
2923
 
2899
2924
  # call-seq:
@@ -2903,7 +2928,7 @@ class Exception
2903
2928
  #
2904
2929
  def inspect
2905
2930
  `var class_name=this.m$class().__name__.replace(/\\./g,'::')`
2906
- `this._message==''?$q(class_name):$q('#<'+class_name+': '+(this._message||class_name)+'>')`
2931
+ `this.__message__==''?$q(class_name):$q('#<'+class_name+': '+(this.__message__||class_name)+'>')`
2907
2932
  end
2908
2933
 
2909
2934
  # call-seq:
@@ -2915,7 +2940,7 @@ class Exception
2915
2940
  # is set).
2916
2941
  #
2917
2942
  def message
2918
- `this._message==null?$q(this.m$class().__name__.replace(/\\./g,'::')):$q(this._message)`
2943
+ `this.__message__==null?$q(this.m$class().__name__.replace(/\\./g,'::')):$q(this.__message__)`
2919
2944
  end
2920
2945
 
2921
2946
  # call-seq:
@@ -2925,8 +2950,8 @@ class Exception
2925
2950
  # an array of +String+ objects in the format described in
2926
2951
  # <tt>Exception#backtrace</tt>.
2927
2952
  def set_backtrace(ary)
2928
- `for(var i=0,l=ary.length,result='';i<l;++i){result=result+'@xx://'+ary[i]._value+'\\n';}`
2929
- `this._stack=result`
2953
+ `for(var i=0,l=ary.length,result='';i<l;++i){result=result+'@xx://'+ary[i].__value__+'\\n';}`
2954
+ `this.__stack__=result`
2930
2955
  return `ary`
2931
2956
  end
2932
2957
 
@@ -2939,7 +2964,7 @@ class Exception
2939
2964
  # is set).
2940
2965
  #
2941
2966
  def to_s
2942
- `this._message==null?$q(this.m$class().__name__.replace(/\\./g,'::')):$q(this._message)`
2967
+ `this.__message__==null?$q(this.m$class().__name__.replace(/\\./g,'::')):$q(this.__message__)`
2943
2968
  end
2944
2969
 
2945
2970
  # call-seq:
@@ -2951,11 +2976,11 @@ class Exception
2951
2976
  # is set).
2952
2977
  #
2953
2978
  def to_str
2954
- `this._message==null?$q(this.m$class().__name__.replace(/\\./g,'::')):$q(this._message)`
2979
+ `this.__message__==null?$q(this.m$class().__name__.replace(/\\./g,'::')):$q(this.__message__)`
2955
2980
  end
2956
2981
  end
2957
2982
  `
2958
- c$Exception.prototype.toString=function(){var class_name=this.m$class().__name__.replace(/\\./g,'::'),str=class_name+': '+(this._message||class_name);console.log(str+(this._stack!=null?'\\n from '+this.m$backtrace().join('\\n from '):''));return '#<'+str+'>';}
2983
+ c$Exception.prototype.toString=function(){var class_name=this.m$class().__name__.replace(/\\./g,'::'),str=class_name+': '+(this.__message__||class_name);console.log(str+(this.__stack__!=null?'\\n from '+this.m$backtrace().join('\\n from '):''));return '#<'+str+'>';}
2959
2984
  `
2960
2985
  class StandardError < Exception ; end
2961
2986
  class ArgumentError < StandardError ; end
@@ -3046,7 +3071,7 @@ class Hash
3046
3071
  #
3047
3072
  def self.[](*args)
3048
3073
  `if(args.length==1&&args[0].m$class()==c$Hash){return args[0];}`
3049
- `for(var i=0,l=args.length,result=c$Hash.m$new(),c=result._contents;i<l;i+=2){var k=args[i],v=args[i+1],h=k.m$hash();c[h]=[k,v]}`
3074
+ `for(var i=0,l=args.length,result=c$Hash.m$new(),c=result.__contents__;i<l;i+=2){var k=args[i],v=args[i+1],h=k.m$hash();c[h]=[k,v]}`
3050
3075
  return `result`
3051
3076
  end
3052
3077
 
@@ -3084,9 +3109,9 @@ class Hash
3084
3109
  # # Values from defaults are stored in the hash
3085
3110
  # h2.keys #=> [:c, :d]
3086
3111
  #
3087
- def initialize(&block)
3088
- `this._default=(block==null?nil:block)`
3089
- `this._contents={}`
3112
+ def initialize(*args,&block)
3113
+ `this.__default__=(args[0]==null?block==null?nil:block:args[0])`
3114
+ `this.__contents__={}`
3090
3115
  end
3091
3116
 
3092
3117
  # call-seq:
@@ -3105,7 +3130,7 @@ class Hash
3105
3130
  # h3 == h4 #=> false
3106
3131
  #
3107
3132
  def ==(other)
3108
- `var c=this._contents,o=other._contents`
3133
+ `var c=this.__contents__,o=other.__contents__`
3109
3134
  `for(var x in o){if(x.slice(1,2)=='_'&&c[x]==null){return false;};}`
3110
3135
  `for(var x in c){if(x.slice(1,2)=='_'&&!c[x][1].m$_eql2(o[x][1])){return false;};}`
3111
3136
  return true
@@ -3124,8 +3149,8 @@ class Hash
3124
3149
  # h[:c] => nil
3125
3150
  #
3126
3151
  def [](k)
3127
- `var kv=this._contents[k.m$hash()]`
3128
- `if(!kv){var d=this._default;return(typeof(d)=='function'?d(this,kv[0]):d);}`
3152
+ `var kv=this.__contents__[k.m$hash()]`
3153
+ `if(!kv){var d=this.__default__;return(typeof(d)=='function'?d(this,kv[0]):d);}`
3129
3154
  return `kv[1]`
3130
3155
  end
3131
3156
 
@@ -3144,7 +3169,7 @@ class Hash
3144
3169
  # h #=> {:a => 150, :b => 200, :c => 300}
3145
3170
  #
3146
3171
  def []=(k,v)
3147
- `this._contents[k.m$hash()]=[k,v]`
3172
+ `this.__contents__[k.m$hash()]=[k,v]`
3148
3173
  return `v`
3149
3174
  end
3150
3175
 
@@ -3159,7 +3184,7 @@ class Hash
3159
3184
  # h #=> {}
3160
3185
  #
3161
3186
  def clear
3162
- `this._contents={}`
3187
+ `this.__contents__={}`
3163
3188
  return self
3164
3189
  end
3165
3190
 
@@ -3183,7 +3208,7 @@ class Hash
3183
3208
  # h.default(2) #=> 20
3184
3209
  #
3185
3210
  def default(key = nil)
3186
- `var d=this._default`
3211
+ `var d=this.__default__`
3187
3212
  return `typeof(d)=='function'?d(this,key):d`
3188
3213
  end
3189
3214
 
@@ -3207,7 +3232,7 @@ class Hash
3207
3232
  # h['foo'] #=> #<Proc:201>
3208
3233
  #
3209
3234
  def default=(obj)
3210
- `this._default=obj`
3235
+ `this.__default__=obj`
3211
3236
  return self
3212
3237
  end
3213
3238
 
@@ -3224,7 +3249,7 @@ class Hash
3224
3249
  # a #=> [nil, nil, 4]
3225
3250
  #
3226
3251
  def default_proc
3227
- `var d=this._default`
3252
+ `var d=this.__default__`
3228
3253
  return `typeof(d)=='function'?c$Proc.m$new(d):nil`
3229
3254
  end
3230
3255
 
@@ -3244,7 +3269,7 @@ class Hash
3244
3269
  # h.delete(:z) {|k| "#{k.inspect} not found" } #=> ":z not found"
3245
3270
  #
3246
3271
  def delete(k)
3247
- `var c=this._contents,d=this._default,x=k.m$hash(),kv=c[x]`
3272
+ `var c=this.__contents__,d=this.__default__,x=k.m$hash(),kv=c[x]`
3248
3273
  `if(kv!=null){var result=kv[1];delete(c[x]);return result;}`
3249
3274
  return `typeof(_block)=='function'?#{yield `k`}:(typeof(d)=='function'?d(this,k):d)`
3250
3275
  end
@@ -3260,8 +3285,8 @@ class Hash
3260
3285
  # h.delete_if {|k,v| v >= 200 } #=> {:a => 100}
3261
3286
  #
3262
3287
  def delete_if
3263
- `var c=this._contents`
3264
- `for(var x in c){try{if(x.slice(1,2)=='_'&&$T(#{yield(`c[x][0]`,`c[x][1]`)})){delete(c[x]);};}catch(e){switch(e.__keyword__){case 'next':if($T(e._value)){delete(c[x]);};break;case 'break':return e._value;break;default:throw(e);};};}`
3288
+ `var c=this.__contents__`
3289
+ `for(var x in c){try{if(x.slice(1,2)=='_'&&$T(#{yield(`c[x][0]`,`c[x][1]`)})){delete(c[x]);};}catch(e){switch(e.__keyword__){case 'next':if($T(e.__return__)){delete(c[x]);};break;case 'break':return e.__return__;break;default:throw(e);};};}`
3265
3290
  return self
3266
3291
  end
3267
3292
 
@@ -3287,8 +3312,8 @@ class Hash
3287
3312
  # key-value array is [:b, 100]
3288
3313
  #
3289
3314
  def each
3290
- `var c=this._contents`
3291
- `for(var x in c){try{if(x.slice(1,2)=='_'){var kv=c[x];_block._arity==1?#{yield(`[kv[0],kv[1]]`)}:#{yield(`kv[0],kv[1]`)}};}catch(e){switch(e.__keyword__){case 'next':;break;case 'break':return e._value;break;default:throw(e);};};}`
3315
+ `var c=this.__contents__`
3316
+ `for(var x in c){try{if(x.slice(1,2)=='_'){var kv=c[x];_block.__arity__==1?#{yield(`[kv[0],kv[1]]`)}:#{yield(`kv[0],kv[1]`)}};}catch(e){switch(e.__keyword__){case 'next':;break;case 'break':return e.__return__;break;default:throw(e);};};}`
3292
3317
  return self
3293
3318
  end
3294
3319
 
@@ -3307,8 +3332,8 @@ class Hash
3307
3332
  # :b
3308
3333
  #
3309
3334
  def each_key
3310
- `var c=this._contents`
3311
- `for(var x in c){try{if(x.slice(1,2)=='_'){#{yield `c[x][0]`}};}catch(e){switch(e.__keyword__){case 'next':;break;case 'break':return e._value;break;default:throw(e);};};}`
3335
+ `var c=this.__contents__`
3336
+ `for(var x in c){try{if(x.slice(1,2)=='_'){#{yield `c[x][0]`}};}catch(e){switch(e.__keyword__){case 'next':;break;case 'break':return e.__return__;break;default:throw(e);};};}`
3312
3337
  return self
3313
3338
  end
3314
3339
 
@@ -3328,8 +3353,8 @@ class Hash
3328
3353
  # :b is 200
3329
3354
  #
3330
3355
  def each_pair
3331
- `var c=this._contents`
3332
- `for(var x in c){try{if(x.slice(1,2)=='_'){var kv=c[x];#{yield(`kv[0]`,`kv[1]`)}};}catch(e){switch(e.__keyword__){case 'next':;break;case 'break':return e._value;break;default:throw(e);};};}`
3356
+ `var c=this.__contents__`
3357
+ `for(var x in c){try{if(x.slice(1,2)=='_'){var kv=c[x];#{yield(`kv[0]`,`kv[1]`)}};}catch(e){switch(e.__keyword__){case 'next':;break;case 'break':return e.__return__;break;default:throw(e);};};}`
3333
3358
  return self
3334
3359
  end
3335
3360
 
@@ -3349,8 +3374,8 @@ class Hash
3349
3374
  # 200
3350
3375
  #
3351
3376
  def each_value
3352
- `var c=this._contents`
3353
- `for(var x in c){try{if(x.slice(1,2)=='_'){#{yield `c[x][1]`}};}catch(e){switch(e.__keyword__){case 'next':;break;case 'break':return e._value;break;default:throw(e);};};}`
3377
+ `var c=this.__contents__`
3378
+ `for(var x in c){try{if(x.slice(1,2)=='_'){#{yield `c[x][1]`}};}catch(e){switch(e.__keyword__){case 'next':;break;case 'break':return e.__return__;break;default:throw(e);};};}`
3354
3379
  return self
3355
3380
  end
3356
3381
 
@@ -3362,7 +3387,7 @@ class Hash
3362
3387
  # {}.empty? #=> true
3363
3388
  #
3364
3389
  def empty?
3365
- `for(var x in this._contents){if(x.slice(1,2)=='_'){return false;};}`
3390
+ `for(var x in this.__contents__){if(x.slice(1,2)=='_'){return false;};}`
3366
3391
  return true
3367
3392
  end
3368
3393
 
@@ -3381,7 +3406,7 @@ class Hash
3381
3406
  # h.fetch(:z) { |k| "No value at #{k.inspect}"} #=> "No value at :z"
3382
3407
  #
3383
3408
  def fetch(key, &block)
3384
- `var c=this._contents,k=key.m$hash(),kv=c[k]`
3409
+ `var c=this.__contents__,k=key.m$hash(),kv=c[k]`
3385
3410
  `if(kv!=null){return kv[1];}`
3386
3411
  return `typeof(block)=='function'?block(key):block`
3387
3412
  end
@@ -3400,7 +3425,7 @@ class Hash
3400
3425
  # h.has_key?(:z) #=> false
3401
3426
  #
3402
3427
  def has_key?(k)
3403
- `!!this._contents[k.m$hash()]`
3428
+ `!!this.__contents__[k.m$hash()]`
3404
3429
  end
3405
3430
 
3406
3431
  # call-seq:
@@ -3416,7 +3441,7 @@ class Hash
3416
3441
  # h.has_value?(999) #=> false
3417
3442
  #
3418
3443
  def has_value?(value)
3419
- `var c=this._contents`
3444
+ `var c=this.__contents__`
3420
3445
  `for(var x in c){if(x.slice(1,2)=='_'&&c[x][1].m$_eql2(value)){return true;};}`
3421
3446
  return false
3422
3447
  end
@@ -3438,7 +3463,7 @@ class Hash
3438
3463
  # h.include?(:z) #=> false
3439
3464
  #
3440
3465
  def include?(k)
3441
- `!!this._contents[k.m$hash()]`
3466
+ `!!this.__contents__[k.m$hash()]`
3442
3467
  end
3443
3468
 
3444
3469
  # call-seq:
@@ -3452,7 +3477,7 @@ class Hash
3452
3477
  # h.index(999) #=> nil
3453
3478
  #
3454
3479
  def index(value)
3455
- `var c=this._contents`
3480
+ `var c=this.__contents__`
3456
3481
  `for(var x in c){var kv=c[x];if(x.slice(1,2)=='_'&&kv[1].m$_eql2(value)){return kv[0];};}`
3457
3482
  return nil
3458
3483
  end
@@ -3467,8 +3492,8 @@ class Hash
3467
3492
  # h.inspect #=> "{:a => 100, :b => 200}"
3468
3493
  #
3469
3494
  def inspect
3470
- `var contents=[],c=this._contents`
3471
- `for(var x in c){if(x.slice(1,2)=='_'){var kv=c[x];contents.push(kv[0].m$inspect()._value+' => '+kv[1].m$inspect()._value);};}`
3495
+ `var contents=[],c=this.__contents__`
3496
+ `for(var x in c){if(x.slice(1,2)=='_'){var kv=c[x];contents.push(kv[0].m$inspect().__value__+' => '+kv[1].m$inspect().__value__);};}`
3472
3497
  return `$q('{'+contents.join(', ')+'}')`
3473
3498
  end
3474
3499
 
@@ -3483,8 +3508,8 @@ class Hash
3483
3508
  # h.invert #=> {100 => :m, 300 => :y, 200 => :d, 0 => :a}
3484
3509
  #
3485
3510
  def invert
3486
- `var c=this._contents,result=c$Hash.m$new()`
3487
- `for(var x in c){if(x.slice(1,2)=='_'){var ckv=c[x],rkv=result._contents[ckv[1].m$hash()]=[];rkv[0]=ckv[1];rkv[1]=ckv[0]};}`
3511
+ `var c=this.__contents__,result=c$Hash.m$new()`
3512
+ `for(var x in c){if(x.slice(1,2)=='_'){var ckv=c[x],rkv=result.__contents__[ckv[1].m$hash()]=[];rkv[0]=ckv[1];rkv[1]=ckv[0]};}`
3488
3513
  return `result`
3489
3514
  end
3490
3515
 
@@ -3502,7 +3527,7 @@ class Hash
3502
3527
  # h.key?(:z) #=> false
3503
3528
  #
3504
3529
  def key?(k)
3505
- `!!this._contents[k.m$hash()]`
3530
+ `!!this.__contents__[k.m$hash()]`
3506
3531
  end
3507
3532
 
3508
3533
  # call-seq:
@@ -3516,7 +3541,7 @@ class Hash
3516
3541
  # h.keys #=> [:a, :b]
3517
3542
  #
3518
3543
  def keys
3519
- `var c=this._contents,result=[]`
3544
+ `var c=this.__contents__,result=[]`
3520
3545
  `for(var x in c){if(x.slice(1,2)=='_'){result.push(c[x][0]);};}`
3521
3546
  return `result`
3522
3547
  end
@@ -3534,7 +3559,7 @@ class Hash
3534
3559
  # h.length #=> 0
3535
3560
  #
3536
3561
  def length
3537
- `var c=this._contents,result=0`
3562
+ `var c=this.__contents__,result=0`
3538
3563
  `for(var x in c){if(x.slice(1,2)=='_'){result++;};}`
3539
3564
  return `result`
3540
3565
  end
@@ -3553,7 +3578,7 @@ class Hash
3553
3578
  # h.member?(:z) #=> false
3554
3579
  #
3555
3580
  def member?(k)
3556
- `!!this._contents[k.m$hash()]`
3581
+ `!!this.__contents__[k.m$hash()]`
3557
3582
  end
3558
3583
 
3559
3584
  # call-seq:
@@ -3572,7 +3597,7 @@ class Hash
3572
3597
  #
3573
3598
  # FIX: Doesn't handle loop control keywords
3574
3599
  def merge(other)
3575
- `var c=this._contents,o=other._contents,result=c$Hash.m$new(),r=result._contents`
3600
+ `var c=this.__contents__,o=other.__contents__,result=c$Hash.m$new(),r=result.__contents__`
3576
3601
  `for(var x in c){if(x.slice(1,2)=='_'){r[x]=c[x];};}`
3577
3602
  `for(var x in o){var ckv=c[x],okv=o[x];if(x.slice(1,2)=='_'){typeof(_block)=='function'&&ckv!=null?r[x]=[ckv[0],#{yield(`ckv[0]`,`ckv[1]`,`okv[1]`)}]:r[x]=okv;};}`
3578
3603
  return `result`
@@ -3596,7 +3621,7 @@ class Hash
3596
3621
  #
3597
3622
  # FIX: Doesn't handle loop control keywords
3598
3623
  def merge!(other)
3599
- `var c=this._contents,o=other._contents`
3624
+ `var c=this.__contents__,o=other.__contents__`
3600
3625
  `for(var x in o){var ckv=c[x],okv=o[x];if(x.slice(1,2)=='_'){typeof(_block)=='function'&&ckv!=null?ckv[1]=#{yield(`ckv[0]`,`ckv[1]`,`okv[1]`)}:c[x]=okv;};}`
3601
3626
  return self
3602
3627
  end
@@ -3614,8 +3639,8 @@ class Hash
3614
3639
  # h #=> {:a => 100, :b => 200, :c => 300}
3615
3640
  #
3616
3641
  def reject
3617
- `var c=this._contents,result=c$Hash.m$new()`
3618
- `for(var x in c){try{var kv=c[x];if(x.slice(1,2)=='_'&&!$T(#{yield(`kv[0]`,`kv[1]`)})){result._contents[x]=kv;};}catch(e){switch(e.__keyword__){case 'next':if(!$T(e._value)){result._contents[x]=kv;};break;case 'break':return e._value;break;default:throw(e);};};}`
3642
+ `var c=this.__contents__,result=c$Hash.m$new()`
3643
+ `for(var x in c){try{var kv=c[x];if(x.slice(1,2)=='_'&&!$T(#{yield(`kv[0]`,`kv[1]`)})){result.__contents__[x]=kv;};}catch(e){switch(e.__keyword__){case 'next':if(!$T(e.__return__)){result.__contents__[x]=kv;};break;case 'break':return e.__return__;break;default:throw(e);};};}`
3619
3644
  return `result`
3620
3645
  end
3621
3646
 
@@ -3633,8 +3658,8 @@ class Hash
3633
3658
  # h #=> {:a => 100}
3634
3659
  #
3635
3660
  def reject!
3636
- `var c=this._contents,u=true`
3637
- `for(var x in c){try{var kv=c[x];if(x.slice(1,2)=='_'&&$T(#{yield(`kv[0]`,`kv[1]`)})){u=false;delete(c[x]);};}catch(e){switch(e.__keyword__){case 'next':if($T(e._value)){u=false;delete(c[x]);};break;case 'break':return e._value;break;default:throw(e);};};}`
3661
+ `var c=this.__contents__,u=true`
3662
+ `for(var x in c){try{var kv=c[x];if(x.slice(1,2)=='_'&&$T(#{yield(`kv[0]`,`kv[1]`)})){u=false;delete(c[x]);};}catch(e){switch(e.__keyword__){case 'next':if($T(e.__return__)){u=false;delete(c[x]);};break;case 'break':return e.__return__;break;default:throw(e);};};}`
3638
3663
  return `u?nil:this`
3639
3664
  end
3640
3665
 
@@ -3649,8 +3674,8 @@ class Hash
3649
3674
  # h #=> {:c => 300, :d => 400}
3650
3675
  #
3651
3676
  def replace(other)
3652
- `this._contents={}`
3653
- `var c=this._contents,o=other._contents`
3677
+ `this.__contents__={}`
3678
+ `var c=this.__contents__,o=other.__contents__`
3654
3679
  `for(var x in o){if(x.slice(1,2)=='_'){c[x]=o[x];};}`
3655
3680
  return self
3656
3681
  end
@@ -3667,8 +3692,8 @@ class Hash
3667
3692
  # h.select {|k,v| v < 200} #=> [[:a, 100]]
3668
3693
  #
3669
3694
  def select
3670
- `var c=this._contents,result=[]`
3671
- `for(var x in c){try{var kv=c[x];if(x.slice(1,2)=='_'&&$T(#{yield(`kv[0]`,`kv[1]`)})){result.push(kv);};}catch(e){switch(e.__keyword__){case 'next':if($T(e._value)){result.push(kv);};break;case 'break':return e._value;break;default:throw(e);};};}`
3695
+ `var c=this.__contents__,result=[]`
3696
+ `for(var x in c){try{var kv=c[x];if(x.slice(1,2)=='_'&&$T(#{yield(`kv[0]`,`kv[1]`)})){result.push(kv);};}catch(e){switch(e.__keyword__){case 'next':if($T(e.__return__)){result.push(kv);};break;case 'break':return e.__return__;break;default:throw(e);};};}`
3672
3697
  return `result`
3673
3698
  end
3674
3699
 
@@ -3686,7 +3711,7 @@ class Hash
3686
3711
  # h #=> {}
3687
3712
  #
3688
3713
  def shift
3689
- `var c=this._contents,d=this._default,result=typeof(d)=='function'?d(nil):d`
3714
+ `var c=this.__contents__,d=this.__default__,result=typeof(d)=='function'?d(nil):d`
3690
3715
  `for(var x in c){if(x.slice(1,2)=='_'){result=[c[x][0],c[x][1]];delete(c[x]);break;};}`
3691
3716
  return `result`
3692
3717
  end
@@ -3704,7 +3729,7 @@ class Hash
3704
3729
  # h.size #=> 0
3705
3730
  #
3706
3731
  def size
3707
- `var c=this._contents,result=0`
3732
+ `var c=this.__contents__,result=0`
3708
3733
  `for(var x in c){if(x.slice(1,2)=='_'){result++;};}`
3709
3734
  return `result`
3710
3735
  end
@@ -3723,9 +3748,9 @@ class Hash
3723
3748
  #
3724
3749
  # FIX: Doesn't handle loop control keywords
3725
3750
  def sort(&block)
3726
- `var c=this._contents,result=[]`
3751
+ `var c=this.__contents__,result=[]`
3727
3752
  `for(var x in c){if(x.slice(1,2)=='_'){result.push(c[x]);};}`
3728
- return `c$Array.prototype._quickSort.call(result,0,result.length,block)`
3753
+ return `c$Array.prototype._quick_sort.call(result,0,result.length,block)`
3729
3754
  end
3730
3755
 
3731
3756
  # call-seq:
@@ -3743,7 +3768,7 @@ class Hash
3743
3768
  # h #=> {:a => 150, :b => 200, :c => 300}
3744
3769
  #
3745
3770
  def store(k,v)
3746
- `this._contents[k.m$hash()]=[k,v]`
3771
+ `this.__contents__[k.m$hash()]=[k,v]`
3747
3772
  return `v`
3748
3773
  end
3749
3774
 
@@ -3757,7 +3782,7 @@ class Hash
3757
3782
  # h.to_a #=> [[:a, 100], [:b, 200]]
3758
3783
  #
3759
3784
  def to_a
3760
- `var c=this._contents,result=[]`
3785
+ `var c=this.__contents__,result=[]`
3761
3786
  `for(var x in c){if(x.slice(1,2)=='_'){result.push(c[x]);};}`
3762
3787
  return `result`
3763
3788
  end
@@ -3779,7 +3804,7 @@ class Hash
3779
3804
  # <tt>Array#join</tt> with the default separator.
3780
3805
  #
3781
3806
  def to_s
3782
- `var c=this._contents,result=[]`
3807
+ `var c=this.__contents__,result=[]`
3783
3808
  `for(var x in c){if(x.slice(1,2)=='_'){result.push(c[x]);};}`
3784
3809
  return `c$Array.prototype.m$join.call(result)`
3785
3810
  end
@@ -3802,7 +3827,7 @@ class Hash
3802
3827
  #
3803
3828
  # FIX: Doesn't handle loop control keywords
3804
3829
  def update(other)
3805
- `var c=this._contents,o=other._contents`
3830
+ `var c=this.__contents__,o=other.__contents__`
3806
3831
  `for(var x in o){var ckv=c[x],okv=o[x];if(x.slice(1,2)=='_'){typeof(_block)=='function'&&ckv!=null?ckv[1]=#{yield(`ckv[0]`,`ckv[1]`,`okv[1]`)}:c[x]=okv;};}`
3807
3832
  return self
3808
3833
  end
@@ -3820,8 +3845,8 @@ class Hash
3820
3845
  # h.value?(999) #=> false
3821
3846
  #
3822
3847
  def value?(value)
3823
- `var c=this._contents`
3824
- `for(var x in this._contents){if(x.slice(1,2)=='_'&&c[x][1].m$_eql2(value)){return true;};}`
3848
+ `var c=this.__contents__`
3849
+ `for(var x in this.__contents__){if(x.slice(1,2)=='_'&&c[x][1].m$_eql2(value)){return true;};}`
3825
3850
  return false
3826
3851
  end
3827
3852
 
@@ -3836,7 +3861,7 @@ class Hash
3836
3861
  # h.values #=> [100, 200]
3837
3862
  #
3838
3863
  def values
3839
- `var c=this._contents,result=[]`
3864
+ `var c=this.__contents__,result=[]`
3840
3865
  `for(var x in c){if(x.slice(1,2)=='_'){result.push(c[x][1]);};}`
3841
3866
  return `result`
3842
3867
  end
@@ -3852,7 +3877,7 @@ class Hash
3852
3877
  # h.values_at(:a,:c) #=> [100,300]
3853
3878
  #
3854
3879
  def values_at(*args)
3855
- `for(var i=0,l=args.length,c=this._contents,d=this._default,result=[];i<l;++i){var h=args[i].m$hash(),kv=c[h];result.push(kv?kv[1]:(typeof(d)=='function'?d(this,args[i]):d))}`
3880
+ `for(var i=0,l=args.length,c=this.__contents__,d=this.__default__,result=[];i<l;++i){var h=args[i].m$hash(),kv=c[h];result.push(kv?kv[1]:(typeof(d)=='function'?d(this,args[i]):d))}`
3856
3881
  return `result`
3857
3882
  end
3858
3883
  end
@@ -3863,7 +3888,7 @@ end
3863
3888
  #
3864
3889
  class MatchData
3865
3890
  def initialize # :nodoc:
3866
- `this._captures=[]`
3891
+ `this.__captures__=[]`
3867
3892
  end
3868
3893
 
3869
3894
  # call-seq:
@@ -3885,7 +3910,7 @@ class MatchData
3885
3910
  # m[-3, 2] #=> ["X", "113"]
3886
3911
  #
3887
3912
  def [](*args)
3888
- `c$Array.prototype.m$_brac.apply(this._captures,args)`
3913
+ `c$Array.prototype.m$_brac.apply(this.__captures__,args)`
3889
3914
  end
3890
3915
 
3891
3916
  # FIX: Incomplete
@@ -3905,7 +3930,7 @@ class MatchData
3905
3930
  # m[3] #=> "8"
3906
3931
  #
3907
3932
  def captures
3908
- `this._captures.slice(1)`
3933
+ `this.__captures__.slice(1)`
3909
3934
  end
3910
3935
 
3911
3936
  # FIX: Incomplete
@@ -3923,11 +3948,11 @@ class MatchData
3923
3948
  # m.length #=> 5
3924
3949
  #
3925
3950
  def length
3926
- `this._captures.length`
3951
+ `this.__captures__.length`
3927
3952
  end
3928
3953
 
3929
3954
  def inspect # :nodoc:
3930
- `c$Object.prototype.m$toS.apply(this)`
3955
+ `c$Object.prototype.m$to_s.apply(this)`
3931
3956
  end
3932
3957
 
3933
3958
  # FIX: Incomplete
@@ -3944,7 +3969,7 @@ class MatchData
3944
3969
  # m.post_match #=> ": The Movie"
3945
3970
  #
3946
3971
  def post_match
3947
- `this._post`
3972
+ `this.__post__`
3948
3973
  end
3949
3974
 
3950
3975
  # call-seq:
@@ -3957,7 +3982,7 @@ class MatchData
3957
3982
  # m.pre_match #=> "T"
3958
3983
  #
3959
3984
  def pre_match
3960
- `this._pre`
3985
+ `this.__pre__`
3961
3986
  end
3962
3987
 
3963
3988
  # FIX: Incomplete
@@ -3975,7 +4000,7 @@ class MatchData
3975
4000
  # m.size #=> 5
3976
4001
  #
3977
4002
  def size
3978
- `this._captures.length`
4003
+ `this.__captures__.length`
3979
4004
  end
3980
4005
 
3981
4006
  # call-seq:
@@ -3991,7 +4016,7 @@ class MatchData
3991
4016
  # m2.string #=> "THX1138."
3992
4017
  #
3993
4018
  def string
3994
- `$q(this._string)`
4019
+ `$q(this.__string__)`
3995
4020
  end
3996
4021
 
3997
4022
  # call-seq:
@@ -4004,7 +4029,7 @@ class MatchData
4004
4029
  # m.to_a #=> ["HX1138", "H", "X", "113", "8"]
4005
4030
  #
4006
4031
  def to_a
4007
- `this._captures`
4032
+ `this.__captures__`
4008
4033
  end
4009
4034
 
4010
4035
  # call-seq:
@@ -4017,7 +4042,7 @@ class MatchData
4017
4042
  # m.to_s #=> "HX1138"
4018
4043
  #
4019
4044
  def to_s
4020
- `this._captures[0]`
4045
+ `this.__captures__[0]`
4021
4046
  end
4022
4047
 
4023
4048
  # FIX: Incomplete
@@ -4104,6 +4129,10 @@ class NilClass
4104
4129
  0
4105
4130
  end
4106
4131
 
4132
+ def to_proc # :nodoc:
4133
+ nil
4134
+ end
4135
+
4107
4136
  # call-seq:
4108
4137
  # nil.to_s -> ''
4109
4138
  #
@@ -4336,7 +4365,7 @@ class Numeric
4336
4365
  # ?a.chr #=> "a"
4337
4366
  #
4338
4367
  def chr
4339
- `String.fromCharCode(parseInt(this))`
4368
+ `$q(String.fromCharCode(parseInt(this)))`
4340
4369
  end
4341
4370
 
4342
4371
  # call-seq:
@@ -4382,7 +4411,7 @@ class Numeric
4382
4411
  # 1..
4383
4412
  #
4384
4413
  def downto(limit)
4385
- `for(var i=this.valueOf();i>=limit;--i){try{#{yield `i`};}catch(e){switch(e.__keyword__){case 'next':break;case 'break':return e._value;break;case 'redo':++i;break;default:throw(e);};};}`
4414
+ `for(var i=this.valueOf();i>=limit;--i){try{#{yield `i`};}catch(e){switch(e.__keyword__){case 'next':break;case 'break':return e.__return__;break;case 'redo':++i;break;default:throw(e);};};}`
4386
4415
  return self
4387
4416
  end
4388
4417
 
@@ -4542,7 +4571,7 @@ class Numeric
4542
4571
  #
4543
4572
  def step(limit, step)
4544
4573
  `var i=this.valueOf()`
4545
- `if(step>0){if(i<limit){for(;limit>=i;i+=step){try{#{yield `i`};}catch(e){switch(e.__keyword__){case 'next':break;case 'break':return e._value;break;case 'redo':i-=step;break;default:throw(e);};};};};}else{if(i>limit){for(;limit<=i;i+=step){try{#{yield `i`};}catch(e){switch(e.__keyword__){case 'next':break;case 'break':return e._value;break;case 'redo':i-=step;break;default:throw(e);};}};;};}`
4574
+ `if(step>0){if(i<limit){for(;limit>=i;i+=step){try{#{yield `i`};}catch(e){switch(e.__keyword__){case 'next':break;case 'break':return e.__return__;break;case 'redo':i-=step;break;default:throw(e);};};};};}else{if(i>limit){for(;limit<=i;i+=step){try{#{yield `i`};}catch(e){switch(e.__keyword__){case 'next':break;case 'break':return e.__return__;break;case 'redo':i-=step;break;default:throw(e);};}};;};}`
4546
4575
  return self
4547
4576
  end
4548
4577
 
@@ -4579,7 +4608,7 @@ class Numeric
4579
4608
  # 4
4580
4609
  #
4581
4610
  def times
4582
- `for(var i=0,l=this.valueOf();i<l;++i){try{#{yield `i`};}catch(e){switch(e.__keyword__){case 'next':break;case 'break':return e._value;break;case 'redo':--i;break;default:throw(e);};}}`
4611
+ `for(var i=0,l=this.valueOf();i<l;++i){try{#{yield `i`};}catch(e){switch(e.__keyword__){case 'next':break;case 'break':return e.__return__;break;case 'redo':--i;break;default:throw(e);};}}`
4583
4612
  return self
4584
4613
  end
4585
4614
 
@@ -4661,7 +4690,7 @@ class Numeric
4661
4690
  # 100..
4662
4691
  #
4663
4692
  def upto(limit)
4664
- `for(var i=this.valueOf();i<=limit;++i){try{#{yield `i`};}catch(e){switch(e.__keyword__){case 'next':break;case 'break':return e._value;break;case 'redo':--i;break;default:throw(e);};};}`
4693
+ `for(var i=this.valueOf();i<=limit;++i){try{#{yield `i`};}catch(e){switch(e.__keyword__){case 'next':break;case 'break':return e.__return__;break;case 'redo':--i;break;default:throw(e);};};}`
4665
4694
  return self
4666
4695
  end
4667
4696
 
@@ -4697,11 +4726,19 @@ class Proc
4697
4726
  # Creates a new +Proc+ object, bound to the current context.
4698
4727
  #
4699
4728
  def initialize(func)
4700
- `this._block=func`
4729
+ `this.__block__=func`
4730
+ `this.__block__.__id__=func.__id__||Red.id++`
4731
+ `this.__id__=this.__block__.__id__`
4701
4732
  end
4702
4733
 
4703
- # FIX: Incomplete
4704
- def ==
4734
+ # call-seq:
4735
+ # prc == other => true or false
4736
+ #
4737
+ # Returns +true+ if _prc_ and _other_ are the same object, +false+
4738
+ # otherwise.
4739
+ #
4740
+ def ==(other)
4741
+ `this.__id__==other.__id__`
4705
4742
  end
4706
4743
 
4707
4744
  # call-seq:
@@ -4718,7 +4755,7 @@ class Proc
4718
4755
  # proc[4] #=> 400
4719
4756
  #
4720
4757
  def []()
4721
- `this._block.apply(this,arguments)`
4758
+ `this.__block__.apply(this,arguments)`
4722
4759
  end
4723
4760
 
4724
4761
  # FIX: Incomplete
@@ -4740,7 +4777,7 @@ class Proc
4740
4777
  # proc.call(4) #=> 400
4741
4778
  #
4742
4779
  def call
4743
- `this._block.apply(this,arguments)`
4780
+ `this.__block__.apply(this,arguments)`
4744
4781
  end
4745
4782
 
4746
4783
  # call-seq:
@@ -4804,9 +4841,9 @@ class Range
4804
4841
  # it will be excluded.
4805
4842
  #
4806
4843
  def initialize(start,finish,exclusive=false)
4807
- `this._start=start`
4808
- `this._end=finish`
4809
- `this._exclusive=exclusive`
4844
+ `this.__start__=start`
4845
+ `this.__end__=finish`
4846
+ `this.__exclusive__=exclusive`
4810
4847
  end
4811
4848
 
4812
4849
  # call-seq:
@@ -4822,7 +4859,7 @@ class Range
4822
4859
  #
4823
4860
  def ==(object)
4824
4861
  `if(object.constructor!==c$Range){return false;}`
4825
- `this._start.m$_eql2(object._start)&&this._end.m$_eql2(object._end)&&this._exclusive==object._exclusive`
4862
+ `this.__start__.m$_eql2(object.__start__)&&this.__end__.m$_eql2(object.__end__)&&this.__exclusive__==object.__exclusive__`
4826
4863
  end
4827
4864
 
4828
4865
  # call-seq:
@@ -4845,8 +4882,8 @@ class Range
4845
4882
  # high
4846
4883
  #
4847
4884
  def ===(obj)
4848
- `var s=#{obj <=> `this._start`},e=#{obj <=> `this._end`}`
4849
- `s==0||s==1?(this._exclusive?e==-1:e==-1||e==0):false`
4885
+ `var s=#{obj <=> `this.__start__`},e=#{obj <=> `this.__end__`}`
4886
+ `s==0||s==1?(this.__exclusive__?e==-1:e==-1||e==0):false`
4850
4887
  end
4851
4888
 
4852
4889
  # call-seq:
@@ -4858,13 +4895,13 @@ class Range
4858
4895
  # (1..10).begin #=> 1
4859
4896
  #
4860
4897
  def begin
4861
- `this._start`
4898
+ `this.__start__`
4862
4899
  end
4863
4900
 
4864
4901
  # FIX: Incomplete
4865
4902
  def each
4866
- `var start=this._start,end=this._end`
4867
- `if(typeof(start)=='number'&&typeof(end)=='number'){if(!this._exclusive){end++;};for(var i=start;i<end;i++){#{yield `i`};};}`
4903
+ `var start=this.__start__,end=this.__end__`
4904
+ `if(typeof(start)=='number'&&typeof(end)=='number'){if(!this.__exclusive__){end++;};for(var i=start;i<end;i++){try{#{yield `i`};}catch(e){switch(e.__keyword__){case 'next':break;case 'break':return e.__return__;break;case 'redo':--i;break;default:throw(e);};};};}`
4868
4905
  return self
4869
4906
  end
4870
4907
 
@@ -4878,7 +4915,7 @@ class Range
4878
4915
  # (1...10).end #=> 10
4879
4916
  #
4880
4917
  def end()
4881
- `this._end`
4918
+ `this.__end__`
4882
4919
  end
4883
4920
 
4884
4921
  # call-seq:
@@ -4887,7 +4924,7 @@ class Range
4887
4924
  # Returns +true+ if _rng_ excludes its end value.
4888
4925
  #
4889
4926
  def exclude_end?
4890
- `this._exclusive`
4927
+ `this.__exclusive__`
4891
4928
  end
4892
4929
 
4893
4930
  # call-seq:
@@ -4903,7 +4940,7 @@ class Range
4903
4940
  #
4904
4941
  def eql?(object)
4905
4942
  `if(object.constructor!==c$Range){return false;}`
4906
- `this._start.m$eqlBool(object._start)&&this._end.m$eqlBool(object._end)&&this._exclusive==object._exclusive`
4943
+ `this.__start__.m$eql_bool(object.__start__)&&this.__end__.m$eql_bool(object.__end__)&&this.__exclusive__==object.__exclusive__`
4907
4944
  end
4908
4945
 
4909
4946
  # call-seq:
@@ -4915,7 +4952,7 @@ class Range
4915
4952
  # (1..10).first #=> 1
4916
4953
  #
4917
4954
  def first
4918
- `this._start`
4955
+ `this.__start__`
4919
4956
  end
4920
4957
 
4921
4958
  # FIX: Incomplete
@@ -4933,8 +4970,8 @@ class Range
4933
4970
  # (1...10).include?(10) #=> false
4934
4971
  #
4935
4972
  def include?(obj)
4936
- `var s=#{obj <=> `this._start`},e=#{obj <=> `this._end`}`
4937
- `s==0||s==1?(this._exclusive?e==-1:e==-1||e==0):false`
4973
+ `var s=#{obj <=> `this.__start__`},e=#{obj <=> `this.__end__`}`
4974
+ `s==0||s==1?(this.__exclusive__?e==-1:e==-1||e==0):false`
4938
4975
  end
4939
4976
 
4940
4977
  # call-seq:
@@ -4944,7 +4981,7 @@ class Range
4944
4981
  # and end objects).
4945
4982
  #
4946
4983
  def inspect
4947
- `$q(''+this._start.m$inspect()+(this._exclusive?'...':'..')+this._end.m$inspect())`
4984
+ `$q(''+this.__start__.m$inspect()+(this.__exclusive__?'...':'..')+this.__end__.m$inspect())`
4948
4985
  end
4949
4986
 
4950
4987
  # call-seq:
@@ -4957,7 +4994,7 @@ class Range
4957
4994
  # (1...10).last #=> 10
4958
4995
  #
4959
4996
  def last
4960
- `this._end`
4997
+ `this.__end__`
4961
4998
  end
4962
4999
 
4963
5000
  # call-seq:
@@ -4971,8 +5008,8 @@ class Range
4971
5008
  # (1...10).member?(10) #=> false
4972
5009
  #
4973
5010
  def member?(obj)
4974
- `var s=#{obj <=> `this._start`},e=#{obj <=> `this._end`}`
4975
- `s==0||s==1?(this._exclusive?e==-1:e==-1||e==0):false`
5011
+ `var s=#{obj <=> `this.__start__`},e=#{obj <=> `this.__end__`}`
5012
+ `s==0||s==1?(this.__exclusive__?e==-1:e==-1||e==0):false`
4976
5013
  end
4977
5014
 
4978
5015
  # FIX: Incomplete
@@ -4985,7 +5022,7 @@ class Range
4985
5022
  # Converts _rng_ to a printable form.
4986
5023
  #
4987
5024
  def to_s
4988
- `$q(''+this._start+(this._exclusive?'...':'..')+this._end)`
5025
+ `$q(''+this.__start__+(this.__exclusive__?'...':'..')+this.__end__)`
4989
5026
  end
4990
5027
  end
4991
5028
 
@@ -5038,7 +5075,7 @@ class Regexp
5038
5075
  # Regexp.escape('\\*?{}.') #=> \\\\\*\?\{\}\.
5039
5076
  #
5040
5077
  def self.escape(str)
5041
- `$q(str._value.replace(/([-.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1'))`
5078
+ `$q(str.__value__.replace(/([-.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1'))`
5042
5079
  end
5043
5080
 
5044
5081
  # FIX: Incomplete
@@ -5056,7 +5093,7 @@ class Regexp
5056
5093
  # Regexp.quote('\\*?{}.') #=> \\\\\*\?\{\}\.
5057
5094
  #
5058
5095
  def self.quote(str)
5059
- `str._value.replace(/([-.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1')`
5096
+ `str.__value__.replace(/([-.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1')`
5060
5097
  end
5061
5098
 
5062
5099
  # FIX: Incomplete
@@ -5079,9 +5116,9 @@ class Regexp
5079
5116
  # r3 = Regexp.new(r2) #=> /cat/i
5080
5117
  #
5081
5118
  def initialize(regexp, options)
5082
- `switch(options){case 0:this._options='';break;case 1:this._options='i';break;case 2:this._options='x';break;case 3:this._options='ix';break;case 4:this._options='s';break;case 5:this._options='si';break;case 6:this._options='sx';break;case 7:this._options='six';break;default:this._options=options?'i':'';}`
5083
- `this._source=regexp._value||regexp`
5084
- `this._value=new(RegExp)(this._source,'m'+(/i/.test(this._options)?'i':''))`
5119
+ `switch(options){case 0:this.__options__='';break;case 1:this.__options__='i';break;case 2:this.__options__='x';break;case 3:this.__options__='ix';break;case 4:this.__options__='s';break;case 5:this.__options__='si';break;case 6:this.__options__='sx';break;case 7:this.__options__='six';break;default:this.__options__=options?'i':'';}`
5120
+ `this.__source__=regexp.__value__||regexp`
5121
+ `this.__value__=new(RegExp)(this.__source__,'m'+(/i/.test(this.__options__)?'i':''))`
5085
5122
  end
5086
5123
 
5087
5124
  # call-seq:
@@ -5095,7 +5132,7 @@ class Regexp
5095
5132
  # /abc/ == /abc/i #=> false
5096
5133
  #
5097
5134
  def ==(rxp)
5098
- `this._source===rxp._source&&this._options===rxp._options`
5135
+ `this.__source__===rxp.__source__&&this.__options__===rxp.__options__`
5099
5136
  end
5100
5137
 
5101
5138
  # call-seq:
@@ -5116,9 +5153,9 @@ class Regexp
5116
5153
  # FIX: Incomplete
5117
5154
  def ===(string)
5118
5155
  `var c=$u,result=c$MatchData.m$new()`
5119
- `if(!$T(c=string._value.match(this._value))){return nil;}`
5120
- `for(var i=0,l=c.length;i<l;++i){result._captures[i]=$q(c[i])}`
5121
- `result._string=string._value`
5156
+ `if(!$T(c=string.__value__.match(this.__value__))){return nil;}`
5157
+ `for(var i=0,l=c.length;i<l;++i){result.__captures__[i]=$q(c[i])}`
5158
+ `result.__string__=string.__value__`
5122
5159
  return `result`
5123
5160
  end
5124
5161
 
@@ -5134,9 +5171,9 @@ class Regexp
5134
5171
  # FIX: Incomplete
5135
5172
  def =~(string)
5136
5173
  `var c=$u,result=c$MatchData.m$new()`
5137
- `if(!$T(c=string._value.match(this._value))){return nil;}`
5138
- `for(var i=0,l=c.length;i<l;++i){result._captures[i]=$q(c[i])}`
5139
- `result._string=string._value`
5174
+ `if(!$T(c=string.__value__.match(this.__value__))){return nil;}`
5175
+ `for(var i=0,l=c.length;i<l;++i){result.__captures__[i]=$q(c[i])}`
5176
+ `result.__string__=string.__value__`
5140
5177
  return `result`
5141
5178
  end
5142
5179
 
@@ -5150,7 +5187,7 @@ class Regexp
5150
5187
  # Returns the status of the +IGNORECASE+ flag.
5151
5188
  #
5152
5189
  def casefold?
5153
- `/i/.test(this._options)`
5190
+ `/i/.test(this.__options__)`
5154
5191
  end
5155
5192
 
5156
5193
  # call-seq:
@@ -5164,7 +5201,7 @@ class Regexp
5164
5201
  # /abc/.eql? /abc/i #=> false
5165
5202
  #
5166
5203
  def eql?(rxp)
5167
- `this._source===rxp._source&&this._options===rxp._options`
5204
+ `this.__source__===rxp.__source__&&this.__options__===rxp.__options__`
5168
5205
  end
5169
5206
 
5170
5207
  def hash # :nodoc:
@@ -5192,11 +5229,11 @@ class Regexp
5192
5229
  #
5193
5230
  def match(string)
5194
5231
  `var c=$u,result=c$MatchData.m$new()`
5195
- `if(!$T(c=string._value.match(this._value))){return nil;}`
5196
- `for(var i=0,l=c.length;i<l;++i){result._captures[i]=$q(c[i])}`
5197
- `result._string=string._value`
5198
- `result._pre=RegExp.leftContext`
5199
- `result._post=RegExp.rightContext`
5232
+ `if(!$T(c=string.__value__.match(this.__value__))){return nil;}`
5233
+ `for(var i=0,l=c.length;i<l;++i){result.__captures__[i]=$q(c[i])}`
5234
+ `result.__string__=string.__value__`
5235
+ `result.__pre__=RegExp.leftContext`
5236
+ `result.__post__=RegExp.rightContext`
5200
5237
  return `result`
5201
5238
  end
5202
5239
 
@@ -5220,9 +5257,9 @@ class Regexp
5220
5257
  #
5221
5258
  def options
5222
5259
  `var result=0`
5223
- `if(/i/.test(this._options)){result+=1}`
5224
- `if(/x/.test(this._options)){result+=2}`
5225
- `if(/s/.test(this._options)){result+=4}`
5260
+ `if(/i/.test(this.__options__)){result+=1}`
5261
+ `if(/x/.test(this.__options__)){result+=2}`
5262
+ `if(/s/.test(this.__options__)){result+=4}`
5226
5263
  return `result`
5227
5264
  end
5228
5265
 
@@ -5234,7 +5271,7 @@ class Regexp
5234
5271
  # /ab+c/i.source #=> "ab+c"
5235
5272
  #
5236
5273
  def source
5237
- `$q(this._source)`
5274
+ `$q(this.__source__)`
5238
5275
  end
5239
5276
 
5240
5277
  # call-seq:
@@ -5247,8 +5284,8 @@ class Regexp
5247
5284
  # /ab+c/i.to_s #=> "(?i-mx:ab+c)"
5248
5285
  #
5249
5286
  def to_s
5250
- `var o=this._options.replace('s','m'),c=o.match(/(m)?(i)?(x)?/)`
5251
- `$q('(?'+o+(c[0]=='mix'?'':'-')+(c[1]?'':'m')+(c[2]?'':'i')+(c[3]?'':'x')+':'+this._source+')')`
5287
+ `var o=this.__options__.replace('s','m'),c=o.match(/(m)?(i)?(x)?/)`
5288
+ `$q('(?'+o+(c[0]=='mix'?'':'-')+(c[1]?'':'m')+(c[2]?'':'i')+(c[3]?'':'x')+':'+this.__source__+')')`
5252
5289
  end
5253
5290
  end
5254
5291
 
@@ -5265,7 +5302,7 @@ class String
5265
5302
  # Returns a new string object containing a copy of _str_.
5266
5303
  #
5267
5304
  def initialize(string = `''`)
5268
- `this._value=string._value||string`
5305
+ `this.__value__=string.__value__||string`
5269
5306
  end
5270
5307
 
5271
5308
  # call-seq:
@@ -5293,7 +5330,7 @@ class String
5293
5330
  # 'abc ' * 3 #=> "abc abc abc "
5294
5331
  #
5295
5332
  def *(n)
5296
- `for(var i=0,str=this._value,result='';i<n;++i){result+=str;}`
5333
+ `for(var i=0,str=this.__value__,result='';i<n;++i){result+=str;}`
5297
5334
  return `$q(result)`
5298
5335
  end
5299
5336
 
@@ -5306,7 +5343,7 @@ class String
5306
5343
  # 'abc' + 'def' #=> 'abcdef'
5307
5344
  #
5308
5345
  def +(str)
5309
- `$q(this._value + str._value)`
5346
+ `$q(this.__value__ + str.__value__)`
5310
5347
  end
5311
5348
 
5312
5349
  # call-seq:
@@ -5325,7 +5362,7 @@ class String
5325
5362
  # s << 103 << 104 #=> "abcdefgh"
5326
5363
  #
5327
5364
  def <<(obj)
5328
- `this._value+=(typeof(obj)=='number'?String.fromCharCode(obj):obj._value)`
5365
+ `this.__value__+=(typeof(obj)=='number'?String.fromCharCode(obj):obj.__value__)`
5329
5366
  return self
5330
5367
  end
5331
5368
 
@@ -5350,7 +5387,7 @@ class String
5350
5387
  #
5351
5388
  def <=>(str)
5352
5389
  `if(str.m$class()!=c$String){return nil;}`
5353
- `var tv=this._value,sv=str._value`
5390
+ `var tv=this.__value__,sv=str.__value__`
5354
5391
  `if(tv>sv){return 1;}`
5355
5392
  `if(tv==sv){return 0;}`
5356
5393
  `if(tv<sv){return -1;}`
@@ -5414,7 +5451,7 @@ class String
5414
5451
  # '123ABC'.capitalize #=> "123abc"
5415
5452
  #
5416
5453
  def capitalize
5417
- `var v=this._value`
5454
+ `var v=this.__value__`
5418
5455
  `$q(v.slice(0,1).toUpperCase()+v.slice(1,v.length).toLowerCase())`
5419
5456
  end
5420
5457
 
@@ -5431,9 +5468,9 @@ class String
5431
5468
  # s #=> "Abcdef"
5432
5469
  #
5433
5470
  def capitalize!
5434
- `var v=this._value`
5435
- `this._value=v.slice(0,1).toUpperCase()+v.slice(1,v.length).toLowerCase()`
5436
- return `v==this._value?nil:this`
5471
+ `var v=this.__value__`
5472
+ `this.__value__=v.slice(0,1).toUpperCase()+v.slice(1,v.length).toLowerCase()`
5473
+ return `v==this.__value__?nil:this`
5437
5474
  end
5438
5475
 
5439
5476
  # call-seq:
@@ -5448,7 +5485,7 @@ class String
5448
5485
  #
5449
5486
  def casecmp(str)
5450
5487
  `if(str.m$class()!=c$String){return nil;}`
5451
- `var tv=this._value.toLowerCase(),sv=str._value.toLowerCase()`
5488
+ `var tv=this.__value__.toLowerCase(),sv=str.__value__.toLowerCase()`
5452
5489
  `if(tv>sv){return 1;}`
5453
5490
  `if(tv==sv){return 0;}`
5454
5491
  `if(tv<sv){return -1;}`
@@ -5491,7 +5528,7 @@ class String
5491
5528
  # a.concat(103).concat(104) #=> "abcdefgh"
5492
5529
  #
5493
5530
  def concat(obj)
5494
- `this._value+=(typeof(obj)=='number'?String.fromCharCode(obj):obj._value)`
5531
+ `this.__value__+=(typeof(obj)=='number'?String.fromCharCode(obj):obj.__value__)`
5495
5532
  return self
5496
5533
  end
5497
5534
 
@@ -5520,7 +5557,7 @@ class String
5520
5557
  # 'aBCDEf'.downcase #=> "abcdef"
5521
5558
  #
5522
5559
  def downcase
5523
- `$q(this._value.toLowerCase())`
5560
+ `$q(this.__value__.toLowerCase())`
5524
5561
  end
5525
5562
 
5526
5563
  # call-seq:
@@ -5536,9 +5573,9 @@ class String
5536
5573
  # s #=> "abcdef"
5537
5574
  #
5538
5575
  def downcase!
5539
- `var v=this._value`
5540
- `this._value=v.toLowerCase()`
5541
- return `v==this._value?nil:this`
5576
+ `var v=this.__value__`
5577
+ `this.__value__=v.toLowerCase()`
5578
+ return `v==this.__value__?nil:this`
5542
5579
  end
5543
5580
 
5544
5581
  # FIX: Incomplete
@@ -5562,7 +5599,7 @@ class String
5562
5599
  # ''.empty? #=> true
5563
5600
  #
5564
5601
  def empty?
5565
- `this._value==''`
5602
+ `this.__value__==''`
5566
5603
  end
5567
5604
 
5568
5605
  # call-seq:
@@ -5572,7 +5609,7 @@ class String
5572
5609
  #
5573
5610
  def eql?(str)
5574
5611
  `if(str.m$class()!=c$String){return false;}`
5575
- `this._value==str._value`
5612
+ `this.__value__==str.__value__`
5576
5613
  end
5577
5614
 
5578
5615
  # FIX: Incomplete
@@ -5584,7 +5621,7 @@ class String
5584
5621
  end
5585
5622
 
5586
5623
  def hash # :nodoc:
5587
- `'q_'+this._value`
5624
+ `'q_'+this.__value__`
5588
5625
  end
5589
5626
 
5590
5627
  # call-seq:
@@ -5600,7 +5637,7 @@ class String
5600
5637
  # 'abcdef'.hex #=> 0
5601
5638
  #
5602
5639
  def hex
5603
- `var result=parseInt(this._value,16)`
5640
+ `var result=parseInt(this.__value__,16)`
5604
5641
  return `result.toString()=='NaN'?0:result`
5605
5642
  end
5606
5643
 
@@ -5615,7 +5652,7 @@ class String
5615
5652
  # 'abcdef'.include?(?c) #=> true
5616
5653
  #
5617
5654
  def include?(obj)
5618
- `new(RegExp)(typeof(obj)=='number'?String.fromCharCode(obj):obj._value.replace(/([-.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1')).test(this._value)`
5655
+ `new(RegExp)(typeof(obj)=='number'?String.fromCharCode(obj):obj.__value__.replace(/([-.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1')).test(this.__value__)`
5619
5656
  end
5620
5657
 
5621
5658
  # FIX: Incomplete
@@ -5628,7 +5665,7 @@ class String
5628
5665
 
5629
5666
  # FIX: Incomplete
5630
5667
  def inspect
5631
- `$q('"'+this._value.replace(/\\\\/g,'\\\\\\\\').replace(/"/g,'\\\\"')+'"')`
5668
+ `$q('"'+this.__value__.replace(/\\\\/g,'\\\\\\\\').replace(/"/g,'\\\\"')+'"')`
5632
5669
  end
5633
5670
 
5634
5671
  # call-seq:
@@ -5641,7 +5678,7 @@ class String
5641
5678
  # 'abcdef'.intern #=> :abcdef
5642
5679
  #
5643
5680
  def intern
5644
- `$s(this._value)`
5681
+ `$s(this.__value__)`
5645
5682
  end
5646
5683
 
5647
5684
  # call-seq:
@@ -5654,7 +5691,7 @@ class String
5654
5691
  # 'ab\ncd'.length #=> 5
5655
5692
  #
5656
5693
  def length
5657
- `this._value.length`
5694
+ `this.__value__.length`
5658
5695
  end
5659
5696
 
5660
5697
  # FIX: Incomplete
@@ -5670,7 +5707,7 @@ class String
5670
5707
  # '\tabcdef'.lstrip #=> "abcdef"
5671
5708
  #
5672
5709
  def lstrip
5673
- `$q(this._value.replace(/^\\s*/,''))`
5710
+ `$q(this.__value__.replace(/^\\s*/,''))`
5674
5711
  end
5675
5712
 
5676
5713
  # call-seq:
@@ -5686,9 +5723,9 @@ class String
5686
5723
  # s #=> "abcdef"
5687
5724
  #
5688
5725
  def lstrip!
5689
- `var v=this._value`
5690
- `this._value=v.replace(/^\\s*/,'')`
5691
- return `this._value==v?nil:this`
5726
+ `var v=this.__value__`
5727
+ `this.__value__=v.replace(/^\\s*/,'')`
5728
+ return `this.__value__==v?nil:this`
5692
5729
  end
5693
5730
 
5694
5731
  # call-seq:
@@ -5703,7 +5740,7 @@ class String
5703
5740
  # 'abcdee'.match('xx') #=> nil
5704
5741
  #
5705
5742
  def match(pattern)
5706
- `$r(pattern._source||pattern._value,pattern._options).m$match(this)`
5743
+ `$r(pattern.__source__||pattern.__value__,pattern.__options__).m$match(this)`
5707
5744
  end
5708
5745
 
5709
5746
  # call-seq:
@@ -5727,7 +5764,7 @@ class String
5727
5764
  # 'ZZZ9999'.next #=> 'AAAA0000'
5728
5765
  #
5729
5766
  def next
5730
- `var v=this._value`
5767
+ `var v=this.__value__`
5731
5768
  `if(!/[a-zA-Z0-9]/.test(v)){return $q(v);}`
5732
5769
  `if(/^\\d+$/.test(v)){return $q(''+(+v+1))}`
5733
5770
  `for(var i=v.length-1,carry=i>=0,result='';i>=0;--i){var c=v[i],lc=/[a-z]/.test(c),uc=/[A-Z]/.test(c),n=/[0-9]/.test(c);if($T(carry)&&(lc||uc||n)){if(lc||uc){if(c=='z'||c=='Z'){result=(lc?'a':'A')+result;carry=i;}else{result=String.fromCharCode(c.charCodeAt()+1)+result;carry=false;};}else{if(c=='9'){result='0'+result;carry=i}else{result=''+(+c+1)+result;carry=false;};};}else{result=c+result;};}`
@@ -5743,12 +5780,12 @@ class String
5743
5780
  # <tt>String#next</tt> for details.
5744
5781
  #
5745
5782
  def next!
5746
- `var v=this._value`
5783
+ `var v=this.__value__`
5747
5784
  `if(!/[a-zA-Z0-9]/.test(v)){return $q(v);}`
5748
5785
  `if(/^\\d+$/.test(v)){return $q(''+(+v+1))}`
5749
5786
  `for(var i=v.length-1,carry=i>=0,result='';i>=0;--i){var c=v[i],lc=/[a-z]/.test(c),uc=/[A-Z]/.test(c),n=/[0-9]/.test(c);if($T(carry)&&(lc||uc||n)){if(lc||uc){if(c=='z'||c=='Z'){result=(lc?'a':'A')+result;carry=i;}else{result=String.fromCharCode(c.charCodeAt()+1)+result;carry=false;};}else{if(c=='9'){result='0'+result;carry=i}else{result=''+(+c+1)+result;carry=false;};};}else{result=c+result;};}`
5750
5787
  `if($T(carry)){var c=v[carry],insert=/[a-z]/.test(c)?'a':(/[A-Z]/.test(c)?'A':'1');result=result.slice(0,carry)+insert+result.slice(carry,result.length);}`
5751
- `this._value=result`
5788
+ `this.__value__=result`
5752
5789
  return self
5753
5790
  end
5754
5791
 
@@ -5765,7 +5802,7 @@ class String
5765
5802
  # 'abcdef'.hex #=> 0
5766
5803
  #
5767
5804
  def oct
5768
- `var result=parseInt(this._value,8)`
5805
+ `var result=parseInt(this.__value__,8)`
5769
5806
  return `result.toString()=='NaN'?0:result`
5770
5807
  end
5771
5808
 
@@ -5780,7 +5817,7 @@ class String
5780
5817
  # s #=> "def"
5781
5818
  #
5782
5819
  def replace(str)
5783
- `this._value=str._value`
5820
+ `this.__value__=str.__value__`
5784
5821
  end
5785
5822
 
5786
5823
  # call-seq:
@@ -5791,7 +5828,7 @@ class String
5791
5828
  # 'abcdef'.reverse #=> 'fedcba'
5792
5829
  #
5793
5830
  def reverse
5794
- `$q(this._value.split('').reverse().join(''))`
5831
+ `$q(this.__value__.split('').reverse().join(''))`
5795
5832
  end
5796
5833
 
5797
5834
  # call-seq:
@@ -5805,7 +5842,7 @@ class String
5805
5842
  # s #=> 'fedcba'
5806
5843
  #
5807
5844
  def reverse!
5808
- `this._value=this._value.split('').reverse().join('')`
5845
+ `this.__value__=this.__value__.split('').reverse().join('')`
5809
5846
  return self
5810
5847
  end
5811
5848
 
@@ -5826,7 +5863,7 @@ class String
5826
5863
  # 'abcdef\r\n'.rstrip #=> "abcdef"
5827
5864
  #
5828
5865
  def rstrip
5829
- `$q(this._value.replace(/\\s*$/,''))`
5866
+ `$q(this.__value__.replace(/\\s*$/,''))`
5830
5867
  end
5831
5868
 
5832
5869
  # call-seq:
@@ -5842,9 +5879,9 @@ class String
5842
5879
  # s #=> "abcdef"
5843
5880
  #
5844
5881
  def rstrip!
5845
- `var v=this._value`
5846
- `this._value=v.replace(/\\s*$/,'')`
5847
- return `this._value==v?nil:this`
5882
+ `var v=this.__value__`
5883
+ `this.__value__=v.replace(/\\s*$/,'')`
5884
+ return `this.__value__==v?nil:this`
5848
5885
  end
5849
5886
 
5850
5887
  # FIX: Incomplete
@@ -5861,7 +5898,7 @@ class String
5861
5898
  # 'ab\ncd'.size #=> 5
5862
5899
  #
5863
5900
  def size
5864
- `this._value.length`
5901
+ `this.__value__.length`
5865
5902
  end
5866
5903
 
5867
5904
  # call-seq:
@@ -5895,7 +5932,7 @@ class String
5895
5932
 
5896
5933
  # FIX: Incomplete
5897
5934
  def split(pattern = /\s+/, limit = nil)
5898
- `var a=this._value.split(pattern._value),result=[]`
5935
+ `var a=this.__value__.split(pattern.__value__),result=[]`
5899
5936
  `for(var i=0,l=a.length;i<l;++i){result.push($q(a[i]));}`
5900
5937
  return `result`
5901
5938
  end
@@ -5913,7 +5950,7 @@ class String
5913
5950
  # '\tabcdef\r\n'.strip #=> "abcdef"
5914
5951
  #
5915
5952
  def strip
5916
- `$q(this._value.replace(/^\\s*|\\s*$/,''))`
5953
+ `$q(this.__value__.replace(/^\\s*|\\s*$/,''))`
5917
5954
  end
5918
5955
 
5919
5956
  # call-seq:
@@ -5929,9 +5966,9 @@ class String
5929
5966
  # s #=> "abcdef"
5930
5967
  #
5931
5968
  def strip!
5932
- `var v=this._value`
5933
- `this._value=v.replace(/^\\s*|\\s*$/,'')`
5934
- return `this._value==v?nil:this`
5969
+ `var v=this.__value__`
5970
+ `this.__value__=v.replace(/^\\s*|\\s*$/,'')`
5971
+ return `this.__value__==v?nil:this`
5935
5972
  end
5936
5973
 
5937
5974
  # FIX: Incomplete
@@ -5963,7 +6000,7 @@ class String
5963
6000
  # 'ZZZ9999'.succ #=> 'AAAA0000'
5964
6001
  #
5965
6002
  def succ
5966
- `var v=this._value`
6003
+ `var v=this.__value__`
5967
6004
  `if(!/[a-zA-Z0-9]/.test(v)){return $q(v);}`
5968
6005
  `if(/^\\d+$/.test(v)){return $q(''+(+v+1))}`
5969
6006
  `for(var i=v.length-1,carry=i>=0,result='';i>=0;--i){var c=v[i],lc=/[a-z]/.test(c),uc=/[A-Z]/.test(c),n=/[0-9]/.test(c);if($T(carry)&&(lc||uc||n)){if(lc||uc){if(c=='z'||c=='Z'){result=(lc?'a':'A')+result;carry=i;}else{result=String.fromCharCode(c.charCodeAt()+1)+result;carry=false;};}else{if(c=='9'){result='0'+result;carry=i}else{result=''+(+c+1)+result;carry=false;};};}else{result=c+result;};}`
@@ -5979,12 +6016,12 @@ class String
5979
6016
  # <tt>String#next</tt> for details.
5980
6017
  #
5981
6018
  def succ!
5982
- `var v=this._value`
6019
+ `var v=this.__value__`
5983
6020
  `if(!/[a-zA-Z0-9]/.test(v)){return $q(v);}`
5984
6021
  `if(/^\\d+$/.test(v)){return $q(''+(+v+1))}`
5985
6022
  `for(var i=v.length-1,carry=i>=0,result='';i>=0;--i){var c=v[i],lc=/[a-z]/.test(c),uc=/[A-Z]/.test(c),n=/[0-9]/.test(c);if($T(carry)&&(lc||uc||n)){if(lc||uc){if(c=='z'||c=='Z'){result=(lc?'a':'A')+result;carry=i;}else{result=String.fromCharCode(c.charCodeAt()+1)+result;carry=false;};}else{if(c=='9'){result='0'+result;carry=i}else{result=''+(+c+1)+result;carry=false;};};}else{result=c+result;};}`
5986
6023
  `if($T(carry)){var c=v[carry],insert=/[a-z]/.test(c)?'a':(/[A-Z]/.test(c)?'A':'1');result=result.slice(0,carry)+insert+result.slice(carry,result.length);}`
5987
- `this._value=result`
6024
+ `this.__value__=result`
5988
6025
  return self
5989
6026
  end
5990
6027
 
@@ -6001,7 +6038,7 @@ class String
6001
6038
  # 'aBc123'.swapcase #=> "AbC123"
6002
6039
  #
6003
6040
  def swapcase
6004
- `$q(this._value.replace(/([a-z]+)|([A-Z]+)/g,function($0,$1,$2){return $1?$0.toUpperCase():$0.toLowerCase();}))`
6041
+ `$q(this.__value__.replace(/([a-z]+)|([A-Z]+)/g,function($0,$1,$2){return $1?$0.toUpperCase():$0.toLowerCase();}))`
6005
6042
  end
6006
6043
 
6007
6044
  # call-seq:
@@ -6020,9 +6057,9 @@ class String
6020
6057
  # s2 #=> "123"
6021
6058
  #
6022
6059
  def swapcase!
6023
- `var v=this._value`
6024
- `this._value=v.replace(/([a-z]+)|([A-Z]+)/g,function($0,$1,$2){return $1?$0.toUpperCase():$0.toLowerCase();})`
6025
- return `this._value==v?nil:this`
6060
+ `var v=this.__value__`
6061
+ `this.__value__=v.replace(/([a-z]+)|([A-Z]+)/g,function($0,$1,$2){return $1?$0.toUpperCase():$0.toLowerCase();})`
6062
+ return `this.__value__==v?nil:this`
6026
6063
  end
6027
6064
 
6028
6065
  # call-seq:
@@ -6093,7 +6130,7 @@ class String
6093
6130
  # 'abcdef'.to_sym #=> :abcdef
6094
6131
  #
6095
6132
  def to_sym
6096
- `$s(this._value)`
6133
+ `$s(this.__value__)`
6097
6134
  end
6098
6135
 
6099
6136
  # FIX: Incomplete
@@ -6121,7 +6158,7 @@ class String
6121
6158
  # 'aBCDEf'.upcase #=> "ABCDEF"
6122
6159
  #
6123
6160
  def upcase
6124
- `$q(this._value.toUpperCase())`
6161
+ `$q(this.__value__.toUpperCase())`
6125
6162
  end
6126
6163
 
6127
6164
  # call-seq:
@@ -6137,9 +6174,9 @@ class String
6137
6174
  # s #=> "ABCDEF"
6138
6175
  #
6139
6176
  def upcase!
6140
- `var v=this._value`
6141
- `this._value=v.toUpperCase()`
6142
- return `v==this._value?nil:this`
6177
+ `var v=this.__value__`
6178
+ `this.__value__=v.toUpperCase()`
6179
+ return `v==this.__value__?nil:this`
6143
6180
  end
6144
6181
 
6145
6182
  # FIX: Incomplete
@@ -6183,17 +6220,17 @@ class Symbol
6183
6220
  #
6184
6221
  def self.all_symbols
6185
6222
  `var result=[]`
6186
- `for(var x in c$Symbol._table){if(c$Symbol._table[x].m$class()==c$Symbol){result.push(c$Symbol._table[x]);}}`
6223
+ `for(var x in c$Symbol.__table__){if(c$Symbol.__table__[x].m$class()==c$Symbol){result.push(c$Symbol.__table__[x]);}}`
6187
6224
  return `result`
6188
6225
  end
6189
6226
 
6190
6227
  def initialize(value) # :nodoc:
6191
- `this._value=value`
6192
- `c$Symbol._table[value]=this`
6228
+ `this.__value__=value`
6229
+ `c$Symbol.__table__[value]=this`
6193
6230
  end
6194
6231
 
6195
6232
  def hash # :nodoc:
6196
- `'s_'+this._value`
6233
+ `'s_'+this.__value__`
6197
6234
  end
6198
6235
 
6199
6236
  # call-seq:
@@ -6205,7 +6242,7 @@ class Symbol
6205
6242
  # :foo.id2name #=> "foo"
6206
6243
  #
6207
6244
  def id2name
6208
- `$q(this._value)`
6245
+ `$q(this.__value__)`
6209
6246
  end
6210
6247
 
6211
6248
  # call-seq:
@@ -6240,7 +6277,7 @@ class Symbol
6240
6277
  # :foo.to_s #=> "foo"
6241
6278
  #
6242
6279
  def to_s
6243
- `$q(this._value)`
6280
+ `$q(this.__value__)`
6244
6281
  end
6245
6282
 
6246
6283
  # call-seq:
@@ -6253,7 +6290,7 @@ class Symbol
6253
6290
  return self
6254
6291
  end
6255
6292
 
6256
- `c$Symbol._table=new(Object)`
6293
+ `c$Symbol.__table__=new(Object)`
6257
6294
 
6258
6295
  undef dup
6259
6296
  undef clone
@@ -6276,7 +6313,7 @@ class Time
6276
6313
  #
6277
6314
  def self.at(seconds,milliseconds)
6278
6315
  `var t=c$Time.m$new()`
6279
- `t._value=typeof(seconds)=='number'?new(Date)(seconds*1000+(milliseconds||0)):seconds._value`
6316
+ `t.__value__=typeof(seconds)=='number'?new(Date)(seconds*1000+(milliseconds||0)):seconds.__value__`
6280
6317
  return `t`
6281
6318
  end
6282
6319
 
@@ -6311,7 +6348,7 @@ class Time
6311
6348
  # t2.to_f #=> 1222222222.991
6312
6349
  #
6313
6350
  def initialize
6314
- `this._value=new(Date)`
6351
+ `this.__value__=new(Date)`
6315
6352
  end
6316
6353
 
6317
6354
  # call-seq:
@@ -6325,7 +6362,7 @@ class Time
6325
6362
  #
6326
6363
  def +(numeric)
6327
6364
  `var t=c$Time.m$new()`
6328
- `t._value=new(Date)(numeric*1000+this._value.valueOf())`
6365
+ `t.__value__=new(Date)(numeric*1000+this.__value__.valueOf())`
6329
6366
  return `t`
6330
6367
  end
6331
6368
 
@@ -6343,7 +6380,7 @@ class Time
6343
6380
  # t2 - 2592000 #=> Tue Sep 23 2008 22:10:22 GMT-0400 (EDT)
6344
6381
  #
6345
6382
  def -(time)
6346
- `typeof(time)=='number'?new(Date)(this._value.valueOf()-(time*1000)):(this._value.valueOf()-time._value.valueOf())/1000`
6383
+ `typeof(time)=='number'?new(Date)(this.__value__.valueOf()-(time*1000)):(this.__value__.valueOf()-time.__value__.valueOf())/1000`
6347
6384
  end
6348
6385
 
6349
6386
  # call-seq:
@@ -6360,7 +6397,7 @@ class Time
6360
6397
  # t1 <=> t1 #=> 0
6361
6398
  #
6362
6399
  def <=>(time)
6363
- `var v=this._value.valueOf(),ms=typeof(time)=='number'?time*1000:time._value.valueOf()`
6400
+ `var v=this.__value__.valueOf(),ms=typeof(time)=='number'?time*1000:time.__value__.valueOf()`
6364
6401
  `if(v<ms){return -1;}`
6365
6402
  `if(v==ms){return 0;}`
6366
6403
  `if(v>ms){return 1;}`
@@ -6377,7 +6414,7 @@ class Time
6377
6414
  # t.day #=> 23
6378
6415
  #
6379
6416
  def day
6380
- `this._value.getDate()`
6417
+ `this.__value__.getDate()`
6381
6418
  end
6382
6419
 
6383
6420
  # FIX: Incomplete
@@ -6392,7 +6429,7 @@ class Time
6392
6429
  #
6393
6430
  def eql?(time)
6394
6431
  `if(time.constructor!=c$Time){return false;}`
6395
- `this._value.valueOf()==time._value.valueOf()`
6432
+ `this.__value__.valueOf()==time.__value__.valueOf()`
6396
6433
  end
6397
6434
 
6398
6435
  # FIX: Incomplete
@@ -6422,7 +6459,7 @@ class Time
6422
6459
  # t.gmt_offset #=> -14400
6423
6460
  #
6424
6461
  def gmt_offset
6425
- `this._value.getTimezoneOffset() * -60`
6462
+ `this.__value__.getTimezoneOffset() * -60`
6426
6463
  end
6427
6464
 
6428
6465
  # FIX: Incomplete
@@ -6440,11 +6477,11 @@ class Time
6440
6477
  # t.gmtoff #=> -14400
6441
6478
  #
6442
6479
  def gmtoff
6443
- `this._value.getTimezoneOffset() * -60`
6480
+ `this.__value__.getTimezoneOffset() * -60`
6444
6481
  end
6445
6482
 
6446
6483
  def hash # :nodoc:
6447
- `'t_'+this._value.valueOf()/1000`
6484
+ `'t_'+this.__value__.valueOf()/1000`
6448
6485
  end
6449
6486
 
6450
6487
  # call-seq:
@@ -6456,7 +6493,7 @@ class Time
6456
6493
  # t.hour #=> 22
6457
6494
  #
6458
6495
  def hour
6459
- `this._value.getHours()`
6496
+ `this.__value__.getHours()`
6460
6497
  end
6461
6498
 
6462
6499
  # call-seq:
@@ -6489,7 +6526,7 @@ class Time
6489
6526
  # t.mday #=> 23
6490
6527
  #
6491
6528
  def mday
6492
- `this._value.getDate()`
6529
+ `this.__value__.getDate()`
6493
6530
  end
6494
6531
 
6495
6532
  # call-seq:
@@ -6501,7 +6538,7 @@ class Time
6501
6538
  # t.min #=> 10
6502
6539
  #
6503
6540
  def min
6504
- `this._value.getMinutes()`
6541
+ `this.__value__.getMinutes()`
6505
6542
  end
6506
6543
 
6507
6544
  # call-seq:
@@ -6514,7 +6551,7 @@ class Time
6514
6551
  # t.mon #=> 9
6515
6552
  #
6516
6553
  def mon
6517
- `this._value.getMonth()`
6554
+ `this.__value__.getMonth()`
6518
6555
  end
6519
6556
 
6520
6557
  # call-seq:
@@ -6527,7 +6564,7 @@ class Time
6527
6564
  # t.month #=> 9
6528
6565
  #
6529
6566
  def month
6530
- `this._value.getMonth()`
6567
+ `this.__value__.getMonth()`
6531
6568
  end
6532
6569
 
6533
6570
  # call-seq:
@@ -6539,7 +6576,7 @@ class Time
6539
6576
  # t.sec #=> 22
6540
6577
  #
6541
6578
  def sec
6542
- `this._value.getSeconds()`
6579
+ `this.__value__.getSeconds()`
6543
6580
  end
6544
6581
 
6545
6582
  # FIX: Incomplete
@@ -6553,7 +6590,7 @@ class Time
6553
6590
  #
6554
6591
  def succ
6555
6592
  `var t=c$Time.m$new()`
6556
- `t._value=new(Date)(1000+this._value.valueOf())`
6593
+ `t.__value__=new(Date)(1000+this.__value__.valueOf())`
6557
6594
  return `t`
6558
6595
  end
6559
6596
 
@@ -6583,7 +6620,7 @@ class Time
6583
6620
  # t.to_f #=> 1222222222.989
6584
6621
  #
6585
6622
  def to_f
6586
- `this._value.valueOf()/1000`
6623
+ `this.__value__.valueOf()/1000`
6587
6624
  end
6588
6625
 
6589
6626
  # call-seq:
@@ -6595,7 +6632,7 @@ class Time
6595
6632
  # t.to_i #=> 1222222222
6596
6633
  #
6597
6634
  def to_i
6598
- `parseInt(this._value.valueOf()/1000)`
6635
+ `parseInt(this.__value__.valueOf()/1000)`
6599
6636
  end
6600
6637
 
6601
6638
  # call-seq:
@@ -6607,7 +6644,7 @@ class Time
6607
6644
  # Time.now.to_s #=> "Tue Sep 23 2008 22:10:22 GMT-0400 (EDT)"
6608
6645
  #
6609
6646
  def to_s
6610
- `$q(''+this._value)`
6647
+ `$q(''+this.__value__)`
6611
6648
  end
6612
6649
 
6613
6650
  # call-seq:
@@ -6619,7 +6656,7 @@ class Time
6619
6656
  # t.tv_sec #=> 1222222222
6620
6657
  #
6621
6658
  def tv_sec
6622
- `parseInt(this._value.valueOf()/1000)`
6659
+ `parseInt(this.__value__.valueOf()/1000)`
6623
6660
  end
6624
6661
 
6625
6662
  # call-seq:
@@ -6633,7 +6670,7 @@ class Time
6633
6670
  # t.tv_usec #=> 989000
6634
6671
  #
6635
6672
  def tv_usec
6636
- `parseInt(this._value.valueOf()/1000)`
6673
+ `parseInt(this.__value__.valueOf()/1000)`
6637
6674
  end
6638
6675
 
6639
6676
  # call-seq:
@@ -6647,7 +6684,7 @@ class Time
6647
6684
  # t.usec #=> 989000
6648
6685
  #
6649
6686
  def usec
6650
- `var v = this._value.valueOf()`
6687
+ `var v = this.__value__.valueOf()`
6651
6688
  `(v*1000)-parseInt(v/1000)*1000000`
6652
6689
  end
6653
6690
 
@@ -6670,7 +6707,7 @@ class Time
6670
6707
  # t.utc_offset #=> -14400
6671
6708
  #
6672
6709
  def utc_offset
6673
- `this._value.getTimezoneOffset() * -60`
6710
+ `this.__value__.getTimezoneOffset() * -60`
6674
6711
  end
6675
6712
 
6676
6713
  # call-seq:
@@ -6682,7 +6719,7 @@ class Time
6682
6719
  # t.wday #=> 2
6683
6720
  #
6684
6721
  def wday
6685
- `this._value.getDay()`
6722
+ `this.__value__.getDay()`
6686
6723
  end
6687
6724
 
6688
6725
  # call-seq:
@@ -6707,7 +6744,7 @@ class Time
6707
6744
  # t.year #=> 2008
6708
6745
  #
6709
6746
  def year
6710
- `this._value.getFullYear()`
6747
+ `this.__value__.getFullYear()`
6711
6748
  end
6712
6749
 
6713
6750
  # FIX: Incomplete
@@ -6753,6 +6790,22 @@ class TrueClass
6753
6790
  `this.valueOf()?!$T(object):$T(object)`
6754
6791
  end
6755
6792
 
6793
+ def ==(obj) # :nodoc:
6794
+ `obj.valueOf&&obj.valueOf()===this.valueOf()`
6795
+ end
6796
+
6797
+ def ===(obj) # :nodoc:
6798
+ `obj.valueOf&&obj.valueOf()===this.valueOf()`
6799
+ end
6800
+
6801
+ def eql?(obj) # :nodoc:
6802
+ `obj.valueOf&&obj.valueOf()===this.valueOf()`
6803
+ end
6804
+
6805
+ def equal?(obj) # :nodoc:
6806
+ `obj.valueOf&&obj.valueOf()===this.valueOf()`
6807
+ end
6808
+
6756
6809
  def hash # :nodoc:
6757
6810
  `'b_'+this.valueOf()`
6758
6811
  end
@@ -6775,10 +6828,10 @@ end
6775
6828
  `
6776
6829
 
6777
6830
  c$NilClass.prototype.toString=function(){return 'nil';};
6778
- c$Range.prototype.toString=function(){return ''+this._start+(this._exclusive?'...':'..')+this._end;};
6779
- c$Regexp.prototype.toString=function(){return '/'+this._source+'/'+(/s/.test(this._options)?'m':'')+(/i/.test(this._options)?'i':'')+(/x/.test(this._options)?'x':'');};
6780
- c$String.prototype.toString=function(){return this._value;};
6781
- c$Symbol.prototype.toString=function(){var v=this._value,str=/\\s/.test(v)?'"'+v+'"':v;return ':'+str ;};
6782
- c$Time.prototype.toString=function(){return ''+this._value;};
6831
+ c$Range.prototype.toString=function(){return ''+this.__start__+(this.__exclusive__?'...':'..')+this.__end__;};
6832
+ c$Regexp.prototype.toString=function(){return '/'+this.__source__+'/'+(/s/.test(this.__options__)?'m':'')+(/i/.test(this.__options__)?'i':'')+(/x/.test(this.__options__)?'x':'');};
6833
+ c$String.prototype.toString=function(){return this.__value__;};
6834
+ c$Symbol.prototype.toString=function(){var v=this.__value__,str=/\\s/.test(v)?'"'+v+'"':v;return ':'+str ;};
6835
+ c$Time.prototype.toString=function(){return ''+this.__value__;};
6783
6836
 
6784
6837
  `