opal 0.2.2 → 0.3.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.
- data/.gitignore +5 -10
- data/LICENSE +75 -0
- data/README.md +55 -3
- data/Rakefile +62 -139
- data/bin/opal +7 -10
- data/gems/core/README.md +5 -0
- data/gems/core/Rakefile +7 -0
- data/gems/core/core.gemspec +13 -0
- data/gems/core/lib/core.rb +33 -0
- data/gems/core/lib/core/array.rb +1470 -0
- data/gems/core/lib/core/basic_object.rb +15 -0
- data/gems/core/lib/core/class.rb +31 -0
- data/gems/core/lib/core/dir.rb +26 -0
- data/gems/core/lib/core/error.rb +43 -0
- data/gems/core/lib/core/false_class.rb +21 -0
- data/gems/core/lib/core/file.rb +54 -0
- data/gems/core/lib/core/hash.rb +725 -0
- data/gems/core/lib/core/kernel.rb +240 -0
- data/gems/core/lib/core/module.rb +98 -0
- data/gems/core/lib/core/nil_class.rb +41 -0
- data/gems/core/lib/core/numeric.rb +370 -0
- data/gems/core/lib/core/proc.rb +11 -0
- data/gems/core/lib/core/range.rb +17 -0
- data/gems/core/lib/core/regexp.rb +18 -0
- data/gems/core/lib/core/string.rb +328 -0
- data/gems/core/lib/core/symbol.rb +15 -0
- data/gems/core/lib/core/top_self.rb +8 -0
- data/gems/core/lib/core/true_class.rb +20 -0
- data/gems/core/lib/core/vm.rb +16 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/append_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/assoc_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/at_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/clear_spec.rb +1 -1
- data/{opals/opal/opal → gems/core}/spec/core/array/collect_bang_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/collect_spec.rb +0 -0
- data/gems/core/spec/core/array/compact_spec.rb +41 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/concat_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/constructor_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/each_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/element_reference_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/first_spec.rb +1 -1
- data/{opals/opal/opal → gems/core}/spec/core/array/include_spec.rb +0 -0
- data/gems/core/spec/core/array/join_spec.rb +6 -0
- data/gems/core/spec/core/array/last_spec.rb +51 -0
- data/gems/core/spec/core/array/length_spec.rb +6 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/map_spec.rb +2 -0
- data/gems/core/spec/core/array/reverse_spec.rb +6 -0
- data/{opals/opal/opal → gems/core}/spec/core/builtin_constants/builtin_constants_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/false/and_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/false/inspect_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/false/or_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/false/to_s_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/false/xor_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/file/join_spec.rb +1 -1
- data/gems/core/spec/core/hash/assoc_spec.rb +32 -0
- data/{opals/opal/opal → gems/core}/spec/core/kernel/instance_eval_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/kernel/loop_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/kernel/raise_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/module/attr_accessor_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/number/lt_spec.rb +0 -0
- data/gems/core/spec/core/string/sub_spec.rb +24 -0
- data/{opals/opal/opal → gems/core}/spec/core/true/and_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/true/inspect_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/true/or_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/true/to_s_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/true/xor_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/language/and_spec.rb +2 -3
- data/{opals/opal/opal → gems/core}/spec/language/array_spec.rb +21 -5
- data/gems/core/spec/language/block_spec.rb +38 -0
- data/{opals/opal/opal → gems/core}/spec/language/break_spec.rb +0 -0
- data/gems/core/spec/language/case_spec.rb +103 -0
- data/{opals/opal/opal → gems/core}/spec/language/def_spec.rb +11 -1
- data/{opals/opal/opal → gems/core}/spec/language/eigenclass_spec.rb +0 -0
- data/gems/core/spec/language/file_spec.rb +13 -0
- data/gems/core/spec/language/fixtures/block.rb +21 -0
- data/gems/core/spec/language/fixtures/super.rb +293 -0
- data/{opals/opal/opal → gems/core}/spec/language/hash_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/language/if_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/language/loop_spec.rb +0 -0
- data/gems/core/spec/language/metaclass_spec.rb +21 -0
- data/{opals/opal/opal → gems/core}/spec/language/method_spec.rb +60 -0
- data/{opals/opal/opal → gems/core}/spec/language/next_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/language/or_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/language/redo_spec.rb +0 -0
- data/gems/core/spec/language/regexp_spec.rb +26 -0
- data/{opals/opal/opal → gems/core}/spec/language/rescue_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/language/return_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/language/string_spec.rb +0 -0
- data/gems/core/spec/language/super_spec.rb +32 -0
- data/{opals/opal/opal → gems/core}/spec/language/until_spec.rb +47 -47
- data/gems/core/spec/language/variables_spec.rb +155 -0
- data/{opals/opal/opal → gems/core}/spec/language/while_spec.rb +47 -47
- data/{opals/opal/opal → gems/core}/spec/spec_helper.rb +1 -1
- data/gems/core_fs/README.md +19 -0
- data/gems/dev/Rakefile +5 -0
- data/gems/dev/lib/dev.js +99 -0
- data/gems/dev/lib/dev/generator.js +1264 -0
- data/gems/dev/lib/dev/parser.js +979 -0
- data/gems/dev/lib/dev/ruby_parser.js +1088 -0
- data/gems/dev/lib/dev/ruby_parser.y +1267 -0
- data/gems/dev/lib/dev/string_scanner.js +38 -0
- data/gems/dev/tools/racc2js/README.md +39 -0
- data/gems/dev/tools/racc2js/math_parser.js +222 -0
- data/gems/dev/tools/racc2js/math_parser.rb +133 -0
- data/gems/dev/tools/racc2js/math_parser.y +28 -0
- data/gems/dev/tools/racc2js/parser.js +218 -0
- data/gems/dev/tools/racc2js/racc2js.rb +153 -0
- data/gems/json/README.md +4 -0
- data/gems/json/json.gemspec +14 -0
- data/gems/json/lib/json.rb +64 -0
- data/gems/json/lib/json/ext.rb +51 -0
- data/{opals/opal/browser/lib/browser/json_parse.js → gems/json/lib/json/json2.js} +197 -37
- data/gems/ospec/README.md +0 -0
- data/gems/ospec/lib/ospec.rb +6 -0
- data/gems/ospec/lib/ospec/autorun.rb +3 -0
- data/gems/ospec/lib/ospec/dsl.rb +15 -0
- data/gems/ospec/lib/ospec/example.rb +11 -0
- data/gems/ospec/lib/ospec/example/before_and_after_hooks.rb +56 -0
- data/gems/ospec/lib/ospec/example/errors.rb +17 -0
- data/gems/ospec/lib/ospec/example/example_group.rb +12 -0
- data/gems/ospec/lib/ospec/example/example_group_factory.rb +21 -0
- data/gems/ospec/lib/ospec/example/example_group_hierarchy.rb +20 -0
- data/{opals/opal/spec/lib/spec → gems/ospec/lib/ospec}/example/example_group_methods.rb +26 -68
- data/gems/ospec/lib/ospec/example/example_group_proxy.rb +14 -0
- data/gems/ospec/lib/ospec/example/example_methods.rb +46 -0
- data/gems/ospec/lib/ospec/example/example_proxy.rb +18 -0
- data/gems/ospec/lib/ospec/expectations.rb +19 -0
- data/gems/ospec/lib/ospec/expectations/errors.rb +8 -0
- data/gems/ospec/lib/ospec/expectations/fail_with.rb +8 -0
- data/gems/ospec/lib/ospec/expectations/handler.rb +27 -0
- data/gems/ospec/lib/ospec/matchers.rb +24 -0
- data/{opals/opal/Rakefile → gems/ospec/lib/ospec/matchers/be.rb} +0 -0
- data/gems/ospec/lib/ospec/matchers/generated_descriptions.rb +20 -0
- data/gems/ospec/lib/ospec/matchers/operator_matcher.rb +52 -0
- data/gems/ospec/lib/ospec/runner.rb +40 -0
- data/gems/ospec/lib/ospec/runner/example_group_runner.rb +44 -0
- data/{opals/opal/spec/lib/spec → gems/ospec/lib/ospec}/runner/formatter/html_formatter.rb +31 -40
- data/gems/ospec/lib/ospec/runner/formatter/terminal_formatter.rb +48 -0
- data/gems/ospec/lib/ospec/runner/options.rb +36 -0
- data/{opals/opal/spec/lib/spec → gems/ospec/lib/ospec}/runner/reporter.rb +23 -55
- data/gems/ospec/ospec.gemspec +0 -0
- data/gems/rquery/README.md +9 -0
- data/gems/rquery/lib/rquery.rb +10 -0
- data/gems/rquery/lib/rquery/ajax.rb +4 -0
- data/gems/rquery/lib/rquery/css.rb +96 -0
- data/gems/rquery/lib/rquery/document.rb +25 -0
- data/gems/rquery/lib/rquery/element.rb +292 -0
- data/gems/rquery/lib/rquery/event.rb +108 -0
- data/gems/rquery/lib/rquery/jquery.js +8177 -0
- data/gems/rquery/lib/rquery/request.rb +138 -0
- data/gems/rquery/lib/rquery/response.rb +49 -0
- data/gems/rquery/rquery.gemspec +16 -0
- data/lib/opal.js +1597 -0
- data/lib/opal.rb +6 -69
- data/lib/opal/builder.rb +115 -0
- data/lib/opal/bundle.rb +131 -0
- data/lib/opal/command.rb +11 -0
- data/lib/opal/context.rb +69 -0
- data/lib/opal/context/console.rb +12 -0
- data/lib/opal/context/file_system.rb +19 -0
- data/lib/opal/context/loader.rb +117 -0
- data/lib/opal/gem.rb +153 -0
- data/lib/opal/ruby/nodes.rb +1302 -0
- data/lib/opal/ruby/parser.rb +780 -0
- data/lib/opal/ruby/ruby_parser.rb +5170 -0
- data/lib/opal/ruby/ruby_parser.y +1298 -0
- data/opal.gemspec +11 -256
- metadata +179 -240
- data/.gitmodules +0 -6
- data/Opalfile +0 -384
- data/VERSION +0 -1
- data/demos/apps/browser_demo/index.html +0 -11
- data/demos/apps/browser_demo/lib/browser_demo.rb +0 -31
- data/demos/apps/simple_opal/Opalfile +0 -13
- data/demos/apps/simple_opal/index.html +0 -11
- data/demos/apps/simple_opal/lib/app_controller.rb +0 -62
- data/demos/apps/simple_opal/lib/main_window.rb +0 -146
- data/demos/browser/request/index.html +0 -52
- data/demos/browser/request/request.rb +0 -48
- data/gen/browser/__PROJECT_NAME__/Rakefile +0 -12
- data/gen/browser/__PROJECT_NAME__/index.html +0 -11
- data/gen/browser/__PROJECT_NAME__/javascripts/opal.debug.js +0 -4687
- data/gen/browser/__PROJECT_NAME__/javascripts/opal.min.js +0 -175
- data/gen/browser/__PROJECT_NAME__/lib/__PROJECT_NAME__.rb +0 -1
- data/lib/opal/builders/base.rb +0 -50
- data/lib/opal/builders/css.rb +0 -46
- data/lib/opal/builders/javascript.rb +0 -44
- data/lib/opal/builders/opal.rb +0 -79
- data/lib/opal/builders/ruby.rb +0 -50
- data/lib/opal/builders/ruby/generate.rb +0 -1851
- data/lib/opal/builders/ruby/nodes.rb +0 -210
- data/lib/opal/builders/ruby/ruby.rb +0 -916
- data/lib/opal/builders/ruby/ruby_parser.rb +0 -6008
- data/lib/opal/builders/ruby/ruby_parser.rb.y +0 -1451
- data/lib/opal/models/build_item.rb +0 -104
- data/lib/opal/models/hash_struct.rb +0 -40
- data/lib/opal/models/project.rb +0 -252
- data/lib/opal/models/struct_accessors.rb +0 -58
- data/lib/opal/models/target.rb +0 -176
- data/lib/opal/opal/build.rb +0 -169
- data/lib/opal/opal/env/console.rb +0 -66
- data/lib/opal/opal/env/fs.rb +0 -98
- data/lib/opal/opal/env/object.rb +0 -48
- data/lib/opal/opal/environment.rb +0 -139
- data/lib/opal/opal/gen.rb +0 -62
- data/lib/opal/opal/opal.rb +0 -75
- data/lib/opal/opal/repl.rb +0 -38
- data/lib/opal/opalfile/dsl.rb +0 -62
- data/lib/opal/opalfile/opalfile.rb +0 -133
- data/lib/opal/opalfile/task.rb +0 -96
- data/lib/opal/opalfile/task_manager.rb +0 -63
- data/lib/opal/opalfile/task_scope.rb +0 -52
- data/lib/opal/rack/app_server.rb +0 -119
- data/lib/opal/rake/opal_task.rb +0 -34
- data/opals/opal/README.md +0 -37
- data/opals/opal/browser/Opalfile +0 -11
- data/opals/opal/browser/README.md +0 -146
- data/opals/opal/browser/SIZZLE_LICESNSE.txt +0 -148
- data/opals/opal/browser/lib/browser.rb +0 -118
- data/opals/opal/browser/lib/browser/builder.rb +0 -41
- data/opals/opal/browser/lib/browser/canvas_context.rb +0 -115
- data/opals/opal/browser/lib/browser/dimensions.rb +0 -50
- data/opals/opal/browser/lib/browser/document.rb +0 -146
- data/opals/opal/browser/lib/browser/element.rb +0 -487
- data/opals/opal/browser/lib/browser/element/attributes.rb +0 -88
- data/opals/opal/browser/lib/browser/element/css.rb +0 -290
- data/opals/opal/browser/lib/browser/element/form.rb +0 -146
- data/opals/opal/browser/lib/browser/event/dom_events.rb +0 -81
- data/opals/opal/browser/lib/browser/event/event.rb +0 -177
- data/opals/opal/browser/lib/browser/event/trigger_events.rb +0 -53
- data/opals/opal/browser/lib/browser/geometry.rb +0 -97
- data/opals/opal/browser/lib/browser/json.rb +0 -32
- data/opals/opal/browser/lib/browser/request/request.rb +0 -201
- data/opals/opal/browser/lib/browser/sizzle.js +0 -1068
- data/opals/opal/browser/lib/browser/string.rb +0 -42
- data/opals/opal/browser/lib/browser/touch.rb +0 -37
- data/opals/opal/browser/lib/browser/vml_context.js +0 -33
- data/opals/opal/browser/lib/browser/window.rb +0 -36
- data/opals/opal/browser/spec/browser/browser_detection_spec.rb +0 -7
- data/opals/opal/browser/spec/document/aref_spec.rb +0 -110
- data/opals/opal/browser/spec/document/ready_spec.rb +0 -16
- data/opals/opal/browser/spec/element/body_spec.rb +0 -11
- data/opals/opal/browser/spec/element/clear_spec.rb +0 -26
- data/opals/opal/browser/spec/element/empty_spec.rb +0 -29
- data/opals/opal/browser/spec/element/has_class_spec.rb +0 -40
- data/opals/opal/browser/spec/element/hidden_spec.rb +0 -23
- data/opals/opal/browser/spec/element/hide_spec.rb +0 -31
- data/opals/opal/browser/spec/element/remove_spec.rb +0 -25
- data/opals/opal/browser/spec/element/show_spec.rb +0 -31
- data/opals/opal/browser/spec/element/style_spec.rb +0 -69
- data/opals/opal/browser/spec/element/toggle_spec.rb +0 -31
- data/opals/opal/browser/spec/element/visible_spec.rb +0 -23
- data/opals/opal/browser/spec/spec_helper.rb +0 -1
- data/opals/opal/opal/Opalfile +0 -14
- data/opals/opal/opal/spec/core/array/compact_spec.rb +0 -15
- data/opals/opal/opal/spec/fixtures/super.rb +0 -70
- data/opals/opal/opal/spec/language/____temp_remove_this.rb +0 -12
- data/opals/opal/opal/spec/language/block_spec.rb +0 -18
- data/opals/opal/opal/spec/language/case_spec.rb +0 -103
- data/opals/opal/opal/spec/language/metaclass_spec.rb +0 -21
- data/opals/opal/opal/spec/language/super_spec.rb +0 -26
- data/opals/opal/runtime/Opalfile +0 -78
- data/opals/opal/runtime/README.md +0 -12
- data/opals/opal/runtime/docs/debugging.md +0 -51
- data/opals/opal/runtime/lib/array.rb +0 -1516
- data/opals/opal/runtime/lib/basic_object.rb +0 -49
- data/opals/opal/runtime/lib/class.rb +0 -54
- data/opals/opal/runtime/lib/dir.rb +0 -36
- data/opals/opal/runtime/lib/error.rb +0 -49
- data/opals/opal/runtime/lib/false_class.rb +0 -52
- data/opals/opal/runtime/lib/file.rb +0 -79
- data/opals/opal/runtime/lib/hash.rb +0 -791
- data/opals/opal/runtime/lib/io.rb +0 -39
- data/opals/opal/runtime/lib/kernel.rb +0 -288
- data/opals/opal/runtime/lib/match_data.rb +0 -36
- data/opals/opal/runtime/lib/module.rb +0 -109
- data/opals/opal/runtime/lib/nil_class.rb +0 -69
- data/opals/opal/runtime/lib/number.rb +0 -398
- data/opals/opal/runtime/lib/proc.rb +0 -77
- data/opals/opal/runtime/lib/range.rb +0 -63
- data/opals/opal/runtime/lib/regexp.rb +0 -111
- data/opals/opal/runtime/lib/ruby.rb +0 -30
- data/opals/opal/runtime/lib/string.rb +0 -328
- data/opals/opal/runtime/lib/symbol.rb +0 -40
- data/opals/opal/runtime/lib/top_self.rb +0 -33
- data/opals/opal/runtime/lib/true_class.rb +0 -45
- data/opals/opal/runtime/runtime/browser.js +0 -287
- data/opals/opal/runtime/runtime/debug.js +0 -180
- data/opals/opal/runtime/runtime/opal.js +0 -1008
- data/opals/opal/runtime/runtime/post_opal.js +0 -1
- data/opals/opal/runtime/runtime/pre_opal.js +0 -2
- data/opals/opal/runtime/runtime/server_side.js +0 -50
- data/opals/opal/spec/LICENSE.txt +0 -26
- data/opals/opal/spec/Opalfile +0 -5
- data/opals/opal/spec/bin/spec.rb +0 -43
- data/opals/opal/spec/lib/spec.rb +0 -33
- data/opals/opal/spec/lib/spec/dsl.rb +0 -41
- data/opals/opal/spec/lib/spec/example.rb +0 -35
- data/opals/opal/spec/lib/spec/example/before_and_after_hooks.rb +0 -81
- data/opals/opal/spec/lib/spec/example/errors.rb +0 -42
- data/opals/opal/spec/lib/spec/example/example_group.rb +0 -37
- data/opals/opal/spec/lib/spec/example/example_group_factory.rb +0 -43
- data/opals/opal/spec/lib/spec/example/example_group_hierarchy.rb +0 -45
- data/opals/opal/spec/lib/spec/example/example_group_proxy.rb +0 -41
- data/opals/opal/spec/lib/spec/example/example_methods.rb +0 -73
- data/opals/opal/spec/lib/spec/example/example_proxy.rb +0 -48
- data/opals/opal/spec/lib/spec/expectations.rb +0 -46
- data/opals/opal/spec/lib/spec/expectations/errors.rb +0 -35
- data/opals/opal/spec/lib/spec/expectations/fail_with.rb +0 -37
- data/opals/opal/spec/lib/spec/expectations/handler.rb +0 -48
- data/opals/opal/spec/lib/spec/matchers.rb +0 -50
- data/opals/opal/spec/lib/spec/matchers/be.rb +0 -26
- data/opals/opal/spec/lib/spec/matchers/generated_descriptions.rb +0 -47
- data/opals/opal/spec/lib/spec/matchers/operator_matcher.rb +0 -66
- data/opals/opal/spec/lib/spec/runner.rb +0 -48
- data/opals/opal/spec/lib/spec/runner/example_group_runner.rb +0 -71
- data/opals/opal/spec/lib/spec/runner/formatter/terminal_formatter.rb +0 -82
- data/opals/opal/spec/lib/spec/runner/options.rb +0 -63
- data/opals/opal/spec/resources/index.html +0 -25
- data/opals/opal/spec/resources/spec.css +0 -132
- data/spec/cherry_kit/iseq_spec.rb +0 -38
- data/spec/spec_helper.rb +0 -16
- data/spec/vienna_spec.rb +0 -7
- data/yard/index.html +0 -43
- data/yard/style.css +0 -765
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
module Kernel
|
|
2
|
+
# Repeatedly executes the given block.
|
|
3
|
+
#
|
|
4
|
+
# @example
|
|
5
|
+
#
|
|
6
|
+
# loop do
|
|
7
|
+
# puts "this will infinetly repeat"
|
|
8
|
+
# end
|
|
9
|
+
#
|
|
10
|
+
# @return [Object] returns the receiver.
|
|
11
|
+
def loop
|
|
12
|
+
`while (true) {
|
|
13
|
+
try {
|
|
14
|
+
#{yield};
|
|
15
|
+
} catch (e) {
|
|
16
|
+
switch (e.$keyword) {
|
|
17
|
+
case 2:
|
|
18
|
+
return e['@exit_value'];
|
|
19
|
+
default:
|
|
20
|
+
throw e;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return self;`
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Simple equivalent to `Proc.new`. Returns a new proc from the given block.
|
|
29
|
+
#
|
|
30
|
+
# @example
|
|
31
|
+
#
|
|
32
|
+
# proc { puts "a" }
|
|
33
|
+
# # => #<Proc 02002>
|
|
34
|
+
#
|
|
35
|
+
# @return [Proc]
|
|
36
|
+
def proc(&block)
|
|
37
|
+
raise ArgumentError, "block required" unless block_given?
|
|
38
|
+
block
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def lambda(&block)
|
|
42
|
+
raise ArgumentError, "block required" unless block_given?
|
|
43
|
+
block
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Raises an exception. If given a string, this method will raise a
|
|
47
|
+
# RuntimeError with the given string as a message. Otherwise, if the first
|
|
48
|
+
# parameter is a subclass of Exception, then the method will raise a new
|
|
49
|
+
# instance of the given exception class with the string as a message, if it
|
|
50
|
+
# exists, or a fdefault message otherwise.
|
|
51
|
+
#
|
|
52
|
+
# @example String message
|
|
53
|
+
#
|
|
54
|
+
# raise "some error"
|
|
55
|
+
# # => RuntimeError: some error
|
|
56
|
+
#
|
|
57
|
+
# @example Exception subclass
|
|
58
|
+
#
|
|
59
|
+
# raise StandardError, "something went wrong"
|
|
60
|
+
# # => StandardError: something went wrong
|
|
61
|
+
#
|
|
62
|
+
# @param [Exception, String] exception
|
|
63
|
+
# @param [String]
|
|
64
|
+
# @return [nil]
|
|
65
|
+
def raise(exception, string = nil)
|
|
66
|
+
`var msg = nil, exc;
|
|
67
|
+
|
|
68
|
+
if (typeof exception == 'string') {
|
|
69
|
+
msg = exception;
|
|
70
|
+
exc = #{RuntimeError.new `msg`};
|
|
71
|
+
} else if (#{`exception`.kind_of? Exception}.$r) {
|
|
72
|
+
exc = exception;
|
|
73
|
+
} else {
|
|
74
|
+
if (string != nil) msg = string;
|
|
75
|
+
exc = #{`exception`.new `msg`};
|
|
76
|
+
}
|
|
77
|
+
VM.raise(exc);`
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def fail(exception, string = nil)
|
|
81
|
+
raise exception, string
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def instance_variable_defined?(name)
|
|
85
|
+
`name = #{name.to_s};
|
|
86
|
+
return self[name] == undefined ? Qfalse : Qtrue;`
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def instance_variable_get(name)
|
|
90
|
+
`name = #{name.to_s};
|
|
91
|
+
return self[name] == undefined ? nil : self[name];`
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def instance_variable_set(name, value)
|
|
95
|
+
`name = #{name.to_s};
|
|
96
|
+
return self[name] = value;`
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Returns `true` if a block was given to the current method, `false`
|
|
100
|
+
# otherwise.
|
|
101
|
+
#
|
|
102
|
+
# @NOTE: In opal, this is actually a fake method. block_given? is inlined
|
|
103
|
+
# for efficiency and implementation details.
|
|
104
|
+
#
|
|
105
|
+
# @return [true, false]
|
|
106
|
+
def block_given?
|
|
107
|
+
false
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def method_missing(sym, *args)
|
|
111
|
+
raise NoMethodError, "undefined method `#{sym}` for #{self.inspect}"
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def to_a
|
|
115
|
+
[self]
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def tap
|
|
119
|
+
raise LocalJumpError, "no block given" unless block_given?
|
|
120
|
+
yield self
|
|
121
|
+
self
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def kind_of?(klass)
|
|
125
|
+
`var search = self.$klass;
|
|
126
|
+
|
|
127
|
+
while (search) {
|
|
128
|
+
if (search == klass) {
|
|
129
|
+
return Qtrue;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
search = search.$super;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return Qfalse;`
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def is_a?(klass)
|
|
139
|
+
kind_of? klass
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def nil?
|
|
143
|
+
false
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# Returns `true` if the method with the given id exists on the receiver,
|
|
147
|
+
# `false` otherwise.
|
|
148
|
+
#
|
|
149
|
+
# Implementation Details
|
|
150
|
+
# ----------------------
|
|
151
|
+
# Opals' internals are constructed so that when a method is initially called,
|
|
152
|
+
# a fake method is created on the root basic object, so that any subsequent
|
|
153
|
+
# calls to that method on an object that has not defined it, will yield a
|
|
154
|
+
# method_missing behaviour. For this reason, fake methods are tagged with a
|
|
155
|
+
# `.$rbMM` property so that they will not be counted when this method checks
|
|
156
|
+
# if a given method has been defined.
|
|
157
|
+
#
|
|
158
|
+
# @param [String, Symbol] method_id
|
|
159
|
+
# @return [Boolean]
|
|
160
|
+
def respond_to?(method_id)
|
|
161
|
+
`var method = self.$m[#{`method_id`.to_s}];
|
|
162
|
+
|
|
163
|
+
if (method && !method.$rbMM) {
|
|
164
|
+
return Qtrue;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
return Qfalse;`
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def ===(other)
|
|
171
|
+
self == other
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def __send__(method_id, *args)
|
|
175
|
+
`args.unshift(self);
|
|
176
|
+
return self.$m[#{method_id.to_s}].apply(self, args);`
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
def send(method_id, *args)
|
|
180
|
+
__send__ method_id, *args
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def class
|
|
184
|
+
`return VM.class_real(self.$klass);`
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
# Returns a random number. If max is `nil`, then the result is 0. Otherwise
|
|
188
|
+
# returns a random number between 0 and max.
|
|
189
|
+
#
|
|
190
|
+
# @example
|
|
191
|
+
#
|
|
192
|
+
# rand # => 0.918378392234
|
|
193
|
+
# rand # => 0.283842929289
|
|
194
|
+
# rand 10 # => 9
|
|
195
|
+
# rand 100 # => 21
|
|
196
|
+
#
|
|
197
|
+
# @param [Numeric] max
|
|
198
|
+
# @return [Numeric]
|
|
199
|
+
def rand(max = `undefined`)
|
|
200
|
+
`if (max != undefined)
|
|
201
|
+
return Math.floor(Math.random() * max);
|
|
202
|
+
else
|
|
203
|
+
return Math.random();`
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
def __id__
|
|
207
|
+
`return self.$hash();`
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
def object_id
|
|
211
|
+
`return self.$hash();`
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
# Returns a simple string representation of the receiver object. The id shown in the string
|
|
215
|
+
# is not just the object_id, but it is mangled to resemble the format output by ruby, which
|
|
216
|
+
# is basically a hex number.
|
|
217
|
+
#
|
|
218
|
+
# FIXME: proper hex output needed
|
|
219
|
+
def to_s
|
|
220
|
+
"#<#{`VM.class_real(self.$klass)`}:0x#{`(self.$hash() * 400487).toString(16)`}>"
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
def inspect
|
|
224
|
+
to_s
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
def instance_eval(&block)
|
|
228
|
+
`block(self)` if block_given?
|
|
229
|
+
self
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
def const_set(name, value)
|
|
233
|
+
`return rb_const_set(VM.class_real(self.$klass), name, value);`
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
def const_defined?(name)
|
|
237
|
+
false
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
|
|
2
|
+
class Module
|
|
3
|
+
|
|
4
|
+
def name
|
|
5
|
+
`return self.__classid__;`
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def ===(obj)
|
|
9
|
+
obj.kind_of? self
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def define_method(method_id, &block)
|
|
13
|
+
raise LocalJumpError, "no block given" unless block_given?
|
|
14
|
+
`VM.define_method(self, #{method_id.to_s}, block)`
|
|
15
|
+
nil
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def attr_accessor(*attrs)
|
|
19
|
+
attr_reader *attrs
|
|
20
|
+
attr_writer *attrs
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def attr_reader(*attrs)
|
|
24
|
+
`for (var i = 0; i < attrs.length; i++) {
|
|
25
|
+
var attr = attrs[i];
|
|
26
|
+
var method_id = #{`attr`.to_s};
|
|
27
|
+
|
|
28
|
+
VM.define_method(self, method_id,
|
|
29
|
+
new Function('self', 'var iv = self["@' + method_id + '"]; return iv === undefined ? nil : iv;'));
|
|
30
|
+
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return nil;`
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def attr_writer(*attrs)
|
|
37
|
+
`for (var i = 0; i < attrs.length; i++) {
|
|
38
|
+
var attr = attrs[i];
|
|
39
|
+
var method_id = #{`attr`.to_s};
|
|
40
|
+
|
|
41
|
+
VM.define_method(self, method_id + '=',
|
|
42
|
+
new Function('self', 'val', 'return self["@' + method_id + '"] = val;'));
|
|
43
|
+
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return nil;`
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def alias_method(new_name, old_name)
|
|
50
|
+
new_name = new_name.to_s
|
|
51
|
+
old_name = old_name.to_s
|
|
52
|
+
`VM.define_method(self, new_name, self.$m_prototype_tbl[old_name])`
|
|
53
|
+
self
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def to_s
|
|
57
|
+
`return self.__classid__;`
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def const_set(id, value)
|
|
61
|
+
`return rb_vm_cs(self, #{id.to_s}, value);`
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def class_eval(str, &block)
|
|
65
|
+
if block_given?
|
|
66
|
+
`block(self)`
|
|
67
|
+
else
|
|
68
|
+
raise "need to compile str"
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def module_eval(str, &block)
|
|
73
|
+
class_eval str, &block
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def private
|
|
77
|
+
self
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def public
|
|
81
|
+
self
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def protected
|
|
85
|
+
self
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def include(mod)
|
|
89
|
+
`VM.include_module(self, mod)`
|
|
90
|
+
nil
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def extend(mod)
|
|
94
|
+
`VM.extend_module(self, mod)`
|
|
95
|
+
nil
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
class NilClass
|
|
2
|
+
|
|
3
|
+
def to_i
|
|
4
|
+
0
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def to_f
|
|
8
|
+
0.0
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def to_s
|
|
12
|
+
""
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def to_a
|
|
16
|
+
[]
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def inspect
|
|
20
|
+
"nil"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def nil?
|
|
24
|
+
true
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def &(other)
|
|
28
|
+
false
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def |(other)
|
|
32
|
+
`return other.$r ? Qtrue : Qfalse;`
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def ^(other)
|
|
36
|
+
`return other.$r ? Qtrue : Qfalse;`
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
NIL = nil
|
|
41
|
+
|
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
class Numeric
|
|
2
|
+
# Unary Plus - Returns the receivers value
|
|
3
|
+
#
|
|
4
|
+
# @example
|
|
5
|
+
#
|
|
6
|
+
# +5
|
|
7
|
+
# # => 5
|
|
8
|
+
#
|
|
9
|
+
# @return [Numeric] receiver
|
|
10
|
+
def +@
|
|
11
|
+
`return self;`
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Unary minus - returns the receiver's value, negated.
|
|
15
|
+
#
|
|
16
|
+
# @example
|
|
17
|
+
#
|
|
18
|
+
# -5
|
|
19
|
+
# # => -5
|
|
20
|
+
#
|
|
21
|
+
# @return [Numeric] result
|
|
22
|
+
def -@
|
|
23
|
+
`return -self;`
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Returns `self` modulo `other`. See {#divmod} for more information.
|
|
27
|
+
#
|
|
28
|
+
# @param [Numeric] other number to use for module
|
|
29
|
+
# @return [Numeric] result
|
|
30
|
+
def %(other)
|
|
31
|
+
`return self % other;`
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def modulo(other)
|
|
35
|
+
`return self % other;`
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Bitwise AND.
|
|
39
|
+
#
|
|
40
|
+
# @param [Numeric] other numeric to AND with
|
|
41
|
+
# @return [Numeric]
|
|
42
|
+
def &(num2)
|
|
43
|
+
`return self & num2;`
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Performs multiplication
|
|
47
|
+
#
|
|
48
|
+
# @param [Numeric] other number to multiply with
|
|
49
|
+
# @return [Numeric]
|
|
50
|
+
def *(other)
|
|
51
|
+
`return self * other;`
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Raises `self` to the power of `other`.
|
|
55
|
+
#
|
|
56
|
+
# @param [Numeric] other number to raise to
|
|
57
|
+
# @return [Numeric]
|
|
58
|
+
def **(other)
|
|
59
|
+
`return Math.pow(self, other);`
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Performs addition.
|
|
63
|
+
#
|
|
64
|
+
# @param [Numeric] other number to add
|
|
65
|
+
# @return [Numeric]
|
|
66
|
+
def +(other)
|
|
67
|
+
`return self + other;`
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Performs subtraction
|
|
71
|
+
#
|
|
72
|
+
# @param [Numeric] other number to subtract
|
|
73
|
+
# @return [Numeric]
|
|
74
|
+
def -(other)
|
|
75
|
+
`return self - other;`
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Performs division
|
|
79
|
+
#
|
|
80
|
+
# @param [Numeric] other number to divide by
|
|
81
|
+
# @return [Numeric]
|
|
82
|
+
def /(other)
|
|
83
|
+
`return self / other;`
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Returns `true` if the value of `self` is less than that or `other`, `false`
|
|
87
|
+
# otherwise.
|
|
88
|
+
#
|
|
89
|
+
# @param [Numeric] other number to compare
|
|
90
|
+
# @return [true, false] result of comparison
|
|
91
|
+
def <(other)
|
|
92
|
+
`return self < other ? Qtrue : Qfalse;`
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# Returns `true` if the value of `self` is less than or equal to `other`,
|
|
96
|
+
# `false` otherwise.
|
|
97
|
+
#
|
|
98
|
+
# @param [Numeric] other number to comapre
|
|
99
|
+
# @return [true, false] result of comparison
|
|
100
|
+
def <=(other)
|
|
101
|
+
`return self <= other ? Qtrue : Qfalse;`
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Returns `true` if the value of `self` is greater than `other`, `false`
|
|
105
|
+
# otherwise.
|
|
106
|
+
#
|
|
107
|
+
# @param [Numeric] other number to compare with
|
|
108
|
+
# @return [true, false] result of comparison
|
|
109
|
+
def >(other)
|
|
110
|
+
`return self > other ? Qtrue : Qfalse;`
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# Returns `true` if `self` is greater than or equal to `other`, `false`
|
|
114
|
+
# otherwise.
|
|
115
|
+
#
|
|
116
|
+
# @param [Numeric] other number to compare with
|
|
117
|
+
# @return [true, false] result of comparison
|
|
118
|
+
def >=(other)
|
|
119
|
+
`return self >= other ? Qtrue : Qfalse;`
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# Shift `self` left by `count` positions.
|
|
123
|
+
#
|
|
124
|
+
# @param [Numeric] count number to shift
|
|
125
|
+
# @return [Numeric]
|
|
126
|
+
def <<(count)
|
|
127
|
+
`return self << count;`
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
# Shifts 'self' right by `count` positions.
|
|
131
|
+
#
|
|
132
|
+
# @param [Numeric] count number to shift
|
|
133
|
+
# @return [Numeric]
|
|
134
|
+
def >>(count)
|
|
135
|
+
`return self >> count;`
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Comparison - Returns '-1', '0', '1' or nil depending on whether `self` is
|
|
139
|
+
# less than, equal to or greater than `other`.
|
|
140
|
+
#
|
|
141
|
+
# @param [Numeric] other number to compare with
|
|
142
|
+
# @return [Number, nil]
|
|
143
|
+
def <=>(other)
|
|
144
|
+
`if (typeof other != 'number') return nil;
|
|
145
|
+
else if (self < other) return -1;
|
|
146
|
+
else if (self > other) return 1;
|
|
147
|
+
return 0;`
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
# Returns `true` if `self` equals `other` numerically, `false` otherwise.
|
|
151
|
+
#
|
|
152
|
+
# @param [Numeric] other number to compare
|
|
153
|
+
# @return [true, false]
|
|
154
|
+
def ==(other)
|
|
155
|
+
`return self.valueOf() === other.valueOf() ? Qtrue : Qfalse;`
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
# Bitwise EXCLUSIVE OR.
|
|
159
|
+
#
|
|
160
|
+
# @param [Numeric] other number to XOR with
|
|
161
|
+
# @return [Numeric]
|
|
162
|
+
def ^(other)
|
|
163
|
+
`return self ^ other;`
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
# Returns the absolute value of `self`.
|
|
167
|
+
#
|
|
168
|
+
# @example
|
|
169
|
+
#
|
|
170
|
+
# -1234.abs
|
|
171
|
+
# # => 1234
|
|
172
|
+
# 1234.abs
|
|
173
|
+
# # => 1234
|
|
174
|
+
#
|
|
175
|
+
# @return [Numeric]
|
|
176
|
+
def abs
|
|
177
|
+
`return Math.abs(self);`
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def magnitude
|
|
181
|
+
`return Math.abs(self);`
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
# Returns `true` if self is even, `false` otherwise.
|
|
185
|
+
#
|
|
186
|
+
# @return [true, false]
|
|
187
|
+
def even?
|
|
188
|
+
`return (self % 2 == 0) ? Qtrue : Qfalse;`
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
# Returns `true` if self is odd, `false` otherwise.
|
|
192
|
+
#
|
|
193
|
+
# @return [true, false]
|
|
194
|
+
def odd?
|
|
195
|
+
`return (self % 2 == 0) ? Qfalse : Qtrue;`
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
# Returns the number equal to `self` + 1.
|
|
199
|
+
#
|
|
200
|
+
# @example
|
|
201
|
+
#
|
|
202
|
+
# 1.next
|
|
203
|
+
# # => 2
|
|
204
|
+
# (-1).next
|
|
205
|
+
# # => 0
|
|
206
|
+
#
|
|
207
|
+
# @return [Numeric]
|
|
208
|
+
def succ
|
|
209
|
+
`return self + 1;`
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
def next
|
|
213
|
+
`return self + 1;`
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
# Returns the number equal to `self` - 1
|
|
217
|
+
#
|
|
218
|
+
# @example
|
|
219
|
+
#
|
|
220
|
+
# 1.pred
|
|
221
|
+
# # => 0
|
|
222
|
+
# (-1).pred
|
|
223
|
+
# # => -2
|
|
224
|
+
#
|
|
225
|
+
# @return [Numeric]
|
|
226
|
+
def pred
|
|
227
|
+
`return self - 1;`
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
# Iterates the block, passing integer values from `self` upto and including
|
|
231
|
+
# `finish`.
|
|
232
|
+
#
|
|
233
|
+
# @example
|
|
234
|
+
#
|
|
235
|
+
# 5.upto(10) { |i| puts i }
|
|
236
|
+
# # => 5
|
|
237
|
+
# # => 6
|
|
238
|
+
# # => 7
|
|
239
|
+
# # => 8
|
|
240
|
+
# # => 9
|
|
241
|
+
# # => 10
|
|
242
|
+
#
|
|
243
|
+
# @param [Numeric] finish where to stop iteration
|
|
244
|
+
# @return [Numeric] returns the receiver
|
|
245
|
+
def upto(finish)
|
|
246
|
+
`for (var i = self; i <= finish; i++) {
|
|
247
|
+
#{yield `i`};
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
return self;`
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
# Iterates the block, passing decreasing values from `self` downto and
|
|
254
|
+
# including `finish`.
|
|
255
|
+
#
|
|
256
|
+
# @example
|
|
257
|
+
#
|
|
258
|
+
# 5.downto(1) { |x| puts x }
|
|
259
|
+
# # => 5
|
|
260
|
+
# # => 4
|
|
261
|
+
# # => 3
|
|
262
|
+
# # => 2
|
|
263
|
+
# # => 1
|
|
264
|
+
#
|
|
265
|
+
# @param [Numeric] finish where to stop iteration
|
|
266
|
+
# @return [Numeric] returns the receiver
|
|
267
|
+
def downto(finish)
|
|
268
|
+
`for (var i = self; i >= finish; i--) {
|
|
269
|
+
#{yield `i`};
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
return self;`
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
# Iterates the block `self` number of times, passing values in the range 0 to
|
|
276
|
+
# `self` - 1.
|
|
277
|
+
#
|
|
278
|
+
# @example
|
|
279
|
+
#
|
|
280
|
+
# 5.times { |x| puts x }
|
|
281
|
+
# # => 0
|
|
282
|
+
# # => 1
|
|
283
|
+
# # => 2
|
|
284
|
+
# # => 3
|
|
285
|
+
# # => 4
|
|
286
|
+
#
|
|
287
|
+
# @return [Numeric] returns the receiver
|
|
288
|
+
def times
|
|
289
|
+
`for (var i = 0; i < self; i++) {
|
|
290
|
+
#{yield `i`};
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
return self;`
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
# Bitwise OR.
|
|
297
|
+
#
|
|
298
|
+
# @param [Numeric] other number to OR with
|
|
299
|
+
# @return [Numeric]
|
|
300
|
+
def |(other)
|
|
301
|
+
`return self | other;`
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
# Returns `true` if `self` is zero, `false` otherwise.
|
|
305
|
+
#
|
|
306
|
+
# @return [true, false]
|
|
307
|
+
def zero?
|
|
308
|
+
`return self == 0 ? Qtrue : Qfalse;`
|
|
309
|
+
end
|
|
310
|
+
|
|
311
|
+
# Returns the receiver if it is not zero, `nil` otherwise
|
|
312
|
+
#
|
|
313
|
+
# @return [Numeric, nil]
|
|
314
|
+
def nonzero?
|
|
315
|
+
`return self == 0 ? nil : self;`
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
# One's complement: returns a number where each bit is flipped.
|
|
319
|
+
#
|
|
320
|
+
# @return [Numeric]
|
|
321
|
+
def ~
|
|
322
|
+
`return ~self;`
|
|
323
|
+
end
|
|
324
|
+
|
|
325
|
+
# Returns the smallest integer greater than or equal to `num`.
|
|
326
|
+
#
|
|
327
|
+
# @example
|
|
328
|
+
#
|
|
329
|
+
# 1.ceil # => 1
|
|
330
|
+
# 1.2.ceil # => 2
|
|
331
|
+
# (-1.2).ceil # => -1
|
|
332
|
+
# (-1.0).ceil # => -1
|
|
333
|
+
#
|
|
334
|
+
# @return [Numeric]
|
|
335
|
+
def ceil
|
|
336
|
+
`return Math.ceil(self);`
|
|
337
|
+
end
|
|
338
|
+
|
|
339
|
+
# Returns the largest integer less than or equal to `self`.
|
|
340
|
+
#
|
|
341
|
+
# @example
|
|
342
|
+
#
|
|
343
|
+
# 1.floor # => 1
|
|
344
|
+
# (-1).floor # => -1
|
|
345
|
+
#
|
|
346
|
+
# @return [Numeric]
|
|
347
|
+
def floor
|
|
348
|
+
`return Math.floor(self);`
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
# Returns `true` if self is an ineteger, `false` otherwise.
|
|
352
|
+
#
|
|
353
|
+
# @return [true, false]
|
|
354
|
+
def integer?
|
|
355
|
+
`return self % 1 == 0 ? Qtrue : Qfalse;`
|
|
356
|
+
end
|
|
357
|
+
|
|
358
|
+
def inspect
|
|
359
|
+
`return self.toString();`
|
|
360
|
+
end
|
|
361
|
+
|
|
362
|
+
def to_s
|
|
363
|
+
`return self.toString();`
|
|
364
|
+
end
|
|
365
|
+
|
|
366
|
+
def to_i
|
|
367
|
+
`return parseInt(self);`
|
|
368
|
+
end
|
|
369
|
+
end
|
|
370
|
+
|