opal 0.3.18 → 0.3.19
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -1
- data/Gemfile +1 -3
- data/README.md +472 -10
- data/Rakefile +10 -52
- data/core/array.rb +9 -14
- data/core/basic_object.rb +7 -10
- data/core/boolean.rb +5 -1
- data/core/class.rb +15 -38
- data/core/dir.rb +89 -0
- data/core/enumerable.rb +133 -57
- data/core/error.rb +15 -1
- data/core/file.rb +85 -0
- data/core/hash.rb +186 -32
- data/core/kernel.rb +30 -31
- data/core/load_order +4 -2
- data/core/module.rb +42 -62
- data/core/numeric.rb +7 -1
- data/core/object.rb +1 -1
- data/core/proc.rb +6 -2
- data/core/range.rb +16 -28
- data/core/regexp.rb +3 -3
- data/core/runtime.js +281 -350
- data/core/string.rb +100 -110
- data/docs/CNAME +1 -0
- data/docs/Rakefile +55 -0
- data/docs/css/styles.css +50 -0
- data/docs/css/syntax.css +63 -0
- data/docs/layout/post.html +3 -0
- data/docs/layout/pre.html +11 -0
- data/examples/dependencies/app.rb +3 -0
- data/lib/opal.rb +2 -1
- data/lib/opal/builder.rb +36 -10
- data/lib/opal/builder_task.rb +51 -24
- data/lib/opal/grammar.rb +2509 -2439
- data/lib/opal/grammar.y +38 -5
- data/lib/opal/lexer.rb +18 -2
- data/lib/opal/parser.rb +375 -349
- data/lib/opal/scope.rb +24 -2
- data/lib/opal/version.rb +1 -1
- data/spec/builder/build_order_spec.rb +20 -0
- data/spec/builder/lib_name_for_spec.rb +24 -0
- data/spec/grammar/call_spec.rb +9 -6
- data/spec/grammar/lambda_spec.rb +64 -0
- data/spec/grammar/sclass_spec.rb +5 -3
- data/{core/spec → test}/core/array/allocate_spec.rb +0 -0
- data/{core/spec → test}/core/array/append_spec.rb +0 -0
- data/{core/spec → test}/core/array/assoc_spec.rb +0 -0
- data/{core/spec → test}/core/array/at_spec.rb +0 -0
- data/{core/spec → test}/core/array/clear_spec.rb +0 -0
- data/{core/spec → test}/core/array/clone_spec.rb +0 -0
- data/{core/spec → test}/core/array/collect_spec.rb +0 -0
- data/{core/spec → test}/core/array/compact_spec.rb +0 -0
- data/{core/spec → test}/core/array/concat_spec.rb +0 -0
- data/{core/spec → test}/core/array/constructor_spec.rb +0 -0
- data/{core/spec → test}/core/array/count_spec.rb +0 -0
- data/{core/spec → test}/core/array/delete_at_spec.rb +0 -0
- data/{core/spec → test}/core/array/delete_if_spec.rb +0 -0
- data/{core/spec → test}/core/array/delete_spec.rb +0 -0
- data/{core/spec → test}/core/array/each_index_spec.rb +0 -0
- data/{core/spec → test}/core/array/each_spec.rb +0 -0
- data/{core/spec → test}/core/array/element_reference_spec.rb +0 -0
- data/{core/spec → test}/core/array/empty_spec.rb +0 -0
- data/{core/spec → test}/core/array/eql_spec.rb +0 -0
- data/{core/spec → test}/core/array/fetch_spec.rb +0 -0
- data/{core/spec → test}/core/array/first_spec.rb +0 -0
- data/{core/spec → test}/core/array/flatten_spec.rb +0 -0
- data/{core/spec → test}/core/array/include_spec.rb +0 -0
- data/{core/spec → test}/core/array/insert_spec.rb +0 -0
- data/{core/spec → test}/core/array/last_spec.rb +0 -0
- data/{core/spec → test}/core/array/length_spec.rb +0 -0
- data/{core/spec → test}/core/array/map_spec.rb +0 -0
- data/{core/spec → test}/core/array/plus_spec.rb +0 -0
- data/{core/spec → test}/core/array/pop_spec.rb +0 -0
- data/{core/spec → test}/core/array/push_spec.rb +0 -0
- data/{core/spec → test}/core/array/rassoc_spec.rb +0 -0
- data/{core/spec → test}/core/array/reject_spec.rb +0 -0
- data/{core/spec → test}/core/array/replace_spec.rb +0 -0
- data/{core/spec → test}/core/array/reverse_each_spec.rb +0 -0
- data/{core/spec → test}/core/array/reverse_spec.rb +0 -0
- data/{core/spec → test}/core/array/size_spec.rb +0 -0
- data/{core/spec → test}/core/array/to_ary_spec.rb +0 -0
- data/{core/spec → test}/core/array/uniq_spec.rb +0 -0
- data/{core/spec → test}/core/array/zip_spec.rb +0 -0
- data/test/core/class/fixtures/classes.rb +9 -0
- data/test/core/class/new_spec.rb +108 -0
- data/{core/spec → test}/core/enumerable/all_spec.rb +0 -0
- data/{core/spec → test}/core/enumerable/any_spec.rb +0 -0
- data/{core/spec → test}/core/enumerable/collect_spec.rb +0 -0
- data/{core/spec → test}/core/enumerable/count_spec.rb +0 -0
- data/test/core/enumerable/detect_spec.rb +48 -0
- data/test/core/enumerable/drop_spec.rb +17 -0
- data/test/core/enumerable/drop_while_spec.rb +24 -0
- data/test/core/enumerable/each_with_index_spec.rb +11 -0
- data/test/core/enumerable/each_with_object_spec.rb +17 -0
- data/test/core/enumerable/entries_spec.rb +6 -0
- data/test/core/enumerable/find_all_spec.rb +13 -0
- data/test/core/enumerable/find_index_spec.rb +45 -0
- data/test/core/enumerable/find_spec.rb +48 -0
- data/test/core/enumerable/first_spec.rb +40 -0
- data/{core/spec → test}/core/enumerable/fixtures/classes.rb +19 -0
- data/test/core/enumerable/grep_spec.rb +21 -0
- data/test/core/enumerable/take_spec.rb +40 -0
- data/test/core/enumerable/to_a_spec.rb +6 -0
- data/{core/spec → test}/core/false/and_spec.rb +0 -0
- data/{core/spec → test}/core/false/inspect_spec.rb +0 -0
- data/{core/spec → test}/core/false/or_spec.rb +0 -0
- data/{core/spec → test}/core/false/to_s_spec.rb +0 -0
- data/{core/spec → test}/core/false/xor_spec.rb +0 -0
- data/test/core/file/expand_path_spec.rb +20 -0
- data/{core/spec → test}/core/hash/allocate_spec.rb +0 -0
- data/{core/spec → test}/core/hash/assoc_spec.rb +0 -0
- data/{core/spec → test}/core/hash/clear_spec.rb +0 -0
- data/{core/spec → test}/core/hash/clone_spec.rb +0 -0
- data/test/core/hash/default_spec.rb +9 -0
- data/{core/spec → test}/core/hash/delete_if_spec.rb +0 -0
- data/test/core/hash/each_key_spec.rb +15 -0
- data/test/core/hash/each_pair_spec.rb +30 -0
- data/test/core/hash/each_spec.rb +30 -0
- data/test/core/hash/each_value_spec.rb +15 -0
- data/{core/spec → test}/core/hash/element_reference_spec.rb +14 -0
- data/{core/spec → test}/core/hash/element_set_spec.rb +1 -0
- data/test/core/hash/empty_spec.rb +10 -0
- data/test/core/hash/fetch_spec.rb +24 -0
- data/test/core/hash/flatten_spec.rb +46 -0
- data/test/core/hash/has_key_spec.rb +24 -0
- data/test/core/hash/has_value_spec.rb +12 -0
- data/test/core/hash/include_spec.rb +24 -0
- data/test/core/hash/index_spec.rb +13 -0
- data/test/core/hash/indexes_spec.rb +9 -0
- data/test/core/hash/indices_spec.rb +9 -0
- data/test/core/hash/invert_spec.rb +12 -0
- data/test/core/hash/keep_if_spec.rb +18 -0
- data/test/core/hash/key_spec.rb +24 -0
- data/test/core/hash/keys_spec.rb +10 -0
- data/test/core/hash/length_spec.rb +10 -0
- data/test/core/hash/member_spec.rb +24 -0
- data/{core/spec → test}/core/hash/merge_spec.rb +0 -0
- data/{core/spec → test}/core/hash/new_spec.rb +0 -0
- data/test/core/hash/rassoc_spec.rb +34 -0
- data/test/core/hash/replace_spec.rb +7 -0
- data/test/core/hash/select_spec.rb +52 -0
- data/test/core/hash/shift_spec.rb +19 -0
- data/test/core/hash/size_spec.rb +10 -0
- data/test/core/hash/update_spec.rb +17 -0
- data/test/core/hash/value_spec.rb +12 -0
- data/test/core/hash/values_at_spec.rb +9 -0
- data/test/core/hash/values_spec.rb +7 -0
- data/test/core/kernel/eql_spec.rb +15 -0
- data/test/core/kernel/equal_value_spec.rb +12 -0
- data/test/core/kernel/loop_spec.rb +23 -0
- data/test/core/kernel/nil_spec.rb +7 -0
- data/test/core/kernel/proc_spec.rb +9 -0
- data/test/core/kernel/rand_spec.rb +14 -0
- data/test/core/kernel/respond_to_spec.rb +24 -0
- data/test/core/kernel/send_spec.rb +56 -0
- data/test/core/kernel/tap_spec.rb +10 -0
- data/test/core/kernel/to_s_spec.rb +5 -0
- data/{core/spec → test}/core/matchdata/to_a_spec.rb +0 -0
- data/{core/spec → test}/core/nil/and_spec.rb +0 -0
- data/{core/spec → test}/core/nil/inspect_spec.rb +0 -0
- data/{core/spec → test}/core/nil/nil_spec.rb +0 -0
- data/{core/spec → test}/core/nil/or_spec.rb +0 -0
- data/{core/spec → test}/core/nil/to_a_spec.rb +0 -0
- data/{core/spec → test}/core/nil/to_f_spec.rb +0 -0
- data/{core/spec → test}/core/nil/to_i_spec.rb +0 -0
- data/{core/spec → test}/core/nil/to_s_spec.rb +0 -0
- data/{core/spec → test}/core/nil/xor_spec.rb +0 -0
- data/{core/spec → test}/core/numeric/equal_value_spec.rb +0 -0
- data/test/core/range/begin_spec.rb +9 -0
- data/test/core/range/case_compare_spec.rb +16 -0
- data/test/core/range/end_spec.rb +9 -0
- data/{core/spec → test}/core/regexp/match_spec.rb +0 -0
- data/test/core/string/capitalize_spec.rb +10 -0
- data/test/core/string/casecmp_spec.rb +16 -0
- data/test/core/string/chomp_spec.rb +43 -0
- data/test/core/string/chop_spec.rb +10 -0
- data/test/core/string/chr_spec.rb +13 -0
- data/test/core/string/comparison_spec.rb +13 -0
- data/test/core/string/downcase_spec.rb +6 -0
- data/test/core/string/element_reference_spec.rb +72 -0
- data/test/core/string/empty_spec.rb +8 -0
- data/test/core/string/end_with_spec.rb +12 -0
- data/test/core/string/fixtures/classes.rb +3 -0
- data/test/core/string/gsub_spec.rb +17 -0
- data/test/core/string/include_spec.rb +12 -0
- data/test/core/string/intern_spec.rb +9 -0
- data/test/core/string/length_spec.rb +9 -0
- data/test/core/string/lstrip_spec.rb +7 -0
- data/test/core/string/match_spec.rb +27 -0
- data/test/core/string/next_spec.rb +10 -0
- data/test/core/string/ord_spec.rb +9 -0
- data/test/core/string/partition_spec.rb +10 -0
- data/test/core/string/reverse_spec.rb +7 -0
- data/test/core/string/rstrip_spec.rb +7 -0
- data/test/core/string/size_spec.rb +9 -0
- data/test/core/string/slice_spec.rb +72 -0
- data/test/core/string/split_spec.rb +5 -0
- data/test/core/string/start_with_spec.rb +12 -0
- data/test/core/string/strip_spec.rb +6 -0
- data/test/core/string/sub_spec.rb +22 -0
- data/test/core/string/succ_spec.rb +10 -0
- data/test/core/string/sum_spec.rb +5 -0
- data/test/core/string/swapcase_spec.rb +18 -0
- data/test/core/string/to_a_spec.rb +9 -0
- data/test/core/string/to_f_spec.rb +14 -0
- data/test/core/string/to_i_spec.rb +25 -0
- data/test/core/string/to_s_spec.rb +13 -0
- data/test/core/string/to_str_spec.rb +13 -0
- data/test/core/string/to_sym_spec.rb +9 -0
- data/test/core/string/upcase_spec.rb +6 -0
- data/test/core/symbol/to_proc_spec.rb +12 -0
- data/{core/spec → test}/core/true/and_spec.rb +0 -0
- data/{core/spec → test}/core/true/inspect_spec.rb +0 -0
- data/{core/spec → test}/core/true/or_spec.rb +0 -0
- data/{core/spec → test}/core/true/to_s_spec.rb +0 -0
- data/{core/spec → test}/core/true/xor_spec.rb +0 -0
- data/test/index.html +11 -0
- data/{core/spec → test}/language/alias_spec.rb +4 -0
- data/{core/spec → test}/language/and_spec.rb +0 -0
- data/{core/spec → test}/language/array_spec.rb +0 -0
- data/{core/spec → test}/language/block_spec.rb +0 -0
- data/{core/spec → test}/language/break_spec.rb +0 -0
- data/{core/spec → test}/language/case_spec.rb +0 -0
- data/{core/spec → test}/language/defined_spec.rb +0 -0
- data/{core/spec → test}/language/ensure_spec.rb +0 -0
- data/test/language/fixtures/yield.rb +23 -0
- data/{core/spec → test}/language/hash_spec.rb +0 -0
- data/{core/spec → test}/language/if_spec.rb +0 -0
- data/test/language/literal_lambda_spec.rb +47 -0
- data/{core/spec → test}/language/loop_spec.rb +0 -0
- data/{core/spec → test}/language/metaclass_spec.rb +0 -0
- data/{core/spec → test}/language/next_spec.rb +0 -0
- data/{core/spec → test}/language/or_spec.rb +0 -0
- data/{core/spec → test}/language/predefined_spec.rb +0 -0
- data/{core/spec → test}/language/regexp_spec.rb +0 -0
- data/{core/spec → test}/language/send_spec.rb +0 -0
- data/{core/spec → test}/language/singleton_class_spec.rb +0 -0
- data/{core/spec → test}/language/super_spec.rb +0 -0
- data/{core/spec → test}/language/symbol_spec.rb +0 -0
- data/{core/spec → test}/language/undef_spec.rb +0 -0
- data/{core/spec → test}/language/unless_spec.rb +0 -0
- data/{core/spec → test}/language/until_spec.rb +0 -0
- data/{core/spec → test}/language/variables_spec.rb +0 -0
- data/{core/spec → test}/language/while_spec.rb +0 -0
- data/test/language/yield_spec.rb +100 -0
- data/test/opal/array/subclassing_spec.rb +32 -0
- data/test/opal/class/bridge_class_spec.rb +37 -0
- data/test/opal/exception/subclassing_spec.rb +17 -0
- data/test/opal/runtime/_methods_spec.rb +48 -0
- data/test/opal/runtime/class_hierarchy_spec.rb +22 -0
- data/test/opal/runtime/def_spec.rb +23 -0
- data/test/opal/string/subclassing_spec.rb +26 -0
- data/test/spec_helper.rb +3 -0
- metadata +437 -111
- data/core/spec/core/class/new_spec.rb +0 -16
- data/core/spec/core/hash/default_spec.rb +0 -4
- data/core/spec/core/symbol/to_proc_spec.rb +0 -6
- data/core/spec/index.html +0 -11
- data/spec/builder/build_source_spec.rb +0 -52
data/Rakefile
CHANGED
@@ -5,27 +5,28 @@ Bundler.setup
|
|
5
5
|
require 'opal'
|
6
6
|
require 'opal/version'
|
7
7
|
|
8
|
+
Opal::BuilderTask.new do |t|
|
9
|
+
t.name = 'opal'
|
10
|
+
t.files = []
|
11
|
+
t.dependencies = %w[opal-spec]
|
12
|
+
t.specs_dir = 'test'
|
13
|
+
t.specs_main = 'test/spec_helper'
|
14
|
+
end
|
15
|
+
|
8
16
|
desc "Build opal.js runtime into ./build"
|
9
|
-
task :
|
17
|
+
task :build do
|
10
18
|
File.open('build/opal.js', 'w+') do |o|
|
11
19
|
o.write Opal::Builder.runtime
|
12
20
|
end
|
13
21
|
end
|
14
22
|
|
15
|
-
Opal::BuilderTask.new do |t|
|
16
|
-
t.name = 'opal'
|
17
|
-
t.files = []
|
18
|
-
t.specs_dir = './core/spec'
|
19
|
-
t.dependencies = %w[opal-spec opal-racc opal-strscan]
|
20
|
-
end
|
21
|
-
|
22
23
|
desc "Check file sizes for opal.js runtime"
|
23
24
|
task :sizes do
|
24
25
|
o = File.read 'build/opal.js'
|
25
26
|
m = uglify o
|
26
27
|
g = gzip m
|
27
28
|
|
28
|
-
puts "
|
29
|
+
puts "opal.js:"
|
29
30
|
puts "development: #{o.size}, minified: #{m.size}, gzipped: #{g.size}"
|
30
31
|
end
|
31
32
|
|
@@ -63,47 +64,4 @@ namespace :gem do
|
|
63
64
|
task :release do
|
64
65
|
puts "Need to release opal-#{Opal::VERSION}.gem"
|
65
66
|
end
|
66
|
-
end
|
67
|
-
|
68
|
-
# Documentation
|
69
|
-
namespace :docs do
|
70
|
-
task :clone do
|
71
|
-
if File.exists? 'gh-pages'
|
72
|
-
Dir.chdir('gh-pages') { sh 'git pull origin gh-pages' }
|
73
|
-
else
|
74
|
-
FileUtils.mkdir_p 'gh-pages'
|
75
|
-
Dir.chdir('gh-pages') do
|
76
|
-
sh 'git clone git@github.com:/adambeynon/opal.git .'
|
77
|
-
sh 'git checkout gh-pages'
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
task :build do
|
83
|
-
require 'redcarpet'
|
84
|
-
require 'albino'
|
85
|
-
|
86
|
-
klass = Class.new(Redcarpet::Render::HTML) do
|
87
|
-
def block_code(code, language)
|
88
|
-
Albino.new(code, language || :text).colorize
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
markdown = Redcarpet::Markdown.new(klass, :fenced_code_blocks => true)
|
93
|
-
sources = %w[index]
|
94
|
-
|
95
|
-
sources.each do |s|
|
96
|
-
File.open(File.join('gh-pages', "#{s}.html"), 'w+') do |o|
|
97
|
-
o.write File.read('docs/pre.html')
|
98
|
-
o.write markdown.render(File.read "docs/#{s}.md")
|
99
|
-
o.write File.read('docs/post.html')
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
task :copy do
|
105
|
-
FileUtils.cp 'build/opal.js', 'gh-pages/opal.js'
|
106
|
-
FileUtils.cp 'docs/styles.css', 'gh-pages/styles.css'
|
107
|
-
FileUtils.cp 'docs/syntax.css', 'gh-pages/syntax.css'
|
108
|
-
end
|
109
67
|
end
|
data/core/array.rb
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
-
class Array
|
1
|
+
class Array < `Array`
|
2
|
+
%x{
|
3
|
+
def._isArray = true;
|
4
|
+
}
|
5
|
+
|
2
6
|
include Enumerable
|
3
7
|
|
4
8
|
def self.[](*objects)
|
@@ -11,17 +15,8 @@ class Array
|
|
11
15
|
}
|
12
16
|
end
|
13
17
|
|
14
|
-
def self.allocate
|
15
|
-
%x{
|
16
|
-
var array = [];
|
17
|
-
array._klass = this;
|
18
|
-
|
19
|
-
return array;
|
20
|
-
}
|
21
|
-
end
|
22
|
-
|
23
18
|
def self.new(*a)
|
24
|
-
|
19
|
+
allocate
|
25
20
|
end
|
26
21
|
|
27
22
|
def &(other)
|
@@ -119,7 +114,7 @@ class Array
|
|
119
114
|
var size = this.length;
|
120
115
|
|
121
116
|
if (typeof index !== 'number') {
|
122
|
-
if (index.
|
117
|
+
if (index._isRange) {
|
123
118
|
var exclude = index.exclude;
|
124
119
|
length = index.end;
|
125
120
|
index = index.begin;
|
@@ -470,7 +465,7 @@ class Array
|
|
470
465
|
for (var i = 0, length = this.length, item; i < length; i++) {
|
471
466
|
item = this[i];
|
472
467
|
|
473
|
-
if (item.
|
468
|
+
if (item._isArray) {
|
474
469
|
if (level === undefined) {
|
475
470
|
result = result.concat(#{`item`.flatten});
|
476
471
|
}
|
@@ -1000,7 +995,7 @@ class Array
|
|
1000
995
|
result[i] = part;
|
1001
996
|
}
|
1002
997
|
|
1003
|
-
if (block) {
|
998
|
+
if (block !== nil) {
|
1004
999
|
for (var i = 0; i < size; i++) {
|
1005
1000
|
block.call(__context, result[i]);
|
1006
1001
|
}
|
data/core/basic_object.rb
CHANGED
@@ -8,8 +8,7 @@ class BasicObject
|
|
8
8
|
|
9
9
|
def __send__(symbol, *args, &block)
|
10
10
|
%x{
|
11
|
-
var meth = this[mid_to_jsid(symbol)]
|
12
|
-
args.unshift(block);
|
11
|
+
var meth = this[mid_to_jsid(symbol)];
|
13
12
|
|
14
13
|
return meth.apply(this, args);
|
15
14
|
}
|
@@ -22,8 +21,8 @@ class BasicObject
|
|
22
21
|
|
23
22
|
def instance_eval(string, &block)
|
24
23
|
%x{
|
25
|
-
if (block
|
26
|
-
|
24
|
+
if (block === nil) {
|
25
|
+
no_block_given();
|
27
26
|
}
|
28
27
|
|
29
28
|
return block.call(this, null, this);
|
@@ -32,8 +31,8 @@ class BasicObject
|
|
32
31
|
|
33
32
|
def instance_exec(*args, &block)
|
34
33
|
%x{
|
35
|
-
if (block
|
36
|
-
|
34
|
+
if (block === nil) {
|
35
|
+
no_block_given();
|
37
36
|
}
|
38
37
|
|
39
38
|
return block.apply(this, args);
|
@@ -41,9 +40,7 @@ class BasicObject
|
|
41
40
|
end
|
42
41
|
|
43
42
|
def method_missing(symbol, *args)
|
44
|
-
|
45
|
-
|
46
|
-
self
|
43
|
+
raise NoMethodError, "undefined method `#{symbol}` for #{inspect}"
|
47
44
|
end
|
48
45
|
|
49
46
|
def singleton_method_added(symbol)
|
@@ -54,4 +51,4 @@ class BasicObject
|
|
54
51
|
|
55
52
|
def singleton_method_undefined(symbol)
|
56
53
|
end
|
57
|
-
end
|
54
|
+
end
|
data/core/boolean.rb
CHANGED
data/core/class.rb
CHANGED
@@ -2,40 +2,14 @@ class Class
|
|
2
2
|
def self.new(sup = Object, &block)
|
3
3
|
%x{
|
4
4
|
var klass = boot_class(sup);
|
5
|
-
klass._name =
|
5
|
+
klass._name = nil;
|
6
6
|
|
7
7
|
make_metaclass(klass, sup._klass);
|
8
8
|
|
9
|
-
|
9
|
+
sup.$inherited(klass);
|
10
10
|
|
11
|
-
if (block !==
|
12
|
-
block.call(klass
|
13
|
-
}
|
14
|
-
|
15
|
-
return klass;
|
16
|
-
}
|
17
|
-
end
|
18
|
-
|
19
|
-
def bridge_class(constructor)
|
20
|
-
%x{
|
21
|
-
var prototype = constructor.prototype,
|
22
|
-
klass = this;
|
23
|
-
|
24
|
-
klass._alloc = constructor;
|
25
|
-
klass._proto = prototype;
|
26
|
-
|
27
|
-
bridged_classes.push(klass);
|
28
|
-
|
29
|
-
prototype._klass = klass;
|
30
|
-
prototype._flags = T_OBJECT;
|
31
|
-
|
32
|
-
var donator = RubyObject._proto;
|
33
|
-
for (var method in donator) {
|
34
|
-
if (donator.hasOwnProperty(method)) {
|
35
|
-
if (!prototype[method]) {
|
36
|
-
prototype[method] = donator[method];
|
37
|
-
}
|
38
|
-
}
|
11
|
+
if (block !== nil) {
|
12
|
+
block.call(klass);
|
39
13
|
}
|
40
14
|
|
41
15
|
return klass;
|
@@ -47,9 +21,12 @@ class Class
|
|
47
21
|
end
|
48
22
|
|
49
23
|
def new(*args, &block)
|
50
|
-
|
51
|
-
|
52
|
-
|
24
|
+
%x{
|
25
|
+
var obj = this.$allocate();
|
26
|
+
obj._p = block;
|
27
|
+
obj.$initialize.apply(obj, args);
|
28
|
+
return obj;
|
29
|
+
}
|
53
30
|
end
|
54
31
|
|
55
32
|
def inherited(cls)
|
@@ -60,22 +37,22 @@ class Class
|
|
60
37
|
var sup = this._super;
|
61
38
|
|
62
39
|
if (!sup) {
|
63
|
-
if (this ===
|
64
|
-
return
|
40
|
+
if (this === RubyBasicObject) {
|
41
|
+
return nil;
|
65
42
|
}
|
66
43
|
|
67
44
|
throw RubyRuntimeError.$new('uninitialized class');
|
68
45
|
}
|
69
46
|
|
70
|
-
while (sup && (sup.
|
47
|
+
while (sup && (sup._isIClass)) {
|
71
48
|
sup = sup._super;
|
72
49
|
}
|
73
50
|
|
74
51
|
if (!sup) {
|
75
|
-
return
|
52
|
+
return nil;
|
76
53
|
}
|
77
54
|
|
78
55
|
return sup;
|
79
56
|
}
|
80
57
|
end
|
81
|
-
end
|
58
|
+
end
|
data/core/dir.rb
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
class Dir
|
2
|
+
def self.getwd
|
3
|
+
""
|
4
|
+
end
|
5
|
+
|
6
|
+
def self.pwd
|
7
|
+
""
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.[](*globs)
|
11
|
+
%x{
|
12
|
+
var result = [], files = factories;
|
13
|
+
|
14
|
+
for (var i = 0, ii = globs.length; i < ii; i++) {
|
15
|
+
var glob = globs[i];
|
16
|
+
|
17
|
+
var re = fs_glob_to_regexp(#{ File.expand_path `glob` });
|
18
|
+
|
19
|
+
for (var file in files) {
|
20
|
+
if (re.exec(file)) {
|
21
|
+
result.push(file);
|
22
|
+
}
|
23
|
+
}
|
24
|
+
}
|
25
|
+
|
26
|
+
return result;
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
%x(
|
31
|
+
function fs_glob_to_regexp(glob) {
|
32
|
+
var parts = glob.split(''),
|
33
|
+
length = parts.length,
|
34
|
+
result = '';
|
35
|
+
|
36
|
+
var opt_group_stack = 0;
|
37
|
+
|
38
|
+
for (var i = 0; i < length; i++) {
|
39
|
+
var cur = parts[i];
|
40
|
+
|
41
|
+
switch (cur) {
|
42
|
+
case '*':
|
43
|
+
if (parts[i + 1] === '*' && parts[i + 2] === '/') {
|
44
|
+
result += '.*';
|
45
|
+
i += 2;
|
46
|
+
}
|
47
|
+
else {
|
48
|
+
result += '[^/]*';
|
49
|
+
}
|
50
|
+
break;
|
51
|
+
|
52
|
+
case '.':
|
53
|
+
result += '\\\\';
|
54
|
+
result += cur;
|
55
|
+
break;
|
56
|
+
|
57
|
+
case ',':
|
58
|
+
if (opt_group_stack) {
|
59
|
+
result += '|';
|
60
|
+
}
|
61
|
+
else {
|
62
|
+
result += ',';
|
63
|
+
}
|
64
|
+
break;
|
65
|
+
|
66
|
+
case '{':
|
67
|
+
result += '(';
|
68
|
+
opt_group_stack++;
|
69
|
+
break;
|
70
|
+
|
71
|
+
case '}':
|
72
|
+
if (opt_group_stack) {
|
73
|
+
result += ')';
|
74
|
+
opt_group_stack--;
|
75
|
+
}
|
76
|
+
else {
|
77
|
+
result += '}'
|
78
|
+
}
|
79
|
+
break;
|
80
|
+
|
81
|
+
default:
|
82
|
+
result += cur;
|
83
|
+
}
|
84
|
+
}
|
85
|
+
|
86
|
+
return new RegExp('^' + result + '$');
|
87
|
+
}
|
88
|
+
)
|
89
|
+
end
|
data/core/enumerable.rb
CHANGED
@@ -3,7 +3,7 @@ module Enumerable
|
|
3
3
|
%x{
|
4
4
|
var result = true, proc;
|
5
5
|
|
6
|
-
if (block) {
|
6
|
+
if (block !== nil) {
|
7
7
|
proc = function(obj) {
|
8
8
|
var value;
|
9
9
|
|
@@ -41,7 +41,7 @@ module Enumerable
|
|
41
41
|
%x{
|
42
42
|
var result = false, proc;
|
43
43
|
|
44
|
-
if (block) {
|
44
|
+
if (block !== nil) {
|
45
45
|
proc = function(obj) {
|
46
46
|
var value;
|
47
47
|
|
@@ -102,7 +102,7 @@ module Enumerable
|
|
102
102
|
%x{
|
103
103
|
var result = 0;
|
104
104
|
|
105
|
-
if (
|
105
|
+
if (block === nil) {
|
106
106
|
if (object == null) {
|
107
107
|
block = function() { return true; };
|
108
108
|
}
|
@@ -136,20 +136,22 @@ module Enumerable
|
|
136
136
|
%x{
|
137
137
|
var result = nil;
|
138
138
|
|
139
|
-
this.$each
|
139
|
+
this.$each._p = function(obj) {
|
140
140
|
var value;
|
141
141
|
|
142
|
-
if ((value =
|
143
|
-
return
|
142
|
+
if ((value = block.call(__context, obj)) === __breaker) {
|
143
|
+
return __breaker.$v;
|
144
144
|
}
|
145
145
|
|
146
146
|
if (value !== false && value !== nil) {
|
147
147
|
result = obj;
|
148
|
-
|
148
|
+
__breaker.$v = nil;
|
149
149
|
|
150
|
-
return
|
150
|
+
return __breaker;
|
151
151
|
}
|
152
|
-
}
|
152
|
+
};
|
153
|
+
|
154
|
+
this.$each();
|
153
155
|
|
154
156
|
if (result !== nil) {
|
155
157
|
return result;
|
@@ -164,19 +166,19 @@ module Enumerable
|
|
164
166
|
end
|
165
167
|
|
166
168
|
def drop(number)
|
167
|
-
raise NotImplementedError
|
168
|
-
|
169
169
|
%x{
|
170
170
|
var result = [],
|
171
171
|
current = 0;
|
172
172
|
|
173
|
-
this.$each
|
173
|
+
this.$each._p = function(obj) {
|
174
174
|
if (number < current) {
|
175
175
|
result.push(e);
|
176
176
|
}
|
177
177
|
|
178
178
|
current++;
|
179
|
-
}
|
179
|
+
};
|
180
|
+
|
181
|
+
this.$each();
|
180
182
|
|
181
183
|
return result;
|
182
184
|
}
|
@@ -188,18 +190,18 @@ module Enumerable
|
|
188
190
|
%x{
|
189
191
|
var result = [];
|
190
192
|
|
191
|
-
this.$each
|
193
|
+
this.$each._p = function(obj) {
|
192
194
|
var value;
|
193
195
|
|
194
|
-
if ((value =
|
195
|
-
return
|
196
|
+
if ((value = block.call(__context, obj)) === __breaker) {
|
197
|
+
return __breaker;
|
196
198
|
}
|
197
199
|
|
198
200
|
if (value !== false && value !== nil) {
|
199
201
|
result.push(obj);
|
200
202
|
}
|
201
203
|
else {
|
202
|
-
return
|
204
|
+
return __breaker;
|
203
205
|
}
|
204
206
|
};
|
205
207
|
|
@@ -215,56 +217,120 @@ module Enumerable
|
|
215
217
|
%x{
|
216
218
|
var index = 0;
|
217
219
|
|
218
|
-
this.$each
|
220
|
+
this.$each._p = function(obj) {
|
219
221
|
var value;
|
220
222
|
|
221
|
-
if ((value =
|
222
|
-
return
|
223
|
+
if ((value = block.call(__context, obj, index)) === __breaker) {
|
224
|
+
return __breaker.$v;
|
223
225
|
}
|
224
226
|
|
225
227
|
index++;
|
226
|
-
}
|
228
|
+
};
|
229
|
+
|
230
|
+
this.$each();
|
227
231
|
|
228
232
|
return nil;
|
229
233
|
}
|
230
234
|
end
|
231
235
|
|
232
|
-
def
|
233
|
-
|
236
|
+
def each_with_object(object, &block)
|
237
|
+
return enum_for :each_with_object unless block
|
238
|
+
|
239
|
+
%x{
|
240
|
+
this.$each._p = function(obj) {
|
241
|
+
var value;
|
242
|
+
|
243
|
+
if ((value = block.call(__context, obj, object)) === __breaker) {
|
244
|
+
return __breaker.$v;
|
245
|
+
}
|
246
|
+
};
|
234
247
|
|
235
|
-
|
236
|
-
|
248
|
+
this.$each();
|
249
|
+
|
250
|
+
return object;
|
237
251
|
}
|
252
|
+
end
|
253
|
+
|
254
|
+
def entries
|
255
|
+
%x{
|
256
|
+
var result = [];
|
257
|
+
|
258
|
+
this.$each._p = function(obj) {
|
259
|
+
result.push(obj);
|
260
|
+
};
|
261
|
+
|
262
|
+
this.$each();
|
238
263
|
|
239
|
-
|
264
|
+
return result;
|
265
|
+
}
|
240
266
|
end
|
241
267
|
|
242
268
|
alias find detect
|
243
269
|
|
244
|
-
def
|
245
|
-
return enum_for :
|
270
|
+
def find_all(&block)
|
271
|
+
return enum_for :find_all unless block
|
246
272
|
|
247
273
|
%x{
|
248
|
-
|
249
|
-
$yield = function (y, obj) { return obj.$eq$(null, object); };
|
250
|
-
}
|
251
|
-
|
252
|
-
var result = nil;
|
274
|
+
var result = [];
|
253
275
|
|
254
|
-
this.$
|
276
|
+
this.$each._p = function(obj) {
|
255
277
|
var value;
|
256
278
|
|
257
|
-
if ((value =
|
258
|
-
return
|
279
|
+
if ((value = block.call(__context, obj)) === __breaker) {
|
280
|
+
return __breaker.$v;
|
259
281
|
}
|
260
282
|
|
261
283
|
if (value !== false && value !== nil) {
|
262
|
-
result
|
263
|
-
|
284
|
+
//result = obj;
|
285
|
+
//__breaker.$v = nil;
|
264
286
|
|
265
|
-
return
|
287
|
+
//return __breaker;
|
288
|
+
result.push(obj);
|
266
289
|
}
|
267
|
-
}
|
290
|
+
};
|
291
|
+
|
292
|
+
this.$each();
|
293
|
+
|
294
|
+
return result;
|
295
|
+
}
|
296
|
+
end
|
297
|
+
|
298
|
+
def find_index(object = undefined, &block)
|
299
|
+
%x{
|
300
|
+
var proc, result = nil, index = 0;
|
301
|
+
|
302
|
+
if (object != null) {
|
303
|
+
proc = function (obj) {
|
304
|
+
if (obj.$eq$(object)) {
|
305
|
+
result = index;
|
306
|
+
return __breaker;
|
307
|
+
}
|
308
|
+
index += 1;
|
309
|
+
};
|
310
|
+
}
|
311
|
+
else if (block === nil) {
|
312
|
+
return this.$enum_for("find_index");
|
313
|
+
} else {
|
314
|
+
proc = function(obj) {
|
315
|
+
var value;
|
316
|
+
|
317
|
+
if ((value = block.call(__context, obj)) === __breaker) {
|
318
|
+
return __breaker.$v;
|
319
|
+
}
|
320
|
+
|
321
|
+
if (value !== false && value !== nil) {
|
322
|
+
result = index;
|
323
|
+
__breaker.$v = index;
|
324
|
+
|
325
|
+
return __breaker;
|
326
|
+
}
|
327
|
+
index += 1;
|
328
|
+
};
|
329
|
+
}
|
330
|
+
|
331
|
+
this.$each._p = proc;
|
332
|
+
|
333
|
+
this.$each();
|
268
334
|
|
269
335
|
return result;
|
270
336
|
}
|
@@ -273,21 +339,29 @@ module Enumerable
|
|
273
339
|
def first(number = undefined)
|
274
340
|
%x{
|
275
341
|
var result = [],
|
276
|
-
current = 0
|
342
|
+
current = 0,
|
343
|
+
proc;
|
277
344
|
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
345
|
+
if (number == null) {
|
346
|
+
result = nil;
|
347
|
+
proc = function(obj) {
|
348
|
+
result = obj; return __breaker;
|
349
|
+
};
|
350
|
+
} else {
|
351
|
+
proc = function(obj) {
|
283
352
|
if (number <= current) {
|
284
|
-
return
|
353
|
+
return __breaker;
|
285
354
|
}
|
286
355
|
|
287
356
|
result.push(obj);
|
288
357
|
|
289
358
|
current++;
|
290
|
-
}
|
359
|
+
};
|
360
|
+
}
|
361
|
+
|
362
|
+
this.$each._p = proc;
|
363
|
+
|
364
|
+
this.$each();
|
291
365
|
|
292
366
|
return result;
|
293
367
|
}
|
@@ -297,26 +371,28 @@ module Enumerable
|
|
297
371
|
%x{
|
298
372
|
var result = [];
|
299
373
|
|
300
|
-
this.$each(block !== nil
|
301
|
-
? function(
|
302
|
-
var value = pattern.$eqq$(
|
374
|
+
this.$each._p = (block !== nil
|
375
|
+
? function(obj) {
|
376
|
+
var value = pattern.$eqq$(obj);
|
303
377
|
|
304
378
|
if (value !== false && value !== nil) {
|
305
|
-
if ((value =
|
306
|
-
return
|
379
|
+
if ((value = block.call(__context, obj)) === __breaker) {
|
380
|
+
return __breaker.$v;
|
307
381
|
}
|
308
382
|
|
309
|
-
result.push(
|
383
|
+
result.push(value);
|
310
384
|
}
|
311
385
|
}
|
312
|
-
: function(
|
313
|
-
var value = pattern.$eqq$(
|
386
|
+
: function(obj) {
|
387
|
+
var value = pattern.$eqq$(obj);
|
314
388
|
|
315
389
|
if (value !== false && value !== nil) {
|
316
|
-
|
390
|
+
result.push(obj);
|
317
391
|
}
|
318
392
|
});
|
319
393
|
|
394
|
+
this.$each();
|
395
|
+
|
320
396
|
return result;
|
321
397
|
}
|
322
398
|
end
|