opal 0.3.15 → 0.3.16

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.
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