ruby-internal 0.6.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/COPYING +59 -0
- data/LGPL +515 -0
- data/LICENSE +9 -0
- data/README +31 -0
- data/Rakefile +20 -0
- data/TODO +9 -0
- data/example/README +5 -0
- data/example/simple_client.rb +12 -0
- data/example/simple_server.rb +11 -0
- data/example/triangle_client.rb +7 -0
- data/example/triangle_server.rb +24 -0
- data/ext/cached/ruby-1.8.0/internal/binding/block.h +37 -0
- data/ext/cached/ruby-1.8.0/internal/method/method.h +19 -0
- data/ext/cached/ruby-1.8.0/internal/module/classpath.c +27 -0
- data/ext/cached/ruby-1.8.0/internal/module/classpath.h +14 -0
- data/ext/cached/ruby-1.8.0/internal/node/block.h +37 -0
- data/ext/cached/ruby-1.8.0/internal/node/global_entry.h +10 -0
- data/ext/cached/ruby-1.8.0/internal/node/node_type_descrip.c +155 -0
- data/ext/cached/ruby-1.8.0/internal/node/nodeinfo.c +5741 -0
- data/ext/cached/ruby-1.8.0/internal/node/nodeinfo.h +69 -0
- data/ext/cached/ruby-1.8.0/internal/proc/block.h +37 -0
- data/ext/cached/ruby-1.8.0/internal/tag/tag.h +15 -0
- data/ext/cached/ruby-1.8.0/internal/vm/instruction/insns_info.c +39 -0
- data/ext/cached/ruby-1.8.0/internal/vm/instruction/insns_info.h +21 -0
- data/ext/cached/ruby-1.8.0/internal/vm/iseq/insns_info.inc +12 -0
- data/ext/cached/ruby-1.8.1/internal/binding/block.h +31 -0
- data/ext/cached/ruby-1.8.1/internal/method/method.h +19 -0
- data/ext/cached/ruby-1.8.1/internal/module/classpath.c +27 -0
- data/ext/cached/ruby-1.8.1/internal/module/classpath.h +14 -0
- data/ext/cached/ruby-1.8.1/internal/node/block.h +31 -0
- data/ext/cached/ruby-1.8.1/internal/node/global_entry.h +10 -0
- data/ext/cached/ruby-1.8.1/internal/node/node_type_descrip.c +154 -0
- data/ext/cached/ruby-1.8.1/internal/node/nodeinfo.c +5733 -0
- data/ext/cached/ruby-1.8.1/internal/node/nodeinfo.h +69 -0
- data/ext/cached/ruby-1.8.1/internal/proc/block.h +31 -0
- data/ext/cached/ruby-1.8.1/internal/tag/tag.h +16 -0
- data/ext/cached/ruby-1.8.1/internal/vm/instruction/insns_info.c +39 -0
- data/ext/cached/ruby-1.8.1/internal/vm/instruction/insns_info.h +21 -0
- data/ext/cached/ruby-1.8.1/internal/vm/iseq/insns_info.inc +12 -0
- data/ext/cached/ruby-1.8.2/internal/binding/block.h +32 -0
- data/ext/cached/ruby-1.8.2/internal/method/method.h +19 -0
- data/ext/cached/ruby-1.8.2/internal/module/classpath.c +45 -0
- data/ext/cached/ruby-1.8.2/internal/module/classpath.h +17 -0
- data/ext/cached/ruby-1.8.2/internal/node/block.h +32 -0
- data/ext/cached/ruby-1.8.2/internal/node/global_entry.h +10 -0
- data/ext/cached/ruby-1.8.2/internal/node/node_type_descrip.c +154 -0
- data/ext/cached/ruby-1.8.2/internal/node/nodeinfo.c +5733 -0
- data/ext/cached/ruby-1.8.2/internal/node/nodeinfo.h +69 -0
- data/ext/cached/ruby-1.8.2/internal/proc/block.h +32 -0
- data/ext/cached/ruby-1.8.2/internal/tag/tag.h +16 -0
- data/ext/cached/ruby-1.8.2/internal/vm/instruction/insns_info.c +39 -0
- data/ext/cached/ruby-1.8.2/internal/vm/instruction/insns_info.h +21 -0
- data/ext/cached/ruby-1.8.2/internal/vm/iseq/insns_info.inc +12 -0
- data/ext/cached/ruby-1.8.3/internal/binding/block.h +32 -0
- data/ext/cached/ruby-1.8.3/internal/method/method.h +20 -0
- data/ext/cached/ruby-1.8.3/internal/module/classpath.c +45 -0
- data/ext/cached/ruby-1.8.3/internal/module/classpath.h +17 -0
- data/ext/cached/ruby-1.8.3/internal/node/block.h +32 -0
- data/ext/cached/ruby-1.8.3/internal/node/global_entry.h +10 -0
- data/ext/cached/ruby-1.8.3/internal/node/node_type_descrip.c +154 -0
- data/ext/cached/ruby-1.8.3/internal/node/nodeinfo.c +5733 -0
- data/ext/cached/ruby-1.8.3/internal/node/nodeinfo.h +69 -0
- data/ext/cached/ruby-1.8.3/internal/proc/block.h +32 -0
- data/ext/cached/ruby-1.8.3/internal/tag/tag.h +16 -0
- data/ext/cached/ruby-1.8.3/internal/vm/instruction/insns_info.c +39 -0
- data/ext/cached/ruby-1.8.3/internal/vm/instruction/insns_info.h +21 -0
- data/ext/cached/ruby-1.8.3/internal/vm/iseq/insns_info.inc +12 -0
- data/ext/cached/ruby-1.8.4/internal/binding/block.h +32 -0
- data/ext/cached/ruby-1.8.4/internal/method/method.h +20 -0
- data/ext/cached/ruby-1.8.4/internal/module/classpath.c +45 -0
- data/ext/cached/ruby-1.8.4/internal/module/classpath.h +17 -0
- data/ext/cached/ruby-1.8.4/internal/node/block.h +32 -0
- data/ext/cached/ruby-1.8.4/internal/node/global_entry.h +10 -0
- data/ext/cached/ruby-1.8.4/internal/node/node_type_descrip.c +154 -0
- data/ext/cached/ruby-1.8.4/internal/node/nodeinfo.c +5733 -0
- data/ext/cached/ruby-1.8.4/internal/node/nodeinfo.h +69 -0
- data/ext/cached/ruby-1.8.4/internal/proc/block.h +32 -0
- data/ext/cached/ruby-1.8.4/internal/tag/tag.h +16 -0
- data/ext/cached/ruby-1.8.4/internal/vm/instruction/insns_info.c +39 -0
- data/ext/cached/ruby-1.8.4/internal/vm/instruction/insns_info.h +21 -0
- data/ext/cached/ruby-1.8.4/internal/vm/iseq/insns_info.inc +12 -0
- data/ext/cached/ruby-1.8.5/internal/binding/block.h +32 -0
- data/ext/cached/ruby-1.8.5/internal/method/method.h +20 -0
- data/ext/cached/ruby-1.8.5/internal/module/classpath.c +45 -0
- data/ext/cached/ruby-1.8.5/internal/module/classpath.h +17 -0
- data/ext/cached/ruby-1.8.5/internal/node/block.h +32 -0
- data/ext/cached/ruby-1.8.5/internal/node/global_entry.h +10 -0
- data/ext/cached/ruby-1.8.5/internal/node/node_type_descrip.c +154 -0
- data/ext/cached/ruby-1.8.5/internal/node/nodeinfo.c +5732 -0
- data/ext/cached/ruby-1.8.5/internal/node/nodeinfo.h +67 -0
- data/ext/cached/ruby-1.8.5/internal/proc/block.h +32 -0
- data/ext/cached/ruby-1.8.5/internal/tag/tag.h +16 -0
- data/ext/cached/ruby-1.8.5/internal/vm/instruction/insns_info.c +39 -0
- data/ext/cached/ruby-1.8.5/internal/vm/instruction/insns_info.h +21 -0
- data/ext/cached/ruby-1.8.5/internal/vm/iseq/insns_info.inc +12 -0
- data/ext/cached/ruby-1.8.6/internal/binding/block.h +32 -0
- data/ext/cached/ruby-1.8.6/internal/method/method.h +20 -0
- data/ext/cached/ruby-1.8.6/internal/module/classpath.c +45 -0
- data/ext/cached/ruby-1.8.6/internal/module/classpath.h +17 -0
- data/ext/cached/ruby-1.8.6/internal/node/block.h +32 -0
- data/ext/cached/ruby-1.8.6/internal/node/global_entry.h +10 -0
- data/ext/cached/ruby-1.8.6/internal/node/node_type_descrip.c +154 -0
- data/ext/cached/ruby-1.8.6/internal/node/nodeinfo.c +5732 -0
- data/ext/cached/ruby-1.8.6/internal/node/nodeinfo.h +67 -0
- data/ext/cached/ruby-1.8.6/internal/proc/block.h +32 -0
- data/ext/cached/ruby-1.8.6/internal/tag/tag.h +16 -0
- data/ext/cached/ruby-1.8.6/internal/vm/instruction/insns_info.c +39 -0
- data/ext/cached/ruby-1.8.6/internal/vm/instruction/insns_info.h +21 -0
- data/ext/cached/ruby-1.8.6/internal/vm/iseq/insns_info.inc +12 -0
- data/ext/cached/ruby-1.8.7/internal/binding/block.h +32 -0
- data/ext/cached/ruby-1.8.7/internal/method/method.h +20 -0
- data/ext/cached/ruby-1.8.7/internal/module/classpath.c +45 -0
- data/ext/cached/ruby-1.8.7/internal/module/classpath.h +17 -0
- data/ext/cached/ruby-1.8.7/internal/node/block.h +32 -0
- data/ext/cached/ruby-1.8.7/internal/node/global_entry.h +10 -0
- data/ext/cached/ruby-1.8.7/internal/node/node_type_descrip.c +154 -0
- data/ext/cached/ruby-1.8.7/internal/node/nodeinfo.c +5732 -0
- data/ext/cached/ruby-1.8.7/internal/node/nodeinfo.h +67 -0
- data/ext/cached/ruby-1.8.7/internal/proc/block.h +32 -0
- data/ext/cached/ruby-1.8.7/internal/tag/tag.h +16 -0
- data/ext/cached/ruby-1.8.7/internal/vm/instruction/insns_info.c +39 -0
- data/ext/cached/ruby-1.8.7/internal/vm/instruction/insns_info.h +21 -0
- data/ext/cached/ruby-1.8.7/internal/vm/iseq/insns_info.inc +12 -0
- data/ext/cached/ruby-1.9.0/internal/binding/block.h +12 -0
- data/ext/cached/ruby-1.9.0/internal/method/method.h +20 -0
- data/ext/cached/ruby-1.9.0/internal/module/classpath.c +42 -0
- data/ext/cached/ruby-1.9.0/internal/module/classpath.h +17 -0
- data/ext/cached/ruby-1.9.0/internal/node/block.h +12 -0
- data/ext/cached/ruby-1.9.0/internal/node/global_entry.h +10 -0
- data/ext/cached/ruby-1.9.0/internal/node/node_type_descrip.c +149 -0
- data/ext/cached/ruby-1.9.0/internal/node/nodeinfo.c +5579 -0
- data/ext/cached/ruby-1.9.0/internal/node/nodeinfo.h +70 -0
- data/ext/cached/ruby-1.9.0/internal/proc/block.h +12 -0
- data/ext/cached/ruby-1.9.0/internal/tag/tag.h +6 -0
- data/ext/cached/ruby-1.9.0/internal/vm/instruction/insns_info.c +5936 -0
- data/ext/cached/ruby-1.9.0/internal/vm/instruction/insns_info.h +891 -0
- data/ext/cached/ruby-1.9.0/internal/vm/iseq/insns_info.inc +700 -0
- data/ext/cached/ruby-1.9.0/internal/yarv-headers/debug.h +36 -0
- data/ext/cached/ruby-1.9.0/internal/yarv-headers/dln.h +41 -0
- data/ext/cached/ruby-1.9.0/internal/yarv-headers/encdb.h +147 -0
- data/ext/cached/ruby-1.9.0/internal/yarv-headers/eval_intern.h +221 -0
- data/ext/cached/ruby-1.9.0/internal/yarv-headers/gc.h +75 -0
- data/ext/cached/ruby-1.9.0/internal/yarv-headers/id.h +83 -0
- data/ext/cached/ruby-1.9.0/internal/yarv-headers/iseq.h +94 -0
- data/ext/cached/ruby-1.9.0/internal/yarv-headers/node.h +516 -0
- data/ext/cached/ruby-1.9.0/internal/yarv-headers/parse.h +303 -0
- data/ext/cached/ruby-1.9.0/internal/yarv-headers/regenc.h +207 -0
- data/ext/cached/ruby-1.9.0/internal/yarv-headers/regint.h +842 -0
- data/ext/cached/ruby-1.9.0/internal/yarv-headers/regparse.h +351 -0
- data/ext/cached/ruby-1.9.0/internal/yarv-headers/revision.h +1 -0
- data/ext/cached/ruby-1.9.0/internal/yarv-headers/thread_pthread.h +24 -0
- data/ext/cached/ruby-1.9.0/internal/yarv-headers/thread_win32.h +33 -0
- data/ext/cached/ruby-1.9.0/internal/yarv-headers/transcode_data.h +99 -0
- data/ext/cached/ruby-1.9.0/internal/yarv-headers/transdb.h +67 -0
- data/ext/cached/ruby-1.9.0/internal/yarv-headers/version.h +57 -0
- data/ext/cached/ruby-1.9.0/internal/yarv-headers/vm_core.h +663 -0
- data/ext/cached/ruby-1.9.0/internal/yarv-headers/vm_exec.h +187 -0
- data/ext/cached/ruby-1.9.0/internal/yarv-headers/vm_insnhelper.h +191 -0
- data/ext/cached/ruby-1.9.0/internal/yarv-headers/vm_opts.h +51 -0
- data/ext/cached/ruby-1.9.1/internal/binding/block.h +12 -0
- data/ext/cached/ruby-1.9.1/internal/method/method.h +20 -0
- data/ext/cached/ruby-1.9.1/internal/module/classpath.c +42 -0
- data/ext/cached/ruby-1.9.1/internal/module/classpath.h +17 -0
- data/ext/cached/ruby-1.9.1/internal/node/block.h +12 -0
- data/ext/cached/ruby-1.9.1/internal/node/global_entry.h +10 -0
- data/ext/cached/ruby-1.9.1/internal/node/node_type_descrip.c +149 -0
- data/ext/cached/ruby-1.9.1/internal/node/nodeinfo.c +5579 -0
- data/ext/cached/ruby-1.9.1/internal/node/nodeinfo.h +70 -0
- data/ext/cached/ruby-1.9.1/internal/proc/block.h +12 -0
- data/ext/cached/ruby-1.9.1/internal/tag/tag.h +6 -0
- data/ext/cached/ruby-1.9.1/internal/vm/instruction/insns_info.c +5936 -0
- data/ext/cached/ruby-1.9.1/internal/vm/instruction/insns_info.h +891 -0
- data/ext/cached/ruby-1.9.1/internal/vm/iseq/insns_info.inc +700 -0
- data/ext/cached/ruby-1.9.1/internal/yarv-headers/debug.h +36 -0
- data/ext/cached/ruby-1.9.1/internal/yarv-headers/dln.h +41 -0
- data/ext/cached/ruby-1.9.1/internal/yarv-headers/encdb.h +147 -0
- data/ext/cached/ruby-1.9.1/internal/yarv-headers/eval_intern.h +209 -0
- data/ext/cached/ruby-1.9.1/internal/yarv-headers/gc.h +75 -0
- data/ext/cached/ruby-1.9.1/internal/yarv-headers/id.h +184 -0
- data/ext/cached/ruby-1.9.1/internal/yarv-headers/iseq.h +94 -0
- data/ext/cached/ruby-1.9.1/internal/yarv-headers/node.h +516 -0
- data/ext/cached/ruby-1.9.1/internal/yarv-headers/parse.h +303 -0
- data/ext/cached/ruby-1.9.1/internal/yarv-headers/regenc.h +207 -0
- data/ext/cached/ruby-1.9.1/internal/yarv-headers/regint.h +842 -0
- data/ext/cached/ruby-1.9.1/internal/yarv-headers/regparse.h +351 -0
- data/ext/cached/ruby-1.9.1/internal/yarv-headers/revision.h +1 -0
- data/ext/cached/ruby-1.9.1/internal/yarv-headers/thread_pthread.h +24 -0
- data/ext/cached/ruby-1.9.1/internal/yarv-headers/thread_win32.h +33 -0
- data/ext/cached/ruby-1.9.1/internal/yarv-headers/transcode_data.h +99 -0
- data/ext/cached/ruby-1.9.1/internal/yarv-headers/transdb.h +85 -0
- data/ext/cached/ruby-1.9.1/internal/yarv-headers/version.h +60 -0
- data/ext/cached/ruby-1.9.1/internal/yarv-headers/vm_core.h +655 -0
- data/ext/cached/ruby-1.9.1/internal/yarv-headers/vm_exec.h +187 -0
- data/ext/cached/ruby-1.9.1/internal/yarv-headers/vm_insnhelper.h +194 -0
- data/ext/cached/ruby-1.9.1/internal/yarv-headers/vm_opts.h +51 -0
- data/ext/internal/binding/binding.c +45 -0
- data/ext/internal/binding/block.h.rpp +44 -0
- data/ext/internal/binding/extconf.rb +6 -0
- data/ext/internal/method/extconf.rb +8 -0
- data/ext/internal/method/method.c +269 -0
- data/ext/internal/method/method.h.rpp +58 -0
- data/ext/internal/module/classpath.c.rpp +29 -0
- data/ext/internal/module/classpath.h.rpp +36 -0
- data/ext/internal/module/extconf.rb +11 -0
- data/ext/internal/module/module.c +797 -0
- data/ext/internal/module/module.h +7 -0
- data/ext/internal/node/block.h.rpp +44 -0
- data/ext/internal/node/builtins.h +41 -0
- data/ext/internal/node/extconf.rb +66 -0
- data/ext/internal/node/global_entry.h.rpp +26 -0
- data/ext/internal/node/node.c +1147 -0
- data/ext/internal/node/node_type_descrip.c.rpp +72 -0
- data/ext/internal/node/node_type_descrip.h +17 -0
- data/ext/internal/node/node_type_descrip.rb +39 -0
- data/ext/internal/node/nodeinfo.c.rpp +587 -0
- data/ext/internal/node/nodeinfo.h.rpp +30 -0
- data/ext/internal/node/nodes.rb +78 -0
- data/ext/internal/node/read_node_h.rb +34 -0
- data/ext/internal/node/ruby_internal_node.h +31 -0
- data/ext/internal/noex/extconf.rb +6 -0
- data/ext/internal/noex/noex.c +44 -0
- data/ext/internal/object/extconf.rb +4 -0
- data/ext/internal/object/object.c +75 -0
- data/ext/internal/proc/block.h.rpp +44 -0
- data/ext/internal/proc/extconf.rb +9 -0
- data/ext/internal/proc/proc.c +331 -0
- data/ext/internal/tag/extconf.rb +3 -0
- data/ext/internal/tag/tag.c +17 -0
- data/ext/internal/tag/tag.h.rpp +22 -0
- data/ext/internal/thread/extconf.rb +3 -0
- data/ext/internal/thread/thread.c +107 -0
- data/ext/internal/vm/constants/constants.c +33 -0
- data/ext/internal/vm/constants/extconf.rb +3 -0
- data/ext/internal/vm/control_frame/control_frame.c +185 -0
- data/ext/internal/vm/control_frame/control_frame.h +18 -0
- data/ext/internal/vm/control_frame/extconf.rb +3 -0
- data/ext/internal/vm/extconf.rb +3 -0
- data/ext/internal/vm/inline_cache/extconf.rb +6 -0
- data/ext/internal/vm/inline_cache/inline_cache.c +79 -0
- data/ext/internal/vm/instruction/extconf.rb +6 -0
- data/ext/internal/vm/instruction/insns_info.c.rpp +213 -0
- data/ext/internal/vm/instruction/insns_info.h.rpp +53 -0
- data/ext/internal/vm/instruction/instruction.c +78 -0
- data/ext/internal/vm/instruction/instruction.h +10 -0
- data/ext/internal/vm/iseq/extconf.rb +7 -0
- data/ext/internal/vm/iseq/insns_info.inc.rpp +30 -0
- data/ext/internal/vm/iseq/internal_iseq.h +9 -0
- data/ext/internal/vm/iseq/iseq.c +555 -0
- data/ext/internal/vm/vm.c +55 -0
- data/ext/mkmf-ruby-internal.rb +111 -0
- data/ext/ruby_source_dir.rb +24 -0
- data/ext/rubypp.rb +97 -0
- data/generate_rdoc.rb +33 -0
- data/lib/internal/binding.rb +1 -0
- data/lib/internal/classtree.rb +55 -0
- data/lib/internal/debug.rb +16 -0
- data/lib/internal/method.rb +1 -0
- data/lib/internal/method/as_code.rb +33 -0
- data/lib/internal/method/as_expression.rb +34 -0
- data/lib/internal/method/signature.rb +442 -0
- data/lib/internal/module.rb +1 -0
- data/lib/internal/module/as_code.rb +45 -0
- data/lib/internal/node.rb +3 -0
- data/lib/internal/node/as_code.rb +233 -0
- data/lib/internal/node/as_expression.rb +619 -0
- data/lib/internal/node/dump.rb +53 -0
- data/lib/internal/node/pp.rb +72 -0
- data/lib/internal/node/to_a.rb +52 -0
- data/lib/internal/noex.rb +1 -0
- data/lib/internal/obfusc.rb +57 -0
- data/lib/internal/object.rb +1 -0
- data/lib/internal/object/as_code.rb +10 -0
- data/lib/internal/proc.rb +1 -0
- data/lib/internal/proc/as_code.rb +21 -0
- data/lib/internal/proc/as_expression.rb +14 -0
- data/lib/internal/proc/signature.rb +184 -0
- data/lib/internal/tag.rb +1 -0
- data/lib/internal/thread.rb +1 -0
- data/lib/internal/vm.rb +1 -0
- data/lib/internal/vm/bytedecoder.rb +866 -0
- data/lib/internal/vm/constants.rb +1 -0
- data/lib/internal/vm/control_frame.rb +1 -0
- data/lib/internal/vm/inline_cache.rb +1 -0
- data/lib/internal/vm/instruction.rb +1 -0
- data/lib/internal/vm/iseq.rb +1 -0
- data/lib/internal/vm/iseq/as_code.rb +27 -0
- data/lib/internal/vm/iseq/as_expression.rb +26 -0
- data/metaconfig +19 -0
- data/post-config.rb +1 -0
- data/post-install.rb +4 -0
- data/post-setup.rb +7 -0
- data/pre-config.rb +96 -0
- data/pre-install.rb +13 -0
- data/pre-setup.rb +8 -0
- data/run_tests.rb +26 -0
- data/setup.rb +1599 -0
- data/test/expression_samples.rb +160 -0
- data/test/node_samples.rb +122 -0
- data/test/test_as_code.rb +261 -0
- data/test/test_as_expression.rb +229 -0
- data/test/test_dump_class.rb +187 -0
- data/test/test_dump_method.rb +144 -0
- data/test/test_dump_proc.rb +118 -0
- data/test/test_helpers.rb +61 -0
- data/test/test_method.rb +72 -0
- data/test/test_methodsig.rb +267 -0
- data/test/test_module.rb +49 -0
- data/test/test_node.rb +77 -0
- data/test/test_proc.rb +47 -0
- metadata +377 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#include <ruby.h>
|
|
2
|
+
#include "tag.h"
|
|
3
|
+
|
|
4
|
+
void Init_tag()
|
|
5
|
+
{
|
|
6
|
+
VALUE rb_mTag = rb_define_module("Tag");
|
|
7
|
+
rb_define_const(rb_mTag, "RETURN", INT2NUM(TAG_RETURN));
|
|
8
|
+
rb_define_const(rb_mTag, "BREAK", INT2NUM(TAG_BREAK));
|
|
9
|
+
rb_define_const(rb_mTag, "NEXT", INT2NUM(TAG_NEXT));
|
|
10
|
+
rb_define_const(rb_mTag, "RETRY", INT2NUM(TAG_RETRY));
|
|
11
|
+
rb_define_const(rb_mTag, "REDO", INT2NUM(TAG_REDO));
|
|
12
|
+
rb_define_const(rb_mTag, "RAISE", INT2NUM(TAG_RAISE));
|
|
13
|
+
rb_define_const(rb_mTag, "THROW", INT2NUM(TAG_THROW));
|
|
14
|
+
rb_define_const(rb_mTag, "FATAL", INT2NUM(TAG_FATAL));
|
|
15
|
+
rb_define_const(rb_mTag, "MASK", INT2NUM(TAG_MASK));
|
|
16
|
+
}
|
|
17
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#include <ruby.h>
|
|
2
|
+
|
|
3
|
+
#ifdef RUBY_VM
|
|
4
|
+
#include "eval_intern.h"
|
|
5
|
+
#endif
|
|
6
|
+
|
|
7
|
+
#ruby <<END
|
|
8
|
+
$: << '../..'
|
|
9
|
+
require 'ruby_source_dir'
|
|
10
|
+
eval_c_location = "#{RUBY_SOURCE_DIR}/eval.c"
|
|
11
|
+
|
|
12
|
+
File.open(eval_c_location) do |eval_c|
|
|
13
|
+
while (line = eval_c.gets) != nil do
|
|
14
|
+
case line
|
|
15
|
+
when /^#define TAG_/
|
|
16
|
+
puts line
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
nil
|
|
22
|
+
END
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
#include <ruby.h>
|
|
2
|
+
|
|
3
|
+
#ifdef RUBY_VM
|
|
4
|
+
#include "vm_core.h"
|
|
5
|
+
#include "eval_intern.h"
|
|
6
|
+
#include "internal/vm/control_frame/control_frame.h"
|
|
7
|
+
#endif
|
|
8
|
+
|
|
9
|
+
#ifdef RUBY_VM
|
|
10
|
+
|
|
11
|
+
static VALUE rb_cVmControlFrame;
|
|
12
|
+
|
|
13
|
+
/* TODO: also defined in control_frame.c */
|
|
14
|
+
void mark_ruby_internal_control_frame(
|
|
15
|
+
struct RubyInternalControlFrame * cfp)
|
|
16
|
+
{
|
|
17
|
+
rb_gc_mark(cfp->thread);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/*
|
|
21
|
+
* call-seq:
|
|
22
|
+
* thread.cfp = RubyVM::ControlFrame
|
|
23
|
+
*
|
|
24
|
+
* Returns the thread's control frame.
|
|
25
|
+
*/
|
|
26
|
+
static VALUE thread_cfp(VALUE self)
|
|
27
|
+
{
|
|
28
|
+
rb_thread_t * th;
|
|
29
|
+
rb_control_frame_t * prev_cfp;
|
|
30
|
+
|
|
31
|
+
GetThreadPtr(self, th);
|
|
32
|
+
|
|
33
|
+
/* TODO: Not sure how many control frames back to go to get the one we
|
|
34
|
+
* want */
|
|
35
|
+
prev_cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(th->cfp);
|
|
36
|
+
if((void *)(th->stack + th->stack_size) == (void *)prev_cfp)
|
|
37
|
+
{
|
|
38
|
+
return Qnil;
|
|
39
|
+
}
|
|
40
|
+
else
|
|
41
|
+
{
|
|
42
|
+
struct RubyInternalControlFrame * cfp;
|
|
43
|
+
VALUE cfp_v;
|
|
44
|
+
|
|
45
|
+
cfp_v = Data_Make_Struct(
|
|
46
|
+
rb_cVmControlFrame,
|
|
47
|
+
struct RubyInternalControlFrame,
|
|
48
|
+
mark_ruby_internal_control_frame,
|
|
49
|
+
free,
|
|
50
|
+
cfp);
|
|
51
|
+
|
|
52
|
+
cfp->control_frame = prev_cfp;
|
|
53
|
+
cfp->thread = self;
|
|
54
|
+
|
|
55
|
+
return cfp_v;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/* For Ludicrous */
|
|
60
|
+
void * ruby_current_thread_jmp_buf()
|
|
61
|
+
{
|
|
62
|
+
/* jmp_buf is guaranteed to be an array type that can decay to a
|
|
63
|
+
* pointer */
|
|
64
|
+
rb_thread_t * const th = GET_THREAD();
|
|
65
|
+
return th->tag->buf;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/* For Ludicrous */
|
|
69
|
+
void * ruby_current_thread_tag(void * tag)
|
|
70
|
+
{
|
|
71
|
+
rb_thread_t * const th = GET_THREAD();
|
|
72
|
+
return th->tag;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/* For Ludicrous */
|
|
76
|
+
void ruby_set_current_thread_tag(void * tag)
|
|
77
|
+
{
|
|
78
|
+
rb_thread_t * const th = GET_THREAD();
|
|
79
|
+
th->tag = tag;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
#endif
|
|
83
|
+
|
|
84
|
+
void Init_thread(void)
|
|
85
|
+
{
|
|
86
|
+
/* For rdoc: rb_cThread = rb_define_class("Thread", rb_cObject); */
|
|
87
|
+
|
|
88
|
+
#ifdef RUBY_VM
|
|
89
|
+
VALUE rb_cRubyVM;
|
|
90
|
+
|
|
91
|
+
rb_require("internal/vm/control_frame");
|
|
92
|
+
|
|
93
|
+
if(!rb_const_defined(rb_cObject, rb_intern("RubyVM")))
|
|
94
|
+
{
|
|
95
|
+
rb_define_const(
|
|
96
|
+
rb_cObject,
|
|
97
|
+
"RubyVM",
|
|
98
|
+
rb_const_get(rb_cObject, rb_intern("VM")));
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
rb_cRubyVM = rb_define_class("RubyVM", rb_cObject);
|
|
102
|
+
rb_cVmControlFrame = rb_const_get(rb_cRubyVM, rb_intern("ControlFrame"));
|
|
103
|
+
|
|
104
|
+
rb_define_method(rb_cThread, "cfp", thread_cfp, 0);
|
|
105
|
+
#endif
|
|
106
|
+
}
|
|
107
|
+
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#include <ruby.h>
|
|
2
|
+
|
|
3
|
+
#ifdef RUBY_VM
|
|
4
|
+
#include "vm_core.h"
|
|
5
|
+
#endif
|
|
6
|
+
|
|
7
|
+
void Init_constants(void)
|
|
8
|
+
{
|
|
9
|
+
#ifdef RUBY_VM
|
|
10
|
+
VALUE rb_cRubyVM;
|
|
11
|
+
|
|
12
|
+
if(!rb_const_defined(rb_cObject, rb_intern("RubyVM")))
|
|
13
|
+
{
|
|
14
|
+
rb_define_const(
|
|
15
|
+
rb_cObject,
|
|
16
|
+
"RubyVM",
|
|
17
|
+
rb_const_get(rb_cObject, rb_intern("VM")));
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
rb_cRubyVM = rb_define_class("RubyVM", rb_cObject);
|
|
21
|
+
rb_define_const(rb_cRubyVM, "CALL_ARGS_SPLAT_BIT", INT2NUM(VM_CALL_ARGS_SPLAT_BIT));
|
|
22
|
+
rb_define_const(rb_cRubyVM, "CALL_ARGS_BLOCKARG_BIT", INT2NUM(VM_CALL_ARGS_BLOCKARG_BIT));
|
|
23
|
+
rb_define_const(rb_cRubyVM, "CALL_FCALL_BIT", INT2NUM(VM_CALL_FCALL_BIT));
|
|
24
|
+
rb_define_const(rb_cRubyVM, "CALL_VCALL_BIT", INT2NUM(VM_CALL_VCALL_BIT));
|
|
25
|
+
rb_define_const(rb_cRubyVM, "CALL_TAILCALL_BIT", INT2NUM(VM_CALL_TAILCALL_BIT));
|
|
26
|
+
rb_define_const(rb_cRubyVM, "CALL_TAILRECURSION_BIT", INT2NUM(VM_CALL_TAILRECURSION_BIT));
|
|
27
|
+
rb_define_const(rb_cRubyVM, "CALL_SUPER_BIT", INT2NUM(VM_CALL_SUPER_BIT));
|
|
28
|
+
rb_define_const(rb_cRubyVM, "CALL_SEND_BIT", INT2NUM(VM_CALL_SEND_BIT));
|
|
29
|
+
rb_define_const(rb_cRubyVM, "SPECIAL_OBJECT_VMCORE", INT2NUM(VM_SPECIAL_OBJECT_VMCORE));
|
|
30
|
+
rb_define_const(rb_cRubyVM, "SPECIAL_OBJECT_CBASE", INT2NUM(VM_SPECIAL_OBJECT_CBASE));
|
|
31
|
+
#endif
|
|
32
|
+
}
|
|
33
|
+
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
#include "control_frame.h"
|
|
2
|
+
#include <ruby.h>
|
|
3
|
+
|
|
4
|
+
#ifdef RUBY_VM
|
|
5
|
+
|
|
6
|
+
#include "vm_core.h"
|
|
7
|
+
|
|
8
|
+
/* TODO: Using this class is dangerous, because the control frame can be
|
|
9
|
+
* popped but a reference kept around to it. It will still point to
|
|
10
|
+
* valid memory, but the data itself will be invalid.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
static VALUE rb_cVmControlFrame;
|
|
14
|
+
|
|
15
|
+
void mark_ruby_internal_control_frame(
|
|
16
|
+
struct RubyInternalControlFrame * cfp)
|
|
17
|
+
{
|
|
18
|
+
rb_gc_mark(cfp->thread);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/*
|
|
22
|
+
* call-seq:
|
|
23
|
+
* control_frame.iseq => RubyVM::InstructionSequence
|
|
24
|
+
*
|
|
25
|
+
* Return the frame's iseq member.
|
|
26
|
+
*/
|
|
27
|
+
static VALUE control_frame_iseq(VALUE control_frame)
|
|
28
|
+
{
|
|
29
|
+
struct RubyInternalControlFrame * cfp;
|
|
30
|
+
Data_Get_Struct(control_frame, struct RubyInternalControlFrame, cfp);
|
|
31
|
+
return (VALUE)cfp->control_frame->iseq;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/*
|
|
35
|
+
* call-seq:
|
|
36
|
+
* control_frame.self => Object
|
|
37
|
+
*
|
|
38
|
+
* Return the frame's self member.
|
|
39
|
+
*/
|
|
40
|
+
static VALUE control_frame_self(VALUE control_frame)
|
|
41
|
+
{
|
|
42
|
+
struct RubyInternalControlFrame * cfp;
|
|
43
|
+
Data_Get_Struct(control_frame, struct RubyInternalControlFrame, cfp);
|
|
44
|
+
return cfp->control_frame->self;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/*
|
|
48
|
+
* call-seq:
|
|
49
|
+
* control_frame.block_iseq => RubyVM::InstructionSequence or nil
|
|
50
|
+
*
|
|
51
|
+
* Return the frame's block_iseq member.
|
|
52
|
+
*/
|
|
53
|
+
static VALUE control_frame_block_iseq(VALUE control_frame)
|
|
54
|
+
{
|
|
55
|
+
struct RubyInternalControlFrame * cfp;
|
|
56
|
+
Data_Get_Struct(control_frame, struct RubyInternalControlFrame, cfp);
|
|
57
|
+
if(cfp->control_frame->proc)
|
|
58
|
+
{
|
|
59
|
+
return (VALUE)cfp->control_frame->block_iseq;
|
|
60
|
+
}
|
|
61
|
+
else
|
|
62
|
+
{
|
|
63
|
+
return Qfalse;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/*
|
|
68
|
+
* call-seq:
|
|
69
|
+
* control_frame.proc => ?
|
|
70
|
+
*
|
|
71
|
+
* Return the frame's proc member.
|
|
72
|
+
*/
|
|
73
|
+
static VALUE control_frame_proc(VALUE control_frame)
|
|
74
|
+
{
|
|
75
|
+
struct RubyInternalControlFrame * cfp;
|
|
76
|
+
Data_Get_Struct(control_frame, struct RubyInternalControlFrame, cfp);
|
|
77
|
+
return cfp->control_frame->proc;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/*
|
|
81
|
+
* call-seq:
|
|
82
|
+
* control_frame.method_id => Symbol or nil
|
|
83
|
+
*
|
|
84
|
+
* Return the frame's method_id member.
|
|
85
|
+
*/
|
|
86
|
+
static VALUE control_frame_method_id(VALUE control_frame)
|
|
87
|
+
{
|
|
88
|
+
struct RubyInternalControlFrame * cfp;
|
|
89
|
+
Data_Get_Struct(control_frame, struct RubyInternalControlFrame, cfp);
|
|
90
|
+
if(cfp->control_frame->method_id)
|
|
91
|
+
{
|
|
92
|
+
return ID2SYM(cfp->control_frame->method_id);
|
|
93
|
+
}
|
|
94
|
+
else
|
|
95
|
+
{
|
|
96
|
+
return Qnil;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/*
|
|
101
|
+
* call-seq:
|
|
102
|
+
* control_frame.method_class => Class
|
|
103
|
+
*
|
|
104
|
+
* Return the frame's method_class member.
|
|
105
|
+
*/
|
|
106
|
+
static VALUE control_frame_method_class(VALUE control_frame)
|
|
107
|
+
{
|
|
108
|
+
struct RubyInternalControlFrame * cfp;
|
|
109
|
+
Data_Get_Struct(control_frame, struct RubyInternalControlFrame, cfp);
|
|
110
|
+
return cfp->control_frame->method_class;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/*
|
|
114
|
+
* call-seq:
|
|
115
|
+
* control_frame.prev => RubyVM::ControlFrame
|
|
116
|
+
*
|
|
117
|
+
* Return the frame's prev member.
|
|
118
|
+
*/
|
|
119
|
+
static VALUE control_frame_prev(VALUE control_frame)
|
|
120
|
+
{
|
|
121
|
+
struct RubyInternalControlFrame * cfp;
|
|
122
|
+
rb_thread_t * th;
|
|
123
|
+
rb_control_frame_t * prev_cfp;
|
|
124
|
+
|
|
125
|
+
Data_Get_Struct(control_frame, struct RubyInternalControlFrame, cfp);
|
|
126
|
+
|
|
127
|
+
GetThreadPtr(cfp->thread, th);
|
|
128
|
+
|
|
129
|
+
prev_cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp->control_frame);
|
|
130
|
+
|
|
131
|
+
printf("current: %p\n", cfp->control_frame);
|
|
132
|
+
printf("prev: %p\n", prev_cfp);
|
|
133
|
+
printf("th->stack: %p\n", th->stack);
|
|
134
|
+
printf("th->stack + th->stack_size: %p\n", th->stack + th->stack_size);
|
|
135
|
+
|
|
136
|
+
if((void *)(th->stack + th->stack_size) == (void *)prev_cfp)
|
|
137
|
+
{
|
|
138
|
+
return Qnil;
|
|
139
|
+
}
|
|
140
|
+
else
|
|
141
|
+
{
|
|
142
|
+
VALUE cfp_v;
|
|
143
|
+
struct RubyInternalControlFrame * new_cfp;
|
|
144
|
+
|
|
145
|
+
cfp_v = Data_Make_Struct(
|
|
146
|
+
rb_cVmControlFrame,
|
|
147
|
+
struct RubyInternalControlFrame,
|
|
148
|
+
mark_ruby_internal_control_frame,
|
|
149
|
+
free,
|
|
150
|
+
new_cfp);
|
|
151
|
+
|
|
152
|
+
new_cfp->control_frame = prev_cfp;
|
|
153
|
+
new_cfp->thread = cfp->thread;
|
|
154
|
+
|
|
155
|
+
return cfp_v;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
#endif
|
|
160
|
+
|
|
161
|
+
void Init_control_frame(void)
|
|
162
|
+
{
|
|
163
|
+
#ifdef RUBY_VM
|
|
164
|
+
VALUE rb_cRubyVM;
|
|
165
|
+
|
|
166
|
+
if(!rb_const_defined(rb_cObject, rb_intern("RubyVM")))
|
|
167
|
+
{
|
|
168
|
+
rb_define_const(
|
|
169
|
+
rb_cObject,
|
|
170
|
+
"RubyVM",
|
|
171
|
+
rb_const_get(rb_cObject, rb_intern("VM")));
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
rb_cRubyVM = rb_define_class("RubyVM", rb_cObject);
|
|
175
|
+
rb_cVmControlFrame = rb_define_class_under(rb_cRubyVM, "ControlFrame", rb_cObject);
|
|
176
|
+
rb_define_method(rb_cVmControlFrame, "iseq", control_frame_iseq, 0);
|
|
177
|
+
rb_define_method(rb_cVmControlFrame, "self", control_frame_self, 0);
|
|
178
|
+
rb_define_method(rb_cVmControlFrame, "block_iseq", control_frame_block_iseq, 0);
|
|
179
|
+
rb_define_method(rb_cVmControlFrame, "proc", control_frame_proc, 0);
|
|
180
|
+
rb_define_method(rb_cVmControlFrame, "method_id", control_frame_method_id, 0);
|
|
181
|
+
rb_define_method(rb_cVmControlFrame, "method_class", control_frame_method_class, 0);
|
|
182
|
+
rb_define_method(rb_cVmControlFrame, "prev", control_frame_prev, 0);
|
|
183
|
+
#endif
|
|
184
|
+
}
|
|
185
|
+
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#ifndef RUBY_INTERNAL__VM__CONTROL_FRAME__CONTROL_FRAME_H
|
|
2
|
+
#define RUBY_INTERNAL__VM__CONTROL_FRAME__CONTROL_FRAME_H
|
|
3
|
+
|
|
4
|
+
#include <ruby.h>
|
|
5
|
+
|
|
6
|
+
#ifdef RUBY_VM
|
|
7
|
+
|
|
8
|
+
#include "vm_core.h"
|
|
9
|
+
|
|
10
|
+
struct RubyInternalControlFrame
|
|
11
|
+
{
|
|
12
|
+
rb_control_frame_t * control_frame;
|
|
13
|
+
VALUE thread;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
#endif
|
|
17
|
+
|
|
18
|
+
#endif
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
#include "internal/node/ruby_internal_node.h"
|
|
2
|
+
#include "internal/node/nodeinfo.h"
|
|
3
|
+
#include <ruby.h>
|
|
4
|
+
|
|
5
|
+
#ifdef RUBY_VM
|
|
6
|
+
|
|
7
|
+
#include "vm_core.h"
|
|
8
|
+
|
|
9
|
+
/*
|
|
10
|
+
* call-seq:
|
|
11
|
+
* inline_cache.class => nil
|
|
12
|
+
*
|
|
13
|
+
* Currently returns nil, because returning the real class can cause the
|
|
14
|
+
* interpreter to crash.
|
|
15
|
+
*/
|
|
16
|
+
static VALUE inline_cache_klass(VALUE self)
|
|
17
|
+
{
|
|
18
|
+
/* TODO: returning the real value can crash the interpreter */
|
|
19
|
+
return Qnil;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/*
|
|
23
|
+
* call-seq:
|
|
24
|
+
* inline_cache.value => Object
|
|
25
|
+
*
|
|
26
|
+
* Returns the ic_cache member of the inline cache.
|
|
27
|
+
*/
|
|
28
|
+
static VALUE inline_cache_value(VALUE self)
|
|
29
|
+
{
|
|
30
|
+
IC inline_cache = unwrap_node(self);
|
|
31
|
+
return inline_cache->ic_value;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/*
|
|
35
|
+
* call-seq:
|
|
36
|
+
* inline_cache.vmstat => object
|
|
37
|
+
*
|
|
38
|
+
* Returns the ic_vmstat member of the inline cache.
|
|
39
|
+
*/
|
|
40
|
+
static VALUE inline_cache_vmstat(VALUE self)
|
|
41
|
+
{
|
|
42
|
+
IC inline_cache = unwrap_node(self);
|
|
43
|
+
return INT2NUM(inline_cache->ic_vmstat);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
#endif
|
|
47
|
+
|
|
48
|
+
void Init_inline_cache(void)
|
|
49
|
+
{
|
|
50
|
+
#ifdef RUBY_VM
|
|
51
|
+
VALUE rb_cNode;
|
|
52
|
+
VALUE rb_cRubyVM;
|
|
53
|
+
|
|
54
|
+
rb_require("internal/node/node");
|
|
55
|
+
|
|
56
|
+
rb_cNode = rb_define_class("Node", rb_cObject);
|
|
57
|
+
|
|
58
|
+
if(!rb_const_defined(rb_cObject, rb_intern("RubyVM")))
|
|
59
|
+
{
|
|
60
|
+
rb_define_const(
|
|
61
|
+
rb_cObject,
|
|
62
|
+
"RubyVM",
|
|
63
|
+
rb_const_get(rb_cObject, rb_intern("VM")));
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
rb_cRubyVM = rb_define_class("RubyVM", rb_cObject);
|
|
67
|
+
VALUE rb_cInlineCache = rb_define_class_under(rb_cRubyVM, "InlineCache", rb_cNode);
|
|
68
|
+
rb_define_method(rb_cInlineCache, "klass", inline_cache_klass, 0);
|
|
69
|
+
rb_define_method(rb_cInlineCache, "value", inline_cache_value, 0);
|
|
70
|
+
rb_define_method(rb_cInlineCache, "vmstat", inline_cache_vmstat, 0);
|
|
71
|
+
VALUE inline_cache_members = rb_ary_new();
|
|
72
|
+
rb_ary_push(inline_cache_members, rb_str_new2("klass"));
|
|
73
|
+
rb_ary_push(inline_cache_members, rb_str_new2("value"));
|
|
74
|
+
rb_ary_push(inline_cache_members, rb_str_new2("vmstat"));
|
|
75
|
+
rb_iv_set(rb_cInlineCache, "__member__", inline_cache_members);
|
|
76
|
+
rb_define_singleton_method(rb_cInlineCache, "members", node_s_members, 0);
|
|
77
|
+
#endif
|
|
78
|
+
}
|
|
79
|
+
|