opal 0.4.4 → 0.5.0
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 +1 -0
- data/.gitmodules +3 -0
- data/.travis.yml +8 -0
- data/CONTRIBUTING.md +46 -2
- data/Gemfile +17 -0
- data/README.md +13 -4
- data/Rakefile +22 -119
- data/bin/opal +11 -2
- data/bin/opal-repl +71 -0
- data/corelib/array.rb +554 -356
- data/corelib/basic_object.rb +22 -18
- data/corelib/boolean.rb +15 -6
- data/corelib/class.rb +12 -6
- data/corelib/comparable.rb +40 -9
- data/corelib/encoding.rb +164 -0
- data/corelib/enumerable.rb +532 -300
- data/corelib/enumerator.rb +31 -6
- data/corelib/error.rb +14 -3
- data/corelib/hash.rb +108 -97
- data/corelib/io.rb +30 -0
- data/corelib/kernel.rb +151 -82
- data/corelib/main.rb +7 -0
- data/corelib/match_data.rb +118 -0
- data/corelib/method.rb +58 -0
- data/corelib/module.rb +145 -77
- data/corelib/native.rb +144 -22
- data/corelib/nil_class.rb +2 -0
- data/corelib/numeric.rb +259 -61
- data/corelib/opal.rb +43 -28
- data/corelib/proc.rb +21 -9
- data/corelib/range.rb +42 -23
- data/corelib/regexp.rb +51 -9
- data/corelib/runtime.js +470 -129
- data/corelib/string.rb +170 -246
- data/corelib/struct.rb +13 -1
- data/corelib/time.rb +414 -43
- data/doc/compiler.md +42 -0
- data/doc/compiler_options.md +5 -0
- data/doc/examples/node_http_server.rb +49 -0
- data/doc/external_libraries.md +9 -0
- data/doc/generated_javascript.md +272 -0
- data/doc/home.md +17 -0
- data/doc/method_missing.md +58 -0
- data/doc/static_applications.md +60 -0
- data/doc/using_ruby_from_javascript.md +18 -0
- data/doc/using_sprockets.md +65 -0
- data/lib/opal.rb +18 -15
- data/lib/opal/builder.rb +26 -9
- data/lib/opal/cli.rb +143 -90
- data/lib/opal/cli_options.rb +19 -13
- data/lib/opal/compiler.rb +307 -0
- data/lib/opal/erb.rb +3 -3
- data/lib/opal/fragment.rb +34 -0
- data/lib/opal/nodes.rb +25 -0
- data/lib/opal/nodes/arglist.rb +56 -0
- data/lib/opal/nodes/array.rb +54 -0
- data/lib/opal/nodes/base.rb +150 -0
- data/lib/opal/nodes/base_scope.rb +11 -0
- data/lib/opal/nodes/call.rb +195 -0
- data/lib/opal/nodes/call_special.rb +153 -0
- data/lib/opal/nodes/case.rb +96 -0
- data/lib/opal/nodes/class.rb +43 -0
- data/lib/opal/nodes/constants.rb +91 -0
- data/lib/opal/nodes/def.rb +157 -0
- data/lib/opal/nodes/defined.rb +113 -0
- data/lib/opal/nodes/definitions.rb +182 -0
- data/lib/opal/nodes/hash.rb +67 -0
- data/lib/opal/nodes/helpers.rb +105 -0
- data/lib/opal/nodes/if.rb +60 -0
- data/lib/opal/nodes/iter.rb +118 -0
- data/lib/opal/nodes/literal.rb +193 -0
- data/lib/opal/nodes/logic.rb +211 -0
- data/lib/opal/nodes/masgn.rb +62 -0
- data/lib/opal/nodes/module.rb +46 -0
- data/lib/opal/nodes/rescue.rb +134 -0
- data/lib/opal/nodes/singleton_class.rb +26 -0
- data/lib/opal/nodes/super.rb +97 -0
- data/lib/opal/nodes/top.rb +63 -0
- data/lib/opal/nodes/variables.rb +155 -0
- data/lib/opal/nodes/while.rb +65 -0
- data/lib/opal/nodes/yield.rb +84 -0
- data/lib/opal/parser.rb +294 -2169
- data/lib/opal/parser/grammar.rb +5326 -0
- data/lib/opal/{grammar.y → parser/grammar.y} +180 -113
- data/lib/opal/parser/keywords.rb +64 -0
- data/lib/opal/{lexer.rb → parser/lexer.rb} +278 -327
- data/lib/opal/{lexer_scope.rb → parser/parser_scope.rb} +2 -5
- data/lib/opal/parser/sexp.rb +63 -0
- data/lib/opal/source_map.rb +6 -5
- data/lib/opal/target_scope.rb +15 -17
- data/lib/opal/version.rb +1 -1
- data/mri_spec/cli_spec.rb +67 -6
- data/opal.gemspec +4 -4
- data/spec/config.ru +2 -1
- data/spec/corelib/enumerable/all_break_spec.rb +5 -0
- data/spec/corelib/enumerable/any_break_spec.rb +5 -0
- data/spec/corelib/enumerable/collect_break_spec.rb +13 -0
- data/spec/corelib/enumerable/count_break_spec.rb +5 -0
- data/spec/corelib/enumerable/detect_break_spec.rb +5 -0
- data/spec/corelib/enumerable/drop_while_break_spec.rb +5 -0
- data/spec/corelib/enumerable/each_slice_break.rb +6 -0
- data/spec/corelib/enumerable/each_with_index_break_spec.rb +5 -0
- data/spec/corelib/enumerable/each_with_object_break_spec.rb +5 -0
- data/spec/corelib/enumerable/find_all_break_spec.rb +5 -0
- data/spec/corelib/enumerable/find_index_break_spec.rb +5 -0
- data/spec/corelib/enumerable/grep_break_spec.rb +5 -0
- data/spec/corelib/enumerable/max_break_spec.rb +5 -0
- data/spec/corelib/enumerable/max_by_break_spec.rb +5 -0
- data/spec/corelib/enumerable/min_break_spec.rb +5 -0
- data/spec/corelib/enumerable/min_by_break_spec.rb +5 -0
- data/spec/corelib/enumerable/none_break_spec.rb +5 -0
- data/spec/corelib/enumerable/one_break_spec.rb +5 -0
- data/spec/corelib/enumerable/reduce_break_spec.rb +5 -0
- data/spec/corelib/enumerable/take_while_break_spec.rb +5 -0
- data/spec/{rubyspec → corelib}/fixtures/class.rb +0 -0
- data/spec/{rubyspec → corelib}/fixtures/class_variables.rb +0 -0
- data/spec/{rubyspec → corelib}/fixtures/constants.rb +0 -0
- data/spec/{rubyspec/core → corelib}/kernel/Array_spec.rb +0 -0
- data/spec/{opal → corelib}/kernel/block_given_spec.rb +0 -0
- data/spec/{opal → corelib}/kernel/class_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/kernel/define_singleton_method_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/kernel/equal_value_spec.rb +0 -0
- data/spec/{opal → corelib}/kernel/extend_spec.rb +0 -0
- data/spec/{opal → corelib}/kernel/format_spec.rb +0 -0
- data/spec/{opal → corelib}/kernel/freeze_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/kernel/instance_eval_spec.rb +0 -0
- data/spec/{opal → corelib}/kernel/instance_variable_defined_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/kernel/instance_variable_get_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/kernel/instance_variable_set_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/kernel/loop_spec.rb +0 -0
- data/spec/{opal → corelib}/kernel/match_spec.rb +0 -0
- data/spec/{opal → corelib}/kernel/method_spec.rb +0 -0
- data/spec/{opal → corelib}/kernel/methods_spec.rb +0 -0
- data/spec/{opal → corelib}/kernel/nil_spec.rb +0 -0
- data/spec/{opal → corelib}/kernel/p_spec.rb +8 -6
- data/spec/{opal → corelib}/kernel/printf_spec.rb +4 -2
- data/spec/{opal → corelib}/kernel/proc_spec.rb +0 -0
- data/spec/{opal → corelib}/kernel/rand_spec.rb +0 -0
- data/spec/{opal → corelib}/kernel/respond_to_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/kernel/send_spec.rb +0 -0
- data/spec/{opal → corelib}/kernel/sprintf_spec.rb +0 -0
- data/spec/corelib/kernel/warn_spec.rb +83 -0
- data/spec/{rubyspec → corelib}/language/block_spec.rb +17 -18
- data/spec/{rubyspec → corelib}/language/fixtures/array.rb +0 -0
- data/spec/{rubyspec → corelib}/language/fixtures/block.rb +0 -0
- data/spec/{rubyspec → corelib}/language/fixtures/break.rb +0 -0
- data/spec/{rubyspec → corelib}/language/fixtures/ensure.rb +0 -0
- data/spec/{rubyspec → corelib}/language/fixtures/literal_lambda.rb +0 -0
- data/spec/{rubyspec → corelib}/language/fixtures/metaclass.rb +0 -0
- data/spec/{rubyspec → corelib}/language/fixtures/module.rb +0 -0
- data/spec/{rubyspec → corelib}/language/fixtures/next.rb +0 -0
- data/spec/{rubyspec → corelib}/language/fixtures/return.rb +0 -0
- data/spec/{rubyspec → corelib}/language/fixtures/send.rb +1 -1
- data/spec/{rubyspec → corelib}/language/fixtures/send_1.9.rb +0 -0
- data/spec/{rubyspec → corelib}/language/fixtures/super.rb +0 -0
- data/spec/{rubyspec → corelib}/language/fixtures/variables.rb +0 -0
- data/spec/{rubyspec → corelib}/language/fixtures/yield.rb +0 -0
- data/spec/{rubyspec → corelib}/language/numbers_spec.rb +0 -2
- data/spec/{rubyspec → corelib}/language/predefined_spec.rb +0 -0
- data/spec/{rubyspec → corelib}/language/proc_spec.rb +0 -2
- data/spec/{rubyspec → corelib}/language/regexp_spec.rb +0 -0
- data/spec/{rubyspec → corelib}/language/send_spec.rb +6 -7
- data/spec/{rubyspec → corelib}/language/string_spec.rb +0 -0
- data/spec/{rubyspec → corelib}/language/symbol_spec.rb +0 -0
- data/spec/{rubyspec → corelib}/language/variables_spec.rb +1 -2
- data/spec/{rubyspec → corelib}/language/versions/array_1.9.rb +0 -0
- data/spec/{rubyspec → corelib}/language/versions/block_1.9.rb +0 -0
- data/spec/{rubyspec → corelib}/language/versions/break_1.9.rb +0 -0
- data/spec/{rubyspec → corelib}/language/versions/case_1.9.rb +0 -0
- data/spec/{rubyspec → corelib}/language/versions/hash_1.9.rb +0 -0
- data/spec/{rubyspec → corelib}/language/versions/literal_lambda_1.9.rb +0 -0
- data/spec/{rubyspec → corelib}/language/versions/not_1.9.rb +0 -0
- data/spec/{rubyspec → corelib}/language/versions/send_1.9.rb +0 -0
- data/spec/{rubyspec → corelib}/language/versions/symbol_1.9.rb +0 -0
- data/spec/{rubyspec → corelib}/language/versions/variables_1.9.rb +1 -1
- data/spec/corelib/module/alias_method_spec.rb +28 -0
- data/spec/{opal → corelib}/module/ancestors_spec.rb +0 -0
- data/spec/{opal → corelib}/module/append_features_spec.rb +0 -0
- data/spec/corelib/module/attr_accessor_spec.rb +26 -0
- data/spec/{rubyspec/core → corelib}/module/const_defined_spec.rb +1 -2
- data/spec/{rubyspec/core → corelib}/module/const_get_spec.rb +1 -2
- data/spec/{rubyspec/core → corelib}/module/const_missing_spec.rb +1 -2
- data/spec/{rubyspec/core → corelib}/module/const_set_spec.rb +1 -2
- data/spec/{opal → corelib}/module/constants_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/module/fixtures/classes.rb +0 -0
- data/spec/{rubyspec/core → corelib}/module/method_defined_spec.rb +0 -1
- data/spec/{opal → corelib}/module/module_function_spec.rb +0 -2
- data/spec/corelib/module/name_spec.rb +52 -0
- data/spec/{rubyspec/core → corelib}/module/public_method_defined_spec.rb +0 -1
- data/spec/{rubyspec/core → corelib}/module/remove_const_spec.rb +0 -1
- data/spec/{rubyspec/core → corelib}/module/undef_method_spec.rb +0 -1
- data/spec/{opal → corelib}/native/alias_native_spec.rb +7 -0
- data/spec/{opal → corelib}/native/each_spec.rb +2 -5
- data/spec/{opal → corelib}/native/element_reference_spec.rb +0 -0
- data/spec/{rubyspec/core/hash/to_native_spec.rb → corelib/native/ext_spec.rb} +0 -0
- data/spec/corelib/native/initialize_spec.rb +17 -0
- data/spec/{opal → corelib}/native/method_missing_spec.rb +0 -0
- data/spec/corelib/native/new_spec.rb +6 -0
- data/spec/{rubyspec/core → corelib}/numeric/abs_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/bit_and_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/bit_or_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/bit_xor_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/ceil_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/chr_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/comparison_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/complement_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/divide_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/downto_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/eql_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/equal_value_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/even_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/exponent_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/floor_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/gt_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/gte_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/integer_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/left_shift_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/lt_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/lte_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/magnitude_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/minus_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/modulo_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/multiply_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/next_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/odd_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/ord_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/plus_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/pred_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/right_shift_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/step_spec.rb +0 -3
- data/spec/{rubyspec/core → corelib}/numeric/succ_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/times_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/to_f_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/to_i_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/to_json_spec.rb +0 -0
- data/spec/corelib/numeric/to_s_spec.rb +26 -0
- data/spec/{rubyspec/core → corelib}/numeric/uminus_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/upto_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/numeric/zero_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/proc/call_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/proc/element_reference_spec.rb +0 -0
- data/spec/{opal → corelib}/proc/proc_tricks_spec.rb +0 -0
- data/spec/corelib/runtime/begin_spec.rb +39 -0
- data/spec/{opal → corelib}/runtime/block_send_spec.rb +0 -0
- data/spec/{opal/language → corelib/runtime}/block_spec.rb +10 -0
- data/spec/corelib/runtime/bridged_classes_spec.rb +64 -0
- data/spec/{opal → corelib/runtime}/constants_spec.rb +0 -0
- data/spec/{opal → corelib}/runtime/eval_spec.rb +0 -0
- data/spec/{opal → corelib}/runtime/main_methods_spec.rb +0 -0
- data/spec/{opal → corelib/runtime}/method_missing_spec.rb +0 -0
- data/spec/corelib/runtime/method_spec.rb +31 -0
- data/spec/corelib/runtime/paren_spec.rb +14 -0
- data/spec/{opal/language → corelib/runtime}/rescue_spec.rb +11 -0
- data/spec/{opal/language → corelib/runtime}/return_spec.rb +0 -0
- data/spec/{opal → corelib}/runtime/send_spec.rb +0 -0
- data/spec/{opal/language → corelib/runtime}/singleton_class_spec.rb +0 -0
- data/spec/{opal/language → corelib/runtime}/super_spec.rb +113 -0
- data/spec/{opal/language → corelib/runtime}/variables_spec.rb +0 -0
- data/spec/{opal → corelib}/source_map_spec.rb +3 -3
- data/spec/{rubyspec/core → corelib}/string/chop_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/string/chr_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/string/clone_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/string/comparison_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/string/dup_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/string/element_reference_spec.rb +0 -1
- data/spec/{rubyspec/core → corelib}/string/fixtures/classes.rb +0 -0
- data/spec/{rubyspec/core → corelib}/string/format_spec.rb +0 -0
- data/spec/{opal → corelib}/string/freeze_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/string/gsub_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/string/lines_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/string/ljust_spec.rb +0 -1
- data/spec/{rubyspec/core → corelib}/string/lstrip_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/string/match_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/string/next_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/string/ord_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/string/partition_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/string/rindex_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/string/rjust_spec.rb +0 -1
- data/spec/{rubyspec/core → corelib}/string/rstrip_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/string/scan_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/string/slice_spec.rb +1 -2
- data/spec/{rubyspec/core → corelib}/string/split_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/string/strip_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/string/sub_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/string/succ_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/string/sum_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/string/to_f_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/string/to_i_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/string/tr_s_spec.rb +0 -0
- data/spec/{rubyspec/core → corelib}/string/tr_spec.rb +0 -0
- data/spec/filters/bugs/array.rb +236 -4
- data/spec/filters/bugs/basic_object.rb +4 -0
- data/spec/filters/bugs/class.rb +4 -0
- data/spec/filters/bugs/enumerable.rb +58 -0
- data/spec/filters/bugs/enumerator.rb +6 -0
- data/spec/filters/bugs/hash.rb +146 -0
- data/spec/filters/bugs/kernel.rb +10 -0
- data/spec/filters/bugs/language.rb +366 -0
- data/spec/filters/bugs/module.rb +14 -0
- data/spec/filters/bugs/regexp.rb +7 -0
- data/spec/filters/bugs/set.rb +7 -0
- data/spec/filters/bugs/{singleton/instance.rb → singleton.rb} +3 -1
- data/spec/filters/bugs/string.rb +37 -0
- data/spec/filters/bugs/stringscanner.rb +18 -0
- data/spec/filters/bugs/struct.rb +11 -0
- data/spec/filters/bugs/symbol.rb +5 -0
- data/spec/filters/bugs/time.rb +28 -0
- data/spec/filters/bugs/unknown.rb +11 -0
- data/spec/filters/unsupported/array_subclasses.rb +32 -0
- data/spec/filters/unsupported/encoding.rb +14 -0
- data/spec/filters/unsupported/float.rb +4 -0
- data/spec/filters/unsupported/frozen.rb +57 -0
- data/spec/filters/unsupported/hash_compare_by_identity.rb +16 -0
- data/spec/filters/unsupported/immutable_strings.rb +6 -0
- data/spec/filters/unsupported/mutable_strings.rb +49 -0
- data/spec/filters/unsupported/private_methods.rb +26 -0
- data/spec/filters/{mspec → unsupported}/ruby_exe.rb +0 -0
- data/spec/filters/unsupported/string_subclasses.rb +8 -0
- data/spec/filters/unsupported/tainted.rb +46 -0
- data/spec/filters/unsupported/time.rb +21 -0
- data/spec/filters/unsupported/trusted.rb +26 -0
- data/spec/opal/{parser → compiler}/irb_spec.rb +9 -9
- data/spec/{parser → opal/parser}/alias_spec.rb +0 -0
- data/spec/{parser → opal/parser}/and_spec.rb +0 -0
- data/spec/{parser → opal/parser}/array_spec.rb +0 -0
- data/spec/{parser → opal/parser}/attrasgn_spec.rb +0 -0
- data/spec/{parser → opal/parser}/begin_spec.rb +0 -0
- data/spec/{parser → opal/parser}/block_spec.rb +0 -0
- data/spec/{parser → opal/parser}/break_spec.rb +0 -0
- data/spec/{parser → opal/parser}/call_spec.rb +33 -8
- data/spec/{parser → opal/parser}/class_spec.rb +0 -0
- data/spec/{parser → opal/parser}/const_spec.rb +0 -0
- data/spec/{parser → opal/parser}/cvar_spec.rb +0 -0
- data/spec/{parser → opal/parser}/def_spec.rb +17 -17
- data/spec/{parser → opal/parser}/false_spec.rb +0 -0
- data/spec/{parser → opal/parser}/file_spec.rb +0 -0
- data/spec/{parser → opal/parser}/gvar_spec.rb +0 -0
- data/spec/{parser → opal/parser}/hash_spec.rb +0 -0
- data/spec/opal/parser/heredoc_spec.rb +30 -0
- data/spec/{parser → opal/parser}/iasgn_spec.rb +0 -0
- data/spec/{parser → opal/parser}/if_spec.rb +0 -0
- data/spec/{parser → opal/parser}/int_spec.rb +0 -0
- data/spec/opal/parser/iter_spec.rb +59 -0
- data/spec/{parser → opal/parser}/ivar_spec.rb +0 -0
- data/spec/opal/parser/lambda_spec.rb +64 -0
- data/spec/{parser → opal/parser}/lasgn_spec.rb +0 -0
- data/spec/{parser → opal/parser}/line_spec.rb +0 -0
- data/spec/{parser → opal/parser}/lvar_spec.rb +6 -6
- data/spec/{parser → opal/parser}/masgn_spec.rb +0 -0
- data/spec/{parser → opal/parser}/module_spec.rb +0 -0
- data/spec/{parser → opal/parser}/nil_spec.rb +0 -0
- data/spec/{parser → opal/parser}/not_spec.rb +0 -0
- data/spec/{parser → opal/parser}/nth_ref_spec.rb +0 -0
- data/spec/{parser → opal/parser}/op_asgn1_spec.rb +0 -0
- data/spec/{parser → opal/parser}/op_asgn2_spec.rb +0 -0
- data/spec/{parser → opal/parser}/or_spec.rb +0 -0
- data/spec/{parser → opal/parser}/parse_spec.rb +17 -17
- data/spec/{parser → opal/parser}/regexp_spec.rb +0 -0
- data/spec/{parser → opal/parser}/return_spec.rb +0 -0
- data/spec/{parser → opal/parser}/sclass_spec.rb +0 -0
- data/spec/{parser → opal/parser}/self_spec.rb +0 -0
- data/spec/{parser → opal/parser}/str_spec.rb +1 -12
- data/spec/{parser → opal/parser}/string_spec.rb +0 -0
- data/spec/opal/parser/super_spec.rb +20 -0
- data/spec/{parser → opal/parser}/true_spec.rb +0 -0
- data/spec/{parser → opal/parser}/undef_spec.rb +0 -0
- data/spec/{parser → opal/parser}/unless_spec.rb +0 -0
- data/spec/{parser → opal/parser}/while_spec.rb +0 -0
- data/spec/{parser → opal/parser}/xstr_spec.rb +2 -2
- data/spec/{parser → opal/parser}/yield_spec.rb +0 -0
- data/spec/ospec/main.rb.erb +1 -13
- data/spec/ospec/mspec_fixes.rb +87 -0
- data/spec/ospec/runner.rb +188 -0
- data/spec/rubyspecs +351 -0
- data/spec/spec_helper.rb +8 -198
- data/spec/{opal → stdlib}/erb/erb_spec.rb +3 -3
- data/spec/{opal → stdlib}/erb/inline_block.opalerb +0 -0
- data/spec/{opal → stdlib}/erb/quoted.opalerb +0 -0
- data/spec/{opal → stdlib}/erb/simple.opalerb +0 -0
- data/spec/stdlib/json/ext_spec.rb +48 -0
- data/spec/{opal → stdlib}/json/parse_spec.rb +0 -0
- data/spec/stdlib/template/paths_spec.rb +10 -0
- data/stdlib/delegate.rb +29 -0
- data/stdlib/dir.rb +5 -0
- data/stdlib/file.rb +7 -0
- data/stdlib/json.rb +82 -27
- data/stdlib/opal-parser.rb +46 -0
- data/stdlib/opal-source-maps.js.erb +1 -1
- data/stdlib/pathname.rb +31 -0
- data/stdlib/{racc.rb → racc/parser.rb} +0 -0
- data/stdlib/securerandom.rb +12 -0
- data/stdlib/set.rb +89 -0
- data/stdlib/stringio.rb +12 -4
- data/stdlib/strscan.rb +19 -0
- data/stdlib/template.rb +4 -0
- data/stdlib/thread.rb +20 -0
- data/tasks/mspec.rake +147 -0
- metadata +650 -1266
- data/lib/opal/core_ext.rb +0 -5
- data/lib/opal/grammar.rb +0 -5137
- data/lib/opal/grammar_helpers.rb +0 -364
- data/lib/opal/require_parser.rb +0 -77
- data/spec/filters/bugs/alias.rb +0 -6
- data/spec/filters/bugs/ancestors.rb +0 -4
- data/spec/filters/bugs/array/combination.rb +0 -11
- data/spec/filters/bugs/array/count.rb +0 -3
- data/spec/filters/bugs/array/delete_if.rb +0 -3
- data/spec/filters/bugs/array/drop.rb +0 -3
- data/spec/filters/bugs/array/drop_while.rb +0 -5
- data/spec/filters/bugs/array/eql.rb +0 -3
- data/spec/filters/bugs/array/flatten.rb +0 -9
- data/spec/filters/bugs/array/minus.rb +0 -5
- data/spec/filters/bugs/array/multipliy.rb +0 -9
- data/spec/filters/bugs/array/new.rb +0 -3
- data/spec/filters/bugs/array/pop.rb +0 -6
- data/spec/filters/bugs/array/rassoc.rb +0 -4
- data/spec/filters/bugs/array/rindex.rb +0 -6
- data/spec/filters/bugs/array/select.rb +0 -3
- data/spec/filters/bugs/array/shift.rb +0 -7
- data/spec/filters/bugs/array/shuffle.rb +0 -11
- data/spec/filters/bugs/array/slice.rb +0 -7
- data/spec/filters/bugs/array/take.rb +0 -3
- data/spec/filters/bugs/array/to_a.rb +0 -3
- data/spec/filters/bugs/array/try_convert.rb +0 -7
- data/spec/filters/bugs/array/uniq.rb +0 -10
- data/spec/filters/bugs/array/zip.rb +0 -4
- data/spec/filters/bugs/array_delete.rb +0 -4
- data/spec/filters/bugs/array_fetch.rb +0 -3
- data/spec/filters/bugs/array_first.rb +0 -3
- data/spec/filters/bugs/array_flatten.rb +0 -14
- data/spec/filters/bugs/array_intersection.rb +0 -5
- data/spec/filters/bugs/array_join.rb +0 -6
- data/spec/filters/bugs/break.rb +0 -10
- data/spec/filters/bugs/case.rb +0 -4
- data/spec/filters/bugs/coerce_integer.rb +0 -9
- data/spec/filters/bugs/enumerable_sort_by.rb +0 -3
- data/spec/filters/bugs/kernel/instance_variables.rb +0 -3
- data/spec/filters/bugs/kernel/rand.rb +0 -4
- data/spec/filters/bugs/language/array.rb +0 -3
- data/spec/filters/bugs/language/block.rb +0 -6
- data/spec/filters/bugs/language/break.rb +0 -3
- data/spec/filters/bugs/language/class.rb +0 -12
- data/spec/filters/bugs/language/class_variables.rb +0 -12
- data/spec/filters/bugs/language/def.rb +0 -27
- data/spec/filters/bugs/language/defined.rb +0 -3
- data/spec/filters/bugs/language/ensure.rb +0 -4
- data/spec/filters/bugs/language/execution.rb +0 -4
- data/spec/filters/bugs/language/for.rb +0 -18
- data/spec/filters/bugs/language/if.rb +0 -13
- data/spec/filters/bugs/language/loop.rb +0 -4
- data/spec/filters/bugs/language/metaclass.rb +0 -14
- data/spec/filters/bugs/language/module.rb +0 -6
- data/spec/filters/bugs/language/next.rb +0 -3
- data/spec/filters/bugs/language/or.rb +0 -3
- data/spec/filters/bugs/language/order.rb +0 -4
- data/spec/filters/bugs/language/precedence.rb +0 -10
- data/spec/filters/bugs/language/proc.rb +0 -24
- data/spec/filters/bugs/language/redo.rb +0 -5
- data/spec/filters/bugs/language/rescue.rb +0 -9
- data/spec/filters/bugs/language/retry.rb +0 -5
- data/spec/filters/bugs/language/send.rb +0 -10
- data/spec/filters/bugs/language/super.rb +0 -9
- data/spec/filters/bugs/language/until.rb +0 -8
- data/spec/filters/bugs/language/variables.rb +0 -37
- data/spec/filters/bugs/language/while.rb +0 -6
- data/spec/filters/bugs/language/yield.rb +0 -5
- data/spec/filters/bugs/module/class_variables.rb +0 -6
- data/spec/filters/bugs/module/method_defined.rb +0 -6
- data/spec/filters/bugs/public_methods.rb +0 -4
- data/spec/filters/bugs/return.rb +0 -7
- data/spec/filters/bugs/source_map.rb +0 -3
- data/spec/filters/bugs/string/center.rb +0 -4
- data/spec/filters/bugs/string/lines.rb +0 -3
- data/spec/filters/mspec/mocks.rb +0 -3
- data/spec/filters/mspec/should_receive.rb +0 -5
- data/spec/filters/parser/block_args.rb +0 -51
- data/spec/mspec/guards/block_device.rb +0 -0
- data/spec/mspec/guards/endian.rb +0 -0
- data/spec/mspec/helpers/environment.rb +0 -0
- data/spec/mspec/helpers/language_version.rb +0 -0
- data/spec/mspec/helpers/tmp.rb +0 -0
- data/spec/opal/array/element_reference_spec.rb +0 -206
- data/spec/opal/array/equal_value_spec.rb +0 -19
- data/spec/opal/array/fill_spec.rb +0 -26
- data/spec/opal/array/reduce_spec.rb +0 -31
- data/spec/opal/array/to_json_spec.rb +0 -9
- data/spec/opal/basic_object/send_spec.rb +0 -28
- data/spec/opal/boolean/singleton_class_spec.rb +0 -9
- data/spec/opal/boolean/to_json_spec.rb +0 -11
- data/spec/opal/browser/local_storage_spec.rb +0 -55
- data/spec/opal/class/constants_spec.rb +0 -7
- data/spec/opal/class/extend_spec.rb +0 -47
- data/spec/opal/class/instance_methods_spec.rb +0 -13
- data/spec/opal/class/last_value_spec.rb +0 -67
- data/spec/opal/class/proc_methods_spec.rb +0 -23
- data/spec/opal/class/singleton_methods_spec.rb +0 -41
- data/spec/opal/hash/allocate_spec.rb +0 -16
- data/spec/opal/hash/new_spec.rb +0 -10
- data/spec/opal/hash/to_s_spec.rb +0 -9
- data/spec/opal/kernel/to_json_spec.rb +0 -7
- data/spec/opal/module/alias_method_spec.rb +0 -10
- data/spec/opal/module/attr_accessor_spec.rb +0 -8
- data/spec/opal/native/new_spec.rb +0 -19
- data/spec/opal/native/nil_spec.rb +0 -14
- data/spec/opal/nil/to_json_spec.rb +0 -7
- data/spec/opal/numeric/equal_spec.rb +0 -9
- data/spec/opal/runtime2/call_spec.rb +0 -16
- data/spec/opal/runtime2/class_hierarchy_spec.rb +0 -21
- data/spec/opal/runtime2/defined_spec.rb +0 -11
- data/spec/opal/runtime2/super_spec.rb +0 -16
- data/spec/opal/string/to_json_spec.rb +0 -8
- data/spec/parser/iter_spec.rb +0 -59
- data/spec/parser/lambda_spec.rb +0 -64
- data/spec/parser/parser_spec.rb +0 -41
- data/spec/parser/strscan/check_spec.rb +0 -13
- data/spec/parser/strscan/get_byte_spec.rb +0 -29
- data/spec/parser/strscan/scan_spec.rb +0 -33
- data/spec/parser/strscan/skip_spec.rb +0 -40
- data/spec/parser/super_spec.rb +0 -20
- data/spec/rubyspec/core/array/allocate_spec.rb +0 -19
- data/spec/rubyspec/core/array/append_spec.rb +0 -43
- data/spec/rubyspec/core/array/array_spec.rb +0 -7
- data/spec/rubyspec/core/array/assoc_spec.rb +0 -40
- data/spec/rubyspec/core/array/at_spec.rb +0 -56
- data/spec/rubyspec/core/array/choice_spec.rb +0 -20
- data/spec/rubyspec/core/array/clear_spec.rb +0 -61
- data/spec/rubyspec/core/array/clone_spec.rb +0 -15
- data/spec/rubyspec/core/array/collect_spec.rb +0 -53
- data/spec/rubyspec/core/array/combination_spec.rb +0 -55
- data/spec/rubyspec/core/array/compact_spec.rb +0 -111
- data/spec/rubyspec/core/array/comparison_spec.rb +0 -16
- data/spec/rubyspec/core/array/concat_spec.rb +0 -19
- data/spec/rubyspec/core/array/constructor_spec.rb +0 -24
- data/spec/rubyspec/core/array/count_spec.rb +0 -17
- data/spec/rubyspec/core/array/delete_at_spec.rb +0 -71
- data/spec/rubyspec/core/array/delete_if_spec.rb +0 -71
- data/spec/rubyspec/core/array/delete_spec.rb +0 -104
- data/spec/rubyspec/core/array/drop_spec.rb +0 -29
- data/spec/rubyspec/core/array/drop_while_spec.rb +0 -17
- data/spec/rubyspec/core/array/dup_spec.rb +0 -15
- data/spec/rubyspec/core/array/each_index_spec.rb +0 -40
- data/spec/rubyspec/core/array/each_spec.rb +0 -30
- data/spec/rubyspec/core/array/empty_spec.rb +0 -10
- data/spec/rubyspec/core/array/eql_spec.rb +0 -14
- data/spec/rubyspec/core/array/fetch_spec.rb +0 -52
- data/spec/rubyspec/core/array/find_index_spec.rb +0 -8
- data/spec/rubyspec/core/array/first_spec.rb +0 -89
- data/spec/rubyspec/core/array/fixtures/classes.rb +0 -538
- data/spec/rubyspec/core/array/flatten_spec.rb +0 -232
- data/spec/rubyspec/core/array/frozen_spec.rb +0 -32
- data/spec/rubyspec/core/array/include_spec.rb +0 -33
- data/spec/rubyspec/core/array/index_spec.rb +0 -6
- data/spec/rubyspec/core/array/insert_spec.rb +0 -90
- data/spec/rubyspec/core/array/inspect_spec.rb +0 -7
- data/spec/rubyspec/core/array/intersection_spec.rb +0 -78
- data/spec/rubyspec/core/array/join_spec.rb +0 -34
- data/spec/rubyspec/core/array/keep_if_spec.rb +0 -12
- data/spec/rubyspec/core/array/last_spec.rb +0 -88
- data/spec/rubyspec/core/array/length_spec.rb +0 -7
- data/spec/rubyspec/core/array/map_spec.rb +0 -11
- data/spec/rubyspec/core/array/max_spec.rb +0 -32
- data/spec/rubyspec/core/array/min_spec.rb +0 -32
- data/spec/rubyspec/core/array/minus_spec.rb +0 -89
- data/spec/rubyspec/core/array/multiply_spec.rb +0 -143
- data/spec/rubyspec/core/array/new_spec.rb +0 -137
- data/spec/rubyspec/core/array/ntimes_spec.rb +0 -26
- data/spec/rubyspec/core/array/plus_spec.rb +0 -64
- data/spec/rubyspec/core/array/pop_spec.rb +0 -196
- data/spec/rubyspec/core/array/push_spec.rb +0 -44
- data/spec/rubyspec/core/array/rassoc_spec.rb +0 -38
- data/spec/rubyspec/core/array/reject_spec.rb +0 -134
- data/spec/rubyspec/core/array/replace_spec.rb +0 -7
- data/spec/rubyspec/core/array/reverse_each_spec.rb +0 -37
- data/spec/rubyspec/core/array/reverse_spec.rb +0 -58
- data/spec/rubyspec/core/array/rindex_spec.rb +0 -71
- data/spec/rubyspec/core/array/select_spec.rb +0 -36
- data/spec/rubyspec/core/array/shared/collect.rb +0 -7
- data/spec/rubyspec/core/array/shared/enumeratorize.rb +0 -12
- data/spec/rubyspec/core/array/shared/eql.rb +0 -95
- data/spec/rubyspec/core/array/shared/index.rb +0 -37
- data/spec/rubyspec/core/array/shared/inspect.rb +0 -3
- data/spec/rubyspec/core/array/shared/join.rb +0 -7
- data/spec/rubyspec/core/array/shared/keep_if.rb +0 -3
- data/spec/rubyspec/core/array/shared/length.rb +0 -3
- data/spec/rubyspec/core/array/shared/replace.rb +0 -3
- data/spec/rubyspec/core/array/shared/slice.rb +0 -3
- data/spec/rubyspec/core/array/shift_spec.rb +0 -160
- data/spec/rubyspec/core/array/shuffle_spec.rb +0 -87
- data/spec/rubyspec/core/array/size_spec.rb +0 -7
- data/spec/rubyspec/core/array/slice_spec.rb +0 -166
- data/spec/rubyspec/core/array/sort_spec.rb +0 -271
- data/spec/rubyspec/core/array/take_spec.rb +0 -29
- data/spec/rubyspec/core/array/take_while_spec.rb +0 -17
- data/spec/rubyspec/core/array/to_a_spec.rb +0 -24
- data/spec/rubyspec/core/array/to_ary_spec.rb +0 -20
- data/spec/rubyspec/core/array/try_convert_spec.rb +0 -52
- data/spec/rubyspec/core/array/uniq_spec.rb +0 -167
- data/spec/rubyspec/core/array/unshift_spec.rb +0 -64
- data/spec/rubyspec/core/array/zip_spec.rb +0 -55
- data/spec/rubyspec/core/class/fixtures/classes.rb +0 -9
- data/spec/rubyspec/core/class/new_spec.rb +0 -113
- data/spec/rubyspec/core/enumerable/all_spec.rb +0 -130
- data/spec/rubyspec/core/enumerable/any_spec.rb +0 -150
- data/spec/rubyspec/core/enumerable/collect_spec.rb +0 -39
- data/spec/rubyspec/core/enumerable/count_spec.rb +0 -45
- data/spec/rubyspec/core/enumerable/detect_spec.rb +0 -48
- data/spec/rubyspec/core/enumerable/drop_spec.rb +0 -20
- data/spec/rubyspec/core/enumerable/drop_while_spec.rb +0 -18
- data/spec/rubyspec/core/enumerable/each_slice_spec.rb +0 -25
- data/spec/rubyspec/core/enumerable/each_with_index_spec.rb +0 -14
- data/spec/rubyspec/core/enumerable/each_with_object_spec.rb +0 -20
- data/spec/rubyspec/core/enumerable/entries_spec.rb +0 -9
- data/spec/rubyspec/core/enumerable/find_all_spec.rb +0 -16
- data/spec/rubyspec/core/enumerable/find_index_spec.rb +0 -44
- data/spec/rubyspec/core/enumerable/find_spec.rb +0 -56
- data/spec/rubyspec/core/enumerable/first_spec.rb +0 -43
- data/spec/rubyspec/core/enumerable/fixtures/classes.rb +0 -240
- data/spec/rubyspec/core/enumerable/grep_spec.rb +0 -24
- data/spec/rubyspec/core/enumerable/group_by_spec.rb +0 -16
- data/spec/rubyspec/core/enumerable/none_spec.rb +0 -68
- data/spec/rubyspec/core/enumerable/select_spec.rb +0 -16
- data/spec/rubyspec/core/enumerable/sort_by_spec.rb +0 -31
- data/spec/rubyspec/core/enumerable/take_spec.rb +0 -43
- data/spec/rubyspec/core/enumerable/to_a_spec.rb +0 -9
- data/spec/rubyspec/core/enumerator/each_spec.rb +0 -11
- data/spec/rubyspec/core/enumerator/new_spec.rb +0 -17
- data/spec/rubyspec/core/enumerator/next_spec.rb +0 -25
- data/spec/rubyspec/core/enumerator/rewind_spec.rb +0 -28
- data/spec/rubyspec/core/false/and_spec.rb +0 -11
- data/spec/rubyspec/core/false/inspect_spec.rb +0 -7
- data/spec/rubyspec/core/false/or_spec.rb +0 -11
- data/spec/rubyspec/core/false/to_s_spec.rb +0 -7
- data/spec/rubyspec/core/false/xor_spec.rb +0 -11
- data/spec/rubyspec/core/hash/allocate_spec.rb +0 -13
- data/spec/rubyspec/core/hash/assoc_spec.rb +0 -25
- data/spec/rubyspec/core/hash/clear_spec.rb +0 -19
- data/spec/rubyspec/core/hash/clone_spec.rb +0 -10
- data/spec/rubyspec/core/hash/constructor_spec.rb +0 -13
- data/spec/rubyspec/core/hash/default_proc_spec.rb +0 -20
- data/spec/rubyspec/core/hash/default_spec.rb +0 -17
- data/spec/rubyspec/core/hash/delete_if_spec.rb +0 -13
- data/spec/rubyspec/core/hash/delete_spec.rb +0 -11
- data/spec/rubyspec/core/hash/dup_spec.rb +0 -10
- data/spec/rubyspec/core/hash/each_key_spec.rb +0 -15
- data/spec/rubyspec/core/hash/each_pair_spec.rb +0 -30
- data/spec/rubyspec/core/hash/each_spec.rb +0 -36
- data/spec/rubyspec/core/hash/each_value_spec.rb +0 -15
- data/spec/rubyspec/core/hash/element_reference_spec.rb +0 -41
- data/spec/rubyspec/core/hash/element_set_spec.rb +0 -7
- data/spec/rubyspec/core/hash/empty_spec.rb +0 -10
- data/spec/rubyspec/core/hash/fetch_spec.rb +0 -24
- data/spec/rubyspec/core/hash/flatten_spec.rb +0 -46
- data/spec/rubyspec/core/hash/has_key_spec.rb +0 -24
- data/spec/rubyspec/core/hash/has_value_spec.rb +0 -12
- data/spec/rubyspec/core/hash/include_spec.rb +0 -24
- data/spec/rubyspec/core/hash/index_spec.rb +0 -13
- data/spec/rubyspec/core/hash/indexes_spec.rb +0 -9
- data/spec/rubyspec/core/hash/indices_spec.rb +0 -9
- data/spec/rubyspec/core/hash/invert_spec.rb +0 -12
- data/spec/rubyspec/core/hash/keep_if_spec.rb +0 -18
- data/spec/rubyspec/core/hash/key_spec.rb +0 -24
- data/spec/rubyspec/core/hash/keys_spec.rb +0 -10
- data/spec/rubyspec/core/hash/length_spec.rb +0 -10
- data/spec/rubyspec/core/hash/member_spec.rb +0 -24
- data/spec/rubyspec/core/hash/merge_spec.rb +0 -37
- data/spec/rubyspec/core/hash/new_spec.rb +0 -19
- data/spec/rubyspec/core/hash/rassoc_spec.rb +0 -34
- data/spec/rubyspec/core/hash/reject_spec.rb +0 -18
- data/spec/rubyspec/core/hash/replace_spec.rb +0 -7
- data/spec/rubyspec/core/hash/select_spec.rb +0 -52
- data/spec/rubyspec/core/hash/shift_spec.rb +0 -19
- data/spec/rubyspec/core/hash/size_spec.rb +0 -10
- data/spec/rubyspec/core/hash/to_a_spec.rb +0 -13
- data/spec/rubyspec/core/hash/to_json_spec.rb +0 -11
- data/spec/rubyspec/core/hash/update_spec.rb +0 -17
- data/spec/rubyspec/core/hash/value_spec.rb +0 -12
- data/spec/rubyspec/core/hash/values_at_spec.rb +0 -9
- data/spec/rubyspec/core/hash/values_spec.rb +0 -7
- data/spec/rubyspec/core/kernel/eql_spec.rb +0 -15
- data/spec/rubyspec/core/kernel/equal_spec.rb +0 -12
- data/spec/rubyspec/core/kernel/tap_spec.rb +0 -10
- data/spec/rubyspec/core/kernel/to_s_spec.rb +0 -5
- data/spec/rubyspec/core/matchdata/to_a_spec.rb +0 -5
- data/spec/rubyspec/core/nil/and_spec.rb +0 -11
- data/spec/rubyspec/core/nil/dup_spec.rb +0 -7
- data/spec/rubyspec/core/nil/inspect_spec.rb +0 -7
- data/spec/rubyspec/core/nil/nil_spec.rb +0 -7
- data/spec/rubyspec/core/nil/or_spec.rb +0 -11
- data/spec/rubyspec/core/nil/to_a_spec.rb +0 -7
- data/spec/rubyspec/core/nil/to_f_spec.rb +0 -11
- data/spec/rubyspec/core/nil/to_h_spec.rb +0 -10
- data/spec/rubyspec/core/nil/to_i_spec.rb +0 -11
- data/spec/rubyspec/core/nil/to_s_spec.rb +0 -7
- data/spec/rubyspec/core/nil/xor_spec.rb +0 -11
- data/spec/rubyspec/core/numeric/to_s_spec.rb +0 -8
- data/spec/rubyspec/core/range/begin_spec.rb +0 -9
- data/spec/rubyspec/core/range/case_compare_spec.rb +0 -15
- data/spec/rubyspec/core/range/end_spec.rb +0 -9
- data/spec/rubyspec/core/regexp/match_spec.rb +0 -95
- data/spec/rubyspec/core/string/capitalize_spec.rb +0 -10
- data/spec/rubyspec/core/string/casecmp_spec.rb +0 -16
- data/spec/rubyspec/core/string/center_spec.rb +0 -49
- data/spec/rubyspec/core/string/chomp_spec.rb +0 -48
- data/spec/rubyspec/core/string/downcase_spec.rb +0 -6
- data/spec/rubyspec/core/string/empty_spec.rb +0 -7
- data/spec/rubyspec/core/string/end_with_spec.rb +0 -16
- data/spec/rubyspec/core/string/include_spec.rb +0 -6
- data/spec/rubyspec/core/string/index_spec.rb +0 -405
- data/spec/rubyspec/core/string/intern_spec.rb +0 -9
- data/spec/rubyspec/core/string/length_spec.rb +0 -9
- data/spec/rubyspec/core/string/reverse_spec.rb +0 -7
- data/spec/rubyspec/core/string/size_spec.rb +0 -9
- data/spec/rubyspec/core/string/start_with_spec.rb +0 -12
- data/spec/rubyspec/core/string/swapcase_spec.rb +0 -13
- data/spec/rubyspec/core/string/to_a_spec.rb +0 -9
- data/spec/rubyspec/core/string/to_s_spec.rb +0 -6
- data/spec/rubyspec/core/string/to_str_spec.rb +0 -6
- data/spec/rubyspec/core/string/to_sym_spec.rb +0 -9
- data/spec/rubyspec/core/string/upcase_spec.rb +0 -6
- data/spec/rubyspec/core/struct/fixtures/classes.rb +0 -26
- data/spec/rubyspec/core/struct/initialize_spec.rb +0 -11
- data/spec/rubyspec/core/struct/new_spec.rb +0 -24
- data/spec/rubyspec/core/symbol/to_proc_spec.rb +0 -12
- data/spec/rubyspec/core/time/at_spec.rb +0 -7
- data/spec/rubyspec/core/time/day_spec.rb +0 -5
- data/spec/rubyspec/core/time/friday_spec.rb +0 -9
- data/spec/rubyspec/core/time/hour_spec.rb +0 -5
- data/spec/rubyspec/core/time/min_spec.rb +0 -5
- data/spec/rubyspec/core/time/monday_spec.rb +0 -9
- data/spec/rubyspec/core/time/month_spec.rb +0 -5
- data/spec/rubyspec/core/time/now_spec.rb +0 -5
- data/spec/rubyspec/core/time/saturday_spec.rb +0 -9
- data/spec/rubyspec/core/true/and_spec.rb +0 -11
- data/spec/rubyspec/core/true/inspect_spec.rb +0 -7
- data/spec/rubyspec/core/true/or_spec.rb +0 -11
- data/spec/rubyspec/core/true/to_s_spec.rb +0 -7
- data/spec/rubyspec/core/true/xor_spec.rb +0 -11
- data/spec/rubyspec/language/alias_spec.rb +0 -160
- data/spec/rubyspec/language/and_spec.rb +0 -66
- data/spec/rubyspec/language/array_spec.rb +0 -117
- data/spec/rubyspec/language/break_spec.rb +0 -332
- data/spec/rubyspec/language/case_spec.rb +0 -310
- data/spec/rubyspec/language/class_spec.rb +0 -190
- data/spec/rubyspec/language/class_variable_spec.rb +0 -56
- data/spec/rubyspec/language/def_spec.rb +0 -551
- data/spec/rubyspec/language/defined_spec.rb +0 -107
- data/spec/rubyspec/language/ensure_spec.rb +0 -104
- data/spec/rubyspec/language/execution_spec.rb +0 -15
- data/spec/rubyspec/language/for_spec.rb +0 -192
- data/spec/rubyspec/language/hash_spec.rb +0 -65
- data/spec/rubyspec/language/if_spec.rb +0 -356
- data/spec/rubyspec/language/literal_lambda_spec.rb +0 -1
- data/spec/rubyspec/language/loop_spec.rb +0 -67
- data/spec/rubyspec/language/metaclass_spec.rb +0 -159
- data/spec/rubyspec/language/module_spec.rb +0 -56
- data/spec/rubyspec/language/next_spec.rb +0 -469
- data/spec/rubyspec/language/not_spec.rb +0 -55
- data/spec/rubyspec/language/or_spec.rb +0 -90
- data/spec/rubyspec/language/order_spec.rb +0 -77
- data/spec/rubyspec/language/precedence_spec.rb +0 -483
- data/spec/rubyspec/language/redo_spec.rb +0 -65
- data/spec/rubyspec/language/rescue_spec.rb +0 -121
- data/spec/rubyspec/language/retry_spec.rb +0 -56
- data/spec/rubyspec/language/return_spec.rb +0 -281
- data/spec/rubyspec/language/singleton_class_spec.rb +0 -32
- data/spec/rubyspec/language/super_spec.rb +0 -284
- data/spec/rubyspec/language/undef_spec.rb +0 -16
- data/spec/rubyspec/language/unless_spec.rb +0 -45
- data/spec/rubyspec/language/until_spec.rb +0 -234
- data/spec/rubyspec/language/while_spec.rb +0 -238
- data/spec/rubyspec/language/yield_spec.rb +0 -128
- data/spec/rubyspec/library/date/new_spec.rb +0 -10
- data/spec/rubyspec/library/date/to_s_spec.rb +0 -7
- data/spec/rubyspec/library/date/today_spec.rb +0 -7
- data/spec/rubyspec/library/erb/util/html_escape_spec.rb +0 -10
- data/spec/rubyspec/library/observer/add_observer_spec.rb +0 -31
- data/spec/rubyspec/library/observer/count_observers_spec.rb +0 -33
- data/spec/rubyspec/library/observer/delete_observer_spec.rb +0 -19
- data/spec/rubyspec/library/observer/delete_observers_spec.rb +0 -19
- data/spec/rubyspec/library/observer/fixtures/classes.rb +0 -25
- data/spec/rubyspec/library/observer/notify_observers_spec.rb +0 -31
- data/spec/rubyspec/library/rbconfig/config_spec.rb +0 -47
- data/spec/rubyspec/library/singleton/clone_spec.rb +0 -8
- data/spec/rubyspec/library/singleton/dup_spec.rb +0 -8
- data/spec/rubyspec/library/singleton/fixtures/classes.rb +0 -18
- data/spec/rubyspec/library/singleton/instance_spec.rb +0 -30
- data/spec/rubyspec/library/stringscanner/element_reference_spec.rb +0 -29
- data/spec/rubyspec/library/stringscanner/pos_spec.rb +0 -20
- data/spec/rubyspec/spec_helper.rb +0 -96
- data/stdlib/fileutils.rb +0 -0
- data/stdlib/iconv.rb +0 -0
- data/stdlib/opal-browser/local_storage.rb +0 -27
- data/stdlib/opal-browser/script_loader.rb +0 -35
- data/stdlib/opal-parser.js.erb +0 -13
- data/stdlib/yaml.rb +0 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
module Opal
|
|
2
|
+
module Keywords
|
|
3
|
+
|
|
4
|
+
class KeywordTable
|
|
5
|
+
attr_accessor :name, :id, :state
|
|
6
|
+
|
|
7
|
+
def initialize(name, id, state)
|
|
8
|
+
@name = name
|
|
9
|
+
@id = id
|
|
10
|
+
@state = state
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
KEYWORDS = [
|
|
15
|
+
["__LINE__", [:LINE, :LINE], :expr_end],
|
|
16
|
+
["__FILE__", [:FILE, :FILE], :expr_end],
|
|
17
|
+
["alias", [:ALIAS, :ALIAS], :expr_fname],
|
|
18
|
+
["and", [:AND, :AND], :expr_beg],
|
|
19
|
+
["begin", [:BEGIN, :BEGIN], :expr_beg],
|
|
20
|
+
["break", [:BREAK, :BREAK], :expr_mid],
|
|
21
|
+
["case", [:CASE, :CASE], :expr_beg],
|
|
22
|
+
["class", [:CLASS, :CLASS], :expr_class],
|
|
23
|
+
["def", [:DEF, :DEF], :expr_fname],
|
|
24
|
+
["defined?", [:DEFINED, :DEFINED], :expr_arg],
|
|
25
|
+
["do", [:DO, :DO], :expr_beg],
|
|
26
|
+
["else", [:ELSE, :ELSE], :expr_beg],
|
|
27
|
+
["elsif", [:ELSIF, :ELSIF], :expr_beg],
|
|
28
|
+
["end", [:END, :END], :expr_end],
|
|
29
|
+
["ensure", [:ENSURE, :ENSURE], :expr_beg],
|
|
30
|
+
["false", [:FALSE, :FALSE], :expr_end],
|
|
31
|
+
["if", [:IF, :IF_MOD], :expr_beg],
|
|
32
|
+
["module", [:MODULE, :MODULE], :expr_beg],
|
|
33
|
+
["nil", [:NIL, :NIL], :expr_end],
|
|
34
|
+
["next", [:NEXT, :NEXT], :expr_mid],
|
|
35
|
+
["not", [:NOT, :NOT], :expr_beg],
|
|
36
|
+
["or", [:OR, :OR], :expr_beg],
|
|
37
|
+
["redo", [:REDO, :REDO], :expr_end],
|
|
38
|
+
["rescue", [:RESCUE, :RESCUE_MOD], :expr_mid],
|
|
39
|
+
["return", [:RETURN, :RETURN], :expr_mid],
|
|
40
|
+
["self", [:SELF, :SELF], :expr_end],
|
|
41
|
+
["super", [:SUPER, :SUPER], :expr_arg],
|
|
42
|
+
["then", [:THEN, :THEN], :expr_beg],
|
|
43
|
+
["true", [:TRUE, :TRUE], :expr_end],
|
|
44
|
+
["undef", [:UNDEF, :UNDEF], :expr_fname],
|
|
45
|
+
["unless", [:UNLESS, :UNLESS_MOD], :expr_beg],
|
|
46
|
+
["until", [:UNTIL, :UNTIL_MOD], :expr_beg],
|
|
47
|
+
["when", [:WHEN, :WHEN], :expr_beg],
|
|
48
|
+
["while", [:WHILE, :WHILE_MOD], :expr_beg],
|
|
49
|
+
["yield", [:YIELD, :YIELD], :expr_arg]
|
|
50
|
+
].map { |decl| KeywordTable.new(*decl) }
|
|
51
|
+
|
|
52
|
+
def self.map
|
|
53
|
+
unless @map
|
|
54
|
+
@map = {}
|
|
55
|
+
KEYWORDS.each { |k| @map[k.name] = k }
|
|
56
|
+
end
|
|
57
|
+
@map
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def self.keyword(kw)
|
|
61
|
+
map[kw]
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -1,59 +1,24 @@
|
|
|
1
|
-
require 'opal/core_ext'
|
|
2
|
-
require 'opal/grammar'
|
|
3
|
-
require 'opal/grammar_helpers'
|
|
4
|
-
require 'opal/lexer_scope'
|
|
5
1
|
require 'strscan'
|
|
2
|
+
require 'opal/parser/keywords'
|
|
6
3
|
|
|
7
4
|
module Opal
|
|
5
|
+
class Lexer
|
|
8
6
|
|
|
9
|
-
|
|
7
|
+
attr_reader :line, :scope_line, :scope
|
|
10
8
|
|
|
11
|
-
|
|
9
|
+
attr_accessor :lex_state, :strterm
|
|
12
10
|
|
|
13
|
-
def initialize
|
|
11
|
+
def initialize(source, file)
|
|
14
12
|
@lex_state = :expr_beg
|
|
15
13
|
@cond = 0
|
|
16
14
|
@cmdarg = 0
|
|
17
15
|
@line = 1
|
|
18
|
-
@
|
|
16
|
+
@file = file
|
|
19
17
|
|
|
20
|
-
@
|
|
18
|
+
@scanner = StringScanner.new(source)
|
|
19
|
+
@scanner_stack = [@scanner]
|
|
21
20
|
end
|
|
22
21
|
|
|
23
|
-
def s(*parts)
|
|
24
|
-
sexp = Array.new(parts)
|
|
25
|
-
sexp.line = @line
|
|
26
|
-
sexp
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def parse(source, file = '(string)')
|
|
30
|
-
@file = file
|
|
31
|
-
@scanner = StringScanner.new source
|
|
32
|
-
push_scope
|
|
33
|
-
result = do_parse
|
|
34
|
-
pop_scope
|
|
35
|
-
|
|
36
|
-
result
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def on_error(t, val, vstack)
|
|
40
|
-
raise "parse error on value #{val.inspect} (#{token_to_str(t) || '?'}) :#{@file}:#{@line}"
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def push_scope(type = nil)
|
|
44
|
-
top = @scopes.last
|
|
45
|
-
scope = LexerScope.new type
|
|
46
|
-
scope.parent = top
|
|
47
|
-
@scopes << scope
|
|
48
|
-
@scope = scope
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def pop_scope
|
|
52
|
-
@scopes.pop
|
|
53
|
-
@scope = @scopes.last
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
|
|
57
22
|
def cond_push(n)
|
|
58
23
|
@cond = (@cond << 1) | (n & 1)
|
|
59
24
|
end
|
|
@@ -110,14 +75,22 @@ module Opal
|
|
|
110
75
|
@scanner.check(/\s/)
|
|
111
76
|
end
|
|
112
77
|
|
|
78
|
+
def next_token
|
|
79
|
+
self.yylex
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def strterm_expand?(strterm)
|
|
83
|
+
type = strterm[:type]
|
|
84
|
+
|
|
85
|
+
[:dquote, :dsym, :dword, :heredoc, :xquote, :regexp].include? type
|
|
86
|
+
end
|
|
87
|
+
|
|
113
88
|
def next_string_token
|
|
114
|
-
|
|
115
|
-
str_parse = @string_parse
|
|
89
|
+
str_parse = self.strterm
|
|
116
90
|
scanner = @scanner
|
|
117
91
|
space = false
|
|
118
92
|
|
|
119
|
-
|
|
120
|
-
interpolate = str_parse[:interpolate]
|
|
93
|
+
expand = strterm_expand?(str_parse)
|
|
121
94
|
|
|
122
95
|
words = ['w', 'W'].include? str_parse[:beg]
|
|
123
96
|
|
|
@@ -126,6 +99,23 @@ module Opal
|
|
|
126
99
|
# if not end of string, so we must be parsing contents
|
|
127
100
|
str_buffer = []
|
|
128
101
|
|
|
102
|
+
if str_parse[:type] == :heredoc
|
|
103
|
+
eos_regx = /[ \t]*#{Regexp.escape(str_parse[:end])}(\r*\n|$)/
|
|
104
|
+
|
|
105
|
+
if scanner.check(eos_regx)
|
|
106
|
+
scanner.scan(/[ \t]*#{Regexp.escape(str_parse[:end])}/)
|
|
107
|
+
self.strterm = nil
|
|
108
|
+
|
|
109
|
+
if str_parse[:scanner]
|
|
110
|
+
@scanner_stack << str_parse[:scanner]
|
|
111
|
+
@scanner = str_parse[:scanner]
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
@lex_state = :expr_end
|
|
115
|
+
return :STRING_END, scanner.matched
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
129
119
|
# see if we can read end of string/xstring/regecp markers
|
|
130
120
|
# if scanner.scan /#{str_parse[:end]}/
|
|
131
121
|
if scanner.scan Regexp.new(Regexp.escape(str_parse[:end]))
|
|
@@ -134,7 +124,7 @@ module Opal
|
|
|
134
124
|
scanner.pos -= 1
|
|
135
125
|
return :SPACE, ' '
|
|
136
126
|
end
|
|
137
|
-
|
|
127
|
+
self.strterm = nil
|
|
138
128
|
|
|
139
129
|
if str_parse[:balance]
|
|
140
130
|
if str_parse[:nesting] == 0
|
|
@@ -148,7 +138,7 @@ module Opal
|
|
|
148
138
|
else
|
|
149
139
|
str_buffer << scanner.matched
|
|
150
140
|
str_parse[:nesting] -= 1
|
|
151
|
-
|
|
141
|
+
self.strterm = str_parse
|
|
152
142
|
end
|
|
153
143
|
|
|
154
144
|
elsif ['"', "'"].include? str_parse[:beg]
|
|
@@ -165,6 +155,11 @@ module Opal
|
|
|
165
155
|
return :REGEXP_END, result
|
|
166
156
|
|
|
167
157
|
else
|
|
158
|
+
if str_parse[:scanner]
|
|
159
|
+
@scanner_stack << str_parse[:scanner]
|
|
160
|
+
@scanner = str_parse[:scanner]
|
|
161
|
+
end
|
|
162
|
+
|
|
168
163
|
@lex_state = :expr_end
|
|
169
164
|
return :STRING_END, scanner.matched
|
|
170
165
|
end
|
|
@@ -177,14 +172,14 @@ module Opal
|
|
|
177
172
|
str_parse[:nesting] += 1
|
|
178
173
|
elsif scanner.check(/#[@$]/)
|
|
179
174
|
scanner.scan(/#/)
|
|
180
|
-
if
|
|
175
|
+
if expand
|
|
181
176
|
return :STRING_DVAR, scanner.matched
|
|
182
177
|
else
|
|
183
178
|
str_buffer << scanner.matched
|
|
184
179
|
end
|
|
185
180
|
|
|
186
181
|
elsif scanner.scan(/#\{/)
|
|
187
|
-
if
|
|
182
|
+
if expand
|
|
188
183
|
# we are into ruby code, so stop parsing content (for now)
|
|
189
184
|
return :STRING_DBEG, scanner.matched
|
|
190
185
|
else
|
|
@@ -196,19 +191,78 @@ module Opal
|
|
|
196
191
|
str_buffer << '#'
|
|
197
192
|
end
|
|
198
193
|
|
|
199
|
-
|
|
194
|
+
if str_parse[:type] == :heredoc
|
|
195
|
+
add_heredoc_content str_buffer, str_parse
|
|
196
|
+
else
|
|
197
|
+
add_string_content str_buffer, str_parse
|
|
198
|
+
end
|
|
199
|
+
|
|
200
200
|
complete_str = str_buffer.join ''
|
|
201
201
|
@line += complete_str.count("\n")
|
|
202
202
|
return :STRING_CONTENT, complete_str
|
|
203
203
|
end
|
|
204
204
|
|
|
205
|
+
def add_heredoc_content(str_buffer, str_parse)
|
|
206
|
+
scanner = @scanner
|
|
207
|
+
|
|
208
|
+
eos_regx = /[ \t]*#{Regexp.escape(str_parse[:end])}(\r*\n|$)/
|
|
209
|
+
expand = true
|
|
210
|
+
|
|
211
|
+
until scanner.eos?
|
|
212
|
+
c = nil
|
|
213
|
+
handled = true
|
|
214
|
+
|
|
215
|
+
if scanner.scan(/\n/)
|
|
216
|
+
c = scanner.matched
|
|
217
|
+
elsif scanner.check(eos_regx) && scanner.bol?
|
|
218
|
+
break # eos!
|
|
219
|
+
elsif expand && scanner.check(/#(?=[\$\@\{])/)
|
|
220
|
+
break
|
|
221
|
+
elsif scanner.scan(/\\/)
|
|
222
|
+
if str_parse[:regexp]
|
|
223
|
+
if scanner.scan(/(.)/)
|
|
224
|
+
c = "\\" + scanner.matched
|
|
225
|
+
end
|
|
226
|
+
else
|
|
227
|
+
c = if scanner.scan(/n/)
|
|
228
|
+
"\n"
|
|
229
|
+
elsif scanner.scan(/r/)
|
|
230
|
+
"\r"
|
|
231
|
+
elsif scanner.scan(/\n/)
|
|
232
|
+
"\n"
|
|
233
|
+
elsif scanner.scan(/t/)
|
|
234
|
+
"\t"
|
|
235
|
+
else
|
|
236
|
+
# escaped char doesnt need escaping, so just return it
|
|
237
|
+
scanner.scan(/./)
|
|
238
|
+
scanner.matched
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
else
|
|
242
|
+
handled = false
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
unless handled
|
|
246
|
+
reg = Regexp.new("[^#{Regexp.escape str_parse[:end]}\#\0\\\\\n]+|.")
|
|
247
|
+
|
|
248
|
+
scanner.scan reg
|
|
249
|
+
c = scanner.matched
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
c ||= scanner.matched
|
|
253
|
+
str_buffer << c
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
raise "reached EOF while in string" if scanner.eos?
|
|
257
|
+
end
|
|
258
|
+
|
|
205
259
|
def add_string_content(str_buffer, str_parse)
|
|
206
260
|
scanner = @scanner
|
|
207
261
|
# regexp for end of string/regexp
|
|
208
262
|
# end_str_re = /#{str_parse[:end]}/
|
|
209
263
|
end_str_re = Regexp.new(Regexp.escape(str_parse[:end]))
|
|
210
|
-
|
|
211
|
-
|
|
264
|
+
|
|
265
|
+
expand = strterm_expand?(str_parse)
|
|
212
266
|
|
|
213
267
|
words = ['W', 'w'].include? str_parse[:beg]
|
|
214
268
|
|
|
@@ -237,7 +291,7 @@ module Opal
|
|
|
237
291
|
scanner.pos -= 1
|
|
238
292
|
break
|
|
239
293
|
|
|
240
|
-
elsif
|
|
294
|
+
elsif expand && scanner.check(/#(?=[\$\@\{])/)
|
|
241
295
|
break
|
|
242
296
|
|
|
243
297
|
#elsif scanner.scan(/\\\\/)
|
|
@@ -271,14 +325,12 @@ module Opal
|
|
|
271
325
|
reg = if words
|
|
272
326
|
Regexp.new("[^#{Regexp.escape str_parse[:end]}\#\0\n\ \\\\]+|.")
|
|
273
327
|
elsif str_parse[:balance]
|
|
274
|
-
#puts "using tis regexp"
|
|
275
328
|
Regexp.new("[^#{Regexp.escape str_parse[:end]}#{Regexp.escape str_parse[:beg]}\#\0\\\\]+|.")
|
|
276
329
|
else
|
|
277
330
|
Regexp.new("[^#{Regexp.escape str_parse[:end]}\#\0\\\\]+|.")
|
|
278
331
|
end
|
|
279
332
|
|
|
280
333
|
scanner.scan reg
|
|
281
|
-
#puts scanner.matched
|
|
282
334
|
c = scanner.matched
|
|
283
335
|
end
|
|
284
336
|
|
|
@@ -289,16 +341,121 @@ module Opal
|
|
|
289
341
|
raise "reached EOF while in string" if scanner.eos?
|
|
290
342
|
end
|
|
291
343
|
|
|
292
|
-
def
|
|
293
|
-
|
|
294
|
-
|
|
344
|
+
def heredoc_identifier
|
|
345
|
+
if @scanner.scan(/(-?)['"]?(\w+)['"]?/)
|
|
346
|
+
heredoc = @scanner[2]
|
|
347
|
+
self.strterm = { :type => :heredoc, :beg => heredoc, :end => heredoc }
|
|
348
|
+
|
|
349
|
+
# if ruby code at end of line after heredoc, we have to store it to
|
|
350
|
+
# parse after heredoc is finished parsing
|
|
351
|
+
end_of_line = @scanner.scan(/.*\n/)
|
|
352
|
+
self.strterm[:scanner] = StringScanner.new(end_of_line) if end_of_line != "\n"
|
|
353
|
+
|
|
354
|
+
return :STRING_BEG, heredoc
|
|
355
|
+
end
|
|
356
|
+
end
|
|
357
|
+
|
|
358
|
+
def process_identifier(matched, cmd_start)
|
|
359
|
+
scanner = @scanner
|
|
360
|
+
matched = scanner.matched
|
|
361
|
+
|
|
362
|
+
if scanner.peek(2) != '::' && scanner.scan(/:/)
|
|
363
|
+
@lex_state = :expr_beg
|
|
364
|
+
return :LABEL, "#{matched}"
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
if matched == 'defined?'
|
|
368
|
+
if after_operator?
|
|
369
|
+
@lex_state = :expr_end
|
|
370
|
+
return :IDENTIFIER, matched
|
|
371
|
+
end
|
|
372
|
+
|
|
373
|
+
@lex_state = :expr_arg
|
|
374
|
+
return :DEFINED, 'defined?'
|
|
375
|
+
end
|
|
376
|
+
|
|
377
|
+
if matched.end_with? '?', '!'
|
|
378
|
+
result = :IDENTIFIER
|
|
379
|
+
else
|
|
380
|
+
if @lex_state == :expr_fname
|
|
381
|
+
if scanner.scan(/\=/)
|
|
382
|
+
result = :IDENTIFIER
|
|
383
|
+
matched += scanner.matched
|
|
384
|
+
end
|
|
385
|
+
|
|
386
|
+
elsif matched =~ /^[A-Z]/
|
|
387
|
+
result = :CONSTANT
|
|
388
|
+
else
|
|
389
|
+
result = :IDENTIFIER
|
|
390
|
+
end
|
|
391
|
+
end
|
|
295
392
|
|
|
296
|
-
|
|
393
|
+
if @lex_state != :expr_dot and kw = Keywords.keyword(matched)
|
|
394
|
+
old_state = @lex_state
|
|
395
|
+
@lex_state = kw.state
|
|
396
|
+
|
|
397
|
+
if old_state == :expr_fname
|
|
398
|
+
return [kw.id[0], kw.name]
|
|
399
|
+
end
|
|
400
|
+
|
|
401
|
+
if @lex_state == :expr_beg
|
|
402
|
+
cmd_start = true
|
|
403
|
+
end
|
|
404
|
+
|
|
405
|
+
if matched == "do"
|
|
406
|
+
if after_operator?
|
|
407
|
+
@lex_state = :expr_end
|
|
408
|
+
return :IDENTIFIER, matched
|
|
409
|
+
end
|
|
410
|
+
|
|
411
|
+
if @start_of_lambda
|
|
412
|
+
@start_of_lambda = false
|
|
413
|
+
@lex_state = :expr_beg
|
|
414
|
+
return [:DO_LAMBDA, scanner.matched]
|
|
415
|
+
elsif cond?
|
|
416
|
+
@lex_state = :expr_beg
|
|
417
|
+
return :DO_COND, matched
|
|
418
|
+
elsif cmdarg? && @lex_state != :expr_cmdarg
|
|
419
|
+
@lex_state = :expr_beg
|
|
420
|
+
return :DO_BLOCK, matched
|
|
421
|
+
elsif @lex_state == :expr_endarg
|
|
422
|
+
return :DO_BLOCK, matched
|
|
423
|
+
else
|
|
424
|
+
@lex_state = :expr_beg
|
|
425
|
+
return :DO, matched
|
|
426
|
+
end
|
|
427
|
+
else
|
|
428
|
+
if old_state == :expr_beg or old_state == :expr_value
|
|
429
|
+
return [kw.id[0], matched]
|
|
430
|
+
else
|
|
431
|
+
if kw.id[0] != kw.id[1]
|
|
432
|
+
@lex_state = :expr_beg
|
|
433
|
+
end
|
|
434
|
+
|
|
435
|
+
return [kw.id[1], matched]
|
|
436
|
+
end
|
|
437
|
+
end
|
|
438
|
+
end
|
|
439
|
+
|
|
440
|
+
if [:expr_beg, :expr_dot, :expr_mid, :expr_arg, :expr_cmdarg].include? @lex_state
|
|
441
|
+
@lex_state = cmd_start ? :expr_cmdarg : :expr_arg
|
|
442
|
+
else
|
|
443
|
+
@lex_state = :expr_end
|
|
444
|
+
end
|
|
445
|
+
|
|
446
|
+
return [matched =~ /^[A-Z]/ ? :CONSTANT : :IDENTIFIER, matched]
|
|
447
|
+
end
|
|
448
|
+
|
|
449
|
+
def yylex
|
|
297
450
|
scanner = @scanner
|
|
298
451
|
@space_seen = false
|
|
299
452
|
cmd_start = false
|
|
300
453
|
c = ''
|
|
301
454
|
|
|
455
|
+
if self.strterm
|
|
456
|
+
return next_string_token
|
|
457
|
+
end
|
|
458
|
+
|
|
302
459
|
while true
|
|
303
460
|
if scanner.scan(/\ |\t|\r/)
|
|
304
461
|
@space_seen = true
|
|
@@ -370,8 +527,8 @@ module Opal
|
|
|
370
527
|
return :OP_ASGN, '*'
|
|
371
528
|
else
|
|
372
529
|
result = '*'
|
|
373
|
-
if @lex_state == :expr_fname
|
|
374
|
-
@lex_state = :
|
|
530
|
+
if @lex_state == :expr_fname or @lex_state == :expr_dot
|
|
531
|
+
@lex_state = :expr_arg
|
|
375
532
|
return '*', result
|
|
376
533
|
elsif @space_seen && scanner.check(/\S/)
|
|
377
534
|
@lex_state = :expr_beg
|
|
@@ -409,6 +566,7 @@ module Opal
|
|
|
409
566
|
if @lex_state == :expr_beg and !@space_seen
|
|
410
567
|
if scanner.scan(/begin/) and space?
|
|
411
568
|
scanner.scan(/(.*)/) # end of line
|
|
569
|
+
line_count = 0
|
|
412
570
|
|
|
413
571
|
while true
|
|
414
572
|
if scanner.eos?
|
|
@@ -416,10 +574,12 @@ module Opal
|
|
|
416
574
|
end
|
|
417
575
|
|
|
418
576
|
if scanner.scan(/\=end/) and space?
|
|
577
|
+
@line += line_count
|
|
419
578
|
return next_token
|
|
420
579
|
end
|
|
421
580
|
|
|
422
581
|
if scanner.scan(/\n/)
|
|
582
|
+
line_count += 1
|
|
423
583
|
next
|
|
424
584
|
end
|
|
425
585
|
|
|
@@ -451,15 +611,15 @@ module Opal
|
|
|
451
611
|
return '=', '='
|
|
452
612
|
|
|
453
613
|
elsif scanner.scan(/\"/)
|
|
454
|
-
|
|
614
|
+
self.strterm = { :type => :dquote, :beg => '"', :end => '"' }
|
|
455
615
|
return :STRING_BEG, scanner.matched
|
|
456
616
|
|
|
457
617
|
elsif scanner.scan(/\'/)
|
|
458
|
-
|
|
618
|
+
self.strterm = { :type => :squote, :beg => "'", :end => "'" }
|
|
459
619
|
return :STRING_BEG, scanner.matched
|
|
460
620
|
|
|
461
621
|
elsif scanner.scan(/\`/)
|
|
462
|
-
|
|
622
|
+
self.strterm = { :type => :xquote, :beg => "`", :end => "`" }
|
|
463
623
|
return :XSTRING_BEG, scanner.matched
|
|
464
624
|
|
|
465
625
|
elsif scanner.scan(/\&/)
|
|
@@ -509,48 +669,48 @@ module Opal
|
|
|
509
669
|
elsif scanner.scan(/\%W/)
|
|
510
670
|
start_word = scanner.scan(/./)
|
|
511
671
|
end_word = { '(' => ')', '[' => ']', '{' => '}' }[start_word] || start_word
|
|
512
|
-
|
|
672
|
+
self.strterm = { :type => :dword, :beg => 'W', :end => end_word }
|
|
513
673
|
scanner.scan(/\s*/)
|
|
514
674
|
return :WORDS_BEG, scanner.matched
|
|
515
675
|
|
|
516
|
-
elsif scanner.scan(/\%w/)
|
|
676
|
+
elsif scanner.scan(/\%w/) or scanner.scan(/\%i/)
|
|
517
677
|
start_word = scanner.scan(/./)
|
|
518
678
|
end_word = { '(' => ')', '[' => ']', '{' => '}' }[start_word] || start_word
|
|
519
|
-
|
|
679
|
+
self.strterm = { :type => :sword, :beg => 'w', :end => end_word }
|
|
520
680
|
scanner.scan(/\s*/)
|
|
521
681
|
return :AWORDS_BEG, scanner.matched
|
|
522
682
|
|
|
523
683
|
elsif scanner.scan(/\%[Qq]/)
|
|
524
|
-
|
|
684
|
+
type = scanner.matched.end_with?('Q') ? :dquote : :squote
|
|
525
685
|
start_word = scanner.scan(/./)
|
|
526
686
|
end_word = { '(' => ')', '[' => ']', '{' => '}' }[start_word] || start_word
|
|
527
|
-
|
|
687
|
+
self.strterm = { :type => type, :beg => start_word, :end => end_word, :balance => true, :nesting => 0 }
|
|
528
688
|
return :STRING_BEG, scanner.matched
|
|
529
689
|
|
|
530
690
|
elsif scanner.scan(/\%x/)
|
|
531
691
|
start_word = scanner.scan(/./)
|
|
532
692
|
end_word = { '(' => ')', '[' => ']', '{' => '}' }[start_word] || start_word
|
|
533
|
-
|
|
693
|
+
self.strterm = { :type => :xquote, :beg => start_word, :end => end_word, :balance => true, :nesting => 0 }
|
|
534
694
|
return :XSTRING_BEG, scanner.matched
|
|
535
695
|
|
|
536
696
|
elsif scanner.scan(/\%r/)
|
|
537
697
|
start_word = scanner.scan(/./)
|
|
538
698
|
end_word = { '(' => ')', '[' => ']', '{' => '}' }[start_word] || start_word
|
|
539
|
-
|
|
699
|
+
self.strterm = { :type => :regexp, :beg => start_word, :end => end_word, :regexp => true, :balance => true, :nesting => 0 }
|
|
540
700
|
return :REGEXP_BEG, scanner.matched
|
|
541
701
|
|
|
542
702
|
elsif scanner.scan(/\//)
|
|
543
703
|
if [:expr_beg, :expr_mid].include? @lex_state
|
|
544
|
-
|
|
704
|
+
self.strterm = { :type => :regexp, :beg => '/', :end => '/', :regexp => true }
|
|
545
705
|
return :REGEXP_BEG, scanner.matched
|
|
546
706
|
elsif scanner.scan(/\=/)
|
|
547
707
|
@lex_state = :expr_beg
|
|
548
708
|
return :OP_ASGN, '/'
|
|
549
|
-
elsif @lex_state == :expr_fname
|
|
550
|
-
@lex_state = :
|
|
709
|
+
elsif @lex_state == :expr_fname or @lex_state == :expr_dot
|
|
710
|
+
@lex_state = :expr_arg
|
|
551
711
|
elsif @lex_state == :expr_cmdarg || @lex_state == :expr_arg
|
|
552
712
|
if !scanner.check(/\s/) && @space_seen
|
|
553
|
-
|
|
713
|
+
self.strterm = { :type => :regexp, :beg => '/', :end => '/', :regexp => true }
|
|
554
714
|
return :REGEXP_BEG, scanner.matched
|
|
555
715
|
end
|
|
556
716
|
else
|
|
@@ -565,14 +725,15 @@ module Opal
|
|
|
565
725
|
return :OP_ASGN, '%'
|
|
566
726
|
elsif scanner.check(/[^\s]/)
|
|
567
727
|
if @lex_state == :expr_beg or (@lex_state == :expr_arg && @space_seen)
|
|
568
|
-
interpolate = true
|
|
569
728
|
start_word = scanner.scan(/./)
|
|
570
729
|
end_word = { '(' => ')', '[' => ']', '{' => '}' }[start_word] || start_word
|
|
571
|
-
|
|
730
|
+
self.strterm = { :type => :dquote, :beg => start_word, :end => end_word, :balance => true, :nesting => 0 }
|
|
572
731
|
return :STRING_BEG, scanner.matched
|
|
573
732
|
end
|
|
574
733
|
end
|
|
575
|
-
|
|
734
|
+
|
|
735
|
+
@lex_state = after_operator? ? :expr_arg : :expr_beg
|
|
736
|
+
|
|
576
737
|
return '%', '%'
|
|
577
738
|
|
|
578
739
|
elsif scanner.scan(/\\/)
|
|
@@ -667,7 +828,7 @@ module Opal
|
|
|
667
828
|
return '::', scanner.matched
|
|
668
829
|
|
|
669
830
|
elsif scanner.scan(/\:/)
|
|
670
|
-
if
|
|
831
|
+
if end? || scanner.check(/\s/)
|
|
671
832
|
unless scanner.check(/\w/)
|
|
672
833
|
@lex_state = :expr_beg
|
|
673
834
|
return ':', ':'
|
|
@@ -678,9 +839,9 @@ module Opal
|
|
|
678
839
|
end
|
|
679
840
|
|
|
680
841
|
if scanner.scan(/\'/)
|
|
681
|
-
|
|
842
|
+
self.strterm = { :type => :ssym, :beg => "'", :end => "'" }
|
|
682
843
|
elsif scanner.scan(/\"/)
|
|
683
|
-
|
|
844
|
+
self.strterm = { :type => :dsym, :beg => '"', :end => '"' }
|
|
684
845
|
end
|
|
685
846
|
|
|
686
847
|
@lex_state = :expr_fname
|
|
@@ -690,8 +851,8 @@ module Opal
|
|
|
690
851
|
@lex_state = :expr_beg
|
|
691
852
|
return :OP_ASGN, '^'
|
|
692
853
|
elsif scanner.scan(/\^/)
|
|
693
|
-
if @lex_state == :expr_fname
|
|
694
|
-
@lex_state = :
|
|
854
|
+
if @lex_state == :expr_fname or @lex_state == :expr_dot
|
|
855
|
+
@lex_state = :expr_arg
|
|
695
856
|
return '^', scanner.matched
|
|
696
857
|
end
|
|
697
858
|
|
|
@@ -703,40 +864,41 @@ module Opal
|
|
|
703
864
|
@lex_state = :expr_beg
|
|
704
865
|
return :OP_ASGN, '<<'
|
|
705
866
|
elsif scanner.scan(/\<\</)
|
|
706
|
-
if @lex_state == :expr_fname
|
|
707
|
-
@lex_state = :
|
|
867
|
+
if @lex_state == :expr_fname or @lex_state == :expr_dot
|
|
868
|
+
@lex_state = :expr_arg
|
|
708
869
|
return '<<', '<<'
|
|
709
|
-
elsif ![:
|
|
710
|
-
if
|
|
711
|
-
|
|
712
|
-
# for now just scrap rest of line + skip down one line for
|
|
713
|
-
# string content
|
|
714
|
-
scanner.scan(/.*\n/)
|
|
715
|
-
@string_parse = { :beg => heredoc, :end => heredoc, :interpolate => true }
|
|
716
|
-
return :STRING_BEG, heredoc
|
|
870
|
+
elsif ![:expr_dot, :expr_class].include?(@lex_state) && !end? && (!arg? || @space_seen)
|
|
871
|
+
if token = heredoc_identifier
|
|
872
|
+
return token
|
|
717
873
|
end
|
|
874
|
+
|
|
718
875
|
@lex_state = :expr_beg
|
|
719
876
|
return '<<', '<<'
|
|
720
877
|
end
|
|
721
878
|
@lex_state = :expr_beg
|
|
722
879
|
return '<<', '<<'
|
|
723
880
|
elsif scanner.scan(/\<\=\>/)
|
|
724
|
-
if
|
|
725
|
-
@lex_state = :
|
|
881
|
+
if after_operator?
|
|
882
|
+
@lex_state = :expr_arg
|
|
726
883
|
else
|
|
884
|
+
if @lex_state == :expr_class
|
|
885
|
+
cmd_start = true
|
|
886
|
+
end
|
|
887
|
+
|
|
727
888
|
@lex_state = :expr_beg
|
|
728
889
|
end
|
|
890
|
+
|
|
729
891
|
return '<=>', '<=>'
|
|
730
892
|
elsif scanner.scan(/\<\=/)
|
|
731
|
-
if @lex_state == :expr_fname
|
|
732
|
-
@lex_state = :
|
|
893
|
+
if @lex_state == :expr_fname or @lex_state == :expr_dot
|
|
894
|
+
@lex_state = :expr_arg
|
|
733
895
|
else
|
|
734
896
|
@lex_state = :expr_beg
|
|
735
897
|
end
|
|
736
898
|
return '<=', '<='
|
|
737
899
|
elsif scanner.scan(/\</)
|
|
738
|
-
if @lex_state == :expr_fname
|
|
739
|
-
@lex_state = :
|
|
900
|
+
if @lex_state == :expr_fname or @lex_state == :expr_dot
|
|
901
|
+
@lex_state = :expr_arg
|
|
740
902
|
else
|
|
741
903
|
@lex_state = :expr_beg
|
|
742
904
|
end
|
|
@@ -754,14 +916,14 @@ module Opal
|
|
|
754
916
|
end
|
|
755
917
|
return '>>', '>>'
|
|
756
918
|
elsif scanner.scan(/\>\=/)
|
|
757
|
-
if @lex_state == :expr_fname
|
|
919
|
+
if @lex_state == :expr_fname or @lex_state == :expr_dot
|
|
758
920
|
@lex_state = :expr_end
|
|
759
921
|
else
|
|
760
922
|
@lex_state = :expr_beg
|
|
761
923
|
end
|
|
762
924
|
return '>=', scanner.matched
|
|
763
925
|
elsif scanner.scan(/\>/)
|
|
764
|
-
if @lex_state == :expr_fname
|
|
926
|
+
if @lex_state == :expr_fname or @lex_state == :expr_dot
|
|
765
927
|
@lex_state = :expr_arg
|
|
766
928
|
else
|
|
767
929
|
@lex_state = :expr_beg
|
|
@@ -782,8 +944,8 @@ module Opal
|
|
|
782
944
|
if @lex_state == :expr_beg || @lex_state == :expr_mid
|
|
783
945
|
@lex_state = :expr_mid
|
|
784
946
|
return [sign, sign]
|
|
785
|
-
elsif @lex_state == :expr_fname
|
|
786
|
-
@lex_state = :
|
|
947
|
+
elsif @lex_state == :expr_fname or @lex_state == :expr_dot
|
|
948
|
+
@lex_state = :expr_arg
|
|
787
949
|
return [:IDENTIFIER, result + scanner.matched] if scanner.scan(/@/)
|
|
788
950
|
return [result, result]
|
|
789
951
|
end
|
|
@@ -804,12 +966,12 @@ module Opal
|
|
|
804
966
|
return [result, result]
|
|
805
967
|
|
|
806
968
|
elsif scanner.scan(/\?/)
|
|
807
|
-
if
|
|
969
|
+
if end?
|
|
808
970
|
@lex_state = :expr_beg
|
|
809
971
|
return '?', scanner.matched
|
|
810
972
|
end
|
|
811
973
|
|
|
812
|
-
unless scanner.check(/\ |\t|\r/)
|
|
974
|
+
unless scanner.check(/\ |\t|\r|\s/)
|
|
813
975
|
@lex_state = :expr_end
|
|
814
976
|
return :STRING, scanner.scan(/./)
|
|
815
977
|
end
|
|
@@ -896,229 +1058,18 @@ module Opal
|
|
|
896
1058
|
end
|
|
897
1059
|
|
|
898
1060
|
elsif scanner.scan(/(\w)+[\?\!]?/)
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
@lex_state = :expr_beg
|
|
902
|
-
return :LABEL, "#{matched}"
|
|
903
|
-
end
|
|
904
|
-
|
|
905
|
-
case matched
|
|
906
|
-
when 'class'
|
|
907
|
-
if @lex_state == :expr_dot
|
|
908
|
-
@lex_state = :expr_end
|
|
909
|
-
return :IDENTIFIER, matched
|
|
910
|
-
end
|
|
911
|
-
@lex_state = :expr_class
|
|
912
|
-
return :CLASS, matched
|
|
913
|
-
|
|
914
|
-
when 'module'
|
|
915
|
-
return :IDENTIFIER, matched if @lex_state == :expr_dot
|
|
916
|
-
@lex_state = :expr_class
|
|
917
|
-
return :MODULE, matched
|
|
918
|
-
|
|
919
|
-
when 'defined?'
|
|
920
|
-
return :IDENTIFIER, matched if @lex_state == :expr_dot
|
|
921
|
-
@lex_state = :expr_arg
|
|
922
|
-
return :DEFINED, 'defined?'
|
|
923
|
-
|
|
924
|
-
when 'def'
|
|
925
|
-
@lex_state = :expr_fname
|
|
926
|
-
@scope_line = @line
|
|
927
|
-
return :DEF, matched
|
|
928
|
-
|
|
929
|
-
when 'undef'
|
|
930
|
-
@lex_state = :expr_fname
|
|
931
|
-
return :UNDEF, matched
|
|
932
|
-
|
|
933
|
-
when 'end'
|
|
934
|
-
if [:expr_dot, :expr_fname].include? @lex_state
|
|
935
|
-
@lex_state = :expr_end
|
|
936
|
-
return :IDENTIFIER, matched
|
|
937
|
-
end
|
|
938
|
-
|
|
939
|
-
@lex_state = :expr_end
|
|
940
|
-
return :END, matched
|
|
941
|
-
|
|
942
|
-
when 'do'
|
|
943
|
-
#puts cond?
|
|
944
|
-
#puts cmdarg?
|
|
945
|
-
#nputs @lex_state
|
|
946
|
-
if @start_of_lambda
|
|
947
|
-
@start_of_lambda = false
|
|
948
|
-
@lex_state = :expr_beg
|
|
949
|
-
return [:DO_LAMBDA, scanner.matched]
|
|
950
|
-
elsif cond?
|
|
951
|
-
@lex_state = :expr_beg
|
|
952
|
-
return :DO_COND, matched
|
|
953
|
-
elsif cmdarg? && @lex_state != :expr_cmdarg
|
|
954
|
-
@lex_state = :expr_beg
|
|
955
|
-
return :DO_BLOCK, matched
|
|
956
|
-
elsif @lex_state == :expr_endarg
|
|
957
|
-
return :DO_BLOCK, matched
|
|
958
|
-
else
|
|
959
|
-
@lex_state = :expr_beg
|
|
960
|
-
return :DO, matched
|
|
961
|
-
end
|
|
962
|
-
|
|
963
|
-
when 'if'
|
|
964
|
-
return :IF, matched if @lex_state == :expr_beg
|
|
965
|
-
@lex_state = :expr_beg
|
|
966
|
-
return :IF_MOD, matched
|
|
967
|
-
|
|
968
|
-
when 'unless'
|
|
969
|
-
return :UNLESS, matched if @lex_state == :expr_beg
|
|
970
|
-
@lex_state = :expr_beg
|
|
971
|
-
return :UNLESS_MOD, matched
|
|
972
|
-
|
|
973
|
-
when 'else'
|
|
974
|
-
return :ELSE, matched
|
|
975
|
-
|
|
976
|
-
when 'elsif'
|
|
977
|
-
return :ELSIF, matched
|
|
978
|
-
|
|
979
|
-
when 'self'
|
|
980
|
-
@lex_state = :expr_end unless @lex_state == :expr_fname
|
|
981
|
-
return :SELF, matched
|
|
982
|
-
|
|
983
|
-
when 'true'
|
|
984
|
-
@lex_state = :expr_end
|
|
985
|
-
return :TRUE, matched
|
|
986
|
-
|
|
987
|
-
when 'false'
|
|
988
|
-
@lex_state = :expr_end
|
|
989
|
-
return :FALSE, matched
|
|
990
|
-
|
|
991
|
-
when 'nil'
|
|
992
|
-
@lex_state = :expr_end
|
|
993
|
-
return :NIL, matched
|
|
994
|
-
|
|
995
|
-
when '__LINE__'
|
|
996
|
-
@lex_state = :expr_end
|
|
997
|
-
return :LINE, @line.to_s
|
|
998
|
-
|
|
999
|
-
when '__FILE__'
|
|
1000
|
-
@lex_state = :expr_end
|
|
1001
|
-
return :FILE, matched
|
|
1002
|
-
|
|
1003
|
-
when 'begin'
|
|
1004
|
-
if [:expr_dot, :expr_fname].include? @lex_state
|
|
1005
|
-
@lex_state = :expr_end
|
|
1006
|
-
return :IDENTIFIER, matched
|
|
1007
|
-
end
|
|
1008
|
-
@lex_state = :expr_beg
|
|
1009
|
-
return :BEGIN, matched
|
|
1010
|
-
|
|
1011
|
-
when 'rescue'
|
|
1012
|
-
return :IDENTIFIER, matched if [:expr_dot, :expr_fname].include? @lex_state
|
|
1013
|
-
if @lex_state == :expr_beg
|
|
1014
|
-
@lex_state = :expr_mid
|
|
1015
|
-
return :RESCUE, matched
|
|
1016
|
-
end
|
|
1017
|
-
@lex_state = :expr_beg
|
|
1018
|
-
return :RESCUE_MOD, matched
|
|
1019
|
-
|
|
1020
|
-
when 'ensure'
|
|
1021
|
-
@lex_state = :expr_beg
|
|
1022
|
-
return :ENSURE, matched
|
|
1023
|
-
|
|
1024
|
-
when 'case'
|
|
1025
|
-
@lex_state = :expr_beg
|
|
1026
|
-
return :CASE, matched
|
|
1027
|
-
|
|
1028
|
-
when 'when'
|
|
1029
|
-
@lex_state = :expr_beg
|
|
1030
|
-
return :WHEN, matched
|
|
1031
|
-
|
|
1032
|
-
when 'or'
|
|
1033
|
-
@lex_state = :expr_beg
|
|
1034
|
-
return :OR, matched
|
|
1035
|
-
|
|
1036
|
-
when 'and'
|
|
1037
|
-
@lex_state = :expr_beg
|
|
1038
|
-
return :AND, matched
|
|
1039
|
-
|
|
1040
|
-
when 'not'
|
|
1041
|
-
@lex_state = :expr_arg
|
|
1042
|
-
return :NOT, matched
|
|
1043
|
-
|
|
1044
|
-
when 'return'
|
|
1045
|
-
@lex_state = :expr_mid
|
|
1046
|
-
return :RETURN, matched
|
|
1047
|
-
|
|
1048
|
-
when 'next'
|
|
1049
|
-
if @lex_state == :expr_dot || @lex_state == :expr_fname
|
|
1050
|
-
@lex_state = :expr_end
|
|
1051
|
-
return :IDENTIFIER, matched
|
|
1052
|
-
end
|
|
1053
|
-
|
|
1054
|
-
@lex_state = :expr_mid
|
|
1055
|
-
return :NEXT, matched
|
|
1056
|
-
|
|
1057
|
-
when 'redo'
|
|
1058
|
-
if @lex_state == :expr_dot || @lex_state == :expr_fname
|
|
1059
|
-
@lex_state = :expr_end
|
|
1060
|
-
return :IDENTIFIER, matched
|
|
1061
|
-
end
|
|
1062
|
-
|
|
1063
|
-
@lex_state = :expr_mid
|
|
1064
|
-
return :REDO, matched
|
|
1065
|
-
|
|
1066
|
-
when 'break'
|
|
1067
|
-
@lex_state = :expr_mid
|
|
1068
|
-
return :BREAK, matched
|
|
1069
|
-
|
|
1070
|
-
when 'super'
|
|
1071
|
-
@lex_state = :expr_arg
|
|
1072
|
-
return :SUPER, matched
|
|
1073
|
-
|
|
1074
|
-
when 'then'
|
|
1075
|
-
@lex_state = :expr_beg
|
|
1076
|
-
return :THEN, matched
|
|
1077
|
-
|
|
1078
|
-
when 'while'
|
|
1079
|
-
return :WHILE, matched if @lex_state == :expr_beg
|
|
1080
|
-
@lex_state = :expr_beg
|
|
1081
|
-
return :WHILE_MOD, matched
|
|
1082
|
-
|
|
1083
|
-
when 'until'
|
|
1084
|
-
return :UNTIL, matched if @lex_state == :expr_beg
|
|
1085
|
-
@lex_state = :expr_beg
|
|
1086
|
-
return :UNTIL_MOD, matched
|
|
1087
|
-
|
|
1088
|
-
when 'yield'
|
|
1089
|
-
@lex_state = :expr_arg
|
|
1090
|
-
return :YIELD, matched
|
|
1091
|
-
|
|
1092
|
-
when 'alias'
|
|
1093
|
-
@lex_state = :expr_fname
|
|
1094
|
-
return :ALIAS, matched
|
|
1095
|
-
end
|
|
1096
|
-
|
|
1097
|
-
matched = matched
|
|
1098
|
-
if scanner.peek(2) != '::' && scanner.scan(/\:/)
|
|
1099
|
-
return :LABEL, matched
|
|
1100
|
-
end
|
|
1101
|
-
|
|
1102
|
-
if @lex_state == :expr_fname
|
|
1103
|
-
if scanner.scan(/\=/)
|
|
1104
|
-
@lex_state = :expr_end
|
|
1105
|
-
return :IDENTIFIER, matched + scanner.matched
|
|
1106
|
-
end
|
|
1107
|
-
end
|
|
1061
|
+
return process_identifier scanner.matched, cmd_start
|
|
1062
|
+
end
|
|
1108
1063
|
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
@
|
|
1114
|
-
|
|
1115
|
-
|
|
1064
|
+
if scanner.eos?
|
|
1065
|
+
if @scanner_stack.size == 1 # our main scanner, we cant pop this
|
|
1066
|
+
return [false, false]
|
|
1067
|
+
else # we were probably parsing a heredoc, so pop that parser and continue
|
|
1068
|
+
@scanner_stack.pop
|
|
1069
|
+
@scanner = @scanner_stack.last
|
|
1070
|
+
return next_token
|
|
1116
1071
|
end
|
|
1117
|
-
|
|
1118
|
-
return [matched =~ /^[A-Z]/ ? :CONSTANT : :IDENTIFIER, matched]
|
|
1119
|
-
|
|
1120
1072
|
end
|
|
1121
|
-
return [false, false] if scanner.eos?
|
|
1122
1073
|
|
|
1123
1074
|
raise "Unexpected content in parsing stream `#{scanner.peek 5}` :#{@file}:#{@line}"
|
|
1124
1075
|
end
|