ruby-internal 0.7.2 → 0.7.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. data/bin/ruby-internal-node-dump +1 -1
  2. data/bin/ruby-internal-obfuscate +1 -1
  3. data/ext/internal/method/extconf.rb +4 -0
  4. data/ext/internal/method/internal_method.h +65 -0
  5. data/ext/internal/method/{method.h.rpp → internal_method.h.rpp} +21 -0
  6. data/ext/internal/method/method.c +69 -13
  7. data/ext/internal/module/classpath.c +12 -14
  8. data/ext/internal/module/extconf.rb +3 -2
  9. data/ext/internal/module/module.c +36 -15
  10. data/ext/internal/node/block.h.rpp +1 -0
  11. data/ext/internal/node/extconf.rb +0 -22
  12. data/ext/internal/node/global_entry.h +45 -3
  13. data/ext/internal/node/global_entry.h.rpp +12 -3
  14. data/ext/internal/node/node.c +42 -15
  15. data/ext/internal/node/node_type_descrip.c +16 -20
  16. data/ext/internal/node/node_type_descrip.c.rpp +1 -0
  17. data/ext/internal/node/nodeinfo.c +133 -281
  18. data/ext/internal/node/nodeinfo.c.rpp +8 -4
  19. data/ext/internal/node/nodeinfo.h.rpp +2 -1
  20. data/ext/internal/noex/noex.c +4 -0
  21. data/ext/internal/proc/proc.c +2 -2
  22. data/ext/internal/vm/constants/constants.c +2 -0
  23. data/ext/internal/vm/constants/extconf.rb +2 -0
  24. data/ext/internal/vm/control_frame/control_frame.c +21 -3
  25. data/ext/internal/vm/control_frame/extconf.rb +4 -0
  26. data/ext/internal/vm/inline_cache/inline_cache.c +12 -5
  27. data/ext/internal/vm/instruction/insns_info.c +141 -64
  28. data/ext/internal/vm/instruction/insns_info.c.rpp +3 -0
  29. data/ext/internal/vm/instruction/insns_info.h +80 -71
  30. data/ext/internal/vm/iseq/iseq.c +6 -6
  31. data/ext/internal/vm/iseq/iseq_load.inc.rpp +6 -3
  32. data/ext/mkmf-ruby-internal.rb +21 -1
  33. data/ext/ruby_source_dir.rb +6 -2
  34. data/post-setup.rb +1 -0
  35. data/pre-config.rb +9 -0
  36. data/run_tests.rb +1 -0
  37. data/test/test_method.rb +1 -1
  38. data/test/test_module.rb +1 -1
  39. metadata +309 -321
  40. data/ext/internal/method/method.h +0 -20
  41. data/ext/internal/yarv-headers/debug.h +0 -36
  42. data/ext/internal/yarv-headers/dln.h +0 -41
  43. data/ext/internal/yarv-headers/encdb.h +0 -147
  44. data/ext/internal/yarv-headers/eval_intern.h +0 -215
  45. data/ext/internal/yarv-headers/gc.h +0 -75
  46. data/ext/internal/yarv-headers/id.h +0 -163
  47. data/ext/internal/yarv-headers/iseq.h +0 -103
  48. data/ext/internal/yarv-headers/node.h +0 -516
  49. data/ext/internal/yarv-headers/parse.h +0 -188
  50. data/ext/internal/yarv-headers/regenc.h +0 -207
  51. data/ext/internal/yarv-headers/regint.h +0 -842
  52. data/ext/internal/yarv-headers/regparse.h +0 -351
  53. data/ext/internal/yarv-headers/revision.h +0 -1
  54. data/ext/internal/yarv-headers/thread_pthread.h +0 -24
  55. data/ext/internal/yarv-headers/thread_win32.h +0 -33
  56. data/ext/internal/yarv-headers/transcode_data.h +0 -106
  57. data/ext/internal/yarv-headers/transdb.h +0 -147
  58. data/ext/internal/yarv-headers/version.h +0 -54
  59. data/ext/internal/yarv-headers/vm_core.h +0 -646
  60. data/ext/internal/yarv-headers/vm_exec.h +0 -184
  61. data/ext/internal/yarv-headers/vm_insnhelper.h +0 -195
  62. data/ext/internal/yarv-headers/vm_opts.h +0 -51
  63. data/ext/rubypp.rb +0 -97
@@ -1,184 +0,0 @@
1
- /**********************************************************************
2
-
3
- vm.h -
4
-
5
- $Author: yugui $
6
- created at: 04/01/01 16:56:59 JST
7
-
8
- Copyright (C) 2004-2007 Koichi Sasada
9
-
10
- **********************************************************************/
11
-
12
- #ifndef RUBY_VM_EXEC_H
13
- #define RUBY_VM_EXEC_H
14
-
15
- typedef long OFFSET;
16
- typedef unsigned long lindex_t;
17
- typedef unsigned long dindex_t;
18
- typedef rb_num_t GENTRY;
19
- typedef rb_iseq_t *ISEQ;
20
-
21
- #ifdef COLLECT_USAGE_ANALYSIS
22
- #define USAGE_ANALYSIS_INSN(insn) vm_analysis_insn(insn)
23
- #define USAGE_ANALYSIS_OPERAND(insn, n, op) vm_analysis_operand(insn, n, (VALUE)op)
24
- #define USAGE_ANALYSIS_REGISTER(reg, s) vm_analysis_register(reg, s)
25
- #else
26
- #define USAGE_ANALYSIS_INSN(insn) /* none */
27
- #define USAGE_ANALYSIS_OPERAND(insn, n, op) /* none */
28
- #define USAGE_ANALYSIS_REGISTER(reg, s) /* none */
29
- #endif
30
-
31
- #ifdef __GCC__
32
- /* TODO: machine dependent prefetch instruction */
33
- #define PREFETCH(pc)
34
- #else
35
- #define PREFETCH(pc)
36
- #endif
37
-
38
- #if VMDEBUG > 0
39
- #define debugs printf
40
- #define DEBUG_ENTER_INSN(insn) \
41
- debug_print_pre(th, GET_CFP());
42
-
43
- #if OPT_STACK_CACHING
44
- #define SC_REGS() , reg_a, reg_b
45
- #else
46
- #define SC_REGS()
47
- #endif
48
-
49
- #define DEBUG_END_INSN() \
50
- debug_print_post(th, GET_CFP() SC_REGS());
51
-
52
- #else
53
-
54
- #define debugs
55
- #define DEBUG_ENTER_INSN(insn)
56
- #define DEBUG_END_INSN()
57
- #endif
58
-
59
- #define throwdebug if(0)printf
60
- /* #define throwdebug printf */
61
-
62
- /************************************************/
63
- #if DISPATCH_XXX
64
- error !
65
- /************************************************/
66
- #elif OPT_CALL_THREADED_CODE
67
-
68
- #define LABEL(x) insn_func_##x
69
- #define ELABEL(x)
70
- #define LABEL_PTR(x) &LABEL(x)
71
-
72
- #define INSN_ENTRY(insn) \
73
- static rb_control_frame_t * \
74
- FUNC_FASTCALL(LABEL(insn))(rb_thread_t *th, rb_control_frame_t *reg_cfp) {
75
-
76
- #define END_INSN(insn) return reg_cfp;}
77
-
78
- #define NEXT_INSN() return reg_cfp;
79
-
80
- /************************************************/
81
- #elif OPT_TOKEN_THREADED_CODE || OPT_DIRECT_THREADED_CODE
82
- /* threaded code with gcc */
83
-
84
- #define LABEL(x) INSN_LABEL_##x
85
- #define ELABEL(x) INSN_ELABEL_##x
86
- #define LABEL_PTR(x) &&LABEL(x)
87
-
88
- #define INSN_ENTRY_SIG(insn)
89
-
90
-
91
- #define INSN_DISPATCH_SIG(insn)
92
-
93
- #define INSN_ENTRY(insn) \
94
- LABEL(insn): \
95
- INSN_ENTRY_SIG(insn); \
96
-
97
- /* dispather */
98
- #if __GNUC__ && (__i386__ || __x86_64__) && __GNUC__ == 3
99
- #define DISPATCH_ARCH_DEPEND_WAY(addr) \
100
- asm volatile("jmp *%0;\t# -- inseted by vm.h\t[length = 2]" : : "r" (addr))
101
-
102
- #else
103
- #define DISPATCH_ARCH_DEPEND_WAY(addr) \
104
- /* do nothing */
105
-
106
- #endif
107
-
108
-
109
- /**********************************/
110
- #if OPT_DIRECT_THREADED_CODE
111
-
112
- /* for GCC 3.4.x */
113
- #define TC_DISPATCH(insn) \
114
- INSN_DISPATCH_SIG(insn); \
115
- goto *GET_CURRENT_INSN(); \
116
- ;
117
-
118
- #else
119
- /* token threade code */
120
-
121
- #define TC_DISPATCH(insn) \
122
- DISPATCH_ARCH_DEPEND_WAY(insns_address_table[GET_CURRENT_INSN()]); \
123
- INSN_DISPATCH_SIG(insn); \
124
- goto *insns_address_table[GET_CURRENT_INSN()]; \
125
- rb_bug("tc error");
126
-
127
-
128
- #endif /* DISPATCH_DIRECT_THREADED_CODE */
129
-
130
- #define END_INSN(insn) \
131
- DEBUG_END_INSN(); \
132
- TC_DISPATCH(insn); \
133
-
134
- #define INSN_DISPATCH() \
135
- TC_DISPATCH(__START__) \
136
- {
137
-
138
- #define END_INSNS_DISPATCH() \
139
- rb_bug("unknown insn: %ld", GET_CURRENT_INSN()); \
140
- } /* end of while loop */ \
141
-
142
- #define NEXT_INSN() TC_DISPATCH(__NEXT_INSN__)
143
-
144
- /************************************************/
145
- #else /* no threaded code */
146
- /* most common method */
147
-
148
- #define INSN_ENTRY(insn) \
149
- case BIN(insn):
150
-
151
- #define END_INSN(insn) \
152
- DEBUG_END_INSN(); \
153
- break;
154
-
155
-
156
- #define INSN_DISPATCH() \
157
- while(1){ \
158
- switch(GET_CURRENT_INSN()){
159
-
160
- #define END_INSNS_DISPATCH() \
161
- default: \
162
- SDR(); \
163
- rb_bug("unknown insn: %ld", GET_CURRENT_INSN()); \
164
- } /* end of switch */ \
165
- } /* end of while loop */ \
166
-
167
- #define NEXT_INSN() goto first
168
-
169
- #endif
170
-
171
- #define VM_SP_CNT(th, sp) ((sp) - (th)->stack)
172
-
173
- #if OPT_CALL_THREADED_CODE
174
- #define THROW_EXCEPTION(exc) do { \
175
- th->errinfo = (VALUE)(exc); \
176
- return 0; \
177
- } while (0)
178
- #else
179
- #define THROW_EXCEPTION(exc) return (VALUE)(exc)
180
- #endif
181
-
182
- #define SCREG(r) (reg_##r)
183
-
184
- #endif /* RUBY_VM_EXEC_H */
@@ -1,195 +0,0 @@
1
- /**********************************************************************
2
-
3
- insnhelper.h - helper macros to implement each instructions
4
-
5
- $Author: yugui $
6
- created at: 04/01/01 15:50:34 JST
7
-
8
- Copyright (C) 2004-2007 Koichi Sasada
9
-
10
- **********************************************************************/
11
-
12
- #ifndef RUBY_INSNHELPER_H
13
- #define RUBY_INSNHELPER_H
14
-
15
- /**
16
- * VM Debug Level
17
- *
18
- * debug level:
19
- * 0: no debug output
20
- * 1: show instruction name
21
- * 2: show stack frame when control stack frame is changed
22
- * 3: show stack status
23
- * 4: show register
24
- * 5:
25
- * 10: gc check
26
- */
27
-
28
- #ifndef VMDEBUG
29
- #define VMDEBUG 0
30
- #endif
31
-
32
- #if 0
33
- #undef VMDEBUG
34
- #define VMDEBUG 3
35
- #endif
36
-
37
- enum {
38
- BOP_PLUS,
39
- BOP_MINUS,
40
- BOP_MULT,
41
- BOP_DIV,
42
- BOP_MOD,
43
- BOP_EQ,
44
- BOP_LT,
45
- BOP_LE,
46
- BOP_LTLT,
47
- BOP_AREF,
48
- BOP_ASET,
49
- BOP_LENGTH,
50
- BOP_SUCC,
51
- BOP_GT,
52
- BOP_GE,
53
- BOP_NOT,
54
- BOP_NEQ,
55
-
56
- BOP_LAST_
57
- };
58
-
59
- extern char ruby_vm_redefined_flag[BOP_LAST_];
60
- extern VALUE ruby_vm_global_state_version;
61
- extern VALUE ruby_vm_const_missing_count;
62
-
63
- #define GET_VM_STATE_VERSION() (ruby_vm_global_state_version)
64
- #define INC_VM_STATE_VERSION() \
65
- (ruby_vm_global_state_version = (ruby_vm_global_state_version+1) & 0x8fffffff)
66
-
67
-
68
- /**********************************************************/
69
- /* deal with stack */
70
- /**********************************************************/
71
-
72
- #define PUSH(x) (SET_SV(x), INC_SP(1))
73
- #define TOPN(n) (*(GET_SP()-(n)-1))
74
- #define POPN(n) (DEC_SP(n))
75
- #define POP() (DEC_SP(1))
76
- #define STACK_ADDR_FROM_TOP(n) (GET_SP()-(n))
77
-
78
- #define GET_TOS() (tos) /* dummy */
79
-
80
- /**********************************************************/
81
- /* deal with registers */
82
- /**********************************************************/
83
-
84
- #define REG_CFP (reg_cfp)
85
- #define REG_PC (REG_CFP->pc)
86
- #define REG_SP (REG_CFP->sp)
87
- #define REG_LFP (REG_CFP->lfp)
88
- #define REG_DFP (REG_CFP->dfp)
89
-
90
- #define RESTORE_REGS() do { \
91
- REG_CFP = th->cfp; \
92
- } while (0)
93
-
94
- #define REG_A reg_a
95
- #define REG_B reg_b
96
-
97
- #ifdef COLLECT_USAGE_ANALYSIS
98
- #define USAGE_ANALYSIS_REGISTER_HELPER(a, b, v) \
99
- (USAGE_ANALYSIS_REGISTER(a, b), (v))
100
- #else
101
- #define USAGE_ANALYSIS_REGISTER_HELPER(a, b, v) (v)
102
- #endif
103
-
104
- /* PC */
105
- #define GET_PC() (USAGE_ANALYSIS_REGISTER_HELPER(0, 0, REG_PC))
106
- #define SET_PC(x) (REG_PC = (USAGE_ANALYSIS_REGISTER_HELPER(0, 1, x)))
107
- #define GET_CURRENT_INSN() (*GET_PC())
108
- #define GET_OPERAND(n) (GET_PC()[(n)])
109
- #define ADD_PC(n) (SET_PC(REG_PC + (n)))
110
-
111
- #define GET_PC_COUNT() (REG_PC - GET_ISEQ()->iseq_encoded)
112
- #define JUMP(dst) (REG_PC += (dst))
113
-
114
- /* FP */
115
- #define GET_CFP() (USAGE_ANALYSIS_REGISTER_HELPER(2, 0, REG_CFP))
116
- #define GET_LFP() (USAGE_ANALYSIS_REGISTER_HELPER(3, 0, REG_LFP))
117
- #define SET_LFP(x) (REG_LFP = (USAGE_ANALYSIS_REGISTER_HELPER(3, 1, (x))))
118
- #define GET_DFP() (USAGE_ANALYSIS_REGISTER_HELPER(4, 0, REG_DFP))
119
- #define SET_DFP(x) (REG_DFP = (USAGE_ANALYSIS_REGISTER_HELPER(4, 1, (x))))
120
-
121
- /* SP */
122
- #define GET_SP() (USAGE_ANALYSIS_REGISTER_HELPER(1, 0, REG_SP))
123
- #define SET_SP(x) (REG_SP = (USAGE_ANALYSIS_REGISTER_HELPER(1, 1, (x))))
124
- #define INC_SP(x) (REG_SP += (USAGE_ANALYSIS_REGISTER_HELPER(1, 1, (x))))
125
- #define DEC_SP(x) (REG_SP -= (USAGE_ANALYSIS_REGISTER_HELPER(1, 1, (x))))
126
- #define SET_SV(x) (*GET_SP() = (x))
127
- /* set current stack value as x */
128
-
129
- #define GET_SP_COUNT() (REG_SP - th->stack)
130
-
131
- /* instruction sequence C struct */
132
- #define GET_ISEQ() (GET_CFP()->iseq)
133
-
134
- /**********************************************************/
135
- /* deal with variables */
136
- /**********************************************************/
137
-
138
- #define GET_PREV_DFP(dfp) ((VALUE *)((dfp)[0] & ~0x03))
139
-
140
- #define GET_GLOBAL(entry) rb_gvar_get((struct global_entry*)entry)
141
- #define SET_GLOBAL(entry, val) rb_gvar_set((struct global_entry*)entry, val)
142
-
143
- #define GET_CONST_INLINE_CACHE(dst) ((IC) * (GET_PC() + (dst) + 1))
144
-
145
- /**********************************************************/
146
- /* deal with values */
147
- /**********************************************************/
148
-
149
- #define GET_SELF() (USAGE_ANALYSIS_REGISTER_HELPER(5, 0, GET_CFP()->self))
150
-
151
- /**********************************************************/
152
- /* deal with control flow 2: method/iterator */
153
- /**********************************************************/
154
-
155
- #define COPY_CREF(c1, c2) do { \
156
- NODE *__tmp_c2 = (c2); \
157
- c1->nd_clss = __tmp_c2->nd_clss; \
158
- c1->nd_visi = __tmp_c2->nd_visi; \
159
- c1->nd_next = __tmp_c2->nd_next; \
160
- } while (0)
161
-
162
- #define CALL_METHOD(num, blockptr, flag, id, mn, recv) do { \
163
- VALUE v = vm_call_method(th, GET_CFP(), num, blockptr, flag, id, mn, recv); \
164
- if (v == Qundef) { \
165
- RESTORE_REGS(); \
166
- NEXT_INSN(); \
167
- } \
168
- else { \
169
- val = v; \
170
- } \
171
- } while (0)
172
-
173
- #define GET_BLOCK_PTR() \
174
- ((rb_block_t *)(GC_GUARDED_PTR_REF(GET_LFP()[0])))
175
-
176
- /**********************************************************/
177
- /* deal with control flow 3: exception */
178
- /**********************************************************/
179
-
180
-
181
- /**********************************************************/
182
- /* others */
183
- /**********************************************************/
184
-
185
- /* optimize insn */
186
- #define FIXNUM_2_P(a, b) ((a) & (b) & 1)
187
- #define BASIC_OP_UNREDEFINED_P(op) (LIKELY(ruby_vm_redefined_flag[op] == 0))
188
- #define HEAP_CLASS_OF(obj) RBASIC(obj)->klass
189
-
190
- #define CALL_SIMPLE_METHOD(num, id, recv) do { \
191
- VALUE klass = CLASS_OF(recv); \
192
- CALL_METHOD(num, 0, 0, id, rb_method_node(klass, id), recv); \
193
- } while (0)
194
-
195
- #endif /* RUBY_INSNHELPER_H */
@@ -1,51 +0,0 @@
1
- /*-*-c-*-*/
2
- /**********************************************************************
3
-
4
- vm_opts.h - VM optimize option
5
-
6
- $Author: ko1 $
7
-
8
- Copyright (C) 2004-2007 Koichi Sasada
9
-
10
- **********************************************************************/
11
-
12
-
13
- #ifndef RUBY_VM_OPTS_H
14
- #define RUBY_VM_OPTS_H
15
-
16
- /* Compile options.
17
- * You can change these options at runtime by VM::CompileOption.
18
- * Following definitions are default values.
19
- */
20
-
21
- #define OPT_TRACE_INSTRUCTION 1
22
- #define OPT_TAILCALL_OPTIMIZATION 0
23
- #define OPT_PEEPHOLE_OPTIMIZATION 1
24
- #define OPT_SPECIALISED_INSTRUCTION 1
25
- #define OPT_INLINE_CONST_CACHE 1
26
-
27
-
28
- /* Build Options.
29
- * You can't change these options at runtime.
30
- */
31
-
32
- /* C compiler depend */
33
- #define OPT_DIRECT_THREADED_CODE 1
34
- #define OPT_TOKEN_THREADED_CODE 0
35
- #define OPT_CALL_THREADED_CODE 0
36
-
37
- /* VM running option */
38
- #define OPT_CHECKED_RUN 1
39
- #define OPT_INLINE_METHOD_CACHE 1
40
- #define OPT_BLOCKINLINING 0
41
-
42
- /* architecture independent, affects generated code */
43
- #define OPT_OPERANDS_UNIFICATION 0
44
- #define OPT_INSTRUCTIONS_UNIFICATION 0
45
- #define OPT_UNIFY_ALL_COMBINATION 0
46
- #define OPT_STACK_CACHING 0
47
-
48
- /* misc */
49
- #define SUPPORT_JOKE 0
50
-
51
- #endif /* RUBY_VM_OPTS_H */
data/ext/rubypp.rb DELETED
@@ -1,97 +0,0 @@
1
- class Preprocessor
2
- def initialize(input, output, filename)
3
- @input = input
4
- @output = output
5
- @filename = filename
6
- @linenum = 1
7
- end
8
-
9
- def getline
10
- line = @input.gets
11
- @linenum += 1 if not line.nil?
12
- return line
13
- end
14
-
15
- def preprocess
16
- success = false
17
- begin
18
- loop do
19
- line = getline
20
- break if line.nil?
21
- case line
22
- when /(.*[^\\]|^)\#\{(.*?)\}(.*)/
23
- puts "#{$1}#{evaluate($2, @linenum)}#{$3}"
24
- when /^\#ruby\s+<<(.*)/
25
- marker = $1
26
- str = ''
27
- evalstart = @linenum
28
- loop do
29
- line = getline
30
- if line.nil? then
31
- raise "End of input without #{marker}"
32
- end
33
- break if line.chomp == marker
34
- str << line
35
- end
36
- result = evaluate(str, evalstart)
37
- puts result if not result.nil?
38
- when /^\#ruby\s+(.*)/
39
- str = line = $1
40
- while line[-1] == ?\\
41
- str.chop!
42
- line = getline
43
- break if line.nil?
44
- line.chomp!
45
- str << line
46
- end
47
- result = evaluate(str, @linenum)
48
- puts result if not result.nil?
49
- else
50
- puts line
51
- end
52
- end
53
- success = true
54
- ensure
55
- if not success then
56
- $stderr.puts "Error on line #{@linenum}:"
57
- end
58
- end
59
- end
60
-
61
- def evaluate(str, linenum)
62
- result = eval(str, TOPLEVEL_BINDING, @filename, linenum)
63
- success = true
64
- return result
65
- end
66
-
67
- def puts(line)
68
- @output.puts(line)
69
- end
70
- end
71
-
72
- def puts(line)
73
- $preprocessor.puts(line)
74
- end
75
-
76
- def rubypp(input_file, output_file)
77
- input = input_file ? File.open(input_file) : $stdin
78
- output = output_file ? File.open(output_file, 'w') : $stdout
79
-
80
- success = false
81
- begin
82
- $preprocessor = Preprocessor.new(input, output, input_file || "(stdin)")
83
- $preprocessor.preprocess()
84
- success = true
85
- ensure
86
- if not success then
87
- File.unlink(output_file) rescue Errno::ENOENT
88
- end
89
- end
90
- end
91
-
92
- if __FILE__ == $0 then
93
- input_file = ARGV[0]
94
- output_file = ARGV[1]
95
- rubypp(input_file, output_file)
96
- end
97
-