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
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# symbol.rb
|
|
3
|
-
# vienna
|
|
4
|
-
#
|
|
5
|
-
# Created by Adam Beynon.
|
|
6
|
-
# Copyright 2010 Adam Beynon.
|
|
7
|
-
#
|
|
8
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
9
|
-
# of this software and associated documentation files (the "Software"), to deal
|
|
10
|
-
# in the Software without restriction, including without limitation the rights
|
|
11
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
12
|
-
# copies of the Software, and to permit persons to whom the Software is
|
|
13
|
-
# furnished to do so, subject to the following conditions:
|
|
14
|
-
#
|
|
15
|
-
# The above copyright notice and this permission notice shall be included in
|
|
16
|
-
# all copies or substantial portions of the Software.
|
|
17
|
-
#
|
|
18
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
19
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
20
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
21
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
22
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
23
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
24
|
-
# THE SOFTWARE.
|
|
25
|
-
#
|
|
26
|
-
|
|
27
|
-
class Symbol
|
|
28
|
-
|
|
29
|
-
def inspect
|
|
30
|
-
`return ":" + #{self}.__ptr__;`
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def to_s
|
|
34
|
-
`return #{self}.__ptr__;`
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def to_sym
|
|
38
|
-
self
|
|
39
|
-
end
|
|
40
|
-
end
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# top_self.rb
|
|
3
|
-
# vienna
|
|
4
|
-
#
|
|
5
|
-
# Created by Adam Beynon.
|
|
6
|
-
# Copyright 2010 Adam Beynon.
|
|
7
|
-
#
|
|
8
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
9
|
-
# of this software and associated documentation files (the "Software"), to deal
|
|
10
|
-
# in the Software without restriction, including without limitation the rights
|
|
11
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
12
|
-
# copies of the Software, and to permit persons to whom the Software is
|
|
13
|
-
# furnished to do so, subject to the following conditions:
|
|
14
|
-
#
|
|
15
|
-
# The above copyright notice and this permission notice shall be included in
|
|
16
|
-
# all copies or substantial portions of the Software.
|
|
17
|
-
#
|
|
18
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
19
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
20
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
21
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
22
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
23
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
24
|
-
# THE SOFTWARE.
|
|
25
|
-
#
|
|
26
|
-
|
|
27
|
-
def to_s
|
|
28
|
-
"main"
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def include(mod)
|
|
32
|
-
Object.include mod
|
|
33
|
-
end
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# true_class.rb
|
|
3
|
-
# vienna
|
|
4
|
-
#
|
|
5
|
-
# Created by Adam Beynon.
|
|
6
|
-
# Copyright 2010 Adam Beynon.
|
|
7
|
-
#
|
|
8
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
9
|
-
# of this software and associated documentation files (the "Software"), to deal
|
|
10
|
-
# in the Software without restriction, including without limitation the rights
|
|
11
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
12
|
-
# copies of the Software, and to permit persons to whom the Software is
|
|
13
|
-
# furnished to do so, subject to the following conditions:
|
|
14
|
-
#
|
|
15
|
-
# The above copyright notice and this permission notice shall be included in
|
|
16
|
-
# all copies or substantial portions of the Software.
|
|
17
|
-
#
|
|
18
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
19
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
20
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
21
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
22
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
23
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
24
|
-
# THE SOFTWARE.
|
|
25
|
-
#
|
|
26
|
-
|
|
27
|
-
class TrueClass
|
|
28
|
-
|
|
29
|
-
def to_s
|
|
30
|
-
"true"
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def & other
|
|
34
|
-
other ? true : false
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def | other
|
|
38
|
-
true
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def ^ other
|
|
42
|
-
other ? false : true
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
end
|
|
@@ -1,287 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
// All methods in here are just for the browser. This file will not be loaded
|
|
3
|
-
// by the "server side" opal tool. A lot of methods defined here need to have
|
|
4
|
-
// duplicate definitions for use by the server side tool.
|
|
5
|
-
|
|
6
|
-
// =======================
|
|
7
|
-
// = Opal loading system =
|
|
8
|
-
// =======================
|
|
9
|
-
|
|
10
|
-
// "Opals" are similar to gems in vanilla ruby. An opal is like a framework of
|
|
11
|
-
// code and other resources.
|
|
12
|
-
|
|
13
|
-
// Register an opal with the given specification, which is a json literal with
|
|
14
|
-
// name, description, dependencies etc.
|
|
15
|
-
//
|
|
16
|
-
// Example
|
|
17
|
-
// =======
|
|
18
|
-
//
|
|
19
|
-
// opal.register({
|
|
20
|
-
// name: "browser",
|
|
21
|
-
// version: "0.1.0",
|
|
22
|
-
// files: {
|
|
23
|
-
// "bin/browser", function() { ... bin imp ... },
|
|
24
|
-
// "lib/browser.rb": function() { ... browser.rb imp ... },
|
|
25
|
-
// "lib/browser/element.rb": function() { ... element.rb imp ... }
|
|
26
|
-
// }
|
|
27
|
-
// });
|
|
28
|
-
//
|
|
29
|
-
// Notes
|
|
30
|
-
// =====
|
|
31
|
-
//
|
|
32
|
-
// We then add the lib/ path in browser to our load path, so require('browser')
|
|
33
|
-
// will load lib/browser.rb, and require('browser/element') will load
|
|
34
|
-
// lib/browser/element.rb
|
|
35
|
-
//
|
|
36
|
-
// All opals are stores with their name as a prefix, so lib/browser.rb as above
|
|
37
|
-
// will actually have a full path url of "/browser/lib/browser.rb"
|
|
38
|
-
//
|
|
39
|
-
// Applications are initialized by calling their "bin" file, which by default is
|
|
40
|
-
// named identically to their opal name, so to start our "sample_controls"
|
|
41
|
-
// application, we initialize "/sample_controls/bin/sample_controls" which will
|
|
42
|
-
// probably require "/sample_controls/lib/sample_controls.rb" which will itself
|
|
43
|
-
// load cherry_kit etc etc. the main bin file most often than not will simply
|
|
44
|
-
// call something like CKApplication.start()
|
|
45
|
-
//
|
|
46
|
-
// Resources like css could be added here, as well as auto loading for them, so
|
|
47
|
-
// when the main lib file is loaded, then they are automatically required..
|
|
48
|
-
// might work.
|
|
49
|
-
//
|
|
50
|
-
// require('browser') will first search all opals, so we can carry out potential
|
|
51
|
-
// autoloading of css etc
|
|
52
|
-
//
|
|
53
|
-
exports.register = function(specification) {
|
|
54
|
-
// console.log("registering new opal: " + specification.name);
|
|
55
|
-
opal_list[specification.name] = specification;
|
|
56
|
-
|
|
57
|
-
load_paths.push(specification.name + "/lib/");
|
|
58
|
-
|
|
59
|
-
for (var file_name in specification.files) {
|
|
60
|
-
file_list[specification.name + "/" + file_name] = specification.files[file_name];
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
// same as above but register this as the default application sequence. will
|
|
65
|
-
// look in this opal for a bin file with same name to be used for running
|
|
66
|
-
// exports.register_application = function(specification) {
|
|
67
|
-
// exports.register(specification);
|
|
68
|
-
// bin_file = '/' + specification.name + '/bin/' + specification.name;
|
|
69
|
-
// };
|
|
70
|
-
|
|
71
|
-
// array of loadpaths used in "require" .. each opal listed etc
|
|
72
|
-
// by default has root of filesystem, but each added opal also adds its libpath
|
|
73
|
-
var load_paths = [""];
|
|
74
|
-
|
|
75
|
-
// to load on window.load
|
|
76
|
-
var bin_file = null;
|
|
77
|
-
|
|
78
|
-
// cwd for application
|
|
79
|
-
var opal_cwd = null;
|
|
80
|
-
|
|
81
|
-
// list of all opals: name to specification json object
|
|
82
|
-
var opal_list = {};
|
|
83
|
-
|
|
84
|
-
// dictionary of all files:
|
|
85
|
-
//
|
|
86
|
-
// /path/to_file.1: function() { ... imp ... },
|
|
87
|
-
// /path/to_file.2: function() { ... imp ... }
|
|
88
|
-
//
|
|
89
|
-
// If a file has been included, then its function will be marked with an
|
|
90
|
-
// property ".opal_required" and set to true
|
|
91
|
-
var file_list = exports.files = {};
|
|
92
|
-
|
|
93
|
-
// =======================================================
|
|
94
|
-
// = Temp launching - should be done via window.onload.. =
|
|
95
|
-
// =======================================================
|
|
96
|
-
// Run is our main file to run. usually app path, sometimes spec path etc
|
|
97
|
-
//
|
|
98
|
-
// @param [String] path - the main executable file
|
|
99
|
-
// @param [String] path - the working directory
|
|
100
|
-
// @param [String] lib_path - the lib dir for the main target (default is "lib"), but could well be "ruby" or "opal" or indeed ""
|
|
101
|
-
exports.run = function(path, cwd, lib_path) {
|
|
102
|
-
bin_file = path;
|
|
103
|
-
exports.getwd = opal_cwd = cwd;
|
|
104
|
-
var require_path;
|
|
105
|
-
|
|
106
|
-
if (!bin_file)
|
|
107
|
-
throw "Opal: no bin file defined."
|
|
108
|
-
|
|
109
|
-
var bin_path = bin_file + "/bin/" + bin_file + ".rb";
|
|
110
|
-
|
|
111
|
-
if (exports.files[bin_path])
|
|
112
|
-
require_path = bin_path;
|
|
113
|
-
// exports.require(bin_path);
|
|
114
|
-
else if (exports.files[bin_path = path + '/lib/' + path + '.rb']) {
|
|
115
|
-
// bin_path = bin_file + "/lib/" + bin_file + ".rb";
|
|
116
|
-
// exports.require(bin_path);
|
|
117
|
-
require_path = bin_path;
|
|
118
|
-
}
|
|
119
|
-
else if (exports.files[bin_path = path + '/' + path + '.rb']) {
|
|
120
|
-
// bin_path = bin_file + "/lib/" + bin_file + ".rb";
|
|
121
|
-
// exports.require(bin_path);
|
|
122
|
-
require_path = bin_path;
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
throw "cannot find bin file"
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
opal.entry_point(function() {
|
|
129
|
-
// require our main "browser" spec as well - seems silly making the user
|
|
130
|
-
// have to do this when we know for a fact we are in the browser.
|
|
131
|
-
exports.require('browser');
|
|
132
|
-
return exports.require(require_path);
|
|
133
|
-
});
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
// require the file at the given path: we have already checked it exists - mark
|
|
137
|
-
// as being required - execute in context of top_self
|
|
138
|
-
//
|
|
139
|
-
// params function(__FILE__) { .. }
|
|
140
|
-
var file_require_path = function(path) {
|
|
141
|
-
// console.log("requiring " + path);
|
|
142
|
-
var f = file_list[path];
|
|
143
|
-
f.opal_required = true;
|
|
144
|
-
return f.apply(exports.top_self, [path]);
|
|
145
|
-
};
|
|
146
|
-
|
|
147
|
-
// require the js string path.. might come from ruby, might come from js
|
|
148
|
-
exports.require = function(orig_path) {
|
|
149
|
-
// console.log("native require: " + orig_path);
|
|
150
|
-
// console.log(load_paths);
|
|
151
|
-
var path = orig_path;
|
|
152
|
-
// basically loop through each of the load paths looking for a match
|
|
153
|
-
if ((path.substr(path.length - 3) != '.rb') && (path.substr(path.length -3) != '.js')) {
|
|
154
|
-
// console.log("need to add .rb");
|
|
155
|
-
path += '.rb'
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
for (var i = 0; i < load_paths.length; i++) {
|
|
159
|
-
var try_path = load_paths[i] + path;
|
|
160
|
-
// console.log("does exist? " + try_path);
|
|
161
|
-
if (file_list.hasOwnProperty(try_path)) {
|
|
162
|
-
if (file_list[try_path].opal_required) {
|
|
163
|
-
// console.log("already required " + path);
|
|
164
|
-
return;
|
|
165
|
-
}
|
|
166
|
-
// console.log("shit son!!!!");
|
|
167
|
-
// console.log(file_list[try_path]);
|
|
168
|
-
return file_require_path(try_path);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
throw "could not find require: " + orig_path;
|
|
173
|
-
};
|
|
174
|
-
|
|
175
|
-
// load the raw file, given as a function imolementation as the given filename
|
|
176
|
-
//
|
|
177
|
-
// @param [String] filename
|
|
178
|
-
// @param [Function] implementation
|
|
179
|
-
exports.load_raw_file = function(filename, implementation) {
|
|
180
|
-
return implementation.apply(exports.top_self);
|
|
181
|
-
};
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
// =========================
|
|
185
|
-
// = Browser bits and bobs =
|
|
186
|
-
// =========================
|
|
187
|
-
|
|
188
|
-
var browser = exports.browser = (function() {
|
|
189
|
-
var agent = navigator.userAgent.toLowerCase();
|
|
190
|
-
var version = 1;
|
|
191
|
-
var browser = {
|
|
192
|
-
version: 0,
|
|
193
|
-
safari: (/webkit/).test(agent) ? version : 0,
|
|
194
|
-
opera: (/opera/).test(agent) ? version : 0,
|
|
195
|
-
msie: (/msie/).test(agent) && !(/opera/).test(agent) ? version : 0
|
|
196
|
-
};
|
|
197
|
-
|
|
198
|
-
return browser;
|
|
199
|
-
})();
|
|
200
|
-
|
|
201
|
-
// set callback for when opal/document is ready to go!
|
|
202
|
-
exports.setDocumentReadyListener = function(callback) {
|
|
203
|
-
// run it in the context of top self
|
|
204
|
-
var on_ready = function() {
|
|
205
|
-
opal.entry_point(function() {
|
|
206
|
-
callback.apply(opal.top_self);
|
|
207
|
-
});
|
|
208
|
-
};
|
|
209
|
-
// attach ready function
|
|
210
|
-
(function(){
|
|
211
|
-
// w3c - firefox, safari, opera
|
|
212
|
-
if (document.addEventListener) {
|
|
213
|
-
document.addEventListener("DOMContentLoaded", on_ready, false);
|
|
214
|
-
}
|
|
215
|
-
// internet explorer
|
|
216
|
-
if (exports.browser.msie) {
|
|
217
|
-
(function() {
|
|
218
|
-
try {
|
|
219
|
-
document.documentElement.doScroll('left');
|
|
220
|
-
}
|
|
221
|
-
catch (e) {
|
|
222
|
-
setTimeout(arguments.callee, 0);
|
|
223
|
-
return;
|
|
224
|
-
}
|
|
225
|
-
on_ready();
|
|
226
|
-
})();
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
})();
|
|
230
|
-
};
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
exports.glob_files = function(glob) {
|
|
234
|
-
var working = glob.replace(/\*\*\//g, '.*').replace(/\*\*/g, '.*').replace(/\//g, '\\/');
|
|
235
|
-
var result = [];
|
|
236
|
-
var reg = new RegExp('^' + working + '$');
|
|
237
|
-
for (var prop in opal.files) {
|
|
238
|
-
if (reg.exec(prop)) {
|
|
239
|
-
result.push(prop);
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
return result;
|
|
243
|
-
};
|
|
244
|
-
|
|
245
|
-
// ================
|
|
246
|
-
// = On ready etc =
|
|
247
|
-
// ================
|
|
248
|
-
// var on_ready = function() {
|
|
249
|
-
// console.log("===== on_ready");
|
|
250
|
-
|
|
251
|
-
// };
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
exports.ruby_platform = "browser";
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
// native xml http request
|
|
259
|
-
exports.request = (function() {
|
|
260
|
-
try {
|
|
261
|
-
new XMLHttpRequest();
|
|
262
|
-
return function() {
|
|
263
|
-
return new XMLHttpRequest();
|
|
264
|
-
};
|
|
265
|
-
}
|
|
266
|
-
catch (e) {
|
|
267
|
-
try {
|
|
268
|
-
new ActiveXObject('MSXML2.XMLHTTP');
|
|
269
|
-
return function() {
|
|
270
|
-
return new ActiveXObject('MSXML2.XMLHTTP');
|
|
271
|
-
};
|
|
272
|
-
}
|
|
273
|
-
catch (e) {
|
|
274
|
-
try {
|
|
275
|
-
new ActiveXObject('Microsoft.XMLHTTP');
|
|
276
|
-
return function() {
|
|
277
|
-
return new ActiveXObject('Microsoft.XMLHTTP');
|
|
278
|
-
};
|
|
279
|
-
}
|
|
280
|
-
catch (e) {
|
|
281
|
-
return function() {
|
|
282
|
-
console.log("cannot create a native XMLHttpRequest");
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
})();
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
// DEBUG
|
|
2
|
-
|
|
3
|
-
// only do this if we want a stack trace
|
|
4
|
-
(function() {
|
|
5
|
-
// Our stack trace class - js prototpye based class
|
|
6
|
-
var StackTracer = function() {
|
|
7
|
-
this.stack = [];
|
|
8
|
-
this.file_stack = [];
|
|
9
|
-
return this;
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
StackTracer.prototype = {
|
|
13
|
-
|
|
14
|
-
reset: function() {
|
|
15
|
-
this.stack = [];
|
|
16
|
-
this.file_stack = [];
|
|
17
|
-
return this;
|
|
18
|
-
},
|
|
19
|
-
|
|
20
|
-
start_file: function(filename) {
|
|
21
|
-
this.file_stack.push(filename);
|
|
22
|
-
},
|
|
23
|
-
|
|
24
|
-
end_file: function() {
|
|
25
|
-
this.file_stack.pop();
|
|
26
|
-
},
|
|
27
|
-
|
|
28
|
-
current_file: function() {
|
|
29
|
-
return this.file_stack[this.file_stack.length - 1];
|
|
30
|
-
},
|
|
31
|
-
|
|
32
|
-
push: function(frame) {
|
|
33
|
-
// console.log("calling " + m_id + " on " + obj.class_name);
|
|
34
|
-
this.stack.push(frame);
|
|
35
|
-
},
|
|
36
|
-
|
|
37
|
-
pop: function(m_id, obj) {
|
|
38
|
-
this.stack.pop();
|
|
39
|
-
},
|
|
40
|
-
|
|
41
|
-
backtrace: function() {
|
|
42
|
-
|
|
43
|
-
// did we find null or undefined (mark as warning)
|
|
44
|
-
var found_warning = false;
|
|
45
|
-
|
|
46
|
-
// call $inspect on recv, but catches errors.. when we get an error we
|
|
47
|
-
// return <undefined> or <null> to indicate we probably have null (or
|
|
48
|
-
// undefined where it should not be
|
|
49
|
-
var inspect = function(recv) {
|
|
50
|
-
try {
|
|
51
|
-
return recv.$inspect();
|
|
52
|
-
} catch (e) {
|
|
53
|
-
found_warning = true;
|
|
54
|
-
if (recv === undefined)
|
|
55
|
-
return "<undefined>";
|
|
56
|
-
else if (recv === null)
|
|
57
|
-
return "<null>";
|
|
58
|
-
else
|
|
59
|
-
return "<error>";
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
// console.log("stack is:");
|
|
63
|
-
// console.log(this.stack);
|
|
64
|
-
var frame, str, i = this.stack.length;
|
|
65
|
-
while (i--) {
|
|
66
|
-
// reset warning
|
|
67
|
-
found_warning = false
|
|
68
|
-
|
|
69
|
-
frame = this.stack[i];
|
|
70
|
-
// console.log(frame);
|
|
71
|
-
var args = frame.args;
|
|
72
|
-
|
|
73
|
-
var str = ' from ' + frame.body.__opal_file__ + ':' + frame.body.__opal_line__ + ':in ' + inspect(frame.recv) + '.' + frame.mid;
|
|
74
|
-
|
|
75
|
-
// console.log(frame.recv.$inspect());
|
|
76
|
-
|
|
77
|
-
if (args.length > 0) {
|
|
78
|
-
str += '(';
|
|
79
|
-
for (var j = 0; j < args.length; j++) {
|
|
80
|
-
if (j > 0) str += ', ';
|
|
81
|
-
str += inspect(args[j]);
|
|
82
|
-
}
|
|
83
|
-
str += ')';
|
|
84
|
-
} else {
|
|
85
|
-
str += '()';
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
found_warning ? console.warn(str) : console.log(str);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
// our global stack tracking object
|
|
95
|
-
var stack_tracer = exports.stack_trace = new StackTracer();
|
|
96
|
-
|
|
97
|
-
// When loading raw files (used for core library), set the right filename
|
|
98
|
-
var old_load_raw_file = exports.load_raw_file;
|
|
99
|
-
exports.load_raw_file = function(filename, implementation) {
|
|
100
|
-
stack_tracer.start_file(filename);
|
|
101
|
-
var result = old_load_raw_file.apply(this, arguments);
|
|
102
|
-
stack_tracer.end_file();
|
|
103
|
-
return result;
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
// Replace the file_require_path method to make calls to stack_tracer
|
|
107
|
-
var old_file_require_path = file_require_path;
|
|
108
|
-
file_require_path = function(path) {
|
|
109
|
-
stack_tracer.start_file(path);
|
|
110
|
-
var result = old_file_require_path.apply(this, arguments);
|
|
111
|
-
stack_tracer.end_file();
|
|
112
|
-
return result;
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
// Our entry point must be modified to actually capture these potential
|
|
117
|
-
// errors and then log the backtrace. Also, every time we begin an entry
|
|
118
|
-
// point, we must reset the stack tracer (it should be reset automatically
|
|
119
|
-
// by the right number of methods popping themselves off, but lets make sure
|
|
120
|
-
// anyway)
|
|
121
|
-
exports.entry_point = function(func) {
|
|
122
|
-
stack_tracer.reset();
|
|
123
|
-
try {
|
|
124
|
-
return func();
|
|
125
|
-
}
|
|
126
|
-
catch (e) {
|
|
127
|
-
console.error(e.toString());
|
|
128
|
-
stack_tracer.backtrace();
|
|
129
|
-
}
|
|
130
|
-
};
|
|
131
|
-
|
|
132
|
-
// Replace the define method function. The new implementation replaces the
|
|
133
|
-
// given body with a custom body that marks when the method is called, and
|
|
134
|
-
// then when it leaves. This is pushed/popped to the stack so we can keep
|
|
135
|
-
// track of the call chain. The generatr actually gives us our line number
|
|
136
|
-
// for each egneerated method, so in debug mode lets actuqllly use it
|
|
137
|
-
var old_dm = __boot_base_class.prototype.dm;
|
|
138
|
-
// wrap the given function so we can log traces
|
|
139
|
-
var wrap = function(mid, body, singleton, line_number) {
|
|
140
|
-
// keep track of what was defined where
|
|
141
|
-
body.__opal_file__ = stack_tracer.current_file();
|
|
142
|
-
body.__opal_line__ = line_number;
|
|
143
|
-
// new implementation
|
|
144
|
-
return function() {
|
|
145
|
-
// console.log("calling " + mid);
|
|
146
|
-
// stack_tracer.push(mid, this, body);
|
|
147
|
-
stack_tracer.push({
|
|
148
|
-
mid: mid,
|
|
149
|
-
recv: this,
|
|
150
|
-
body: body,
|
|
151
|
-
args: Array.prototype.slice.call(arguments)
|
|
152
|
-
});
|
|
153
|
-
var result = body.apply(this, arguments);
|
|
154
|
-
stack_tracer.pop();
|
|
155
|
-
// console.log("finished calling " + mid);
|
|
156
|
-
return result;
|
|
157
|
-
};
|
|
158
|
-
};
|
|
159
|
-
|
|
160
|
-
__boot_base_class.prototype.dm = function(m_id, body, singleton, line) {
|
|
161
|
-
// console.log("adding " + m_id);
|
|
162
|
-
body = wrap(m_id, body, singleton, line);
|
|
163
|
-
return old_dm.apply(this, [m_id, body, singleton]);
|
|
164
|
-
};
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
// In debug mode we support method_missing. This is ONLY FOR DEBUG mode.
|
|
168
|
-
// This is not to be used for metaprgramming. Basically method_missing
|
|
169
|
-
// allows us to have nicer output from our method missing calls instead of
|
|
170
|
-
// "this.ig("@adam").$do_something(....etc....)" we get normal ruby
|
|
171
|
-
// formatted message. (ms = message_send)
|
|
172
|
-
__boot_base_class.prototype.ms = function(mid) {
|
|
173
|
-
// args are all the args after initial mid
|
|
174
|
-
var args = Array.prototype.slice.call(arguments);
|
|
175
|
-
// we could really do all the stack tracing in here..?
|
|
176
|
-
|
|
177
|
-
//FIXME: incompletet
|
|
178
|
-
};
|
|
179
|
-
|
|
180
|
-
})();
|