opal 0.3.21 → 0.3.22

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 (297) hide show
  1. data/.travis.yml +1 -4
  2. data/Gemfile +9 -4
  3. data/README.md +10 -589
  4. data/Rakefile +51 -19
  5. data/config.ru +17 -0
  6. data/core/array.rb +42 -34
  7. data/core/basic_object.rb +4 -4
  8. data/core/browser.js +31 -0
  9. data/core/class.rb +7 -7
  10. data/core/enumerable.rb +65 -69
  11. data/core/erb.rb +30 -0
  12. data/core/error.rb +2 -3
  13. data/core/hash.rb +47 -18
  14. data/core/kernel.rb +15 -16
  15. data/core/load_order +2 -1
  16. data/core/module.rb +19 -37
  17. data/core/numeric.rb +4 -2
  18. data/core/object.rb +4 -0
  19. data/core/proc.rb +6 -3
  20. data/core/racc.rb +215 -0
  21. data/core/regexp.rb +16 -21
  22. data/core/runtime.js +141 -153
  23. data/core/string.rb +41 -19
  24. data/core/strscan.rb +61 -0
  25. data/core/time.rb +1 -5
  26. data/docs/index.md +616 -0
  27. data/docs/post.html +2 -8
  28. data/docs/pre.html +29 -26
  29. data/docs/try.html +52 -0
  30. data/lib/opal.rb +33 -3
  31. data/lib/opal/builder.rb +14 -34
  32. data/lib/opal/erb_parser.rb +19 -0
  33. data/lib/opal/grammar.rb +7 -3
  34. data/lib/opal/grammar.y +3 -0
  35. data/lib/opal/lexer.rb +16 -8
  36. data/lib/opal/parser.rb +156 -119
  37. data/lib/opal/rake_task.rb +2 -2
  38. data/lib/opal/scope.rb +9 -10
  39. data/lib/opal/version.rb +1 -1
  40. data/{test → spec}/core/array/allocate_spec.rb +0 -0
  41. data/{test → spec}/core/array/append_spec.rb +0 -0
  42. data/{test → spec}/core/array/assoc_spec.rb +0 -0
  43. data/{test → spec}/core/array/at_spec.rb +0 -0
  44. data/{test → spec}/core/array/clear_spec.rb +0 -0
  45. data/{test → spec}/core/array/clone_spec.rb +0 -0
  46. data/{test → spec}/core/array/collect_spec.rb +0 -0
  47. data/{test → spec}/core/array/compact_spec.rb +0 -0
  48. data/{test → spec}/core/array/concat_spec.rb +0 -0
  49. data/{test → spec}/core/array/constructor_spec.rb +0 -0
  50. data/{test → spec}/core/array/count_spec.rb +0 -0
  51. data/{test → spec}/core/array/delete_at_spec.rb +0 -0
  52. data/{test → spec}/core/array/delete_if_spec.rb +0 -0
  53. data/{test → spec}/core/array/delete_spec.rb +0 -0
  54. data/{test → spec}/core/array/each_index_spec.rb +0 -0
  55. data/{test → spec}/core/array/each_spec.rb +0 -0
  56. data/{test → spec}/core/array/element_reference_spec.rb +0 -0
  57. data/{test → spec}/core/array/empty_spec.rb +0 -0
  58. data/{test → spec}/core/array/eql_spec.rb +0 -0
  59. data/{test → spec}/core/array/fetch_spec.rb +0 -0
  60. data/{test → spec}/core/array/first_spec.rb +0 -0
  61. data/{test → spec}/core/array/flatten_spec.rb +0 -0
  62. data/{test → spec}/core/array/include_spec.rb +0 -0
  63. data/{test → spec}/core/array/insert_spec.rb +0 -0
  64. data/{test → spec}/core/array/last_spec.rb +0 -0
  65. data/{test → spec}/core/array/length_spec.rb +0 -0
  66. data/{test → spec}/core/array/map_spec.rb +0 -0
  67. data/{test → spec}/core/array/minus_spec.rb +0 -0
  68. data/{test → spec}/core/array/plus_spec.rb +0 -0
  69. data/{test → spec}/core/array/pop_spec.rb +0 -0
  70. data/{test → spec}/core/array/push_spec.rb +0 -0
  71. data/{test → spec}/core/array/rassoc_spec.rb +0 -0
  72. data/{test → spec}/core/array/reject_spec.rb +0 -0
  73. data/{test → spec}/core/array/replace_spec.rb +0 -0
  74. data/{test → spec}/core/array/reverse_each_spec.rb +0 -0
  75. data/{test → spec}/core/array/reverse_spec.rb +0 -0
  76. data/{test → spec}/core/array/size_spec.rb +0 -0
  77. data/{test → spec}/core/array/to_ary_spec.rb +0 -0
  78. data/{test → spec}/core/array/uniq_spec.rb +0 -0
  79. data/{test → spec}/core/array/zip_spec.rb +0 -0
  80. data/{test → spec}/core/class/fixtures/classes.rb +0 -0
  81. data/{test → spec}/core/class/new_spec.rb +3 -0
  82. data/{test → spec}/core/enumerable/all_spec.rb +3 -0
  83. data/{test → spec}/core/enumerable/any_spec.rb +0 -0
  84. data/{test → spec}/core/enumerable/collect_spec.rb +0 -0
  85. data/{test → spec}/core/enumerable/count_spec.rb +0 -0
  86. data/{test → spec}/core/enumerable/detect_spec.rb +0 -0
  87. data/{test → spec}/core/enumerable/drop_spec.rb +0 -0
  88. data/{test → spec}/core/enumerable/drop_while_spec.rb +0 -0
  89. data/{test → spec}/core/enumerable/each_with_index_spec.rb +0 -0
  90. data/{test → spec}/core/enumerable/each_with_object_spec.rb +0 -0
  91. data/{test → spec}/core/enumerable/entries_spec.rb +0 -0
  92. data/{test → spec}/core/enumerable/find_all_spec.rb +0 -0
  93. data/{test → spec}/core/enumerable/find_index_spec.rb +0 -0
  94. data/{test → spec}/core/enumerable/find_spec.rb +0 -0
  95. data/{test → spec}/core/enumerable/first_spec.rb +0 -0
  96. data/{test → spec}/core/enumerable/fixtures/classes.rb +0 -0
  97. data/{test → spec}/core/enumerable/grep_spec.rb +0 -0
  98. data/{test → spec}/core/enumerable/take_spec.rb +0 -0
  99. data/{test → spec}/core/enumerable/to_a_spec.rb +0 -0
  100. data/{test → spec}/core/false/and_spec.rb +0 -0
  101. data/{test → spec}/core/false/inspect_spec.rb +0 -0
  102. data/{test → spec}/core/false/or_spec.rb +0 -0
  103. data/{test → spec}/core/false/to_s_spec.rb +0 -0
  104. data/{test → spec}/core/false/xor_spec.rb +0 -0
  105. data/{test → spec}/core/hash/allocate_spec.rb +0 -0
  106. data/{test → spec}/core/hash/assoc_spec.rb +0 -0
  107. data/{test → spec}/core/hash/clear_spec.rb +0 -0
  108. data/{test → spec}/core/hash/clone_spec.rb +0 -0
  109. data/{test → spec}/core/hash/default_spec.rb +0 -0
  110. data/{test → spec}/core/hash/delete_if_spec.rb +0 -0
  111. data/{test → spec}/core/hash/each_key_spec.rb +0 -0
  112. data/{test → spec}/core/hash/each_pair_spec.rb +0 -0
  113. data/{test → spec}/core/hash/each_spec.rb +0 -0
  114. data/{test → spec}/core/hash/each_value_spec.rb +0 -0
  115. data/{test → spec}/core/hash/element_reference_spec.rb +14 -1
  116. data/{test → spec}/core/hash/element_set_spec.rb +0 -0
  117. data/{test → spec}/core/hash/empty_spec.rb +0 -0
  118. data/{test → spec}/core/hash/fetch_spec.rb +0 -0
  119. data/{test → spec}/core/hash/flatten_spec.rb +0 -0
  120. data/{test → spec}/core/hash/has_key_spec.rb +0 -0
  121. data/{test → spec}/core/hash/has_value_spec.rb +0 -0
  122. data/{test → spec}/core/hash/include_spec.rb +0 -0
  123. data/{test → spec}/core/hash/index_spec.rb +0 -0
  124. data/{test → spec}/core/hash/indexes_spec.rb +0 -0
  125. data/{test → spec}/core/hash/indices_spec.rb +0 -0
  126. data/{test → spec}/core/hash/invert_spec.rb +0 -0
  127. data/{test → spec}/core/hash/keep_if_spec.rb +0 -0
  128. data/{test → spec}/core/hash/key_spec.rb +0 -0
  129. data/{test → spec}/core/hash/keys_spec.rb +0 -0
  130. data/{test → spec}/core/hash/length_spec.rb +0 -0
  131. data/{test → spec}/core/hash/member_spec.rb +0 -0
  132. data/{test → spec}/core/hash/merge_spec.rb +0 -0
  133. data/{test → spec}/core/hash/new_spec.rb +8 -0
  134. data/{test → spec}/core/hash/rassoc_spec.rb +0 -0
  135. data/{test → spec}/core/hash/replace_spec.rb +0 -0
  136. data/{test → spec}/core/hash/select_spec.rb +0 -0
  137. data/{test → spec}/core/hash/shift_spec.rb +0 -0
  138. data/{test → spec}/core/hash/size_spec.rb +0 -0
  139. data/{test → spec}/core/hash/update_spec.rb +0 -0
  140. data/{test → spec}/core/hash/value_spec.rb +0 -0
  141. data/{test → spec}/core/hash/values_at_spec.rb +0 -0
  142. data/{test → spec}/core/hash/values_spec.rb +0 -0
  143. data/{test → spec}/core/kernel/define_singleton_method_spec.rb +0 -0
  144. data/{test → spec}/core/kernel/eql_spec.rb +0 -0
  145. data/{test → spec}/core/kernel/equal_value_spec.rb +0 -0
  146. data/{test → spec}/core/kernel/loop_spec.rb +0 -0
  147. data/{test → spec}/core/kernel/nil_spec.rb +0 -0
  148. data/{test → spec}/core/kernel/proc_spec.rb +4 -0
  149. data/{test → spec}/core/kernel/rand_spec.rb +0 -0
  150. data/{test → spec}/core/kernel/respond_to_spec.rb +0 -0
  151. data/{test → spec}/core/kernel/send_spec.rb +0 -0
  152. data/{test → spec}/core/kernel/tap_spec.rb +0 -0
  153. data/{test → spec}/core/kernel/to_s_spec.rb +0 -0
  154. data/{test → spec}/core/matchdata/to_a_spec.rb +0 -0
  155. data/{test → spec}/core/nil/and_spec.rb +0 -0
  156. data/{test → spec}/core/nil/inspect_spec.rb +0 -0
  157. data/{test → spec}/core/nil/nil_spec.rb +0 -0
  158. data/{test → spec}/core/nil/or_spec.rb +0 -0
  159. data/{test → spec}/core/nil/to_a_spec.rb +0 -0
  160. data/{test → spec}/core/nil/to_f_spec.rb +0 -0
  161. data/{test → spec}/core/nil/to_i_spec.rb +0 -0
  162. data/{test → spec}/core/nil/to_s_spec.rb +0 -0
  163. data/{test → spec}/core/nil/xor_spec.rb +0 -0
  164. data/{test → spec}/core/numeric/equal_value_spec.rb +0 -0
  165. data/spec/core/proc/proc_tricks_spec.rb +7 -0
  166. data/{test → spec}/core/range/begin_spec.rb +0 -0
  167. data/{test → spec}/core/range/case_compare_spec.rb +0 -0
  168. data/{test → spec}/core/range/end_spec.rb +0 -0
  169. data/{test → spec}/core/regexp/match_spec.rb +0 -0
  170. data/{test → spec}/core/string/capitalize_spec.rb +0 -0
  171. data/{test → spec}/core/string/casecmp_spec.rb +0 -0
  172. data/{test → spec}/core/string/chomp_spec.rb +0 -0
  173. data/{test → spec}/core/string/chop_spec.rb +0 -0
  174. data/{test → spec}/core/string/chr_spec.rb +0 -0
  175. data/{test → spec}/core/string/comparison_spec.rb +0 -0
  176. data/{test → spec}/core/string/downcase_spec.rb +0 -0
  177. data/{test → spec}/core/string/element_reference_spec.rb +14 -2
  178. data/{test → spec}/core/string/empty_spec.rb +0 -0
  179. data/{test → spec}/core/string/end_with_spec.rb +0 -0
  180. data/{test → spec}/core/string/fixtures/classes.rb +0 -0
  181. data/{test → spec}/core/string/gsub_spec.rb +0 -0
  182. data/{test → spec}/core/string/include_spec.rb +0 -0
  183. data/{test → spec}/core/string/intern_spec.rb +0 -0
  184. data/{test → spec}/core/string/length_spec.rb +0 -0
  185. data/{test → spec}/core/string/lstrip_spec.rb +0 -0
  186. data/{test → spec}/core/string/match_spec.rb +0 -0
  187. data/{test → spec}/core/string/next_spec.rb +0 -0
  188. data/{test → spec}/core/string/ord_spec.rb +0 -0
  189. data/{test → spec}/core/string/partition_spec.rb +0 -0
  190. data/{test → spec}/core/string/reverse_spec.rb +0 -0
  191. data/{test → spec}/core/string/rstrip_spec.rb +0 -0
  192. data/{test → spec}/core/string/size_spec.rb +0 -0
  193. data/{test → spec}/core/string/slice_spec.rb +4 -1
  194. data/{test → spec}/core/string/split_spec.rb +0 -0
  195. data/{test → spec}/core/string/start_with_spec.rb +0 -0
  196. data/{test → spec}/core/string/strip_spec.rb +0 -0
  197. data/{test → spec}/core/string/sub_spec.rb +0 -0
  198. data/{test → spec}/core/string/succ_spec.rb +0 -0
  199. data/{test → spec}/core/string/sum_spec.rb +0 -0
  200. data/{test → spec}/core/string/swapcase_spec.rb +0 -0
  201. data/{test → spec}/core/string/to_a_spec.rb +0 -0
  202. data/{test → spec}/core/string/to_f_spec.rb +0 -0
  203. data/{test → spec}/core/string/to_i_spec.rb +0 -0
  204. data/{test → spec}/core/string/to_s_spec.rb +0 -0
  205. data/{test → spec}/core/string/to_str_spec.rb +0 -0
  206. data/{test → spec}/core/string/to_sym_spec.rb +0 -0
  207. data/{test → spec}/core/string/upcase_spec.rb +0 -0
  208. data/{test → spec}/core/symbol/to_proc_spec.rb +0 -0
  209. data/{test → spec}/core/time/at_spec.rb +0 -0
  210. data/{test → spec}/core/time/day_spec.rb +0 -0
  211. data/{test → spec}/core/time/friday_spec.rb +0 -0
  212. data/{test → spec}/core/time/hour_spec.rb +0 -0
  213. data/{test → spec}/core/time/min_spec.rb +0 -0
  214. data/{test → spec}/core/time/monday_spec.rb +0 -0
  215. data/{test → spec}/core/time/month_spec.rb +0 -0
  216. data/{test → spec}/core/time/now_spec.rb +0 -0
  217. data/{test → spec}/core/time/saturday_spec.rb +0 -0
  218. data/{test → spec}/core/true/and_spec.rb +0 -0
  219. data/{test → spec}/core/true/inspect_spec.rb +0 -0
  220. data/{test → spec}/core/true/or_spec.rb +0 -0
  221. data/{test → spec}/core/true/to_s_spec.rb +0 -0
  222. data/{test → spec}/core/true/xor_spec.rb +0 -0
  223. data/spec/grammar/lvar_spec.rb +2 -1
  224. data/spec/grammar/str_spec.rb +1 -1
  225. data/spec/grammar/xstr_spec.rb +1 -1
  226. data/{test → spec}/index.html +3 -3
  227. data/{test → spec}/language/alias_spec.rb +0 -0
  228. data/{test → spec}/language/and_spec.rb +0 -0
  229. data/{test → spec}/language/array_spec.rb +0 -0
  230. data/{test → spec}/language/block_spec.rb +0 -0
  231. data/{test → spec}/language/break_spec.rb +0 -0
  232. data/{test → spec}/language/case_spec.rb +0 -0
  233. data/{test → spec}/language/defined_spec.rb +0 -0
  234. data/{test → spec}/language/ensure_spec.rb +2 -2
  235. data/{test → spec}/language/fixtures/next.rb +0 -0
  236. data/{test → spec}/language/fixtures/yield.rb +0 -0
  237. data/{test → spec}/language/hash_spec.rb +0 -0
  238. data/{test → spec}/language/if_spec.rb +0 -0
  239. data/{test → spec}/language/literal_lambda_spec.rb +0 -0
  240. data/{test → spec}/language/loop_spec.rb +0 -0
  241. data/{test → spec}/language/metaclass_spec.rb +0 -0
  242. data/{test → spec}/language/next_spec.rb +2 -0
  243. data/{test → spec}/language/or_spec.rb +0 -0
  244. data/{test → spec}/language/predefined_spec.rb +0 -0
  245. data/{test → spec}/language/regexp_spec.rb +0 -0
  246. data/{test → spec}/language/send_spec.rb +0 -0
  247. data/{test → spec}/language/singleton_class_spec.rb +0 -0
  248. data/{test → spec}/language/super_spec.rb +0 -0
  249. data/{test → spec}/language/symbol_spec.rb +0 -0
  250. data/{test → spec}/language/undef_spec.rb +0 -0
  251. data/{test → spec}/language/unless_spec.rb +0 -0
  252. data/{test → spec}/language/until_spec.rb +0 -0
  253. data/{test → spec}/language/variables_spec.rb +0 -0
  254. data/{test → spec}/language/while_spec.rb +0 -0
  255. data/{test → spec}/language/yield_spec.rb +2 -0
  256. data/{test → spec}/opal/array/subclassing_spec.rb +0 -0
  257. data/{test → spec}/opal/array/to_json_spec.rb +0 -0
  258. data/{test → spec}/opal/boolean/singleton_class_spec.rb +0 -0
  259. data/{test → spec}/opal/boolean/to_json_spec.rb +0 -0
  260. data/{test → spec}/opal/class/bridge_class_spec.rb +0 -0
  261. data/spec/opal/erb/erb_spec.rb +15 -0
  262. data/{test → spec}/opal/exception/subclassing_spec.rb +0 -0
  263. data/{test → spec}/opal/hash/to_json_spec.rb +0 -0
  264. data/spec/opal/hash/to_native_spec.rb +5 -0
  265. data/{test → spec}/opal/json/parse_spec.rb +0 -0
  266. data/{test → spec}/opal/kernel/to_json_spec.rb +0 -0
  267. data/{test → spec}/opal/nil/to_json_spec.rb +0 -0
  268. data/{test → spec}/opal/numeric/to_json_spec.rb +0 -0
  269. data/{test → spec}/opal/runtime/call_spec.rb +0 -0
  270. data/{test → spec}/opal/runtime/class_hierarchy_spec.rb +0 -0
  271. data/{test → spec}/opal/runtime/def_spec.rb +0 -0
  272. data/{test → spec}/opal/runtime/defined_spec.rb +0 -0
  273. data/{test → spec}/opal/runtime/method_missing_spec.rb +3 -3
  274. data/{test → spec}/opal/runtime/super_spec.rb +0 -0
  275. data/{test → spec}/opal/string/subclassing_spec.rb +0 -0
  276. data/{test → spec}/opal/string/to_json_spec.rb +0 -0
  277. data/spec/opal/strscan/check_spec.rb +13 -0
  278. data/spec/opal/strscan/scan_spec.rb +33 -0
  279. data/spec/parser/simple_spec.rb +44 -0
  280. data/spec/spec_helper.rb +7 -7
  281. metadata +487 -497
  282. data/core/dir.rb +0 -89
  283. data/core/file.rb +0 -85
  284. data/spec/browser_spec.rb +0 -28
  285. data/spec/builder/fixtures/build_source/adam.rb +0 -0
  286. data/spec/builder/fixtures/build_source/bar/a.rb +0 -0
  287. data/spec/builder/fixtures/build_source/bar/wow/b.rb +0 -0
  288. data/spec/builder/fixtures/build_source/bar/wow/cow/c.rb +0 -0
  289. data/spec/builder/fixtures/build_source/beynon.rb +0 -0
  290. data/spec/builder/fixtures/build_source/charles.js +0 -0
  291. data/spec/builder/fixtures/build_source/foo/a.rb +0 -0
  292. data/spec/builder/fixtures/build_source/foo/b.rb +0 -0
  293. data/spec/builder/fixtures/build_source/foo/x.js +0 -0
  294. data/spec/builder/fixtures/build_source/foo/y.js +0 -0
  295. data/spec/builder/lib_name_for_spec.rb +0 -19
  296. data/test/index.min.html +0 -12
  297. data/test/spec_helper.rb +0 -4
data/Rakefile CHANGED
@@ -7,21 +7,35 @@ require 'opal/version'
7
7
  require 'opal/rake_task'
8
8
 
9
9
  Opal::RakeTask.new do |t|
10
- t.dependencies = %w(opal-spec opal-dom)
11
- t.specs_dir = 'test'
12
- t.files = [] # we handle this by Opal.runtime instead
10
+ t.dependencies = %w(opal-spec)
11
+ t.files = [] # we handle this by Opal.runtime instead
13
12
  end
14
13
 
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
14
+ desc "Build opal-parser ready for browser"
15
+ task :parser do
16
+ puts " * build/opal-parser.js"
17
+ File.open('build/opal-parser.js', 'w+') do |o|
18
+ o.puts Opal::Builder.new(:files => %w(racc.rb strscan.rb), :dir => 'core').build
19
+ o.puts Opal.build_gem('opal')
20
+ o.puts File.read('core/browser.js')
22
21
  end
23
22
  end
24
23
 
24
+ desc "Run tests"
25
+ task :test do
26
+ src = %w(build/opal.js build/opal-spec.js build/opal-parser.js build/specs.js)
27
+ out = 'build/phantom_runner.js'
28
+
29
+ File.open(out, 'w+') do |o|
30
+ src.each { |s| o.write File.read(s) }
31
+ o.write "Opal.require('opal-spec/autorun');"
32
+ end
33
+
34
+ sh "phantomjs build/phantom_runner.js"
35
+ end
36
+
37
+ task :default => :test
38
+
25
39
  desc "Check file sizes for opal.js runtime"
26
40
  task :sizes do
27
41
  o = File.read 'build/opal.js'
@@ -55,10 +69,6 @@ def gzip(str)
55
69
  end
56
70
  end
57
71
 
58
- # Test
59
- require 'rspec/core/rake_task'
60
- RSpec::Core::RakeTask.new :default
61
-
62
72
  namespace :docs do
63
73
  desc "Clone repo"
64
74
  task :clone do
@@ -73,7 +83,7 @@ namespace :docs do
73
83
  end
74
84
  end
75
85
 
76
- desc "Build README.md => index.html"
86
+ desc "Build docs"
77
87
  task :build do
78
88
  require 'redcarpet'
79
89
  require 'albino'
@@ -84,17 +94,39 @@ namespace :docs do
84
94
  end
85
95
  end
86
96
 
87
- puts 'gh-pages/index.html'
88
97
  markdown = Redcarpet::Markdown.new(klass, :fenced_code_blocks => true)
89
98
 
90
99
  File.open('gh-pages/index.html', 'w+') do |o|
100
+ puts " * index.html"
91
101
  o.write File.read('docs/pre.html')
92
- o.write markdown.render(File.read "README.md")
102
+ o.write markdown.render(File.read "docs/index.md")
93
103
  o.write File.read('docs/post.html')
94
104
  end
95
105
 
96
- puts "gh-pages/opal.js"
97
- FileUtils.cp 'build/opal.js', 'gh-pages/opal.js'
106
+ %w(try).each do |src|
107
+ puts " * src.md"
108
+ File.open("gh-pages/#{src}.html", 'w+') do |out|
109
+ out.write File.read("docs/pre.html")
110
+ out.write File.read("docs/#{src}.html")
111
+ out.write File.read("docs/post.html")
112
+ end
113
+ end
114
+
115
+ %w(opal opal-parser).each do |src|
116
+ puts " * #{src}.js"
117
+ FileUtils.cp "build/#{src}.js", "gh-pages/#{src}.js"
118
+ end
119
+ end
120
+
121
+ task :server do
122
+ require 'rack'
123
+ server = Class.new(Rack::Server) do
124
+ def app
125
+ Rack::Directory.new('gh-pages')
126
+ end
127
+ end
128
+
129
+ server.new.start
98
130
  end
99
131
 
100
132
  desc "commit and push"
data/config.ru ADDED
@@ -0,0 +1,17 @@
1
+ require 'rack'
2
+
3
+ app = lambda do |env|
4
+ path = env['PATH_INFO']
5
+ base_path = File.expand_path('../test/index.html', __FILE__)
6
+ case path
7
+ when /\.js/
8
+ contents = File.read(File.join(File.dirname(base_path), '..', path))
9
+ [200, {'Content-Type' => 'application/x-javascript'}, [contents]]
10
+ else
11
+ system 'rake opal'
12
+ contents = File.read(base_path)
13
+ [200, {'Content-Type' => 'text/html'}, [contents]]
14
+ end
15
+ end
16
+
17
+ run app
data/core/array.rb CHANGED
@@ -1,6 +1,7 @@
1
- `Array.prototype._isArray = true`
2
-
3
1
  class Array < `Array`
2
+ %x{
3
+ Array_prototype._isArray = true;
4
+ }
4
5
 
5
6
  include Enumerable
6
7
 
@@ -14,21 +15,19 @@ class Array < `Array`
14
15
  }
15
16
  end
16
17
 
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
18
  def self.new(size, obj = nil)
27
19
  arr = allocate
28
20
 
29
21
  %x{
30
- for (var i = 0; i < size; i++) {
31
- arr[i] = obj;
22
+ if (size && size._isArray) {
23
+ for (var i = 0; i < size.length; i++) {
24
+ arr[i] = size[i];
25
+ }
26
+ }
27
+ else {
28
+ for (var i = 0; i < size; i++) {
29
+ arr[i] = obj;
30
+ }
32
31
  }
33
32
  }
34
33
 
@@ -230,7 +229,7 @@ class Array < `Array`
230
229
  var result = [];
231
230
 
232
231
  for (var i = 0, length = #{self}.length, value; i < length; i++) {
233
- if ((value = block(__context, #{self}[i])) === __breaker) {
232
+ if ((value = block.call(__context, #{self}[i])) === __breaker) {
234
233
  return __breaker.$v;
235
234
  }
236
235
 
@@ -246,7 +245,7 @@ class Array < `Array`
246
245
 
247
246
  %x{
248
247
  for (var i = 0, length = #{self}.length, val; i < length; i++) {
249
- if ((val = block(__context, #{self}[i])) === __breaker) {
248
+ if ((val = block.call(__context, #{self}[i])) === __breaker) {
250
249
  return __breaker.$v;
251
250
  }
252
251
 
@@ -356,7 +355,7 @@ class Array < `Array`
356
355
 
357
356
  %x{
358
357
  for (var i = 0, length = #{self}.length, value; i < length; i++) {
359
- if ((value = block(__context, #{self}[i])) === __breaker) {
358
+ if ((value = block.call(__context, #{self}[i])) === __breaker) {
360
359
  return __breaker.$v;
361
360
  }
362
361
 
@@ -381,7 +380,7 @@ class Array < `Array`
381
380
 
382
381
  %x{
383
382
  for (var i = 0, length = #{self}.length, value; i < length; i++) {
384
- if ((value = block.call(__context, #{self}[i])) === __breaker) {
383
+ if ((value = block(__context, #{self}[i])) === __breaker) {
385
384
  return __breaker.$v;
386
385
  }
387
386
 
@@ -447,7 +446,7 @@ class Array < `Array`
447
446
  }
448
447
 
449
448
  if (block !== nil) {
450
- return block.call(__context, original);
449
+ return block(__context, original);
451
450
  }
452
451
 
453
452
  #{ raise "Array#fetch" };
@@ -533,12 +532,13 @@ class Array < `Array`
533
532
  end
534
533
 
535
534
  def index(object, &block)
536
- return enum_for :index unless block_given? && object == undefined
537
-
538
535
  %x{
536
+ if (block === nil && object == null) {
537
+ return #{enum_for :index};
538
+ }
539
539
  if (block !== nil) {
540
540
  for (var i = 0, length = #{self}.length, value; i < length; i++) {
541
- if ((value = block(__context, '', #{self}[i])) === __breaker) {
541
+ if ((value = block.call(__context, '', #{self}[i])) === __breaker) {
542
542
  return __breaker.$v;
543
543
  }
544
544
 
@@ -573,7 +573,7 @@ class Array < `Array`
573
573
  }
574
574
 
575
575
  for (var length = #{self}.length, value; i < length; i++) {
576
- if ((value = block.call(__context, result, #{self}[i])) === __breaker) {
576
+ if ((value = block(__context, result, #{self}[i])) === __breaker) {
577
577
  return __breaker.$v;
578
578
  }
579
579
 
@@ -609,12 +609,20 @@ class Array < `Array`
609
609
 
610
610
  def inspect
611
611
  %x{
612
- var inspect = [];
612
+ var i, inspect, el, el_insp, length, object_id;
613
613
 
614
- for (var i = 0, length = #{self}.length; i < length; i++) {
615
- inspect.push(#{`#{self}[i]`.inspect});
616
- }
614
+ inspect = [];
615
+ object_id = #{object_id};
616
+ length = #{self}.length;
617
+
618
+ for (i = 0; i < length; i++) {
619
+ el = #{self[`i`]};
620
+
621
+ // Check object_id to ensure it's not the same array get into an infinite loop
622
+ el_insp = #{`el`.object_id} === object_id ? '[...]' : #{`el`.inspect};
617
623
 
624
+ inspect.push(el_insp);
625
+ }
618
626
  return '[' + inspect.join(', ') + ']';
619
627
  }
620
628
  end
@@ -635,7 +643,7 @@ class Array < `Array`
635
643
  return enum_for :keep_if unless block_given?
636
644
  %x{
637
645
  for (var i = 0, length = #{self}.length, value; i < length; i++) {
638
- if ((value = block.call(__context, #{self}[i])) === __breaker) {
646
+ if ((value = block(__context, #{self}[i])) === __breaker) {
639
647
  return __breaker.$v;
640
648
  }
641
649
 
@@ -727,7 +735,7 @@ class Array < `Array`
727
735
  var result = [];
728
736
 
729
737
  for (var i = 0, length = #{self}.length, value; i < length; i++) {
730
- if ((value = block(__context, #{self}[i])) === __breaker) {
738
+ if ((value = block.call(__context, #{self}[i])) === __breaker) {
731
739
  return __breaker.$v;
732
740
  }
733
741
 
@@ -746,7 +754,7 @@ class Array < `Array`
746
754
  var original = #{self}.length;
747
755
 
748
756
  for (var i = 0, length = #{self}.length, value; i < length; i++) {
749
- if ((value = block(__context, #{self}[i])) === __breaker) {
757
+ if ((value = block.call(__context, #{self}[i])) === __breaker) {
750
758
  return __breaker.$v;
751
759
  }
752
760
 
@@ -796,7 +804,7 @@ class Array < `Array`
796
804
  %x{
797
805
  if (block !== nil) {
798
806
  for (var i = #{self}.length - 1, value; i >= 0; i--) {
799
- if ((value = block.call(__context, #{self}[i])) === __breaker) {
807
+ if ((value = block(__context, #{self}[i])) === __breaker) {
800
808
  return __breaker.$v;
801
809
  }
802
810
 
@@ -826,7 +834,7 @@ class Array < `Array`
826
834
  for (var i = 0, length = #{self}.length, item, value; i < length; i++) {
827
835
  item = #{self}[i];
828
836
 
829
- if ((value = block.call(__context, item)) === __breaker) {
837
+ if ((value = block(__context, item)) === __breaker) {
830
838
  return __breaker.$v;
831
839
  }
832
840
 
@@ -847,7 +855,7 @@ class Array < `Array`
847
855
  for (var i = 0, length = original, item, value; i < length; i++) {
848
856
  item = #{self}[i];
849
857
 
850
- if ((value = block.call(__context, item)) === __breaker) {
858
+ if ((value = block(__context, item)) === __breaker) {
851
859
  return __breaker.$v;
852
860
  }
853
861
 
@@ -902,7 +910,7 @@ class Array < `Array`
902
910
  for (var i = 0, length = #{self}.length, item, value; i < length; i++) {
903
911
  item = #{self}[i];
904
912
 
905
- if ((value = block.call(__context, item)) === __breaker) {
913
+ if ((value = block(__context, item)) === __breaker) {
906
914
  return __breaker.$v;
907
915
  }
908
916
 
@@ -1013,7 +1021,7 @@ class Array < `Array`
1013
1021
 
1014
1022
  if (block !== nil) {
1015
1023
  for (var i = 0; i < size; i++) {
1016
- block(__context, result[i]);
1024
+ block.call(__context, result[i]);
1017
1025
  }
1018
1026
 
1019
1027
  return nil;
data/core/basic_object.rb CHANGED
@@ -8,13 +8,13 @@ class BasicObject
8
8
 
9
9
  def __send__(symbol, *args, &block)
10
10
  %x{
11
- var meth = #{self}.$m[symbol];
11
+ var meth = #{self}['$' + symbol];
12
12
 
13
13
  if (!meth) {
14
14
  return #{ method_missing symbol };
15
15
  }
16
16
 
17
- return meth.apply(null, [#{self}].concat(args));
17
+ return meth.apply(#{self}, args);
18
18
  }
19
19
  end
20
20
 
@@ -29,7 +29,7 @@ class BasicObject
29
29
  no_block_given();
30
30
  }
31
31
 
32
- return block(#{self});
32
+ return block.call(#{self});
33
33
  }
34
34
  end
35
35
 
@@ -39,7 +39,7 @@ class BasicObject
39
39
  no_block_given();
40
40
  }
41
41
 
42
- return block.apply(this, args);
42
+ return block.apply(#{self}, args);
43
43
  }
44
44
  end
45
45
 
data/core/browser.js ADDED
@@ -0,0 +1,31 @@
1
+ (function() {
2
+ // quick exit if not insde browser
3
+ if (typeof(window) === 'undefined' || typeof(document) === 'undefined') {
4
+ return;
5
+ }
6
+
7
+ function findRubyScripts() {
8
+ var all = document.getElementsByTagName('script');
9
+ for (var i = 0, script; i < all.length; i++) {
10
+ script = all[i];
11
+ if (script.type === 'text/ruby') {
12
+ runRuby(script.innerHTML);
13
+ }
14
+ else if (script.type === 'text/erb') {
15
+ runERB(script.innerHTML);
16
+ }
17
+ }
18
+ }
19
+
20
+ function runRuby(source) {
21
+ var js = Opal.Opal.Parser.$new().$parse(source);
22
+ eval('(' + js + ')()');
23
+ }
24
+
25
+ if (window.addEventListener) {
26
+ window.addEventListener('DOMContentLoaded', findRubyScripts, false);
27
+ }
28
+ else {
29
+ window.attachEvent('onload', findRubyScripts);
30
+ }
31
+ })();
data/core/class.rb CHANGED
@@ -5,10 +5,10 @@ class Class
5
5
  var klass = boot_class(sup, AnonClass)
6
6
  klass._name = nil;
7
7
 
8
- #{ sup.inherited `klass` };
8
+ sup.$inherited(klass);
9
9
 
10
10
  if (block !== nil) {
11
- block(klass, '');
11
+ block.call(klass);
12
12
  }
13
13
 
14
14
  return klass;
@@ -17,7 +17,7 @@ class Class
17
17
 
18
18
  def allocate
19
19
  %x{
20
- var obj = [];
20
+ var obj = new #{self};
21
21
  obj._id = unique_id++;
22
22
  return obj;
23
23
  }
@@ -25,11 +25,11 @@ class Class
25
25
 
26
26
  def new(*args, &block)
27
27
  %x{
28
- var obj = new self;
28
+ var obj = new #{self};
29
29
  obj._id = unique_id++;
30
- obj.$m.initialize._p = block;
30
+ obj.$initialize._p = block;
31
31
 
32
- obj.$m.initialize.apply(null, [obj].concat(args));
32
+ obj.$initialize.apply(obj, args);
33
33
  return obj;
34
34
  }
35
35
  end
@@ -39,7 +39,7 @@ class Class
39
39
 
40
40
  def superclass
41
41
  %x{
42
- var sup = #{self}.$s;
42
+ var sup = #{self}._super;
43
43
 
44
44
  if (!sup) {
45
45
  return nil;
data/core/enumerable.rb CHANGED
@@ -1,13 +1,13 @@
1
1
  module Enumerable
2
2
  def all?(&block)
3
3
  %x{
4
- var result = true, proc, each = #{self}.$m.each;
4
+ var result = true, proc;
5
5
 
6
6
  if (block !== nil) {
7
- proc = function(s, obj) {
7
+ proc = function(obj) {
8
8
  var value;
9
9
 
10
- if ((value = block(__context, obj)) === __breaker) {
10
+ if ((value = block.call(__context, obj)) === __breaker) {
11
11
  return __breaker.$v;
12
12
  }
13
13
 
@@ -20,7 +20,7 @@ module Enumerable
20
20
  }
21
21
  }
22
22
  else {
23
- proc = function(s, obj) {
23
+ proc = function(obj) {
24
24
  if (obj === false || obj === nil) {
25
25
  result = false;
26
26
  __breaker.$v = nil;
@@ -30,8 +30,8 @@ module Enumerable
30
30
  }
31
31
  }
32
32
 
33
- each._p = proc;
34
- each(#{self});
33
+ #{self}.$each._p = proc;
34
+ #{self}.$each();
35
35
 
36
36
  return result;
37
37
  }
@@ -39,13 +39,13 @@ module Enumerable
39
39
 
40
40
  def any?(&block)
41
41
  %x{
42
- var result = false, proc, each = #{self}.$m.each;
42
+ var result = false, proc;
43
43
 
44
44
  if (block !== nil) {
45
- proc = function(s, obj) {
45
+ proc = function(obj) {
46
46
  var value;
47
47
 
48
- if ((value = block(__context, obj)) === __breaker) {
48
+ if ((value = block.call(__context, obj)) === __breaker) {
49
49
  return __breaker.$v;
50
50
  }
51
51
 
@@ -58,7 +58,7 @@ module Enumerable
58
58
  }
59
59
  }
60
60
  else {
61
- proc = function(s, obj) {
61
+ proc = function(obj) {
62
62
  if (obj !== false && obj !== nil) {
63
63
  result = true;
64
64
  __breaker.$v = nil;
@@ -68,8 +68,8 @@ module Enumerable
68
68
  }
69
69
  }
70
70
 
71
- each._p = proc;
72
- each(#{self});
71
+ #{self}.$each._p = proc;
72
+ #{self}.$each();
73
73
 
74
74
  return result;
75
75
  }
@@ -79,20 +79,20 @@ module Enumerable
79
79
  return enum_for :collect unless block_given?
80
80
 
81
81
  %x{
82
- var result = [], each = #{self}.$m.each;
82
+ var result = [];
83
83
 
84
84
  var proc = function() {
85
- var obj = __slice.call(arguments, 1), value;
85
+ var obj = __slice.call(arguments), value;
86
86
 
87
- if ((value = block.apply(null, [__context].concat(obj))) === __breaker) {
87
+ if ((value = block.apply(__context, obj)) === __breaker) {
88
88
  return __breaker.$v;
89
89
  }
90
90
 
91
91
  result.push(value);
92
92
  };
93
93
 
94
- each._p = proc;
95
- each(#{self});
94
+ #{self}.$each._p = proc;
95
+ #{self}.$each();
96
96
 
97
97
  return result;
98
98
  }
@@ -100,19 +100,19 @@ module Enumerable
100
100
 
101
101
  def count(object, &block)
102
102
  %x{
103
- var result = 0, each = #{self}.$m.each;
103
+ var result = 0;
104
104
 
105
105
  if (object != null) {
106
- block = function(s, obj) { return #{ `obj` == `object` }; };
106
+ block = function(obj) { return #{ `obj` == `object` }; };
107
107
  }
108
108
  else if (block === nil) {
109
109
  block = function() { return true; };
110
110
  }
111
111
 
112
- var proc = function(s, obj) {
112
+ var proc = function(obj) {
113
113
  var value;
114
114
 
115
- if ((value = block(__context, obj)) === __breaker) {
115
+ if ((value = block.call(__context, obj)) === __breaker) {
116
116
  return __breaker.$v;
117
117
  }
118
118
 
@@ -121,8 +121,8 @@ module Enumerable
121
121
  }
122
122
  }
123
123
 
124
- each._p = proc;
125
- each(#{self});
124
+ #{self}.$each._p = proc;
125
+ #{self}.$each();
126
126
 
127
127
  return result;
128
128
  }
@@ -132,12 +132,12 @@ module Enumerable
132
132
  return enum_for :detect, ifnone unless block_given?
133
133
 
134
134
  %x{
135
- var result = nil, each = #{self}.$m.each;
135
+ var result = nil;
136
136
 
137
- each._p = function(s, obj) {
137
+ #{self}.$each._p = function(obj) {
138
138
  var value;
139
139
 
140
- if ((value = block(__context, obj)) === __breaker) {
140
+ if ((value = block.call(__context, obj)) === __breaker) {
141
141
  return __breaker.$v;
142
142
  }
143
143
 
@@ -149,7 +149,7 @@ module Enumerable
149
149
  }
150
150
  };
151
151
 
152
- each(#{self});
152
+ #{self}.$each();
153
153
 
154
154
  if (result !== nil) {
155
155
  return result;
@@ -166,10 +166,9 @@ module Enumerable
166
166
  def drop(number)
167
167
  %x{
168
168
  var result = [],
169
- current = 0,
170
- each = #{self}.$m.each;
169
+ current = 0;
171
170
 
172
- each._p = function(s, obj) {
171
+ #{self}.$each._p = function(obj) {
173
172
  if (number < current) {
174
173
  result.push(e);
175
174
  }
@@ -177,7 +176,7 @@ module Enumerable
177
176
  current++;
178
177
  };
179
178
 
180
- each(#{self});
179
+ #{self}.$each();
181
180
 
182
181
  return result;
183
182
  }
@@ -187,12 +186,12 @@ module Enumerable
187
186
  return enum_for :drop_while unless block_given?
188
187
 
189
188
  %x{
190
- var result = [], each = #{self}.$m.each;
189
+ var result = [];
191
190
 
192
- each._p = function(s, obj) {
191
+ #{self}.$each._p = function(obj) {
193
192
  var value;
194
193
 
195
- if ((value = block(__context, obj)) === __breaker) {
194
+ if ((value = block.call(__context, obj)) === __breaker) {
196
195
  return __breaker;
197
196
  }
198
197
 
@@ -205,7 +204,7 @@ module Enumerable
205
204
  return __breaker;
206
205
  };
207
206
 
208
- each(#{self});
207
+ #{self}.$each();
209
208
 
210
209
  return result;
211
210
  }
@@ -215,19 +214,19 @@ module Enumerable
215
214
  return enum_for :each_with_index unless block_given?
216
215
 
217
216
  %x{
218
- var index = 0, each = #{self}.$m.each;
217
+ var index = 0;
219
218
 
220
- each._p = function(s, obj) {
219
+ #{self}.$each._p = function(obj) {
221
220
  var value;
222
221
 
223
- if ((value = block(__context, obj, index)) === __breaker) {
222
+ if ((value = block.call(__context, obj, index)) === __breaker) {
224
223
  return __breaker.$v;
225
224
  }
226
225
 
227
226
  index++;
228
227
  };
229
228
 
230
- each(#{self});
229
+ #{self}.$each();
231
230
 
232
231
  return nil;
233
232
  }
@@ -237,17 +236,15 @@ module Enumerable
237
236
  return enum_for :each_with_object unless block_given?
238
237
 
239
238
  %x{
240
- var each = #{self}.$m.each;
241
-
242
- each._p = function(s, obj) {
239
+ #{self}.$each._p = function(obj) {
243
240
  var value;
244
241
 
245
- if ((value = block(__context, obj, object)) === __breaker) {
242
+ if ((value = block.call(__context, obj, object)) === __breaker) {
246
243
  return __breaker.$v;
247
244
  }
248
245
  };
249
246
 
250
- each(#{self});
247
+ #{self}.$each();
251
248
 
252
249
  return object;
253
250
  }
@@ -255,13 +252,13 @@ module Enumerable
255
252
 
256
253
  def entries
257
254
  %x{
258
- var result = [], each = #{self}.$m.each;
255
+ var result = [];
259
256
 
260
- each._p = function(m, obj) {
257
+ #{self}.$each._p = function(obj) {
261
258
  result.push(obj);
262
259
  };
263
260
 
264
- each(#{self});
261
+ #{self}.$each();
265
262
 
266
263
  return result;
267
264
  }
@@ -273,12 +270,12 @@ module Enumerable
273
270
  return enum_for :find_all unless block_given?
274
271
 
275
272
  %x{
276
- var result = [], each = #{self}.$m.each;
273
+ var result = [];
277
274
 
278
- each._p = function(s, obj) {
275
+ #{self}.$each._p = function(obj) {
279
276
  var value;
280
277
 
281
- if ((value = block(__context, obj)) === __breaker) {
278
+ if ((value = block.call(__context, obj)) === __breaker) {
282
279
  return __breaker.$v;
283
280
  }
284
281
 
@@ -287,7 +284,7 @@ module Enumerable
287
284
  }
288
285
  };
289
286
 
290
- each(#{self});
287
+ #{self}.$each();
291
288
 
292
289
  return result;
293
290
  }
@@ -295,10 +292,10 @@ module Enumerable
295
292
 
296
293
  def find_index(object, &block)
297
294
  %x{
298
- var proc, result = nil, index = 0, each = #{self}.$m.each;
295
+ var proc, result = nil, index = 0;
299
296
 
300
297
  if (object != null) {
301
- proc = function (s, obj) {
298
+ proc = function (obj) {
302
299
  if (#{ `obj` == `object` }) {
303
300
  result = index;
304
301
  return __breaker;
@@ -309,10 +306,10 @@ module Enumerable
309
306
  else if (block === nil) {
310
307
  return #{ enum_for 'find_index' };
311
308
  } else {
312
- proc = function(s, obj) {
309
+ proc = function(obj) {
313
310
  var value;
314
311
 
315
- if ((value = block(__context, obj)) === __breaker) {
312
+ if ((value = block.call(__context, obj)) === __breaker) {
316
313
  return __breaker.$v;
317
314
  }
318
315
 
@@ -326,8 +323,8 @@ module Enumerable
326
323
  };
327
324
  }
328
325
 
329
- #{self}.$m.each._p = proc;
330
- #{self}.$m.each(#{self});
326
+ #{self}.$each._p = proc;
327
+ #{self}.$each();
331
328
 
332
329
  return result;
333
330
  }
@@ -337,16 +334,15 @@ module Enumerable
337
334
  %x{
338
335
  var result = [],
339
336
  current = 0,
340
- proc,
341
- each = #{self}.$m.each;
337
+ proc;
342
338
 
343
339
  if (number == null) {
344
340
  result = nil;
345
- proc = function(s, obj) {
341
+ proc = function(obj) {
346
342
  result = obj; return __breaker;
347
343
  };
348
344
  } else {
349
- proc = function(s, obj) {
345
+ proc = function(obj) {
350
346
  if (number <= current) {
351
347
  return __breaker;
352
348
  }
@@ -357,8 +353,8 @@ module Enumerable
357
353
  };
358
354
  }
359
355
 
360
- each._p = proc;
361
- each(#{self});
356
+ #{self}.$each._p = proc;
357
+ #{self}.$each();
362
358
 
363
359
  return result;
364
360
  }
@@ -366,21 +362,21 @@ module Enumerable
366
362
 
367
363
  def grep(pattern, &block)
368
364
  %x{
369
- var result = [], each = #{self}.$m.each;
365
+ var result = [];
370
366
 
371
- each._p = (block !== nil
372
- ? function(s, obj) {
367
+ #{self}.$each._p = (block !== nil
368
+ ? function(obj) {
373
369
  var value = #{pattern === `obj`};
374
370
 
375
371
  if (value !== false && value !== nil) {
376
- if ((value = block(__context, obj)) === __breaker) {
372
+ if ((value = block.call(__context, obj)) === __breaker) {
377
373
  return __breaker.$v;
378
374
  }
379
375
 
380
376
  result.push(value);
381
377
  }
382
378
  }
383
- : function(s, obj) {
379
+ : function(obj) {
384
380
  var value = #{pattern === `obj`};
385
381
 
386
382
  if (value !== false && value !== nil) {
@@ -388,7 +384,7 @@ module Enumerable
388
384
  }
389
385
  });
390
386
 
391
- each(#{self});
387
+ #{self}.$each();
392
388
 
393
389
  return result;
394
390
  }