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
@@ -0,0 +1,126 @@
1
+ class Enumerator
2
+ include Enumerable
3
+
4
+ class Yielder
5
+ def initialize(block)
6
+ @block = block
7
+ end
8
+
9
+ def call(block)
10
+ @call = block
11
+
12
+ @block.call
13
+ end
14
+
15
+ def yield(value)
16
+ @call.call(value)
17
+ end
18
+
19
+ alias << yield
20
+ end
21
+
22
+ class Generator
23
+ attr_reader :enumerator
24
+
25
+ def initialize(block)
26
+ @yielder = Yielder.new(block)
27
+ end
28
+
29
+ def each(&block)
30
+ @yielder.call(block)
31
+ end
32
+ end
33
+
34
+ def initialize(object = nil, method = :each, *args, &block)
35
+ if block_given?
36
+ @object = Generator.new(block)
37
+ end
38
+
39
+ raise ArgumentError, 'wrong number of argument (0 for 1+)' unless object
40
+
41
+ @object = object
42
+ @method = method
43
+ @args = args
44
+ end
45
+
46
+ def next
47
+ _init_cache
48
+
49
+ result = @cache[@current] or raise StopIteration, 'iteration reached an end'
50
+ @current += 1
51
+
52
+ result
53
+ end
54
+
55
+ def next_values
56
+ result = self.next
57
+
58
+ result.is_a?(Array) ? result : [result]
59
+ end
60
+
61
+ def peek
62
+ _init_cache
63
+
64
+ @cache[@current] or raise StopIteration, 'iteration reached an end'
65
+ end
66
+
67
+ def peel_values
68
+ result = self.peek
69
+
70
+ result.is_a?(Array) ? result : [result]
71
+ end
72
+
73
+ def rewind
74
+ _clear_cache
75
+ end
76
+
77
+ def each(&block)
78
+ return self unless block
79
+
80
+ @object.__send__ @method, *args, &block
81
+ end
82
+
83
+ def each_with_index(&block)
84
+ with_index &block
85
+ end
86
+
87
+ def with_index(offset = 0)
88
+ return Enumerator.new(self, :with_index, offset) unless block_given?
89
+
90
+ current = 0
91
+
92
+ each {|*args|
93
+ next unless current >= offset
94
+
95
+ yield *args, current
96
+
97
+ current += 1
98
+ }
99
+ end
100
+
101
+ def with_object(object)
102
+ return Enumerator.new(self, :with_object, object) unless block_given?
103
+
104
+ each {|*args|
105
+ yield *args, object
106
+ }
107
+ end
108
+
109
+ def _init_cache
110
+ @current ||= 0
111
+ @cache ||= to_a
112
+ end
113
+
114
+ def _clear_cache
115
+ @cache = nil
116
+ @current = nil
117
+ end
118
+ end
119
+
120
+ module Kernel
121
+ def enum_for (method = :each, *args)
122
+ Enumerator.new(self, method, *args)
123
+ end
124
+
125
+ alias to_enum enum_for
126
+ end
data/core/error.rb ADDED
@@ -0,0 +1,40 @@
1
+ class Exception
2
+ def initialize(message = '')
3
+ %x{
4
+ if (Error.captureStackTrace) {
5
+ Error.captureStackTrace(this);
6
+ }
7
+
8
+ this.message = message;
9
+ }
10
+ end
11
+
12
+ def backtrace
13
+ %x{
14
+ if (this._bt !== undefined) {
15
+ return this._bt;
16
+ }
17
+
18
+ var backtrace = this.stack;
19
+
20
+ if (typeof(backtrace) === 'string') {
21
+ return this._bt = backtrace.split("\\n");
22
+ }
23
+ else if (backtrace) {
24
+ this._bt = backtrace;
25
+ }
26
+
27
+ return this._bt = ["No backtrace available"];
28
+ }
29
+ end
30
+
31
+ def inspect
32
+ "#<#{self.class}: '#{message}'>"
33
+ end
34
+
35
+ def message
36
+ `this.message`
37
+ end
38
+
39
+ alias to_s message
40
+ end
@@ -1,4 +1,7 @@
1
1
  class File
2
+ # Regexp to split path into dirname, basename and extname
3
+ PATH_RE = /^(.+\/(?!$)|\/)?((?:.+?)?(\.[^.]*)?)$/
4
+
2
5
  def self.expand_path(path, base = undefined)
3
6
  %x{
4
7
  if (!base) {
@@ -43,7 +46,7 @@ class File
43
46
 
44
47
  def self.dirname(path)
45
48
  %x{
46
- var dirname = PATH_RE.exec(path)[1];
49
+ var dirname = #{PATH_RE}.exec(path)[1];
47
50
 
48
51
  if (!dirname) {
49
52
  return '.';
@@ -59,7 +62,7 @@ class File
59
62
 
60
63
  def self.extname(path)
61
64
  %x{
62
- var extname = PATH_RE.exec(path)[3];
65
+ var extname = #{PATH_RE}.exec(path)[3];
63
66
 
64
67
  if (!extname || extname === '.') {
65
68
  return '';
@@ -75,6 +78,6 @@ class File
75
78
  end
76
79
 
77
80
  def self.exist?(path)
78
- `opal.loader.factories[#{ expand_path path }] ? true : false`
81
+ `!!FACTORIES[#{ expand_path path }]`
79
82
  end
80
83
  end
data/core/gemlib.rb ADDED
@@ -0,0 +1,30 @@
1
+ # ...........................................................
2
+ # GEMLIB - only loaded when running inside v8 in gem
3
+ #
4
+
5
+ # In gem, use 'opal-ruby-. Browser (default) uses 'opal-browser'
6
+ RUBY_ENGINE = 'opal-ruby'
7
+
8
+ # Update load paths (aliasing does not yet work as planned)
9
+ $: = $LOAD_PATH = `opal_filesystem.find_paths`
10
+
11
+ $" = $LOADED_FEATURES = []
12
+
13
+ module Kernel
14
+ def require(path)
15
+ %x{
16
+ var resolved = opal_filesystem.require(#{path}, #{$:});
17
+
18
+ if (resolved === false) {
19
+ return false;
20
+ }
21
+ else if (!resolved) {
22
+ #{ raise LoadError, "cannot load file -- #{path}" };
23
+ }
24
+ else {
25
+ #{ $LOADED_FEATURES << `resolved` };
26
+ return true;
27
+ }
28
+ }
29
+ end
30
+ end
@@ -1,17 +1,35 @@
1
1
  class Hash
2
2
  include Enumerable
3
3
 
4
+ %x{
5
+ var hash_class = this;
6
+
7
+ $opal.hash = function() {
8
+ var hash = new hash_class.$allocator(),
9
+ args = $slice.call(arguments),
10
+ assocs = {},
11
+ key;
12
+
13
+ hash.map = assocs;
14
+ hash.none = nil;
15
+ hash.proc = nil;
16
+
17
+ for (var i = 0, length = args.length; i < length; i++) {
18
+ key = args[i];
19
+ assocs[key.$hash()] = [key, args[++i]];
20
+ }
21
+
22
+ return hash;
23
+ };
24
+ }
25
+
4
26
  def self.[](*objs)
5
27
  `$opal.hash.apply(null, objs)`
6
28
  end
7
29
 
8
- def self.allocate
9
- `new $opal.hash()`
10
- end
11
-
12
30
  def self.new(defaults = undefined, &block)
13
31
  %x{
14
- var hash = new $opal.hash();
32
+ var hash = $opal.hash();
15
33
 
16
34
  if (defaults !== undefined) {
17
35
  hash.none = defaults;
@@ -100,7 +118,7 @@ class Hash
100
118
 
101
119
  def clone
102
120
  %x{
103
- var result = new $opal.hash(),
121
+ var result = $opal.hash(),
104
122
  map = this.map,
105
123
  map2 = result.map;
106
124
 
@@ -154,7 +172,7 @@ class Hash
154
172
  var bucket = map[assoc],
155
173
  value;
156
174
 
157
- if ((value = $yield.call($context, null, bucket[0], bucket[1])) === $breaker) {
175
+ if ((value = $yield.call($context, bucket[0], bucket[1])) === $breaker) {
158
176
  return $breaker.$v;
159
177
  }
160
178
 
@@ -176,7 +194,7 @@ class Hash
176
194
  for (var assoc in map) {
177
195
  var bucket = map[assoc];
178
196
 
179
- if ($yield.call($context, null, bucket[0], bucket[1]) === $breaker) {
197
+ if ($yield.call($context, bucket[0], bucket[1]) === $breaker) {
180
198
  return $breaker.$v;
181
199
  }
182
200
  }
@@ -194,7 +212,7 @@ class Hash
194
212
  for (var assoc in map) {
195
213
  var bucket = map[assoc];
196
214
 
197
- if ($yield.call($context, null, bucket[0]) === $breaker) {
215
+ if ($yield.call($context, bucket[0]) === $breaker) {
198
216
  return $breaker.$v;
199
217
  }
200
218
  }
@@ -203,7 +221,7 @@ class Hash
203
221
  }
204
222
  end
205
223
 
206
- alias_method :each_pair, :each
224
+ alias each_pair each
207
225
 
208
226
  def each_value(&block)
209
227
  return enum_for :each_value unless block_given?
@@ -214,7 +232,7 @@ class Hash
214
232
  for (var assoc in map) {
215
233
  var bucket = map[assoc];
216
234
 
217
- if ($yield.call($context, null, bucket[1]) === $breaker) {
235
+ if ($yield.call($context, bucket[1]) === $breaker) {
218
236
  return $breaker.$v;
219
237
  }
220
238
  }
@@ -233,7 +251,7 @@ class Hash
233
251
  }
234
252
  end
235
253
 
236
- alias_method :eql?, :==
254
+ alias eql? ==
237
255
 
238
256
  def fetch(key, defaults = undefined, &block)
239
257
  %x{
@@ -242,7 +260,7 @@ class Hash
242
260
  if (block !== nil) {
243
261
  var value;
244
262
 
245
- if ((value = $yield.call($context, null, key)) === $breaker) {
263
+ if ((value = $yield.call($context, key)) === $breaker) {
246
264
  return $breaker.$v;
247
265
  }
248
266
 
@@ -274,7 +292,7 @@ class Hash
274
292
  result.push(value);
275
293
  }
276
294
  else {
277
- result = result.concat(#{value.flatten(level - 1)});
295
+ result = result.concat(#{`value`.flatten(level - 1)});
278
296
  }
279
297
  }
280
298
  else {
@@ -350,7 +368,7 @@ class Hash
350
368
  }
351
369
  end
352
370
 
353
- alias_method :key?, :has_key?
371
+ alias key? has_key?
354
372
 
355
373
  def keys
356
374
  %x{
@@ -376,7 +394,7 @@ class Hash
376
394
  }
377
395
  end
378
396
 
379
- alias_method :member?, :has_key?
397
+ alias member? has_key?
380
398
 
381
399
  def merge(other)
382
400
  %x{
@@ -447,7 +465,7 @@ class Hash
447
465
  }
448
466
  end
449
467
 
450
- alias_method :size, :length
468
+ alias size length
451
469
 
452
470
  def to_a
453
471
  %x{
@@ -468,25 +486,9 @@ class Hash
468
486
  self
469
487
  end
470
488
 
471
- def to_native
472
- %x{
473
- var map = this.map,
474
- result = {};
475
-
476
- for (var assoc in map) {
477
- var key = map[assoc][0],
478
- value = map[assoc][1];
479
-
480
- result[key] = #{Opal.object?(`value`) ? `value`.to_native : `value`};
481
- }
482
-
483
- return result;
484
- }
485
- end
486
-
487
- alias_method :to_s, :inspect
489
+ alias to_s inspect
488
490
 
489
- alias_method :update, :merge!
491
+ alias update merge!
490
492
 
491
493
  def values
492
494
  %x{
File without changes
@@ -7,21 +7,19 @@ module Kernel
7
7
  `this == other`
8
8
  end
9
9
 
10
- def Object (object)
11
- Opal.native?(object) ? Native::Object.new(object) : object
12
- end
13
-
14
10
  def Array(object)
15
11
  return [] unless object
16
12
 
17
- unless Opal.native?(object)
18
- return object.to_ary if object.respond_to? :to_ary
19
- return object.to_a if object.respond_to? :to_a
20
- end
21
-
22
13
  %x{
14
+ if (object.$to_ary) {
15
+ return #{object.to_ary};
16
+ }
17
+ else if (object.$to_a) {
18
+ return #{object.to_a};
19
+ }
20
+
23
21
  var length = object.length || 0,
24
- result = new Array(length);
22
+ result = [];
25
23
 
26
24
  while (length--) {
27
25
  result[length] = object[length];
@@ -86,7 +84,7 @@ module Kernel
86
84
  end
87
85
 
88
86
  def instance_variable_defined?(name)
89
- `this.hasOwnProperty(name.substr(1));`
87
+ `hasOwnProperty.call(this, name.substr(1))`
90
88
  end
91
89
 
92
90
  def instance_variable_get(name)
@@ -129,7 +127,7 @@ module Kernel
129
127
  }
130
128
  end
131
129
 
132
- alias_method :kind_of?, :is_a?
130
+ alias kind_of? is_a?
133
131
 
134
132
  def lambda(&block)
135
133
  block
@@ -140,7 +138,7 @@ module Kernel
140
138
 
141
139
  %x{
142
140
  while (true) {
143
- if ($yield.call($context, null) === breaker) {
141
+ if ($yield.call($context) === breaker) {
144
142
  return breaker.$v;
145
143
  }
146
144
  }
@@ -161,17 +159,26 @@ module Kernel
161
159
  $stdout.print *strs
162
160
  end
163
161
 
162
+ def private(*)
163
+ end
164
+
164
165
  def proc(&block)
165
166
  block
166
167
  end
167
168
 
169
+ def protected(*)
170
+ end
171
+
172
+ def public(*)
173
+ end
174
+
168
175
  def puts(*strs)
169
176
  $stdout.puts *strs
170
177
  end
171
178
 
172
179
  def raise(exception, string = undefined)
173
180
  %x{
174
- if (#{Opal.string?(exception)}) {
181
+ if (typeof(exception) === 'string') {
175
182
  exception = #{`RubyRuntimeError`.new `exception`};
176
183
  }
177
184
  else if (#{!exception.is_a? `RubyException`}) {
@@ -199,18 +206,16 @@ module Kernel
199
206
  }
200
207
 
201
208
  LOADER_CACHE[resolved] = true;
209
+ FEATURES.push(resolved);
202
210
  $opal.FILE = resolved;
203
- FACTORIES[resolved].call(top_self, resolved, $opal);
211
+ FACTORIES[resolved]();
204
212
 
205
213
  return true;
206
214
  }
207
215
  end
208
216
 
209
217
  def respond_to?(name)
210
- %x{
211
- var meth = this[mid_to_jsid(name)];
212
- return !!meth;
213
- }
218
+ `!!this[mid_to_jsid(name)]`
214
219
  end
215
220
 
216
221
  def singleton_class
@@ -223,7 +228,7 @@ module Kernel
223
228
  raise(RubyLocalJumpError, 'no block given');
224
229
  }
225
230
 
226
- if ($yield.call($context, null, this) === breaker) {
231
+ if ($yield.call($context, this) === breaker) {
227
232
  return breaker.$v;
228
233
  }
229
234
 
@@ -232,6 +237,6 @@ module Kernel
232
237
  end
233
238
 
234
239
  def to_s
235
- `inspect_object(this)`
240
+ `return "#<" + class_real(this.$klass).$name + ":0x" + (this.$id * 400487).toString(16) + ">";`
236
241
  end
237
242
  end