ruby-internal 0.7.3 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
data/ext/internal/vm/iseq/iseq.c
CHANGED
@@ -11,13 +11,41 @@
|
|
11
11
|
#ifdef RUBY_VM
|
12
12
|
|
13
13
|
#include "vm_core.h"
|
14
|
-
|
15
|
-
#include "
|
14
|
+
#include "gc.h"
|
15
|
+
#include "internal/method/internal_method.h"
|
16
16
|
|
17
17
|
#ifdef HAVE_ISEQ_H
|
18
18
|
#include "iseq.h"
|
19
19
|
#endif
|
20
20
|
|
21
|
+
#ifdef HAVE_TYPE_STRUCT_RTYPEDDATA
|
22
|
+
|
23
|
+
# undef GET_THREAD
|
24
|
+
# undef GetThreadPtr
|
25
|
+
# define GetThreadPtr(obj, ptr) \
|
26
|
+
TypedData_Get_Struct((obj), rb_thread_t, p_ruby_threadptr_data_type, (ptr))
|
27
|
+
|
28
|
+
static rb_data_type_t const * p_ruby_threadptr_data_type;
|
29
|
+
|
30
|
+
static rb_thread_t * GET_THREAD()
|
31
|
+
{
|
32
|
+
VALUE thread = rb_thread_current();
|
33
|
+
rb_thread_t * th;
|
34
|
+
ID * local_tbl;
|
35
|
+
GetThreadPtr(thread, th);
|
36
|
+
return th;
|
37
|
+
}
|
38
|
+
|
39
|
+
static void init_ruby_threadptr_data_type()
|
40
|
+
{
|
41
|
+
VALUE thread = rb_thread_current();
|
42
|
+
p_ruby_threadptr_data_type = RTYPEDDATA_TYPE(thread);
|
43
|
+
}
|
44
|
+
|
45
|
+
#endif
|
46
|
+
|
47
|
+
#include "iseq_load.inc"
|
48
|
+
|
21
49
|
#ifndef RARRAY_LEN
|
22
50
|
#define RARRAY_LEN(a) RARRAY(a)->len
|
23
51
|
#endif
|
@@ -368,7 +396,7 @@ static VALUE iseq_insn_line(VALUE self, VALUE n)
|
|
368
396
|
static VALUE iseq_catch_table(VALUE self)
|
369
397
|
{
|
370
398
|
rb_iseq_t *iseqdat = iseq_check(self);
|
371
|
-
|
399
|
+
long j;
|
372
400
|
|
373
401
|
VALUE catch_table = rb_ary_new();
|
374
402
|
|
@@ -475,7 +503,7 @@ static VALUE iseq_marshal_load(VALUE klass, VALUE str)
|
|
475
503
|
arr = marshal_load(str);
|
476
504
|
convert_placeholders_to_modules(arr);
|
477
505
|
|
478
|
-
VALUE iseq = iseq_load(
|
506
|
+
VALUE iseq = iseq_load(rb_cISeq, arr, 0, Qnil);
|
479
507
|
return iseq;
|
480
508
|
}
|
481
509
|
|
@@ -504,6 +532,7 @@ void Init_iseq(void)
|
|
504
532
|
|
505
533
|
rb_require("internal/node");
|
506
534
|
rb_require("internal/module");
|
535
|
+
rb_require("internal/method");
|
507
536
|
rb_require("internal/vm/instruction");
|
508
537
|
rb_require("internal/vm/inline_cache");
|
509
538
|
|
@@ -563,5 +592,10 @@ void Init_iseq(void)
|
|
563
592
|
insn_name(0);
|
564
593
|
insn_op_types(0);
|
565
594
|
#endif
|
595
|
+
|
596
|
+
#ifdef HAVE_TYPE_STRUCT_RTYPEDDATA
|
597
|
+
init_iseq_data_type();
|
598
|
+
init_ruby_threadptr_data_type();
|
599
|
+
#endif
|
566
600
|
}
|
567
601
|
|
@@ -1,10 +1,28 @@
|
|
1
1
|
#ifndef ruby_internal_iseq_load__inc_
|
2
2
|
#define ruby_internal_iseq_load__inc_
|
3
3
|
|
4
|
-
#
|
5
|
-
#include "iseq.h"
|
6
|
-
#include "vm_core.h"
|
4
|
+
#ifdef HAVE_TYPE_STRUCT_RTYPEDDATA
|
7
5
|
|
6
|
+
static rb_data_type_t const * p_iseq_data_type;
|
7
|
+
|
8
|
+
static void init_iseq_data_type()
|
9
|
+
{
|
10
|
+
rb_proc_t * p;
|
11
|
+
VALUE body;
|
12
|
+
|
13
|
+
VALUE binding = rb_binding_new();
|
14
|
+
VALUE new_proc = rb_funcall(
|
15
|
+
rb_cObject, rb_intern("eval"), 2, rb_str_new2("proc { }"), binding);
|
16
|
+
GetProcPtr(new_proc, p);
|
17
|
+
body = p->block.iseq->self;
|
18
|
+
|
19
|
+
p_iseq_data_type = RTYPEDDATA_TYPE(body);
|
20
|
+
}
|
21
|
+
|
22
|
+
#else
|
23
|
+
|
24
|
+
#endif
|
25
|
+
#
|
8
26
|
#ruby <<END
|
9
27
|
ruby_version_code = RUBY_VERSION.gsub(/\./, '').to_i
|
10
28
|
|
@@ -23,13 +41,13 @@
|
|
23
41
|
when /^(iseq_load|iseq_alloc|iseq_mark|iseq_free|compile_data_free|make_compile_option|make_compile_option_value|prepare_iseq_build|cleanup_iseq_build|set_relation|iseq_memsize)/
|
24
42
|
write = true
|
25
43
|
puts prev_line
|
26
|
-
when /^static.*iseq_data_type.*=/
|
27
|
-
write = true
|
28
44
|
when /^static.*COMPILE_OPTION_DEFAULT.*=/
|
29
45
|
write = true
|
30
46
|
when /^static.*COMPILE_OPTION_FALSE.*=/
|
31
47
|
write = true
|
32
48
|
stopwrite = true
|
49
|
+
when /TypedData_Make_Struct.*\&iseq_data_type/
|
50
|
+
line.gsub!(/\&iseq_data_type/, 'p_iseq_data_type')
|
33
51
|
when /^#define CHECK_/,
|
34
52
|
/^static inline VALUE CHECK_/
|
35
53
|
write = true
|
data/ext/internal/vm/vm.c
CHANGED
@@ -4,6 +4,22 @@
|
|
4
4
|
|
5
5
|
#include "vm_core.h"
|
6
6
|
|
7
|
+
#ifdef HAVE_TYPE_STRUCT_RTYPEDDATA
|
8
|
+
|
9
|
+
# undef GetThreadPtr
|
10
|
+
# define GetThreadPtr(obj, ptr) \
|
11
|
+
TypedData_Get_Struct((obj), rb_thread_t, p_ruby_threadptr_data_type, (ptr))
|
12
|
+
|
13
|
+
static rb_data_type_t const * p_ruby_threadptr_data_type;
|
14
|
+
|
15
|
+
static void init_ruby_threadptr_data_type()
|
16
|
+
{
|
17
|
+
VALUE thread = rb_thread_current();
|
18
|
+
p_ruby_threadptr_data_type = RTYPEDDATA_TYPE(thread);
|
19
|
+
}
|
20
|
+
|
21
|
+
#endif
|
22
|
+
|
7
23
|
extern rb_vm_t * ruby_current_vm;
|
8
24
|
|
9
25
|
/*
|
@@ -14,7 +30,15 @@ extern rb_vm_t * ruby_current_vm;
|
|
14
30
|
*/
|
15
31
|
static VALUE vm_current(VALUE klass)
|
16
32
|
{
|
33
|
+
#ifdef HAVE_TYPE_STRUCT_RTYPEDDATA
|
34
|
+
VALUE thread = rb_thread_current();
|
35
|
+
rb_thread_t * th;
|
36
|
+
ID * local_tbl;
|
37
|
+
GetThreadPtr(thread, th);
|
38
|
+
return th->vm->self;
|
39
|
+
#else
|
17
40
|
return ruby_current_vm->self;
|
41
|
+
#endif
|
18
42
|
}
|
19
43
|
|
20
44
|
/*
|
@@ -51,5 +75,9 @@ void Init_vm(void)
|
|
51
75
|
rb_define_singleton_method(rb_cRubyVM, "current", vm_current, 0);
|
52
76
|
rb_define_method(rb_cRubyVM, "top_self", vm_top_self, 0);
|
53
77
|
#endif
|
78
|
+
|
79
|
+
#ifdef HAVE_TYPE_STRUCT_RTYPEDDATA
|
80
|
+
init_ruby_threadptr_data_type();
|
81
|
+
#endif
|
54
82
|
}
|
55
83
|
|
data/lib/internal/classtree.rb
CHANGED
@@ -2,6 +2,34 @@ require 'internal/object'
|
|
2
2
|
require 'internal/module'
|
3
3
|
|
4
4
|
class Object
|
5
|
+
# Returns an ASCII representation of a class hierarchy, e.g.:
|
6
|
+
#
|
7
|
+
# irb(main):004:0> puts Object.new.classtree
|
8
|
+
# #<Object:0x40330ce8>
|
9
|
+
# +-class = Object
|
10
|
+
# |-class = #<Class:Object>
|
11
|
+
# | |-class = Class
|
12
|
+
# | | |-class = #<Class:Class>
|
13
|
+
# | | | |-class = #<Class:Class> (*)
|
14
|
+
# | | | +-super = #<Class:Module>
|
15
|
+
# | | | |-class = Class (*)
|
16
|
+
# | | | +-super = #<Class:Object> (*)
|
17
|
+
# | | +-super = Module
|
18
|
+
# | | |-class = #<Class:Module> (*)
|
19
|
+
# | | +-super = Object (*)
|
20
|
+
# | +-super = Class (*)
|
21
|
+
# +-super = #<PP::ObjectMixin?:0x40349568>
|
22
|
+
# +-class = PP::ObjectMixin?
|
23
|
+
# |-class = Module (*)
|
24
|
+
# +-super = #<Kernel:0x4033507c>
|
25
|
+
# +-class = Kernel
|
26
|
+
# => nil
|
27
|
+
#
|
28
|
+
# An asterisk (*) indicates that the class has previously been
|
29
|
+
# printed.
|
30
|
+
#
|
31
|
+
# The notation #<Class:XXXX> indicates a singleton class.
|
32
|
+
#
|
5
33
|
def classtree(s = '', prefix = '', obj=self, graphed={})
|
6
34
|
# if Module == obj.class.class then
|
7
35
|
# s << "included module "
|
data/lib/internal/debug.rb
CHANGED
@@ -2,14 +2,22 @@ require 'internal/node'
|
|
2
2
|
require 'internal/node/as_expression'
|
3
3
|
require 'internal/node/pp'
|
4
4
|
|
5
|
-
module
|
5
|
+
module Internal
|
6
|
+
# Print an expression and its result, e.g.:
|
7
|
+
#
|
8
|
+
# printdebug { 1 + 1 }
|
9
|
+
#
|
10
|
+
# will print:
|
11
|
+
#
|
12
|
+
# test.rb:42: 1 + 1 => 2
|
13
|
+
#
|
6
14
|
def printdebug(&block)
|
7
15
|
puts "#{caller[0]}: #{block.body.as_expression} => #{block.call}"
|
8
16
|
end
|
9
17
|
end
|
10
18
|
|
11
19
|
if __FILE__ == $0 then
|
12
|
-
include
|
20
|
+
include Internal
|
13
21
|
a = 41
|
14
22
|
printdebug { a + 1 }
|
15
23
|
end
|
@@ -4,6 +4,31 @@ require 'internal/method'
|
|
4
4
|
require 'internal/method/signature'
|
5
5
|
|
6
6
|
module MethodAsCode
|
7
|
+
# Returns a string representation of the method definition/body.
|
8
|
+
#
|
9
|
+
# irb(main):001:0> def foo(a, b, *rest, &block)
|
10
|
+
# irb(main):002:1> begin
|
11
|
+
# irb(main):003:2* if not a and not b then
|
12
|
+
# irb(main):004:3* raise "Need more input!"
|
13
|
+
# irb(main):005:3> end
|
14
|
+
# irb(main):006:2> return a + b
|
15
|
+
# irb(main):007:2> ensure
|
16
|
+
# irb(main):008:2* puts "In ensure block"
|
17
|
+
# irb(main):009:2> end
|
18
|
+
# irb(main):010:1> end
|
19
|
+
# => nil
|
20
|
+
# irb(main):011:0> m = method(:foo)
|
21
|
+
# => #<Method: Object#foo>
|
22
|
+
# irb(main):012:0> puts m.as_code
|
23
|
+
# def foo(a, b, *rest, &block)
|
24
|
+
# begin
|
25
|
+
# (raise("Need more input!")) if (not a and not b)
|
26
|
+
# return a + b
|
27
|
+
# ensure
|
28
|
+
# puts("In ensure block")
|
29
|
+
# end
|
30
|
+
# end
|
31
|
+
#
|
7
32
|
def as_code(indent=0, name=nil)
|
8
33
|
sig = self.signature
|
9
34
|
if self.body.respond_to?(:body) then
|
@@ -4,9 +4,8 @@ require 'internal/method/signature'
|
|
4
4
|
require 'internal/method'
|
5
5
|
|
6
6
|
module MethodAsExpression
|
7
|
-
#
|
8
|
-
#
|
9
|
-
# consistent with Proc.
|
7
|
+
# Return a single-line string representation of a method
|
8
|
+
# TODO: this method would be more aptly named "as_expression_string".
|
10
9
|
def as_expression
|
11
10
|
sig = self.signature
|
12
11
|
if self.body.respond_to?(:body) then
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module MethodOrigin
|
2
|
+
# An abstraction for a method origin.
|
3
|
+
class Origin
|
4
|
+
attr_reader :file, :line
|
5
|
+
|
6
|
+
def initialize(file, line)
|
7
|
+
@file = file
|
8
|
+
@line = line
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_s
|
12
|
+
return "#{file}:#{line}"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
# Return a Method::Origin representing where the method was defined.
|
17
|
+
def origin
|
18
|
+
block = body().next
|
19
|
+
return Origin.new(block.nd_file, block.nd_line)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class Method
|
24
|
+
include MethodOrigin
|
25
|
+
end
|
26
|
+
|
27
|
+
class UnboundMethod
|
28
|
+
include MethodOrigin
|
29
|
+
end
|
@@ -1,111 +1,17 @@
|
|
1
1
|
require 'internal/method'
|
2
2
|
require 'internal/node'
|
3
3
|
require 'internal/node/as_expression'
|
4
|
+
require 'internal/method/signature/argument'
|
5
|
+
require 'internal/method/signature/node'
|
6
|
+
require 'internal/method/signature/signature'
|
4
7
|
|
5
8
|
if defined?(RubyVM) then
|
6
9
|
require 'internal/vm/bytedecoder'
|
10
|
+
require 'internal/method/signature/iseq'
|
7
11
|
end
|
8
12
|
|
9
13
|
module MethodSig
|
10
|
-
|
11
|
-
attr_reader :name
|
12
|
-
|
13
|
-
def required?
|
14
|
-
return !optional?
|
15
|
-
end
|
16
|
-
|
17
|
-
def optional?
|
18
|
-
return rest? || block?
|
19
|
-
end
|
20
|
-
|
21
|
-
def rest?
|
22
|
-
return @is_rest
|
23
|
-
end
|
24
|
-
|
25
|
-
def block?
|
26
|
-
return @is_block
|
27
|
-
end
|
28
|
-
|
29
|
-
def default
|
30
|
-
return nil
|
31
|
-
end
|
32
|
-
|
33
|
-
def initialize(name, is_rest, is_block)
|
34
|
-
@name = name
|
35
|
-
@is_rest = is_rest
|
36
|
-
@is_block = is_block
|
37
|
-
end
|
38
|
-
|
39
|
-
def to_s
|
40
|
-
if @is_rest then
|
41
|
-
prefix = "*"
|
42
|
-
elsif @is_block then
|
43
|
-
prefix = "&"
|
44
|
-
end
|
45
|
-
|
46
|
-
if self.default then
|
47
|
-
suffix = "=#{default()}"
|
48
|
-
end
|
49
|
-
|
50
|
-
return "#{prefix}#{@name}#{suffix}"
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
class OptionalArgument < Argument
|
55
|
-
def optional?
|
56
|
-
return true
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
class NodeOptionalArgument < OptionalArgument
|
61
|
-
attr_reader :node_for_default
|
62
|
-
attr_reader :default
|
63
|
-
|
64
|
-
def initialize(name, default, node_for_default, is_rest, is_block)
|
65
|
-
super(name, is_rest, is_block)
|
66
|
-
@default = default
|
67
|
-
@node_for_default = node_for_default
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
class YarvOptionalArgument < OptionalArgument
|
72
|
-
attr_reader :iseq
|
73
|
-
attr_reader :pc_start
|
74
|
-
attr_reader :local_idx
|
75
|
-
|
76
|
-
def initialize(name, iseq, pc_start, local_idx, is_rest, is_block)
|
77
|
-
super(name, is_rest, is_block)
|
78
|
-
@iseq = iseq
|
79
|
-
@pc_start = pc_start
|
80
|
-
@local_idx = local_idx
|
81
|
-
@default = nil
|
82
|
-
end
|
83
|
-
|
84
|
-
def inspect
|
85
|
-
default()
|
86
|
-
super
|
87
|
-
end
|
88
|
-
|
89
|
-
def default
|
90
|
-
return @default if @default
|
91
|
-
|
92
|
-
env = Nodewrap::ByteDecoder::Environment.new(@iseq.local_table())
|
93
|
-
local_table_idx = local_table_idx()
|
94
|
-
@iseq.bytedecode(env, @pc_start) do |instr|
|
95
|
-
RubyVM::Instruction::SETLOCAL === instr &&
|
96
|
-
instr.operands[0] == local_table_idx
|
97
|
-
end
|
98
|
-
expressions = env.expressions + env.stack
|
99
|
-
|
100
|
-
@default = expressions[0].rhs.to_s
|
101
|
-
return @default
|
102
|
-
end
|
103
|
-
|
104
|
-
def local_table_idx
|
105
|
-
return @iseq.local_table.size - @local_idx + 1
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
14
|
+
# Return the names of the local variables of this method.
|
109
15
|
def local_vars
|
110
16
|
return self.body.local_vars
|
111
17
|
end
|
@@ -169,47 +75,6 @@ module MethodSig
|
|
169
75
|
|
170
76
|
return args
|
171
77
|
end
|
172
|
-
|
173
|
-
# An abstraction for a method signature.
|
174
|
-
class Signature
|
175
|
-
attr_reader :origin_class, :name, :arg_names, :args
|
176
|
-
|
177
|
-
def initialize(origin_class, name, arg_names, args)
|
178
|
-
@origin_class = origin_class
|
179
|
-
@name = name
|
180
|
-
@arg_names = arg_names
|
181
|
-
@args = args
|
182
|
-
end
|
183
|
-
|
184
|
-
def to_s
|
185
|
-
return "#{@origin_class}\##{@name}(#{param_list})"
|
186
|
-
end
|
187
|
-
|
188
|
-
def param_list
|
189
|
-
params = @arg_names.map{ |n| args[n].to_s }
|
190
|
-
return params.join(', ')
|
191
|
-
end
|
192
|
-
end
|
193
|
-
|
194
|
-
# An abstraction for a method origin.
|
195
|
-
class Origin
|
196
|
-
attr_reader :file, :line
|
197
|
-
|
198
|
-
def initialize(file, line)
|
199
|
-
@file = file
|
200
|
-
@line = line
|
201
|
-
end
|
202
|
-
|
203
|
-
def to_s
|
204
|
-
return "#{file}:#{line}"
|
205
|
-
end
|
206
|
-
end
|
207
|
-
|
208
|
-
# Return a Method::Origin representing where the method was defined.
|
209
|
-
def origin
|
210
|
-
block = body().next
|
211
|
-
return Origin.new(block.nd_file, block.nd_line)
|
212
|
-
end
|
213
78
|
end
|
214
79
|
|
215
80
|
class Method
|
@@ -238,166 +103,6 @@ class UnboundMethod
|
|
238
103
|
end
|
239
104
|
end
|
240
105
|
|
241
|
-
class Node
|
242
|
-
# pre-YARV
|
243
|
-
class SCOPE
|
244
|
-
include MethodSig
|
245
|
-
|
246
|
-
def local_vars
|
247
|
-
return self.tbl || []
|
248
|
-
end
|
249
|
-
|
250
|
-
def argument_names
|
251
|
-
local_vars = self.local_vars
|
252
|
-
args = self.args_node
|
253
|
-
num_required_args = args.cnt
|
254
|
-
num_optional_args = 0
|
255
|
-
opt = args.opt
|
256
|
-
while opt do
|
257
|
-
num_optional_args += 1
|
258
|
-
opt = opt.next
|
259
|
-
end
|
260
|
-
num_args = \
|
261
|
-
num_required_args + \
|
262
|
-
num_optional_args + \
|
263
|
-
(rest_arg ? 1 : 0) + \
|
264
|
-
(block_arg ? 1 : 0)
|
265
|
-
return local_vars[0...num_args]
|
266
|
-
end
|
267
|
-
|
268
|
-
def args_node
|
269
|
-
if self.next.class == Node::ARGS then
|
270
|
-
return self.next
|
271
|
-
elsif self.next.head.class == Node::ARGS then
|
272
|
-
return self.next.head
|
273
|
-
else
|
274
|
-
raise "Could not find method arguments"
|
275
|
-
end
|
276
|
-
end
|
277
|
-
|
278
|
-
def rest_arg
|
279
|
-
args_node = args_node()
|
280
|
-
rest = args_node.rest()
|
281
|
-
if rest.class == Node::LASGN then
|
282
|
-
# subtract 2 to account for implicit vars
|
283
|
-
return rest.cnt - 2
|
284
|
-
elsif not rest
|
285
|
-
return nil
|
286
|
-
else
|
287
|
-
return rest > 0 ? rest - 2 : nil
|
288
|
-
end
|
289
|
-
end
|
290
|
-
|
291
|
-
def block_arg
|
292
|
-
block = self.next
|
293
|
-
if block.class == Node::BLOCK and
|
294
|
-
block.next.head.class == Node::BLOCK_ARG then
|
295
|
-
# subtract 2 to account for implicit vars
|
296
|
-
return block.next.head.cnt - 2
|
297
|
-
else
|
298
|
-
return nil
|
299
|
-
end
|
300
|
-
end
|
301
|
-
|
302
|
-
def set_optional_args(args, args_node, names)
|
303
|
-
opt = args_node.opt
|
304
|
-
while opt do
|
305
|
-
head = opt.head
|
306
|
-
if head.class == Node::LASGN then
|
307
|
-
args[head.vid] = NodeOptionalArgument.new(
|
308
|
-
head.vid, head.value.as_expression, head.value, false, false)
|
309
|
-
else
|
310
|
-
raise "Unexpected node type: #{opt.class}"
|
311
|
-
end
|
312
|
-
opt = opt.next
|
313
|
-
end
|
314
|
-
end
|
315
|
-
end
|
316
|
-
|
317
|
-
# Pre-YARV, I think
|
318
|
-
class BMETHOD
|
319
|
-
def local_vars
|
320
|
-
raise "TODO: Not implemented yet"
|
321
|
-
end
|
322
|
-
|
323
|
-
def argument_names
|
324
|
-
return self.cval.arguments.names
|
325
|
-
end
|
326
|
-
|
327
|
-
def arguments
|
328
|
-
return self.cval.arguments
|
329
|
-
end
|
330
|
-
|
331
|
-
def args_node
|
332
|
-
raise "TODO: Not implemented yet"
|
333
|
-
end
|
334
|
-
|
335
|
-
def rest_arg
|
336
|
-
raise "TODO: Not implemented yet"
|
337
|
-
end
|
338
|
-
|
339
|
-
def block_arg
|
340
|
-
raise "TODO: Not implemented yet"
|
341
|
-
end
|
342
|
-
|
343
|
-
def set_optional_args(args, args_node, names)
|
344
|
-
raise "TODO: Not implemented yet"
|
345
|
-
end
|
346
|
-
end
|
347
|
-
|
348
|
-
# YARV
|
349
|
-
class METHOD
|
350
|
-
include MethodSig
|
351
|
-
|
352
|
-
def local_vars
|
353
|
-
iseq = self.body
|
354
|
-
local_vars = iseq.local_table
|
355
|
-
return local_vars
|
356
|
-
end
|
357
|
-
|
358
|
-
def argument_names
|
359
|
-
local_vars = self.local_vars
|
360
|
-
iseq = self.body
|
361
|
-
opt_args = iseq.arg_opt_table
|
362
|
-
opt_args.pop # last arg is a pointer to the start of the code
|
363
|
-
num_args = \
|
364
|
-
iseq.argc + \
|
365
|
-
opt_args.size + \
|
366
|
-
(rest_arg ? 1 : 0) + \
|
367
|
-
(block_arg ? 1 : 0)
|
368
|
-
return local_vars[0...num_args]
|
369
|
-
end
|
370
|
-
|
371
|
-
def args_node
|
372
|
-
return nil
|
373
|
-
end
|
374
|
-
|
375
|
-
def rest_arg
|
376
|
-
arg_rest = self.body.arg_rest
|
377
|
-
return arg_rest >= 0 ? arg_rest : nil
|
378
|
-
end
|
379
|
-
|
380
|
-
def block_arg
|
381
|
-
arg_block = self.body.arg_block
|
382
|
-
return arg_block >= 0 ? arg_block : nil
|
383
|
-
end
|
384
|
-
|
385
|
-
def set_optional_args(args, args_node, names)
|
386
|
-
opt_table = self.body.arg_opt_table
|
387
|
-
opt_table.pop
|
388
|
-
first_opt_idx =
|
389
|
-
names.size -
|
390
|
-
opt_table.size -
|
391
|
-
(self.rest_arg ? 1 : 0) -
|
392
|
-
(self.block_arg ? 1 : 0)
|
393
|
-
opt_table.each_with_index do |pc, idx|
|
394
|
-
name = names[first_opt_idx + idx]
|
395
|
-
args[name] = YarvOptionalArgument.new(name, self.body, pc, idx, false, false)
|
396
|
-
end
|
397
|
-
end
|
398
|
-
end
|
399
|
-
end
|
400
|
-
|
401
106
|
if __FILE__ == $0 then
|
402
107
|
def foo(); end
|
403
108
|
puts method(:foo).signature
|