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
@@ -1,5 +0,0 @@
1
- # In gem, use 'opal-ruby'. Browser uses 'opal-browser'.
2
- RUBY_ENGINE = 'opal-ruby'
3
-
4
- # Gvars do not currently support aliasing - so we need to change both.
5
- $: = $LOAD_PATH = `opal_filesystem.find_paths`
@@ -1,17 +0,0 @@
1
- module Kernel
2
- def require(path)
3
- %x{
4
- var resolved = opal_filesystem.require(#{path}, #{$:});
5
-
6
- if (resolved === false) {
7
- return false;
8
- }
9
- else if (!resolved) {
10
- #{ raise LoadError, "cannot load file -- #{path}" };
11
- }
12
- else {
13
- return true;
14
- }
15
- }
16
- end
17
- end
@@ -1,2 +0,0 @@
1
- alpha
2
- kernel
@@ -1,256 +0,0 @@
1
- // Root of all objects and classes inside opal
2
- function RootObject() {};
3
-
4
- RootObject.prototype.toString = function() {
5
- if (this.$flags & T_OBJECT) {
6
- return "#<" + (this.$klass).__classid__ + ":0x" + this.$id + ">";
7
- }
8
- else {
9
- return '<' + this.__classid__ + ' ' + this.$id + '>';
10
- }
11
- };
12
-
13
- // Boot a base class (makes instances).
14
- function boot_defclass(superklass) {
15
- var cls = function() {
16
- this.$id = unique_id++;
17
-
18
- return this;
19
- };
20
-
21
- if (superklass) {
22
- var ctor = function() {};
23
- ctor.prototype = superklass.prototype;
24
-
25
- cls.prototype = new ctor();
26
- }
27
- else {
28
- cls.prototype = new RootObject();
29
- }
30
-
31
- cls.prototype.constructor = cls;
32
- cls.prototype.$flags = T_OBJECT;
33
-
34
- return cls;
35
- }
36
-
37
- // Boot actual (meta classes) of core objects.
38
- function boot_makemeta(id, klass, superklass) {
39
- var meta = function() {
40
- this.$id = unique_id++;
41
-
42
- return this;
43
- };
44
-
45
- var ctor = function() {};
46
- ctor.prototype = superklass.prototype;
47
-
48
- meta.prototype = new ctor();
49
-
50
- var proto = meta.prototype;
51
- proto.$included_in = [];
52
- proto.$m = {};
53
- proto.$methods = [];
54
- proto.$allocator = klass;
55
- proto.$flags = T_CLASS;
56
- proto.__classid__ = id;
57
- proto.$s = superklass;
58
- proto.constructor = meta;
59
-
60
- var result = new meta();
61
- klass.prototype.$klass = result;
62
- result.$proto = klass.prototype;
63
-
64
- return result;
65
- }
66
-
67
- // Create generic class with given superclass.
68
- function boot_class(superklass) {
69
- // instances
70
- var cls = function() {
71
- this.$id = unique_id++;
72
-
73
- return this;
74
- };
75
-
76
- var ctor = function() {};
77
- ctor.prototype = superklass.$allocator.prototype;
78
-
79
- cls.prototype = new ctor();
80
-
81
- var proto = cls.prototype;
82
- proto.constructor = cls;
83
- proto.$flags = T_OBJECT;
84
-
85
- // class itself
86
- var meta = function() {
87
- this.$id = unique_id++;
88
-
89
- return this;
90
- };
91
-
92
- var mtor = function() {};
93
- mtor.prototype = superklass.constructor.prototype;
94
-
95
- meta.prototype = new mtor();
96
-
97
- proto = meta.prototype;
98
- proto.$allocator = cls;
99
- proto.$flags = T_CLASS;
100
- proto.$m = {};
101
- proto.$methods = [];
102
- proto.constructor = meta;
103
- proto.$s = superklass;
104
-
105
- var result = new meta();
106
- cls.prototype.$klass = result;
107
-
108
- result.$proto = cls.prototype;
109
-
110
- return result;
111
- }
112
-
113
- function boot_module() {
114
- // where module "instance" methods go. will never be instantiated so it
115
- // can be a regular object
116
- var module_cons = function(){};
117
- var module_inst = module_cons.prototype;
118
-
119
- // Module itself
120
- var meta = function() {
121
- this.$id = unique_id++;
122
- return this;
123
- };
124
-
125
- var mtor = function(){};
126
- mtor.prototype = RubyModule.constructor.prototype;
127
- meta.prototype = new mtor();
128
-
129
- var proto = meta.prototype;
130
- proto.$allocator = module_cons;
131
- proto.$flags = T_MODULE;
132
- proto.constructor = meta;
133
- proto.$s = RubyModule;
134
-
135
- var module = new meta();
136
- module.$proto = module_inst;
137
-
138
- return module;
139
- }
140
-
141
- // Get actual class ignoring singleton classes and iclasses.
142
- function class_real(klass) {
143
- while (klass.$flags & FL_SINGLETON) {
144
- klass = klass.$s;
145
- }
146
-
147
- return klass;
148
- }
149
-
150
- // Make metaclass for the given class
151
- function make_metaclass(klass, superklass) {
152
- if (klass.$flags & T_CLASS) {
153
- if ((klass.$flags & T_CLASS) && (klass.$flags & FL_SINGLETON)) {
154
- raise(RubyException, "too much meta: return klass?");
155
- }
156
- else {
157
- var class_id = "#<Class:" + klass.__classid__ + ">",
158
- meta = boot_class(superklass);
159
-
160
- meta.__classid__ = class_id;
161
- meta.$allocator.prototype = klass.constructor.prototype;
162
- meta.$flags |= FL_SINGLETON;
163
-
164
- klass.$klass = meta;
165
-
166
- meta.$const = klass.$const;
167
- meta.__attached__ = klass;
168
-
169
- return meta;
170
- }
171
- }
172
- else {
173
- return make_singleton_class(klass);
174
- }
175
- }
176
-
177
- function make_singleton_class(obj) {
178
- var orig_class = obj.$klass,
179
- class_id = "#<Class:#<" + orig_class.__classid__ + ":" + orig_class.$id + ">>";
180
-
181
- klass = boot_class(orig_class);
182
- klass.__classid__ = class_id;
183
-
184
- klass.$flags |= FL_SINGLETON;
185
- klass.$bridge_prototype = obj;
186
-
187
- obj.$klass = klass;
188
-
189
- klass.__attached__ = obj;
190
-
191
- klass.$klass = class_real(orig_class).$k;
192
-
193
- return klass;
194
- }
195
-
196
- function bridge_class(constructor, flags, id) {
197
- var klass = define_class(RubyObject, id, RubyObject),
198
- prototype = constructor.prototype;
199
-
200
- klass.$allocator = constructor;
201
- klass.$proto = prototype;
202
-
203
- bridged_classes.push(klass);
204
-
205
- prototype.$klass = klass;
206
- prototype.$flags = flags;
207
-
208
- return klass;
209
- }
210
-
211
- // Define new ruby class
212
- function define_class(base, id, superklass) {
213
- var klass;
214
-
215
- var class_id = (base === RubyObject ? id : base.__classid__ + '::' + id);
216
-
217
- klass = boot_class(superklass);
218
- klass.__classid__ = class_id;
219
-
220
- make_metaclass(klass, superklass.$klass);
221
-
222
- var const_alloc = function() {};
223
- var const_scope = const_alloc.prototype = new base.$const.alloc();
224
- klass.$const = const_scope;
225
- const_scope.alloc = const_alloc;
226
-
227
- base.$const[id] = klass;
228
-
229
- if (superklass.m$inherited) {
230
- superklass.m$inherited(null, klass);
231
- }
232
-
233
- return klass;
234
- }
235
-
236
- // Get singleton class of obj
237
- function singleton_class(obj) {
238
- var klass;
239
-
240
- if (obj.$flags & T_OBJECT) {
241
- if ((obj.$flags & T_NUMBER) || (obj.$flags & T_STRING)) {
242
- raise(RubyTypeError, "can't define singleton");
243
- }
244
- }
245
-
246
- if ((obj.$klass.$flags & FL_SINGLETON) && obj.$klass.__attached__ == obj) {
247
- klass = obj.$klass;
248
- }
249
- else {
250
- var class_id = obj.$klass.__classid__;
251
-
252
- klass = make_metaclass(obj, obj.$klass);
253
- }
254
-
255
- return klass;
256
- }
@@ -1,42 +0,0 @@
1
- function exc_backtrace(err) {
2
- var old = Error.prepareStackTrace;
3
- Error.prepareStackTrace = prepare_backtrace;
4
-
5
- var backtrace = err.stack;
6
- Error.prepareStackTrace = old;
7
-
8
- if (backtrace && backtrace.join) {
9
- return backtrace;
10
- }
11
-
12
- return ["No backtrace available"];
13
- }
14
-
15
- function prepare_backtrace(error, stack) {
16
- var code = [], f, b, k, name, self;
17
-
18
- for (var i = 0; i < stack.length; i++) {
19
- f = stack[i];
20
- b = f.getFunction();
21
- name = f.getMethodName();
22
- self = f.getThis();
23
-
24
- if (!self.$klass || !name) {
25
- continue;
26
- }
27
-
28
- self = (self.$flags & T_OBJECT ?
29
- class_real(self.$klass).__classid__ + '#' :
30
- self.__classid__ + '.');
31
-
32
- code.push("from " + self + jsid_to_mid(name) + ' at ' + f.getFileName() + ":" + f.getLineNumber());
33
- }
34
-
35
- return code;
36
- }
37
-
38
- // Print error backtrace to console
39
- opal.backtrace = opal.bt = function(err) {
40
- console.log(err.$klass.__classid__ + ": " + err.message);
41
- console.log("\t" + exc_backtrace(err).join("\n\t"));
42
- };
@@ -1,114 +0,0 @@
1
- // Initialization
2
- // --------------
3
-
4
- // The *instances* of core objects
5
- var BootObject = boot_defclass();
6
- var BootModule = boot_defclass(BootObject);
7
- var BootClass = boot_defclass(BootModule);
8
-
9
- // The *classes' of core objects
10
- var RubyObject = boot_makemeta('Object', BootObject, BootClass);
11
- var RubyModule = boot_makemeta('Module', BootModule, RubyObject.constructor);
12
- var RubyClass = boot_makemeta('Class', BootClass, RubyModule.constructor);
13
-
14
- // Fix boot classes to use meta class
15
- RubyObject.$klass = RubyClass;
16
- RubyModule.$klass = RubyClass;
17
- RubyClass.$klass = RubyClass;
18
-
19
- // fix superclasses
20
- RubyObject.$s = null;
21
- RubyModule.$s = RubyObject;
22
- RubyClass.$s = RubyModule;
23
-
24
- opal.Object = RubyObject;
25
- opal.Module = RubyModule;
26
- opal.Class = RubyClass;
27
-
28
- // make object act like a module
29
- var bridged_classes = RubyObject.$included_in = [];
30
-
31
- // Top level Object scope (used by object and top_self).
32
- var top_const_alloc = function(){};
33
- var top_const_scope = top_const_alloc.prototype;
34
- top_const_scope.alloc = top_const_alloc;
35
-
36
- RubyObject.$const = opal.constants = top_const_scope;
37
-
38
- var module_const_alloc = function(){};
39
- var module_const_scope = new top_const_alloc();
40
- module_const_scope.alloc = module_const_alloc;
41
- RubyModule.$const = module_const_scope;
42
-
43
- var class_const_alloc = function(){};
44
- var class_const_scope = new top_const_alloc();
45
- class_const_scope.alloc = class_const_alloc;
46
- RubyClass.$const = class_const_scope;
47
-
48
- RubyObject.$const.BasicObject = RubyObject;
49
- RubyObject.$const.Object = RubyObject;
50
- RubyObject.$const.Module = RubyModule;
51
- RubyObject.$const.Class = RubyClass;
52
-
53
- RubyModule.$allocator.prototype.$donate = function(methods) {
54
- var included_in = this.$included_in, includee, method, table = this.$proto, dest;
55
-
56
- if (included_in) {
57
- for (var i = 0, length = included_in.length; i < length; i++) {
58
- includee = included_in[i];
59
- dest = includee.$proto;
60
- for (var j = 0, jj = methods.length; j < jj; j++) {
61
- method = methods[j];
62
- // if (!dest[method]) {
63
- dest[method] = table[method];
64
- // }
65
- }
66
- // if our includee is itself included in another module/class then it
67
- // should also donate its new methods
68
- if (includee.$included_in) {
69
- includee.$donate(methods);
70
- }
71
- }
72
- }
73
- };
74
-
75
- var top_self = opal.top = new RubyObject.$allocator();
76
-
77
- var RubyNilClass = define_class(RubyObject, 'NilClass', RubyObject);
78
- var nil = opal.nil = new RubyNilClass.$allocator();
79
-
80
- var RubyArray = bridge_class(Array, T_OBJECT | T_ARRAY, 'Array');
81
- var RubyNumeric = bridge_class(Number, T_OBJECT | T_NUMBER, 'Numeric');
82
-
83
- var RubyHash = bridge_class(Hash, T_OBJECT, 'Hash');
84
-
85
- var RubyString = bridge_class(String, T_OBJECT | T_STRING, 'String');
86
- var RubyBoolean = bridge_class(Boolean, T_OBJECT | T_BOOLEAN, 'Boolean');
87
- var RubyProc = bridge_class(Function, T_OBJECT | T_PROC, 'Proc');
88
- var RubyRegexp = bridge_class(RegExp, T_OBJECT, 'Regexp');
89
-
90
- var RubyMatch = define_class(RubyObject, 'MatchData', RubyObject);
91
- var RubyRange = define_class(RubyObject, 'Range', RubyObject);
92
-
93
- var RubyException = bridge_class(Error, T_OBJECT, 'Exception');
94
- var RubyStandardError = define_class(RubyObject, 'StandardError', RubyException);
95
- var RubyRuntimeError = define_class(RubyObject, 'RuntimeError', RubyException);
96
- var RubyLocalJumpError = define_class(RubyObject, 'LocalJumpError', RubyStandardError);
97
- var RubyTypeError = define_class(RubyObject, 'TypeError', RubyStandardError);
98
- var RubyNameError = define_class(RubyObject, 'NameError', RubyStandardError);
99
- var RubyNoMethodError = define_class(RubyObject, 'NoMethodError', RubyNameError);
100
- var RubyArgError = define_class(RubyObject, 'ArgumentError', RubyStandardError);
101
- var RubyScriptError = define_class(RubyObject, 'ScriptError', RubyException);
102
- var RubyLoadError = define_class(RubyObject, 'LoadError', RubyScriptError);
103
- var RubyIndexError = define_class(RubyObject, 'IndexError', RubyStandardError);
104
- var RubyKeyError = define_class(RubyObject, 'KeyError', RubyIndexError);
105
- var RubyRangeError = define_class(RubyObject, 'RangeError', RubyStandardError);
106
- var RubyNotImplError = define_class(RubyObject, 'NotImplementedError', RubyException);
107
-
108
- RubyException.$allocator.prototype.toString = function() {
109
- return this.$klass.__classid__ + ': ' + this.message;
110
- };
111
-
112
- var breaker = opal.breaker = new Error('unexpected break');
113
- breaker.$klass = RubyLocalJumpError;
114
- breaker.$t = function() { throw this; };
@@ -1,5 +0,0 @@
1
- runtime
2
- class
3
- loader
4
- debug
5
- init