opal 0.3.16 → 0.3.17

Sign up to get free protection for your applications and to get access to all the features.
Files changed (251) hide show
  1. data/.gitignore +2 -0
  2. data/CHANGELOG.md +12 -0
  3. data/Gemfile +8 -7
  4. data/README.md +21 -13
  5. data/Rakefile +64 -78
  6. data/bin/opal +18 -29
  7. data/core/alpha.rb +2 -9
  8. data/core/array.rb +106 -50
  9. data/core/basic_object.rb +10 -8
  10. data/core/boolean.rb +2 -0
  11. data/core/class.rb +25 -13
  12. data/core/comparable.rb +6 -6
  13. data/core/enumerable.rb +90 -94
  14. data/core/enumerator.rb +3 -3
  15. data/core/hash.rb +86 -46
  16. data/core/kernel.rb +55 -39
  17. data/core/load_order +2 -5
  18. data/core/match_data.rb +1 -1
  19. data/core/module.rb +45 -20
  20. data/core/nil_class.rb +6 -2
  21. data/core/numeric.rb +20 -10
  22. data/core/proc.rb +2 -2
  23. data/core/range.rb +72 -13
  24. data/core/regexp.rb +5 -3
  25. data/core/runtime.js +228 -287
  26. data/core/string.rb +345 -37
  27. data/core/top_self.rb +1 -1
  28. data/lib/opal.rb +13 -91
  29. data/lib/opal/builder.rb +47 -120
  30. data/lib/opal/builder_task.rb +74 -0
  31. data/lib/opal/{parser/grammar.rb → grammar.rb} +1094 -1083
  32. data/lib/opal/{parser/grammar.y → grammar.y} +7 -0
  33. data/lib/opal/{parser/lexer.rb → lexer.rb} +32 -11
  34. data/lib/opal/{parser/parser.rb → parser.rb} +232 -238
  35. data/lib/opal/{parser/scope.rb → scope.rb} +72 -9
  36. data/lib/opal/version.rb +2 -3
  37. data/opal.gemspec +1 -2
  38. data/{core_spec → spec}/core/array/allocate_spec.rb +1 -3
  39. data/{core_spec → spec}/core/array/append_spec.rb +1 -4
  40. data/{core_spec → spec}/core/array/assoc_spec.rb +1 -4
  41. data/{core_spec → spec}/core/array/at_spec.rb +1 -3
  42. data/{core_spec → spec}/core/array/clear_spec.rb +1 -3
  43. data/spec/core/array/clone_spec.rb +15 -0
  44. data/{core_spec/core/array/shared/collect.rb → spec/core/array/collect_spec.rb} +1 -1
  45. data/{core_spec → spec}/core/array/compact_spec.rb +1 -3
  46. data/{core_spec → spec}/core/array/concat_spec.rb +1 -3
  47. data/{core_spec → spec}/core/array/constructor_spec.rb +9 -3
  48. data/{core_spec → spec}/core/array/count_spec.rb +1 -3
  49. data/{core_spec → spec}/core/array/delete_at_spec.rb +1 -4
  50. data/{core_spec → spec}/core/array/delete_if_spec.rb +1 -4
  51. data/{core_spec → spec}/core/array/delete_spec.rb +1 -4
  52. data/{core_spec → spec}/core/array/each_index_spec.rb +1 -4
  53. data/{core_spec → spec}/core/array/each_spec.rb +1 -4
  54. data/{core_spec → spec}/core/array/element_reference_spec.rb +74 -4
  55. data/{core_spec → spec}/core/array/empty_spec.rb +1 -4
  56. data/{core_spec/core/array/shared/eql.rb → spec/core/array/eql_spec.rb} +1 -1
  57. data/{core_spec → spec}/core/array/fetch_spec.rb +1 -4
  58. data/{core_spec → spec}/core/array/first_spec.rb +1 -3
  59. data/{core_spec → spec}/core/array/flatten_spec.rb +1 -3
  60. data/{core_spec → spec}/core/array/include_spec.rb +1 -3
  61. data/{core_spec → spec}/core/array/insert_spec.rb +1 -4
  62. data/{core_spec → spec}/core/array/last_spec.rb +1 -4
  63. data/{core_spec/core/array/shared/length.rb → spec/core/array/length_spec.rb} +1 -1
  64. data/spec/core/array/map_spec.rb +53 -0
  65. data/{core_spec → spec}/core/array/plus_spec.rb +1 -4
  66. data/{core_spec → spec}/core/array/pop_spec.rb +1 -4
  67. data/{core_spec → spec}/core/array/push_spec.rb +1 -4
  68. data/{core_spec → spec}/core/array/rassoc_spec.rb +1 -4
  69. data/{core_spec → spec}/core/array/reject_spec.rb +1 -4
  70. data/{core_spec/core/array/shared/replace.rb → spec/core/array/replace_spec.rb} +1 -1
  71. data/{core_spec → spec}/core/array/reverse_each_spec.rb +1 -4
  72. data/{core_spec → spec}/core/array/reverse_spec.rb +1 -4
  73. data/spec/core/array/size_spec.rb +6 -0
  74. data/spec/core/array/to_ary_spec.rb +6 -0
  75. data/spec/core/array/uniq_spec.rb +22 -0
  76. data/spec/core/array/zip_spec.rb +20 -0
  77. data/{core_spec → spec}/core/class/new_spec.rb +1 -4
  78. data/{core_spec → spec}/core/enumerable/all_spec.rb +1 -4
  79. data/{core_spec → spec}/core/enumerable/any_spec.rb +1 -4
  80. data/{core_spec/core/enumerable/shared/collect.rb → spec/core/enumerable/collect_spec.rb} +1 -1
  81. data/{core_spec → spec}/core/enumerable/count_spec.rb +2 -5
  82. data/{core_spec → spec}/core/enumerable/fixtures/classes.rb +1 -2
  83. data/{core_spec → spec}/core/false/and_spec.rb +1 -3
  84. data/{core_spec → spec}/core/false/inspect_spec.rb +1 -3
  85. data/{core_spec → spec}/core/false/or_spec.rb +1 -3
  86. data/{core_spec → spec}/core/false/to_s_spec.rb +1 -3
  87. data/{core_spec → spec}/core/false/xor_spec.rb +1 -3
  88. data/{core_spec → spec}/core/hash/allocate_spec.rb +1 -3
  89. data/spec/core/hash/assoc_spec.rb +25 -0
  90. data/{core_spec → spec}/core/hash/clear_spec.rb +1 -3
  91. data/{core_spec → spec}/core/hash/clone_spec.rb +1 -3
  92. data/{core_spec → spec}/core/hash/default_spec.rb +1 -3
  93. data/{core_spec → spec}/core/hash/delete_if_spec.rb +1 -3
  94. data/{core_spec → spec}/core/hash/element_reference_spec.rb +1 -3
  95. data/{core_spec → spec}/core/hash/element_set_spec.rb +1 -3
  96. data/spec/core/hash/merge_spec.rb +37 -0
  97. data/{core_spec → spec}/core/hash/new_spec.rb +1 -3
  98. data/{core_spec → spec}/core/matchdata/to_a_spec.rb +1 -3
  99. data/{core_spec → spec}/core/nil/and_spec.rb +1 -4
  100. data/{core_spec → spec}/core/nil/inspect_spec.rb +1 -4
  101. data/{core_spec → spec}/core/nil/nil_spec.rb +1 -4
  102. data/{core_spec → spec}/core/nil/or_spec.rb +1 -4
  103. data/{core_spec → spec}/core/nil/to_a_spec.rb +1 -4
  104. data/{core_spec → spec}/core/nil/to_f_spec.rb +1 -4
  105. data/{core_spec → spec}/core/nil/to_i_spec.rb +1 -4
  106. data/{core_spec → spec}/core/nil/to_s_spec.rb +1 -4
  107. data/{core_spec → spec}/core/nil/xor_spec.rb +1 -4
  108. data/{core_spec → spec}/core/numeric/equal_value_spec.rb +1 -3
  109. data/{core_spec → spec}/core/regexp/match_spec.rb +10 -3
  110. data/{core_spec → spec}/core/symbol/to_proc_spec.rb +1 -3
  111. data/{core_spec → spec}/core/true/and_spec.rb +1 -3
  112. data/{core_spec → spec}/core/true/inspect_spec.rb +1 -3
  113. data/{core_spec → spec}/core/true/or_spec.rb +1 -3
  114. data/{core_spec → spec}/core/true/to_s_spec.rb +1 -3
  115. data/{core_spec → spec}/core/true/xor_spec.rb +1 -3
  116. data/spec/index.html +11 -0
  117. data/{core_spec → spec}/language/alias_spec.rb +1 -3
  118. data/{core_spec → spec}/language/and_spec.rb +1 -4
  119. data/{core_spec → spec}/language/array_spec.rb +1 -4
  120. data/{core_spec → spec}/language/block_spec.rb +20 -3
  121. data/{core_spec → spec}/language/break_spec.rb +40 -3
  122. data/{core_spec → spec}/language/case_spec.rb +1 -4
  123. data/{core_spec → spec}/language/defined_spec.rb +9 -3
  124. data/{core_spec → spec}/language/ensure_spec.rb +38 -3
  125. data/{core_spec → spec}/language/hash_spec.rb +1 -3
  126. data/{core_spec → spec}/language/if_spec.rb +1 -4
  127. data/{core_spec → spec}/language/loop_spec.rb +1 -3
  128. data/spec/language/metaclass_spec.rb +13 -0
  129. data/{core_spec → spec}/language/next_spec.rb +47 -3
  130. data/{core_spec → spec}/language/or_spec.rb +1 -4
  131. data/{core_spec → spec}/language/predefined_spec.rb +1 -3
  132. data/{core_spec/language/regexp/interpolation_spec.rb → spec/language/regexp_spec.rb} +6 -3
  133. data/{core_spec → spec}/language/send_spec.rb +38 -4
  134. data/spec/language/singleton_class_spec.rb +31 -0
  135. data/spec/language/super_spec.rb +188 -0
  136. data/{core_spec → spec}/language/symbol_spec.rb +1 -3
  137. data/{core_spec → spec}/language/undef_spec.rb +1 -3
  138. data/{core_spec → spec}/language/unless_spec.rb +1 -4
  139. data/{core_spec → spec}/language/until_spec.rb +1 -3
  140. data/{core_spec → spec}/language/variables_spec.rb +1 -3
  141. data/{core_spec → spec}/language/while_spec.rb +1 -3
  142. data/{spec → test}/builder/build_source_spec.rb +0 -0
  143. data/{spec → test}/builder/fixtures/build_source/adam.rb +0 -0
  144. data/{spec → test}/builder/fixtures/build_source/bar/a.rb +0 -0
  145. data/{spec → test}/builder/fixtures/build_source/bar/wow/b.rb +0 -0
  146. data/{spec → test}/builder/fixtures/build_source/bar/wow/cow/c.rb +0 -0
  147. data/{spec → test}/builder/fixtures/build_source/beynon.rb +0 -0
  148. data/{spec → test}/builder/fixtures/build_source/charles.js +0 -0
  149. data/{spec → test}/builder/fixtures/build_source/foo/a.rb +0 -0
  150. data/{spec → test}/builder/fixtures/build_source/foo/b.rb +0 -0
  151. data/{spec → test}/builder/fixtures/build_source/foo/x.js +0 -0
  152. data/{spec → test}/builder/fixtures/build_source/foo/y.js +0 -0
  153. data/{spec → test}/grammar/alias_spec.rb +0 -0
  154. data/{spec → test}/grammar/and_spec.rb +0 -0
  155. data/{spec → test}/grammar/array_spec.rb +0 -0
  156. data/{spec → test}/grammar/attrasgn_spec.rb +0 -0
  157. data/{spec → test}/grammar/begin_spec.rb +0 -0
  158. data/{spec → test}/grammar/block_spec.rb +0 -0
  159. data/{spec → test}/grammar/break_spec.rb +0 -0
  160. data/{spec → test}/grammar/call_spec.rb +0 -0
  161. data/{spec → test}/grammar/class_spec.rb +0 -0
  162. data/{spec → test}/grammar/const_spec.rb +0 -0
  163. data/{spec → test}/grammar/cvar_spec.rb +0 -0
  164. data/{spec → test}/grammar/def_spec.rb +0 -0
  165. data/{spec → test}/grammar/false_spec.rb +0 -0
  166. data/{spec → test}/grammar/file_spec.rb +0 -0
  167. data/{spec → test}/grammar/gvar_spec.rb +0 -0
  168. data/{spec → test}/grammar/hash_spec.rb +0 -0
  169. data/{spec → test}/grammar/iasgn_spec.rb +0 -0
  170. data/{spec → test}/grammar/if_spec.rb +0 -0
  171. data/{spec → test}/grammar/iter_spec.rb +0 -0
  172. data/{spec → test}/grammar/ivar_spec.rb +0 -0
  173. data/{spec → test}/grammar/lasgn_spec.rb +0 -0
  174. data/{spec → test}/grammar/line_spec.rb +0 -0
  175. data/{spec → test}/grammar/lvar_spec.rb +0 -0
  176. data/{spec → test}/grammar/masgn_spec.rb +0 -0
  177. data/{spec → test}/grammar/module_spec.rb +0 -0
  178. data/{spec → test}/grammar/nil_spec.rb +0 -0
  179. data/{spec → test}/grammar/not_spec.rb +0 -0
  180. data/{spec → test}/grammar/op_asgn1_spec.rb +0 -0
  181. data/{spec → test}/grammar/op_asgn2_spec.rb +0 -0
  182. data/{spec → test}/grammar/or_spec.rb +0 -0
  183. data/{spec → test}/grammar/return_spec.rb +0 -0
  184. data/{spec → test}/grammar/sclass_spec.rb +0 -0
  185. data/{spec → test}/grammar/self_spec.rb +0 -0
  186. data/{spec → test}/grammar/str_spec.rb +0 -0
  187. data/{spec → test}/grammar/super_spec.rb +0 -0
  188. data/{spec → test}/grammar/true_spec.rb +0 -0
  189. data/{spec → test}/grammar/undef_spec.rb +0 -0
  190. data/{spec → test}/grammar/unless_spec.rb +0 -0
  191. data/{spec → test}/grammar/while_spec.rb +0 -0
  192. data/{spec → test}/grammar/xstr_spec.rb +0 -0
  193. data/{spec → test}/grammar/yield_spec.rb +0 -0
  194. data/{spec → test}/spec_helper.rb +0 -0
  195. metadata +330 -264
  196. data/core/debug.js +0 -59
  197. data/core/debug.rb +0 -35
  198. data/core/dir.rb +0 -90
  199. data/core/file.rb +0 -83
  200. data/core/gemlib.rb +0 -30
  201. data/core/io.rb +0 -44
  202. data/core_spec/README.md +0 -34
  203. data/core_spec/core/array/collect_spec.rb +0 -3
  204. data/core_spec/core/array/element_set_spec.rb +0 -7
  205. data/core_spec/core/array/eql_spec.rb +0 -3
  206. data/core_spec/core/array/equal_value_spec.rb +0 -3
  207. data/core_spec/core/array/fixtures/classes.rb +0 -8
  208. data/core_spec/core/array/length_spec.rb +0 -3
  209. data/core_spec/core/array/map_spec.rb +0 -3
  210. data/core_spec/core/array/replace_spec.rb +0 -3
  211. data/core_spec/core/enumerable/collect_spec.rb +0 -3
  212. data/core_spec/core/enumerable/detect_spec.rb +0 -3
  213. data/core_spec/core/enumerable/find_spec.rb +0 -3
  214. data/core_spec/core/enumerable/first_spec.rb +0 -3
  215. data/core_spec/core/enumerable/shared/entries.rb +0 -7
  216. data/core_spec/core/enumerable/shared/find.rb +0 -49
  217. data/core_spec/core/enumerable/shared/take.rb +0 -31
  218. data/core_spec/core/enumerable/to_a_spec.rb +0 -7
  219. data/core_spec/core/hash/assoc_spec.rb +0 -29
  220. data/core_spec/core/object/is_a_spec.rb +0 -2
  221. data/core_spec/core/object/shared/kind_of.rb +0 -0
  222. data/core_spec/core/regexp/shared/match.rb +0 -11
  223. data/core_spec/language/fixtures/block.rb +0 -19
  224. data/core_spec/language/fixtures/break.rb +0 -39
  225. data/core_spec/language/fixtures/defined.rb +0 -9
  226. data/core_spec/language/fixtures/ensure.rb +0 -37
  227. data/core_spec/language/fixtures/next.rb +0 -46
  228. data/core_spec/language/fixtures/send.rb +0 -36
  229. data/core_spec/language/fixtures/super.rb +0 -43
  230. data/core_spec/language/regexp_spec.rb +0 -7
  231. data/core_spec/language/string_spec.rb +0 -4
  232. data/core_spec/language/super_spec.rb +0 -18
  233. data/core_spec/language/versions/hash_1.9.rb +0 -20
  234. data/core_spec/opal/opal/defined_spec.rb +0 -15
  235. data/core_spec/opal/opal/function_spec.rb +0 -11
  236. data/core_spec/opal/opal/native_spec.rb +0 -16
  237. data/core_spec/opal/opal/null_spec.rb +0 -10
  238. data/core_spec/opal/opal/number_spec.rb +0 -11
  239. data/core_spec/opal/opal/object_spec.rb +0 -16
  240. data/core_spec/opal/opal/string_spec.rb +0 -11
  241. data/core_spec/opal/opal/typeof_spec.rb +0 -9
  242. data/core_spec/opal/opal/undefined_spec.rb +0 -10
  243. data/core_spec/opal/true/case_compare_spec.rb +0 -12
  244. data/core_spec/opal/true/class_spec.rb +0 -10
  245. data/core_spec/release_runner.html +0 -17
  246. data/core_spec/runner.html +0 -16
  247. data/core_spec/spec_helper.rb +0 -23
  248. data/lib/opal/context.rb +0 -269
  249. data/lib/opal/dependency_builder.rb +0 -133
  250. data/lib/opal/environment.rb +0 -87
  251. data/lib/opal/parser/sexp.rb +0 -17
data/core/basic_object.rb CHANGED
@@ -8,7 +8,8 @@ class BasicObject
8
8
 
9
9
  def __send__(symbol, *args, &block)
10
10
  %x{
11
- var meth = this[mid_to_jsid(symbol)] || $opal.mm(mid_to_jsid(symbol));
11
+ var meth = this[mid_to_jsid(symbol)] || opal.mm(mid_to_jsid(symbol));
12
+ args.unshift(block);
12
13
 
13
14
  return meth.apply(this, args);
14
15
  }
@@ -19,20 +20,20 @@ class BasicObject
19
20
  alias eql? ==
20
21
  alias equal? ==
21
22
 
22
- def instance_eval(string = nil, &block)
23
+ def instance_eval(string, &block)
23
24
  %x{
24
- if (block === nil) {
25
- raise(RubyArgError, 'block not supplied');
25
+ if (block == null) {
26
+ throw RubyArgError.$new('block not supplied');
26
27
  }
27
28
 
28
- return block.call(this, this);
29
+ return block.call(this, null, this);
29
30
  }
30
31
  end
31
32
 
32
33
  def instance_exec(*args, &block)
33
34
  %x{
34
- if (block === nil) {
35
- raise(RubyArgError, 'block not supplied');
35
+ if (block == null) {
36
+ throw RubyArgError.$new('block not supplied');
36
37
  }
37
38
 
38
39
  return block.apply(this, args);
@@ -40,7 +41,8 @@ class BasicObject
40
41
  end
41
42
 
42
43
  def method_missing(symbol, *args)
43
- `throw RubyNoMethodError.$new('undefined method \`' + symbol + '\` for ' + #{inspect});`
44
+ `throw RubyNoMethodError.$new(null, 'undefined method \`' + symbol + '\` for ' + #{inspect});`
45
+
44
46
  self
45
47
  end
46
48
 
data/core/boolean.rb CHANGED
@@ -19,6 +19,8 @@ class Boolean
19
19
  `(this == true) ? #{TrueClass} : #{FalseClass}`
20
20
  end
21
21
 
22
+ alias singleton_class class
23
+
22
24
  def to_s
23
25
  `(this == true) ? 'true' : 'false'`
24
26
  end
data/core/class.rb CHANGED
@@ -1,14 +1,18 @@
1
1
  class Class
2
2
  def self.new(sup = Object, &block)
3
3
  %x{
4
- var klass = boot_class(sup);
5
- klass.$name = "AnonClass";
4
+ var klass = boot_class(sup);
5
+ klass._name = "AnonClass";
6
6
 
7
- make_metaclass(klass, sup.$klass);
7
+ make_metaclass(klass, sup._klass);
8
8
 
9
9
  #{sup.inherited `klass`};
10
10
 
11
- return block !== nil ? block.call(klass, null) : klass;
11
+ if (block !== null) {
12
+ block.call(klass, null);
13
+ }
14
+
15
+ return klass;
12
16
  }
13
17
  end
14
18
 
@@ -17,15 +21,15 @@ class Class
17
21
  var prototype = constructor.prototype,
18
22
  klass = this;
19
23
 
20
- klass.$allocator = constructor;
21
- klass.$proto = prototype;
24
+ klass._alloc = constructor;
25
+ klass._proto = prototype;
22
26
 
23
27
  bridged_classes.push(klass);
24
28
 
25
- prototype.$klass = klass;
26
- prototype.$flags = T_OBJECT;
29
+ prototype._klass = klass;
30
+ prototype._flags = T_OBJECT;
27
31
 
28
- var donator = RubyObject.$proto;
32
+ var donator = RubyObject._proto;
29
33
  for (var method in donator) {
30
34
  if (donator.hasOwnProperty(method)) {
31
35
  if (!prototype[method]) {
@@ -39,7 +43,7 @@ class Class
39
43
  end
40
44
 
41
45
  def allocate
42
- `new this.$allocator()`
46
+ `new this._alloc()`
43
47
  end
44
48
 
45
49
  def new(*args, &block)
@@ -53,14 +57,22 @@ class Class
53
57
 
54
58
  def superclass
55
59
  %x{
56
- var sup = this.$s;
60
+ var sup = this._super;
57
61
 
58
62
  if (!sup) {
59
63
  if (this === RubyObject) {
60
- return nil;
64
+ return null;
61
65
  }
62
66
 
63
- raise(RubyRuntimeError, 'uninitialized class');
67
+ throw RubyRuntimeError.$new('uninitialized class');
68
+ }
69
+
70
+ while (sup && (sup._flags & T_ICLASS)) {
71
+ sup = sup._super;
72
+ }
73
+
74
+ if (!sup) {
75
+ return null;
64
76
  }
65
77
 
66
78
  return sup;
data/core/comparable.rb CHANGED
@@ -1,25 +1,25 @@
1
1
  module Comparable
2
- def < (other)
2
+ def <(other)
3
3
  (self <=> other) == -1
4
4
  end
5
5
 
6
- def <= (other)
6
+ def <=(other)
7
7
  (self <=> other) <= 0
8
8
  end
9
9
 
10
- def == (other)
10
+ def ==(other)
11
11
  (self <=> other) == 0
12
12
  end
13
13
 
14
- def > (other)
14
+ def >(other)
15
15
  (self <=> other) == 1
16
16
  end
17
17
 
18
- def >= (other)
18
+ def >=(other)
19
19
  (self <=> other) >= 0
20
20
  end
21
21
 
22
- def between? (min, max)
22
+ def between?(min, max)
23
23
  self > min && self < max
24
24
  end
25
25
  end
data/core/enumerable.rb CHANGED
@@ -1,32 +1,36 @@
1
1
  module Enumerable
2
2
  def all?(&block)
3
3
  %x{
4
- var result = true;
4
+ var result = true, proc;
5
5
 
6
- this.$each.$P = block !== nil
7
- ? function(obj) {
8
- var value;
6
+ if (block) {
7
+ proc = function(obj) {
8
+ var value;
9
9
 
10
- if ((value = $yield.call($context, obj)) === $breaker) {
11
- return $breaker.$v;
12
- }
10
+ if ((value = block.call(__context, obj)) === __breaker) {
11
+ return __breaker.$v;
12
+ }
13
13
 
14
- if (value === false || value === nil) {
15
- result = false;
16
- $breaker.$v = nil;
14
+ if (value === false || value === nil) {
15
+ result = false;
16
+ __breaker.$v = nil;
17
17
 
18
- return $breaker;
19
- }
18
+ return __breaker;
20
19
  }
21
- : function(obj) {
22
- if (obj === false || obj === nil) {
23
- result = false;
24
- $breaker.$v = nil;
20
+ }
21
+ }
22
+ else {
23
+ proc = function(obj) {
24
+ if (obj === false || obj === nil) {
25
+ result = false;
26
+ __breaker.$v = nil;
25
27
 
26
- return $breaker;
27
- }
28
- };
28
+ return __breaker;
29
+ }
30
+ }
31
+ }
29
32
 
33
+ this.$each._p = proc;
30
34
  this.$each();
31
35
 
32
36
  return result;
@@ -35,32 +39,36 @@ module Enumerable
35
39
 
36
40
  def any?(&block)
37
41
  %x{
38
- var result = false;
42
+ var result = false, proc;
39
43
 
40
- this.$each.$P = block !== nil
41
- ? function(obj) {
42
- var value;
44
+ if (block) {
45
+ proc = function(obj) {
46
+ var value;
43
47
 
44
- if ((value = $yield.call($context, obj)) === $breaker) {
45
- return $breaker.$v;
46
- }
48
+ if ((value = block.call(__context, obj)) === __breaker) {
49
+ return __breaker.$v;
50
+ }
47
51
 
48
- if (value !== false && value !== nil) {
49
- result = true;
50
- $breaker.$v = nil;
52
+ if (value !== false && value !== nil) {
53
+ result = true;
54
+ __breaker.$v = nil;
51
55
 
52
- return $breaker;
53
- }
56
+ return __breaker;
54
57
  }
55
- : function(obj) {
56
- if (obj !== false && obj !== nil) {
57
- result = true;
58
- $breaker.$v = nil;
58
+ }
59
+ }
60
+ else {
61
+ proc = function(obj) {
62
+ if (obj !== false && obj !== nil) {
63
+ result = true;
64
+ __breaker.$v = nil;
59
65
 
60
- return $breaker;
61
- }
62
- };
66
+ return __breaker;
67
+ }
68
+ }
69
+ }
63
70
 
71
+ this.$each._p = proc;
64
72
  this.$each();
65
73
 
66
74
  return result;
@@ -73,17 +81,17 @@ module Enumerable
73
81
  %x{
74
82
  var result = [];
75
83
 
76
- this.$each.$P = function () {
77
- var obj = $slice.call(arguments),
78
- value;
84
+ var proc = function() {
85
+ var obj = __slice.call(arguments), value;
79
86
 
80
- if ((value = $yield.apply($context, obj)) === $breaker) {
81
- return $breaker.$v;
87
+ if ((value = block.apply(__context, obj)) === __breaker) {
88
+ return __breaker.$v;
82
89
  }
83
90
 
84
91
  result.push(value);
85
92
  };
86
93
 
94
+ this.$each._p = proc;
87
95
  this.$each();
88
96
 
89
97
  return result;
@@ -94,27 +102,28 @@ module Enumerable
94
102
  %x{
95
103
  var result = 0;
96
104
 
97
- if (block === nil) {
98
- if (object === undefined) {
99
- $yield = function() { return true; };
105
+ if (!block) {
106
+ if (object == null) {
107
+ block = function() { return true; };
100
108
  }
101
109
  else {
102
- $yield = function(obj) { return #{`obj` == `object`}; };
110
+ block = function(obj) { return #{`obj` == `object`}; };
103
111
  }
104
112
  }
105
113
 
106
- this.$each.$P = function(obj) {
114
+ var proc = function(obj) {
107
115
  var value;
108
116
 
109
- if ((value = $yield.call($context, obj)) === $breaker) {
110
- return $breaker.$v;
117
+ if ((value = block.call(__context, obj)) === __breaker) {
118
+ return __breaker.$v;
111
119
  }
112
120
 
113
121
  if (value !== false && value !== nil) {
114
122
  result++;
115
123
  }
116
- };
124
+ }
117
125
 
126
+ this.$each._p = proc;
118
127
  this.$each();
119
128
 
120
129
  return result;
@@ -127,10 +136,10 @@ module Enumerable
127
136
  %x{
128
137
  var result = nil;
129
138
 
130
- this.$each.$P = function(obj) {
139
+ this.$each(function(y, obj) {
131
140
  var value;
132
141
 
133
- if ((value = $yield.call($context, obj)) === $breaker) {
142
+ if ((value = $yield.call($context, null, obj)) === $breaker) {
134
143
  return $breaker.$v;
135
144
  }
136
145
 
@@ -140,9 +149,7 @@ module Enumerable
140
149
 
141
150
  return $breaker;
142
151
  }
143
- };
144
-
145
- this.$each();
152
+ });
146
153
 
147
154
  if (result !== nil) {
148
155
  return result;
@@ -163,15 +170,13 @@ module Enumerable
163
170
  var result = [],
164
171
  current = 0;
165
172
 
166
- this.$each.$P = function(obj) {
173
+ this.$each(function(y, obj) {
167
174
  if (number < current) {
168
175
  result.push(e);
169
176
  }
170
177
 
171
178
  current++;
172
- };
173
-
174
- this.$each();
179
+ });
175
180
 
176
181
  return result;
177
182
  }
@@ -183,10 +188,10 @@ module Enumerable
183
188
  %x{
184
189
  var result = [];
185
190
 
186
- this.$each.$P = function(obj) {
191
+ this.$each.$P = function(y, obj) {
187
192
  var value;
188
193
 
189
- if ((value = $yield.call($context, obj)) === $breaker) {
194
+ if ((value = $yield.call($context, null, obj)) === $breaker) {
190
195
  return $breaker.$v;
191
196
  }
192
197
 
@@ -210,31 +215,28 @@ module Enumerable
210
215
  %x{
211
216
  var index = 0;
212
217
 
213
- this.$each.$P = function(obj) {
218
+ this.$each(function(y, obj) {
214
219
  var value;
215
220
 
216
- if ((value = $yield.call($context, obj, index)) === $breaker) {
221
+ if ((value = $yield.call($context, null, obj, index)) === $breaker) {
217
222
  return $breaker.$v;
218
223
  }
219
224
 
220
225
  index++;
221
- };
222
-
223
- this.$each();
226
+ });
224
227
 
225
228
  return nil;
226
229
  }
227
230
  end
228
231
 
229
232
  def entries
230
- %x{
231
- var result = [];
232
-
233
- this.$each.$P = function(obj) { return result.push(obj); };
234
- this.$each();
233
+ result = []
235
234
 
236
- return result;
235
+ each {|*args|
236
+ result.push args.length == 1 ? args.first : args
237
237
  }
238
+
239
+ result
238
240
  end
239
241
 
240
242
  alias find detect
@@ -244,15 +246,15 @@ module Enumerable
244
246
 
245
247
  %x{
246
248
  if (object !== undefined) {
247
- $yield = function (iter, obj) { return obj.$eq$(object); };
249
+ $yield = function (y, obj) { return obj.$eq$(null, object); };
248
250
  }
249
251
 
250
252
  var result = nil;
251
253
 
252
- this.$each_with_index.$P = function(obj, index) {
254
+ this.$each_with_index(function(y, obj, index) {
253
255
  var value;
254
256
 
255
- if ((value = $yield.call($context, obj)) === $breaker) {
257
+ if ((value = $yield.call($context, null, obj)) === $breaker) {
256
258
  return $breaker.$v;
257
259
  }
258
260
 
@@ -262,9 +264,7 @@ module Enumerable
262
264
 
263
265
  return $breaker;
264
266
  }
265
- };
266
-
267
- this.$each_with_index();
267
+ });
268
268
 
269
269
  return result;
270
270
  }
@@ -275,11 +275,11 @@ module Enumerable
275
275
  var result = [],
276
276
  current = 0;
277
277
 
278
- this.$each.$P = number === undefined
279
- ? function(obj) {
278
+ this.$each(number === undefined
279
+ ? function(y, obj) {
280
280
  result = obj; return $breaker;
281
281
  }
282
- : function(obj) {
282
+ : function(y, obj) {
283
283
  if (number <= current) {
284
284
  return $breaker;
285
285
  }
@@ -287,9 +287,7 @@ module Enumerable
287
287
  result.push(obj);
288
288
 
289
289
  current++;
290
- };
291
-
292
- this.$each();
290
+ });
293
291
 
294
292
  return result;
295
293
  }
@@ -299,27 +297,25 @@ module Enumerable
299
297
  %x{
300
298
  var result = [];
301
299
 
302
- this.$each.$P = block !== nil
303
- ? function(obj) {
304
- var value = pattern.$eqq$(obj);
300
+ this.$each(block !== nil
301
+ ? function(y, obj) {
302
+ var value = pattern.$eqq$(null, obj);
305
303
 
306
304
  if (value !== false && value !== nil) {
307
- if ((value = $yield.call($context, obj)) === $breaker) {
305
+ if ((value = $yield.call($context, null, obj)) === $breaker) {
308
306
  return $breaker.$v;
309
307
  }
310
308
 
311
309
  result.push(obj);
312
310
  }
313
311
  }
314
- : function(obj) {
315
- var value = pattern.$eqq$(obj);
312
+ : function(y, obj) {
313
+ var value = pattern.$eqq$(null, obj);
316
314
 
317
315
  if (value !== false && value !== nil) {
318
316
  ary.push(obj);
319
317
  }
320
- };
321
-
322
- this.$each();
318
+ });
323
319
 
324
320
  return result;
325
321
  }