opal 0.3.32 → 0.3.33

Sign up to get free protection for your applications and to get access to all the features.
@@ -88,11 +88,44 @@ class Class
88
88
  self
89
89
  end
90
90
 
91
- # handled by parser
92
- def attr_accessor(*); end
91
+ def attr_accessor(*names)
92
+ attr_reader *names
93
+ attr_writer *names
94
+ end
95
+
96
+ def attr_reader(*names)
97
+ %x{
98
+ var proto = #{self}.prototype;
99
+ for (var i = 0, length = names.length; i < length; i++) {
100
+ (function(name) {
101
+ proto[name] = nil;
102
+
103
+ proto['$' + name] = function() {
104
+ return this[name];
105
+ };
106
+ })(names[i]);
107
+ }
108
+ }
109
+
110
+ nil
111
+ end
112
+
113
+ def attr_writer(*names)
114
+ %x{
115
+ var proto = #{self}.prototype;
116
+ for (var i = 0, length = names.length; i < length; i++) {
117
+ (function(name) {
118
+ proto[name] = nil;
119
+
120
+ proto['$' + name + '='] = function(value) {
121
+ return this[name] = value;
122
+ };
123
+ })(names[i]);
124
+ }
125
+ }
126
+ nil
127
+ end
93
128
 
94
- alias attr_reader attr_accessor
95
- alias attr_writer attr_accessor
96
129
  alias attr attr_accessor
97
130
 
98
131
  def define_method(name, &block)
@@ -28,9 +28,8 @@ class Hash
28
28
  // strings as keys. The map and keys array can be constructed at
29
29
  // compile time, so they are just added here by the constructor
30
30
  // function
31
- __hash2 = Opal.hash2 = function(keys, map) {
31
+ __hash2 = Opal.hash2 = function(map) {
32
32
  var hash = new Hash;
33
- hash.keys = keys;
34
33
  hash.map = map;
35
34
  return hash;
36
35
  }
@@ -46,10 +45,9 @@ class Hash
46
45
 
47
46
  def self.from_native(obj)
48
47
  %x{
49
- var hash = __hash(), map = hash.map, keys = hash.keys;
48
+ var hash = __hash(), map = hash.map;
50
49
 
51
50
  for (var key in obj) {
52
- keys.push(key);
53
51
  map[key] = obj[key];
54
52
  }
55
53
 
@@ -78,19 +76,15 @@ class Hash
78
76
  return true;
79
77
  }
80
78
 
81
- if (!other.map || !other.keys) {
82
- return false;
83
- }
84
-
85
- if (#{self}.keys.length !== other.keys.length) {
79
+ if (other.map == null) {
86
80
  return false;
87
81
  }
88
82
 
89
83
  var map = #{self}.map,
90
84
  map2 = other.map;
91
85
 
92
- for (var i = 0, length = #{self}.keys.length; i < length; i++) {
93
- var key = #{self}.keys[i], obj = map[key], obj2 = map2[key];
86
+ for (var key in map) {
87
+ var obj = map[key], obj2 = map2[key];
94
88
 
95
89
  if (#{`obj` != `obj2`}) {
96
90
  return false;
@@ -103,10 +97,10 @@ class Hash
103
97
 
104
98
  def [](key)
105
99
  %x{
106
- var bucket = #{self}.map[key];
100
+ var obj = #{self}.map[key];
107
101
 
108
- if (bucket != null) {
109
- return bucket;
102
+ if (obj != null) {
103
+ return obj;
110
104
  }
111
105
 
112
106
  var proc = #{@proc};
@@ -121,27 +115,18 @@ class Hash
121
115
 
122
116
  def []=(key, value)
123
117
  %x{
124
- var map = #{self}.map;
125
-
126
- if (!__hasOwn.call(map, key)) {
127
- #{self}.keys.push(key);
128
- }
129
-
130
- map[key] = value;
131
-
118
+ #{self}.map[key] = value;
132
119
  return value;
133
120
  }
134
121
  end
135
122
 
136
123
  def assoc(object)
137
124
  %x{
138
- var keys = #{self}.keys, key;
139
-
140
- for (var i = 0, length = keys.length; i < length; i++) {
141
- key = keys[i];
125
+ var map = #{self}.map;
142
126
 
127
+ for (var key in map) {
143
128
  if (#{`key` == object}) {
144
- return [key, #{self}.map[key]];
129
+ return [key, map[key]];
145
130
  }
146
131
  }
147
132
 
@@ -152,7 +137,6 @@ class Hash
152
137
  def clear
153
138
  %x{
154
139
  #{self}.map = {};
155
- #{self}.keys = [];
156
140
  return #{self};
157
141
  }
158
142
  end
@@ -161,12 +145,10 @@ class Hash
161
145
  %x{
162
146
  var result = __hash(),
163
147
  map = #{self}.map,
164
- map2 = result.map,
165
- keys2 = result.keys;
148
+ map2 = result.map;
166
149
 
167
- for (var i = 0, length = #{self}.keys.length; i < length; i++) {
168
- keys2.push(#{self}.keys[i]);
169
- map2[#{self}.keys[i]] = map[#{self}.keys[i]];
150
+ for (var key in map) {
151
+ map2[key] = map[key];
170
152
  }
171
153
 
172
154
  return result;
@@ -191,12 +173,10 @@ class Hash
191
173
 
192
174
  def delete(key)
193
175
  %x{
194
- var map = #{self}.map, result = map[key];
176
+ var map = #{self}.map, result = map[key];
195
177
 
196
178
  if (result != null) {
197
179
  delete map[key];
198
- #{self}.keys.$delete(key);
199
-
200
180
  return result;
201
181
  }
202
182
 
@@ -206,21 +186,15 @@ class Hash
206
186
 
207
187
  def delete_if(&block)
208
188
  %x{
209
- var map = #{self}.map, keys = #{self}.keys, value;
210
-
211
- for (var i = 0, length = keys.length; i < length; i++) {
212
- var key = keys[i], obj = map[key];
189
+ var map = #{self}.map, value;
213
190
 
214
- if ((value = block(key, obj)) === __breaker) {
191
+ for (var key in map) {
192
+ if ((value = block(key, map[key])) === __breaker) {
215
193
  return __breaker.$v;
216
194
  }
217
195
 
218
196
  if (value !== false && value !== nil) {
219
- keys.splice(i, 1);
220
- delete map[key];
221
-
222
- length--;
223
- i--;
197
+ delete map[key]
224
198
  }
225
199
  }
226
200
 
@@ -232,11 +206,9 @@ class Hash
232
206
 
233
207
  def each(&block)
234
208
  %x{
235
- var map = #{self}.map, keys = #{self}.keys;
236
-
237
- for (var i = 0, length = keys.length; i < length; i++) {
238
- var key = keys[i];
209
+ var map = #{self}.map;
239
210
 
211
+ for (var key in map) {
240
212
  if (block(key, map[key]) === __breaker) {
241
213
  return __breaker.$v;
242
214
  }
@@ -248,11 +220,9 @@ class Hash
248
220
 
249
221
  def each_key(&block)
250
222
  %x{
251
- var keys = #{self}.keys;
252
-
253
- for (var i = 0, length = keys.length; i < length; i++) {
254
- var key = keys[i];
223
+ var map = #{self}.map;
255
224
 
225
+ for (var key in map) {
256
226
  if (block(key) === __breaker) {
257
227
  return __breaker.$v;
258
228
  }
@@ -266,10 +236,10 @@ class Hash
266
236
 
267
237
  def each_value(&block)
268
238
  %x{
269
- var map = #{self}.map, keys = #{self}.keys;
239
+ var map = #{self}.map;
270
240
 
271
- for (var i = 0, length = keys.length; i < length; i++) {
272
- if (block(map[keys[i]]) === __breaker) {
241
+ for (var key in map) {
242
+ if (block(map[key]) === __breaker) {
273
243
  return __breaker.$v;
274
244
  }
275
245
  }
@@ -280,7 +250,11 @@ class Hash
280
250
 
281
251
  def empty?
282
252
  %x{
283
- return #{self}.keys.length === 0;
253
+ for (var key in #{self}.map) {
254
+ return false;
255
+ }
256
+
257
+ return true;
284
258
  }
285
259
  end
286
260
 
@@ -314,10 +288,10 @@ class Hash
314
288
 
315
289
  def flatten(level=undefined)
316
290
  %x{
317
- var map = #{self}.map, keys = #{self}.keys, result = [];
291
+ var map = #{self}.map, result = [];
318
292
 
319
- for (var i = 0, length = keys.length; i < length; i++) {
320
- var key = keys[i], value = map[key];
293
+ for (var key in map) {
294
+ var value = map[key];
321
295
 
322
296
  result.push(key);
323
297
 
@@ -344,8 +318,10 @@ class Hash
344
318
 
345
319
  def has_value?(value)
346
320
  %x{
347
- for (var assoc in #{self}.map) {
348
- if (#{`#{self}.map[assoc]` == value}) {
321
+ var map = #{self}.map;
322
+
323
+ for (var key in map) {
324
+ if (#{`map[key]` == value}) {
349
325
  return true;
350
326
  }
351
327
  }
@@ -362,11 +338,9 @@ class Hash
362
338
 
363
339
  def index(object)
364
340
  %x{
365
- var map = #{self}.map, keys = #{self}.keys;
366
-
367
- for (var i = 0, length = keys.length; i < length; i++) {
368
- var key = keys[i];
341
+ var map = #{self}.map;
369
342
 
343
+ for (var key in map) {
370
344
  if (#{object == `map[key]`}) {
371
345
  return key;
372
346
  }
@@ -381,13 +355,13 @@ class Hash
381
355
  var result = [], map = #{self}.map, val;
382
356
 
383
357
  for (var i = 0, length = keys.length; i < length; i++) {
384
- var key = keys[i], val = map[key];
358
+ val = map[keys[i]];
385
359
 
386
360
  if (val != null) {
387
361
  result.push(val);
388
362
  }
389
363
  else {
390
- result.push(#{self}.none);
364
+ result.push(#{@none});
391
365
  }
392
366
  }
393
367
 
@@ -399,10 +373,9 @@ class Hash
399
373
 
400
374
  def inspect
401
375
  %x{
402
- var inspect = [], keys = #{self}.keys, map = #{self}.map;
376
+ var inspect = [], map = #{self}.map;
403
377
 
404
- for (var i = 0, length = keys.length; i < length; i++) {
405
- var key = keys[i];
378
+ for (var key in map) {
406
379
  inspect.push(#{`key`.inspect} + '=>' + #{`map[key]`.inspect});
407
380
  }
408
381
 
@@ -412,13 +385,10 @@ class Hash
412
385
 
413
386
  def invert
414
387
  %x{
415
- var result = __hash(), keys = #{self}.keys, map = #{self}.map,
416
- keys2 = result.keys, map2 = result.map;
388
+ var result = __hash(), map = #{self}.map, map2 = result.map;
417
389
 
418
- for (var i = 0, length = keys.length; i < length; i++) {
419
- var key = keys[i], obj = map[key];
420
-
421
- keys2.push(obj);
390
+ for (var key in map) {
391
+ var obj = map[key];
422
392
  map2[obj] = key;
423
393
  }
424
394
 
@@ -428,21 +398,17 @@ class Hash
428
398
 
429
399
  def keep_if(&block)
430
400
  %x{
431
- var map = #{self}.map, keys = #{self}.keys, value;
401
+ var map = #{self}.map, value;
432
402
 
433
- for (var i = 0, length = keys.length; i < length; i++) {
434
- var key = keys[i], obj = map[key];
403
+ for (var key in map) {
404
+ var obj = map[key];
435
405
 
436
406
  if ((value = block(key, obj)) === __breaker) {
437
407
  return __breaker.$v;
438
408
  }
439
409
 
440
410
  if (value === false || value === nil) {
441
- keys.splice(i, 1);
442
411
  delete map[key];
443
-
444
- length--;
445
- i--;
446
412
  }
447
413
  }
448
414
 
@@ -456,13 +422,25 @@ class Hash
456
422
 
457
423
  def keys
458
424
  %x{
459
- return #{self}.keys.slice(0);
425
+ var result = [], map = #{self}.map;
426
+
427
+ for (var key in map) {
428
+ result.push(key);
429
+ }
430
+
431
+ return result;
460
432
  }
461
433
  end
462
434
 
463
435
  def length
464
436
  %x{
465
- return #{self}.keys.length;
437
+ var length = 0, map = #{self}.map;
438
+
439
+ for (var key in map) {
440
+ length++;
441
+ }
442
+
443
+ return length;
466
444
  }
467
445
  end
468
446
 
@@ -470,35 +448,22 @@ class Hash
470
448
 
471
449
  def merge(other, &block)
472
450
  %x{
473
- var keys = #{self}.keys, map = #{self}.map,
474
- result = __hash(), keys2 = result.keys, map2 = result.map;
475
-
476
- for (var i = 0, length = keys.length; i < length; i++) {
477
- var key = keys[i];
451
+ var map = #{self}.map, result = __hash(), map2 = result.map;
478
452
 
479
- keys2.push(key);
453
+ for (var key in map) {
480
454
  map2[key] = map[key];
481
455
  }
482
456
 
483
- var keys = other.keys, map = other.map;
457
+ map = other.map;
484
458
 
485
459
  if (block === nil) {
486
- for (var i = 0, length = keys.length; i < length; i++) {
487
- var key = keys[i];
488
-
489
- if (map2[key] == null) {
490
- keys2.push(key);
491
- }
492
-
460
+ for (key in map) {
493
461
  map2[key] = map[key];
494
462
  }
495
463
  }
496
464
  else {
497
- for (var i = 0, length = keys.length; i < length; i++) {
498
- var key = keys[i];
499
-
465
+ for (key in map) {
500
466
  if (map2[key] == null) {
501
- keys2.push(key);
502
467
  map2[key] = map[key];
503
468
  }
504
469
  else {
@@ -513,26 +478,16 @@ class Hash
513
478
 
514
479
  def merge!(other, &block)
515
480
  %x{
516
- var keys = #{self}.keys, map = #{self}.map,
517
- keys2 = other.keys, map2 = other.map;
481
+ var map = #{self}.map, map2 = other.map;
518
482
 
519
483
  if (block === nil) {
520
- for (var i = 0, length = keys2.length; i < length; i++) {
521
- var key = keys2[i];
522
-
523
- if (map[key] == null) {
524
- keys.push(key);
525
- }
526
-
484
+ for (var key in map2) {
527
485
  map[key] = map2[key];
528
486
  }
529
487
  }
530
488
  else {
531
- for (var i = 0, length = keys2.length; i < length; i++) {
532
- var key = keys2[i];
533
-
489
+ for (key in map2) {
534
490
  if (map[key] == null) {
535
- keys.push(key);
536
491
  map[key] = map2[key];
537
492
  }
538
493
  else {
@@ -547,10 +502,10 @@ class Hash
547
502
 
548
503
  def rassoc(object)
549
504
  %x{
550
- var keys = #{self}.keys, map = #{self}.map;
505
+ var map = #{self}.map;
551
506
 
552
- for (var i = 0, length = keys.length; i < length; i++) {
553
- var key = keys[i], obj = map[key];
507
+ for (var key in map) {
508
+ var obj = map[key];
554
509
 
555
510
  if (#{`obj` == object}) {
556
511
  return [key, obj];
@@ -563,18 +518,16 @@ class Hash
563
518
 
564
519
  def reject(&block)
565
520
  %x{
566
- var keys = #{self}.keys, map = #{self}.map,
567
- result = __hash(), map2 = result.map, keys2 = result.keys;
521
+ var map = #{self}.map, result = __hash(), map2 = result.map;
568
522
 
569
- for (var i = 0, length = keys.length; i < length; i++) {
570
- var key = keys[i], obj = map[key], value;
523
+ for (var key in map) {
524
+ var obj = map[key], value;
571
525
 
572
526
  if ((value = block(key, obj)) === __breaker) {
573
527
  return __breaker.$v;
574
528
  }
575
529
 
576
530
  if (value === false || value === nil) {
577
- keys2.push(key);
578
531
  map2[key] = obj;
579
532
  }
580
533
  }
@@ -585,12 +538,10 @@ class Hash
585
538
 
586
539
  def replace(other)
587
540
  %x{
588
- var map = #{self}.map = {}, keys = #{self}.keys = [];
541
+ var map = #{self}.map = {}, map2 = other.map;
589
542
 
590
- for (var i = 0, length = other.keys.length; i < length; i++) {
591
- var key = other.keys[i];
592
- keys.push(key);
593
- map[key] = other.map[key];
543
+ for (var key in map2) {
544
+ map[key] = map2[key];
594
545
  }
595
546
 
596
547
  return #{self};
@@ -599,18 +550,16 @@ class Hash
599
550
 
600
551
  def select(&block)
601
552
  %x{
602
- var keys = #{self}.keys, map = #{self}.map,
603
- result = __hash(), map2 = result.map, keys2 = result.keys;
553
+ var map = #{self}.map, result = __hash(), map2 = result.map;
604
554
 
605
- for (var i = 0, length = keys.length; i < length; i++) {
606
- var key = keys[i], obj = map[key], value;
555
+ for (var key in map) {
556
+ var obj = map[key], value;
607
557
 
608
558
  if ((value = block(key, obj)) === __breaker) {
609
559
  return __breaker.$v;
610
560
  }
611
561
 
612
562
  if (value !== false && value !== nil) {
613
- keys2.push(key);
614
563
  map2[key] = obj;
615
564
  }
616
565
  }
@@ -621,21 +570,18 @@ class Hash
621
570
 
622
571
  def select!(&block)
623
572
  %x{
624
- var map = #{self}.map, keys = #{self}.keys, value, result = nil;
573
+ var map = #{self}.map, value, result = nil;
625
574
 
626
- for (var i = 0, length = keys.length; i < length; i++) {
627
- var key = keys[i], obj = map[key];
575
+ for (var key in map) {
576
+ var obj = map[key];
628
577
 
629
578
  if ((value = block(key, obj)) === __breaker) {
630
579
  return __breaker.$v;
631
580
  }
632
581
 
633
582
  if (value === false || value === nil) {
634
- keys.splice(i, 1);
635
583
  delete map[key];
636
584
 
637
- length--;
638
- i--;
639
585
  result = #{self}
640
586
  }
641
587
  }
@@ -646,14 +592,11 @@ class Hash
646
592
 
647
593
  def shift
648
594
  %x{
649
- var keys = #{self}.keys, map = #{self}.map;
650
-
651
- if (keys.length) {
652
- var key = keys[0], obj = map[key];
595
+ var map = #{self}.map;
653
596
 
597
+ for (var key in map) {
598
+ var obj = map[key];
654
599
  delete map[key];
655
- keys.splice(0, 1);
656
-
657
600
  return [key, obj];
658
601
  }
659
602
 
@@ -665,10 +608,9 @@ class Hash
665
608
 
666
609
  def to_a
667
610
  %x{
668
- var keys = #{self}.keys, map = #{self}.map, result = [];
611
+ var map = #{self}.map, result = [];
669
612
 
670
- for (var i = 0, length = keys.length; i < length; i++) {
671
- var key = keys[i];
613
+ for (var key in map) {
672
614
  result.push([key, map[key]]);
673
615
  }
674
616
 
@@ -682,10 +624,9 @@ class Hash
682
624
 
683
625
  def to_json
684
626
  %x{
685
- var inspect = [], keys = #{self}.keys, map = #{self}.map;
627
+ var inspect = [], map = #{self}.map;
686
628
 
687
- for (var i = 0, length = keys.length; i < length; i++) {
688
- var key = keys[i];
629
+ for (var key in map) {
689
630
  inspect.push(#{`key`.to_json} + ': ' + #{`map[key]`.to_json});
690
631
  }
691
632
 
@@ -695,10 +636,10 @@ class Hash
695
636
 
696
637
  def to_native
697
638
  %x{
698
- var result = {}, keys = #{self}.keys, map = #{self}.map, bucket, value;
639
+ var result = {}, map = #{self}.map;
699
640
 
700
- for (var i = 0, length = keys.length; i < length; i++) {
701
- var key = keys[i], obj = map[key];
641
+ for (var key in map) {
642
+ var obj = map[key];
702
643
 
703
644
  if (obj.$to_native) {
704
645
  result[key] = #{`obj`.to_native};
@@ -38,12 +38,11 @@ module JSON
38
38
  return arr;
39
39
  }
40
40
  else {
41
- var hash = #{ {} }, v, map = hash.map, keys = hash.keys;
41
+ var hash = #{ {} }, v, map = hash.map;
42
42
 
43
43
  for (var k in value) {
44
44
  if (__hasOwn.call(value, k)) {
45
45
  v = to_opal(value[k]);
46
- keys.push(k);
47
46
  map[k] = v;
48
47
  }
49
48
  }
@@ -776,7 +776,7 @@ module Opal
776
776
 
777
777
  case meth
778
778
  when :attr_reader, :attr_writer, :attr_accessor
779
- return handle_attr_optimize(meth, arglist[1..-1])
779
+ return handle_attr_optimize(meth, arglist[1..-1]) if @scope.class_scope?
780
780
  when :block_given?
781
781
  return js_block_given(sexp, level)
782
782
  when :alias_native
@@ -1256,7 +1256,7 @@ module Opal
1256
1256
  map = hash_keys.map { |k| "#{k}: #{hash_obj[k]}"}
1257
1257
 
1258
1258
  @helpers[:hash2] = true
1259
- "__hash2([#{hash_keys.join ', '}], {#{map.join(', ')}})"
1259
+ "__hash2({#{map.join(', ')}})"
1260
1260
  else
1261
1261
  @helpers[:hash] = true
1262
1262
  "__hash(#{sexp.map { |p| process p, :expr }.join ', '})"
@@ -1,3 +1,3 @@
1
1
  module Opal
2
- VERSION = '0.3.32'
2
+ VERSION = '0.3.33'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.32
4
+ version: 0.3.33
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-17 00:00:00.000000000Z
12
+ date: 2013-01-18 00:00:00.000000000Z
13
13
  dependencies: []
14
14
  description: Ruby runtime and core library for javascript.
15
15
  email: adam.beynon@gmail.com