opal 0.3.18 → 0.3.19
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/.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
|