opal 0.3.15 → 0.3.16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (236) hide show
  1. data/.gitignore +1 -1
  2. data/Gemfile +8 -2
  3. data/README.md +1 -1
  4. data/Rakefile +51 -57
  5. data/bin/opal +50 -2
  6. data/{runtime/corelib → core}/alpha.rb +6 -1
  7. data/{runtime/corelib → core}/array.rb +38 -42
  8. data/{runtime/corelib → core}/basic_object.rb +6 -17
  9. data/core/boolean.rb +40 -0
  10. data/core/class.rb +69 -0
  11. data/{runtime/corelib → core}/comparable.rb +0 -0
  12. data/core/debug.js +59 -0
  13. data/core/debug.rb +35 -0
  14. data/core/dir.rb +90 -0
  15. data/core/enumerable.rb +331 -0
  16. data/core/enumerator.rb +126 -0
  17. data/core/error.rb +40 -0
  18. data/{runtime/corelib → core}/file.rb +6 -3
  19. data/core/gemlib.rb +30 -0
  20. data/{runtime/corelib → core}/hash.rb +37 -35
  21. data/{runtime/corelib → core}/io.rb +0 -0
  22. data/{runtime/corelib → core}/kernel.rb +26 -21
  23. data/{runtime/corelib → core}/load_order +2 -5
  24. data/{runtime/corelib → core}/match_data.rb +2 -4
  25. data/core/module.rb +204 -0
  26. data/{runtime/corelib → core}/nil_class.rb +1 -7
  27. data/{runtime/corelib → core}/numeric.rb +9 -13
  28. data/core/object.rb +17 -0
  29. data/{runtime/corelib → core}/proc.rb +2 -13
  30. data/{runtime/corelib → core}/range.rb +19 -7
  31. data/{runtime/corelib → core}/rational.rb +0 -0
  32. data/{runtime/corelib → core}/regexp.rb +2 -6
  33. data/core/runtime.js +672 -0
  34. data/{runtime/corelib → core}/string.rb +25 -9
  35. data/{runtime/corelib → core}/struct.rb +0 -0
  36. data/core/time.rb +111 -0
  37. data/{runtime/corelib → core}/top_self.rb +0 -0
  38. data/{runtime/spec → core_spec}/README.md +0 -0
  39. data/{runtime/spec → core_spec}/core/array/allocate_spec.rb +0 -0
  40. data/{runtime/spec → core_spec}/core/array/append_spec.rb +0 -0
  41. data/{runtime/spec → core_spec}/core/array/assoc_spec.rb +0 -0
  42. data/{runtime/spec → core_spec}/core/array/at_spec.rb +0 -0
  43. data/{runtime/spec → core_spec}/core/array/clear_spec.rb +0 -0
  44. data/{runtime/spec → core_spec}/core/array/collect_spec.rb +0 -0
  45. data/{runtime/spec → core_spec}/core/array/compact_spec.rb +0 -0
  46. data/{runtime/spec → core_spec}/core/array/concat_spec.rb +0 -0
  47. data/{runtime/spec → core_spec}/core/array/constructor_spec.rb +0 -0
  48. data/{runtime/spec → core_spec}/core/array/count_spec.rb +0 -0
  49. data/{runtime/spec → core_spec}/core/array/delete_at_spec.rb +0 -0
  50. data/{runtime/spec → core_spec}/core/array/delete_if_spec.rb +0 -0
  51. data/{runtime/spec → core_spec}/core/array/delete_spec.rb +0 -0
  52. data/{runtime/spec → core_spec}/core/array/each_index_spec.rb +0 -0
  53. data/{runtime/spec → core_spec}/core/array/each_spec.rb +0 -0
  54. data/{runtime/spec → core_spec}/core/array/element_reference_spec.rb +0 -0
  55. data/{runtime/spec → core_spec}/core/array/element_set_spec.rb +0 -0
  56. data/{runtime/spec → core_spec}/core/array/empty_spec.rb +0 -0
  57. data/{runtime/spec → core_spec}/core/array/eql_spec.rb +0 -0
  58. data/{runtime/spec → core_spec}/core/array/equal_value_spec.rb +0 -0
  59. data/{runtime/spec → core_spec}/core/array/fetch_spec.rb +0 -0
  60. data/{runtime/spec → core_spec}/core/array/first_spec.rb +0 -0
  61. data/{runtime/spec → core_spec}/core/array/fixtures/classes.rb +0 -0
  62. data/{runtime/spec → core_spec}/core/array/flatten_spec.rb +0 -0
  63. data/{runtime/spec → core_spec}/core/array/include_spec.rb +0 -0
  64. data/{runtime/spec → core_spec}/core/array/insert_spec.rb +0 -0
  65. data/{runtime/spec → core_spec}/core/array/last_spec.rb +0 -0
  66. data/{runtime/spec → core_spec}/core/array/length_spec.rb +0 -0
  67. data/{runtime/spec → core_spec}/core/array/map_spec.rb +0 -0
  68. data/{runtime/spec → core_spec}/core/array/plus_spec.rb +0 -0
  69. data/{runtime/spec → core_spec}/core/array/pop_spec.rb +0 -0
  70. data/{runtime/spec → core_spec}/core/array/push_spec.rb +0 -0
  71. data/{runtime/spec → core_spec}/core/array/rassoc_spec.rb +0 -0
  72. data/{runtime/spec → core_spec}/core/array/reject_spec.rb +0 -0
  73. data/{runtime/spec → core_spec}/core/array/replace_spec.rb +0 -0
  74. data/{runtime/spec → core_spec}/core/array/reverse_each_spec.rb +0 -0
  75. data/{runtime/spec → core_spec}/core/array/reverse_spec.rb +0 -0
  76. data/{runtime/spec → core_spec}/core/array/shared/collect.rb +0 -0
  77. data/{runtime/spec → core_spec}/core/array/shared/eql.rb +0 -0
  78. data/{runtime/spec → core_spec}/core/array/shared/length.rb +0 -0
  79. data/{runtime/spec → core_spec}/core/array/shared/replace.rb +0 -0
  80. data/{runtime/spec → core_spec}/core/class/new_spec.rb +0 -0
  81. data/{runtime/spec → core_spec}/core/enumerable/all_spec.rb +0 -0
  82. data/{runtime/spec → core_spec}/core/enumerable/any_spec.rb +0 -0
  83. data/{runtime/spec → core_spec}/core/enumerable/collect_spec.rb +0 -0
  84. data/{runtime/spec → core_spec}/core/enumerable/count_spec.rb +0 -0
  85. data/{runtime/spec → core_spec}/core/enumerable/detect_spec.rb +0 -0
  86. data/{runtime/spec → core_spec}/core/enumerable/find_spec.rb +0 -0
  87. data/core_spec/core/enumerable/first_spec.rb +3 -0
  88. data/{runtime/spec → core_spec}/core/enumerable/fixtures/classes.rb +0 -0
  89. data/{runtime/spec → core_spec}/core/enumerable/shared/collect.rb +0 -0
  90. data/{runtime/spec → core_spec}/core/enumerable/shared/entries.rb +0 -0
  91. data/{runtime/spec → core_spec}/core/enumerable/shared/find.rb +0 -0
  92. data/core_spec/core/enumerable/shared/take.rb +31 -0
  93. data/{runtime/spec → core_spec}/core/enumerable/to_a_spec.rb +0 -0
  94. data/{runtime/spec → core_spec}/core/false/and_spec.rb +0 -0
  95. data/{runtime/spec → core_spec}/core/false/inspect_spec.rb +0 -0
  96. data/{runtime/spec → core_spec}/core/false/or_spec.rb +0 -0
  97. data/{runtime/spec → core_spec}/core/false/to_s_spec.rb +0 -0
  98. data/{runtime/spec → core_spec}/core/false/xor_spec.rb +0 -0
  99. data/{runtime/spec → core_spec}/core/hash/allocate_spec.rb +0 -0
  100. data/{runtime/spec → core_spec}/core/hash/assoc_spec.rb +0 -0
  101. data/{runtime/spec → core_spec}/core/hash/clear_spec.rb +0 -0
  102. data/{runtime/spec → core_spec}/core/hash/clone_spec.rb +0 -0
  103. data/{runtime/spec → core_spec}/core/hash/default_spec.rb +0 -0
  104. data/{runtime/spec → core_spec}/core/hash/delete_if_spec.rb +0 -0
  105. data/{runtime/spec → core_spec}/core/hash/element_reference_spec.rb +0 -0
  106. data/{runtime/spec → core_spec}/core/hash/element_set_spec.rb +0 -0
  107. data/{runtime/spec → core_spec}/core/hash/new_spec.rb +0 -0
  108. data/{runtime/spec → core_spec}/core/matchdata/to_a_spec.rb +0 -0
  109. data/{runtime/spec → core_spec}/core/nil/and_spec.rb +0 -0
  110. data/{runtime/spec → core_spec}/core/nil/inspect_spec.rb +0 -0
  111. data/{runtime/spec → core_spec}/core/nil/nil_spec.rb +0 -0
  112. data/{runtime/spec → core_spec}/core/nil/or_spec.rb +0 -0
  113. data/{runtime/spec → core_spec}/core/nil/to_a_spec.rb +0 -0
  114. data/{runtime/spec → core_spec}/core/nil/to_f_spec.rb +0 -0
  115. data/{runtime/spec → core_spec}/core/nil/to_i_spec.rb +0 -0
  116. data/{runtime/spec → core_spec}/core/nil/to_s_spec.rb +0 -0
  117. data/{runtime/spec → core_spec}/core/nil/xor_spec.rb +0 -0
  118. data/{runtime/spec → core_spec}/core/numeric/equal_value_spec.rb +0 -0
  119. data/{runtime/spec → core_spec}/core/object/is_a_spec.rb +0 -0
  120. data/{runtime/spec → core_spec}/core/object/shared/kind_of.rb +0 -0
  121. data/{runtime/spec → core_spec}/core/regexp/match_spec.rb +0 -0
  122. data/{runtime/spec → core_spec}/core/regexp/shared/match.rb +0 -0
  123. data/{runtime/spec → core_spec}/core/symbol/to_proc_spec.rb +0 -0
  124. data/{runtime/spec → core_spec}/core/true/and_spec.rb +0 -0
  125. data/{runtime/spec → core_spec}/core/true/inspect_spec.rb +0 -0
  126. data/{runtime/spec → core_spec}/core/true/or_spec.rb +0 -0
  127. data/{runtime/spec → core_spec}/core/true/to_s_spec.rb +0 -0
  128. data/{runtime/spec → core_spec}/core/true/xor_spec.rb +0 -0
  129. data/{runtime/spec → core_spec}/language/alias_spec.rb +0 -0
  130. data/{runtime/spec → core_spec}/language/and_spec.rb +0 -0
  131. data/{runtime/spec → core_spec}/language/array_spec.rb +0 -0
  132. data/{runtime/spec → core_spec}/language/block_spec.rb +0 -0
  133. data/{runtime/spec → core_spec}/language/break_spec.rb +0 -0
  134. data/{runtime/spec → core_spec}/language/case_spec.rb +0 -0
  135. data/{runtime/spec → core_spec}/language/defined_spec.rb +0 -0
  136. data/{runtime/spec → core_spec}/language/ensure_spec.rb +0 -0
  137. data/{runtime/spec → core_spec}/language/fixtures/block.rb +0 -0
  138. data/{runtime/spec → core_spec}/language/fixtures/break.rb +0 -0
  139. data/{runtime/spec → core_spec}/language/fixtures/defined.rb +0 -0
  140. data/{runtime/spec → core_spec}/language/fixtures/ensure.rb +0 -0
  141. data/{runtime/spec → core_spec}/language/fixtures/next.rb +0 -0
  142. data/{runtime/spec → core_spec}/language/fixtures/send.rb +0 -0
  143. data/{runtime/spec → core_spec}/language/fixtures/super.rb +0 -0
  144. data/{runtime/spec → core_spec}/language/hash_spec.rb +0 -0
  145. data/{runtime/spec → core_spec}/language/if_spec.rb +0 -0
  146. data/{runtime/spec → core_spec}/language/loop_spec.rb +0 -0
  147. data/{runtime/spec → core_spec}/language/next_spec.rb +0 -0
  148. data/{runtime/spec → core_spec}/language/or_spec.rb +0 -0
  149. data/{runtime/spec → core_spec}/language/predefined_spec.rb +0 -0
  150. data/{runtime/spec → core_spec}/language/regexp/interpolation_spec.rb +8 -0
  151. data/{runtime/spec → core_spec}/language/regexp_spec.rb +0 -0
  152. data/{runtime/spec → core_spec}/language/send_spec.rb +0 -0
  153. data/{runtime/spec → core_spec}/language/string_spec.rb +0 -0
  154. data/{runtime/spec → core_spec}/language/super_spec.rb +0 -0
  155. data/{runtime/spec → core_spec}/language/symbol_spec.rb +0 -0
  156. data/{runtime/spec → core_spec}/language/undef_spec.rb +0 -0
  157. data/{runtime/spec → core_spec}/language/unless_spec.rb +0 -0
  158. data/{runtime/spec → core_spec}/language/until_spec.rb +0 -0
  159. data/core_spec/language/variables_spec.rb +112 -0
  160. data/{runtime/spec → core_spec}/language/versions/hash_1.9.rb +0 -0
  161. data/{runtime/spec → core_spec}/language/while_spec.rb +0 -0
  162. data/{runtime/spec → core_spec}/opal/opal/defined_spec.rb +0 -0
  163. data/{runtime/spec → core_spec}/opal/opal/function_spec.rb +0 -0
  164. data/{runtime/spec → core_spec}/opal/opal/native_spec.rb +0 -0
  165. data/{runtime/spec → core_spec}/opal/opal/null_spec.rb +0 -0
  166. data/{runtime/spec → core_spec}/opal/opal/number_spec.rb +0 -0
  167. data/{runtime/spec → core_spec}/opal/opal/object_spec.rb +0 -0
  168. data/{runtime/spec → core_spec}/opal/opal/string_spec.rb +0 -0
  169. data/{runtime/spec → core_spec}/opal/opal/typeof_spec.rb +0 -0
  170. data/{runtime/spec → core_spec}/opal/opal/undefined_spec.rb +0 -0
  171. data/{runtime/spec → core_spec}/opal/true/case_compare_spec.rb +0 -0
  172. data/{runtime/spec → core_spec}/opal/true/class_spec.rb +0 -0
  173. data/{docs/spec_runner.html → core_spec/release_runner.html} +4 -3
  174. data/core_spec/runner.html +16 -0
  175. data/core_spec/spec_helper.rb +23 -0
  176. data/lib/opal.rb +85 -2
  177. data/lib/opal/builder.rb +129 -46
  178. data/lib/opal/context.rb +47 -26
  179. data/lib/opal/dependency_builder.rb +113 -14
  180. data/lib/opal/environment.rb +40 -45
  181. data/lib/opal/parser/grammar.rb +2296 -2254
  182. data/lib/opal/parser/grammar.y +27 -8
  183. data/lib/opal/parser/lexer.rb +12 -3
  184. data/lib/opal/parser/parser.rb +117 -30
  185. data/lib/opal/parser/scope.rb +2 -2
  186. data/lib/opal/version.rb +1 -1
  187. data/opal.gemspec +3 -8
  188. data/spec/grammar/masgn_spec.rb +37 -0
  189. metadata +177 -227
  190. data/index.html +0 -434
  191. data/lib/opal/command.rb +0 -73
  192. data/runtime/README.md +0 -25
  193. data/runtime/corelib/boolean.rb +0 -44
  194. data/runtime/corelib/class.rb +0 -43
  195. data/runtime/corelib/complex.rb +0 -2
  196. data/runtime/corelib/dir.rb +0 -29
  197. data/runtime/corelib/enumerable.rb +0 -316
  198. data/runtime/corelib/enumerator.rb +0 -80
  199. data/runtime/corelib/error.rb +0 -25
  200. data/runtime/corelib/module.rb +0 -171
  201. data/runtime/corelib/native.rb +0 -50
  202. data/runtime/corelib/object.rb +0 -21
  203. data/runtime/corelib/time.rb +0 -196
  204. data/runtime/gemlib/alpha.rb +0 -5
  205. data/runtime/gemlib/kernel.rb +0 -17
  206. data/runtime/gemlib/load_order +0 -2
  207. data/runtime/kernel/class.js +0 -256
  208. data/runtime/kernel/debug.js +0 -42
  209. data/runtime/kernel/init.js +0 -114
  210. data/runtime/kernel/load_order +0 -5
  211. data/runtime/kernel/loader.js +0 -151
  212. data/runtime/kernel/runtime.js +0 -414
  213. data/runtime/spec/language/variables_spec.rb +0 -28
  214. data/runtime/spec/library/stringscanner/scan_spec.rb +0 -36
  215. data/runtime/spec/opal/forwardable/def_instance_delegator_spec.rb +0 -49
  216. data/runtime/spec/spec_helper.rb +0 -25
  217. data/runtime/stdlib/base64.rb +0 -91
  218. data/runtime/stdlib/date.rb +0 -4
  219. data/runtime/stdlib/dev.rb +0 -171
  220. data/runtime/stdlib/forwardable.rb +0 -33
  221. data/runtime/stdlib/optparse.rb +0 -0
  222. data/runtime/stdlib/pp.rb +0 -6
  223. data/runtime/stdlib/racc/parser.rb +0 -159
  224. data/runtime/stdlib/rbconfig.rb +0 -0
  225. data/runtime/stdlib/si.rb +0 -17
  226. data/runtime/stdlib/strscan.rb +0 -53
  227. data/runtime/stdlib/uri.rb +0 -111
  228. data/runtime/stdlib/uri/common.rb +0 -1014
  229. data/runtime/stdlib/uri/ftp.rb +0 -261
  230. data/runtime/stdlib/uri/generic.rb +0 -1599
  231. data/runtime/stdlib/uri/http.rb +0 -106
  232. data/runtime/stdlib/uri/https.rb +0 -22
  233. data/runtime/stdlib/uri/ldap.rb +0 -260
  234. data/runtime/stdlib/uri/ldaps.rb +0 -20
  235. data/runtime/stdlib/uri/mailto.rb +0 -280
  236. data/spec/builder/output_path_spec.rb +0 -50
data/runtime/README.md DELETED
@@ -1,25 +0,0 @@
1
- Opal runtime
2
- ------------
3
-
4
- This directory holds the opal runtime and corelib files.
5
-
6
- ### kernel
7
-
8
- This is the very core runtime, written in javascript, that sets up the class/object heirarchy etc.
9
-
10
- ### corelib
11
-
12
- This holds Opal's implementation of the ruby corelib, written in ruby with inline javascript.
13
-
14
- ### spec
15
-
16
- Specs taken from RubySpec to test the runtime/corelib. This is not complete, but it contains tests
17
- for parts of Opal that have been implemented.
18
-
19
- ### gemlib
20
-
21
- Additional files used by opal when running on the command line (it gives opal proper file access).
22
-
23
- ### stdlib
24
-
25
- The parts of the ruby standard library that are implemented for opal. This is very incomplete.
@@ -1,44 +0,0 @@
1
- class Boolean
2
- def &(other)
3
- `this.valueOf() ? (other !== false && other !== nil) : false`
4
- end
5
-
6
- def |(other)
7
- `this.valueOf() ? true : (other !== false && other !== nil)`
8
- end
9
-
10
- def ^(other)
11
- `this.valueOf() ? (other === false || other === nil) : (other !== false && other !== nil)`
12
- end
13
-
14
- def ==(other)
15
- `this.valueOf() === other.valueOf()`
16
- end
17
-
18
- def class
19
- `this.valueOf() ? #{TrueClass} : #{FalseClass}`
20
- end
21
-
22
- def to_native
23
- `this.valueOf()`
24
- end
25
-
26
- def to_s
27
- `this.valueOf() ? 'true' : 'false'`
28
- end
29
- end
30
-
31
- class TrueClass
32
- def self.===(obj)
33
- `obj === true`
34
- end
35
- end
36
-
37
- class FalseClass
38
- def self.===(obj)
39
- `obj === false`
40
- end
41
- end
42
-
43
- TRUE = true
44
- FALSE = false
@@ -1,43 +0,0 @@
1
- class Class
2
- def self.new(sup = Object, &block)
3
- %x{
4
- var klass = boot_class(sup);
5
- klass.__classid__ = "AnonClass";
6
-
7
- make_metaclass(klass, sup.$klass);
8
-
9
- #{sup.inherited `klass`};
10
-
11
- return block !== nil ? block.call(klass, null) : klass;
12
- }
13
- end
14
-
15
- def allocate
16
- `new this.$allocator()`
17
- end
18
-
19
- def new(*args, &block)
20
- obj = allocate()
21
- obj.initialize *args, &block
22
- obj
23
- end
24
-
25
- def inherited(cls)
26
- end
27
-
28
- def superclass
29
- %x{
30
- var sup = this.$s;
31
-
32
- if (!sup) {
33
- if (this === RubyObject) {
34
- return nil;
35
- }
36
-
37
- raise(RubyRuntimeError, 'uninitialized class');
38
- }
39
-
40
- return sup;
41
- }
42
- end
43
- end
@@ -1,2 +0,0 @@
1
- class Complex
2
- end
@@ -1,29 +0,0 @@
1
- class Dir
2
- def self.getwd
3
- `FS_CWD`
4
- end
5
-
6
- def self.pwd
7
- `FS_CWD`
8
- end
9
-
10
- def self.[](*globs)
11
- %x{
12
- var result = [], files = FACTORIES;
13
-
14
- for (var i = 0, ii = globs.length; i < ii; i++) {
15
- var glob = globs[i];
16
-
17
- var re = fs_glob_to_regexp(#{ File.expand_path `glob` });
18
-
19
- for (var file in files) {
20
- if (re.exec(file)) {
21
- result.push(file);
22
- }
23
- }
24
- }
25
-
26
- return result;
27
- }
28
- end
29
- end
@@ -1,316 +0,0 @@
1
- module Enumerable
2
- def all?(&block)
3
- %x{
4
- var result = true;
5
-
6
- if (block !== nil) {
7
- this.m$each(function (iter, obj) {
8
- var value;
9
-
10
- if ((value = $yield.call($context, null, obj)) === $breaker) {
11
- return $breaker.$v;
12
- }
13
-
14
- if (value === false || value === nil) {
15
- result = false;
16
- $breaker.$v = nil;
17
-
18
- return $breaker;
19
- }
20
- });
21
- }
22
- else {
23
- this.m$each(function (iter, obj) {
24
- if (obj === false || obj === nil) {
25
- result = false;
26
- $breaker.$v = nil;
27
-
28
- return $breaker;
29
- }
30
- });
31
- }
32
-
33
- return result;
34
- }
35
- end
36
-
37
- def any?(&block)
38
- %x{
39
- var result = false, proc;
40
-
41
- if (block !== nil) {
42
- this.m$each(function (iter, obj) {
43
- var value;
44
-
45
- if ((value = $yield.call($context, null, obj)) === $breaker) {
46
- return $breaker.$v;
47
- }
48
-
49
- if (value !== false && value !== nil) {
50
- result = true;
51
- $breaker.$v = nil;
52
-
53
- return $breaker;
54
- }
55
- });
56
- }
57
- else {
58
- this.m$each(function (iter, obj) {
59
- if (obj !== false && obj !== nil) {
60
- result = true;
61
- $breaker.$v = nil;
62
-
63
- return $breaker;
64
- }
65
- });
66
- }
67
-
68
- return result;
69
- }
70
- end
71
-
72
- def collect(&block)
73
- return enum_for :collect unless block_given?
74
-
75
- %x{
76
- var result = [];
77
-
78
- this.m$each(function () {
79
- var obj = $slice.call(arguments, 1),
80
- value;
81
-
82
- if ((value = $yield.apply($context, [null].concat(obj))) === $breaker) {
83
- return $breaker.$v;
84
- }
85
-
86
- result.push(value);
87
- });
88
-
89
- return result;
90
- }
91
- end
92
-
93
- def count(object = undefined, &block)
94
- %x{
95
- var result = 0;
96
-
97
- if (block === nil) {
98
- if (object === undefined) {
99
- $yield = function () { return true; };
100
- }
101
- else {
102
- $yield = function (iter, obj) { return #{`obj` == `object`}; };
103
- }
104
- }
105
-
106
- this.m$each(function (iter, obj) {
107
- var value;
108
-
109
- if ((value = $yield.call($context, null, obj)) === $breaker) {
110
- return $breaker.$v;
111
- }
112
-
113
- if (value !== false && value !== nil) {
114
- result++;
115
- }
116
- });
117
-
118
- return result;
119
- }
120
- end
121
-
122
- def detect(ifnone = undefined, &block)
123
- return enum_for :detect, ifnone unless block
124
-
125
- %x{
126
- var result = nil;
127
-
128
- this.m$each(function(iter, obj) {
129
- var value;
130
-
131
- if ((value = $yield.call($context, null, obj)) === $breaker) {
132
- return $breaker.$v;
133
- }
134
-
135
- if (value !== false && value !== nil) {
136
- result = obj;
137
- $breaker.$v = nil;
138
-
139
- return $breaker;
140
- }
141
- });
142
-
143
- if (result !== nil) {
144
- return result;
145
- }
146
-
147
- if (#{Opal.function?(ifnone)}) {
148
- return ifnone.m$call(null);
149
- }
150
-
151
- return ifnone === undefined ? nil : ifnone;
152
- }
153
- end
154
-
155
- def drop(number)
156
- raise NotImplementedError
157
-
158
- %x{
159
- var result = [],
160
- current = 0;
161
-
162
- this.m$each(function(iter, obj) {
163
- if (number < current) {
164
- result.push(e);
165
- }
166
-
167
- current++;
168
- });
169
-
170
- return result;
171
- }
172
- end
173
-
174
- def drop_while(&block)
175
- return enum_for :drop_while unless block
176
-
177
- %x{
178
- var result = [];
179
-
180
- this.m$each(function (iter, obj) {
181
- var value;
182
-
183
- if ((value = $yield.call($context, null, obj)) === $breaker) {
184
- return $breaker.$v;
185
- }
186
-
187
- if (value !== false && value !== nil) {
188
- result.push(obj);
189
- }
190
- else {
191
- return $breaker;
192
- }
193
- });
194
-
195
- return result;
196
- }
197
- end
198
-
199
- def each_with_index(&block)
200
- return enum_for :each_with_index unless block
201
-
202
- %x{
203
- var index = 0;
204
-
205
- this.m$each(function (iter, obj) {
206
- var value;
207
-
208
- if ((value = $yield.call($context, null, obj, index)) === $breaker) {
209
- return $breaker.$v;
210
- }
211
-
212
- index++;
213
- });
214
-
215
- return nil;
216
- }
217
- end
218
-
219
- def entries
220
- %x{
221
- var result = [];
222
-
223
- this.m$each(function (iter, obj) { return result.push(obj); })
224
-
225
- return result;
226
- }
227
- end
228
-
229
- alias_method :find, :detect
230
-
231
- def find_index(object = undefined, &block)
232
- return enum_for :find_index, object unless block
233
-
234
- %x{
235
- if (object !== undefined) {
236
- $yield = function (iter, obj) { return obj.m$eq$(object); };
237
- }
238
-
239
- var result = nil;
240
-
241
- this.m$each_with_index(function(iter, obj, index) {
242
- var value;
243
-
244
- if ((value = $yield.call($context, null, obj)) === $breaker) {
245
- return $breaker.$v;
246
- }
247
-
248
- if (value !== false && value !== nil) {
249
- result = obj;
250
- breaker.$v = index;
251
-
252
- return $breaker;
253
- }
254
- });
255
-
256
- return result;
257
- }
258
- end
259
-
260
- def first(number = undefined)
261
- %x{
262
- var result = [],
263
- current = 0;
264
-
265
- if (number === undefined) {
266
- this.m$each(function (iter, obj) { result = obj; return $breaker; });
267
- }
268
- else {
269
- this.m$each(function (iter, obj) {
270
- if (number < current) {
271
- return $breaker;
272
- }
273
-
274
- result.push(obj);
275
-
276
- current++;
277
- });
278
- }
279
-
280
- return result;
281
- }
282
- end
283
-
284
- def grep(pattern, &block)
285
- %x{
286
- var result = [];
287
-
288
- if (block !== nil) {
289
- this.m$each(function (iter, obj) {
290
- var value = pattern.m$eqq$(obj);
291
-
292
- if (value !== false && value !== nil) {
293
- if ((value = $yield.call($context, null, obj)) === $breaker) {
294
- return $breaker.$v;
295
- }
296
-
297
- result.push(obj);
298
- }
299
- });
300
- }
301
- else {
302
- this.m$each(function (iter, obj) {
303
- var value = pattern.m$eqq$(obj);
304
-
305
- if (value !== false && value !== nil) {
306
- ary.push(obj);
307
- }
308
- });
309
- }
310
-
311
- return result;
312
- }
313
- end
314
-
315
- alias_method :to_a, :entries
316
- end