opal 0.3.15 → 0.3.16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (236) hide show
  1. data/.gitignore +1 -1
  2. data/Gemfile +8 -2
  3. data/README.md +1 -1
  4. data/Rakefile +51 -57
  5. data/bin/opal +50 -2
  6. data/{runtime/corelib → core}/alpha.rb +6 -1
  7. data/{runtime/corelib → core}/array.rb +38 -42
  8. data/{runtime/corelib → core}/basic_object.rb +6 -17
  9. data/core/boolean.rb +40 -0
  10. data/core/class.rb +69 -0
  11. data/{runtime/corelib → core}/comparable.rb +0 -0
  12. data/core/debug.js +59 -0
  13. data/core/debug.rb +35 -0
  14. data/core/dir.rb +90 -0
  15. data/core/enumerable.rb +331 -0
  16. data/core/enumerator.rb +126 -0
  17. data/core/error.rb +40 -0
  18. data/{runtime/corelib → core}/file.rb +6 -3
  19. data/core/gemlib.rb +30 -0
  20. data/{runtime/corelib → core}/hash.rb +37 -35
  21. data/{runtime/corelib → core}/io.rb +0 -0
  22. data/{runtime/corelib → core}/kernel.rb +26 -21
  23. data/{runtime/corelib → core}/load_order +2 -5
  24. data/{runtime/corelib → core}/match_data.rb +2 -4
  25. data/core/module.rb +204 -0
  26. data/{runtime/corelib → core}/nil_class.rb +1 -7
  27. data/{runtime/corelib → core}/numeric.rb +9 -13
  28. data/core/object.rb +17 -0
  29. data/{runtime/corelib → core}/proc.rb +2 -13
  30. data/{runtime/corelib → core}/range.rb +19 -7
  31. data/{runtime/corelib → core}/rational.rb +0 -0
  32. data/{runtime/corelib → core}/regexp.rb +2 -6
  33. data/core/runtime.js +672 -0
  34. data/{runtime/corelib → core}/string.rb +25 -9
  35. data/{runtime/corelib → core}/struct.rb +0 -0
  36. data/core/time.rb +111 -0
  37. data/{runtime/corelib → core}/top_self.rb +0 -0
  38. data/{runtime/spec → core_spec}/README.md +0 -0
  39. data/{runtime/spec → core_spec}/core/array/allocate_spec.rb +0 -0
  40. data/{runtime/spec → core_spec}/core/array/append_spec.rb +0 -0
  41. data/{runtime/spec → core_spec}/core/array/assoc_spec.rb +0 -0
  42. data/{runtime/spec → core_spec}/core/array/at_spec.rb +0 -0
  43. data/{runtime/spec → core_spec}/core/array/clear_spec.rb +0 -0
  44. data/{runtime/spec → core_spec}/core/array/collect_spec.rb +0 -0
  45. data/{runtime/spec → core_spec}/core/array/compact_spec.rb +0 -0
  46. data/{runtime/spec → core_spec}/core/array/concat_spec.rb +0 -0
  47. data/{runtime/spec → core_spec}/core/array/constructor_spec.rb +0 -0
  48. data/{runtime/spec → core_spec}/core/array/count_spec.rb +0 -0
  49. data/{runtime/spec → core_spec}/core/array/delete_at_spec.rb +0 -0
  50. data/{runtime/spec → core_spec}/core/array/delete_if_spec.rb +0 -0
  51. data/{runtime/spec → core_spec}/core/array/delete_spec.rb +0 -0
  52. data/{runtime/spec → core_spec}/core/array/each_index_spec.rb +0 -0
  53. data/{runtime/spec → core_spec}/core/array/each_spec.rb +0 -0
  54. data/{runtime/spec → core_spec}/core/array/element_reference_spec.rb +0 -0
  55. data/{runtime/spec → core_spec}/core/array/element_set_spec.rb +0 -0
  56. data/{runtime/spec → core_spec}/core/array/empty_spec.rb +0 -0
  57. data/{runtime/spec → core_spec}/core/array/eql_spec.rb +0 -0
  58. data/{runtime/spec → core_spec}/core/array/equal_value_spec.rb +0 -0
  59. data/{runtime/spec → core_spec}/core/array/fetch_spec.rb +0 -0
  60. data/{runtime/spec → core_spec}/core/array/first_spec.rb +0 -0
  61. data/{runtime/spec → core_spec}/core/array/fixtures/classes.rb +0 -0
  62. data/{runtime/spec → core_spec}/core/array/flatten_spec.rb +0 -0
  63. data/{runtime/spec → core_spec}/core/array/include_spec.rb +0 -0
  64. data/{runtime/spec → core_spec}/core/array/insert_spec.rb +0 -0
  65. data/{runtime/spec → core_spec}/core/array/last_spec.rb +0 -0
  66. data/{runtime/spec → core_spec}/core/array/length_spec.rb +0 -0
  67. data/{runtime/spec → core_spec}/core/array/map_spec.rb +0 -0
  68. data/{runtime/spec → core_spec}/core/array/plus_spec.rb +0 -0
  69. data/{runtime/spec → core_spec}/core/array/pop_spec.rb +0 -0
  70. data/{runtime/spec → core_spec}/core/array/push_spec.rb +0 -0
  71. data/{runtime/spec → core_spec}/core/array/rassoc_spec.rb +0 -0
  72. data/{runtime/spec → core_spec}/core/array/reject_spec.rb +0 -0
  73. data/{runtime/spec → core_spec}/core/array/replace_spec.rb +0 -0
  74. data/{runtime/spec → core_spec}/core/array/reverse_each_spec.rb +0 -0
  75. data/{runtime/spec → core_spec}/core/array/reverse_spec.rb +0 -0
  76. data/{runtime/spec → core_spec}/core/array/shared/collect.rb +0 -0
  77. data/{runtime/spec → core_spec}/core/array/shared/eql.rb +0 -0
  78. data/{runtime/spec → core_spec}/core/array/shared/length.rb +0 -0
  79. data/{runtime/spec → core_spec}/core/array/shared/replace.rb +0 -0
  80. data/{runtime/spec → core_spec}/core/class/new_spec.rb +0 -0
  81. data/{runtime/spec → core_spec}/core/enumerable/all_spec.rb +0 -0
  82. data/{runtime/spec → core_spec}/core/enumerable/any_spec.rb +0 -0
  83. data/{runtime/spec → core_spec}/core/enumerable/collect_spec.rb +0 -0
  84. data/{runtime/spec → core_spec}/core/enumerable/count_spec.rb +0 -0
  85. data/{runtime/spec → core_spec}/core/enumerable/detect_spec.rb +0 -0
  86. data/{runtime/spec → core_spec}/core/enumerable/find_spec.rb +0 -0
  87. data/core_spec/core/enumerable/first_spec.rb +3 -0
  88. data/{runtime/spec → core_spec}/core/enumerable/fixtures/classes.rb +0 -0
  89. data/{runtime/spec → core_spec}/core/enumerable/shared/collect.rb +0 -0
  90. data/{runtime/spec → core_spec}/core/enumerable/shared/entries.rb +0 -0
  91. data/{runtime/spec → core_spec}/core/enumerable/shared/find.rb +0 -0
  92. data/core_spec/core/enumerable/shared/take.rb +31 -0
  93. data/{runtime/spec → core_spec}/core/enumerable/to_a_spec.rb +0 -0
  94. data/{runtime/spec → core_spec}/core/false/and_spec.rb +0 -0
  95. data/{runtime/spec → core_spec}/core/false/inspect_spec.rb +0 -0
  96. data/{runtime/spec → core_spec}/core/false/or_spec.rb +0 -0
  97. data/{runtime/spec → core_spec}/core/false/to_s_spec.rb +0 -0
  98. data/{runtime/spec → core_spec}/core/false/xor_spec.rb +0 -0
  99. data/{runtime/spec → core_spec}/core/hash/allocate_spec.rb +0 -0
  100. data/{runtime/spec → core_spec}/core/hash/assoc_spec.rb +0 -0
  101. data/{runtime/spec → core_spec}/core/hash/clear_spec.rb +0 -0
  102. data/{runtime/spec → core_spec}/core/hash/clone_spec.rb +0 -0
  103. data/{runtime/spec → core_spec}/core/hash/default_spec.rb +0 -0
  104. data/{runtime/spec → core_spec}/core/hash/delete_if_spec.rb +0 -0
  105. data/{runtime/spec → core_spec}/core/hash/element_reference_spec.rb +0 -0
  106. data/{runtime/spec → core_spec}/core/hash/element_set_spec.rb +0 -0
  107. data/{runtime/spec → core_spec}/core/hash/new_spec.rb +0 -0
  108. data/{runtime/spec → core_spec}/core/matchdata/to_a_spec.rb +0 -0
  109. data/{runtime/spec → core_spec}/core/nil/and_spec.rb +0 -0
  110. data/{runtime/spec → core_spec}/core/nil/inspect_spec.rb +0 -0
  111. data/{runtime/spec → core_spec}/core/nil/nil_spec.rb +0 -0
  112. data/{runtime/spec → core_spec}/core/nil/or_spec.rb +0 -0
  113. data/{runtime/spec → core_spec}/core/nil/to_a_spec.rb +0 -0
  114. data/{runtime/spec → core_spec}/core/nil/to_f_spec.rb +0 -0
  115. data/{runtime/spec → core_spec}/core/nil/to_i_spec.rb +0 -0
  116. data/{runtime/spec → core_spec}/core/nil/to_s_spec.rb +0 -0
  117. data/{runtime/spec → core_spec}/core/nil/xor_spec.rb +0 -0
  118. data/{runtime/spec → core_spec}/core/numeric/equal_value_spec.rb +0 -0
  119. data/{runtime/spec → core_spec}/core/object/is_a_spec.rb +0 -0
  120. data/{runtime/spec → core_spec}/core/object/shared/kind_of.rb +0 -0
  121. data/{runtime/spec → core_spec}/core/regexp/match_spec.rb +0 -0
  122. data/{runtime/spec → core_spec}/core/regexp/shared/match.rb +0 -0
  123. data/{runtime/spec → core_spec}/core/symbol/to_proc_spec.rb +0 -0
  124. data/{runtime/spec → core_spec}/core/true/and_spec.rb +0 -0
  125. data/{runtime/spec → core_spec}/core/true/inspect_spec.rb +0 -0
  126. data/{runtime/spec → core_spec}/core/true/or_spec.rb +0 -0
  127. data/{runtime/spec → core_spec}/core/true/to_s_spec.rb +0 -0
  128. data/{runtime/spec → core_spec}/core/true/xor_spec.rb +0 -0
  129. data/{runtime/spec → core_spec}/language/alias_spec.rb +0 -0
  130. data/{runtime/spec → core_spec}/language/and_spec.rb +0 -0
  131. data/{runtime/spec → core_spec}/language/array_spec.rb +0 -0
  132. data/{runtime/spec → core_spec}/language/block_spec.rb +0 -0
  133. data/{runtime/spec → core_spec}/language/break_spec.rb +0 -0
  134. data/{runtime/spec → core_spec}/language/case_spec.rb +0 -0
  135. data/{runtime/spec → core_spec}/language/defined_spec.rb +0 -0
  136. data/{runtime/spec → core_spec}/language/ensure_spec.rb +0 -0
  137. data/{runtime/spec → core_spec}/language/fixtures/block.rb +0 -0
  138. data/{runtime/spec → core_spec}/language/fixtures/break.rb +0 -0
  139. data/{runtime/spec → core_spec}/language/fixtures/defined.rb +0 -0
  140. data/{runtime/spec → core_spec}/language/fixtures/ensure.rb +0 -0
  141. data/{runtime/spec → core_spec}/language/fixtures/next.rb +0 -0
  142. data/{runtime/spec → core_spec}/language/fixtures/send.rb +0 -0
  143. data/{runtime/spec → core_spec}/language/fixtures/super.rb +0 -0
  144. data/{runtime/spec → core_spec}/language/hash_spec.rb +0 -0
  145. data/{runtime/spec → core_spec}/language/if_spec.rb +0 -0
  146. data/{runtime/spec → core_spec}/language/loop_spec.rb +0 -0
  147. data/{runtime/spec → core_spec}/language/next_spec.rb +0 -0
  148. data/{runtime/spec → core_spec}/language/or_spec.rb +0 -0
  149. data/{runtime/spec → core_spec}/language/predefined_spec.rb +0 -0
  150. data/{runtime/spec → core_spec}/language/regexp/interpolation_spec.rb +8 -0
  151. data/{runtime/spec → core_spec}/language/regexp_spec.rb +0 -0
  152. data/{runtime/spec → core_spec}/language/send_spec.rb +0 -0
  153. data/{runtime/spec → core_spec}/language/string_spec.rb +0 -0
  154. data/{runtime/spec → core_spec}/language/super_spec.rb +0 -0
  155. data/{runtime/spec → core_spec}/language/symbol_spec.rb +0 -0
  156. data/{runtime/spec → core_spec}/language/undef_spec.rb +0 -0
  157. data/{runtime/spec → core_spec}/language/unless_spec.rb +0 -0
  158. data/{runtime/spec → core_spec}/language/until_spec.rb +0 -0
  159. data/core_spec/language/variables_spec.rb +112 -0
  160. data/{runtime/spec → core_spec}/language/versions/hash_1.9.rb +0 -0
  161. data/{runtime/spec → core_spec}/language/while_spec.rb +0 -0
  162. data/{runtime/spec → core_spec}/opal/opal/defined_spec.rb +0 -0
  163. data/{runtime/spec → core_spec}/opal/opal/function_spec.rb +0 -0
  164. data/{runtime/spec → core_spec}/opal/opal/native_spec.rb +0 -0
  165. data/{runtime/spec → core_spec}/opal/opal/null_spec.rb +0 -0
  166. data/{runtime/spec → core_spec}/opal/opal/number_spec.rb +0 -0
  167. data/{runtime/spec → core_spec}/opal/opal/object_spec.rb +0 -0
  168. data/{runtime/spec → core_spec}/opal/opal/string_spec.rb +0 -0
  169. data/{runtime/spec → core_spec}/opal/opal/typeof_spec.rb +0 -0
  170. data/{runtime/spec → core_spec}/opal/opal/undefined_spec.rb +0 -0
  171. data/{runtime/spec → core_spec}/opal/true/case_compare_spec.rb +0 -0
  172. data/{runtime/spec → core_spec}/opal/true/class_spec.rb +0 -0
  173. data/{docs/spec_runner.html → core_spec/release_runner.html} +4 -3
  174. data/core_spec/runner.html +16 -0
  175. data/core_spec/spec_helper.rb +23 -0
  176. data/lib/opal.rb +85 -2
  177. data/lib/opal/builder.rb +129 -46
  178. data/lib/opal/context.rb +47 -26
  179. data/lib/opal/dependency_builder.rb +113 -14
  180. data/lib/opal/environment.rb +40 -45
  181. data/lib/opal/parser/grammar.rb +2296 -2254
  182. data/lib/opal/parser/grammar.y +27 -8
  183. data/lib/opal/parser/lexer.rb +12 -3
  184. data/lib/opal/parser/parser.rb +117 -30
  185. data/lib/opal/parser/scope.rb +2 -2
  186. data/lib/opal/version.rb +1 -1
  187. data/opal.gemspec +3 -8
  188. data/spec/grammar/masgn_spec.rb +37 -0
  189. metadata +177 -227
  190. data/index.html +0 -434
  191. data/lib/opal/command.rb +0 -73
  192. data/runtime/README.md +0 -25
  193. data/runtime/corelib/boolean.rb +0 -44
  194. data/runtime/corelib/class.rb +0 -43
  195. data/runtime/corelib/complex.rb +0 -2
  196. data/runtime/corelib/dir.rb +0 -29
  197. data/runtime/corelib/enumerable.rb +0 -316
  198. data/runtime/corelib/enumerator.rb +0 -80
  199. data/runtime/corelib/error.rb +0 -25
  200. data/runtime/corelib/module.rb +0 -171
  201. data/runtime/corelib/native.rb +0 -50
  202. data/runtime/corelib/object.rb +0 -21
  203. data/runtime/corelib/time.rb +0 -196
  204. data/runtime/gemlib/alpha.rb +0 -5
  205. data/runtime/gemlib/kernel.rb +0 -17
  206. data/runtime/gemlib/load_order +0 -2
  207. data/runtime/kernel/class.js +0 -256
  208. data/runtime/kernel/debug.js +0 -42
  209. data/runtime/kernel/init.js +0 -114
  210. data/runtime/kernel/load_order +0 -5
  211. data/runtime/kernel/loader.js +0 -151
  212. data/runtime/kernel/runtime.js +0 -414
  213. data/runtime/spec/language/variables_spec.rb +0 -28
  214. data/runtime/spec/library/stringscanner/scan_spec.rb +0 -36
  215. data/runtime/spec/opal/forwardable/def_instance_delegator_spec.rb +0 -49
  216. data/runtime/spec/spec_helper.rb +0 -25
  217. data/runtime/stdlib/base64.rb +0 -91
  218. data/runtime/stdlib/date.rb +0 -4
  219. data/runtime/stdlib/dev.rb +0 -171
  220. data/runtime/stdlib/forwardable.rb +0 -33
  221. data/runtime/stdlib/optparse.rb +0 -0
  222. data/runtime/stdlib/pp.rb +0 -6
  223. data/runtime/stdlib/racc/parser.rb +0 -159
  224. data/runtime/stdlib/rbconfig.rb +0 -0
  225. data/runtime/stdlib/si.rb +0 -17
  226. data/runtime/stdlib/strscan.rb +0 -53
  227. data/runtime/stdlib/uri.rb +0 -111
  228. data/runtime/stdlib/uri/common.rb +0 -1014
  229. data/runtime/stdlib/uri/ftp.rb +0 -261
  230. data/runtime/stdlib/uri/generic.rb +0 -1599
  231. data/runtime/stdlib/uri/http.rb +0 -106
  232. data/runtime/stdlib/uri/https.rb +0 -22
  233. data/runtime/stdlib/uri/ldap.rb +0 -260
  234. data/runtime/stdlib/uri/ldaps.rb +0 -20
  235. data/runtime/stdlib/uri/mailto.rb +0 -280
  236. data/spec/builder/output_path_spec.rb +0 -50
@@ -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