opal 0.7.0.beta1 → 0.7.0.beta2
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.gitmodules +1 -1
- data/.inch.yml +19 -0
- data/.travis.yml +10 -7
- data/CHANGELOG.md +23 -0
- data/README.md +2 -2
- data/Rakefile +43 -1
- data/bin/opal +6 -1
- data/lib/mspec/opal/rake_task.rb +10 -31
- data/lib/mspec/opal/runner.rb +44 -1
- data/lib/mspec/opal/special_calls.rb +25 -0
- data/lib/opal/builder.rb +1 -1
- data/lib/opal/builder_processors.rb +4 -23
- data/lib/opal/cli.rb +17 -11
- data/lib/opal/cli_options.rb +1 -1
- data/lib/opal/cli_runners.rb +1 -0
- data/lib/opal/cli_runners/apple_script.rb +65 -0
- data/lib/opal/cli_runners/nodejs.rb +9 -3
- data/lib/opal/cli_runners/phantomjs.rb +2 -2
- data/lib/opal/cli_runners/server.rb +7 -5
- data/lib/opal/compiler.rb +1 -1
- data/lib/opal/nodes/call.rb +3 -2
- data/lib/opal/nodes/constants.rb +3 -3
- data/lib/opal/nodes/def.rb +7 -7
- data/lib/opal/nodes/defined.rb +2 -2
- data/lib/opal/nodes/definitions.rb +1 -1
- data/lib/opal/nodes/literal.rb +1 -1
- data/lib/opal/nodes/logic.rb +1 -1
- data/lib/opal/nodes/masgn.rb +1 -1
- data/lib/opal/nodes/module.rb +1 -1
- data/lib/opal/nodes/rescue.rb +1 -1
- data/lib/opal/nodes/scope.rb +1 -1
- data/lib/opal/nodes/super.rb +3 -3
- data/lib/opal/nodes/top.rb +11 -9
- data/lib/opal/nodes/variables.rb +39 -6
- data/lib/opal/nodes/yield.rb +3 -3
- data/lib/opal/parser.rb +3 -1
- data/lib/opal/parser/lexer.rb +8 -2
- data/lib/opal/paths.rb +13 -3
- data/lib/opal/sprockets/server.rb +1 -1
- data/lib/opal/version.rb +1 -1
- data/opal.gemspec +1 -1
- data/opal/corelib/array.rb +29 -20
- data/opal/corelib/array/inheritance.rb +3 -3
- data/opal/corelib/basic_object.rb +3 -1
- data/opal/corelib/class.rb +1 -1
- data/opal/corelib/comparable.rb +6 -5
- data/opal/corelib/dir.rb +4 -4
- data/opal/corelib/enumerable.rb +25 -25
- data/opal/corelib/enumerator.rb +16 -14
- data/opal/corelib/error.rb +13 -4
- data/opal/corelib/hash.rb +511 -162
- data/opal/corelib/helpers.rb +1 -1
- data/opal/corelib/kernel.rb +60 -44
- data/opal/corelib/match_data.rb +1 -10
- data/opal/corelib/method.rb +1 -1
- data/opal/corelib/module.rb +62 -32
- data/opal/corelib/nil_class.rb +1 -6
- data/opal/corelib/numeric.rb +6 -3
- data/opal/corelib/proc.rb +1 -1
- data/opal/corelib/regexp.rb +15 -6
- data/opal/corelib/runtime.js +57 -36
- data/opal/corelib/string.rb +38 -2
- data/opal/corelib/string/inheritance.rb +3 -3
- data/opal/corelib/struct.rb +1 -1
- data/opal/corelib/time.rb +46 -3
- data/spec/filters/bugs/date.rb +15 -0
- data/spec/filters/bugs/enumerator.rb +7 -0
- data/spec/filters/bugs/exception.rb +12 -0
- data/spec/filters/bugs/hash.rb +0 -18
- data/spec/filters/bugs/match_data.rb +13 -0
- data/spec/filters/bugs/module.rb +13 -0
- data/spec/filters/bugs/numeric.rb +2 -0
- data/spec/filters/bugs/regexp.rb +0 -2
- data/spec/filters/bugs/stringscanner.rb +8 -0
- data/spec/filters/bugs/time.rb +1 -1
- data/spec/filters/unsupported/float.rb +1 -0
- data/spec/filters/unsupported/symbols.rb +10 -0
- data/spec/filters/unsupported/tainted.rb +3 -0
- data/spec/filters/unsupported/trusted.rb +3 -0
- data/spec/lib/compiler_spec.rb +2 -2
- data/spec/lib/parser/call_spec.rb +7 -0
- data/spec/opal/core/date_spec.rb +49 -8
- data/spec/opal/core/exception_spec.rb +13 -0
- data/spec/opal/core/fixtures/require_tree_files/nested/nested 1.rb +1 -0
- data/spec/opal/core/fixtures/require_tree_files/nested/nested 2.rb +1 -0
- data/spec/opal/core/fixtures/require_tree_files/other/other 1.rb +1 -0
- data/spec/opal/core/kernel/require_tree_spec.rb +3 -1
- data/spec/opal/core/language/predefined_spec.rb +43 -0
- data/spec/opal/stdlib/promise/rescue_spec.rb +9 -0
- data/spec/opal/stdlib/promise/then_spec.rb +9 -0
- data/spec/opal/stdlib/promise/trace_spec.rb +9 -0
- data/spec/rubyspecs +40 -19
- data/spec/spec_helper.rb +10 -5
- data/stdlib/date.rb +68 -8
- data/stdlib/fileutils.rb +0 -0
- data/stdlib/iconv.rb +0 -0
- data/stdlib/json.rb +16 -3
- data/stdlib/native.rb +36 -17
- data/stdlib/nodejs.rb +3 -0
- data/stdlib/nodejs/dir.rb +1 -1
- data/stdlib/nodejs/file.rb +2 -2
- data/stdlib/nodejs/io.rb +1 -1
- data/stdlib/nodejs/process.rb +2 -2
- data/stdlib/nodejs/require.rb +5 -7
- data/stdlib/nodejs/runtime.rb +3 -2
- data/stdlib/pathname.rb +25 -1
- data/stdlib/promise.rb +16 -0
- data/stdlib/set.rb +48 -4
- data/stdlib/strscan.rb +12 -1
- data/stdlib/yaml.rb +1 -0
- metadata +27 -7
- data/spec/opal/core/language/symbol_spec.rb +0 -40
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a9bd47fb47cabeb742adca4e6b377de113225b60
|
|
4
|
+
data.tar.gz: 0dfa5e47116f8d56b3d1a2ff0b9473fa9b563b87
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3965105a918d9cfded13bf9526cdda32b73caa31c4ae7e3760f36c205f5cdb1e359604e9d6e4a519d0687ea0b0eced908140b54ddf952b4c7036ef0d0736a2b9
|
|
7
|
+
data.tar.gz: 5764370dc015b931115ab0bdb7e61b1a6699b067179545fdea0d5dd86366929e58b391726ef4257e752d5ebd33d9e9bdb316fd4f09309ec0c3ce24d28225f1b3
|
data/.gitignore
CHANGED
data/.gitmodules
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[submodule "spec/corelib"]
|
|
2
2
|
path = spec/corelib
|
|
3
|
-
url = https://github.com/
|
|
3
|
+
url = https://github.com/opal/rubyspec
|
|
4
4
|
[submodule "spec/stdlib/rubysl-singleton"]
|
|
5
5
|
path = spec/stdlib/rubysl-singleton
|
|
6
6
|
url = https://github.com/rubysl/rubysl-singleton
|
data/.inch.yml
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# files:
|
|
2
|
+
# # define files included in the analysis (defaults to ["{app,lib}/**/*.rb"])
|
|
3
|
+
# included:
|
|
4
|
+
# - plugins/**/*.rb
|
|
5
|
+
# # define files excluded from the analysis (defaults to [])
|
|
6
|
+
# excluded:
|
|
7
|
+
# # you can use file paths
|
|
8
|
+
# - plugins/vendor/sparkr/sparkr.rb
|
|
9
|
+
# # or globs
|
|
10
|
+
# - plugins/vendor/**/*.rb
|
|
11
|
+
# # or regular expressions
|
|
12
|
+
# - !ruby/regexp /vendor/
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
files:
|
|
16
|
+
included:
|
|
17
|
+
- lib/**/*.rb
|
|
18
|
+
excluded:
|
|
19
|
+
- lib/opal/parser/grammar.rb
|
data/.travis.yml
CHANGED
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
language: ruby
|
|
2
2
|
|
|
3
|
-
cache:
|
|
3
|
+
cache:
|
|
4
|
+
bundler: true
|
|
5
|
+
directories:
|
|
6
|
+
- node_modules
|
|
4
7
|
|
|
5
8
|
matrix:
|
|
6
9
|
fast_finish: true
|
|
7
10
|
|
|
8
11
|
include:
|
|
9
|
-
- rvm: 2.1
|
|
10
|
-
env: RUN=default
|
|
12
|
+
- rvm: 2.1
|
|
13
|
+
env: RUN=default TZ="/usr/share/zoneinfo/Pacific/Fiji"
|
|
14
|
+
before_install: test -d node_modules || npm install
|
|
11
15
|
|
|
12
16
|
- rvm: 1.9.3
|
|
13
17
|
env: RUN=rspec
|
|
14
18
|
|
|
15
19
|
- rvm: 2.0.0
|
|
16
|
-
env: RUN=rspec
|
|
20
|
+
env: RUN="rspec mspec"
|
|
17
21
|
|
|
18
22
|
- rvm: rbx
|
|
19
23
|
env: RUN=rspec
|
|
@@ -28,11 +32,10 @@ matrix:
|
|
|
28
32
|
- rvm: rbx
|
|
29
33
|
- rvm: jruby
|
|
30
34
|
|
|
31
|
-
|
|
32
|
-
# have the TZ related failures surface on Travis CI.
|
|
33
|
-
# http://stackoverflow.com/a/23374438/601782
|
|
35
|
+
|
|
34
36
|
before_install:
|
|
35
37
|
- git submodule update --init
|
|
38
|
+
- npm install
|
|
36
39
|
|
|
37
40
|
script:
|
|
38
41
|
- "bundle exec rake $RUN"
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
## edge (upcoming 0.7)
|
|
2
2
|
|
|
3
|
+
* Add `Set` methods `#classify`, `#collect!`, `#map!`, `#subtract` `#replace`,
|
|
4
|
+
`#difference` and `#eql?`
|
|
5
|
+
|
|
6
|
+
* Support `module_function` without args to toggle module functions.
|
|
7
|
+
|
|
8
|
+
* Fix bug where command calls with no space and sym arg were incorrectly parsed.
|
|
9
|
+
|
|
10
|
+
* Add some `StringScanner` methods.
|
|
11
|
+
|
|
12
|
+
* Add `Date#<<` and `Date#>>` implementations.
|
|
13
|
+
|
|
14
|
+
* Support nested directories using `require_tree` directive.
|
|
15
|
+
|
|
16
|
+
* Fix bug where Exception subclasses could not have methods defined on them.
|
|
17
|
+
|
|
18
|
+
* Fix symbols with interpolations `:"#{foo}"`
|
|
19
|
+
|
|
20
|
+
* Implement $1..N matchers and rewrite support for $~, $', $& and $\`.
|
|
21
|
+
|
|
22
|
+
* Implement `Regexp.last_match`.
|
|
23
|
+
|
|
3
24
|
* Fixed `-@` unary op. precedence with a numeric and followed by a method call (e.g. `-1.foo` was parsed as `-(1.foo)`)
|
|
4
25
|
|
|
5
26
|
* `require_relative` (with strings) is now preprocessed, expanded and added to `Compiler#requires`
|
|
@@ -21,6 +42,8 @@
|
|
|
21
42
|
|
|
22
43
|
* Add initial support for Module#autoload.
|
|
23
44
|
|
|
45
|
+
* Fix `Enumerator#with_index`, `Numeric#round`.
|
|
46
|
+
|
|
24
47
|
## 0.6.2 2014-04-25
|
|
25
48
|
|
|
26
49
|
* Added Range#size
|
data/README.md
CHANGED
|
@@ -11,9 +11,9 @@ Opal is [hosted on github](http://github.com/opal/opal), and there
|
|
|
11
11
|
is a Freenode IRC channel at [#opal](http://webchat.freenode.net/?channels=opal),
|
|
12
12
|
ask questions on [stackoverflow (tag #opalrb)](http://stackoverflow.com/questions/ask?tags=opalrb).
|
|
13
13
|
|
|
14
|
-
[](http://opalrb.org/docs/api)
|
|
14
|
+
[](http://opalrb.org/docs/api)
|
|
16
15
|
[](https://gitter.im/opal/opal)
|
|
16
|
+
[](http://stackoverflow.com/questions/ask?tags=opalrb)
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
|
data/Rakefile
CHANGED
|
@@ -18,9 +18,51 @@ MSpec::Opal::RakeTask.new(:mspec) do |config|
|
|
|
18
18
|
config.basedir = ENV['MSPEC_BASEDIR'] if ENV['MSPEC_BASEDIR']
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
task :default => [:rspec, :
|
|
21
|
+
task :default => [:rspec, :mspec_node]
|
|
22
22
|
|
|
23
23
|
|
|
24
|
+
task :mspec_node do
|
|
25
|
+
rubyspecs = File.read('spec/rubyspecs').lines.reject do |l|
|
|
26
|
+
l.strip!; l.start_with?('#') || l.empty?
|
|
27
|
+
end.flat_map do |path|
|
|
28
|
+
path = "spec/#{path}"
|
|
29
|
+
File.directory?(path) ? Dir[path+'/*.rb'] : "#{path}.rb"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
filters = Dir['spec/filters/**/*.rb']
|
|
33
|
+
shared = Dir['spec/{opal,lib/parser}/**/*_spec.rb'] + ['spec/lib/lexer_spec.rb']
|
|
34
|
+
|
|
35
|
+
specs = []
|
|
36
|
+
add_specs = ->(name, new_specs) { p [new_specs.size, name]; specs + new_specs}
|
|
37
|
+
|
|
38
|
+
specs = add_specs.(:filters, filters)
|
|
39
|
+
pattern = ENV['PATTERN']
|
|
40
|
+
whitelist_pattern = !!ENV['RUBYSPECS']
|
|
41
|
+
|
|
42
|
+
if pattern
|
|
43
|
+
custom = Dir[pattern]
|
|
44
|
+
custom &= rubyspecs if whitelist_pattern
|
|
45
|
+
specs = add_specs.(:custom, custom)
|
|
46
|
+
else
|
|
47
|
+
specs = add_specs.(:shared, shared)
|
|
48
|
+
specs = add_specs.(:rubyspecs, rubyspecs)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
requires = specs.map{|s| "require '#{s.sub(/^spec\//,'')}'"}
|
|
52
|
+
filename = 'tmp/mspec_node.rb'
|
|
53
|
+
mkdir_p File.dirname(filename)
|
|
54
|
+
File.write filename, <<-RUBY
|
|
55
|
+
require 'spec_helper'
|
|
56
|
+
#{requires.join(" \n")}
|
|
57
|
+
OSpecRunner.main.did_finish
|
|
58
|
+
RUBY
|
|
59
|
+
|
|
60
|
+
stubs = " -smspec/helpers/tmp -smspec/helpers/environment -smspec/guards/block_device -smspec/guards/endian"
|
|
61
|
+
|
|
62
|
+
sh 'RUBYOPT="-rbundler/setup -rmspec/opal/special_calls" '\
|
|
63
|
+
"bin/opal -Ispec -Ilib -gmspec #{stubs} -rnodejs -Dwarning -A #{filename}"
|
|
64
|
+
end
|
|
65
|
+
|
|
24
66
|
require 'opal/version'
|
|
25
67
|
desc <<-DESC
|
|
26
68
|
Build *corelib* and *stdlib* to "build/"
|
data/bin/opal
CHANGED
|
@@ -12,10 +12,15 @@ rescue OptionParser::InvalidOption => e
|
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
require 'opal/cli'
|
|
15
|
-
cli = Opal::CLI.new options.options.merge(
|
|
15
|
+
cli = Opal::CLI.new options.options.merge(
|
|
16
|
+
file: ARGF.file,
|
|
17
|
+
filename: ARGF.filename,
|
|
18
|
+
argv: ARGV.dup
|
|
19
|
+
)
|
|
16
20
|
|
|
17
21
|
begin
|
|
18
22
|
cli.run
|
|
23
|
+
exit cli.exit_status || 0
|
|
19
24
|
rescue Opal::CliRunners::RunnerError => e
|
|
20
25
|
$stderr.puts e.message
|
|
21
26
|
exit 72
|
data/lib/mspec/opal/rake_task.rb
CHANGED
|
@@ -1,30 +1,6 @@
|
|
|
1
|
-
require 'opal/nodes'
|
|
2
|
-
class Opal::Nodes::CallNode
|
|
3
|
-
# Rubyspec uses this call to load in language specific features at runtime.
|
|
4
|
-
# We can't do this at runtime, so handle it during compilation
|
|
5
|
-
add_special :language_version do
|
|
6
|
-
if meth == :language_version and scope.top?
|
|
7
|
-
lang_type = arglist[2][1]
|
|
8
|
-
target = "corelib/language/versions/#{lang_type}_1.9"
|
|
9
|
-
|
|
10
|
-
if File.exist?(target)
|
|
11
|
-
compiler.requires << target
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
push fragment("nil")
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
add_special :not_supported_on do
|
|
19
|
-
unless meth == :not_supported_on and arglist[1][1] == :opal
|
|
20
|
-
compile_default!
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
|
|
26
1
|
require 'rack'
|
|
27
2
|
require 'webrick'
|
|
3
|
+
require 'mspec/opal/special_calls'
|
|
28
4
|
|
|
29
5
|
module MSpec
|
|
30
6
|
module Opal
|
|
@@ -117,7 +93,7 @@ module MSpec
|
|
|
117
93
|
end
|
|
118
94
|
end
|
|
119
95
|
|
|
120
|
-
class Environment < ::
|
|
96
|
+
class Environment < ::Sprockets::Environment
|
|
121
97
|
attr_reader :basedir, :pattern
|
|
122
98
|
|
|
123
99
|
def initialize(basedir = nil, pattern = nil)
|
|
@@ -137,6 +113,8 @@ module MSpec
|
|
|
137
113
|
ENV['OPAL_SPEC'] ||= files_to_run(pattern).join(',')
|
|
138
114
|
|
|
139
115
|
super()
|
|
116
|
+
|
|
117
|
+
::Opal.paths.each { |p| append_path p }
|
|
140
118
|
end
|
|
141
119
|
|
|
142
120
|
def stubs
|
|
@@ -205,16 +183,17 @@ module MSpec
|
|
|
205
183
|
|
|
206
184
|
if pattern
|
|
207
185
|
# add custom opal specs from spec/
|
|
208
|
-
add_files paths_from_glob(pattern) & rubyspec_white_list, :
|
|
209
|
-
add_files paths_from_glob(pattern).grep(/(?!spec\/(corelib|stdlib)\/)/), :
|
|
186
|
+
add_files paths_from_glob(pattern) & rubyspec_white_list, :rubyspec_custom
|
|
187
|
+
add_files paths_from_glob(pattern).grep(/(?!spec\/(corelib|stdlib)\/)/), :other_custom
|
|
210
188
|
|
|
211
189
|
else
|
|
212
190
|
# add opal specific specs
|
|
213
|
-
add_files paths_from_glob("#{basedir}/opal/**/*_spec.rb"),
|
|
214
|
-
add_files paths_from_glob("#{basedir}/lib/
|
|
191
|
+
add_files paths_from_glob("#{basedir}/opal/**/*_spec.rb"), :shared
|
|
192
|
+
add_files paths_from_glob("#{basedir}/lib/lexer_spec.rb"), :lexer
|
|
193
|
+
add_files paths_from_glob("#{basedir}/lib/parser/**/*_spec.rb"), :parser
|
|
215
194
|
|
|
216
195
|
# add any rubyspecs we want to run (defined in spec/rubyspecs)
|
|
217
|
-
add_files rubyspec_white_list, :
|
|
196
|
+
add_files rubyspec_white_list, :rubyspecs
|
|
218
197
|
end
|
|
219
198
|
end
|
|
220
199
|
|
data/lib/mspec/opal/runner.rb
CHANGED
|
@@ -107,6 +107,7 @@ class BrowserFormatter
|
|
|
107
107
|
@exceptions.each_with_index do |exception, idx|
|
|
108
108
|
log "\n #{idx + 1}. #{exception.description}"
|
|
109
109
|
red "\n #{exception.message}"
|
|
110
|
+
log "\n #{`#{exception.exception}.stack`}\n"
|
|
110
111
|
end
|
|
111
112
|
|
|
112
113
|
log "\nFinished"
|
|
@@ -144,13 +145,55 @@ class PhantomFormatter < BrowserFormatter
|
|
|
144
145
|
end
|
|
145
146
|
end
|
|
146
147
|
|
|
147
|
-
class
|
|
148
|
+
class NodeJSFormatter < BrowserFormatter
|
|
149
|
+
def green(str)
|
|
150
|
+
`process.stdout.write("\033[32m"+#{str}+"\033[0m")`
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def red(str)
|
|
154
|
+
`process.stdout.write("\033[31m"+#{str}+"\033[0m")`
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def log(str)
|
|
158
|
+
puts str
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def after(state)
|
|
162
|
+
super
|
|
163
|
+
print_example(state)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def print_example(state)
|
|
167
|
+
unless exception?
|
|
168
|
+
green('.')
|
|
169
|
+
else
|
|
170
|
+
red(failure? ? 'F' : 'E')
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def finish_with_code(code)
|
|
175
|
+
`global.OPAL_SPEC_CODE = code;`
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def finish_with_code(code)
|
|
179
|
+
puts "\n\n"
|
|
180
|
+
exit(code)
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
class PhantomDocFormatter < PhantomFormatter
|
|
148
185
|
def after(state = nil)
|
|
149
186
|
(@exception && state) ? red(state.description) : green(state.description)
|
|
150
187
|
super
|
|
151
188
|
end
|
|
152
189
|
end
|
|
153
190
|
|
|
191
|
+
class NodeJSDocFormatter < NodeJSFormatter
|
|
192
|
+
def print_example(state)
|
|
193
|
+
(@exception && state) ? red(state.description+"\n") : green(state.description+"\n")
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
|
|
154
197
|
module MSpec
|
|
155
198
|
def self.opal_runner
|
|
156
199
|
@env = Object.new
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require 'opal/nodes'
|
|
2
|
+
class Opal::Nodes::CallNode
|
|
3
|
+
# Rubyspec uses this call to load in language specific features at runtime.
|
|
4
|
+
# We can't do this at runtime, so handle it during compilation
|
|
5
|
+
add_special :language_version do
|
|
6
|
+
if meth == :language_version and scope.top?
|
|
7
|
+
lang_type = arglist[2][1]
|
|
8
|
+
target = "corelib/language/versions/#{lang_type}_1.9"
|
|
9
|
+
|
|
10
|
+
if File.exist?(target)
|
|
11
|
+
compiler.requires << target
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
push fragment("nil")
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
add_special :not_supported_on do
|
|
19
|
+
unless meth == :not_supported_on and arglist[1][1] == :opal
|
|
20
|
+
compile_default!
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
|
data/lib/opal/builder.rb
CHANGED
|
@@ -76,7 +76,7 @@ module Opal
|
|
|
76
76
|
base = paths.find { |p| expanded.start_with?(p) }
|
|
77
77
|
next [] if base.nil?
|
|
78
78
|
|
|
79
|
-
globs = extensions.map { |ext| File.join base, tree, "*.#{ext}" }
|
|
79
|
+
globs = extensions.map { |ext| File.join base, tree, '**', "*.#{ext}" }
|
|
80
80
|
|
|
81
81
|
Dir[*globs].map do |file|
|
|
82
82
|
Pathname(file).relative_path_from(Pathname(base)).to_s.gsub(/(\.js)?(\.(?:#{extensions.join '|'}))$/, '')
|
|
@@ -110,7 +110,7 @@ module Opal
|
|
|
110
110
|
end
|
|
111
111
|
end
|
|
112
112
|
|
|
113
|
-
class
|
|
113
|
+
class OpalERBProcessor < RubyProcessor
|
|
114
114
|
handles :opalerb
|
|
115
115
|
|
|
116
116
|
def initialize(*args)
|
|
@@ -134,31 +134,12 @@ module Opal
|
|
|
134
134
|
end
|
|
135
135
|
end
|
|
136
136
|
|
|
137
|
-
class
|
|
138
|
-
handles :haml
|
|
139
|
-
|
|
140
|
-
def initialize(*args)
|
|
141
|
-
super
|
|
142
|
-
@source = prepare(@source, @filename)
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
def requires
|
|
146
|
-
['opal-haml'] + super
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
def prepare(source, path)
|
|
150
|
-
haml = ::Haml::Engine.new(source, :ugly => true).precompiled
|
|
151
|
-
haml = haml.gsub('_hamlout.buffer', '_hamlout')
|
|
152
|
-
|
|
153
|
-
::Opal::Haml.wrap haml, path
|
|
154
|
-
end
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
class ERB_Processor < Processor
|
|
137
|
+
class ERBProcessor < Processor
|
|
158
138
|
handles :erb
|
|
159
139
|
|
|
160
140
|
def source
|
|
161
|
-
|
|
141
|
+
result = ::ERB.new(@source.to_s).result
|
|
142
|
+
"Opal.modules[#{@filename.inspect}] = function() {#{result}};"
|
|
162
143
|
end
|
|
163
144
|
end
|
|
164
145
|
end
|
data/lib/opal/cli.rb
CHANGED
|
@@ -6,7 +6,8 @@ require 'opal/cli_runners'
|
|
|
6
6
|
module Opal
|
|
7
7
|
class CLI
|
|
8
8
|
attr_reader :options, :file, :compiler_options, :evals, :load_paths, :argv,
|
|
9
|
-
:output, :requires, :gems, :stubs, :verbose, :port, :preload
|
|
9
|
+
:output, :requires, :gems, :stubs, :verbose, :port, :preload,
|
|
10
|
+
:filename
|
|
10
11
|
|
|
11
12
|
def compile?
|
|
12
13
|
@compile
|
|
@@ -44,9 +45,10 @@ module Opal
|
|
|
44
45
|
@preload = options.delete(:preload) || []
|
|
45
46
|
@output = options.delete(:output) || self.class.stdout || $stdout
|
|
46
47
|
@verbose = options.fetch(:verbose, false); options.delete(:verbose)
|
|
48
|
+
@filename = options.fetch(:filename) { @file && @file.path }; options.delete(:filename)
|
|
47
49
|
@skip_opal_require = options.delete(:skip_opal_require)
|
|
48
50
|
@compiler_options = Hash[
|
|
49
|
-
*
|
|
51
|
+
*compiler_option_names.map do |option|
|
|
50
52
|
key = option.to_sym
|
|
51
53
|
next unless options.has_key? key
|
|
52
54
|
value = options.delete(key)
|
|
@@ -68,17 +70,21 @@ module Opal
|
|
|
68
70
|
|
|
69
71
|
def runner
|
|
70
72
|
@runner ||= case @runner_type
|
|
71
|
-
when :server;
|
|
72
|
-
when :nodejs;
|
|
73
|
-
when :phantomjs;
|
|
73
|
+
when :server; CliRunners::Server.new(output, port)
|
|
74
|
+
when :nodejs; CliRunners::Nodejs.new(output)
|
|
75
|
+
when :phantomjs; CliRunners::Phantomjs.new(output)
|
|
76
|
+
when :applescript; CliRunners::AppleScript.new(output)
|
|
74
77
|
else raise ArgumentError, @runner_type.inspect
|
|
75
78
|
end
|
|
76
79
|
end
|
|
77
80
|
|
|
78
81
|
def run_code
|
|
79
82
|
runner.run(compiled_source, argv)
|
|
83
|
+
@exit_status = runner.exit_status
|
|
80
84
|
end
|
|
81
85
|
|
|
86
|
+
attr_reader :exit_status
|
|
87
|
+
|
|
82
88
|
def compiled_source
|
|
83
89
|
Opal.paths.concat load_paths
|
|
84
90
|
gems.each { |gem_name| Opal.use_gem gem_name }
|
|
@@ -91,14 +97,14 @@ module Opal
|
|
|
91
97
|
|
|
92
98
|
# REQUIRES: -r
|
|
93
99
|
requires.each do |local_require|
|
|
94
|
-
builder.
|
|
100
|
+
builder.build(local_require)
|
|
95
101
|
end
|
|
96
102
|
|
|
97
103
|
if evals.any?
|
|
98
104
|
builder.build_str(evals.join("\n"), '-e')
|
|
99
105
|
else
|
|
100
|
-
if file and (
|
|
101
|
-
builder.build_str(file.read,
|
|
106
|
+
if file and (filename != '-' or evals.empty?)
|
|
107
|
+
builder.build_str(file.read, filename)
|
|
102
108
|
end
|
|
103
109
|
end
|
|
104
110
|
|
|
@@ -126,10 +132,10 @@ module Opal
|
|
|
126
132
|
compiler.source_map
|
|
127
133
|
end
|
|
128
134
|
|
|
129
|
-
def
|
|
135
|
+
def compiler_option_names
|
|
130
136
|
%w[
|
|
131
|
-
|
|
132
|
-
|
|
137
|
+
method_missing
|
|
138
|
+
arity_check
|
|
133
139
|
dynamic_require_severity
|
|
134
140
|
source_map_enabled
|
|
135
141
|
irb_enabled
|