opal 0.4.2 → 0.4.3
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.
- data/.travis.yml +5 -0
- data/README.md +42 -2
- data/Rakefile +7 -6
- data/bin/opal +2 -2
- data/{opal → corelib}/opal.rb +21 -21
- data/{opal → corelib}/opal/array.rb +37 -24
- data/{opal → corelib}/opal/basic_object.rb +0 -0
- data/{opal → corelib}/opal/boolean.rb +0 -0
- data/{opal → corelib}/opal/class.rb +45 -22
- data/{opal → corelib}/opal/comparable.rb +0 -0
- data/{opal → corelib}/opal/enumerable.rb +0 -0
- data/{opal → corelib}/opal/enumerator.rb +0 -0
- data/{opal → corelib}/opal/error.rb +16 -12
- data/{opal → corelib}/opal/hash.rb +2 -2
- data/{opal → corelib}/opal/kernel.rb +16 -14
- data/{opal → corelib}/opal/native.rb +0 -0
- data/{opal → corelib}/opal/nil_class.rb +1 -1
- data/{opal → corelib}/opal/numeric.rb +0 -0
- data/{opal → corelib}/opal/proc.rb +0 -0
- data/{opal → corelib}/opal/range.rb +2 -2
- data/{opal → corelib}/opal/regexp.rb +0 -0
- data/{opal → corelib}/opal/runtime.js +92 -126
- data/{opal → corelib}/opal/string.rb +14 -13
- data/{opal → corelib}/opal/time.rb +0 -0
- data/lib/opal.rb +9 -8
- data/lib/opal/builder.rb +81 -0
- data/lib/opal/erb.rb +17 -0
- data/lib/opal/grammar.rb +33 -30
- data/lib/opal/grammar.y +18 -15
- data/lib/opal/grammar_helpers.rb +5 -5
- data/lib/opal/lexer.rb +3 -2
- data/lib/opal/parser.rb +58 -41
- data/lib/opal/require_parser.rb +77 -0
- data/lib/opal/version.rb +1 -1
- data/opal.gemspec +1 -1
- data/{config.ru → spec/config.ru} +0 -0
- data/spec/opal/array/to_json_spec.rb +3 -1
- data/spec/opal/boolean/to_json_spec.rb +3 -1
- data/spec/opal/erb/erb_spec.rb +25 -0
- data/spec/opal/erb/quoted.opalerb +1 -0
- data/spec/opal/erb/simple.opalerb +1 -0
- data/spec/opal/json/parse_spec.rb +3 -1
- data/spec/opal/kernel/to_json_spec.rb +3 -1
- data/spec/opal/nil/to_json_spec.rb +3 -1
- data/spec/opal/string/to_json_spec.rb +3 -1
- data/spec/parser/int_spec.rb +13 -0
- data/spec/parser/regexp_spec.rb +16 -0
- data/spec/parser/str_spec.rb +11 -0
- data/spec/rubyspec/core/array/plus_spec.rb +7 -2
- data/spec/rubyspec/core/hash/to_json_spec.rb +3 -1
- data/spec/rubyspec/core/numeric/to_json_spec.rb +3 -1
- data/spec/rubyspec/language/defined_spec.rb +9 -0
- data/spec/rubyspec/library/stringscanner/pos_spec.rb +20 -0
- data/{opal → stdlib}/date.rb +0 -0
- data/stdlib/erb.rb +26 -0
- data/{opal → stdlib}/fileutils.rb +0 -0
- data/{opal → stdlib}/iconv.rb +0 -0
- data/{opal/opal → stdlib}/json.rb +0 -0
- data/{opal → stdlib}/observer.rb +0 -0
- data/{opal → stdlib}/opal-browser/local_storage.rb +0 -0
- data/{opal → stdlib}/opal-browser/script_loader.rb +1 -1
- data/{opal → stdlib}/opal-parser.js.erb +1 -1
- data/{opal → stdlib}/opal-source-maps.js.erb +0 -0
- data/{opal → stdlib}/pp.rb +0 -0
- data/{opal → stdlib}/racc.rb +0 -0
- data/{opal → stdlib}/rbconfig.rb +0 -0
- data/{opal → stdlib}/source_map.rb +1 -1
- data/{opal → stdlib}/source_map/generator.rb +0 -0
- data/{opal → stdlib}/source_map/parser.rb +0 -0
- data/{opal → stdlib}/source_map/vlq.rb +0 -0
- data/{opal → stdlib}/strscan.rb +15 -0
- data/{opal → stdlib}/yaml.rb +0 -0
- metadata +87 -77
- checksums.yaml +0 -7
- data/CHANGELOG.md +0 -176
- data/examples/native/Gemfile +0 -3
- data/examples/native/README.md +0 -17
- data/examples/native/app/app.rb +0 -57
- data/examples/native/config.ru +0 -8
- data/examples/native/index.html.erb +0 -12
- data/examples/rack/Gemfile +0 -3
- data/examples/rack/README.md +0 -22
- data/examples/rack/app/app.rb +0 -5
- data/examples/rack/config.ru +0 -20
- data/examples/rack/index.html +0 -12
- data/examples/server/Gemfile +0 -3
- data/examples/server/README.md +0 -22
- data/examples/server/app/app.rb +0 -18
- data/examples/server/config.ru +0 -10
- data/examples/server/index.html.erb +0 -10
- data/opal/opal-template.rb +0 -33
- data/spec/opal/class/_inherited_spec.rb +0 -32
- data/spec/opal/class/new_spec.rb +0 -27
data/.travis.yml
CHANGED
data/README.md
CHANGED
|
@@ -13,6 +13,41 @@ is a Freenode IRC channel at [#opal](http://webchat.freenode.net/?channels=opal)
|
|
|
13
13
|
|
|
14
14
|
See the website, [http://opalrb.org](http://opalrb.org).
|
|
15
15
|
|
|
16
|
+
### Compiling ruby code
|
|
17
|
+
|
|
18
|
+
`Opal.parse` is a simple interface to just compile a string of ruby into a
|
|
19
|
+
string of javascript code.
|
|
20
|
+
|
|
21
|
+
```ruby
|
|
22
|
+
Opal.parse("puts 'wow'") # => "(function() { ... })()"
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Running this by itself is not enough, you need the opal runtime/corelib.
|
|
26
|
+
|
|
27
|
+
### Building the corelib
|
|
28
|
+
|
|
29
|
+
`Opal::Builder` can be used to build the runtime/corelib into a string.
|
|
30
|
+
|
|
31
|
+
```ruby
|
|
32
|
+
Opal::Builder.build('opal') #=> "(function() { ... })()"
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Running compiled code
|
|
36
|
+
|
|
37
|
+
You can write the above two strings to file, and run as:
|
|
38
|
+
|
|
39
|
+
```html
|
|
40
|
+
<!DOCTYPE html>
|
|
41
|
+
<html>
|
|
42
|
+
<head>
|
|
43
|
+
<script src="opal.js"></script>
|
|
44
|
+
<script src="app.js"></script>
|
|
45
|
+
</head>
|
|
46
|
+
</html>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Just open a browser to this page and view the console.
|
|
50
|
+
|
|
16
51
|
## Running tests
|
|
17
52
|
|
|
18
53
|
First, install dependencies:
|
|
@@ -34,10 +69,15 @@ The `lib` directory holds the opal parser/compiler used to compile ruby
|
|
|
34
69
|
into javascript. It is also built ready for the browser into `opal-parser.js`
|
|
35
70
|
to allow compilation in any javascript environment.
|
|
36
71
|
|
|
37
|
-
###
|
|
72
|
+
### corelib
|
|
38
73
|
|
|
39
74
|
This directory holds the opal runtime and corelib implemented in ruby and
|
|
40
|
-
javascript.
|
|
75
|
+
javascript.
|
|
76
|
+
|
|
77
|
+
### stdlib
|
|
78
|
+
|
|
79
|
+
Holds the stdlib that opal currently supports. This includes Observable,
|
|
80
|
+
StringScanner, Date, etc.
|
|
41
81
|
|
|
42
82
|
### spec
|
|
43
83
|
|
data/Rakefile
CHANGED
|
@@ -29,6 +29,8 @@ class RunSpec
|
|
|
29
29
|
|
|
30
30
|
exit 1 unless success
|
|
31
31
|
|
|
32
|
+
rescue => e
|
|
33
|
+
puts e.message
|
|
32
34
|
ensure
|
|
33
35
|
Process.kill(:SIGINT, server)
|
|
34
36
|
Process.wait
|
|
@@ -118,6 +120,8 @@ end
|
|
|
118
120
|
desc "Build opal.js and opal-parser.js to build/"
|
|
119
121
|
task :dist do
|
|
120
122
|
Opal::Processor.arity_check_enabled = false
|
|
123
|
+
Opal::Processor.source_map_enabled = false
|
|
124
|
+
Opal::Processor.method_missing_enabled = false
|
|
121
125
|
|
|
122
126
|
env = Opal::Environment.new
|
|
123
127
|
|
|
@@ -127,8 +131,9 @@ task :dist do
|
|
|
127
131
|
puts "* building #{lib}..."
|
|
128
132
|
|
|
129
133
|
src = env[lib].to_s
|
|
130
|
-
min = uglify src
|
|
131
|
-
gzp = gzip min
|
|
134
|
+
#min = uglify src
|
|
135
|
+
#gzp = gzip min
|
|
136
|
+
min = gzp = nil
|
|
132
137
|
|
|
133
138
|
File.open("build/#{lib}.js", 'w+') { |f| f << src }
|
|
134
139
|
File.open("build/#{lib}.min.js", 'w+') { |f| f << min } if min
|
|
@@ -142,10 +147,6 @@ task :dist do
|
|
|
142
147
|
end
|
|
143
148
|
end
|
|
144
149
|
|
|
145
|
-
desc "Check file sizes for opal.js runtime"
|
|
146
|
-
task :sizes => :dist do
|
|
147
|
-
end
|
|
148
|
-
|
|
149
150
|
desc "Rebuild grammar.rb for opal parser"
|
|
150
151
|
task :racc do
|
|
151
152
|
%x(racc -l lib/opal/grammar.y -o lib/opal/grammar.rb)
|
data/bin/opal
CHANGED
|
@@ -49,7 +49,7 @@ parser = OptionParser.new do |opts|
|
|
|
49
49
|
opts.separator 'Compilation Options:'
|
|
50
50
|
|
|
51
51
|
opts.on('-M', '--no-method-missing', 'Disable method missing') do |value|
|
|
52
|
-
options[:
|
|
52
|
+
options[:method_missing] = false
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
opts.on('-O', '--no-optimized-operators', 'Disable optimized operators') do |value|
|
|
@@ -61,7 +61,7 @@ parser = OptionParser.new do |opts|
|
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
opts.on('-C', '--no-const-missing', 'Disable const missing') do |value|
|
|
64
|
-
options[:
|
|
64
|
+
options[:const_missing] = false
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
dynamic_require_levels = %w[error warning ignore]
|
data/{opal → corelib}/opal.rb
RENAMED
|
@@ -1,23 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
#= require 'opal/native'
|
|
1
|
+
require 'opal/runtime'
|
|
2
|
+
require 'opal/class'
|
|
3
|
+
require 'opal/basic_object'
|
|
4
|
+
require 'opal/kernel'
|
|
5
|
+
require 'opal/nil_class'
|
|
6
|
+
require 'opal/boolean'
|
|
7
|
+
require 'opal/error'
|
|
8
|
+
require 'opal/regexp'
|
|
9
|
+
require 'opal/comparable'
|
|
10
|
+
require 'opal/enumerable'
|
|
11
|
+
require 'opal/enumerator'
|
|
12
|
+
require 'opal/array'
|
|
13
|
+
require 'opal/hash'
|
|
14
|
+
require 'opal/string'
|
|
15
|
+
require 'opal/numeric'
|
|
16
|
+
require 'opal/proc'
|
|
17
|
+
require 'opal/range'
|
|
18
|
+
require 'opal/time'
|
|
19
|
+
require 'opal/native'
|
|
21
20
|
|
|
22
21
|
# regexp matches
|
|
23
22
|
$& = $~ = $` = $' = nil
|
|
@@ -45,7 +44,8 @@ STDOUT = $stdout = Object.new
|
|
|
45
44
|
RUBY_PLATFORM = 'opal'
|
|
46
45
|
RUBY_ENGINE = 'opal'
|
|
47
46
|
RUBY_VERSION = '1.9.3'
|
|
48
|
-
|
|
47
|
+
RUBY_ENGINE_VERSION = '0.4.3'
|
|
48
|
+
RUBY_RELEASE_DATE = '2013-07-24'
|
|
49
49
|
|
|
50
50
|
def self.to_s
|
|
51
51
|
'main'
|
|
@@ -14,15 +14,15 @@ class Array
|
|
|
14
14
|
|
|
15
15
|
def self.new(size = undefined, obj = nil, &block)
|
|
16
16
|
%x{
|
|
17
|
-
|
|
17
|
+
|
|
18
18
|
if (arguments.length > 2)
|
|
19
19
|
#{raise ArgumentError.new("wrong number of arguments. Array#new")};
|
|
20
|
-
|
|
21
|
-
if (arguments.length == 0)
|
|
20
|
+
|
|
21
|
+
if (arguments.length == 0)
|
|
22
22
|
return [];
|
|
23
23
|
|
|
24
|
-
var size,
|
|
25
|
-
obj = arguments[1],
|
|
24
|
+
var size,
|
|
25
|
+
obj = arguments[1],
|
|
26
26
|
arr = [];
|
|
27
27
|
|
|
28
28
|
if (!obj) {
|
|
@@ -45,20 +45,20 @@ class Array
|
|
|
45
45
|
} else {
|
|
46
46
|
#{raise TypeError.new("can't convert to Integer. Array#new")};
|
|
47
47
|
}
|
|
48
|
-
} else {
|
|
48
|
+
} else {
|
|
49
49
|
#{raise TypeError.new("can't convert to Integer. Array#new")};
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
|
-
|
|
52
|
+
|
|
53
53
|
if (size < 0) {
|
|
54
54
|
#{raise ArgumentError.new("negative array size")};
|
|
55
55
|
}
|
|
56
|
-
|
|
56
|
+
|
|
57
57
|
if (obj == undefined) {
|
|
58
58
|
obj = nil;
|
|
59
59
|
}
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
|
|
61
|
+
|
|
62
62
|
if (block === nil)
|
|
63
63
|
for (var i = 0; i < size; i++) {
|
|
64
64
|
arr.push(obj);
|
|
@@ -71,8 +71,8 @@ class Array
|
|
|
71
71
|
}
|
|
72
72
|
arr[i] = block(i);
|
|
73
73
|
}
|
|
74
|
-
}
|
|
75
|
-
|
|
74
|
+
}
|
|
75
|
+
|
|
76
76
|
return arr;
|
|
77
77
|
}
|
|
78
78
|
end
|
|
@@ -135,7 +135,20 @@ class Array
|
|
|
135
135
|
end
|
|
136
136
|
|
|
137
137
|
def +(other)
|
|
138
|
-
|
|
138
|
+
%x{
|
|
139
|
+
var arr = other;
|
|
140
|
+
|
|
141
|
+
if (!other._isArray){
|
|
142
|
+
if (#{other.respond_to?(:to_ary)}) {
|
|
143
|
+
arr = other['$to_ary']();
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
#{raise TypeError.new("can't convert to Array. Array#+") };
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return #{self}.concat(arr);
|
|
151
|
+
}
|
|
139
152
|
end
|
|
140
153
|
|
|
141
154
|
def -(other)
|
|
@@ -144,32 +157,32 @@ class Array
|
|
|
144
157
|
b = #{other},
|
|
145
158
|
tmp = [],
|
|
146
159
|
result = [];
|
|
147
|
-
|
|
148
|
-
if (typeof(b) == "object" && !(b
|
|
160
|
+
|
|
161
|
+
if (typeof(b) == "object" && !(b._isArray)) {
|
|
149
162
|
if (b['$to_ary'] && typeof(b['$to_ary']) == "function") {
|
|
150
163
|
b = b['$to_ary']();
|
|
151
164
|
} else {
|
|
152
165
|
#{raise TypeError.new("can't convert to Array. Array#-") };
|
|
153
166
|
}
|
|
154
167
|
}else if ((typeof(b) != "object")) {
|
|
155
|
-
#{raise TypeError.new("can't convert to Array. Array#-") };
|
|
156
|
-
}
|
|
168
|
+
#{raise TypeError.new("can't convert to Array. Array#-") };
|
|
169
|
+
}
|
|
157
170
|
|
|
158
171
|
if (a.length == 0)
|
|
159
172
|
return [];
|
|
160
173
|
if (b.length == 0)
|
|
161
|
-
return a;
|
|
162
|
-
|
|
163
|
-
for(var i = 0, length = b.length; i < length; i++) {
|
|
174
|
+
return a;
|
|
175
|
+
|
|
176
|
+
for(var i = 0, length = b.length; i < length; i++) {
|
|
164
177
|
tmp[b[i]] = true;
|
|
165
178
|
}
|
|
166
179
|
for(var i = 0, length = a.length; i < length; i++) {
|
|
167
|
-
if (!tmp[a[i]]) {
|
|
180
|
+
if (!tmp[a[i]]) {
|
|
168
181
|
result.push(a[i]);
|
|
169
|
-
}
|
|
182
|
+
}
|
|
170
183
|
}
|
|
171
|
-
|
|
172
|
-
return result;
|
|
184
|
+
|
|
185
|
+
return result;
|
|
173
186
|
}
|
|
174
187
|
end
|
|
175
188
|
|
|
File without changes
|
|
File without changes
|
|
@@ -23,22 +23,41 @@ class Class
|
|
|
23
23
|
`__opal.bridge(name, constructor)`
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
+
def ===(object)
|
|
27
|
+
%x{
|
|
28
|
+
if (object == null) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
var search = object._klass;
|
|
33
|
+
|
|
34
|
+
while (search) {
|
|
35
|
+
if (search === #{self}) {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
search = search._super;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
end
|
|
26
45
|
|
|
27
46
|
def allocate
|
|
28
47
|
%x{
|
|
29
|
-
var obj = new #{self};
|
|
48
|
+
var obj = new #{self}._alloc;
|
|
30
49
|
obj._id = Opal.uid();
|
|
31
50
|
return obj;
|
|
32
51
|
}
|
|
33
52
|
end
|
|
34
53
|
|
|
35
54
|
def alias_method(newname, oldname)
|
|
36
|
-
`#{self}.
|
|
55
|
+
`#{self}._proto['$' + newname] = #{self}._proto['$' + oldname]`
|
|
37
56
|
self
|
|
38
57
|
end
|
|
39
58
|
|
|
40
59
|
def alias_native(mid, jsid)
|
|
41
|
-
`#{self}.
|
|
60
|
+
`#{self}._proto['$' + mid] = #{self}._proto[jsid]`
|
|
42
61
|
end
|
|
43
62
|
|
|
44
63
|
def ancestors
|
|
@@ -77,8 +96,8 @@ class Class
|
|
|
77
96
|
|
|
78
97
|
module._included_in.push(klass);
|
|
79
98
|
|
|
80
|
-
var donator = module.
|
|
81
|
-
prototype = klass.
|
|
99
|
+
var donator = module._proto,
|
|
100
|
+
prototype = klass._proto,
|
|
82
101
|
methods = module._methods;
|
|
83
102
|
|
|
84
103
|
for (var i = 0, length = methods.length; i < length; i++) {
|
|
@@ -86,9 +105,9 @@ class Class
|
|
|
86
105
|
prototype[method] = donator[method];
|
|
87
106
|
}
|
|
88
107
|
|
|
89
|
-
if (prototype._smethods) {
|
|
90
|
-
|
|
91
|
-
}
|
|
108
|
+
// if (prototype._smethods) {
|
|
109
|
+
// prototype._smethods.push.apply(prototype._smethods, methods);
|
|
110
|
+
//}
|
|
92
111
|
|
|
93
112
|
if (klass._included_in) {
|
|
94
113
|
__opal.donate(klass, methods.slice(), true);
|
|
@@ -105,14 +124,14 @@ class Class
|
|
|
105
124
|
|
|
106
125
|
def attr_reader(*names)
|
|
107
126
|
%x{
|
|
108
|
-
var proto = #{self}.
|
|
127
|
+
var proto = #{self}._proto, cls = #{self};
|
|
109
128
|
for (var i = 0, length = names.length; i < length; i++) {
|
|
110
129
|
(function(name) {
|
|
111
130
|
proto[name] = nil;
|
|
112
131
|
var func = function() { return this[name] };
|
|
113
132
|
|
|
114
133
|
if (cls._isSingleton) {
|
|
115
|
-
|
|
134
|
+
proto.constructor.prototype['$' + name] = func;
|
|
116
135
|
}
|
|
117
136
|
else {
|
|
118
137
|
proto['$' + name] = func;
|
|
@@ -126,14 +145,14 @@ class Class
|
|
|
126
145
|
|
|
127
146
|
def attr_writer(*names)
|
|
128
147
|
%x{
|
|
129
|
-
var proto = #{self}.
|
|
148
|
+
var proto = #{self}._proto, cls = #{self};
|
|
130
149
|
for (var i = 0, length = names.length; i < length; i++) {
|
|
131
150
|
(function(name) {
|
|
132
151
|
proto[name] = nil;
|
|
133
152
|
var func = function(value) { return this[name] = value; };
|
|
134
153
|
|
|
135
154
|
if (cls._isSingleton) {
|
|
136
|
-
|
|
155
|
+
proto.constructor.prototype['$' + name + '='] = func;
|
|
137
156
|
}
|
|
138
157
|
else {
|
|
139
158
|
proto['$' + name + '='] = func;
|
|
@@ -258,10 +277,10 @@ class Class
|
|
|
258
277
|
|
|
259
278
|
var jsid = '$' + name;
|
|
260
279
|
block._jsid = jsid;
|
|
261
|
-
block._sup = #{self}.
|
|
280
|
+
block._sup = #{self}._proto[jsid];
|
|
262
281
|
block._s = null;
|
|
263
282
|
|
|
264
|
-
#{self}.
|
|
283
|
+
#{self}._proto[jsid] = block;
|
|
265
284
|
__opal.donate(#{self}, [jsid]);
|
|
266
285
|
|
|
267
286
|
return null;
|
|
@@ -289,9 +308,9 @@ class Class
|
|
|
289
308
|
|
|
290
309
|
def instance_methods(include_super = false)
|
|
291
310
|
%x{
|
|
292
|
-
var methods = [], proto = #{self}.
|
|
311
|
+
var methods = [], proto = #{self}._proto;
|
|
293
312
|
|
|
294
|
-
for (var prop in #{self}.
|
|
313
|
+
for (var prop in #{self}._proto) {
|
|
295
314
|
if (!include_super && !proto.hasOwnProperty(prop)) {
|
|
296
315
|
continue;
|
|
297
316
|
}
|
|
@@ -331,7 +350,7 @@ class Class
|
|
|
331
350
|
|
|
332
351
|
def method_defined?(method)
|
|
333
352
|
%x{
|
|
334
|
-
if (typeof(#{self}.
|
|
353
|
+
if (typeof(#{self}._proto['$' + method]) === 'function') {
|
|
335
354
|
return true;
|
|
336
355
|
}
|
|
337
356
|
|
|
@@ -342,9 +361,9 @@ class Class
|
|
|
342
361
|
def module_function(*methods)
|
|
343
362
|
%x{
|
|
344
363
|
for (var i = 0, length = methods.length; i < length; i++) {
|
|
345
|
-
var meth = methods[i], func = #{self}.
|
|
364
|
+
var meth = methods[i], func = #{self}._proto['$' + meth];
|
|
346
365
|
|
|
347
|
-
#{self}['$' + meth] = func;
|
|
366
|
+
#{self}.constructor.prototype['$' + meth] = func;
|
|
348
367
|
}
|
|
349
368
|
|
|
350
369
|
return #{self};
|
|
@@ -357,8 +376,8 @@ class Class
|
|
|
357
376
|
|
|
358
377
|
def new(*args, &block)
|
|
359
378
|
%x{
|
|
360
|
-
if (#{self}.
|
|
361
|
-
var obj = new #{self};
|
|
379
|
+
if (#{self}._proto.$initialize) {
|
|
380
|
+
var obj = new #{self}._alloc;
|
|
362
381
|
obj._id = Opal.uid();
|
|
363
382
|
|
|
364
383
|
obj.$initialize._p = block;
|
|
@@ -385,8 +404,12 @@ class Class
|
|
|
385
404
|
`#{self}._super || nil`
|
|
386
405
|
end
|
|
387
406
|
|
|
407
|
+
def to_s
|
|
408
|
+
`#{self}._name`
|
|
409
|
+
end
|
|
410
|
+
|
|
388
411
|
def undef_method(symbol)
|
|
389
|
-
`#{self}.
|
|
412
|
+
`#{self}._proto['$' + symbol] = undefined`
|
|
390
413
|
self
|
|
391
414
|
end
|
|
392
415
|
end
|