opal-cj 0.7.0.beta1
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 +7 -0
- data/.gitignore +10 -0
- data/.gitmodules +27 -0
- data/.rspec +3 -0
- data/.spectator +2 -0
- data/.spectator-mspec +3 -0
- data/.travis.yml +45 -0
- data/CHANGELOG.md +406 -0
- data/CONTRIBUTING.md +41 -0
- data/Gemfile +27 -0
- data/Guardfile +77 -0
- data/LICENSE +19 -0
- data/README.md +178 -0
- data/Rakefile +116 -0
- data/benchmarks/operators.rb +11 -0
- data/bin/opal +22 -0
- data/bin/opal-build +77 -0
- data/bin/opal-mspec +10 -0
- data/bin/opal-repl +72 -0
- data/config.ru +14 -0
- data/examples/rack/Gemfile +3 -0
- data/examples/rack/app/application.rb +13 -0
- data/examples/rack/app/user.rb +21 -0
- data/examples/rack/config.ru +7 -0
- data/examples/rack/index.html.erb +10 -0
- data/examples/sinatra/Gemfile +4 -0
- data/examples/sinatra/app/application.rb +7 -0
- data/examples/sinatra/config.ru +28 -0
- data/lib/mspec/opal/main.rb.erb +9 -0
- data/lib/mspec/opal/rake_task.rb +278 -0
- data/lib/mspec/opal/runner.rb +206 -0
- data/lib/mspec/opal/sprockets.js +57 -0
- data/lib/opal.rb +11 -0
- data/lib/opal/builder.rb +135 -0
- data/lib/opal/builder_processors.rb +165 -0
- data/lib/opal/cli.rb +145 -0
- data/lib/opal/cli_options.rb +149 -0
- data/lib/opal/cli_runners.rb +10 -0
- data/lib/opal/cli_runners/nodejs.rb +56 -0
- data/lib/opal/cli_runners/phantom.js +35 -0
- data/lib/opal/cli_runners/phantomjs.rb +28 -0
- data/lib/opal/cli_runners/server.rb +54 -0
- data/lib/opal/compiler.rb +307 -0
- data/lib/opal/erb.rb +64 -0
- data/lib/opal/fragment.rb +41 -0
- data/lib/opal/hike_path_finder.rb +18 -0
- data/lib/opal/nodes.rb +26 -0
- data/lib/opal/nodes/arglist.rb +56 -0
- data/lib/opal/nodes/array.rb +54 -0
- data/lib/opal/nodes/base.rb +151 -0
- data/lib/opal/nodes/call.rb +283 -0
- data/lib/opal/nodes/call_special.rb +178 -0
- data/lib/opal/nodes/case.rb +96 -0
- data/lib/opal/nodes/class.rb +42 -0
- data/lib/opal/nodes/constants.rb +78 -0
- data/lib/opal/nodes/def.rb +157 -0
- data/lib/opal/nodes/defined.rb +113 -0
- data/lib/opal/nodes/definitions.rb +168 -0
- data/lib/opal/nodes/for.rb +35 -0
- data/lib/opal/nodes/hash.rb +67 -0
- data/lib/opal/nodes/helpers.rb +114 -0
- data/lib/opal/nodes/if.rb +67 -0
- data/lib/opal/nodes/iter.rb +131 -0
- data/lib/opal/nodes/literal.rb +230 -0
- data/lib/opal/nodes/logic.rb +217 -0
- data/lib/opal/nodes/masgn.rb +62 -0
- data/lib/opal/nodes/module.rb +46 -0
- data/lib/opal/nodes/rescue.rb +135 -0
- data/lib/opal/nodes/runtime_helpers.rb +45 -0
- data/lib/opal/nodes/scope.rb +293 -0
- data/lib/opal/nodes/singleton_class.rb +25 -0
- data/lib/opal/nodes/super.rb +97 -0
- data/lib/opal/nodes/top.rb +101 -0
- data/lib/opal/nodes/variables.rb +158 -0
- data/lib/opal/nodes/while.rb +65 -0
- data/lib/opal/nodes/yield.rb +95 -0
- data/lib/opal/parser.rb +658 -0
- data/lib/opal/parser/grammar.rb +5452 -0
- data/lib/opal/parser/grammar.y +1684 -0
- data/lib/opal/parser/keywords.rb +66 -0
- data/lib/opal/parser/lexer.rb +1208 -0
- data/lib/opal/parser/parser_scope.rb +25 -0
- data/lib/opal/parser/sexp.rb +75 -0
- data/lib/opal/path_reader.rb +28 -0
- data/lib/opal/paths.rb +38 -0
- data/lib/opal/source_map.rb +70 -0
- data/lib/opal/sprockets.rb +4 -0
- data/lib/opal/sprockets/cache_key_fix.rb +17 -0
- data/lib/opal/sprockets/environment.rb +37 -0
- data/lib/opal/sprockets/erb.rb +37 -0
- data/lib/opal/sprockets/path_reader.rb +34 -0
- data/lib/opal/sprockets/processor.rb +124 -0
- data/lib/opal/sprockets/server.rb +180 -0
- data/lib/opal/util.rb +64 -0
- data/lib/opal/version.rb +3 -0
- data/opal.gemspec +36 -0
- data/opal/README.md +6 -0
- data/opal/corelib/array.rb +1556 -0
- data/opal/corelib/array/inheritance.rb +113 -0
- data/opal/corelib/basic_object.rb +73 -0
- data/opal/corelib/boolean.rb +41 -0
- data/opal/corelib/class.rb +55 -0
- data/opal/corelib/comparable.rb +56 -0
- data/opal/corelib/complex.rb +3 -0
- data/opal/corelib/dir.rb +20 -0
- data/opal/corelib/enumerable.rb +1132 -0
- data/opal/corelib/enumerator.rb +422 -0
- data/opal/corelib/error.rb +63 -0
- data/opal/corelib/file.rb +56 -0
- data/opal/corelib/hash.rb +728 -0
- data/opal/corelib/helpers.rb +102 -0
- data/opal/corelib/io.rb +59 -0
- data/opal/corelib/kernel.rb +569 -0
- data/opal/corelib/main.rb +7 -0
- data/opal/corelib/match_data.rb +114 -0
- data/opal/corelib/method.rb +58 -0
- data/opal/corelib/module.rb +462 -0
- data/opal/corelib/nil_class.rb +62 -0
- data/opal/corelib/numeric.rb +532 -0
- data/opal/corelib/proc.rb +52 -0
- data/opal/corelib/range.rb +116 -0
- data/opal/corelib/rational.rb +3 -0
- data/opal/corelib/regexp.rb +133 -0
- data/opal/corelib/runtime.js +1240 -0
- data/opal/corelib/string.rb +1212 -0
- data/opal/corelib/string/inheritance.rb +78 -0
- data/opal/corelib/struct.rb +141 -0
- data/opal/corelib/time.rb +584 -0
- data/opal/corelib/variables.rb +24 -0
- data/opal/opal.rb +32 -0
- data/package.json +9 -0
- data/spec/filters/bugs/array.rb +232 -0
- data/spec/filters/bugs/basic_object.rb +14 -0
- data/spec/filters/bugs/class.rb +21 -0
- data/spec/filters/bugs/enumerable.rb +69 -0
- data/spec/filters/bugs/enumerator.rb +3 -0
- data/spec/filters/bugs/hash.rb +128 -0
- data/spec/filters/bugs/kernel.rb +10 -0
- data/spec/filters/bugs/language.rb +415 -0
- data/spec/filters/bugs/math.rb +95 -0
- data/spec/filters/bugs/module.rb +14 -0
- data/spec/filters/bugs/nil.rb +7 -0
- data/spec/filters/bugs/numeric.rb +20 -0
- data/spec/filters/bugs/opal.rb +14 -0
- data/spec/filters/bugs/regexp.rb +11 -0
- data/spec/filters/bugs/set.rb +7 -0
- data/spec/filters/bugs/singleton.rb +6 -0
- data/spec/filters/bugs/string.rb +360 -0
- data/spec/filters/bugs/stringscanner.rb +22 -0
- data/spec/filters/bugs/struct.rb +45 -0
- data/spec/filters/bugs/time.rb +177 -0
- data/spec/filters/bugs/unknown.rb +11 -0
- data/spec/filters/unsupported/encoding.rb +95 -0
- data/spec/filters/unsupported/enumerator.rb +14 -0
- data/spec/filters/unsupported/float.rb +5 -0
- data/spec/filters/unsupported/frozen.rb +90 -0
- data/spec/filters/unsupported/hash_compare_by_identity.rb +16 -0
- data/spec/filters/unsupported/integer_size.rb +7 -0
- data/spec/filters/unsupported/method_added.rb +10 -0
- data/spec/filters/unsupported/mutable_strings.rb +361 -0
- data/spec/filters/unsupported/private_constants.rb +30 -0
- data/spec/filters/unsupported/private_methods.rb +44 -0
- data/spec/filters/unsupported/random.rb +4 -0
- data/spec/filters/unsupported/ruby_exe.rb +5 -0
- data/spec/filters/unsupported/tainted.rb +155 -0
- data/spec/filters/unsupported/time.rb +21 -0
- data/spec/filters/unsupported/trusted.rb +80 -0
- data/spec/lib/builder_processors_spec.rb +27 -0
- data/spec/lib/builder_spec.rb +66 -0
- data/spec/lib/cli_spec.rb +134 -0
- data/spec/lib/compiler_spec.rb +197 -0
- data/spec/lib/dependency_resolver_spec.rb +40 -0
- data/spec/lib/fixtures/no_requires.rb +1 -0
- data/spec/lib/fixtures/opal_file.rb +2 -0
- data/spec/lib/fixtures/require_tree_test.rb +3 -0
- data/spec/lib/fixtures/required_tree_test/required_file1.rb +1 -0
- data/spec/lib/fixtures/required_tree_test/required_file2.rb +1 -0
- data/spec/lib/fixtures/requires.rb +7 -0
- data/spec/lib/fixtures/sprockets_file.js.rb +3 -0
- data/spec/lib/fixtures/sprockets_require_tree_test.rb +3 -0
- data/spec/lib/hike_path_finder_spec.rb +23 -0
- data/spec/lib/lexer_spec.rb +110 -0
- data/spec/lib/parser/alias_spec.rb +26 -0
- data/spec/lib/parser/and_spec.rb +13 -0
- data/spec/lib/parser/attrasgn_spec.rb +28 -0
- data/spec/lib/parser/begin_spec.rb +42 -0
- data/spec/lib/parser/block_spec.rb +12 -0
- data/spec/lib/parser/break_spec.rb +17 -0
- data/spec/lib/parser/call_spec.rb +139 -0
- data/spec/lib/parser/class_spec.rb +35 -0
- data/spec/lib/parser/comments_spec.rb +11 -0
- data/spec/lib/parser/def_spec.rb +61 -0
- data/spec/lib/parser/if_spec.rb +26 -0
- data/spec/lib/parser/iter_spec.rb +59 -0
- data/spec/lib/parser/lambda_spec.rb +64 -0
- data/spec/lib/parser/literal_spec.rb +118 -0
- data/spec/lib/parser/masgn_spec.rb +37 -0
- data/spec/lib/parser/module_spec.rb +27 -0
- data/spec/lib/parser/not_spec.rb +27 -0
- data/spec/lib/parser/op_asgn1_spec.rb +23 -0
- data/spec/lib/parser/op_asgn2_spec.rb +23 -0
- data/spec/lib/parser/or_spec.rb +13 -0
- data/spec/lib/parser/return_spec.rb +17 -0
- data/spec/lib/parser/sclass_spec.rb +21 -0
- data/spec/lib/parser/string_spec.rb +276 -0
- data/spec/lib/parser/super_spec.rb +20 -0
- data/spec/lib/parser/unary_spec.rb +48 -0
- data/spec/lib/parser/undef_spec.rb +15 -0
- data/spec/lib/parser/unless_spec.rb +13 -0
- data/spec/lib/parser/variables_spec.rb +92 -0
- data/spec/lib/parser/while_spec.rb +15 -0
- data/spec/lib/parser/yield_spec.rb +20 -0
- data/spec/lib/path_reader_spec.rb +24 -0
- data/spec/lib/shared/path_finder_shared.rb +19 -0
- data/spec/lib/shared/path_reader_shared.rb +31 -0
- data/spec/lib/spec_helper.rb +9 -0
- data/spec/lib/sprockets/environment_spec.rb +30 -0
- data/spec/lib/sprockets/erb_spec.rb +25 -0
- data/spec/lib/sprockets/path_reader_spec.rb +25 -0
- data/spec/lib/sprockets/processor_spec.rb +35 -0
- data/spec/lib/sprockets/server_spec.rb +20 -0
- data/spec/opal/compiler/irb_spec.rb +44 -0
- data/spec/opal/core/array/select_spec.rb +14 -0
- data/spec/opal/core/array/set_range_to_array_spec.rb +7 -0
- data/spec/opal/core/date_spec.rb +122 -0
- data/spec/opal/core/enumerable/all_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/any_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/collect_break_spec.rb +13 -0
- data/spec/opal/core/enumerable/count_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/detect_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/drop_while_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/each_slice_break.rb +6 -0
- data/spec/opal/core/enumerable/each_with_index_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/each_with_object_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/find_all_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/find_index_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/grep_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/max_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/max_by_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/min_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/min_by_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/none_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/one_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/reduce_break_spec.rb +5 -0
- data/spec/opal/core/enumerable/take_while_break_spec.rb +5 -0
- data/spec/opal/core/fixtures/class.rb +124 -0
- data/spec/opal/core/fixtures/class_variables.rb +0 -0
- data/spec/opal/core/fixtures/constants.rb +33 -0
- data/spec/opal/core/fixtures/require_tree_files/file 1.rb +1 -0
- data/spec/opal/core/fixtures/require_tree_files/file 2.rb +1 -0
- data/spec/opal/core/fixtures/require_tree_files/file 3.rb +1 -0
- data/spec/opal/core/fixtures/require_tree_files/file 4.rb +1 -0
- data/spec/opal/core/fixtures/require_tree_files/file 5.rb +1 -0
- data/spec/opal/core/kernel/Array_spec.rb +10 -0
- data/spec/opal/core/kernel/block_given_spec.rb +30 -0
- data/spec/opal/core/kernel/class_spec.rb +6 -0
- data/spec/opal/core/kernel/define_singleton_method_spec.rb +21 -0
- data/spec/opal/core/kernel/equal_value_spec.rb +12 -0
- data/spec/opal/core/kernel/extend_spec.rb +21 -0
- data/spec/opal/core/kernel/format_spec.rb +122 -0
- data/spec/opal/core/kernel/freeze_spec.rb +15 -0
- data/spec/opal/core/kernel/instance_eval_spec.rb +28 -0
- data/spec/opal/core/kernel/instance_variable_defined_spec.rb +15 -0
- data/spec/opal/core/kernel/instance_variable_get_spec.rb +14 -0
- data/spec/opal/core/kernel/instance_variable_set_spec.rb +10 -0
- data/spec/opal/core/kernel/loop_spec.rb +23 -0
- data/spec/opal/core/kernel/match_spec.rb +5 -0
- data/spec/opal/core/kernel/method_spec.rb +31 -0
- data/spec/opal/core/kernel/methods_spec.rb +25 -0
- data/spec/opal/core/kernel/nil_spec.rb +7 -0
- data/spec/opal/core/kernel/p_spec.rb +15 -0
- data/spec/opal/core/kernel/printf_spec.rb +11 -0
- data/spec/opal/core/kernel/proc_spec.rb +13 -0
- data/spec/opal/core/kernel/rand_spec.rb +23 -0
- data/spec/opal/core/kernel/require_tree_spec.rb +7 -0
- data/spec/opal/core/kernel/respond_to_spec.rb +41 -0
- data/spec/opal/core/kernel/send_spec.rb +56 -0
- data/spec/opal/core/kernel/sprintf_spec.rb +5 -0
- data/spec/opal/core/language/block_spec.rb +538 -0
- data/spec/opal/core/language/fixtures/array.rb +11 -0
- data/spec/opal/core/language/fixtures/block.rb +57 -0
- data/spec/opal/core/language/fixtures/break.rb +240 -0
- data/spec/opal/core/language/fixtures/ensure.rb +72 -0
- data/spec/opal/core/language/fixtures/literal_lambda.rb +7 -0
- data/spec/opal/core/language/fixtures/metaclass.rb +33 -0
- data/spec/opal/core/language/fixtures/module.rb +24 -0
- data/spec/opal/core/language/fixtures/next.rb +128 -0
- data/spec/opal/core/language/fixtures/return.rb +118 -0
- data/spec/opal/core/language/fixtures/send.rb +110 -0
- data/spec/opal/core/language/fixtures/send_1.9.rb +22 -0
- data/spec/opal/core/language/fixtures/super.rb +308 -0
- data/spec/opal/core/language/fixtures/variables.rb +58 -0
- data/spec/opal/core/language/fixtures/yield.rb +28 -0
- data/spec/opal/core/language/predefined_spec.rb +85 -0
- data/spec/opal/core/language/proc_spec.rb +263 -0
- data/spec/opal/core/language/regexp_spec.rb +20 -0
- data/spec/opal/core/language/send_spec.rb +225 -0
- data/spec/opal/core/language/string_spec.rb +44 -0
- data/spec/opal/core/language/symbol_spec.rb +40 -0
- data/spec/opal/core/language/variables_spec.rb +1366 -0
- data/spec/opal/core/language/versions/array_1.9.rb +39 -0
- data/spec/opal/core/language/versions/block_1.9.rb +0 -0
- data/spec/opal/core/language/versions/break_1.9.rb +0 -0
- data/spec/opal/core/language/versions/case_1.9.rb +20 -0
- data/spec/opal/core/language/versions/hash_1.9.rb +18 -0
- data/spec/opal/core/language/versions/literal_lambda_1.9.rb +143 -0
- data/spec/opal/core/language/versions/not_1.9.rb +22 -0
- data/spec/opal/core/language/versions/send_1.9.rb +241 -0
- data/spec/opal/core/language/versions/symbol_1.9.rb +15 -0
- data/spec/opal/core/language/versions/variables_1.9.rb +8 -0
- data/spec/opal/core/module/alias_method_spec.rb +28 -0
- data/spec/opal/core/module/ancestors_spec.rb +11 -0
- data/spec/opal/core/module/append_features_spec.rb +14 -0
- data/spec/opal/core/module/attr_accessor_spec.rb +26 -0
- data/spec/opal/core/module/const_defined_spec.rb +85 -0
- data/spec/opal/core/module/const_get_spec.rb +85 -0
- data/spec/opal/core/module/const_missing_spec.rb +17 -0
- data/spec/opal/core/module/const_set_spec.rb +64 -0
- data/spec/opal/core/module/constants_spec.rb +49 -0
- data/spec/opal/core/module/fixtures/classes.rb +434 -0
- data/spec/opal/core/module/method_defined_spec.rb +48 -0
- data/spec/opal/core/module/module_function_spec.rb +25 -0
- data/spec/opal/core/module/name_spec.rb +52 -0
- data/spec/opal/core/module/public_method_defined_spec.rb +18 -0
- data/spec/opal/core/module/remove_const_spec.rb +22 -0
- data/spec/opal/core/module/undef_method_spec.rb +66 -0
- data/spec/opal/core/numeric/bit_and_spec.rb +7 -0
- data/spec/opal/core/numeric/bit_or_spec.rb +8 -0
- data/spec/opal/core/numeric/bit_xor_spec.rb +6 -0
- data/spec/opal/core/numeric/ceil_spec.rb +8 -0
- data/spec/opal/core/numeric/chr_spec.rb +8 -0
- data/spec/opal/core/numeric/comparison_spec.rb +24 -0
- data/spec/opal/core/numeric/complement_spec.rb +8 -0
- data/spec/opal/core/numeric/divide_spec.rb +10 -0
- data/spec/opal/core/numeric/eql_spec.rb +9 -0
- data/spec/opal/core/numeric/exponent_spec.rb +33 -0
- data/spec/opal/core/numeric/floor_spec.rb +8 -0
- data/spec/opal/core/numeric/gt_spec.rb +11 -0
- data/spec/opal/core/numeric/gte_spec.rb +12 -0
- data/spec/opal/core/numeric/integer_spec.rb +9 -0
- data/spec/opal/core/numeric/left_shift_spec.rb +21 -0
- data/spec/opal/core/numeric/lt_spec.rb +11 -0
- data/spec/opal/core/numeric/lte_spec.rb +12 -0
- data/spec/opal/core/numeric/minus_spec.rb +8 -0
- data/spec/opal/core/numeric/modulo_spec.rb +19 -0
- data/spec/opal/core/numeric/multiply_spec.rb +9 -0
- data/spec/opal/core/numeric/next_spec.rb +9 -0
- data/spec/opal/core/numeric/ord_spec.rb +9 -0
- data/spec/opal/core/numeric/plus_spec.rb +8 -0
- data/spec/opal/core/numeric/pred_spec.rb +7 -0
- data/spec/opal/core/numeric/right_shift_spec.rb +25 -0
- data/spec/opal/core/numeric/step_spec.rb +11 -0
- data/spec/opal/core/numeric/succ_spec.rb +9 -0
- data/spec/opal/core/numeric/times_spec.rb +36 -0
- data/spec/opal/core/numeric/to_f_spec.rb +7 -0
- data/spec/opal/core/numeric/to_i_spec.rb +7 -0
- data/spec/opal/core/numeric/to_json_spec.rb +8 -0
- data/spec/opal/core/numeric/to_s_spec.rb +26 -0
- data/spec/opal/core/numeric/uminus_spec.rb +9 -0
- data/spec/opal/core/numeric/upto_spec.rb +19 -0
- data/spec/opal/core/numeric/zero_spec.rb +7 -0
- data/spec/opal/core/proc/call_spec.rb +21 -0
- data/spec/opal/core/proc/element_reference_spec.rb +21 -0
- data/spec/opal/core/proc/proc_tricks_spec.rb +7 -0
- data/spec/opal/core/runtime/begin_spec.rb +39 -0
- data/spec/opal/core/runtime/block_send_spec.rb +28 -0
- data/spec/opal/core/runtime/block_spec.rb +23 -0
- data/spec/opal/core/runtime/bridged_classes_spec.rb +64 -0
- data/spec/opal/core/runtime/constants_spec.rb +13 -0
- data/spec/opal/core/runtime/eval_spec.rb +5 -0
- data/spec/opal/core/runtime/main_methods_spec.rb +27 -0
- data/spec/opal/core/runtime/method_missing_spec.rb +62 -0
- data/spec/opal/core/runtime/method_spec.rb +31 -0
- data/spec/opal/core/runtime/operator_call_spec.rb +13 -0
- data/spec/opal/core/runtime/paren_spec.rb +14 -0
- data/spec/opal/core/runtime/rescue_spec.rb +38 -0
- data/spec/opal/core/runtime/return_spec.rb +38 -0
- data/spec/opal/core/runtime/send_spec.rb +34 -0
- data/spec/opal/core/runtime/singleton_class_spec.rb +13 -0
- data/spec/opal/core/runtime/super_spec.rb +212 -0
- data/spec/opal/core/runtime/truthy_spec.rb +23 -0
- data/spec/opal/core/runtime/variables_spec.rb +20 -0
- data/spec/opal/core/source_map_spec.rb +15 -0
- data/spec/opal/core/string_spec.rb +11 -0
- data/spec/opal/stdlib/erb/erb_spec.rb +30 -0
- data/spec/opal/stdlib/erb/inline_block.opalerb +3 -0
- data/spec/opal/stdlib/erb/quoted.opalerb +1 -0
- data/spec/opal/stdlib/erb/simple.opalerb +1 -0
- data/spec/opal/stdlib/json/ext_spec.rb +48 -0
- data/spec/opal/stdlib/json/parse_spec.rb +33 -0
- data/spec/opal/stdlib/native/alias_native_spec.rb +27 -0
- data/spec/opal/stdlib/native/each_spec.rb +13 -0
- data/spec/opal/stdlib/native/element_reference_spec.rb +16 -0
- data/spec/opal/stdlib/native/exposure_spec.rb +33 -0
- data/spec/opal/stdlib/native/ext_spec.rb +19 -0
- data/spec/opal/stdlib/native/initialize_spec.rb +17 -0
- data/spec/opal/stdlib/native/method_missing_spec.rb +51 -0
- data/spec/opal/stdlib/native/native_reader_spec.rb +22 -0
- data/spec/opal/stdlib/native/native_writer_spec.rb +30 -0
- data/spec/opal/stdlib/native/new_spec.rb +8 -0
- data/spec/opal/stdlib/promise/error_spec.rb +15 -0
- data/spec/opal/stdlib/promise/rescue_spec.rb +35 -0
- data/spec/opal/stdlib/promise/then_spec.rb +54 -0
- data/spec/opal/stdlib/promise/trace_spec.rb +35 -0
- data/spec/opal/stdlib/promise/value_spec.rb +15 -0
- data/spec/opal/stdlib/promise/when_spec.rb +34 -0
- data/spec/opal/stdlib/template/paths_spec.rb +10 -0
- data/spec/opal/stdlib/thread/mutex_spec.rb +40 -0
- data/spec/opal/stdlib/thread/thread_queue_spec.rb +32 -0
- data/spec/opal/stdlib/thread/thread_spec.rb +60 -0
- data/spec/rubyspecs +329 -0
- data/spec/spec_helper.rb +42 -0
- data/spec/support/mspec_rspec_adapter.rb +33 -0
- data/spec/support/parser_helpers.rb +37 -0
- data/stdlib/README.md +3 -0
- data/stdlib/base64.rb +152 -0
- data/stdlib/benchmark.rb +10 -0
- data/stdlib/buffer.rb +40 -0
- data/stdlib/buffer/array.rb +66 -0
- data/stdlib/buffer/view.rb +70 -0
- data/stdlib/date.rb +170 -0
- data/stdlib/delegate.rb +29 -0
- data/stdlib/dir.rb +1 -0
- data/stdlib/encoding.rb +166 -0
- data/stdlib/enumerator.rb +1 -0
- data/stdlib/erb.rb +16 -0
- data/stdlib/file.rb +1 -0
- data/stdlib/forwardable.rb +71 -0
- data/stdlib/json.rb +182 -0
- data/stdlib/math.rb +370 -0
- data/stdlib/native.rb +530 -0
- data/stdlib/nodejs.rb +5 -0
- data/stdlib/nodejs/dir.rb +13 -0
- data/stdlib/nodejs/file.rb +98 -0
- data/stdlib/nodejs/fileutils.rb +26 -0
- data/stdlib/nodejs/io.rb +2 -0
- data/stdlib/nodejs/irb.rb +45 -0
- data/stdlib/nodejs/process.rb +16 -0
- data/stdlib/nodejs/require.rb +32 -0
- data/stdlib/nodejs/rubygems.rb +68 -0
- data/stdlib/nodejs/runtime.rb +25 -0
- data/stdlib/nodejs/yaml.rb +11 -0
- data/stdlib/observer.rb +202 -0
- data/stdlib/opal-parser.rb +53 -0
- data/stdlib/opal-source-maps.rb +2 -0
- data/stdlib/ostruct.rb +69 -0
- data/stdlib/pathname.rb +31 -0
- data/stdlib/phantomjs.rb +8 -0
- data/stdlib/pp.rb +12 -0
- data/stdlib/process.rb +10 -0
- data/stdlib/promise.rb +300 -0
- data/stdlib/racc/parser.rb +215 -0
- data/stdlib/rbconfig.rb +20 -0
- data/stdlib/securerandom.rb +12 -0
- data/stdlib/set.rb +116 -0
- data/stdlib/singleton.rb +40 -0
- data/stdlib/source_map.rb +5 -0
- data/stdlib/source_map/map.rb +220 -0
- data/stdlib/source_map/mapping.rb +26 -0
- data/stdlib/source_map/offset.rb +88 -0
- data/stdlib/source_map/version.rb +3 -0
- data/stdlib/source_map/vlq.rb +98 -0
- data/stdlib/sourcemap.rb +1 -0
- data/stdlib/stringio.rb +181 -0
- data/stdlib/strscan.rb +155 -0
- data/stdlib/template.rb +46 -0
- data/stdlib/thread.rb +160 -0
- data/stdlib/time.rb +9 -0
- data/tasks/github.rake +19 -0
- metadata +690 -0
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
require 'set'
|
|
2
|
+
require 'opal/parser'
|
|
3
|
+
require 'opal/fragment'
|
|
4
|
+
require 'opal/nodes'
|
|
5
|
+
|
|
6
|
+
module Opal
|
|
7
|
+
def self.compile(source, options = {})
|
|
8
|
+
Compiler.new(source, options).compile
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class Compiler
|
|
12
|
+
# Generated code gets indented with two spaces on each scope
|
|
13
|
+
INDENT = ' '
|
|
14
|
+
|
|
15
|
+
# All compare method nodes - used to optimize performance of
|
|
16
|
+
# math comparisons
|
|
17
|
+
COMPARE = %w[< > <= >=]
|
|
18
|
+
|
|
19
|
+
# defines a compiler option, also creating method of form 'name?'
|
|
20
|
+
def self.compiler_option(name, default_value, options = {})
|
|
21
|
+
mid = options[:as]
|
|
22
|
+
valid_values = options[:valid_values]
|
|
23
|
+
define_method(mid || name) do
|
|
24
|
+
value = @options.fetch(name) { default_value }
|
|
25
|
+
raise ArgumentError if valid_values and not(valid_values.include?(value))
|
|
26
|
+
value
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# used for __FILE__ directives as well as finding relative require()
|
|
31
|
+
compiler_option :file, '(file)'
|
|
32
|
+
|
|
33
|
+
# adds method stubs for all used methods in file
|
|
34
|
+
compiler_option :method_missing, true, :as => :method_missing?
|
|
35
|
+
|
|
36
|
+
# adds an arity check to every method definition
|
|
37
|
+
compiler_option :arity_check, false, :as => :arity_check?
|
|
38
|
+
|
|
39
|
+
# compile top level local vars with support for irb style vars
|
|
40
|
+
compiler_option :irb, false, :as => :irb?
|
|
41
|
+
|
|
42
|
+
# how to handle dynamic requires (:error, :warning, :ignore)
|
|
43
|
+
compiler_option :dynamic_require_severity, :error, :valid_values => [:error, :warning, :ignore]
|
|
44
|
+
|
|
45
|
+
# Prepare the code for future requires
|
|
46
|
+
compiler_option :requirable, false, :as => :requirable?
|
|
47
|
+
|
|
48
|
+
# are operators compiled inline
|
|
49
|
+
compiler_option :inline_operators, false, :as => :inline_operators?
|
|
50
|
+
|
|
51
|
+
attr_reader :result, :fragments
|
|
52
|
+
|
|
53
|
+
# Current scope
|
|
54
|
+
attr_accessor :scope
|
|
55
|
+
|
|
56
|
+
# Current case_stmt
|
|
57
|
+
attr_reader :case_stmt
|
|
58
|
+
|
|
59
|
+
# Any content in __END__ special construct
|
|
60
|
+
attr_reader :eof_content
|
|
61
|
+
|
|
62
|
+
def initialize(source, options = {})
|
|
63
|
+
@source = source
|
|
64
|
+
@indent = ''
|
|
65
|
+
@unique = 0
|
|
66
|
+
@options = options
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Compile some ruby code to a string.
|
|
70
|
+
def compile
|
|
71
|
+
@parser = Parser.new
|
|
72
|
+
|
|
73
|
+
@sexp = s(:top, @parser.parse(@source, self.file) || s(:nil))
|
|
74
|
+
@eof_content = @parser.lexer.eof_content
|
|
75
|
+
|
|
76
|
+
@fragments = process(@sexp).flatten
|
|
77
|
+
|
|
78
|
+
@result = @fragments.map(&:code).join('')
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def source_map(source_file = nil)
|
|
82
|
+
Opal::SourceMap.new(@fragments, source_file || self.file)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Any helpers required by this file
|
|
86
|
+
def helpers
|
|
87
|
+
@helpers ||= Set.new([:breaker, :slice])
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# Operator helpers
|
|
91
|
+
def operator_helpers
|
|
92
|
+
@operator_helpers ||= Set.new
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# Method calls made in this file
|
|
96
|
+
def method_calls
|
|
97
|
+
@method_calls ||= Set.new
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# This is called when a parsing/processing error occurs. This
|
|
101
|
+
# method simply appends the filename and curent line number onto
|
|
102
|
+
# the message and raises it.
|
|
103
|
+
def error(msg, line = nil)
|
|
104
|
+
raise SyntaxError, "#{msg} :#{file}:#{line}"
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# This is called when a parsing/processing warning occurs. This
|
|
108
|
+
# method simply appends the filename and curent line number onto
|
|
109
|
+
# the message and issues a warning.
|
|
110
|
+
def warning(msg, line = nil)
|
|
111
|
+
warn "WARNING: #{msg} :#{file}:#{line}"
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# Instances of `Scope` can use this to determine the current
|
|
115
|
+
# scope indent. The indent is used to keep generated code easily
|
|
116
|
+
# readable.
|
|
117
|
+
def parser_indent
|
|
118
|
+
@indent
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# Create a new sexp using the given parts. Even though this just
|
|
122
|
+
# returns an array, it must be used incase the internal structure
|
|
123
|
+
# of sexps does change.
|
|
124
|
+
def s(*parts)
|
|
125
|
+
Sexp.new(parts)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def fragment(str, sexp = nil)
|
|
129
|
+
Fragment.new(str, sexp)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# Used to generate a unique id name per file. These are used
|
|
133
|
+
# mainly to name method bodies for methods that use blocks.
|
|
134
|
+
def unique_temp
|
|
135
|
+
"TMP_#{@unique += 1}"
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Use the given helper
|
|
139
|
+
def helper(name)
|
|
140
|
+
self.helpers << name
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# To keep code blocks nicely indented, this will yield a block after
|
|
144
|
+
# adding an extra layer of indent, and then returning the resulting
|
|
145
|
+
# code after reverting the indent.
|
|
146
|
+
def indent(&block)
|
|
147
|
+
indent = @indent
|
|
148
|
+
@indent += INDENT
|
|
149
|
+
@space = "\n#@indent"
|
|
150
|
+
res = yield
|
|
151
|
+
@indent = indent
|
|
152
|
+
@space = "\n#@indent"
|
|
153
|
+
res
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# Temporary varibales will be needed from time to time in the
|
|
157
|
+
# generated code, and this method will assign (or reuse) on
|
|
158
|
+
# while the block is yielding, and queue it back up once it is
|
|
159
|
+
# finished. Variables are queued once finished with to save the
|
|
160
|
+
# numbers of variables needed at runtime.
|
|
161
|
+
def with_temp(&block)
|
|
162
|
+
tmp = @scope.new_temp
|
|
163
|
+
res = yield tmp
|
|
164
|
+
@scope.queue_temp tmp
|
|
165
|
+
res
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
# Used when we enter a while statement. This pushes onto the current
|
|
169
|
+
# scope's while stack so we know how to handle break, next etc.
|
|
170
|
+
def in_while
|
|
171
|
+
return unless block_given?
|
|
172
|
+
@while_loop = @scope.push_while
|
|
173
|
+
result = yield
|
|
174
|
+
@scope.pop_while
|
|
175
|
+
|
|
176
|
+
result
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
def in_case
|
|
180
|
+
return unless block_given?
|
|
181
|
+
old = @case_stmt
|
|
182
|
+
@case_stmt = {}
|
|
183
|
+
yield
|
|
184
|
+
@case_stmt = old
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
# Returns true if the parser is curently handling a while sexp,
|
|
188
|
+
# false otherwise.
|
|
189
|
+
def in_while?
|
|
190
|
+
@scope.in_while?
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
# Process the given sexp by creating a node instance, based on its type,
|
|
194
|
+
# and compiling it to fragments.
|
|
195
|
+
def process(sexp, level = :expr)
|
|
196
|
+
return fragment('') if sexp == nil
|
|
197
|
+
|
|
198
|
+
if handler = handlers[sexp.type]
|
|
199
|
+
return handler.new(sexp, level, self).compile_to_fragments
|
|
200
|
+
else
|
|
201
|
+
raise "Unsupported sexp: #{sexp.type}"
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
def handlers
|
|
206
|
+
@handlers ||= Opal::Nodes::Base.handlers
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
# An array of requires used in this file
|
|
210
|
+
def requires
|
|
211
|
+
@requires ||= []
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
# An array of trees required in this file
|
|
215
|
+
# (typically by calling #require_tree)
|
|
216
|
+
def required_trees
|
|
217
|
+
@required_trees ||= []
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
# The last sexps in method bodies, for example, need to be returned
|
|
221
|
+
# in the compiled javascript. Due to syntax differences between
|
|
222
|
+
# javascript any ruby, some sexps need to be handled specially. For
|
|
223
|
+
# example, `if` statemented cannot be returned in javascript, so
|
|
224
|
+
# instead the "truthy" and "falsy" parts of the if statement both
|
|
225
|
+
# need to be returned instead.
|
|
226
|
+
#
|
|
227
|
+
# Sexps that need to be returned are passed to this method, and the
|
|
228
|
+
# alterned/new sexps are returned and should be used instead. Most
|
|
229
|
+
# sexps can just be added into a s(:return) sexp, so that is the
|
|
230
|
+
# default action if no special case is required.
|
|
231
|
+
def returns(sexp)
|
|
232
|
+
return returns s(:nil) unless sexp
|
|
233
|
+
|
|
234
|
+
case sexp.type
|
|
235
|
+
when :break, :next, :redo
|
|
236
|
+
sexp
|
|
237
|
+
when :yield
|
|
238
|
+
sexp[0] = :returnable_yield
|
|
239
|
+
sexp
|
|
240
|
+
when :scope
|
|
241
|
+
sexp[1] = returns sexp[1]
|
|
242
|
+
sexp
|
|
243
|
+
when :block
|
|
244
|
+
if sexp.length > 1
|
|
245
|
+
sexp[-1] = returns sexp[-1]
|
|
246
|
+
else
|
|
247
|
+
sexp << returns(s(:nil))
|
|
248
|
+
end
|
|
249
|
+
sexp
|
|
250
|
+
when :when
|
|
251
|
+
sexp[2] = returns(sexp[2])
|
|
252
|
+
sexp
|
|
253
|
+
when :rescue
|
|
254
|
+
sexp[1] = returns sexp[1]
|
|
255
|
+
|
|
256
|
+
if sexp[2] and sexp[2][0] == :resbody
|
|
257
|
+
if sexp[2][2]
|
|
258
|
+
sexp[2][2] = returns sexp[2][2]
|
|
259
|
+
else
|
|
260
|
+
sexp[2][2] = returns s(:nil)
|
|
261
|
+
end
|
|
262
|
+
end
|
|
263
|
+
sexp
|
|
264
|
+
when :ensure
|
|
265
|
+
sexp[1] = returns sexp[1]
|
|
266
|
+
sexp
|
|
267
|
+
when :begin
|
|
268
|
+
sexp[1] = returns sexp[1]
|
|
269
|
+
sexp
|
|
270
|
+
when :rescue_mod
|
|
271
|
+
sexp[1] = returns sexp[1]
|
|
272
|
+
sexp[2] = returns sexp[2]
|
|
273
|
+
sexp
|
|
274
|
+
when :while
|
|
275
|
+
# sexp[2] = returns(sexp[2])
|
|
276
|
+
sexp
|
|
277
|
+
when :return, :js_return
|
|
278
|
+
sexp
|
|
279
|
+
when :xstr
|
|
280
|
+
sexp[1] = "return #{sexp[1]};" unless /return|;/ =~ sexp[1]
|
|
281
|
+
sexp
|
|
282
|
+
when :dxstr
|
|
283
|
+
sexp[1] = "return #{sexp[1]}" unless /return|;|\n/ =~ sexp[1]
|
|
284
|
+
sexp
|
|
285
|
+
when :if
|
|
286
|
+
sexp[2] = returns(sexp[2] || s(:nil))
|
|
287
|
+
sexp[3] = returns(sexp[3] || s(:nil))
|
|
288
|
+
sexp
|
|
289
|
+
else
|
|
290
|
+
s(:js_return, sexp).tap { |s|
|
|
291
|
+
s.source = sexp.source
|
|
292
|
+
}
|
|
293
|
+
end
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
def handle_block_given_call(sexp)
|
|
297
|
+
@scope.uses_block!
|
|
298
|
+
if @scope.block_name
|
|
299
|
+
fragment("(#{@scope.block_name} !== nil)", sexp)
|
|
300
|
+
elsif scope = @scope.find_parent_def and scope.block_name
|
|
301
|
+
fragment("(#{scope.block_name} !== nil)", sexp)
|
|
302
|
+
else
|
|
303
|
+
fragment("false", sexp)
|
|
304
|
+
end
|
|
305
|
+
end
|
|
306
|
+
end
|
|
307
|
+
end
|
data/lib/opal/erb.rb
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
require 'opal/compiler'
|
|
2
|
+
|
|
3
|
+
module Opal
|
|
4
|
+
module ERB
|
|
5
|
+
def self.compile(source, file_name = '(erb)')
|
|
6
|
+
Compiler.new(source, file_name).compile
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
class Compiler
|
|
10
|
+
def initialize(source, file_name = '(erb)')
|
|
11
|
+
@source, @file_name, @result = source, file_name, source
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def prepared_source
|
|
15
|
+
@prepared_source ||= begin
|
|
16
|
+
source = @source
|
|
17
|
+
source = fix_quotes(source)
|
|
18
|
+
source = find_contents(source)
|
|
19
|
+
source = find_code(source)
|
|
20
|
+
source = wrap_compiled(source)
|
|
21
|
+
source = require_erb(source)
|
|
22
|
+
source
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def compile
|
|
27
|
+
Opal.compile prepared_source
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def fix_quotes(result)
|
|
31
|
+
result.gsub '"', '\\"'
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
BLOCK_EXPR = /\s+(do|\{)(\s*\|[^|]*\|)?\s*\Z/
|
|
35
|
+
|
|
36
|
+
def require_erb(result)
|
|
37
|
+
'require "erb";'+result
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def find_contents(result)
|
|
41
|
+
result.gsub(/<%=([\s\S]+?)%>/) do
|
|
42
|
+
inner = $1.gsub(/\\'/, "'").gsub(/\\"/, '"')
|
|
43
|
+
|
|
44
|
+
if inner =~ BLOCK_EXPR
|
|
45
|
+
"\")\noutput_buffer.append= #{ inner }\noutput_buffer.append(\""
|
|
46
|
+
else
|
|
47
|
+
"\")\noutput_buffer.append=(#{ inner })\noutput_buffer.append(\""
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def find_code(result)
|
|
53
|
+
result.gsub(/<%([\s\S]+?)%>/) do
|
|
54
|
+
"\")\n#{ $1 }\noutput_buffer.append(\""
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def wrap_compiled(result)
|
|
59
|
+
path = @file_name.sub(/\.opalerb$/, '')
|
|
60
|
+
result = "Template.new('#{path}') do |output_buffer|\noutput_buffer.append(\"#{result}\")\noutput_buffer.join\nend\n"
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Opal
|
|
2
|
+
# A fragment holds a string of generated javascript that will be written
|
|
3
|
+
# to the destination. It also keeps hold of the original sexp from which
|
|
4
|
+
# it was generated. Using this sexp, when writing fragments in order, a
|
|
5
|
+
# mapping can be created of the original location => target location,
|
|
6
|
+
# aka, source-maps!
|
|
7
|
+
class Fragment
|
|
8
|
+
# String of javascript this fragment holds
|
|
9
|
+
attr_reader :code
|
|
10
|
+
|
|
11
|
+
def initialize(code, sexp = nil)
|
|
12
|
+
@code = code.to_s
|
|
13
|
+
@sexp = sexp
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# In debug mode we may wish to include the original line as a comment
|
|
17
|
+
def to_code
|
|
18
|
+
if @sexp
|
|
19
|
+
"/*:#{@sexp.line}:#{@sexp.column}*/#{@code}"
|
|
20
|
+
else
|
|
21
|
+
@code
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# debug:
|
|
26
|
+
# alias code to_code
|
|
27
|
+
|
|
28
|
+
# inspect the contents of this fragment, f("fooo")
|
|
29
|
+
def inspect
|
|
30
|
+
"f(#{@code.inspect})"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def line
|
|
34
|
+
@sexp.line if @sexp
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def column
|
|
38
|
+
@sexp.column if @sexp
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require 'hike'
|
|
2
|
+
require 'pathname'
|
|
3
|
+
|
|
4
|
+
module Opal
|
|
5
|
+
class HikePathFinder < Hike::Trail
|
|
6
|
+
def initialize(paths = Opal.paths)
|
|
7
|
+
super()
|
|
8
|
+
append_paths(*paths)
|
|
9
|
+
append_extensions '.js', '.js.rb', '.rb', '.opalerb'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def find path
|
|
13
|
+
pathname = Pathname(path)
|
|
14
|
+
return path if pathname.absolute? and pathname.exist?
|
|
15
|
+
super
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
data/lib/opal/nodes.rb
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'opal/nodes/base'
|
|
2
|
+
require 'opal/nodes/literal'
|
|
3
|
+
require 'opal/nodes/variables'
|
|
4
|
+
require 'opal/nodes/constants'
|
|
5
|
+
require 'opal/nodes/call'
|
|
6
|
+
require 'opal/nodes/call_special'
|
|
7
|
+
require 'opal/nodes/module'
|
|
8
|
+
require 'opal/nodes/class'
|
|
9
|
+
require 'opal/nodes/singleton_class'
|
|
10
|
+
require 'opal/nodes/iter'
|
|
11
|
+
require 'opal/nodes/def'
|
|
12
|
+
require 'opal/nodes/if'
|
|
13
|
+
require 'opal/nodes/logic'
|
|
14
|
+
require 'opal/nodes/definitions'
|
|
15
|
+
require 'opal/nodes/yield'
|
|
16
|
+
require 'opal/nodes/rescue'
|
|
17
|
+
require 'opal/nodes/case'
|
|
18
|
+
require 'opal/nodes/super'
|
|
19
|
+
require 'opal/nodes/top'
|
|
20
|
+
require 'opal/nodes/while'
|
|
21
|
+
require 'opal/nodes/for'
|
|
22
|
+
require 'opal/nodes/hash'
|
|
23
|
+
require 'opal/nodes/array'
|
|
24
|
+
require 'opal/nodes/defined'
|
|
25
|
+
require 'opal/nodes/masgn'
|
|
26
|
+
require 'opal/nodes/arglist'
|