ruby-internal 0.7.3 → 0.8.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/bin/ruby-internal-node-dump +1 -1
- data/bin/ruby-internal-obfuscate +1 -1
- data/ext/cached/ruby-1.8.4/internal/method/{method.h → internal_method.h} +12 -0
- data/ext/cached/ruby-1.8.4/internal/module/getcfp.h +13 -0
- data/ext/cached/ruby-1.8.4/internal/node/global_entry.h +94 -0
- data/ext/cached/ruby-1.8.4/internal/node/node_type_descrip.c +41 -41
- data/ext/cached/ruby-1.8.4/internal/node/nodeinfo.c +288 -273
- data/ext/cached/ruby-1.8.4/internal/vm/instruction/insns_info.c +3 -0
- data/ext/cached/ruby-1.8.4/internal/vm/iseq/iseq_load.inc +21 -2
- data/ext/cached/{ruby-1.8.3/internal/method/method.h → ruby-1.8.5/internal/method/internal_method.h} +12 -0
- data/ext/cached/ruby-1.8.5/internal/module/getcfp.h +13 -0
- data/ext/cached/ruby-1.8.5/internal/node/global_entry.h +94 -0
- data/ext/cached/ruby-1.8.5/internal/node/node_type_descrip.c +45 -45
- data/ext/cached/ruby-1.8.5/internal/node/nodeinfo.c +310 -295
- data/ext/cached/ruby-1.8.5/internal/vm/instruction/insns_info.c +3 -0
- data/ext/cached/ruby-1.8.5/internal/vm/iseq/iseq_load.inc +21 -2
- data/ext/cached/{ruby-1.8.5/internal/method/method.h → ruby-1.8.6/internal/method/internal_method.h} +12 -0
- data/ext/cached/ruby-1.8.6/internal/module/getcfp.h +13 -0
- data/ext/cached/ruby-1.8.6/internal/node/global_entry.h +94 -0
- data/ext/cached/ruby-1.8.6/internal/node/node_type_descrip.c +48 -48
- data/ext/cached/ruby-1.8.6/internal/node/nodeinfo.c +323 -308
- data/ext/cached/ruby-1.8.6/internal/vm/instruction/insns_info.c +3 -0
- data/ext/cached/ruby-1.8.6/internal/vm/iseq/iseq_load.inc +21 -2
- data/ext/cached/{ruby-1.8.6/internal/method/method.h → ruby-1.8.7/internal/method/internal_method.h} +12 -0
- data/ext/cached/ruby-1.8.7/internal/module/getcfp.h +13 -0
- data/ext/cached/ruby-1.8.7/internal/node/global_entry.h +98 -0
- data/ext/cached/ruby-1.8.7/internal/node/node_type_descrip.c +42 -42
- data/ext/cached/ruby-1.8.7/internal/node/nodeinfo.c +276 -261
- data/ext/cached/ruby-1.8.7/internal/vm/instruction/insns_info.c +3 -0
- data/ext/cached/ruby-1.8.7/internal/vm/iseq/iseq_load.inc +21 -2
- data/ext/cached/{ruby-1.9.0/internal/method/method.h → ruby-1.9.1/internal/method/internal_method.h} +12 -0
- data/ext/cached/ruby-1.9.1/internal/module/classpath.c +12 -14
- data/ext/cached/ruby-1.9.1/internal/module/getcfp.h +25 -0
- data/ext/cached/ruby-1.9.1/internal/node/global_entry.h +86 -0
- data/ext/cached/ruby-1.9.1/internal/node/node_type_descrip.c +46 -48
- data/ext/cached/ruby-1.9.1/internal/node/nodeinfo.c +311 -412
- data/ext/cached/ruby-1.9.1/internal/vm/instruction/insns_info.c +3 -0
- data/ext/cached/ruby-1.9.1/internal/vm/iseq/iseq_load.inc +28 -6
- data/ext/cached/ruby-1.9.1/internal/yarv-headers/iseq.h +1 -0
- data/ext/cached/ruby-1.9.1/internal/yarv-headers/parse.h +6 -6
- data/ext/cached/ruby-1.9.1/internal/yarv-headers/revision.h +1 -1
- data/ext/cached/ruby-1.9.1/internal/yarv-headers/version.h +6 -5
- data/ext/cached/ruby-1.9.1/internal/yarv-headers/vm_core.h +3 -2
- data/ext/cached/ruby-1.9.1/internal/yarv-headers/vm_insnhelper.h +1 -0
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/binding/block.h +0 -0
- data/ext/cached/{ruby-1.9.1/internal/method/method.h → ruby-1.9.2/internal/method/internal_method.h} +16 -5
- data/ext/cached/ruby-1.9.2/internal/module/classpath.c +40 -0
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/module/classpath.h +0 -0
- data/ext/cached/ruby-1.9.2/internal/module/getcfp.h +25 -0
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/node/block.h +0 -0
- data/ext/cached/ruby-1.9.2/internal/node/global_entry.h +93 -0
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/node/node_type_descrip.c +44 -48
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/node/nodeinfo.c +291 -439
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/node/nodeinfo.h +0 -0
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/proc/block.h +0 -0
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/tag/tag.h +0 -0
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/vm/instruction/insns_info.c +141 -64
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/vm/instruction/insns_info.h +88 -80
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/vm/iseq/insns_info.inc +77 -70
- data/ext/cached/ruby-1.9.2/internal/vm/iseq/iseq_load.inc +426 -0
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/debug.h +1 -1
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/dln.h +3 -3
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/encdb.h +18 -2
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/eval_intern.h +39 -28
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/gc.h +7 -5
- data/ext/cached/ruby-1.9.2/internal/yarv-headers/id.h +170 -0
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/iseq.h +20 -10
- data/ext/cached/ruby-1.9.2/internal/yarv-headers/method.h +103 -0
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/node.h +14 -47
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/parse.h +31 -148
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/regenc.h +7 -3
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/regint.h +16 -17
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/regparse.h +4 -1
- data/ext/cached/ruby-1.9.2/internal/yarv-headers/revision.h +1 -0
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/thread_pthread.h +4 -1
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/thread_win32.h +1 -1
- data/ext/cached/ruby-1.9.2/internal/yarv-headers/timev.h +21 -0
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/transcode_data.h +20 -10
- data/ext/cached/ruby-1.9.2/internal/yarv-headers/transdb.h +179 -0
- data/ext/cached/ruby-1.9.2/internal/yarv-headers/version.h +55 -0
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/vm_core.h +127 -84
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/vm_exec.h +4 -7
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/vm_insnhelper.h +53 -36
- data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/vm_opts.h +1 -1
- data/ext/cached/ruby-1.9.3/internal/binding/block.h +12 -0
- data/ext/cached/ruby-1.9.3/internal/method/internal_method.h +32 -0
- data/ext/cached/ruby-1.9.3/internal/module/classpath.c +40 -0
- data/ext/cached/{ruby-1.8.0 → ruby-1.9.3}/internal/module/classpath.h +5 -2
- data/ext/cached/ruby-1.9.3/internal/module/getcfp.h +25 -0
- data/ext/cached/ruby-1.9.3/internal/node/block.h +12 -0
- data/ext/cached/ruby-1.9.3/internal/node/global_entry.h +93 -0
- data/ext/cached/{ruby-1.8.3 → ruby-1.9.3}/internal/node/node_type_descrip.c +48 -57
- data/ext/cached/{ruby-1.6.8 → ruby-1.9.3}/internal/node/nodeinfo.c +589 -740
- data/ext/cached/{ruby-1.8.0 → ruby-1.9.3}/internal/node/nodeinfo.h +4 -3
- data/ext/cached/ruby-1.9.3/internal/proc/block.h +12 -0
- data/ext/cached/ruby-1.9.3/internal/tag/tag.h +6 -0
- data/ext/cached/ruby-1.9.3/internal/vm/instruction/insns_info.c +6013 -0
- data/ext/cached/ruby-1.9.3/internal/vm/instruction/insns_info.h +899 -0
- data/ext/cached/ruby-1.9.3/internal/vm/iseq/insns_info.inc +707 -0
- data/ext/cached/ruby-1.9.3/internal/vm/iseq/iseq_load.inc +423 -0
- data/ext/cached/ruby-1.9.3/internal/yarv-headers/addr2line.h +21 -0
- data/ext/cached/ruby-1.9.3/internal/yarv-headers/atomic.h +56 -0
- data/ext/cached/ruby-1.9.3/internal/yarv-headers/constant.h +34 -0
- data/ext/cached/ruby-1.9.3/internal/yarv-headers/debug.h +41 -0
- data/ext/cached/ruby-1.9.3/internal/yarv-headers/dln.h +50 -0
- data/ext/cached/ruby-1.9.3/internal/yarv-headers/encdb.h +167 -0
- data/ext/cached/ruby-1.9.3/internal/yarv-headers/eval_intern.h +234 -0
- data/ext/cached/ruby-1.9.3/internal/yarv-headers/gc.h +98 -0
- data/ext/cached/ruby-1.9.3/internal/yarv-headers/id.h +175 -0
- data/ext/cached/ruby-1.9.3/internal/yarv-headers/internal.h +232 -0
- data/ext/cached/ruby-1.9.3/internal/yarv-headers/iseq.h +125 -0
- data/ext/cached/ruby-1.9.3/internal/yarv-headers/method.h +105 -0
- data/ext/cached/ruby-1.9.3/internal/yarv-headers/node.h +503 -0
- data/ext/cached/ruby-1.9.3/internal/yarv-headers/parse.h +186 -0
- data/ext/cached/ruby-1.9.3/internal/yarv-headers/regenc.h +219 -0
- data/ext/cached/ruby-1.9.3/internal/yarv-headers/regint.h +850 -0
- data/ext/cached/ruby-1.9.3/internal/yarv-headers/regparse.h +362 -0
- data/ext/cached/ruby-1.9.3/internal/yarv-headers/revision.h +1 -0
- data/ext/cached/ruby-1.9.3/internal/yarv-headers/thread_pthread.h +51 -0
- data/ext/cached/ruby-1.9.3/internal/yarv-headers/thread_win32.h +40 -0
- data/ext/cached/ruby-1.9.3/internal/yarv-headers/timev.h +21 -0
- data/ext/cached/ruby-1.9.3/internal/yarv-headers/transcode_data.h +117 -0
- data/ext/cached/ruby-1.9.3/internal/yarv-headers/transdb.h +189 -0
- data/ext/cached/ruby-1.9.3/internal/yarv-headers/version.h +52 -0
- data/ext/cached/ruby-1.9.3/internal/yarv-headers/vm_core.h +756 -0
- data/ext/cached/ruby-1.9.3/internal/yarv-headers/vm_exec.h +184 -0
- data/ext/cached/ruby-1.9.3/internal/yarv-headers/vm_insnhelper.h +220 -0
- data/ext/cached/ruby-1.9.3/internal/yarv-headers/vm_opts.h +51 -0
- data/ext/internal/binding/block.h +20 -0
- data/ext/internal/method/internal_method.h +5 -38
- data/ext/internal/method/internal_method.h.rpp +0 -7
- data/ext/internal/method/method.c +52 -32
- data/ext/internal/module/classpath.c +18 -13
- data/ext/internal/module/classpath.h +3 -3
- data/ext/internal/module/extconf.rb +3 -2
- data/ext/internal/module/getcfp.h +13 -0
- data/ext/internal/module/getcfp.h.rpp +44 -0
- data/ext/internal/module/module.c +58 -21
- data/ext/internal/node/block.h +20 -0
- data/ext/internal/node/extconf.rb +2 -0
- data/ext/internal/node/global_entry.h +69 -13
- data/ext/internal/node/global_entry.h.rpp +11 -2
- data/ext/internal/node/node.c +30 -3
- data/ext/internal/node/node_type_descrip.c +47 -38
- data/ext/internal/node/nodeinfo.c +622 -306
- data/ext/internal/node/nodeinfo.h +1 -4
- data/ext/internal/proc/block.h +20 -0
- data/ext/internal/tag/tag.h +10 -0
- data/ext/internal/thread/thread.c +9 -3
- data/ext/internal/vm/extconf.rb +1 -0
- data/ext/internal/vm/instruction/insns_info.c +3 -5974
- data/ext/internal/vm/instruction/insns_info.h +0 -878
- data/ext/internal/vm/iseq/extconf.rb +1 -0
- data/ext/internal/vm/iseq/iseq.c +38 -4
- data/ext/internal/vm/iseq/iseq_load.inc.rpp +23 -5
- data/ext/internal/vm/vm.c +28 -0
- data/lib/internal/classtree.rb +28 -0
- data/lib/internal/debug.rb +10 -2
- data/lib/internal/method/as_code.rb +25 -0
- data/lib/internal/method/as_expression.rb +2 -3
- data/lib/internal/method/origin.rb +29 -0
- data/lib/internal/method/signature.rb +5 -300
- data/lib/internal/method/signature/argument.rb +102 -0
- data/lib/internal/method/signature/iseq.rb +52 -0
- data/lib/internal/method/signature/node.rb +160 -0
- data/lib/internal/method/signature/signature.rb +23 -0
- data/lib/internal/proc/as_code.rb +2 -0
- data/lib/internal/proc/as_expression.rb +2 -0
- data/lib/internal/vm/bytedecoder.rb +5 -5
- data/lib/internal/vm/iseq/as_code.rb +2 -2
- data/lib/internal/vm/iseq/as_expression.rb +2 -2
- data/test/test_dump_method.rb +1 -1
- data/test/test_method.rb +21 -3
- data/test/test_node.rb +20 -4
- metadata +152 -155
- data/ext/cached/ruby-1.6.8/internal/binding/block.h +0 -35
- data/ext/cached/ruby-1.6.8/internal/method/method.h +0 -19
- data/ext/cached/ruby-1.6.8/internal/module/classpath.c +0 -3
- data/ext/cached/ruby-1.6.8/internal/module/classpath.h +0 -8
- data/ext/cached/ruby-1.6.8/internal/node/block.h +0 -35
- data/ext/cached/ruby-1.6.8/internal/node/global_entry.h +0 -15
- data/ext/cached/ruby-1.6.8/internal/node/node_type_descrip.c +0 -149
- data/ext/cached/ruby-1.6.8/internal/node/nodeinfo.h +0 -69
- data/ext/cached/ruby-1.6.8/internal/proc/block.h +0 -35
- data/ext/cached/ruby-1.6.8/internal/tag/tag.h +0 -15
- data/ext/cached/ruby-1.6.8/internal/vm/instruction/insns_info.c +0 -39
- data/ext/cached/ruby-1.6.8/internal/vm/instruction/insns_info.h +0 -21
- data/ext/cached/ruby-1.6.8/internal/vm/iseq/insns_info.inc +0 -12
- data/ext/cached/ruby-1.6.8/internal/vm/iseq/iseq_load.inc +0 -9
- data/ext/cached/ruby-1.8.0/internal/binding/block.h +0 -37
- data/ext/cached/ruby-1.8.0/internal/method/method.h +0 -19
- data/ext/cached/ruby-1.8.0/internal/module/classpath.c +0 -27
- data/ext/cached/ruby-1.8.0/internal/node/block.h +0 -37
- data/ext/cached/ruby-1.8.0/internal/node/global_entry.h +0 -10
- data/ext/cached/ruby-1.8.0/internal/node/node_type_descrip.c +0 -155
- data/ext/cached/ruby-1.8.0/internal/node/nodeinfo.c +0 -5744
- data/ext/cached/ruby-1.8.0/internal/proc/block.h +0 -37
- data/ext/cached/ruby-1.8.0/internal/tag/tag.h +0 -15
- data/ext/cached/ruby-1.8.0/internal/vm/instruction/insns_info.c +0 -39
- data/ext/cached/ruby-1.8.0/internal/vm/instruction/insns_info.h +0 -21
- data/ext/cached/ruby-1.8.0/internal/vm/iseq/insns_info.inc +0 -12
- data/ext/cached/ruby-1.8.0/internal/vm/iseq/iseq_load.inc +0 -9
- data/ext/cached/ruby-1.8.1/internal/binding/block.h +0 -31
- data/ext/cached/ruby-1.8.1/internal/method/method.h +0 -19
- data/ext/cached/ruby-1.8.1/internal/module/classpath.c +0 -27
- data/ext/cached/ruby-1.8.1/internal/module/classpath.h +0 -14
- data/ext/cached/ruby-1.8.1/internal/node/block.h +0 -31
- data/ext/cached/ruby-1.8.1/internal/node/global_entry.h +0 -10
- data/ext/cached/ruby-1.8.1/internal/node/node_type_descrip.c +0 -154
- data/ext/cached/ruby-1.8.1/internal/node/nodeinfo.c +0 -5736
- data/ext/cached/ruby-1.8.1/internal/node/nodeinfo.h +0 -69
- data/ext/cached/ruby-1.8.1/internal/proc/block.h +0 -31
- data/ext/cached/ruby-1.8.1/internal/tag/tag.h +0 -16
- data/ext/cached/ruby-1.8.1/internal/vm/instruction/insns_info.c +0 -39
- data/ext/cached/ruby-1.8.1/internal/vm/instruction/insns_info.h +0 -21
- data/ext/cached/ruby-1.8.1/internal/vm/iseq/insns_info.inc +0 -12
- data/ext/cached/ruby-1.8.1/internal/vm/iseq/iseq_load.inc +0 -9
- data/ext/cached/ruby-1.8.2/internal/binding/block.h +0 -32
- data/ext/cached/ruby-1.8.2/internal/method/method.h +0 -19
- data/ext/cached/ruby-1.8.2/internal/module/classpath.c +0 -45
- data/ext/cached/ruby-1.8.2/internal/module/classpath.h +0 -17
- data/ext/cached/ruby-1.8.2/internal/node/block.h +0 -32
- data/ext/cached/ruby-1.8.2/internal/node/global_entry.h +0 -10
- data/ext/cached/ruby-1.8.2/internal/node/node_type_descrip.c +0 -154
- data/ext/cached/ruby-1.8.2/internal/node/nodeinfo.c +0 -5736
- data/ext/cached/ruby-1.8.2/internal/node/nodeinfo.h +0 -69
- data/ext/cached/ruby-1.8.2/internal/proc/block.h +0 -32
- data/ext/cached/ruby-1.8.2/internal/tag/tag.h +0 -16
- data/ext/cached/ruby-1.8.2/internal/vm/instruction/insns_info.c +0 -39
- data/ext/cached/ruby-1.8.2/internal/vm/instruction/insns_info.h +0 -21
- data/ext/cached/ruby-1.8.2/internal/vm/iseq/insns_info.inc +0 -12
- data/ext/cached/ruby-1.8.2/internal/vm/iseq/iseq_load.inc +0 -9
- data/ext/cached/ruby-1.8.3/internal/binding/block.h +0 -32
- data/ext/cached/ruby-1.8.3/internal/module/classpath.c +0 -45
- data/ext/cached/ruby-1.8.3/internal/module/classpath.h +0 -17
- data/ext/cached/ruby-1.8.3/internal/node/block.h +0 -32
- data/ext/cached/ruby-1.8.3/internal/node/global_entry.h +0 -10
- data/ext/cached/ruby-1.8.3/internal/node/nodeinfo.c +0 -5736
- data/ext/cached/ruby-1.8.3/internal/node/nodeinfo.h +0 -69
- data/ext/cached/ruby-1.8.3/internal/proc/block.h +0 -32
- data/ext/cached/ruby-1.8.3/internal/tag/tag.h +0 -16
- data/ext/cached/ruby-1.8.3/internal/vm/instruction/insns_info.c +0 -39
- data/ext/cached/ruby-1.8.3/internal/vm/instruction/insns_info.h +0 -21
- data/ext/cached/ruby-1.8.3/internal/vm/iseq/insns_info.inc +0 -12
- data/ext/cached/ruby-1.8.3/internal/vm/iseq/iseq_load.inc +0 -9
- data/ext/cached/ruby-1.8.7/internal/method/method.h +0 -20
- data/ext/cached/ruby-1.9.0/internal/module/classpath.c +0 -42
- data/ext/cached/ruby-1.9.0/internal/node/global_entry.h +0 -10
- data/ext/cached/ruby-1.9.0/internal/vm/iseq/iseq_load.inc +0 -13
- data/ext/cached/ruby-1.9.0/internal/yarv-headers/id.h +0 -83
- data/ext/cached/ruby-1.9.0/internal/yarv-headers/revision.h +0 -1
- data/ext/cached/ruby-1.9.0/internal/yarv-headers/transdb.h +0 -67
- data/ext/cached/ruby-1.9.0/internal/yarv-headers/version.h +0 -57
- data/ext/internal/module/cfp.h +0 -13
|
@@ -7,6 +7,26 @@
|
|
|
7
7
|
#include "env.h"
|
|
8
8
|
#endif
|
|
9
9
|
|
|
10
|
+
struct BLOCK {
|
|
11
|
+
NODE *var;
|
|
12
|
+
NODE *body;
|
|
13
|
+
VALUE self;
|
|
14
|
+
struct FRAME frame;
|
|
15
|
+
struct SCOPE *scope;
|
|
16
|
+
VALUE klass;
|
|
17
|
+
NODE *cref;
|
|
18
|
+
int iter;
|
|
19
|
+
int vmode;
|
|
20
|
+
int flags;
|
|
21
|
+
int uniq;
|
|
22
|
+
struct RVarmap *dyna_vars;
|
|
23
|
+
VALUE orig_thread;
|
|
24
|
+
VALUE wrapper;
|
|
25
|
+
VALUE block_obj;
|
|
26
|
+
struct BLOCK *outer;
|
|
27
|
+
struct BLOCK *prev;
|
|
28
|
+
};
|
|
29
|
+
|
|
10
30
|
|
|
11
31
|
#endif
|
|
12
32
|
|
|
@@ -18,48 +18,15 @@
|
|
|
18
18
|
#endif
|
|
19
19
|
|
|
20
20
|
struct METHOD {
|
|
21
|
+
VALUE klass, rklass;
|
|
21
22
|
VALUE recv;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
static void
|
|
28
|
-
bm_mark(void *ptr)
|
|
29
|
-
{
|
|
30
|
-
struct METHOD *data = ptr;
|
|
31
|
-
rb_gc_mark(data->rclass);
|
|
32
|
-
rb_gc_mark(data->recv);
|
|
33
|
-
rb_mark_method_entry(&data->me);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
static void
|
|
37
|
-
bm_free(void *ptr)
|
|
38
|
-
{
|
|
39
|
-
struct METHOD *data = ptr;
|
|
40
|
-
rb_method_definition_t *def = data->me.def;
|
|
41
|
-
if (def->alias_count == 0)
|
|
42
|
-
xfree(def);
|
|
43
|
-
else if (def->alias_count > 0)
|
|
44
|
-
def->alias_count--;
|
|
45
|
-
xfree(ptr);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
static size_t
|
|
49
|
-
bm_memsize(const void *ptr)
|
|
50
|
-
{
|
|
51
|
-
return ptr ? sizeof(struct METHOD) : 0;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
static const rb_data_type_t method_data_type = {
|
|
55
|
-
"method",
|
|
56
|
-
bm_mark,
|
|
57
|
-
bm_free,
|
|
58
|
-
bm_memsize,
|
|
23
|
+
ID id, oid;
|
|
24
|
+
int safe_level;
|
|
25
|
+
NODE *body;
|
|
59
26
|
};
|
|
60
27
|
|
|
61
28
|
#define METHOD_OCLASS(m) m->klass
|
|
62
|
-
#define METHOD_RCLASS(m) m->
|
|
29
|
+
#define METHOD_RCLASS(m) m->rklass
|
|
63
30
|
|
|
64
31
|
#endif
|
|
65
32
|
|
|
@@ -38,13 +38,6 @@
|
|
|
38
38
|
when /^struct (METHOD)/
|
|
39
39
|
write = true
|
|
40
40
|
stopwrite = false
|
|
41
|
-
when /rb_data_type_t method_data_type = {/
|
|
42
|
-
write = true
|
|
43
|
-
stopwrite = false
|
|
44
|
-
when /^(bm_mark|bm_free|bm_memsize)/
|
|
45
|
-
puts prev_line
|
|
46
|
-
write = true
|
|
47
|
-
stopwrite = false
|
|
48
41
|
when /^\}/
|
|
49
42
|
stopwrite = true
|
|
50
43
|
when /VALUE oclass/
|
|
@@ -23,11 +23,33 @@ static VALUE rb_cUnboundMethod = Qnil;
|
|
|
23
23
|
#endif
|
|
24
24
|
|
|
25
25
|
#ifdef HAVE_TYPE_STRUCT_RTYPEDDATA
|
|
26
|
+
|
|
26
27
|
# define UNWRAP_METHOD(method, m) \
|
|
27
|
-
TypedData_Get_Struct(method, struct METHOD,
|
|
28
|
+
TypedData_Get_Struct(method, struct METHOD, p_method_data_type, m);
|
|
29
|
+
|
|
30
|
+
static rb_data_type_t const * p_method_data_type;
|
|
31
|
+
|
|
32
|
+
static void init_method_data_type()
|
|
33
|
+
{
|
|
34
|
+
/* Create a METHOD object -- doesn't matter which method we use */
|
|
35
|
+
VALUE retval = rb_funcall(
|
|
36
|
+
rb_cObject, rb_intern("method"), 1, ID2SYM(rb_intern("__id__")));
|
|
37
|
+
p_method_data_type = RTYPEDDATA_TYPE(retval);
|
|
38
|
+
}
|
|
39
|
+
|
|
28
40
|
#else
|
|
41
|
+
|
|
29
42
|
# define UNWRAP_METHOD(method, m) \
|
|
30
43
|
Data_Get_Struct(method, struct METHOD, m)
|
|
44
|
+
|
|
45
|
+
#endif
|
|
46
|
+
|
|
47
|
+
#if RUBY_VERSION_CODE >= 193
|
|
48
|
+
# define METHOD_DEF(method) method->me->def
|
|
49
|
+
# define METHOD_KLASS(method) method->me->klass
|
|
50
|
+
#elif RUBY_VERSION_CODE >= 192
|
|
51
|
+
# define METHOD_DEF(method) method->me.def
|
|
52
|
+
# define METHOD_KLASS(method) method->me.klass
|
|
31
53
|
#endif
|
|
32
54
|
|
|
33
55
|
static VALUE rb_mMarshal;
|
|
@@ -99,10 +121,8 @@ static VALUE method_oid(VALUE method)
|
|
|
99
121
|
{
|
|
100
122
|
struct METHOD * m;
|
|
101
123
|
UNWRAP_METHOD(method, m);
|
|
102
|
-
#if RUBY_VERSION_CODE >=
|
|
103
|
-
return ID2SYM(m->
|
|
104
|
-
#elif RUBY_VERSION_CODE >= 192
|
|
105
|
-
return ID2SYM(m->me.def->original_id);
|
|
124
|
+
#if RUBY_VERSION_CODE >= 192
|
|
125
|
+
return ID2SYM(METHOD_DEF(m)->original_id);
|
|
106
126
|
#else
|
|
107
127
|
return ID2SYM(m->oid);
|
|
108
128
|
#endif
|
|
@@ -160,10 +180,8 @@ static VALUE method_body(VALUE method)
|
|
|
160
180
|
rb_raise(rb_eSecurityError, "Insecure: can't get method body");
|
|
161
181
|
}
|
|
162
182
|
UNWRAP_METHOD(method, m);
|
|
163
|
-
#if RUBY_VERSION_CODE >=
|
|
164
|
-
return m->
|
|
165
|
-
#elif RUBY_VERSION_CODE >= 192
|
|
166
|
-
return m->me.def->body.iseq->self; /* TODO: body is a union; is this right? */
|
|
183
|
+
#if RUBY_VERSION_CODE >= 192
|
|
184
|
+
return METHOD_DEF(m)->body.iseq->self; /* TODO: body is a union; is this right? */
|
|
167
185
|
#else
|
|
168
186
|
return wrap_node(m->body);
|
|
169
187
|
#endif
|
|
@@ -193,32 +211,30 @@ static VALUE method_dump(VALUE self, VALUE limit)
|
|
|
193
211
|
arr = rb_ary_new();
|
|
194
212
|
UNWRAP_METHOD(self, method);
|
|
195
213
|
#if RUBY_VERSION_CODE >= 193
|
|
196
|
-
rb_ary_push(arr, rb_mod_name(method->me->klass));
|
|
197
|
-
rb_ary_push(arr, Qnil); /* TODO */
|
|
214
|
+
rb_ary_push(arr, rb_mod_name(method->me->klass)); /* [0] */
|
|
215
|
+
rb_ary_push(arr, Qnil); /* TODO */ /* [1] */
|
|
198
216
|
#elif RUBY_VERSION_CODE >= 192
|
|
199
|
-
rb_ary_push(arr, rb_mod_name(method->me.klass));
|
|
200
|
-
rb_ary_push(arr, Qnil); /* TODO */
|
|
217
|
+
rb_ary_push(arr, rb_mod_name(method->me.klass)); /* [0] */
|
|
218
|
+
rb_ary_push(arr, Qnil); /* TODO */ /* [1] */
|
|
201
219
|
#else
|
|
202
|
-
rb_ary_push(arr, rb_mod_name(METHOD_OCLASS(method)));
|
|
203
|
-
rb_ary_push(arr, rb_mod_name(METHOD_RCLASS(method)));
|
|
220
|
+
rb_ary_push(arr, rb_mod_name(METHOD_OCLASS(method))); /* [2] */
|
|
221
|
+
rb_ary_push(arr, rb_mod_name(METHOD_RCLASS(method))); /* [3] */
|
|
204
222
|
#endif
|
|
205
223
|
if(rb_class_of(self) == rb_cUnboundMethod)
|
|
206
224
|
{
|
|
207
|
-
rb_ary_push(arr, Qnil);
|
|
225
|
+
rb_ary_push(arr, Qnil); /* [4] */
|
|
208
226
|
}
|
|
209
227
|
else
|
|
210
228
|
{
|
|
211
|
-
rb_ary_push(arr, method->recv);
|
|
229
|
+
rb_ary_push(arr, method->recv); /* [4] */
|
|
212
230
|
}
|
|
213
231
|
rb_ary_push(arr, ID2SYM(method->id));
|
|
214
|
-
#if RUBY_VERSION_CODE >=
|
|
215
|
-
rb_ary_push(arr, ID2SYM(method->
|
|
216
|
-
#elif RUBY_VERSION_CODE >= 192
|
|
217
|
-
rb_ary_push(arr, ID2SYM(method->me.def->original_id));
|
|
232
|
+
#if RUBY_VERSION_CODE >= 192
|
|
233
|
+
rb_ary_push(arr, ID2SYM(METHOD_DEF(method)->original_id)); /* [5] */
|
|
218
234
|
#else
|
|
219
|
-
rb_ary_push(arr, ID2SYM(method->oid));
|
|
235
|
+
rb_ary_push(arr, ID2SYM(method->oid)); /* [5] */
|
|
220
236
|
#endif
|
|
221
|
-
rb_ary_push(arr, method_body(self));
|
|
237
|
+
rb_ary_push(arr, method_body(self)); /* [6] */
|
|
222
238
|
|
|
223
239
|
return marshal_dump(arr, limit);
|
|
224
240
|
}
|
|
@@ -232,6 +248,7 @@ static VALUE method_dump(VALUE self, VALUE limit)
|
|
|
232
248
|
static VALUE method_load(VALUE klass, VALUE str)
|
|
233
249
|
{
|
|
234
250
|
struct METHOD * method;
|
|
251
|
+
|
|
235
252
|
VALUE rarr = marshal_load(str);
|
|
236
253
|
VALUE * arr;
|
|
237
254
|
VALUE retval;
|
|
@@ -253,17 +270,16 @@ static VALUE method_load(VALUE klass, VALUE str)
|
|
|
253
270
|
retval = rb_funcall(
|
|
254
271
|
rb_cObject, rb_intern("method"), 1, ID2SYM(rb_intern("__id__")));
|
|
255
272
|
UNWRAP_METHOD(retval, method);
|
|
273
|
+
|
|
256
274
|
arr = RARRAY_PTR(rarr);
|
|
257
|
-
#if RUBY_VERSION_CODE >=
|
|
258
|
-
method
|
|
259
|
-
rb_funcall(lookup_module_proc, rb_intern("call"), 1, arr[0]);
|
|
260
|
-
method->me->def->original_id = SYM2ID(arr[4]);
|
|
261
|
-
GetISeqPtr(arr[5], method->me->def->body.iseq);
|
|
262
|
-
#elif RUBY_VERSION_CODE >= 192
|
|
263
|
-
method->me.klass =
|
|
275
|
+
#if RUBY_VERSION_CODE >= 192
|
|
276
|
+
METHOD_KLASS(method) =
|
|
264
277
|
rb_funcall(lookup_module_proc, rb_intern("call"), 1, arr[0]);
|
|
265
|
-
method
|
|
266
|
-
|
|
278
|
+
METHOD_DEF(method) = xmalloc(sizeof(*METHOD_DEF(method)));
|
|
279
|
+
METHOD_DEF(method)->type = VM_METHOD_TYPE_ISEQ;
|
|
280
|
+
METHOD_DEF(method)->original_id = SYM2ID(arr[4]);
|
|
281
|
+
METHOD_DEF(method)->alias_count = 0;
|
|
282
|
+
GetISeqPtr(arr[5], METHOD_DEF(method)->body.iseq);
|
|
267
283
|
#else
|
|
268
284
|
METHOD_OCLASS(method) =
|
|
269
285
|
rb_funcall(lookup_module_proc, rb_intern("call"), 1, arr[0]);
|
|
@@ -321,5 +337,9 @@ void Init_method(void)
|
|
|
321
337
|
|
|
322
338
|
lookup_module_proc = rb_eval_string(lookup_module_str);
|
|
323
339
|
rb_global_variable(&lookup_module_proc);
|
|
340
|
+
|
|
341
|
+
#ifdef HAVE_TYPE_STRUCT_RTYPEDDATA
|
|
342
|
+
init_method_data_type();
|
|
343
|
+
#endif
|
|
324
344
|
}
|
|
325
345
|
|
|
@@ -1,38 +1,43 @@
|
|
|
1
1
|
#include "classpath.h"
|
|
2
2
|
|
|
3
3
|
VALUE
|
|
4
|
-
class2path(
|
|
4
|
+
class2path(klass)
|
|
5
|
+
VALUE klass;
|
|
5
6
|
{
|
|
6
7
|
VALUE path = rb_class_path(klass);
|
|
7
|
-
|
|
8
|
+
char *n = RSTRING(path)->ptr;
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
if (n[0] == '#') {
|
|
11
|
+
rb_raise(rb_eTypeError, "can't dump anonymous %s %s",
|
|
12
|
+
(TYPE(klass) == T_CLASS ? "class" : "module"),
|
|
13
|
+
n);
|
|
14
|
+
}
|
|
15
|
+
if (rb_path2class(n) != rb_class_real(klass)) {
|
|
16
|
+
rb_raise(rb_eTypeError, "%s can't be referred", n);
|
|
12
17
|
}
|
|
13
18
|
return path;
|
|
14
19
|
}
|
|
15
20
|
|
|
16
21
|
VALUE
|
|
17
|
-
path2class(
|
|
22
|
+
path2class(path)
|
|
23
|
+
const char *path;
|
|
18
24
|
{
|
|
19
|
-
VALUE v =
|
|
25
|
+
VALUE v = rb_path2class(path);
|
|
20
26
|
|
|
21
27
|
if (TYPE(v) != T_CLASS) {
|
|
22
|
-
rb_raise(rb_eArgError, "
|
|
23
|
-
(int)RSTRING_LEN(path), RSTRING_PTR(path));
|
|
28
|
+
rb_raise(rb_eArgError, "%s does not refer class", path);
|
|
24
29
|
}
|
|
25
30
|
return v;
|
|
26
31
|
}
|
|
27
32
|
|
|
28
33
|
VALUE
|
|
29
|
-
path2module(
|
|
34
|
+
path2module(path)
|
|
35
|
+
const char *path;
|
|
30
36
|
{
|
|
31
|
-
VALUE v =
|
|
37
|
+
VALUE v = rb_path2class(path);
|
|
32
38
|
|
|
33
39
|
if (TYPE(v) != T_MODULE) {
|
|
34
|
-
rb_raise(rb_eArgError, "
|
|
35
|
-
(int)RSTRING_LEN(path), RSTRING_PTR(path));
|
|
40
|
+
rb_raise(rb_eArgError, "%s does not refer module", path);
|
|
36
41
|
}
|
|
37
42
|
return v;
|
|
38
43
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
$: << '../..'
|
|
2
2
|
require 'mkmf-ruby-internal'
|
|
3
3
|
|
|
4
|
-
have_func('vm_get_ruby_level_cfp', [ 'cfp.h', 'vm_core.h' ])
|
|
5
|
-
have_func('rb_vm_get_ruby_level_next_cfp', [ 'cfp.h', 'vm_core.h' ])
|
|
6
4
|
have_header('ruby/node.h') or have_header('node.h')
|
|
5
|
+
have_header('internal.h')
|
|
7
6
|
have_struct_member('struct RClass', 'iv_index_tbl')
|
|
7
|
+
have_type('struct RTypedData')
|
|
8
|
+
have_func('rb_add_method')
|
|
8
9
|
|
|
9
10
|
ruby_version_code = RUBY_VERSION.gsub(/\./, '').to_i
|
|
10
11
|
$CPPFLAGS << " -DRUBY_VERSION_CODE=#{ruby_version_code}"
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
#ifndef getcfp__h
|
|
2
|
+
#define getcfp__h
|
|
3
|
+
|
|
4
|
+
#include "ruby.h"
|
|
5
|
+
|
|
6
|
+
#ifdef RUBY_VM
|
|
7
|
+
|
|
8
|
+
#include "vm_core.h"
|
|
9
|
+
|
|
10
|
+
#ruby <<END
|
|
11
|
+
$: << '../..'
|
|
12
|
+
require 'ruby_source_dir'
|
|
13
|
+
|
|
14
|
+
vm_c_location = "#{RUBY_SOURCE_DIR}/vm.c"
|
|
15
|
+
if File.exists?(vm_c_location) then
|
|
16
|
+
File.open(vm_c_location) do |vm_c|
|
|
17
|
+
write = false
|
|
18
|
+
stopwrite = false
|
|
19
|
+
prev_line = nil
|
|
20
|
+
while (line = vm_c.gets) != nil do
|
|
21
|
+
case line
|
|
22
|
+
when /^(rb_vm_get_ruby_level_next_cfp|vm_get_ruby_level_cfp)/
|
|
23
|
+
puts "static #{prev_line}"
|
|
24
|
+
line.gsub!($1, 'getcfp')
|
|
25
|
+
write = true
|
|
26
|
+
stopwrite = false
|
|
27
|
+
when /^\}/
|
|
28
|
+
stopwrite = true if write
|
|
29
|
+
end
|
|
30
|
+
puts line if write
|
|
31
|
+
if stopwrite then
|
|
32
|
+
stopwrite = false
|
|
33
|
+
write = false
|
|
34
|
+
puts ''
|
|
35
|
+
end
|
|
36
|
+
prev_line = line
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
END
|
|
41
|
+
|
|
42
|
+
#endif
|
|
43
|
+
|
|
44
|
+
#endif
|
|
@@ -5,12 +5,16 @@
|
|
|
5
5
|
#include <ruby/st.h>
|
|
6
6
|
#include "vm_core.h"
|
|
7
7
|
#include "eval_intern.h"
|
|
8
|
-
#include "
|
|
8
|
+
#include "getcfp.h"
|
|
9
9
|
#else
|
|
10
10
|
#include <rubysig.h>
|
|
11
11
|
#include <st.h>
|
|
12
12
|
#endif
|
|
13
13
|
|
|
14
|
+
#ifdef HAVE_INTERNAL_H
|
|
15
|
+
#include "internal.h"
|
|
16
|
+
#endif
|
|
17
|
+
|
|
14
18
|
#ifndef RCLASS_SUPER
|
|
15
19
|
#define RCLASS_SUPER(c) RCLASS(c)->super
|
|
16
20
|
#endif
|
|
@@ -35,6 +39,22 @@
|
|
|
35
39
|
#define RARRAY_PTR(a) RARRAY(a)->ptr
|
|
36
40
|
#endif
|
|
37
41
|
|
|
42
|
+
#ifdef HAVE_TYPE_STRUCT_RTYPEDDATA
|
|
43
|
+
|
|
44
|
+
# undef GetThreadPtr
|
|
45
|
+
# define GetThreadPtr(obj, ptr) \
|
|
46
|
+
TypedData_Get_Struct((obj), rb_thread_t, p_ruby_threadptr_data_type, (ptr))
|
|
47
|
+
|
|
48
|
+
static rb_data_type_t const * p_ruby_threadptr_data_type;
|
|
49
|
+
|
|
50
|
+
static void init_ruby_threadptr_data_type()
|
|
51
|
+
{
|
|
52
|
+
VALUE thread = rb_thread_current();
|
|
53
|
+
p_ruby_threadptr_data_type = RTYPEDDATA_TYPE(thread);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
#endif
|
|
57
|
+
|
|
38
58
|
static VALUE rb_cNode;
|
|
39
59
|
|
|
40
60
|
static VALUE rb_mMarshal;
|
|
@@ -145,7 +165,7 @@ static VALUE class_restorer_dump(VALUE ruby_class_restorer, VALUE limit)
|
|
|
145
165
|
|
|
146
166
|
/*
|
|
147
167
|
* call-seq:
|
|
148
|
-
*
|
|
168
|
+
* Internal::ClassRestorer.load => ClassRestorer
|
|
149
169
|
*
|
|
150
170
|
* Do not call this function.
|
|
151
171
|
*/
|
|
@@ -170,7 +190,7 @@ static VALUE ruby180_marshal_dump(int argc, VALUE * argv, VALUE klass)
|
|
|
170
190
|
set_class_restore_state(argv[0]);
|
|
171
191
|
}
|
|
172
192
|
|
|
173
|
-
VALUE str = rb_funcall2(klass, rb_intern("
|
|
193
|
+
VALUE str = rb_funcall2(klass, rb_intern("_Internal__orig_dump"), argc, argv);
|
|
174
194
|
|
|
175
195
|
if(class_restorer != Qnil)
|
|
176
196
|
{
|
|
@@ -342,14 +362,12 @@ static VALUE module_name_proc = Qnil;
|
|
|
342
362
|
|
|
343
363
|
static void set_cref_stack(rb_iseq_t * iseqdat, VALUE klass, VALUE noex)
|
|
344
364
|
{
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
rb_control_frame_t * cfp
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
#error No function to get cfp
|
|
352
|
-
#endif
|
|
365
|
+
VALUE thread = rb_thread_current();
|
|
366
|
+
rb_thread_t * th;
|
|
367
|
+
rb_control_frame_t * cfp;
|
|
368
|
+
|
|
369
|
+
GetThreadPtr(thread, th);
|
|
370
|
+
cfp = getcfp(th, th->cfp);
|
|
353
371
|
iseqdat->cref_stack = NEW_BLOCK(klass);
|
|
354
372
|
iseqdat->cref_stack->nd_visi = noex;
|
|
355
373
|
iseqdat->cref_stack->nd_next = cfp->iseq->cref_stack; /* TODO: use lfp? */
|
|
@@ -396,13 +414,27 @@ static VALUE module_add_method(VALUE klass, VALUE id, VALUE node, VALUE noex)
|
|
|
396
414
|
}
|
|
397
415
|
|
|
398
416
|
#if RUBY_VERSION_CODE >= 192
|
|
399
|
-
|
|
417
|
+
if(rb_obj_is_kind_of(node, rb_cISeq))
|
|
418
|
+
{
|
|
419
|
+
rb_iseq_t *iseqdat = iseq_check(node);
|
|
420
|
+
set_cref_stack(iseqdat, klass, noex);
|
|
421
|
+
iseqdat->klass = klass;
|
|
422
|
+
iseqdat->defined_method_id = SYM2ID(id);
|
|
423
|
+
|
|
424
|
+
#ifdef HAVE_RB_ADD_METHOD
|
|
425
|
+
rb_add_method(klass, SYM2ID(id), VM_METHOD_TYPE_ISEQ, iseqdat, NUM2INT(noex));
|
|
426
|
+
#else
|
|
427
|
+
rb_funcall(rb_mRubyVMFrozenCore, rb_intern("core#define_method"), 3, klass, id, node); /* TODO: noex */
|
|
428
|
+
#endif
|
|
429
|
+
|
|
430
|
+
return Qnil;
|
|
431
|
+
}
|
|
432
|
+
|
|
400
433
|
#elif RUBY_VERSION_CODE >= 190
|
|
401
434
|
if(rb_obj_is_kind_of(node, rb_cISeq))
|
|
402
435
|
{
|
|
403
436
|
rb_iseq_t *iseqdat = iseq_check(node);
|
|
404
|
-
/* TODO: any restrictions on what kinds of iseqs we can add here?
|
|
405
|
-
*/
|
|
437
|
+
/* TODO: any restrictions on what kinds of iseqs we can add here? */
|
|
406
438
|
set_cref_stack(iseqdat, klass, noex);
|
|
407
439
|
iseqdat->klass = klass;
|
|
408
440
|
iseqdat->defined_method_id = SYM2ID(id);
|
|
@@ -422,7 +454,7 @@ static VALUE module_add_method(VALUE klass, VALUE id, VALUE node, VALUE noex)
|
|
|
422
454
|
Data_Get_Struct(node, NODE, n);
|
|
423
455
|
|
|
424
456
|
#if RUBY_VERSION_CODE >= 192
|
|
425
|
-
rb_raise(rb_eRuntimeError, "
|
|
457
|
+
rb_raise(rb_eRuntimeError, "Unable to add node on this version of ruby");
|
|
426
458
|
#elif RUBY_VERSION_CODE >= 190
|
|
427
459
|
if(nd_type(n) != NODE_METHOD)
|
|
428
460
|
{
|
|
@@ -441,10 +473,11 @@ static VALUE module_add_method(VALUE klass, VALUE id, VALUE node, VALUE noex)
|
|
|
441
473
|
}
|
|
442
474
|
|
|
443
475
|
add_node:
|
|
476
|
+
|
|
444
477
|
#endif
|
|
445
478
|
|
|
446
479
|
#if RUBY_VERSION_CODE >= 192
|
|
447
|
-
rb_raise(rb_eRuntimeError, "
|
|
480
|
+
rb_raise(rb_eRuntimeError, "Unable to add node on this version of ruby");
|
|
448
481
|
#else
|
|
449
482
|
/* TODO: if noex is NOEX_MODFUNC, add this method as a module function
|
|
450
483
|
* (that is, both as an instance and singleton method)
|
|
@@ -477,7 +510,7 @@ static VALUE module_uninclude(int argc, VALUE * argv, VALUE module)
|
|
|
477
510
|
* call-seq:
|
|
478
511
|
* remove_features(mod) => mod
|
|
479
512
|
*
|
|
480
|
-
* When this module is unincluded from another,
|
|
513
|
+
* When this module is unincluded from another, Ruby Internal calls
|
|
481
514
|
* remove_features in this module. The default behavior is to remove
|
|
482
515
|
* the constants, methods, and module variables of this module from
|
|
483
516
|
* _mod_. If this module has not been included by _mod_, an exception
|
|
@@ -653,7 +686,7 @@ static int add_method_iter(VALUE name, VALUE value, VALUE module)
|
|
|
653
686
|
Data_Get_Struct(value, NODE, n);
|
|
654
687
|
#if RUBY_VERSION_CODE >= 192
|
|
655
688
|
rb_raise(rb_eRuntimeError, "NOT SUPPORTED");
|
|
656
|
-
#
|
|
689
|
+
#else
|
|
657
690
|
rb_add_method(module, SYM2ID(name), n->nd_body, n->nd_noex);
|
|
658
691
|
#endif
|
|
659
692
|
return ST_CONTINUE;
|
|
@@ -795,19 +828,23 @@ void Init_module(void)
|
|
|
795
828
|
|
|
796
829
|
#if RUBY_VERSION_CODE >= 180
|
|
797
830
|
{
|
|
798
|
-
VALUE
|
|
799
|
-
rb_cClass_Restorer = rb_define_class_under(
|
|
831
|
+
VALUE rb_mInternal = rb_define_module("Internal");
|
|
832
|
+
rb_cClass_Restorer = rb_define_class_under(rb_mInternal, "ClassRestorer", rb_cObject);
|
|
800
833
|
rb_define_method(rb_cClass_Restorer, "_dump", class_restorer_dump, 1);
|
|
801
834
|
rb_define_singleton_method(rb_cClass_Restorer, "_load", class_restorer_load, 1);
|
|
802
835
|
}
|
|
803
836
|
#endif
|
|
804
837
|
|
|
805
838
|
#if RUBY_VERSION_CODE == 180
|
|
806
|
-
rb_alias(CLASS_OF(rb_mMarshal), rb_intern("
|
|
839
|
+
rb_alias(CLASS_OF(rb_mMarshal), rb_intern("_Internal__orig_dump"), rb_intern("dump"));
|
|
807
840
|
rb_define_singleton_method(rb_mMarshal, "dump", ruby180_marshal_dump, -1);
|
|
808
841
|
#endif
|
|
809
842
|
|
|
810
843
|
rb_define_method(rb_cModule, "_dump", module_dump, 1);
|
|
811
844
|
rb_define_singleton_method(rb_cModule, "_load", module_load, 1);
|
|
845
|
+
|
|
846
|
+
#ifdef HAVE_TYPE_STRUCT_RTYPEDDATA
|
|
847
|
+
init_ruby_threadptr_data_type();
|
|
848
|
+
#endif
|
|
812
849
|
}
|
|
813
850
|
|