opal 0.10.6 → 0.11.0.rc1
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 +5 -5
- data/.codeclimate.yml +19 -0
- data/.gitmodules +1 -1
- data/.jshintrc +1 -2
- data/.travis.yml +26 -18
- data/CHANGELOG.md +89 -23
- data/{CODE_OF_CONDUCT.md → CONDUCT.md} +0 -0
- data/Gemfile +19 -21
- data/HACKING.md +2 -0
- data/README.md +7 -6
- data/Rakefile +1 -1
- data/appveyor.yml +21 -4
- data/benchmark-ips/bm_case.rb +33 -0
- data/benchmark-ips/bm_constants_lookup.rb +13 -0
- data/benchmark-ips/bm_is_number.rb +29 -0
- data/benchmark-ips/bm_symbol_to_proc.rb +19 -0
- data/benchmark/bm_constant_lookup_big.rb +799 -0
- data/benchmark/bm_constant_lookup_small.rb +59 -0
- data/benchmark/bm_module_definition_big.rb +400 -0
- data/benchmark/bm_module_definition_small.rb +30 -0
- data/bin/opal-repl +23 -1
- data/docs/compiled_ruby.md +16 -14
- data/docs/faq.md +3 -3
- data/docs/rspec.md +2 -1
- data/docs/unsupported_features.md +6 -4
- data/examples/rack/Gemfile +1 -0
- data/examples/rack/app/application.rb +14 -3
- data/examples/rack/app/user.rb +2 -0
- data/examples/rack/config.ru +1 -1
- data/examples/rack/index.html.erb +1 -0
- data/lib/opal.rb +6 -1
- data/lib/opal/ast/builder.rb +17 -0
- data/lib/opal/ast/node.rb +30 -0
- data/lib/opal/builder.rb +14 -3
- data/lib/opal/builder_processors.rb +1 -0
- data/lib/opal/cli.rb +45 -59
- data/lib/opal/cli_options.rb +11 -7
- data/lib/opal/cli_runners.rb +1 -0
- data/lib/opal/cli_runners/applescript.rb +3 -3
- data/lib/opal/cli_runners/nashorn.rb +1 -0
- data/lib/opal/cli_runners/nodejs.rb +4 -1
- data/lib/opal/cli_runners/phantom.js +1 -2
- data/lib/opal/cli_runners/phantomjs.rb +3 -2
- data/lib/opal/cli_runners/server.rb +1 -0
- data/lib/opal/compiler.rb +145 -94
- data/lib/opal/config.rb +1 -0
- data/lib/opal/deprecations.rb +18 -0
- data/lib/opal/erb.rb +1 -0
- data/lib/opal/errors.rb +1 -0
- data/lib/opal/fragment.rb +1 -0
- data/lib/opal/hike_path_finder.rb +1 -0
- data/lib/opal/nodes.rb +3 -0
- data/lib/opal/nodes/arglist.rb +2 -1
- data/lib/opal/nodes/args/initialize_kwargs.rb +1 -0
- data/lib/opal/nodes/args/kwarg.rb +7 -7
- data/lib/opal/nodes/args/kwoptarg.rb +6 -7
- data/lib/opal/nodes/args/kwrestarg.rb +5 -5
- data/lib/opal/nodes/args/mlhsarg.rb +3 -2
- data/lib/opal/nodes/args/normarg.rb +6 -7
- data/lib/opal/nodes/args/optarg.rb +5 -7
- data/lib/opal/nodes/args/post_args.rb +6 -5
- data/lib/opal/nodes/args/post_kwargs.rb +1 -0
- data/lib/opal/nodes/args/restarg.rb +7 -7
- data/lib/opal/nodes/array.rb +1 -0
- data/lib/opal/nodes/base.rb +24 -3
- data/lib/opal/nodes/call.rb +167 -155
- data/lib/opal/nodes/call_special.rb +31 -217
- data/lib/opal/nodes/case.rb +36 -22
- data/lib/opal/nodes/class.rb +4 -3
- data/lib/opal/nodes/constants.rb +28 -48
- data/lib/opal/nodes/csend.rb +25 -0
- data/lib/opal/nodes/def.rb +49 -16
- data/lib/opal/nodes/defined.rb +170 -60
- data/lib/opal/nodes/definitions.rb +40 -133
- data/lib/opal/nodes/defs.rb +29 -0
- data/lib/opal/nodes/for.rb +52 -25
- data/lib/opal/nodes/hash.rb +12 -35
- data/lib/opal/nodes/helpers.rb +27 -54
- data/lib/opal/nodes/if.rb +21 -32
- data/lib/opal/nodes/inline_args.rb +12 -13
- data/lib/opal/nodes/iter.rb +61 -36
- data/lib/opal/nodes/literal.rb +189 -116
- data/lib/opal/nodes/logic.rb +20 -25
- data/lib/opal/nodes/masgn.rb +20 -18
- data/lib/opal/nodes/module.rb +10 -11
- data/lib/opal/nodes/node_with_args.rb +14 -17
- data/lib/opal/nodes/rescue.rb +37 -70
- data/lib/opal/nodes/runtime_helpers.rb +8 -3
- data/lib/opal/nodes/scope.rb +9 -5
- data/lib/opal/nodes/singleton_class.rb +4 -3
- data/lib/opal/nodes/super.rb +115 -87
- data/lib/opal/nodes/top.rb +7 -2
- data/lib/opal/nodes/variables.rb +46 -35
- data/lib/opal/nodes/while.rb +11 -1
- data/lib/opal/nodes/yield.rb +1 -17
- data/lib/opal/parser.rb +28 -770
- data/lib/opal/path_reader.rb +5 -1
- data/lib/opal/paths.rb +10 -4
- data/lib/opal/regexp_anchors.rb +1 -0
- data/lib/opal/rewriter.rb +60 -0
- data/lib/opal/rewriters/base.rb +60 -0
- data/lib/opal/rewriters/binary_operator_assignment.rb +144 -0
- data/lib/opal/rewriters/block_to_iter.rb +17 -0
- data/lib/opal/rewriters/break_finder.rb +34 -0
- data/lib/opal/rewriters/dot_js_syntax.rb +60 -0
- data/lib/opal/rewriters/explicit_writer_return.rb +58 -0
- data/lib/opal/rewriters/js_reserved_words.rb +111 -0
- data/lib/opal/rewriters/logical_operator_assignment.rb +155 -0
- data/lib/opal/rewriters/opal_engine_check.rb +42 -0
- data/lib/opal/rewriters/rubyspec/filters_rewriter.rb +67 -0
- data/lib/opal/server.rb +4 -0
- data/lib/opal/simple_server.rb +100 -0
- data/lib/opal/source_map.rb +1 -1
- data/lib/opal/util.rb +5 -5
- data/lib/opal/version.rb +2 -1
- data/lib/tilt/opal.rb +1 -0
- data/opal.gemspec +8 -7
- data/opal/README.md +1 -1
- data/opal/corelib/array.rb +137 -83
- data/opal/corelib/basic_object.rb +6 -6
- data/opal/corelib/class.rb +14 -11
- data/opal/corelib/complex.rb +5 -1
- data/opal/corelib/constants.rb +3 -3
- data/opal/corelib/enumerable.rb +129 -11
- data/opal/corelib/error.rb +35 -17
- data/opal/corelib/file.rb +65 -170
- data/opal/corelib/hash.rb +128 -13
- data/opal/corelib/helpers.rb +12 -15
- data/opal/corelib/io.rb +1 -0
- data/opal/corelib/kernel.rb +40 -21
- data/opal/corelib/marshal/read_buffer.rb +1 -1
- data/opal/corelib/method.rb +33 -13
- data/opal/corelib/module.rb +133 -81
- data/opal/corelib/number.rb +141 -25
- data/opal/corelib/numeric.rb +0 -8
- data/opal/corelib/process.rb +44 -4
- data/opal/corelib/random.rb +117 -0
- data/opal/corelib/random/seedrandom.js.rb +15 -0
- data/opal/corelib/range.rb +133 -10
- data/opal/corelib/regexp.rb +37 -9
- data/opal/corelib/runtime.js +601 -390
- data/opal/corelib/string.rb +39 -8
- data/opal/corelib/string/encoding.rb +51 -7
- data/opal/corelib/struct.rb +20 -0
- data/opal/corelib/time.rb +3 -3
- data/opal/corelib/variables.rb +1 -1
- data/opal/opal.rb +1 -0
- data/spec/filters/bugs/array.rb +5 -1
- data/spec/filters/bugs/basicobject.rb +2 -5
- data/spec/filters/bugs/bigdecimal.rb +8 -22
- data/spec/filters/bugs/class.rb +2 -1
- data/spec/filters/bugs/comparable.rb +5 -0
- data/spec/filters/bugs/date.rb +3 -3
- data/spec/filters/bugs/enumerable.rb +4 -11
- data/spec/filters/bugs/enumerator.rb +2 -4
- data/spec/filters/bugs/exception.rb +16 -2
- data/spec/filters/bugs/file.rb +8 -0
- data/spec/filters/bugs/float.rb +7 -1
- data/spec/filters/bugs/hash.rb +6 -2
- data/spec/filters/bugs/integer.rb +2 -0
- data/spec/filters/bugs/io.rb +8 -0
- data/spec/filters/bugs/kernel.rb +9 -138
- data/spec/filters/bugs/language.rb +89 -174
- data/spec/filters/bugs/marshal.rb +33 -35
- data/spec/filters/bugs/method.rb +0 -24
- data/spec/filters/bugs/module.rb +19 -55
- data/spec/filters/bugs/numeric.rb +0 -119
- data/spec/filters/bugs/pathname.rb +2 -0
- data/spec/filters/bugs/proc.rb +5 -4
- data/spec/filters/bugs/random.rb +7 -0
- data/spec/filters/bugs/range.rb +12 -120
- data/spec/filters/bugs/rational.rb +1 -1
- data/spec/filters/bugs/regexp.rb +2 -40
- data/spec/filters/bugs/set.rb +0 -1
- data/spec/filters/bugs/string.rb +5 -8
- data/spec/filters/bugs/stringscanner.rb +11 -19
- data/spec/filters/bugs/time.rb +7 -1
- data/spec/filters/bugs/unboundmethod.rb +1 -11
- data/spec/filters/unsupported/array.rb +5 -1
- data/spec/filters/unsupported/basicobject.rb +1 -1
- data/spec/filters/unsupported/bignum.rb +4 -1
- data/spec/filters/unsupported/class.rb +1 -1
- data/spec/filters/unsupported/delegator.rb +1 -1
- data/spec/filters/unsupported/enumerable.rb +1 -1
- data/spec/filters/unsupported/enumerator.rb +1 -1
- data/spec/filters/unsupported/file.rb +4 -0
- data/spec/filters/unsupported/fixnum.rb +1 -1
- data/spec/filters/unsupported/float.rb +4 -1
- data/spec/filters/unsupported/freeze.rb +27 -5
- data/spec/filters/unsupported/hash.rb +7 -15
- data/spec/filters/unsupported/integer.rb +1 -1
- data/spec/filters/unsupported/kernel.rb +2 -1
- data/spec/filters/unsupported/language.rb +6 -1
- data/spec/filters/unsupported/marshal.rb +1 -1
- data/spec/filters/unsupported/matchdata.rb +4 -1
- data/spec/filters/unsupported/math.rb +1 -1
- data/spec/filters/unsupported/pathname.rb +1 -1
- data/spec/filters/unsupported/privacy.rb +141 -9
- data/spec/filters/unsupported/proc.rb +1 -1
- data/spec/filters/unsupported/random.rb +4 -0
- data/spec/filters/unsupported/range.rb +7 -0
- data/spec/filters/unsupported/regexp.rb +25 -15
- data/spec/filters/unsupported/set.rb +1 -1
- data/spec/filters/unsupported/singleton.rb +1 -1
- data/spec/filters/unsupported/string.rb +110 -101
- data/spec/filters/unsupported/struct.rb +1 -1
- data/spec/filters/unsupported/symbol.rb +2 -1
- data/spec/filters/unsupported/taint.rb +22 -7
- data/spec/filters/unsupported/thread.rb +1 -1
- data/spec/filters/unsupported/time.rb +1 -1
- data/spec/lib/builder_spec.rb +17 -0
- data/spec/lib/cli_spec.rb +37 -8
- data/spec/lib/compiler/call_spec.rb +98 -66
- data/spec/lib/compiler_spec.rb +39 -30
- data/spec/lib/dependency_resolver_spec.rb +2 -2
- data/spec/lib/deprecations_spec.rb +16 -0
- data/spec/lib/fixtures/source_location_test.rb +7 -0
- data/spec/lib/rewriters/binary_operator_assignment_spec.rb +151 -0
- data/spec/lib/rewriters/block_to_iter_spec.rb +28 -0
- data/spec/lib/rewriters/dot_js_syntax_spec.rb +108 -0
- data/spec/lib/rewriters/explicit_writer_return_spec.rb +186 -0
- data/spec/lib/rewriters/js_reserved_words_spec.rb +116 -0
- data/spec/lib/rewriters/logical_operator_assignment_spec.rb +202 -0
- data/spec/lib/rewriters/opal_engine_check_spec.rb +82 -0
- data/spec/lib/rewriters/rubyspec/filters_rewriter_spec.rb +53 -0
- data/spec/lib/simple_server_spec.rb +54 -0
- data/spec/mspec-opal/formatters.rb +65 -17
- data/spec/mspec-opal/runner.rb +47 -67
- data/spec/opal/core/date_spec.rb +14 -0
- data/spec/opal/core/exception_spec.rb +10 -0
- data/spec/opal/core/hash/internals_spec.rb +10 -10
- data/spec/opal/core/kernel/rand_spec.rb +0 -4
- data/spec/opal/core/kernel/respond_to_spec.rb +5 -2
- data/spec/opal/core/language/constant_lookup_spec.rb +38 -0
- data/spec/opal/core/language/predefined_spec.rb +1 -1
- data/spec/opal/core/language/safe_navigator_spec.rb +7 -0
- data/spec/opal/core/language/send_spec.rb +1 -9
- data/spec/opal/core/language/string_spec.rb +8 -8
- data/spec/opal/core/language/versions/def_2_0_spec.rb +0 -4
- data/spec/opal/core/language_spec.rb +32 -0
- data/spec/opal/core/module/const_get_spec.rb +1 -1
- data/spec/opal/core/runtime/is_a_spec.rb +36 -0
- data/spec/opal/core/runtime/rescue_spec.rb +35 -0
- data/spec/opal/core/runtime_spec.rb +4 -4
- data/spec/opal/core/string_spec.rb +8 -8
- data/spec/opal/core/time_spec.rb +26 -17
- data/spec/opal/stdlib/erb/quoted.opalerb +1 -1
- data/spec/opal/stdlib/json/parse_spec.rb +4 -0
- data/spec/opal/stdlib/native/hash_spec.rb +16 -0
- data/spec/ruby_specs +2 -1
- data/spec/spec_helper.rb +1 -0
- data/spec/support/rewriters_helper.rb +24 -0
- data/stdlib/base64.rb +4 -2
- data/stdlib/bigdecimal/bignumber.js.rb +1 -1
- data/stdlib/date.rb +18 -19
- data/stdlib/json.rb +16 -4
- data/stdlib/nashorn/file.rb +15 -0
- data/stdlib/native.rb +21 -12
- data/stdlib/nodejs/dir.rb +1 -1
- data/stdlib/nodejs/file.rb +49 -20
- data/stdlib/nodejs/io.rb +22 -1
- data/stdlib/nodejs/{node_modules/js-yaml/dist/js-yaml.js → js-yaml-3-6-1.js} +815 -626
- data/stdlib/nodejs/kernel.rb +3 -1
- data/stdlib/nodejs/package.json +0 -1
- data/stdlib/nodejs/stacktrace.rb +163 -0
- data/stdlib/nodejs/yaml.rb +2 -1
- data/stdlib/opal-platform.rb +15 -0
- data/stdlib/opal/platform.rb +5 -13
- data/stdlib/pathname.rb +1 -1
- data/stdlib/strscan.rb +15 -1
- data/stdlib/yaml.rb +1 -1
- data/tasks/benchmarking.rake +9 -0
- data/tasks/building.rake +24 -20
- data/tasks/linting.rake +24 -13
- data/tasks/testing.rake +322 -205
- data/tasks/testing/mspec_special_calls.rb +44 -15
- data/tasks/testing/opal_rspec_smoketest.Gemfile +13 -0
- data/test/nodejs/fixtures/hello.rb +1 -0
- data/test/nodejs/test_file.rb +57 -0
- data/test/nodejs/test_io.rb +18 -0
- data/test/nodejs/test_opal_builder.rb +12 -0
- data/test/opal/unsupported_and_bugs.rb +9 -0
- metadata +127 -240
- data/lib/opal/parser/grammar.rb +0 -6157
- data/lib/opal/parser/grammar.y +0 -2011
- data/lib/opal/parser/keywords.rb +0 -66
- data/lib/opal/parser/lexer.rb +0 -1352
- data/lib/opal/parser/parser_scope.rb +0 -28
- data/lib/opal/parser/sexp.rb +0 -90
- data/lib/opal/sprockets.rb +0 -77
- data/lib/opal/sprockets/environment.rb +0 -23
- data/lib/opal/sprockets/erb.rb +0 -28
- data/lib/opal/sprockets/path_reader.rb +0 -36
- data/lib/opal/sprockets/processor.rb +0 -173
- data/lib/opal/sprockets/server.rb +0 -133
- data/lib/opal/sprockets/source_map_header_patch.rb +0 -41
- data/lib/opal/sprockets/source_map_server.rb +0 -117
- data/spec/filters/bugs/compiler_opal.rb +0 -5
- data/spec/filters/bugs/language_opal.rb +0 -88
- data/spec/filters/unsupported/module.rb +0 -8
- data/spec/lib/compiler/pre_processed_conditionals_spec.rb +0 -87
- data/spec/lib/lexer_spec.rb +0 -110
- data/spec/lib/parser/alias_spec.rb +0 -26
- data/spec/lib/parser/and_spec.rb +0 -13
- data/spec/lib/parser/aref_spec.rb +0 -10
- data/spec/lib/parser/attrasgn_spec.rb +0 -28
- data/spec/lib/parser/begin_spec.rb +0 -42
- data/spec/lib/parser/block_spec.rb +0 -12
- data/spec/lib/parser/break_spec.rb +0 -17
- data/spec/lib/parser/call_spec.rb +0 -201
- data/spec/lib/parser/class_spec.rb +0 -35
- data/spec/lib/parser/comments_spec.rb +0 -11
- data/spec/lib/parser/def_spec.rb +0 -109
- data/spec/lib/parser/if_spec.rb +0 -26
- data/spec/lib/parser/iter_spec.rb +0 -59
- data/spec/lib/parser/lambda_spec.rb +0 -219
- data/spec/lib/parser/literal_spec.rb +0 -118
- data/spec/lib/parser/masgn_spec.rb +0 -37
- data/spec/lib/parser/module_spec.rb +0 -27
- data/spec/lib/parser/not_spec.rb +0 -21
- data/spec/lib/parser/op_asgn1_spec.rb +0 -23
- data/spec/lib/parser/op_asgn2_spec.rb +0 -23
- data/spec/lib/parser/op_asgn_spec.rb +0 -17
- data/spec/lib/parser/or_spec.rb +0 -13
- data/spec/lib/parser/return_spec.rb +0 -22
- data/spec/lib/parser/sclass_spec.rb +0 -21
- data/spec/lib/parser/string_spec.rb +0 -286
- data/spec/lib/parser/super_spec.rb +0 -20
- data/spec/lib/parser/unary_spec.rb +0 -52
- data/spec/lib/parser/undef_spec.rb +0 -19
- data/spec/lib/parser/unless_spec.rb +0 -13
- data/spec/lib/parser/variables_spec.rb +0 -112
- data/spec/lib/parser/while_spec.rb +0 -15
- data/spec/lib/parser/yield_spec.rb +0 -20
- data/spec/lib/sprockets/erb_spec.rb +0 -38
- data/spec/lib/sprockets/path_reader_spec.rb +0 -41
- data/spec/lib/sprockets/processor_spec.rb +0 -79
- data/spec/lib/sprockets/server_spec.rb +0 -102
- data/spec/lib/sprockets_spec.rb +0 -39
- data/spec/lib/tilt/opal_spec.rb +0 -37
- data/spec/opal/core/language/block_spec.rb +0 -538
- data/spec/opal/core/language/proc_spec.rb +0 -263
- data/spec/opal/core/language/variables_spec.rb +0 -1366
- data/spec/opal/core/runtime/block_send_spec.rb +0 -28
- data/spec/opal/core/runtime/send_spec.rb +0 -34
- data/spec/support/parser_helpers.rb +0 -37
- data/stdlib/nodejs/node_modules/js-yaml/HISTORY.md +0 -277
- data/stdlib/nodejs/node_modules/js-yaml/LICENSE +0 -21
- data/stdlib/nodejs/node_modules/js-yaml/README.md +0 -288
- data/stdlib/nodejs/node_modules/js-yaml/bin/js-yaml.js +0 -140
- data/stdlib/nodejs/node_modules/js-yaml/bower.json +0 -23
- data/stdlib/nodejs/node_modules/js-yaml/dist/js-yaml.min.js +0 -3
- data/stdlib/nodejs/node_modules/js-yaml/examples/custom_types.js +0 -102
- data/stdlib/nodejs/node_modules/js-yaml/examples/custom_types.yml +0 -18
- data/stdlib/nodejs/node_modules/js-yaml/examples/dumper.js +0 -31
- data/stdlib/nodejs/node_modules/js-yaml/examples/dumper.json +0 -22
- data/stdlib/nodejs/node_modules/js-yaml/examples/sample_document.js +0 -18
- data/stdlib/nodejs/node_modules/js-yaml/examples/sample_document.yml +0 -197
- data/stdlib/nodejs/node_modules/js-yaml/index.js +0 -7
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml.js +0 -39
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/common.js +0 -62
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/dumper.js +0 -554
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/exception.js +0 -25
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/loader.js +0 -1581
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/mark.js +0 -78
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema.js +0 -103
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/core.js +0 -18
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/default_full.js +0 -25
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js +0 -28
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js +0 -17
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/json.js +0 -25
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type.js +0 -61
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/binary.js +0 -133
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/bool.js +0 -37
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/float.js +0 -110
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/int.js +0 -183
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/function.js +0 -85
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js +0 -84
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js +0 -27
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/map.js +0 -8
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/merge.js +0 -12
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/null.js +0 -36
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/omap.js +0 -56
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/pairs.js +0 -61
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/seq.js +0 -8
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/set.js +0 -33
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/str.js +0 -8
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/timestamp.js +0 -98
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/HISTORY.md +0 -115
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/LICENSE +0 -21
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/README.md +0 -239
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/arguments.js +0 -36
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/choice.js +0 -22
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/constants.js +0 -59
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/help.js +0 -13
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/nargs.js +0 -33
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/parents.js +0 -28
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/prefix_chars.js +0 -23
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/sub_commands.js +0 -49
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/sum.js +0 -35
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/testformatters.js +0 -270
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/index.js +0 -1
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action.js +0 -146
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/append.js +0 -55
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/append/constant.js +0 -47
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/count.js +0 -40
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/help.js +0 -48
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store.js +0 -50
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/constant.js +0 -43
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/false.js +0 -27
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/true.js +0 -26
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/subparsers.js +0 -148
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/version.js +0 -50
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action_container.js +0 -481
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argparse.js +0 -14
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/error.js +0 -50
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/exclusive.js +0 -54
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/group.js +0 -75
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument_parser.js +0 -1168
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/const.js +0 -18
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/help/added_formatters.js +0 -88
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/help/formatter.js +0 -798
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/namespace.js +0 -77
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/.npmignore +0 -2
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/.travis.yml +0 -8
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/README.markdown +0 -825
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/bower.json +0 -33
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/component.json +0 -11
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/foo.js +0 -10
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/gulpfile.js +0 -26
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/lib/underscore.string.js +0 -673
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/libpeerconnection.log +0 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/package.json +0 -107
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/LICENSE +0 -23
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/README.md +0 -22
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/package.json +0 -69
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore-min.js +0 -6
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore.js +0 -1415
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/package.json +0 -62
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/README.md +0 -73
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/bin/esparse.js +0 -117
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/bin/esvalidate.js +0 -177
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/esprima.js +0 -3908
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/package.json +0 -69
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/compat.js +0 -239
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/reflect.js +0 -422
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/run.js +0 -66
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/runner.js +0 -387
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/test.js +0 -20238
- data/stdlib/nodejs/node_modules/js-yaml/package.json +0 -83
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module Scope0
|
|
2
|
+
module Scope1
|
|
3
|
+
module Scope2
|
|
4
|
+
module Scope3
|
|
5
|
+
module Scope4
|
|
6
|
+
module Scope5
|
|
7
|
+
module Scope6
|
|
8
|
+
module Scope7
|
|
9
|
+
module Scope8
|
|
10
|
+
module Scope9
|
|
11
|
+
module Scope10
|
|
12
|
+
module Scope11
|
|
13
|
+
module Scope12
|
|
14
|
+
module Scope13
|
|
15
|
+
module Scope14
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
data/bin/opal-repl
CHANGED
|
@@ -6,6 +6,8 @@ module Opal
|
|
|
6
6
|
class V8Context
|
|
7
7
|
def initialize
|
|
8
8
|
@builder = Opal::Builder.new
|
|
9
|
+
@history_path = File.expand_path('~/.opal-repl-history')
|
|
10
|
+
@history = File.exist?(@history_path)
|
|
9
11
|
end
|
|
10
12
|
|
|
11
13
|
def run(filename = nil)
|
|
@@ -17,6 +19,13 @@ module Opal
|
|
|
17
19
|
abort 'opal-repl depends on therubyracer gem, which is not currently installed'
|
|
18
20
|
end
|
|
19
21
|
|
|
22
|
+
# Patch V8::Object#respond_to? to avoid MRI warning
|
|
23
|
+
V8::Object.class_eval do
|
|
24
|
+
def respond_to?(method, private = false)
|
|
25
|
+
super or self[method] != nil
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
20
29
|
@v8 = V8::Context.new
|
|
21
30
|
@v8['console'] = self
|
|
22
31
|
@v8.eval Opal::Builder.new.build('opal').to_s
|
|
@@ -38,6 +47,7 @@ module Opal
|
|
|
38
47
|
|
|
39
48
|
def run_repl
|
|
40
49
|
require 'readline'
|
|
50
|
+
load_history
|
|
41
51
|
|
|
42
52
|
loop do
|
|
43
53
|
# on SIGINT lets just return from the loop..
|
|
@@ -59,11 +69,23 @@ module Opal
|
|
|
59
69
|
code = Opal::Builder.new.build_str(str, '(irb)', :irb => true, :const_missing => true)
|
|
60
70
|
code.processed[0...-1].each { |c| @v8.eval(c.to_s) }
|
|
61
71
|
@v8.eval "var $_result = #{code.processed.last.to_s} ($_result == null ? 'nil' : $_result.$inspect());"
|
|
62
|
-
rescue => e
|
|
72
|
+
rescue Exception => e
|
|
63
73
|
puts "#{e.message}\n\t#{e.backtrace.join("\n\t")}"
|
|
64
74
|
end
|
|
65
75
|
|
|
76
|
+
def load_history
|
|
77
|
+
return unless @history
|
|
78
|
+
File.read(@history_path).lines.each { |line| Readline::HISTORY.push line.strip }
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def dump_history
|
|
82
|
+
return unless @history
|
|
83
|
+
length = (Readline::HISTORY.size > 1000) ? 1000 : Readline::HISTORY.size
|
|
84
|
+
File.write(@history_path, Readline::HISTORY.to_a[-length..-1].join("\n"))
|
|
85
|
+
end
|
|
86
|
+
|
|
66
87
|
def finish
|
|
88
|
+
dump_history
|
|
67
89
|
@v8 = nil
|
|
68
90
|
end
|
|
69
91
|
end
|
data/docs/compiled_ruby.md
CHANGED
|
@@ -38,7 +38,7 @@ and `FalseClass` classes from ruby.
|
|
|
38
38
|
```ruby
|
|
39
39
|
"hello world!" # => "hello world!"
|
|
40
40
|
:foo # => "foo"
|
|
41
|
-
<<-EOS # => "
|
|
41
|
+
<<-EOS # => "Hello there.\n"
|
|
42
42
|
Hello there.
|
|
43
43
|
EOS
|
|
44
44
|
```
|
|
@@ -119,11 +119,12 @@ end
|
|
|
119
119
|
This would be compiled into:
|
|
120
120
|
|
|
121
121
|
```javascript
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
122
|
+
val = 42;
|
|
123
|
+
if (val !== false && val !== nil && val != null) {
|
|
124
|
+
return 3.142
|
|
125
|
+
} else {
|
|
126
|
+
return nil
|
|
127
|
+
};
|
|
127
128
|
```
|
|
128
129
|
|
|
129
130
|
This makes the generated truthy tests (`if` statements, `and` checks and
|
|
@@ -162,9 +163,9 @@ of JavaScript code that is wrapped inside an anonymous function. This
|
|
|
162
163
|
looks similar to the following:
|
|
163
164
|
|
|
164
165
|
```javascript
|
|
165
|
-
(function(
|
|
166
|
-
|
|
167
|
-
|
|
166
|
+
(function(Opal) {
|
|
167
|
+
// some setup code code
|
|
168
|
+
return self.$puts("foo")
|
|
168
169
|
})(Opal);
|
|
169
170
|
```
|
|
170
171
|
|
|
@@ -177,14 +178,15 @@ puts "foo"
|
|
|
177
178
|
This would compile directly into:
|
|
178
179
|
|
|
179
180
|
```javascript
|
|
180
|
-
(function(
|
|
181
|
-
var $
|
|
182
|
-
|
|
181
|
+
(function(Opal) {
|
|
182
|
+
var self = Opal.top, $nesting = [], nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice;
|
|
183
|
+
|
|
184
|
+
Opal.add_stubs(['$puts']);
|
|
185
|
+
return self.$puts("foo")
|
|
183
186
|
})(Opal);
|
|
184
187
|
```
|
|
185
188
|
|
|
186
|
-
|
|
187
|
-
example.
|
|
189
|
+
**TIP:** you can see the compiled code with this command: `opal --compile --no-exit --no-opal --eval 'puts "foo"'`
|
|
188
190
|
|
|
189
191
|
### Using compiled sources
|
|
190
192
|
|
data/docs/faq.md
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
### Why does Opal exist?
|
|
4
4
|
|
|
5
|
-
To try and keep ruby relevant in a world where client-side
|
|
5
|
+
To try and keep ruby relevant in a world where client-side applications are making javascript the primary development platform.
|
|
6
6
|
|
|
7
7
|
### How compatible is Opal?
|
|
8
8
|
|
|
9
|
-
We run opal against the [ruby spec](https://github.com/ruby/spec) as our primary testing setup. We try to make Opal as compatible as possible, whilst also taking into account restrictions of JavaScript when applicable. Opal supports the majority of ruby syntax features, as well as a very large part of the corelib implementation. We support method\_missing, modules, classes, instance\_exec, blocks, procs and lots lots more. Opal can compile and run
|
|
9
|
+
We run opal against the [ruby spec](https://github.com/ruby/spec) as our primary testing setup. We try to make Opal as compatible as possible, whilst also taking into account restrictions of JavaScript when applicable. Opal supports the majority of ruby syntax features, as well as a very large part of the corelib implementation. We support method\_missing, modules, classes, instance\_exec, blocks, procs and lots lots more. Opal can compile and run RSpec unmodified, as well as self hosting the compiler at runtime.
|
|
10
10
|
|
|
11
11
|
### What version of ruby does Opal target?
|
|
12
12
|
|
|
@@ -14,4 +14,4 @@ We are running tests under ruby 2.0.0 conditions, but are mostly compatible with
|
|
|
14
14
|
|
|
15
15
|
### Why doesn't Opal support mutable strings?
|
|
16
16
|
|
|
17
|
-
All strings in Opal are immutable because ruby strings just get compiled
|
|
17
|
+
All strings in Opal are immutable because ruby strings just get compiled directly into javascript strings, which are immutable. Wrapping ruby strings as a custom JavaScript object would add a lot of overhead as well as making interaction between ruby and javascript libraries more difficult.
|
data/docs/rspec.md
CHANGED
|
@@ -51,7 +51,8 @@ $ bundle exec rake
|
|
|
51
51
|
require 'bundler'
|
|
52
52
|
Bundler.require
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
sprockets_env = Opal::RSpec::SprocketsEnvironment.new
|
|
55
|
+
run Opal::Server.new(sprockets: sprockets_env) { |s|
|
|
55
56
|
s.main = 'opal/rspec/sprockets_runner'
|
|
56
57
|
s.append_path 'spec'
|
|
57
58
|
s.debug = false
|
|
@@ -6,6 +6,12 @@ Opal does not support some language/runtime features of ruby. These are document
|
|
|
6
6
|
|
|
7
7
|
For performance and ease of runtime features, all strings in Opal are immutable, i.e. `#<<`, `#gsub!`, etc. do not exist. Also, symbols are just strings. There is no class, runtime or feature difference between Symbols and Strings. Their syntaxes can be used interchangeably.
|
|
8
8
|
|
|
9
|
+
#### Integer / Float difference ####
|
|
10
|
+
|
|
11
|
+
In Opal, both integers and floats belong to same class `Number` (using JavaScript native numbers). So `1 / 4` is `0.25` (not `0`) and `4.0 / 2` is `2` (not `2.0`).
|
|
12
|
+
|
|
13
|
+
`Number` is a subclass of `Numeric`, like `Complex` and `Rational`.
|
|
14
|
+
|
|
9
15
|
#### Encodings ####
|
|
10
16
|
|
|
11
17
|
Encodings only have a very small implementation inside Opal.
|
|
@@ -18,10 +24,6 @@ JavaScript does not have a native `Thread` implementation, so they are not prese
|
|
|
18
24
|
|
|
19
25
|
Opal does not currently support frozen objects, but has placeholder methods to prevent other libraries breaking when expecting these methods. Opal could support frozen objects in the future once a similar implementation becomes available across JavaScript runtimes.
|
|
20
26
|
|
|
21
|
-
#### `method_added` and `method_removed` hooks ####
|
|
22
|
-
|
|
23
|
-
These are not *currently* supported by Opal, but this is considered a bug and will be implemented soon.
|
|
24
|
-
|
|
25
27
|
#### Private, Public and Protected methods ####
|
|
26
28
|
|
|
27
29
|
All methods in Opal are defined as `public` to avoid additional runtime overhead. `Module#private` and `Module#protected` exist as just placeholder methods and are no-op methods.
|
data/examples/rack/Gemfile
CHANGED
|
@@ -1,13 +1,24 @@
|
|
|
1
1
|
require 'opal'
|
|
2
2
|
require 'user'
|
|
3
|
+
require 'opal/platform'
|
|
3
4
|
|
|
4
5
|
module MyApp
|
|
5
6
|
class Application
|
|
6
7
|
def initialize
|
|
7
|
-
@user = User.new('
|
|
8
|
-
|
|
8
|
+
@user = User.new('Bob')
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def title
|
|
12
|
+
"#{@user.name} is #{:not unless @user.authenticated?} authenticated"
|
|
9
13
|
end
|
|
10
14
|
end
|
|
11
15
|
end
|
|
12
16
|
|
|
13
|
-
MyApp::Application.new
|
|
17
|
+
$app = MyApp::Application.new
|
|
18
|
+
|
|
19
|
+
require 'native'
|
|
20
|
+
|
|
21
|
+
$$[:document][:title] = "#{$app.title}"
|
|
22
|
+
|
|
23
|
+
bill = User.new('Bill')
|
|
24
|
+
bill.authenticated?
|
data/examples/rack/app/user.rb
CHANGED
data/examples/rack/config.ru
CHANGED
|
@@ -10,7 +10,7 @@ Bundler.require
|
|
|
10
10
|
|
|
11
11
|
# with gems like opal-jquery or opal-browser you could manipulate the dom directly
|
|
12
12
|
|
|
13
|
-
run Opal::
|
|
13
|
+
run Opal::SimpleServer.new { |s|
|
|
14
14
|
# the name of the ruby file to load. To use more files they must be required from here (see app)
|
|
15
15
|
s.main = 'application'
|
|
16
16
|
# the directory where the code is (add to opal load path )
|
data/lib/opal.rb
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require 'opal/config'
|
|
1
3
|
require 'opal/compiler'
|
|
2
4
|
require 'opal/builder'
|
|
3
5
|
require 'opal/erb'
|
|
4
|
-
require 'opal/sprockets'
|
|
5
6
|
require 'opal/paths'
|
|
6
7
|
require 'opal/version'
|
|
7
8
|
require 'opal/errors'
|
|
9
|
+
require 'opal/source_map'
|
|
10
|
+
require 'opal/deprecations'
|
|
8
11
|
|
|
9
12
|
# Opal is a ruby to javascript compiler, with a runtime for running
|
|
10
13
|
# in any JavaScript environment.
|
|
11
14
|
module Opal
|
|
15
|
+
autoload :Server, 'opal/server'
|
|
16
|
+
autoload :SimpleServer, 'opal/simple_server'
|
|
12
17
|
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require 'opal/ast/node'
|
|
3
|
+
require 'parser/ruby23'
|
|
4
|
+
|
|
5
|
+
module Opal
|
|
6
|
+
module AST
|
|
7
|
+
class Builder < ::Parser::Builders::Default
|
|
8
|
+
def string_value(token)
|
|
9
|
+
token[0]
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def n(type, children, location)
|
|
13
|
+
::Opal::AST::Node.new(type, children, location: location)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require 'ast'
|
|
3
|
+
require 'parser/ast/node'
|
|
4
|
+
|
|
5
|
+
module Opal
|
|
6
|
+
module AST
|
|
7
|
+
class Node < ::Parser::AST::Node
|
|
8
|
+
attr_reader :meta
|
|
9
|
+
|
|
10
|
+
def assign_properties(properties)
|
|
11
|
+
if meta = properties[:meta]
|
|
12
|
+
meta = meta.dup if meta.frozen?
|
|
13
|
+
@meta.merge!(meta)
|
|
14
|
+
else
|
|
15
|
+
@meta ||= {}
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
super
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def line
|
|
22
|
+
loc.line if loc
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def column
|
|
26
|
+
loc.column if loc
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
data/lib/opal/builder.rb
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'opal/path_reader'
|
|
2
3
|
require 'opal/builder_processors'
|
|
3
4
|
require 'opal/paths'
|
|
5
|
+
require 'opal/config'
|
|
4
6
|
require 'set'
|
|
5
7
|
|
|
6
8
|
module Opal
|
|
@@ -20,7 +22,7 @@ module Opal
|
|
|
20
22
|
@processors ||= DEFAULT_PROCESSORS
|
|
21
23
|
@path_reader ||= PathReader.new
|
|
22
24
|
@prerequired ||= []
|
|
23
|
-
@compiler_options ||=
|
|
25
|
+
@compiler_options ||= Opal::Config.compiler_options
|
|
24
26
|
@default_processor ||= RubyProcessor
|
|
25
27
|
|
|
26
28
|
@processed = []
|
|
@@ -114,8 +116,17 @@ module Opal
|
|
|
114
116
|
end
|
|
115
117
|
|
|
116
118
|
def read(path)
|
|
117
|
-
path_reader.read(path) or
|
|
118
|
-
|
|
119
|
+
path_reader.read(path) or begin
|
|
120
|
+
message = "can't find file: #{path.inspect} in #{path_reader.paths.inspect}"
|
|
121
|
+
|
|
122
|
+
case compiler_options[:dynamic_require_severity]
|
|
123
|
+
when :raise then raise MissingRequire, message
|
|
124
|
+
when :warning then warn message
|
|
125
|
+
else # noop
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
return "raise LoadError, #{message.inspect}"
|
|
129
|
+
end
|
|
119
130
|
end
|
|
120
131
|
|
|
121
132
|
def process_require(filename, options)
|
data/lib/opal/cli.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'opal'
|
|
2
|
-
require 'rack'
|
|
3
3
|
require 'opal/builder'
|
|
4
4
|
require 'opal/cli_runners'
|
|
5
5
|
|
|
@@ -9,18 +9,6 @@ module Opal
|
|
|
9
9
|
:output, :requires, :gems, :stubs, :verbose, :port, :preload,
|
|
10
10
|
:filename, :debug, :no_exit, :lib_only
|
|
11
11
|
|
|
12
|
-
def compile?
|
|
13
|
-
@compile
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def sexp?
|
|
17
|
-
@sexp
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def skip_opal_require?
|
|
21
|
-
@skip_opal_require
|
|
22
|
-
end
|
|
23
|
-
|
|
24
12
|
class << self
|
|
25
13
|
attr_accessor :stdout
|
|
26
14
|
end
|
|
@@ -29,8 +17,8 @@ module Opal
|
|
|
29
17
|
options ||= {}
|
|
30
18
|
|
|
31
19
|
# Runner
|
|
32
|
-
@runner_type = options.delete(:runner)
|
|
33
|
-
@port
|
|
20
|
+
@runner_type = options.delete(:runner) || :nodejs
|
|
21
|
+
@port = options.delete(:port) || 3000
|
|
34
22
|
|
|
35
23
|
@options = options
|
|
36
24
|
@compile = !!options.delete(:compile)
|
|
@@ -41,7 +29,6 @@ module Opal
|
|
|
41
29
|
@lib_only = options.delete(:lib_only)
|
|
42
30
|
@argv = options.delete(:argv) || []
|
|
43
31
|
@evals = options.delete(:evals) || []
|
|
44
|
-
@requires = options.delete(:requires) || []
|
|
45
32
|
@load_paths = options.delete(:load_paths) || []
|
|
46
33
|
@gems = options.delete(:gems) || []
|
|
47
34
|
@stubs = options.delete(:stubs) || []
|
|
@@ -50,7 +37,10 @@ module Opal
|
|
|
50
37
|
@verbose = options.fetch(:verbose, false); options.delete(:verbose)
|
|
51
38
|
@debug = options.fetch(:debug, false); options.delete(:debug)
|
|
52
39
|
@filename = options.fetch(:filename) { @file && @file.path }; options.delete(:filename)
|
|
53
|
-
|
|
40
|
+
|
|
41
|
+
@requires = options.delete(:requires) || []
|
|
42
|
+
@requires.unshift('opal') unless options.delete(:skip_opal_require)
|
|
43
|
+
|
|
54
44
|
@compiler_options = Hash[
|
|
55
45
|
*compiler_option_names.map do |option|
|
|
56
46
|
key = option.to_sym
|
|
@@ -60,18 +50,23 @@ module Opal
|
|
|
60
50
|
end.compact.flatten
|
|
61
51
|
]
|
|
62
52
|
|
|
53
|
+
raise ArgumentError, "no libraries to compile" if @lib_only and @requires.length == 0
|
|
63
54
|
raise ArgumentError, "no runnable code provided (evals or file)" if @evals.empty? and @file.nil? and not(@lib_only)
|
|
64
55
|
raise ArgumentError, "can't accept evals or file in `library only` mode" if (@evals.any? or @file) and @lib_only
|
|
65
56
|
raise ArgumentError, "unknown options: #{options.inspect}" unless @options.empty?
|
|
66
57
|
end
|
|
67
58
|
|
|
68
59
|
def run
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
60
|
+
return show_sexp if @sexp
|
|
61
|
+
|
|
62
|
+
compiled_source = builder.to_s
|
|
63
|
+
|
|
64
|
+
File.write @map, builder.source_map if @map
|
|
65
|
+
|
|
66
|
+
return puts compiled_source if @compile
|
|
67
|
+
|
|
68
|
+
runner.run(compiled_source, argv)
|
|
69
|
+
@exit_status = runner.exit_status
|
|
75
70
|
end
|
|
76
71
|
|
|
77
72
|
def runner
|
|
@@ -83,65 +78,51 @@ module Opal
|
|
|
83
78
|
end
|
|
84
79
|
end
|
|
85
80
|
|
|
86
|
-
def run_code
|
|
87
|
-
runner.run(compiled_source, argv)
|
|
88
|
-
@exit_status = runner.exit_status
|
|
89
|
-
end
|
|
90
|
-
|
|
91
81
|
attr_reader :exit_status
|
|
92
82
|
|
|
93
|
-
def
|
|
83
|
+
def builder
|
|
84
|
+
@builder ||= create_builder
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def create_builder
|
|
94
88
|
builder = Opal::Builder.new stubs: stubs, compiler_options: compiler_options
|
|
89
|
+
|
|
90
|
+
# --include
|
|
95
91
|
builder.append_paths(*load_paths)
|
|
92
|
+
|
|
93
|
+
# --gem
|
|
96
94
|
gems.each { |gem_name| builder.use_gem gem_name }
|
|
97
95
|
|
|
98
|
-
|
|
96
|
+
# --require
|
|
97
|
+
requires.each { |required| builder.build(required) }
|
|
99
98
|
|
|
99
|
+
# --preload
|
|
100
100
|
preload.each { |path| builder.build_require(path) }
|
|
101
101
|
|
|
102
|
-
#
|
|
102
|
+
# --verbose
|
|
103
103
|
builder.build_str '$VERBOSE = true', '(flags)' if verbose
|
|
104
|
-
builder.build_str '$DEBUG = true', '(flags)' if debug
|
|
105
104
|
|
|
106
|
-
#
|
|
107
|
-
|
|
108
|
-
builder.build(local_require)
|
|
109
|
-
end
|
|
105
|
+
# --debug
|
|
106
|
+
builder.build_str '$DEBUG = true', '(flags)' if debug
|
|
110
107
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
builder.build_str(contents, filename)
|
|
114
|
-
end
|
|
115
|
-
end
|
|
108
|
+
# --eval / stdin / file
|
|
109
|
+
evals_or_file { |source, filename| builder.build_str(source, filename) }
|
|
116
110
|
|
|
111
|
+
# --no-exit
|
|
117
112
|
builder.build_str 'Kernel.exit', '(exit)' unless no_exit
|
|
118
113
|
|
|
119
114
|
builder
|
|
120
115
|
end
|
|
121
116
|
|
|
122
|
-
def compiled_source
|
|
123
|
-
build.to_s
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
def show_compiled_source
|
|
127
|
-
puts compiled_source
|
|
128
|
-
end
|
|
129
|
-
|
|
130
117
|
def show_sexp
|
|
131
118
|
evals_or_file do |contents, filename|
|
|
132
|
-
|
|
119
|
+
buffer = ::Parser::Source::Buffer.new(filename)
|
|
120
|
+
buffer.source = contents
|
|
121
|
+
sexp = Opal::Parser.default_parser.parse(buffer)
|
|
133
122
|
puts sexp.inspect
|
|
134
123
|
end
|
|
135
124
|
end
|
|
136
125
|
|
|
137
|
-
def show_source_map
|
|
138
|
-
evals_or_file do |contents, filename|
|
|
139
|
-
compiler = Opal::Compiler.new(contents, options.merge(file: filename))
|
|
140
|
-
compiler.compile
|
|
141
|
-
puts compiler.source_map.to_json
|
|
142
|
-
end
|
|
143
|
-
end
|
|
144
|
-
|
|
145
126
|
def compiler_option_names
|
|
146
127
|
%w[
|
|
147
128
|
method_missing
|
|
@@ -150,12 +131,17 @@ module Opal
|
|
|
150
131
|
source_map_enabled
|
|
151
132
|
irb_enabled
|
|
152
133
|
inline_operators
|
|
134
|
+
enable_source_location
|
|
135
|
+
parse_comments
|
|
153
136
|
]
|
|
154
137
|
end
|
|
155
138
|
|
|
156
|
-
# Internal:
|
|
139
|
+
# Internal: Yields a string of source code and the proper filename for either
|
|
157
140
|
# evals, stdin or a filepath.
|
|
158
141
|
def evals_or_file
|
|
142
|
+
# --library
|
|
143
|
+
return if lib_only
|
|
144
|
+
|
|
159
145
|
if evals.any?
|
|
160
146
|
yield evals.join("\n"), '-e'
|
|
161
147
|
else
|