opal 0.3.20 → 0.3.21
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/.gitignore +2 -7
- data/.rspec +2 -0
- data/.travis.yml +11 -0
- data/Gemfile +8 -2
- data/LICENSE +2 -3
- data/README.md +106 -239
- data/Rakefile +58 -16
- data/bin/opal +1 -0
- data/core/array.rb +180 -160
- data/core/basic_object.rb +8 -4
- data/core/boolean.rb +6 -6
- data/core/class.rb +9 -15
- data/core/dir.rb +89 -0
- data/core/enumerable.rb +83 -86
- data/core/error.rb +9 -4
- data/core/file.rb +85 -0
- data/core/hash.rb +67 -67
- data/core/kernel.rb +38 -42
- data/core/module.rb +57 -54
- data/core/numeric.rb +41 -41
- data/core/proc.rb +1 -5
- data/core/range.rb +11 -11
- data/core/regexp.rb +27 -22
- data/core/runtime.js +152 -221
- data/core/string.rb +86 -73
- data/core/time.rb +22 -18
- data/docs/post.html +9 -0
- data/docs/pre.html +32 -0
- data/lib/opal.rb +43 -3
- data/lib/opal/builder.rb +9 -26
- data/lib/opal/grammar.rb +1 -1
- data/lib/opal/grammar.y +1 -1
- data/lib/opal/lexer.rb +21 -15
- data/lib/opal/parser.rb +100 -111
- data/lib/opal/rake_task.rb +66 -0
- data/lib/opal/scope.rb +13 -5
- data/lib/opal/version.rb +1 -1
- data/opal.gemspec +2 -0
- data/spec/browser_spec.rb +28 -0
- data/spec/builder/lib_name_for_spec.rb +1 -6
- data/spec/grammar/alias_spec.rb +1 -1
- data/spec/grammar/and_spec.rb +1 -1
- data/spec/grammar/array_spec.rb +1 -1
- data/spec/grammar/attrasgn_spec.rb +1 -1
- data/spec/grammar/begin_spec.rb +1 -1
- data/spec/grammar/block_spec.rb +1 -1
- data/spec/grammar/break_spec.rb +1 -1
- data/spec/grammar/call_spec.rb +1 -1
- data/spec/grammar/class_spec.rb +1 -1
- data/spec/grammar/const_spec.rb +1 -1
- data/spec/grammar/cvar_spec.rb +1 -1
- data/spec/grammar/def_spec.rb +1 -1
- data/spec/grammar/false_spec.rb +1 -1
- data/spec/grammar/file_spec.rb +1 -1
- data/spec/grammar/gvar_spec.rb +1 -1
- data/spec/grammar/hash_spec.rb +1 -1
- data/spec/grammar/iasgn_spec.rb +1 -1
- data/spec/grammar/if_spec.rb +1 -1
- data/spec/grammar/iter_spec.rb +1 -1
- data/spec/grammar/ivar_spec.rb +1 -1
- data/spec/grammar/lambda_spec.rb +1 -1
- data/spec/grammar/lasgn_spec.rb +1 -1
- data/spec/grammar/line_spec.rb +1 -1
- data/spec/grammar/lvar_spec.rb +1 -1
- data/spec/grammar/masgn_spec.rb +1 -1
- data/spec/grammar/module_spec.rb +1 -1
- data/spec/grammar/nil_spec.rb +1 -1
- data/spec/grammar/not_spec.rb +1 -1
- data/spec/grammar/op_asgn1_spec.rb +1 -1
- data/spec/grammar/op_asgn2_spec.rb +1 -1
- data/spec/grammar/or_spec.rb +1 -1
- data/spec/grammar/return_spec.rb +1 -1
- data/spec/grammar/sclass_spec.rb +1 -1
- data/spec/grammar/self_spec.rb +1 -1
- data/spec/grammar/str_spec.rb +1 -1
- data/spec/grammar/super_spec.rb +1 -1
- data/spec/grammar/true_spec.rb +1 -1
- data/spec/grammar/undef_spec.rb +1 -1
- data/spec/grammar/unless_spec.rb +1 -1
- data/spec/grammar/while_spec.rb +1 -1
- data/spec/grammar/xstr_spec.rb +1 -1
- data/spec/grammar/yield_spec.rb +1 -1
- data/spec/spec_helper.rb +6 -1
- data/test/core/array/minus_spec.rb +13 -0
- data/test/core/enumerable/drop_while_spec.rb +0 -5
- data/test/core/range/case_compare_spec.rb +0 -1
- data/test/index.html +1 -1
- data/test/index.min.html +12 -0
- data/test/language/alias_spec.rb +0 -4
- data/test/language/fixtures/next.rb +62 -0
- data/test/language/metaclass_spec.rb +4 -4
- data/test/language/next_spec.rb +0 -63
- data/test/language/send_spec.rb +0 -5
- data/test/language/singleton_class_spec.rb +4 -0
- data/test/opal/array/subclassing_spec.rb +1 -1
- data/test/opal/class/bridge_class_spec.rb +2 -2
- data/test/opal/runtime/class_hierarchy_spec.rb +1 -2
- data/test/opal/runtime/method_missing_spec.rb +17 -0
- data/test/spec_helper.rb +4 -1
- metadata +32 -28
- data/docs/CNAME +0 -1
- data/docs/Rakefile +0 -55
- data/docs/css/styles.css +0 -50
- data/docs/css/syntax.css +0 -63
- data/docs/layout/post.html +0 -3
- data/docs/layout/pre.html +0 -11
- data/examples/dependencies/.gitignore +0 -1
- data/examples/dependencies/Gemfile +0 -6
- data/examples/dependencies/README.md +0 -41
- data/examples/dependencies/Rakefile +0 -10
- data/examples/dependencies/app.rb +0 -19
- data/examples/dependencies/build/.gitkeep +0 -0
- data/examples/dependencies/index.html +0 -13
- data/examples/hello_world/.gitignore +0 -1
- data/examples/hello_world/Gemfile +0 -3
- data/examples/hello_world/README.md +0 -27
- data/examples/hello_world/Rakefile +0 -23
- data/examples/hello_world/app.rb +0 -7
- data/examples/hello_world/index.html +0 -12
- data/lib/opal/builder_task.rb +0 -91
- data/spec/builder/build_order_spec.rb +0 -20
- data/test/opal/runtime/_methods_spec.rb +0 -48
data/Rakefile
CHANGED
|
@@ -4,18 +4,21 @@ Bundler.setup
|
|
|
4
4
|
|
|
5
5
|
require 'opal'
|
|
6
6
|
require 'opal/version'
|
|
7
|
+
require 'opal/rake_task'
|
|
7
8
|
|
|
8
|
-
Opal::
|
|
9
|
-
t.
|
|
10
|
-
t.files = []
|
|
11
|
-
t.dependencies = %w[opal-spec opal-dom]
|
|
9
|
+
Opal::RakeTask.new do |t|
|
|
10
|
+
t.dependencies = %w(opal-spec opal-dom)
|
|
12
11
|
t.specs_dir = 'test'
|
|
12
|
+
t.files = [] # we handle this by Opal.runtime instead
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
desc "Build
|
|
16
|
-
task :
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
desc "Build minified runtime, dependencies and specs"
|
|
16
|
+
task :min => :opal do
|
|
17
|
+
%w(opal opal-dom opal-spec specs).each do |f|
|
|
18
|
+
File.open("build/#{f}.min.js", 'w+') do |o|
|
|
19
|
+
puts " * build/#{f}.min.js"
|
|
20
|
+
o.write uglify(File.read "build/#{f}.js")
|
|
21
|
+
end
|
|
19
22
|
end
|
|
20
23
|
end
|
|
21
24
|
|
|
@@ -52,15 +55,54 @@ def gzip(str)
|
|
|
52
55
|
end
|
|
53
56
|
end
|
|
54
57
|
|
|
55
|
-
#
|
|
56
|
-
|
|
57
|
-
|
|
58
|
+
# Test
|
|
59
|
+
require 'rspec/core/rake_task'
|
|
60
|
+
RSpec::Core::RakeTask.new :default
|
|
61
|
+
|
|
62
|
+
namespace :docs do
|
|
63
|
+
desc "Clone repo"
|
|
64
|
+
task :clone do
|
|
65
|
+
if File.exists? 'gh-pages'
|
|
66
|
+
Dir.chdir('gh-pages') { sh 'git pull origin gh-pages' }
|
|
67
|
+
else
|
|
68
|
+
FileUtils.mkdir_p 'gh-pages'
|
|
69
|
+
Dir.chdir('gh-pages') do
|
|
70
|
+
sh 'git clone git@github.com:/adambeynon/opal.git .'
|
|
71
|
+
sh 'git checkout gh-pages'
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
desc "Build README.md => index.html"
|
|
58
77
|
task :build do
|
|
59
|
-
|
|
78
|
+
require 'redcarpet'
|
|
79
|
+
require 'albino'
|
|
80
|
+
|
|
81
|
+
klass = Class.new(Redcarpet::Render::HTML) do
|
|
82
|
+
def block_code(code, language)
|
|
83
|
+
Albino.new(code, language || :text).colorize
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
puts 'gh-pages/index.html'
|
|
88
|
+
markdown = Redcarpet::Markdown.new(klass, :fenced_code_blocks => true)
|
|
89
|
+
|
|
90
|
+
File.open('gh-pages/index.html', 'w+') do |o|
|
|
91
|
+
o.write File.read('docs/pre.html')
|
|
92
|
+
o.write markdown.render(File.read "README.md")
|
|
93
|
+
o.write File.read('docs/post.html')
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
puts "gh-pages/opal.js"
|
|
97
|
+
FileUtils.cp 'build/opal.js', 'gh-pages/opal.js'
|
|
60
98
|
end
|
|
61
99
|
|
|
62
|
-
desc "
|
|
63
|
-
task :
|
|
64
|
-
|
|
100
|
+
desc "commit and push"
|
|
101
|
+
task :push do
|
|
102
|
+
Dir.chdir('gh-pages') do
|
|
103
|
+
sh "git add ."
|
|
104
|
+
sh "git commit -a -m \"Documentation update #{Time.new}\""
|
|
105
|
+
sh "git push origin gh-pages"
|
|
106
|
+
end
|
|
65
107
|
end
|
|
66
|
-
end
|
|
108
|
+
end
|
data/bin/opal
CHANGED
data/core/array.rb
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
+
`Array.prototype._isArray = true`
|
|
2
|
+
|
|
1
3
|
class Array < `Array`
|
|
2
|
-
%x{
|
|
3
|
-
Array_prototype._isArray = true;
|
|
4
|
-
}
|
|
5
4
|
|
|
6
5
|
include Enumerable
|
|
7
6
|
|
|
@@ -15,8 +14,25 @@ class Array < `Array`
|
|
|
15
14
|
}
|
|
16
15
|
end
|
|
17
16
|
|
|
18
|
-
def self.
|
|
19
|
-
|
|
17
|
+
def self.allocate
|
|
18
|
+
%x{
|
|
19
|
+
var arr = [];
|
|
20
|
+
arr.$k = #{self};
|
|
21
|
+
arr.$m = #{self}.$m_tbl;
|
|
22
|
+
return arr;
|
|
23
|
+
}
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def self.new(size, obj = nil)
|
|
27
|
+
arr = allocate
|
|
28
|
+
|
|
29
|
+
%x{
|
|
30
|
+
for (var i = 0; i < size; i++) {
|
|
31
|
+
arr[i] = obj;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
arr
|
|
20
36
|
end
|
|
21
37
|
|
|
22
38
|
def &(other)
|
|
@@ -24,8 +40,8 @@ class Array < `Array`
|
|
|
24
40
|
var result = [],
|
|
25
41
|
seen = {};
|
|
26
42
|
|
|
27
|
-
for (var i = 0, length =
|
|
28
|
-
var item =
|
|
43
|
+
for (var i = 0, length = #{self}.length; i < length; i++) {
|
|
44
|
+
var item = #{self}[i];
|
|
29
45
|
|
|
30
46
|
if (!seen[item]) {
|
|
31
47
|
for (var j = 0, length2 = other.length; j < length2; j++) {
|
|
@@ -47,13 +63,13 @@ class Array < `Array`
|
|
|
47
63
|
def *(other)
|
|
48
64
|
%x{
|
|
49
65
|
if (typeof(other) === 'string') {
|
|
50
|
-
return
|
|
66
|
+
return #{self}.join(other);
|
|
51
67
|
}
|
|
52
68
|
|
|
53
69
|
var result = [];
|
|
54
70
|
|
|
55
|
-
for (var i = 0, length =
|
|
56
|
-
result = result.concat(
|
|
71
|
+
for (var i = 0, length = #{self}.length; i < length; i++) {
|
|
72
|
+
result = result.concat(#{self});
|
|
57
73
|
}
|
|
58
74
|
|
|
59
75
|
return result;
|
|
@@ -61,11 +77,15 @@ class Array < `Array`
|
|
|
61
77
|
end
|
|
62
78
|
|
|
63
79
|
def +(other)
|
|
64
|
-
|
|
80
|
+
`#{self}.slice().concat(other.slice())`
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def -(other)
|
|
84
|
+
reject { |i| other.include? i }
|
|
65
85
|
end
|
|
66
86
|
|
|
67
87
|
def <<(object)
|
|
68
|
-
|
|
88
|
+
`#{self}.push(object);`
|
|
69
89
|
|
|
70
90
|
self
|
|
71
91
|
end
|
|
@@ -76,12 +96,12 @@ class Array < `Array`
|
|
|
76
96
|
return 0;
|
|
77
97
|
}
|
|
78
98
|
|
|
79
|
-
if (
|
|
80
|
-
return (
|
|
99
|
+
if (#{self}.length != other.length) {
|
|
100
|
+
return (#{self}.length > other.length) ? 1 : -1;
|
|
81
101
|
}
|
|
82
102
|
|
|
83
|
-
for (var i = 0, length =
|
|
84
|
-
if ((tmp = #{
|
|
103
|
+
for (var i = 0, length = #{self}.length, tmp; i < length; i++) {
|
|
104
|
+
if ((tmp = #{`#{self}[i]` <=> `other[i]`}) !== 0) {
|
|
85
105
|
return tmp;
|
|
86
106
|
}
|
|
87
107
|
}
|
|
@@ -92,12 +112,12 @@ class Array < `Array`
|
|
|
92
112
|
|
|
93
113
|
def ==(other)
|
|
94
114
|
%x{
|
|
95
|
-
if (!other || (
|
|
115
|
+
if (!other || (#{self}.length !== other.length)) {
|
|
96
116
|
return false;
|
|
97
117
|
}
|
|
98
118
|
|
|
99
|
-
for (var i = 0, length =
|
|
100
|
-
if (!#{
|
|
119
|
+
for (var i = 0, length = #{self}.length; i < length; i++) {
|
|
120
|
+
if (!#{`#{self}[i]` == `other[i]`}) {
|
|
101
121
|
return false;
|
|
102
122
|
}
|
|
103
123
|
}
|
|
@@ -109,7 +129,7 @@ class Array < `Array`
|
|
|
109
129
|
# TODO: does not yet work with ranges
|
|
110
130
|
def [](index, length = undefined)
|
|
111
131
|
%x{
|
|
112
|
-
var size =
|
|
132
|
+
var size = #{self}.length;
|
|
113
133
|
|
|
114
134
|
if (typeof index !== 'number') {
|
|
115
135
|
if (index._isRange) {
|
|
@@ -126,7 +146,7 @@ class Array < `Array`
|
|
|
126
146
|
}
|
|
127
147
|
|
|
128
148
|
if (!exclude) length += 1;
|
|
129
|
-
return
|
|
149
|
+
return #{self}.slice(index, length);
|
|
130
150
|
}
|
|
131
151
|
else {
|
|
132
152
|
#{ raise "bad arg for Array#[]" };
|
|
@@ -142,14 +162,14 @@ class Array < `Array`
|
|
|
142
162
|
return nil;
|
|
143
163
|
}
|
|
144
164
|
|
|
145
|
-
return
|
|
165
|
+
return #{self}.slice(index, index + length);
|
|
146
166
|
}
|
|
147
167
|
else {
|
|
148
168
|
if (index >= size || index < 0) {
|
|
149
169
|
return nil;
|
|
150
170
|
}
|
|
151
171
|
|
|
152
|
-
return
|
|
172
|
+
return #{self}[index];
|
|
153
173
|
}
|
|
154
174
|
}
|
|
155
175
|
end
|
|
@@ -157,20 +177,20 @@ class Array < `Array`
|
|
|
157
177
|
# TODO: need to expand functionality
|
|
158
178
|
def []=(index, value)
|
|
159
179
|
%x{
|
|
160
|
-
var size =
|
|
180
|
+
var size = #{self}.length;
|
|
161
181
|
|
|
162
182
|
if (index < 0) {
|
|
163
183
|
index += size;
|
|
164
184
|
}
|
|
165
185
|
|
|
166
|
-
return
|
|
186
|
+
return #{self}[index] = value;
|
|
167
187
|
}
|
|
168
188
|
end
|
|
169
189
|
|
|
170
190
|
def assoc(object)
|
|
171
191
|
%x{
|
|
172
|
-
for (var i = 0, length =
|
|
173
|
-
if (item =
|
|
192
|
+
for (var i = 0, length = #{self}.length, item; i < length; i++) {
|
|
193
|
+
if (item = #{self}[i], item.length && #{`item[0]` == object}) {
|
|
174
194
|
return item;
|
|
175
195
|
}
|
|
176
196
|
}
|
|
@@ -182,25 +202,25 @@ class Array < `Array`
|
|
|
182
202
|
def at(index)
|
|
183
203
|
%x{
|
|
184
204
|
if (index < 0) {
|
|
185
|
-
index +=
|
|
205
|
+
index += #{self}.length;
|
|
186
206
|
}
|
|
187
207
|
|
|
188
|
-
if (index < 0 || index >=
|
|
208
|
+
if (index < 0 || index >= #{self}.length) {
|
|
189
209
|
return nil;
|
|
190
210
|
}
|
|
191
211
|
|
|
192
|
-
return
|
|
212
|
+
return #{self}[index];
|
|
193
213
|
}
|
|
194
214
|
end
|
|
195
215
|
|
|
196
216
|
def clear
|
|
197
|
-
|
|
217
|
+
`#{self}.splice(0);`
|
|
198
218
|
|
|
199
219
|
self
|
|
200
220
|
end
|
|
201
221
|
|
|
202
222
|
def clone
|
|
203
|
-
|
|
223
|
+
`#{self}.slice()`
|
|
204
224
|
end
|
|
205
225
|
|
|
206
226
|
def collect(&block)
|
|
@@ -209,8 +229,8 @@ class Array < `Array`
|
|
|
209
229
|
%x{
|
|
210
230
|
var result = [];
|
|
211
231
|
|
|
212
|
-
for (var i = 0, length =
|
|
213
|
-
if ((value = block
|
|
232
|
+
for (var i = 0, length = #{self}.length, value; i < length; i++) {
|
|
233
|
+
if ((value = block(__context, #{self}[i])) === __breaker) {
|
|
214
234
|
return __breaker.$v;
|
|
215
235
|
}
|
|
216
236
|
|
|
@@ -225,12 +245,12 @@ class Array < `Array`
|
|
|
225
245
|
return enum_for :collect! unless block_given?
|
|
226
246
|
|
|
227
247
|
%x{
|
|
228
|
-
for (var i = 0, length =
|
|
229
|
-
if ((val = block
|
|
248
|
+
for (var i = 0, length = #{self}.length, val; i < length; i++) {
|
|
249
|
+
if ((val = block(__context, #{self}[i])) === __breaker) {
|
|
230
250
|
return __breaker.$v;
|
|
231
251
|
}
|
|
232
252
|
|
|
233
|
-
|
|
253
|
+
#{self}[i] = val;
|
|
234
254
|
}
|
|
235
255
|
}
|
|
236
256
|
|
|
@@ -241,8 +261,8 @@ class Array < `Array`
|
|
|
241
261
|
%x{
|
|
242
262
|
var result = [];
|
|
243
263
|
|
|
244
|
-
for (var i = 0, length =
|
|
245
|
-
if ((item =
|
|
264
|
+
for (var i = 0, length = #{self}.length, item; i < length; i++) {
|
|
265
|
+
if ((item = #{self}[i]) !== nil) {
|
|
246
266
|
result.push(item);
|
|
247
267
|
}
|
|
248
268
|
}
|
|
@@ -253,25 +273,25 @@ class Array < `Array`
|
|
|
253
273
|
|
|
254
274
|
def compact!
|
|
255
275
|
%x{
|
|
256
|
-
var original =
|
|
276
|
+
var original = #{self}.length;
|
|
257
277
|
|
|
258
|
-
for (var i = 0, length =
|
|
259
|
-
if (
|
|
260
|
-
|
|
278
|
+
for (var i = 0, length = #{self}.length; i < length; i++) {
|
|
279
|
+
if (#{self}[i] === nil) {
|
|
280
|
+
#{self}.splice(i, 1);
|
|
261
281
|
|
|
262
282
|
length--;
|
|
263
283
|
i--;
|
|
264
284
|
}
|
|
265
285
|
}
|
|
266
286
|
|
|
267
|
-
return
|
|
287
|
+
return #{self}.length === original ? nil : #{self};
|
|
268
288
|
}
|
|
269
289
|
end
|
|
270
290
|
|
|
271
291
|
def concat(other)
|
|
272
292
|
%x{
|
|
273
293
|
for (var i = 0, length = other.length; i < length; i++) {
|
|
274
|
-
|
|
294
|
+
#{self}.push(other[i]);
|
|
275
295
|
}
|
|
276
296
|
}
|
|
277
297
|
|
|
@@ -281,13 +301,13 @@ class Array < `Array`
|
|
|
281
301
|
def count(object)
|
|
282
302
|
%x{
|
|
283
303
|
if (object == null) {
|
|
284
|
-
return
|
|
304
|
+
return #{self}.length;
|
|
285
305
|
}
|
|
286
306
|
|
|
287
307
|
var result = 0;
|
|
288
308
|
|
|
289
|
-
for (var i = 0, length =
|
|
290
|
-
if (#{
|
|
309
|
+
for (var i = 0, length = #{self}.length; i < length; i++) {
|
|
310
|
+
if (#{`#{self}[i]` == object}) {
|
|
291
311
|
result++;
|
|
292
312
|
}
|
|
293
313
|
}
|
|
@@ -298,34 +318,34 @@ class Array < `Array`
|
|
|
298
318
|
|
|
299
319
|
def delete(object)
|
|
300
320
|
%x{
|
|
301
|
-
var original =
|
|
321
|
+
var original = #{self}.length;
|
|
302
322
|
|
|
303
323
|
for (var i = 0, length = original; i < length; i++) {
|
|
304
|
-
if (#{
|
|
305
|
-
|
|
324
|
+
if (#{`#{self}[i]` == object}) {
|
|
325
|
+
#{self}.splice(i, 1);
|
|
306
326
|
|
|
307
327
|
length--;
|
|
308
328
|
i--;
|
|
309
329
|
}
|
|
310
330
|
}
|
|
311
331
|
|
|
312
|
-
return
|
|
332
|
+
return #{self}.length === original ? nil : object;
|
|
313
333
|
}
|
|
314
334
|
end
|
|
315
335
|
|
|
316
336
|
def delete_at(index)
|
|
317
337
|
%x{
|
|
318
338
|
if (index < 0) {
|
|
319
|
-
index +=
|
|
339
|
+
index += #{self}.length;
|
|
320
340
|
}
|
|
321
341
|
|
|
322
|
-
if (index < 0 || index >=
|
|
342
|
+
if (index < 0 || index >= #{self}.length) {
|
|
323
343
|
return nil;
|
|
324
344
|
}
|
|
325
345
|
|
|
326
|
-
var result =
|
|
346
|
+
var result = #{self}[index];
|
|
327
347
|
|
|
328
|
-
|
|
348
|
+
#{self}.splice(index, 1);
|
|
329
349
|
|
|
330
350
|
return result;
|
|
331
351
|
}
|
|
@@ -335,13 +355,13 @@ class Array < `Array`
|
|
|
335
355
|
return enum_for :delete_if unless block_given?
|
|
336
356
|
|
|
337
357
|
%x{
|
|
338
|
-
for (var i = 0, length =
|
|
339
|
-
if ((value = block
|
|
358
|
+
for (var i = 0, length = #{self}.length, value; i < length; i++) {
|
|
359
|
+
if ((value = block(__context, #{self}[i])) === __breaker) {
|
|
340
360
|
return __breaker.$v;
|
|
341
361
|
}
|
|
342
362
|
|
|
343
363
|
if (value !== false && value !== nil) {
|
|
344
|
-
|
|
364
|
+
#{self}.splice(i, 1);
|
|
345
365
|
|
|
346
366
|
length--;
|
|
347
367
|
i--;
|
|
@@ -353,20 +373,20 @@ class Array < `Array`
|
|
|
353
373
|
end
|
|
354
374
|
|
|
355
375
|
def drop(number)
|
|
356
|
-
|
|
376
|
+
`#{self}.slice(number)`
|
|
357
377
|
end
|
|
358
378
|
|
|
359
379
|
def drop_while(&block)
|
|
360
380
|
return enum_for :drop_while unless block_given?
|
|
361
381
|
|
|
362
382
|
%x{
|
|
363
|
-
for (var i = 0, length =
|
|
364
|
-
if ((value = block.call(__context,
|
|
383
|
+
for (var i = 0, length = #{self}.length, value; i < length; i++) {
|
|
384
|
+
if ((value = block.call(__context, #{self}[i])) === __breaker) {
|
|
365
385
|
return __breaker.$v;
|
|
366
386
|
}
|
|
367
387
|
|
|
368
388
|
if (value === false || value === nil) {
|
|
369
|
-
return
|
|
389
|
+
return #{self}.slice(i);
|
|
370
390
|
}
|
|
371
391
|
}
|
|
372
392
|
|
|
@@ -379,8 +399,8 @@ class Array < `Array`
|
|
|
379
399
|
def each(&block)
|
|
380
400
|
return enum_for :each unless block_given?
|
|
381
401
|
|
|
382
|
-
`for (var i = 0, length =
|
|
383
|
-
yield
|
|
402
|
+
`for (var i = 0, length = #{self}.length; i < length; i++) {`
|
|
403
|
+
yield `#{self}[i]`
|
|
384
404
|
`}`
|
|
385
405
|
|
|
386
406
|
self
|
|
@@ -389,7 +409,7 @@ class Array < `Array`
|
|
|
389
409
|
def each_index(&block)
|
|
390
410
|
return enum_for :each_index unless block_given?
|
|
391
411
|
|
|
392
|
-
`for (var i = 0, length =
|
|
412
|
+
`for (var i = 0, length = #{self}.length; i < length; i++) {`
|
|
393
413
|
yield `i`
|
|
394
414
|
`}`
|
|
395
415
|
|
|
@@ -399,15 +419,15 @@ class Array < `Array`
|
|
|
399
419
|
def each_with_index(&block)
|
|
400
420
|
return enum_for :each_with_index unless block_given?
|
|
401
421
|
|
|
402
|
-
`for (var i = 0, length =
|
|
403
|
-
yield
|
|
422
|
+
`for (var i = 0, length = #{self}.length; i < length; i++) {`
|
|
423
|
+
yield `#{self}[i]`, `i`
|
|
404
424
|
`}`
|
|
405
425
|
|
|
406
426
|
self
|
|
407
427
|
end
|
|
408
428
|
|
|
409
429
|
def empty?
|
|
410
|
-
|
|
430
|
+
`!#{self}.length`
|
|
411
431
|
end
|
|
412
432
|
|
|
413
433
|
def fetch(index, defaults, &block)
|
|
@@ -415,11 +435,11 @@ class Array < `Array`
|
|
|
415
435
|
var original = index;
|
|
416
436
|
|
|
417
437
|
if (index < 0) {
|
|
418
|
-
index +=
|
|
438
|
+
index += #{self}.length;
|
|
419
439
|
}
|
|
420
440
|
|
|
421
|
-
if (index >= 0 && index <
|
|
422
|
-
return
|
|
441
|
+
if (index >= 0 && index < #{self}.length) {
|
|
442
|
+
return #{self}[index];
|
|
423
443
|
}
|
|
424
444
|
|
|
425
445
|
if (defaults != null) {
|
|
@@ -437,10 +457,10 @@ class Array < `Array`
|
|
|
437
457
|
def first(count)
|
|
438
458
|
%x{
|
|
439
459
|
if (count != null) {
|
|
440
|
-
return
|
|
460
|
+
return #{self}.slice(0, count);
|
|
441
461
|
}
|
|
442
462
|
|
|
443
|
-
return
|
|
463
|
+
return #{self}.length === 0 ? nil : #{self}[0];
|
|
444
464
|
}
|
|
445
465
|
end
|
|
446
466
|
|
|
@@ -448,8 +468,8 @@ class Array < `Array`
|
|
|
448
468
|
%x{
|
|
449
469
|
var result = [];
|
|
450
470
|
|
|
451
|
-
for (var i = 0, length =
|
|
452
|
-
item =
|
|
471
|
+
for (var i = 0, length = #{self}.length, item; i < length; i++) {
|
|
472
|
+
item = #{self}[i];
|
|
453
473
|
|
|
454
474
|
if (item._isArray) {
|
|
455
475
|
if (level == null) {
|
|
@@ -473,10 +493,10 @@ class Array < `Array`
|
|
|
473
493
|
|
|
474
494
|
def flatten!(level)
|
|
475
495
|
%x{
|
|
476
|
-
var size =
|
|
496
|
+
var size = #{self}.length;
|
|
477
497
|
#{replace flatten level};
|
|
478
498
|
|
|
479
|
-
return size ===
|
|
499
|
+
return size === #{self}.length ? nil : #{self};
|
|
480
500
|
}
|
|
481
501
|
end
|
|
482
502
|
|
|
@@ -484,8 +504,8 @@ class Array < `Array`
|
|
|
484
504
|
%x{
|
|
485
505
|
var result = [];
|
|
486
506
|
|
|
487
|
-
for (var i = 0, length =
|
|
488
|
-
item =
|
|
507
|
+
for (var i = 0, length = #{self}.length, item; i < length; i++) {
|
|
508
|
+
item = #{self}[i];
|
|
489
509
|
|
|
490
510
|
if (#{ pattern === `item` }) {
|
|
491
511
|
result.push(item);
|
|
@@ -497,13 +517,13 @@ class Array < `Array`
|
|
|
497
517
|
end
|
|
498
518
|
|
|
499
519
|
def hash
|
|
500
|
-
|
|
520
|
+
`#{self}._id || (#{self}._id = unique_id++)`
|
|
501
521
|
end
|
|
502
522
|
|
|
503
523
|
def include?(member)
|
|
504
524
|
%x{
|
|
505
|
-
for (var i = 0, length =
|
|
506
|
-
if (#{
|
|
525
|
+
for (var i = 0, length = #{self}.length; i < length; i++) {
|
|
526
|
+
if (#{`#{self}[i]` == member}) {
|
|
507
527
|
return true;
|
|
508
528
|
}
|
|
509
529
|
}
|
|
@@ -517,8 +537,8 @@ class Array < `Array`
|
|
|
517
537
|
|
|
518
538
|
%x{
|
|
519
539
|
if (block !== nil) {
|
|
520
|
-
for (var i = 0, length =
|
|
521
|
-
if ((value = block
|
|
540
|
+
for (var i = 0, length = #{self}.length, value; i < length; i++) {
|
|
541
|
+
if ((value = block(__context, '', #{self}[i])) === __breaker) {
|
|
522
542
|
return __breaker.$v;
|
|
523
543
|
}
|
|
524
544
|
|
|
@@ -528,8 +548,8 @@ class Array < `Array`
|
|
|
528
548
|
}
|
|
529
549
|
}
|
|
530
550
|
else {
|
|
531
|
-
for (var i = 0, length =
|
|
532
|
-
if (#{
|
|
551
|
+
for (var i = 0, length = #{self}.length; i < length; i++) {
|
|
552
|
+
if (#{`#{self}[i]` == object}) {
|
|
533
553
|
return i;
|
|
534
554
|
}
|
|
535
555
|
}
|
|
@@ -546,14 +566,14 @@ class Array < `Array`
|
|
|
546
566
|
var result, i;
|
|
547
567
|
|
|
548
568
|
if (initial == null) {
|
|
549
|
-
result =
|
|
569
|
+
result = #{self}[0], i = 1;
|
|
550
570
|
}
|
|
551
571
|
else {
|
|
552
572
|
result = initial, i = 0;
|
|
553
573
|
}
|
|
554
574
|
|
|
555
|
-
for (var length =
|
|
556
|
-
if ((value = block.call(__context, result,
|
|
575
|
+
for (var length = #{self}.length, value; i < length; i++) {
|
|
576
|
+
if ((value = block.call(__context, result, #{self}[i])) === __breaker) {
|
|
557
577
|
return __breaker.$v;
|
|
558
578
|
}
|
|
559
579
|
|
|
@@ -568,19 +588,19 @@ class Array < `Array`
|
|
|
568
588
|
%x{
|
|
569
589
|
if (objects.length > 0) {
|
|
570
590
|
if (index < 0) {
|
|
571
|
-
index +=
|
|
591
|
+
index += #{self}.length + 1;
|
|
572
592
|
|
|
573
593
|
if (index < 0) {
|
|
574
594
|
#{ raise "#{index} is out of bounds" };
|
|
575
595
|
}
|
|
576
596
|
}
|
|
577
|
-
if (index >
|
|
578
|
-
for (var i =
|
|
579
|
-
|
|
597
|
+
if (index > #{self}.length) {
|
|
598
|
+
for (var i = #{self}.length; i < index; i++) {
|
|
599
|
+
#{self}.push(nil);
|
|
580
600
|
}
|
|
581
601
|
}
|
|
582
602
|
|
|
583
|
-
|
|
603
|
+
#{self}.splice.apply(#{self}, [index, 0].concat(objects));
|
|
584
604
|
}
|
|
585
605
|
}
|
|
586
606
|
|
|
@@ -591,8 +611,8 @@ class Array < `Array`
|
|
|
591
611
|
%x{
|
|
592
612
|
var inspect = [];
|
|
593
613
|
|
|
594
|
-
for (var i = 0, length =
|
|
595
|
-
inspect.push(#{
|
|
614
|
+
for (var i = 0, length = #{self}.length; i < length; i++) {
|
|
615
|
+
inspect.push(#{`#{self}[i]`.inspect});
|
|
596
616
|
}
|
|
597
617
|
|
|
598
618
|
return '[' + inspect.join(', ') + ']';
|
|
@@ -603,8 +623,8 @@ class Array < `Array`
|
|
|
603
623
|
%x{
|
|
604
624
|
var result = [];
|
|
605
625
|
|
|
606
|
-
for (var i = 0, length =
|
|
607
|
-
result.push(#{
|
|
626
|
+
for (var i = 0, length = #{self}.length; i < length; i++) {
|
|
627
|
+
result.push(#{`#{self}[i]`.to_s});
|
|
608
628
|
}
|
|
609
629
|
|
|
610
630
|
return result.join(sep);
|
|
@@ -614,13 +634,13 @@ class Array < `Array`
|
|
|
614
634
|
def keep_if(&block)
|
|
615
635
|
return enum_for :keep_if unless block_given?
|
|
616
636
|
%x{
|
|
617
|
-
for (var i = 0, length =
|
|
618
|
-
if ((value = block.call(__context,
|
|
637
|
+
for (var i = 0, length = #{self}.length, value; i < length; i++) {
|
|
638
|
+
if ((value = block.call(__context, #{self}[i])) === __breaker) {
|
|
619
639
|
return __breaker.$v;
|
|
620
640
|
}
|
|
621
641
|
|
|
622
642
|
if (value === false || value === nil) {
|
|
623
|
-
|
|
643
|
+
#{self}.splice(i, 1);
|
|
624
644
|
|
|
625
645
|
length--;
|
|
626
646
|
i--;
|
|
@@ -633,10 +653,10 @@ class Array < `Array`
|
|
|
633
653
|
|
|
634
654
|
def last(count)
|
|
635
655
|
%x{
|
|
636
|
-
var length =
|
|
656
|
+
var length = #{self}.length;
|
|
637
657
|
|
|
638
658
|
if (count == null) {
|
|
639
|
-
return length === 0 ? nil :
|
|
659
|
+
return length === 0 ? nil : #{self}[length - 1];
|
|
640
660
|
}
|
|
641
661
|
else if (count < 0) {
|
|
642
662
|
#{ raise "negative count given" };
|
|
@@ -646,12 +666,12 @@ class Array < `Array`
|
|
|
646
666
|
count = length;
|
|
647
667
|
}
|
|
648
668
|
|
|
649
|
-
return
|
|
669
|
+
return #{self}.slice(length - count, length);
|
|
650
670
|
}
|
|
651
671
|
end
|
|
652
672
|
|
|
653
673
|
def length
|
|
654
|
-
|
|
674
|
+
`#{self}.length`
|
|
655
675
|
end
|
|
656
676
|
|
|
657
677
|
alias map collect
|
|
@@ -660,24 +680,24 @@ class Array < `Array`
|
|
|
660
680
|
|
|
661
681
|
def pop(count)
|
|
662
682
|
%x{
|
|
663
|
-
var length =
|
|
683
|
+
var length = #{self}.length;
|
|
664
684
|
|
|
665
685
|
if (count == null) {
|
|
666
|
-
return length === 0 ? nil :
|
|
686
|
+
return length === 0 ? nil : #{self}.pop();
|
|
667
687
|
}
|
|
668
688
|
|
|
669
689
|
if (count < 0) {
|
|
670
690
|
#{ raise "negative count given" };
|
|
671
691
|
}
|
|
672
692
|
|
|
673
|
-
return count > length ?
|
|
693
|
+
return count > length ? #{self}.splice(0) : #{self}.splice(length - count, length);
|
|
674
694
|
}
|
|
675
695
|
end
|
|
676
696
|
|
|
677
697
|
def push(*objects)
|
|
678
698
|
%x{
|
|
679
699
|
for (var i = 0, length = objects.length; i < length; i++) {
|
|
680
|
-
|
|
700
|
+
#{self}.push(objects[i]);
|
|
681
701
|
}
|
|
682
702
|
}
|
|
683
703
|
|
|
@@ -686,8 +706,8 @@ class Array < `Array`
|
|
|
686
706
|
|
|
687
707
|
def rassoc(object)
|
|
688
708
|
%x{
|
|
689
|
-
for (var i = 0, length =
|
|
690
|
-
item =
|
|
709
|
+
for (var i = 0, length = #{self}.length, item; i < length; i++) {
|
|
710
|
+
item = #{self}[i];
|
|
691
711
|
|
|
692
712
|
if (item.length && item[1] !== undefined) {
|
|
693
713
|
if (#{`item[1]` == object}) {
|
|
@@ -706,13 +726,13 @@ class Array < `Array`
|
|
|
706
726
|
%x{
|
|
707
727
|
var result = [];
|
|
708
728
|
|
|
709
|
-
for (var i = 0, length =
|
|
710
|
-
if ((value = block
|
|
729
|
+
for (var i = 0, length = #{self}.length, value; i < length; i++) {
|
|
730
|
+
if ((value = block(__context, #{self}[i])) === __breaker) {
|
|
711
731
|
return __breaker.$v;
|
|
712
732
|
}
|
|
713
733
|
|
|
714
734
|
if (value === false || value === nil) {
|
|
715
|
-
result.push(
|
|
735
|
+
result.push(#{self}[i]);
|
|
716
736
|
}
|
|
717
737
|
}
|
|
718
738
|
return result;
|
|
@@ -723,42 +743,42 @@ class Array < `Array`
|
|
|
723
743
|
return enum_for :reject! unless block_given?
|
|
724
744
|
|
|
725
745
|
%x{
|
|
726
|
-
var original =
|
|
746
|
+
var original = #{self}.length;
|
|
727
747
|
|
|
728
|
-
for (var i = 0, length =
|
|
729
|
-
if ((value = block
|
|
748
|
+
for (var i = 0, length = #{self}.length, value; i < length; i++) {
|
|
749
|
+
if ((value = block(__context, #{self}[i])) === __breaker) {
|
|
730
750
|
return __breaker.$v;
|
|
731
751
|
}
|
|
732
752
|
|
|
733
753
|
if (value !== false && value !== nil) {
|
|
734
|
-
|
|
754
|
+
#{self}.splice(i, 1);
|
|
735
755
|
|
|
736
756
|
length--;
|
|
737
757
|
i--;
|
|
738
758
|
}
|
|
739
759
|
}
|
|
740
760
|
|
|
741
|
-
return original ===
|
|
761
|
+
return original === #{self}.length ? nil : #{self};
|
|
742
762
|
}
|
|
743
763
|
end
|
|
744
764
|
|
|
745
765
|
def replace(other)
|
|
746
766
|
%x{
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
return
|
|
767
|
+
#{self}.splice(0);
|
|
768
|
+
#{self}.push.apply(#{self}, other);
|
|
769
|
+
return #{self};
|
|
750
770
|
}
|
|
751
771
|
end
|
|
752
772
|
|
|
753
773
|
def reverse
|
|
754
|
-
|
|
774
|
+
`#{self}.reverse()`
|
|
755
775
|
end
|
|
756
776
|
|
|
757
777
|
def reverse!
|
|
758
778
|
%x{
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
return
|
|
779
|
+
#{self}.splice(0);
|
|
780
|
+
#{self}.push.apply(#{self}, #{reverse});
|
|
781
|
+
return #{self};
|
|
762
782
|
}
|
|
763
783
|
end
|
|
764
784
|
|
|
@@ -775,8 +795,8 @@ class Array < `Array`
|
|
|
775
795
|
|
|
776
796
|
%x{
|
|
777
797
|
if (block !== nil) {
|
|
778
|
-
for (var i =
|
|
779
|
-
if ((value = block.call(__context,
|
|
798
|
+
for (var i = #{self}.length - 1, value; i >= 0; i--) {
|
|
799
|
+
if ((value = block.call(__context, #{self}[i])) === __breaker) {
|
|
780
800
|
return __breaker.$v;
|
|
781
801
|
}
|
|
782
802
|
|
|
@@ -786,8 +806,8 @@ class Array < `Array`
|
|
|
786
806
|
}
|
|
787
807
|
}
|
|
788
808
|
else {
|
|
789
|
-
for (var i =
|
|
790
|
-
if (#{
|
|
809
|
+
for (var i = #{self}.length - 1; i >= 0; i--) {
|
|
810
|
+
if (#{`#{self}[i]` == `object`}) {
|
|
791
811
|
return i;
|
|
792
812
|
}
|
|
793
813
|
}
|
|
@@ -803,8 +823,8 @@ class Array < `Array`
|
|
|
803
823
|
%x{
|
|
804
824
|
var result = [];
|
|
805
825
|
|
|
806
|
-
for (var i = 0, length =
|
|
807
|
-
item =
|
|
826
|
+
for (var i = 0, length = #{self}.length, item, value; i < length; i++) {
|
|
827
|
+
item = #{self}[i];
|
|
808
828
|
|
|
809
829
|
if ((value = block.call(__context, item)) === __breaker) {
|
|
810
830
|
return __breaker.$v;
|
|
@@ -822,29 +842,29 @@ class Array < `Array`
|
|
|
822
842
|
def select!(&block)
|
|
823
843
|
return enum_for :select! unless block_given?
|
|
824
844
|
%x{
|
|
825
|
-
var original =
|
|
845
|
+
var original = #{self}.length;
|
|
826
846
|
|
|
827
847
|
for (var i = 0, length = original, item, value; i < length; i++) {
|
|
828
|
-
item =
|
|
848
|
+
item = #{self}[i];
|
|
829
849
|
|
|
830
850
|
if ((value = block.call(__context, item)) === __breaker) {
|
|
831
851
|
return __breaker.$v;
|
|
832
852
|
}
|
|
833
853
|
|
|
834
854
|
if (value === false || value === nil) {
|
|
835
|
-
|
|
855
|
+
#{self}.splice(i, 1);
|
|
836
856
|
|
|
837
857
|
length--;
|
|
838
858
|
i--;
|
|
839
859
|
}
|
|
840
860
|
}
|
|
841
861
|
|
|
842
|
-
return
|
|
862
|
+
return #{self}.length === original ? nil : #{self};
|
|
843
863
|
}
|
|
844
864
|
end
|
|
845
865
|
|
|
846
866
|
def shift(count)
|
|
847
|
-
`count == null ?
|
|
867
|
+
`count == null ? #{self}.shift() : #{self}.splice(0, count)`
|
|
848
868
|
end
|
|
849
869
|
|
|
850
870
|
alias size length
|
|
@@ -854,23 +874,23 @@ class Array < `Array`
|
|
|
854
874
|
def slice!(index, length)
|
|
855
875
|
%x{
|
|
856
876
|
if (index < 0) {
|
|
857
|
-
index +=
|
|
877
|
+
index += #{self}.length;
|
|
858
878
|
}
|
|
859
879
|
|
|
860
|
-
if (index < 0 || index >=
|
|
880
|
+
if (index < 0 || index >= #{self}.length) {
|
|
861
881
|
return nil;
|
|
862
882
|
}
|
|
863
883
|
|
|
864
884
|
if (length != null) {
|
|
865
|
-
return
|
|
885
|
+
return #{self}.splice(index, index + length);
|
|
866
886
|
}
|
|
867
887
|
|
|
868
|
-
return
|
|
888
|
+
return #{self}.splice(index, 1)[0];
|
|
869
889
|
}
|
|
870
890
|
end
|
|
871
891
|
|
|
872
892
|
def take(count)
|
|
873
|
-
|
|
893
|
+
`#{self}.slice(0, count)`
|
|
874
894
|
end
|
|
875
895
|
|
|
876
896
|
def take_while(&block)
|
|
@@ -879,8 +899,8 @@ class Array < `Array`
|
|
|
879
899
|
%x{
|
|
880
900
|
var result = [];
|
|
881
901
|
|
|
882
|
-
for (var i = 0, length =
|
|
883
|
-
item =
|
|
902
|
+
for (var i = 0, length = #{self}.length, item, value; i < length; i++) {
|
|
903
|
+
item = #{self}[i];
|
|
884
904
|
|
|
885
905
|
if ((value = block.call(__context, item)) === __breaker) {
|
|
886
906
|
return __breaker.$v;
|
|
@@ -907,8 +927,8 @@ class Array < `Array`
|
|
|
907
927
|
%x{
|
|
908
928
|
var result = [];
|
|
909
929
|
|
|
910
|
-
for (var i = 0, length =
|
|
911
|
-
result.push(#{
|
|
930
|
+
for (var i = 0, length = #{self}.length; i < length; i++) {
|
|
931
|
+
result.push(#{ `#{self}[i]`.to_json });
|
|
912
932
|
}
|
|
913
933
|
|
|
914
934
|
return '[' + result.join(', ') + ']';
|
|
@@ -922,9 +942,9 @@ class Array < `Array`
|
|
|
922
942
|
var result = [],
|
|
923
943
|
seen = {};
|
|
924
944
|
|
|
925
|
-
for (var i = 0, length =
|
|
926
|
-
item =
|
|
927
|
-
hash = item
|
|
945
|
+
for (var i = 0, length = #{self}.length, item, hash; i < length; i++) {
|
|
946
|
+
item = #{self}[i];
|
|
947
|
+
hash = item;
|
|
928
948
|
|
|
929
949
|
if (!seen[hash]) {
|
|
930
950
|
seen[hash] = true;
|
|
@@ -939,44 +959,44 @@ class Array < `Array`
|
|
|
939
959
|
|
|
940
960
|
def uniq!
|
|
941
961
|
%x{
|
|
942
|
-
var original =
|
|
962
|
+
var original = #{self}.length,
|
|
943
963
|
seen = {};
|
|
944
964
|
|
|
945
965
|
for (var i = 0, length = original, item, hash; i < length; i++) {
|
|
946
|
-
item =
|
|
947
|
-
hash = item
|
|
966
|
+
item = #{self}[i];
|
|
967
|
+
hash = item;
|
|
948
968
|
|
|
949
969
|
if (!seen[hash]) {
|
|
950
970
|
seen[hash] = true;
|
|
951
971
|
}
|
|
952
972
|
else {
|
|
953
|
-
|
|
973
|
+
#{self}.splice(i, 1);
|
|
954
974
|
|
|
955
975
|
length--;
|
|
956
976
|
i--;
|
|
957
977
|
}
|
|
958
978
|
}
|
|
959
979
|
|
|
960
|
-
return
|
|
980
|
+
return #{self}.length === original ? nil : #{self};
|
|
961
981
|
}
|
|
962
982
|
end
|
|
963
983
|
|
|
964
984
|
def unshift(*objects)
|
|
965
985
|
%x{
|
|
966
986
|
for (var i = 0, length = objects.length; i < length; i++) {
|
|
967
|
-
|
|
987
|
+
#{self}.unshift(objects[i]);
|
|
968
988
|
}
|
|
969
989
|
|
|
970
|
-
return
|
|
990
|
+
return #{self};
|
|
971
991
|
}
|
|
972
992
|
end
|
|
973
993
|
|
|
974
994
|
def zip(*others, &block)
|
|
975
995
|
%x{
|
|
976
|
-
var result = [], size =
|
|
996
|
+
var result = [], size = #{self}.length, part, o;
|
|
977
997
|
|
|
978
998
|
for (var i = 0; i < size; i++) {
|
|
979
|
-
part = [
|
|
999
|
+
part = [#{self}[i]];
|
|
980
1000
|
|
|
981
1001
|
for (var j = 0, jj = others.length; j < jj; j++) {
|
|
982
1002
|
o = others[j][i];
|
|
@@ -993,7 +1013,7 @@ class Array < `Array`
|
|
|
993
1013
|
|
|
994
1014
|
if (block !== nil) {
|
|
995
1015
|
for (var i = 0; i < size; i++) {
|
|
996
|
-
block
|
|
1016
|
+
block(__context, result[i]);
|
|
997
1017
|
}
|
|
998
1018
|
|
|
999
1019
|
return nil;
|