debugger-ruby_core_source 1.1.1 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. data/CHANGELOG.md +3 -0
  2. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/addr2line.h +21 -0
  3. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/atomic.h +56 -0
  4. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/constant.h +34 -0
  5. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/debug.h +41 -0
  6. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/dln.h +50 -0
  7. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/encdb.h +167 -0
  8. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/eval_intern.h +234 -0
  9. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/gc.h +98 -0
  10. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/id.h +175 -0
  11. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/insns.inc +179 -0
  12. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/insns_info.inc +695 -0
  13. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/internal.h +232 -0
  14. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/iseq.h +125 -0
  15. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/known_errors.inc +731 -0
  16. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/method.h +105 -0
  17. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/node.h +503 -0
  18. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/node_name.inc +208 -0
  19. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/opt_sc.inc +670 -0
  20. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/optinsn.inc +30 -0
  21. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/optunifs.inc +116 -0
  22. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/parse.h +186 -0
  23. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/regenc.h +219 -0
  24. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/regint.h +850 -0
  25. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/regparse.h +362 -0
  26. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/revision.h +1 -0
  27. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/thread_pthread.h +51 -0
  28. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/thread_win32.h +40 -0
  29. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/timev.h +21 -0
  30. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/transcode_data.h +117 -0
  31. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/transdb.h +189 -0
  32. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/version.h +52 -0
  33. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/vm.inc +3051 -0
  34. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/vm_core.h +756 -0
  35. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/vm_exec.h +184 -0
  36. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/vm_insnhelper.h +220 -0
  37. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/vm_opts.h +51 -0
  38. data/lib/debugger/ruby_core_source/ruby-1.9.3-p194/vmtc.inc +97 -0
  39. data/lib/debugger/ruby_core_source/version.rb +1 -1
  40. metadata +54 -7
@@ -0,0 +1,21 @@
1
+ #ifndef RUBY_TIMEV_H
2
+ #define RUBY_TIMEV_H
3
+
4
+ struct vtm {
5
+ VALUE year; /* 2000 for example. Integer. */
6
+ int mon; /* 1..12 */
7
+ int mday; /* 1..31 */
8
+ int hour; /* 0..23 */
9
+ int min; /* 0..59 */
10
+ int sec; /* 0..60 */
11
+ VALUE subsecx; /* 0 <= subsecx < TIME_SCALE. possibly Rational. */
12
+ VALUE utc_offset; /* -3600 as -01:00 for example. possibly Rational. */
13
+ int wday; /* 0:Sunday, 1:Monday, ..., 6:Saturday */
14
+ int yday; /* 1..366 */
15
+ int isdst; /* 0:StandardTime 1:DayLightSavingTime */
16
+ const char *zone; /* "JST", "EST", "EDT", etc. */
17
+ };
18
+
19
+ #define TIME_SCALE 1000000000
20
+
21
+ #endif
@@ -0,0 +1,117 @@
1
+ /**********************************************************************
2
+
3
+ transcode_data.h -
4
+
5
+ $Author: nobu $
6
+ created at: Mon 10 Dec 2007 14:01:47 JST 2007
7
+
8
+ Copyright (C) 2007 Martin Duerst
9
+
10
+ **********************************************************************/
11
+
12
+ #include "ruby/ruby.h"
13
+
14
+ #ifndef RUBY_TRANSCODE_DATA_H
15
+ #define RUBY_TRANSCODE_DATA_H 1
16
+
17
+ #if defined __GNUC__ && __GNUC__ >= 4
18
+ #pragma GCC visibility push(default)
19
+ #endif
20
+
21
+ #define WORDINDEX_SHIFT_BITS 2
22
+ #define WORDINDEX2INFO(widx) ((widx) << WORDINDEX_SHIFT_BITS)
23
+ #define INFO2WORDINDEX(info) ((info) >> WORDINDEX_SHIFT_BITS)
24
+ #define BYTE_LOOKUP_BASE(bl) ((bl)[0])
25
+ #define BYTE_LOOKUP_INFO(bl) ((bl)[1])
26
+
27
+ #define PType (unsigned int)
28
+
29
+ #define NOMAP (PType 0x01) /* direct map */
30
+ #define ONEbt (0x02) /* one byte payload */
31
+ #define TWObt (0x03) /* two bytes payload */
32
+ #define THREEbt (0x05) /* three bytes payload */
33
+ #define FOURbt (0x06) /* four bytes payload, UTF-8 only, macros start at getBT0 */
34
+ #define INVALID (PType 0x07) /* invalid byte sequence */
35
+ #define UNDEF (PType 0x09) /* legal but undefined */
36
+ #define ZERObt (PType 0x0A) /* zero bytes of payload, i.e. remove */
37
+ #define FUNii (PType 0x0B) /* function from info to info */
38
+ #define FUNsi (PType 0x0D) /* function from start to info */
39
+ #define FUNio (PType 0x0E) /* function from info to output */
40
+ #define FUNso (PType 0x0F) /* function from start to output */
41
+ #define STR1 (PType 0x11) /* string 4 <= len <= 259 bytes: 1byte length + content */
42
+ #define GB4bt (PType 0x12) /* GB18030 four bytes payload */
43
+ #define FUNsio (PType 0x13) /* function from start and info to output */
44
+
45
+ #define STR1_LENGTH(byte_addr) (unsigned int)(*(byte_addr) + 4)
46
+ #define STR1_BYTEINDEX(w) ((w) >> 6)
47
+ #define makeSTR1(bi) (((bi) << 6) | STR1)
48
+ #define makeSTR1LEN(len) ((len)-4)
49
+
50
+ #define o1(b1) (PType((((unsigned char)(b1))<<8)|ONEbt))
51
+ #define o2(b1,b2) (PType((((unsigned char)(b1))<<8)|(((unsigned char)(b2))<<16)|TWObt))
52
+ #define o3(b1,b2,b3) (PType(((((unsigned char)(b1))<<8)|(((unsigned char)(b2))<<16)|(((unsigned int)(unsigned char)(b3))<<24)|THREEbt)&0xffffffffU))
53
+ #define o4(b0,b1,b2,b3) (PType(((((unsigned char)(b1))<<8)|(((unsigned char)(b2))<<16)|(((unsigned char)(b3))<<24)|((((unsigned char)(b0))&0x07)<<5)|FOURbt)&0xffffffffU))
54
+ #define g4(b0,b1,b2,b3) (PType(((((unsigned char)(b0))<<8)|(((unsigned char)(b2))<<16)|((((unsigned char)(b1))&0x0f)<<24)|((((unsigned int)(unsigned char)(b3))&0x0f)<<28)|GB4bt)&0xffffffffU))
55
+ #define funsio(diff) (PType((((unsigned int)(diff))<<8)|FUNsio))
56
+
57
+ #define getBT1(a) ((unsigned char)((a)>> 8))
58
+ #define getBT2(a) ((unsigned char)((a)>>16))
59
+ #define getBT3(a) ((unsigned char)((a)>>24))
60
+ #define getBT0(a) (((unsigned char)((a)>> 5)&0x07)|0xF0) /* for UTF-8 only!!! */
61
+
62
+ #define getGB4bt0(a) ((unsigned char)((a)>> 8))
63
+ #define getGB4bt1(a) (((unsigned char)((a)>>24)&0x0F)|0x30)
64
+ #define getGB4bt2(a) ((unsigned char)((a)>>16))
65
+ #define getGB4bt3(a) (((unsigned char)((a)>>28)&0x0F)|0x30)
66
+
67
+ #define o2FUNii(b1,b2) (PType((((unsigned char)(b1))<<8)|(((unsigned char)(b2))<<16)|FUNii))
68
+
69
+ /* do we need these??? maybe not, can be done with simple tables */
70
+ #define ONETRAIL /* legal but undefined if one more trailing UTF-8 */
71
+ #define TWOTRAIL /* legal but undefined if two more trailing UTF-8 */
72
+ #define THREETRAIL /* legal but undefined if three more trailing UTF-8 */
73
+
74
+ typedef enum {
75
+ asciicompat_converter, /* ASCII-compatible -> ASCII-compatible */
76
+ asciicompat_decoder, /* ASCII-incompatible -> ASCII-compatible */
77
+ asciicompat_encoder /* ASCII-compatible -> ASCII-incompatible */
78
+ /* ASCII-incompatible -> ASCII-incompatible is intentionally omitted. */
79
+ } rb_transcoder_asciicompat_type_t;
80
+
81
+ typedef struct rb_transcoder rb_transcoder;
82
+
83
+ /* static structure, one per supported encoding pair */
84
+ struct rb_transcoder {
85
+ const char *src_encoding;
86
+ const char *dst_encoding;
87
+ unsigned int conv_tree_start;
88
+ const unsigned char *byte_array;
89
+ unsigned int byte_array_length;
90
+ const unsigned int *word_array;
91
+ unsigned int word_array_length;
92
+ int word_size;
93
+ int input_unit_length;
94
+ int max_input;
95
+ int max_output;
96
+ rb_transcoder_asciicompat_type_t asciicompat_type;
97
+ size_t state_size;
98
+ int (*state_init_func)(void*); /* ret==0:success ret!=0:failure(errno) */
99
+ int (*state_fini_func)(void*); /* ret==0:success ret!=0:failure(errno) */
100
+ VALUE (*func_ii)(void*, VALUE); /* info -> info */
101
+ VALUE (*func_si)(void*, const unsigned char*, size_t); /* start -> info */
102
+ ssize_t (*func_io)(void*, VALUE, const unsigned char*, size_t); /* info -> output */
103
+ ssize_t (*func_so)(void*, const unsigned char*, size_t, unsigned char*, size_t); /* start -> output */
104
+ ssize_t (*finish_func)(void*, unsigned char*, size_t); /* -> output */
105
+ ssize_t (*resetsize_func)(void*); /* -> len */
106
+ ssize_t (*resetstate_func)(void*, unsigned char*, size_t); /* -> output */
107
+ ssize_t (*func_sio)(void*, const unsigned char*, size_t, VALUE, unsigned char*, size_t); /* start -> output */
108
+ };
109
+
110
+ void rb_declare_transcoder(const char *enc1, const char *enc2, const char *lib);
111
+ void rb_register_transcoder(const rb_transcoder *);
112
+
113
+ #if defined __GNUC__ && __GNUC__ >= 4
114
+ #pragma GCC visibility pop
115
+ #endif
116
+
117
+ #endif /* RUBY_TRANSCODE_DATA_H */
@@ -0,0 +1,189 @@
1
+ rb_declare_transcoder("Big5", "UTF-8", "big5");
2
+ rb_declare_transcoder("UTF-8", "Big5", "big5");
3
+ rb_declare_transcoder("CP950", "UTF-8", "big5");
4
+ rb_declare_transcoder("UTF-8", "CP950", "big5");
5
+ rb_declare_transcoder("Big5-HKSCS", "UTF-8", "big5");
6
+ rb_declare_transcoder("UTF-8", "Big5-HKSCS", "big5");
7
+ rb_declare_transcoder("CP951", "UTF-8", "big5");
8
+ rb_declare_transcoder("UTF-8", "CP951", "big5");
9
+ rb_declare_transcoder("Big5-UAO", "UTF-8", "big5");
10
+ rb_declare_transcoder("UTF-8", "Big5-UAO", "big5");
11
+ rb_declare_transcoder("GB2312", "UTF-8", "chinese");
12
+ rb_declare_transcoder("GB12345", "UTF-8", "chinese");
13
+ rb_declare_transcoder("UTF-8", "GB2312", "chinese");
14
+ rb_declare_transcoder("UTF-8", "GB12345", "chinese");
15
+ rb_declare_transcoder("UTF8-DoCoMo", "UTF8-KDDI", "emoji");
16
+ rb_declare_transcoder("UTF8-DoCoMo", "UTF8-SoftBank", "emoji");
17
+ rb_declare_transcoder("UTF8-DoCoMo", "UTF-8", "emoji");
18
+ rb_declare_transcoder("UTF8-KDDI", "UTF8-DoCoMo", "emoji");
19
+ rb_declare_transcoder("UTF8-KDDI", "UTF8-SoftBank", "emoji");
20
+ rb_declare_transcoder("UTF8-KDDI", "UTF-8", "emoji");
21
+ rb_declare_transcoder("UTF8-SoftBank", "UTF8-DoCoMo", "emoji");
22
+ rb_declare_transcoder("UTF8-SoftBank", "UTF8-KDDI", "emoji");
23
+ rb_declare_transcoder("UTF8-SoftBank", "UTF-8", "emoji");
24
+ rb_declare_transcoder("UTF-8", "UTF8-DoCoMo", "emoji");
25
+ rb_declare_transcoder("UTF-8", "UTF8-KDDI", "emoji");
26
+ rb_declare_transcoder("UTF-8", "UTF8-SoftBank", "emoji");
27
+ rb_declare_transcoder("stateless-ISO-2022-JP-KDDI", "UTF8-KDDI", "emoji_iso2022_kddi");
28
+ rb_declare_transcoder("UTF8-KDDI", "stateless-ISO-2022-JP-KDDI", "emoji_iso2022_kddi");
29
+ rb_declare_transcoder("ISO-2022-JP-KDDI", "stateless-ISO-2022-JP-KDDI", "emoji_iso2022_kddi");
30
+ rb_declare_transcoder("stateless-ISO-2022-JP-KDDI", "ISO-2022-JP-KDDI", "emoji_iso2022_kddi");
31
+ rb_declare_transcoder("SJIS-DOCOMO", "UTF8-DOCOMO", "emoji_sjis_docomo");
32
+ rb_declare_transcoder("UTF8-DOCOMO", "SJIS-DOCOMO", "emoji_sjis_docomo");
33
+ rb_declare_transcoder("SJIS-KDDI", "UTF8-KDDI", "emoji_sjis_kddi");
34
+ rb_declare_transcoder("UTF8-KDDI", "SJIS-KDDI", "emoji_sjis_kddi");
35
+ rb_declare_transcoder("SJIS-SoftBank", "UTF8-SoftBank", "emoji_sjis_softbank");
36
+ rb_declare_transcoder("UTF8-SoftBank", "SJIS-SoftBank", "emoji_sjis_softbank");
37
+ rb_declare_transcoder("", "amp_escape", "escape");
38
+ rb_declare_transcoder("", "xml_text_escape", "escape");
39
+ rb_declare_transcoder("", "xml_attr_content_escape", "escape");
40
+ rb_declare_transcoder("", "xml_attr_quote", "escape");
41
+ rb_declare_transcoder("GB18030", "UTF-8", "gb18030");
42
+ rb_declare_transcoder("UTF-8", "GB18030", "gb18030");
43
+ rb_declare_transcoder("GBK", "UTF-8", "gbk");
44
+ rb_declare_transcoder("UTF-8", "GBK", "gbk");
45
+ rb_declare_transcoder("ISO-2022-JP", "stateless-ISO-2022-JP", "iso2022");
46
+ rb_declare_transcoder("stateless-ISO-2022-JP", "ISO-2022-JP", "iso2022");
47
+ rb_declare_transcoder("stateless-ISO-2022-JP", "EUC-JP", "iso2022");
48
+ rb_declare_transcoder("EUC-JP", "stateless-ISO-2022-JP", "iso2022");
49
+ rb_declare_transcoder("CP50220", "cp51932", "iso2022");
50
+ rb_declare_transcoder("CP50221", "cp51932", "iso2022");
51
+ rb_declare_transcoder("CP51932", "CP50221", "iso2022");
52
+ rb_declare_transcoder("CP51932", "CP50220", "iso2022");
53
+ rb_declare_transcoder("EUC-JP", "Shift_JIS", "japanese");
54
+ rb_declare_transcoder("Shift_JIS", "EUC-JP", "japanese");
55
+ rb_declare_transcoder("EUC-JP", "UTF-8", "japanese_euc");
56
+ rb_declare_transcoder("eucJP-ms", "UTF-8", "japanese_euc");
57
+ rb_declare_transcoder("CP51932", "UTF-8", "japanese_euc");
58
+ rb_declare_transcoder("UTF-8", "EUC-JP", "japanese_euc");
59
+ rb_declare_transcoder("UTF-8", "eucJP-ms", "japanese_euc");
60
+ rb_declare_transcoder("UTF-8", "CP51932", "japanese_euc");
61
+ rb_declare_transcoder("Shift_JIS", "UTF-8", "japanese_sjis");
62
+ rb_declare_transcoder("Windows-31J", "UTF-8", "japanese_sjis");
63
+ rb_declare_transcoder("UTF-8", "Shift_JIS", "japanese_sjis");
64
+ rb_declare_transcoder("UTF-8", "Windows-31J", "japanese_sjis");
65
+ rb_declare_transcoder("UTF-8", "EUC-KR", "korean");
66
+ rb_declare_transcoder("EUC-KR", "UTF-8", "korean");
67
+ rb_declare_transcoder("UTF-8", "CP949", "korean");
68
+ rb_declare_transcoder("CP949", "UTF-8", "korean");
69
+ rb_declare_transcoder("", "universal_newline", "newline");
70
+ rb_declare_transcoder("", "crlf_newline", "newline");
71
+ rb_declare_transcoder("", "cr_newline", "newline");
72
+ rb_declare_transcoder("US-ASCII", "UTF-8", "single_byte");
73
+ rb_declare_transcoder("UTF-8", "US-ASCII", "single_byte");
74
+ rb_declare_transcoder("ASCII-8BIT", "UTF-8", "single_byte");
75
+ rb_declare_transcoder("UTF-8", "ASCII-8BIT", "single_byte");
76
+ rb_declare_transcoder("ISO-8859-1", "UTF-8", "single_byte");
77
+ rb_declare_transcoder("UTF-8", "ISO-8859-1", "single_byte");
78
+ rb_declare_transcoder("ISO-8859-2", "UTF-8", "single_byte");
79
+ rb_declare_transcoder("UTF-8", "ISO-8859-2", "single_byte");
80
+ rb_declare_transcoder("ISO-8859-3", "UTF-8", "single_byte");
81
+ rb_declare_transcoder("UTF-8", "ISO-8859-3", "single_byte");
82
+ rb_declare_transcoder("ISO-8859-4", "UTF-8", "single_byte");
83
+ rb_declare_transcoder("UTF-8", "ISO-8859-4", "single_byte");
84
+ rb_declare_transcoder("ISO-8859-5", "UTF-8", "single_byte");
85
+ rb_declare_transcoder("UTF-8", "ISO-8859-5", "single_byte");
86
+ rb_declare_transcoder("ISO-8859-6", "UTF-8", "single_byte");
87
+ rb_declare_transcoder("UTF-8", "ISO-8859-6", "single_byte");
88
+ rb_declare_transcoder("ISO-8859-7", "UTF-8", "single_byte");
89
+ rb_declare_transcoder("UTF-8", "ISO-8859-7", "single_byte");
90
+ rb_declare_transcoder("ISO-8859-8", "UTF-8", "single_byte");
91
+ rb_declare_transcoder("UTF-8", "ISO-8859-8", "single_byte");
92
+ rb_declare_transcoder("ISO-8859-9", "UTF-8", "single_byte");
93
+ rb_declare_transcoder("UTF-8", "ISO-8859-9", "single_byte");
94
+ rb_declare_transcoder("ISO-8859-10", "UTF-8", "single_byte");
95
+ rb_declare_transcoder("UTF-8", "ISO-8859-10", "single_byte");
96
+ rb_declare_transcoder("ISO-8859-11", "UTF-8", "single_byte");
97
+ rb_declare_transcoder("UTF-8", "ISO-8859-11", "single_byte");
98
+ rb_declare_transcoder("ISO-8859-13", "UTF-8", "single_byte");
99
+ rb_declare_transcoder("UTF-8", "ISO-8859-13", "single_byte");
100
+ rb_declare_transcoder("ISO-8859-14", "UTF-8", "single_byte");
101
+ rb_declare_transcoder("UTF-8", "ISO-8859-14", "single_byte");
102
+ rb_declare_transcoder("ISO-8859-15", "UTF-8", "single_byte");
103
+ rb_declare_transcoder("UTF-8", "ISO-8859-15", "single_byte");
104
+ rb_declare_transcoder("WINDOWS-874", "UTF-8", "single_byte");
105
+ rb_declare_transcoder("UTF-8", "WINDOWS-874", "single_byte");
106
+ rb_declare_transcoder("WINDOWS-1250", "UTF-8", "single_byte");
107
+ rb_declare_transcoder("UTF-8", "WINDOWS-1250", "single_byte");
108
+ rb_declare_transcoder("WINDOWS-1251", "UTF-8", "single_byte");
109
+ rb_declare_transcoder("UTF-8", "WINDOWS-1251", "single_byte");
110
+ rb_declare_transcoder("WINDOWS-1252", "UTF-8", "single_byte");
111
+ rb_declare_transcoder("UTF-8", "WINDOWS-1252", "single_byte");
112
+ rb_declare_transcoder("WINDOWS-1253", "UTF-8", "single_byte");
113
+ rb_declare_transcoder("UTF-8", "WINDOWS-1253", "single_byte");
114
+ rb_declare_transcoder("WINDOWS-1254", "UTF-8", "single_byte");
115
+ rb_declare_transcoder("UTF-8", "WINDOWS-1254", "single_byte");
116
+ rb_declare_transcoder("WINDOWS-1255", "UTF-8", "single_byte");
117
+ rb_declare_transcoder("UTF-8", "WINDOWS-1255", "single_byte");
118
+ rb_declare_transcoder("WINDOWS-1256", "UTF-8", "single_byte");
119
+ rb_declare_transcoder("UTF-8", "WINDOWS-1256", "single_byte");
120
+ rb_declare_transcoder("WINDOWS-1257", "UTF-8", "single_byte");
121
+ rb_declare_transcoder("UTF-8", "WINDOWS-1257", "single_byte");
122
+ rb_declare_transcoder("IBM437", "UTF-8", "single_byte");
123
+ rb_declare_transcoder("UTF-8", "IBM437", "single_byte");
124
+ rb_declare_transcoder("IBM775", "UTF-8", "single_byte");
125
+ rb_declare_transcoder("UTF-8", "IBM775", "single_byte");
126
+ rb_declare_transcoder("IBM737", "UTF-8", "single_byte");
127
+ rb_declare_transcoder("UTF-8", "IBM737", "single_byte");
128
+ rb_declare_transcoder("IBM852", "UTF-8", "single_byte");
129
+ rb_declare_transcoder("UTF-8", "IBM852", "single_byte");
130
+ rb_declare_transcoder("IBM855", "UTF-8", "single_byte");
131
+ rb_declare_transcoder("UTF-8", "IBM855", "single_byte");
132
+ rb_declare_transcoder("IBM857", "UTF-8", "single_byte");
133
+ rb_declare_transcoder("UTF-8", "IBM857", "single_byte");
134
+ rb_declare_transcoder("IBM860", "UTF-8", "single_byte");
135
+ rb_declare_transcoder("UTF-8", "IBM860", "single_byte");
136
+ rb_declare_transcoder("IBM861", "UTF-8", "single_byte");
137
+ rb_declare_transcoder("UTF-8", "IBM861", "single_byte");
138
+ rb_declare_transcoder("IBM862", "UTF-8", "single_byte");
139
+ rb_declare_transcoder("UTF-8", "IBM862", "single_byte");
140
+ rb_declare_transcoder("IBM863", "UTF-8", "single_byte");
141
+ rb_declare_transcoder("UTF-8", "IBM863", "single_byte");
142
+ rb_declare_transcoder("IBM865", "UTF-8", "single_byte");
143
+ rb_declare_transcoder("UTF-8", "IBM865", "single_byte");
144
+ rb_declare_transcoder("IBM866", "UTF-8", "single_byte");
145
+ rb_declare_transcoder("UTF-8", "IBM866", "single_byte");
146
+ rb_declare_transcoder("IBM869", "UTF-8", "single_byte");
147
+ rb_declare_transcoder("UTF-8", "IBM869", "single_byte");
148
+ rb_declare_transcoder("MACCROATIAN", "UTF-8", "single_byte");
149
+ rb_declare_transcoder("UTF-8", "MACCROATIAN", "single_byte");
150
+ rb_declare_transcoder("MACCYRILLIC", "UTF-8", "single_byte");
151
+ rb_declare_transcoder("UTF-8", "MACCYRILLIC", "single_byte");
152
+ rb_declare_transcoder("MACGREEK", "UTF-8", "single_byte");
153
+ rb_declare_transcoder("UTF-8", "MACGREEK", "single_byte");
154
+ rb_declare_transcoder("MACICELAND", "UTF-8", "single_byte");
155
+ rb_declare_transcoder("UTF-8", "MACICELAND", "single_byte");
156
+ rb_declare_transcoder("MACROMAN", "UTF-8", "single_byte");
157
+ rb_declare_transcoder("UTF-8", "MACROMAN", "single_byte");
158
+ rb_declare_transcoder("MACROMANIA", "UTF-8", "single_byte");
159
+ rb_declare_transcoder("UTF-8", "MACROMANIA", "single_byte");
160
+ rb_declare_transcoder("MACTURKISH", "UTF-8", "single_byte");
161
+ rb_declare_transcoder("UTF-8", "MACTURKISH", "single_byte");
162
+ rb_declare_transcoder("MACUKRAINE", "UTF-8", "single_byte");
163
+ rb_declare_transcoder("UTF-8", "MACUKRAINE", "single_byte");
164
+ rb_declare_transcoder("KOI8-U", "UTF-8", "single_byte");
165
+ rb_declare_transcoder("UTF-8", "KOI8-U", "single_byte");
166
+ rb_declare_transcoder("KOI8-R", "UTF-8", "single_byte");
167
+ rb_declare_transcoder("UTF-8", "KOI8-R", "single_byte");
168
+ rb_declare_transcoder("TIS-620", "UTF-8", "single_byte");
169
+ rb_declare_transcoder("UTF-8", "TIS-620", "single_byte");
170
+ rb_declare_transcoder("CP850", "UTF-8", "single_byte");
171
+ rb_declare_transcoder("UTF-8", "CP850", "single_byte");
172
+ rb_declare_transcoder("CP852", "UTF-8", "single_byte");
173
+ rb_declare_transcoder("UTF-8", "CP852", "single_byte");
174
+ rb_declare_transcoder("CP855", "UTF-8", "single_byte");
175
+ rb_declare_transcoder("UTF-8", "CP855", "single_byte");
176
+ rb_declare_transcoder("UTF-8", "UTF8-MAC", "utf8_mac");
177
+ rb_declare_transcoder("UTF8-MAC", "UTF-8", "utf8_mac");
178
+ rb_declare_transcoder("UTF-16BE", "UTF-8", "utf_16_32");
179
+ rb_declare_transcoder("UTF-8", "UTF-16BE", "utf_16_32");
180
+ rb_declare_transcoder("UTF-16LE", "UTF-8", "utf_16_32");
181
+ rb_declare_transcoder("UTF-8", "UTF-16LE", "utf_16_32");
182
+ rb_declare_transcoder("UTF-32BE", "UTF-8", "utf_16_32");
183
+ rb_declare_transcoder("UTF-8", "UTF-32BE", "utf_16_32");
184
+ rb_declare_transcoder("UTF-32LE", "UTF-8", "utf_16_32");
185
+ rb_declare_transcoder("UTF-8", "UTF-32LE", "utf_16_32");
186
+ rb_declare_transcoder("UTF-16", "UTF-8", "utf_16_32");
187
+ rb_declare_transcoder("UTF-32", "UTF-8", "utf_16_32");
188
+ rb_declare_transcoder("UTF-8", "UTF-16", "utf_16_32");
189
+ rb_declare_transcoder("UTF-8", "UTF-32", "utf_16_32");
@@ -0,0 +1,52 @@
1
+ #define RUBY_VERSION "1.9.3"
2
+ #define RUBY_PATCHLEVEL 194
3
+
4
+ #define RUBY_RELEASE_DATE "2012-04-20"
5
+ #define RUBY_RELEASE_YEAR 2012
6
+ #define RUBY_RELEASE_MONTH 4
7
+ #define RUBY_RELEASE_DAY 20
8
+
9
+ #include "ruby/version.h"
10
+
11
+ #if !defined RUBY_LIB_VERSION && defined RUBY_LIB_VERSION_STYLE
12
+ # if RUBY_LIB_VERSION_STYLE == 3
13
+ # define RUBY_LIB_VERSION STRINGIZE(RUBY_API_VERSION_MAJOR)"."STRINGIZE(RUBY_API_VERSION_MINOR)"."STRINGIZE(RUBY_API_VERSION_TEENY)
14
+ # elif RUBY_LIB_VERSION_STYLE == 2
15
+ # define RUBY_LIB_VERSION STRINGIZE(RUBY_API_VERSION_MAJOR)"."STRINGIZE(RUBY_API_VERSION_MINOR)
16
+ # endif
17
+ #endif
18
+
19
+ #if RUBY_PATCHLEVEL == -1
20
+ #define RUBY_PATCHLEVEL_STR "dev"
21
+ #else
22
+ #define RUBY_PATCHLEVEL_STR "p"STRINGIZE(RUBY_PATCHLEVEL)
23
+ #endif
24
+
25
+ #ifndef RUBY_REVISION
26
+ # include "revision.h"
27
+ #endif
28
+ # ifndef RUBY_REVISION
29
+ # define RUBY_REVISION 0
30
+ #endif
31
+
32
+ #if RUBY_REVISION
33
+ # ifdef RUBY_BRANCH_NAME
34
+ # define RUBY_REVISION_STR " "RUBY_BRANCH_NAME" "STRINGIZE(RUBY_REVISION)
35
+ # else
36
+ # define RUBY_REVISION_STR " revision "STRINGIZE(RUBY_REVISION)
37
+ # endif
38
+ #else
39
+ # define RUBY_REVISION_STR ""
40
+ #endif
41
+
42
+ # define RUBY_DESCRIPTION \
43
+ "ruby "RUBY_VERSION \
44
+ RUBY_PATCHLEVEL_STR \
45
+ " ("RUBY_RELEASE_DATE \
46
+ RUBY_REVISION_STR") " \
47
+ "["RUBY_PLATFORM"]"
48
+ # define RUBY_COPYRIGHT \
49
+ "ruby - Copyright (C) " \
50
+ STRINGIZE(RUBY_BIRTH_YEAR)"-" \
51
+ STRINGIZE(RUBY_RELEASE_YEAR)" " \
52
+ RUBY_AUTHOR
@@ -0,0 +1,3051 @@
1
+ /* -*-c-*- *********************************************************/
2
+ /*******************************************************************/
3
+ /*******************************************************************/
4
+ /**
5
+ This file is VM main loop.
6
+
7
+ ----
8
+ This file is auto generated by insns2vm.rb
9
+ DO NOT TOUCH!
10
+
11
+ If you want to fix something, you must edit 'insns.c'
12
+ */
13
+
14
+
15
+ INSN_ENTRY(nop){
16
+ {
17
+
18
+
19
+ DEBUG_ENTER_INSN("nop");
20
+ ADD_PC(1+0);
21
+ PREFETCH(GET_PC());
22
+ #define CURRENT_INSN_nop 1
23
+ #define INSN_IS_SC() 0
24
+ #define INSN_LABEL(lab) LABEL_nop_##lab
25
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
26
+ USAGE_ANALYSIS_INSN(BIN(nop));
27
+ {
28
+ #line 40 "insns.def"
29
+ /* none */
30
+
31
+ #line 32 "vm.inc"
32
+ #undef CURRENT_INSN_nop
33
+ #undef INSN_IS_SC
34
+ #undef INSN_LABEL
35
+ #undef LABEL_IS_SC
36
+ END_INSN(nop);}}}
37
+ INSN_ENTRY(getlocal){
38
+ {
39
+ VALUE val;
40
+ lindex_t idx = (lindex_t)GET_OPERAND(1);
41
+
42
+ DEBUG_ENTER_INSN("getlocal");
43
+ ADD_PC(1+1);
44
+ PREFETCH(GET_PC());
45
+ #define CURRENT_INSN_getlocal 1
46
+ #define INSN_IS_SC() 0
47
+ #define INSN_LABEL(lab) LABEL_getlocal_##lab
48
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
49
+ USAGE_ANALYSIS_INSN(BIN(getlocal));
50
+ USAGE_ANALYSIS_OPERAND(BIN(getlocal), 0, idx);
51
+ {
52
+ #line 58 "insns.def"
53
+ val = *(GET_LFP() - idx);
54
+
55
+ #line 56 "vm.inc"
56
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
57
+ PUSH(val);
58
+ #undef CURRENT_INSN_getlocal
59
+ #undef INSN_IS_SC
60
+ #undef INSN_LABEL
61
+ #undef LABEL_IS_SC
62
+ END_INSN(getlocal);}}}
63
+ INSN_ENTRY(setlocal){
64
+ {
65
+ lindex_t idx = (lindex_t)GET_OPERAND(1);
66
+ VALUE val = TOPN(0);
67
+ DEBUG_ENTER_INSN("setlocal");
68
+ ADD_PC(1+1);
69
+ PREFETCH(GET_PC());
70
+ POPN(1);
71
+ #define CURRENT_INSN_setlocal 1
72
+ #define INSN_IS_SC() 0
73
+ #define INSN_LABEL(lab) LABEL_setlocal_##lab
74
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
75
+ USAGE_ANALYSIS_INSN(BIN(setlocal));
76
+ USAGE_ANALYSIS_OPERAND(BIN(setlocal), 0, idx);
77
+ {
78
+ #line 72 "insns.def"
79
+ (*(GET_LFP() - idx)) = val;
80
+
81
+ #line 82 "vm.inc"
82
+ #undef CURRENT_INSN_setlocal
83
+ #undef INSN_IS_SC
84
+ #undef INSN_LABEL
85
+ #undef LABEL_IS_SC
86
+ END_INSN(setlocal);}}}
87
+ INSN_ENTRY(getspecial){
88
+ {
89
+ VALUE val;
90
+ rb_num_t type = (rb_num_t)GET_OPERAND(2);
91
+ VALUE key = (VALUE)GET_OPERAND(1);
92
+
93
+ DEBUG_ENTER_INSN("getspecial");
94
+ ADD_PC(1+2);
95
+ PREFETCH(GET_PC());
96
+ #define CURRENT_INSN_getspecial 1
97
+ #define INSN_IS_SC() 0
98
+ #define INSN_LABEL(lab) LABEL_getspecial_##lab
99
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
100
+ USAGE_ANALYSIS_INSN(BIN(getspecial));
101
+ USAGE_ANALYSIS_OPERAND(BIN(getspecial), 0, key);
102
+ USAGE_ANALYSIS_OPERAND(BIN(getspecial), 1, type);
103
+ {
104
+ #line 86 "insns.def"
105
+ val = vm_getspecial(th, GET_LFP(), key, type);
106
+
107
+ #line 108 "vm.inc"
108
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
109
+ PUSH(val);
110
+ #undef CURRENT_INSN_getspecial
111
+ #undef INSN_IS_SC
112
+ #undef INSN_LABEL
113
+ #undef LABEL_IS_SC
114
+ END_INSN(getspecial);}}}
115
+ INSN_ENTRY(setspecial){
116
+ {
117
+ VALUE key = (VALUE)GET_OPERAND(1);
118
+ VALUE obj = TOPN(0);
119
+ DEBUG_ENTER_INSN("setspecial");
120
+ ADD_PC(1+1);
121
+ PREFETCH(GET_PC());
122
+ POPN(1);
123
+ #define CURRENT_INSN_setspecial 1
124
+ #define INSN_IS_SC() 0
125
+ #define INSN_LABEL(lab) LABEL_setspecial_##lab
126
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
127
+ USAGE_ANALYSIS_INSN(BIN(setspecial));
128
+ USAGE_ANALYSIS_OPERAND(BIN(setspecial), 0, key);
129
+ {
130
+ #line 100 "insns.def"
131
+ lfp_svar_set(th, GET_LFP(), key, obj);
132
+
133
+ #line 134 "vm.inc"
134
+ #undef CURRENT_INSN_setspecial
135
+ #undef INSN_IS_SC
136
+ #undef INSN_LABEL
137
+ #undef LABEL_IS_SC
138
+ END_INSN(setspecial);}}}
139
+ INSN_ENTRY(getdynamic){
140
+ {
141
+ VALUE val;
142
+ rb_num_t level = (rb_num_t)GET_OPERAND(2);
143
+ dindex_t idx = (dindex_t)GET_OPERAND(1);
144
+
145
+ DEBUG_ENTER_INSN("getdynamic");
146
+ ADD_PC(1+2);
147
+ PREFETCH(GET_PC());
148
+ #define CURRENT_INSN_getdynamic 1
149
+ #define INSN_IS_SC() 0
150
+ #define INSN_LABEL(lab) LABEL_getdynamic_##lab
151
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
152
+ USAGE_ANALYSIS_INSN(BIN(getdynamic));
153
+ USAGE_ANALYSIS_OPERAND(BIN(getdynamic), 0, idx);
154
+ USAGE_ANALYSIS_OPERAND(BIN(getdynamic), 1, level);
155
+ {
156
+ #line 116 "insns.def"
157
+ rb_num_t i;
158
+ VALUE *dfp2 = GET_DFP();
159
+ for (i = 0; i < level; i++) {
160
+ dfp2 = GET_PREV_DFP(dfp2);
161
+ }
162
+ val = *(dfp2 - idx);
163
+
164
+ #line 165 "vm.inc"
165
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
166
+ PUSH(val);
167
+ #undef CURRENT_INSN_getdynamic
168
+ #undef INSN_IS_SC
169
+ #undef INSN_LABEL
170
+ #undef LABEL_IS_SC
171
+ END_INSN(getdynamic);}}}
172
+ INSN_ENTRY(setdynamic){
173
+ {
174
+ rb_num_t level = (rb_num_t)GET_OPERAND(2);
175
+ dindex_t idx = (dindex_t)GET_OPERAND(1);
176
+ VALUE val = TOPN(0);
177
+ DEBUG_ENTER_INSN("setdynamic");
178
+ ADD_PC(1+2);
179
+ PREFETCH(GET_PC());
180
+ POPN(1);
181
+ #define CURRENT_INSN_setdynamic 1
182
+ #define INSN_IS_SC() 0
183
+ #define INSN_LABEL(lab) LABEL_setdynamic_##lab
184
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
185
+ USAGE_ANALYSIS_INSN(BIN(setdynamic));
186
+ USAGE_ANALYSIS_OPERAND(BIN(setdynamic), 0, idx);
187
+ USAGE_ANALYSIS_OPERAND(BIN(setdynamic), 1, level);
188
+ {
189
+ #line 137 "insns.def"
190
+ rb_num_t i;
191
+ VALUE *dfp2 = GET_DFP();
192
+ for (i = 0; i < level; i++) {
193
+ dfp2 = GET_PREV_DFP(dfp2);
194
+ }
195
+ *(dfp2 - idx) = val;
196
+
197
+ #line 198 "vm.inc"
198
+ #undef CURRENT_INSN_setdynamic
199
+ #undef INSN_IS_SC
200
+ #undef INSN_LABEL
201
+ #undef LABEL_IS_SC
202
+ END_INSN(setdynamic);}}}
203
+ INSN_ENTRY(getinstancevariable){
204
+ {
205
+ VALUE val;
206
+ IC ic = (IC)GET_OPERAND(2);
207
+ ID id = (ID)GET_OPERAND(1);
208
+
209
+ DEBUG_ENTER_INSN("getinstancevariable");
210
+ ADD_PC(1+2);
211
+ PREFETCH(GET_PC());
212
+ #define CURRENT_INSN_getinstancevariable 1
213
+ #define INSN_IS_SC() 0
214
+ #define INSN_LABEL(lab) LABEL_getinstancevariable_##lab
215
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
216
+ USAGE_ANALYSIS_INSN(BIN(getinstancevariable));
217
+ USAGE_ANALYSIS_OPERAND(BIN(getinstancevariable), 0, id);
218
+ USAGE_ANALYSIS_OPERAND(BIN(getinstancevariable), 1, ic);
219
+ {
220
+ #line 157 "insns.def"
221
+ val = vm_getivar(GET_SELF(), id, ic);
222
+
223
+ #line 224 "vm.inc"
224
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
225
+ PUSH(val);
226
+ #undef CURRENT_INSN_getinstancevariable
227
+ #undef INSN_IS_SC
228
+ #undef INSN_LABEL
229
+ #undef LABEL_IS_SC
230
+ END_INSN(getinstancevariable);}}}
231
+ INSN_ENTRY(setinstancevariable){
232
+ {
233
+ IC ic = (IC)GET_OPERAND(2);
234
+ ID id = (ID)GET_OPERAND(1);
235
+ VALUE val = TOPN(0);
236
+ DEBUG_ENTER_INSN("setinstancevariable");
237
+ ADD_PC(1+2);
238
+ PREFETCH(GET_PC());
239
+ POPN(1);
240
+ #define CURRENT_INSN_setinstancevariable 1
241
+ #define INSN_IS_SC() 0
242
+ #define INSN_LABEL(lab) LABEL_setinstancevariable_##lab
243
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
244
+ USAGE_ANALYSIS_INSN(BIN(setinstancevariable));
245
+ USAGE_ANALYSIS_OPERAND(BIN(setinstancevariable), 0, id);
246
+ USAGE_ANALYSIS_OPERAND(BIN(setinstancevariable), 1, ic);
247
+ {
248
+ #line 172 "insns.def"
249
+ vm_setivar(GET_SELF(), id, val, ic);
250
+
251
+ #line 252 "vm.inc"
252
+ #undef CURRENT_INSN_setinstancevariable
253
+ #undef INSN_IS_SC
254
+ #undef INSN_LABEL
255
+ #undef LABEL_IS_SC
256
+ END_INSN(setinstancevariable);}}}
257
+ INSN_ENTRY(getclassvariable){
258
+ {
259
+ VALUE val;
260
+ ID id = (ID)GET_OPERAND(1);
261
+
262
+ DEBUG_ENTER_INSN("getclassvariable");
263
+ ADD_PC(1+1);
264
+ PREFETCH(GET_PC());
265
+ #define CURRENT_INSN_getclassvariable 1
266
+ #define INSN_IS_SC() 0
267
+ #define INSN_LABEL(lab) LABEL_getclassvariable_##lab
268
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
269
+ USAGE_ANALYSIS_INSN(BIN(getclassvariable));
270
+ USAGE_ANALYSIS_OPERAND(BIN(getclassvariable), 0, id);
271
+ {
272
+ #line 186 "insns.def"
273
+ NODE * const cref = vm_get_cref(GET_ISEQ(), GET_LFP(), GET_DFP());
274
+ val = rb_cvar_get(vm_get_cvar_base(cref), id);
275
+
276
+ #line 277 "vm.inc"
277
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
278
+ PUSH(val);
279
+ #undef CURRENT_INSN_getclassvariable
280
+ #undef INSN_IS_SC
281
+ #undef INSN_LABEL
282
+ #undef LABEL_IS_SC
283
+ END_INSN(getclassvariable);}}}
284
+ INSN_ENTRY(setclassvariable){
285
+ {
286
+ ID id = (ID)GET_OPERAND(1);
287
+ VALUE val = TOPN(0);
288
+ DEBUG_ENTER_INSN("setclassvariable");
289
+ ADD_PC(1+1);
290
+ PREFETCH(GET_PC());
291
+ POPN(1);
292
+ #define CURRENT_INSN_setclassvariable 1
293
+ #define INSN_IS_SC() 0
294
+ #define INSN_LABEL(lab) LABEL_setclassvariable_##lab
295
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
296
+ USAGE_ANALYSIS_INSN(BIN(setclassvariable));
297
+ USAGE_ANALYSIS_OPERAND(BIN(setclassvariable), 0, id);
298
+ {
299
+ #line 201 "insns.def"
300
+ NODE * const cref = vm_get_cref(GET_ISEQ(), GET_LFP(), GET_DFP());
301
+ rb_cvar_set(vm_get_cvar_base(cref), id, val);
302
+
303
+ #line 304 "vm.inc"
304
+ #undef CURRENT_INSN_setclassvariable
305
+ #undef INSN_IS_SC
306
+ #undef INSN_LABEL
307
+ #undef LABEL_IS_SC
308
+ END_INSN(setclassvariable);}}}
309
+ INSN_ENTRY(getconstant){
310
+ {
311
+ VALUE val;
312
+ ID id = (ID)GET_OPERAND(1);
313
+ VALUE klass = TOPN(0);
314
+ DEBUG_ENTER_INSN("getconstant");
315
+ ADD_PC(1+1);
316
+ PREFETCH(GET_PC());
317
+ POPN(1);
318
+ #define CURRENT_INSN_getconstant 1
319
+ #define INSN_IS_SC() 0
320
+ #define INSN_LABEL(lab) LABEL_getconstant_##lab
321
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
322
+ USAGE_ANALYSIS_INSN(BIN(getconstant));
323
+ USAGE_ANALYSIS_OPERAND(BIN(getconstant), 0, id);
324
+ {
325
+ #line 223 "insns.def"
326
+ val = vm_get_ev_const(th, GET_ISEQ(), klass, id, 0);
327
+
328
+ #line 329 "vm.inc"
329
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
330
+ PUSH(val);
331
+ #undef CURRENT_INSN_getconstant
332
+ #undef INSN_IS_SC
333
+ #undef INSN_LABEL
334
+ #undef LABEL_IS_SC
335
+ END_INSN(getconstant);}}}
336
+ INSN_ENTRY(setconstant){
337
+ {
338
+ ID id = (ID)GET_OPERAND(1);
339
+ VALUE val = TOPN(1);
340
+ VALUE cbase = TOPN(0);
341
+ DEBUG_ENTER_INSN("setconstant");
342
+ ADD_PC(1+1);
343
+ PREFETCH(GET_PC());
344
+ POPN(2);
345
+ #define CURRENT_INSN_setconstant 1
346
+ #define INSN_IS_SC() 0
347
+ #define INSN_LABEL(lab) LABEL_setconstant_##lab
348
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
349
+ USAGE_ANALYSIS_INSN(BIN(setconstant));
350
+ USAGE_ANALYSIS_OPERAND(BIN(setconstant), 0, id);
351
+ {
352
+ #line 245 "insns.def"
353
+ vm_check_if_namespace(cbase);
354
+ rb_const_set(cbase, id, val);
355
+ INC_VM_STATE_VERSION();
356
+
357
+ #line 358 "vm.inc"
358
+ #undef CURRENT_INSN_setconstant
359
+ #undef INSN_IS_SC
360
+ #undef INSN_LABEL
361
+ #undef LABEL_IS_SC
362
+ END_INSN(setconstant);}}}
363
+ INSN_ENTRY(getglobal){
364
+ {
365
+ VALUE val;
366
+ GENTRY entry = (GENTRY)GET_OPERAND(1);
367
+
368
+ DEBUG_ENTER_INSN("getglobal");
369
+ ADD_PC(1+1);
370
+ PREFETCH(GET_PC());
371
+ #define CURRENT_INSN_getglobal 1
372
+ #define INSN_IS_SC() 0
373
+ #define INSN_LABEL(lab) LABEL_getglobal_##lab
374
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
375
+ USAGE_ANALYSIS_INSN(BIN(getglobal));
376
+ USAGE_ANALYSIS_OPERAND(BIN(getglobal), 0, entry);
377
+ {
378
+ #line 261 "insns.def"
379
+ val = GET_GLOBAL((VALUE)entry);
380
+
381
+ #line 382 "vm.inc"
382
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
383
+ PUSH(val);
384
+ #undef CURRENT_INSN_getglobal
385
+ #undef INSN_IS_SC
386
+ #undef INSN_LABEL
387
+ #undef LABEL_IS_SC
388
+ END_INSN(getglobal);}}}
389
+ INSN_ENTRY(setglobal){
390
+ {
391
+ GENTRY entry = (GENTRY)GET_OPERAND(1);
392
+ VALUE val = TOPN(0);
393
+ DEBUG_ENTER_INSN("setglobal");
394
+ ADD_PC(1+1);
395
+ PREFETCH(GET_PC());
396
+ POPN(1);
397
+ #define CURRENT_INSN_setglobal 1
398
+ #define INSN_IS_SC() 0
399
+ #define INSN_LABEL(lab) LABEL_setglobal_##lab
400
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
401
+ USAGE_ANALYSIS_INSN(BIN(setglobal));
402
+ USAGE_ANALYSIS_OPERAND(BIN(setglobal), 0, entry);
403
+ {
404
+ #line 275 "insns.def"
405
+ SET_GLOBAL((VALUE)entry, val);
406
+
407
+ #line 408 "vm.inc"
408
+ #undef CURRENT_INSN_setglobal
409
+ #undef INSN_IS_SC
410
+ #undef INSN_LABEL
411
+ #undef LABEL_IS_SC
412
+ END_INSN(setglobal);}}}
413
+ INSN_ENTRY(putnil){
414
+ {
415
+ VALUE val;
416
+
417
+
418
+ DEBUG_ENTER_INSN("putnil");
419
+ ADD_PC(1+0);
420
+ PREFETCH(GET_PC());
421
+ #define CURRENT_INSN_putnil 1
422
+ #define INSN_IS_SC() 0
423
+ #define INSN_LABEL(lab) LABEL_putnil_##lab
424
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
425
+ USAGE_ANALYSIS_INSN(BIN(putnil));
426
+ {
427
+ #line 294 "insns.def"
428
+ val = Qnil;
429
+
430
+ #line 431 "vm.inc"
431
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
432
+ PUSH(val);
433
+ #undef CURRENT_INSN_putnil
434
+ #undef INSN_IS_SC
435
+ #undef INSN_LABEL
436
+ #undef LABEL_IS_SC
437
+ END_INSN(putnil);}}}
438
+ INSN_ENTRY(putself){
439
+ {
440
+ VALUE val;
441
+
442
+
443
+ DEBUG_ENTER_INSN("putself");
444
+ ADD_PC(1+0);
445
+ PREFETCH(GET_PC());
446
+ #define CURRENT_INSN_putself 1
447
+ #define INSN_IS_SC() 0
448
+ #define INSN_LABEL(lab) LABEL_putself_##lab
449
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
450
+ USAGE_ANALYSIS_INSN(BIN(putself));
451
+ {
452
+ #line 308 "insns.def"
453
+ val = GET_SELF();
454
+
455
+ #line 456 "vm.inc"
456
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
457
+ PUSH(val);
458
+ #undef CURRENT_INSN_putself
459
+ #undef INSN_IS_SC
460
+ #undef INSN_LABEL
461
+ #undef LABEL_IS_SC
462
+ END_INSN(putself);}}}
463
+ INSN_ENTRY(putobject){
464
+ {
465
+ VALUE val = (VALUE)GET_OPERAND(1);
466
+
467
+ DEBUG_ENTER_INSN("putobject");
468
+ ADD_PC(1+1);
469
+ PREFETCH(GET_PC());
470
+ #define CURRENT_INSN_putobject 1
471
+ #define INSN_IS_SC() 0
472
+ #define INSN_LABEL(lab) LABEL_putobject_##lab
473
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
474
+ USAGE_ANALYSIS_INSN(BIN(putobject));
475
+ USAGE_ANALYSIS_OPERAND(BIN(putobject), 0, val);
476
+ {
477
+ #line 324 "insns.def"
478
+ /* */
479
+
480
+ #line 481 "vm.inc"
481
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
482
+ PUSH(val);
483
+ #undef CURRENT_INSN_putobject
484
+ #undef INSN_IS_SC
485
+ #undef INSN_LABEL
486
+ #undef LABEL_IS_SC
487
+ END_INSN(putobject);}}}
488
+ INSN_ENTRY(putspecialobject){
489
+ {
490
+ VALUE val;
491
+ rb_num_t value_type = (rb_num_t)GET_OPERAND(1);
492
+
493
+ DEBUG_ENTER_INSN("putspecialobject");
494
+ ADD_PC(1+1);
495
+ PREFETCH(GET_PC());
496
+ #define CURRENT_INSN_putspecialobject 1
497
+ #define INSN_IS_SC() 0
498
+ #define INSN_LABEL(lab) LABEL_putspecialobject_##lab
499
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
500
+ USAGE_ANALYSIS_INSN(BIN(putspecialobject));
501
+ USAGE_ANALYSIS_OPERAND(BIN(putspecialobject), 0, value_type);
502
+ {
503
+ #line 339 "insns.def"
504
+ enum vm_special_object_type type = (enum vm_special_object_type)value_type;
505
+
506
+ switch (type) {
507
+ case VM_SPECIAL_OBJECT_VMCORE:
508
+ val = rb_mRubyVMFrozenCore;
509
+ break;
510
+ case VM_SPECIAL_OBJECT_CBASE:
511
+ val = vm_get_cbase(GET_ISEQ(), GET_LFP(), GET_DFP());
512
+ break;
513
+ case VM_SPECIAL_OBJECT_CONST_BASE:
514
+ val = vm_get_const_base(GET_ISEQ(), GET_LFP(), GET_DFP());
515
+ break;
516
+ default:
517
+ rb_bug("putspecialobject insn: unknown value_type");
518
+ }
519
+
520
+ #line 521 "vm.inc"
521
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
522
+ PUSH(val);
523
+ #undef CURRENT_INSN_putspecialobject
524
+ #undef INSN_IS_SC
525
+ #undef INSN_LABEL
526
+ #undef LABEL_IS_SC
527
+ END_INSN(putspecialobject);}}}
528
+ INSN_ENTRY(putiseq){
529
+ {
530
+ VALUE ret;
531
+ ISEQ iseq = (ISEQ)GET_OPERAND(1);
532
+
533
+ DEBUG_ENTER_INSN("putiseq");
534
+ ADD_PC(1+1);
535
+ PREFETCH(GET_PC());
536
+ #define CURRENT_INSN_putiseq 1
537
+ #define INSN_IS_SC() 0
538
+ #define INSN_LABEL(lab) LABEL_putiseq_##lab
539
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
540
+ USAGE_ANALYSIS_INSN(BIN(putiseq));
541
+ USAGE_ANALYSIS_OPERAND(BIN(putiseq), 0, iseq);
542
+ {
543
+ #line 367 "insns.def"
544
+ ret = iseq->self;
545
+
546
+ #line 547 "vm.inc"
547
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
548
+ PUSH(ret);
549
+ #undef CURRENT_INSN_putiseq
550
+ #undef INSN_IS_SC
551
+ #undef INSN_LABEL
552
+ #undef LABEL_IS_SC
553
+ END_INSN(putiseq);}}}
554
+ INSN_ENTRY(putstring){
555
+ {
556
+ VALUE val;
557
+ VALUE str = (VALUE)GET_OPERAND(1);
558
+
559
+ DEBUG_ENTER_INSN("putstring");
560
+ ADD_PC(1+1);
561
+ PREFETCH(GET_PC());
562
+ #define CURRENT_INSN_putstring 1
563
+ #define INSN_IS_SC() 0
564
+ #define INSN_LABEL(lab) LABEL_putstring_##lab
565
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
566
+ USAGE_ANALYSIS_INSN(BIN(putstring));
567
+ USAGE_ANALYSIS_OPERAND(BIN(putstring), 0, str);
568
+ {
569
+ #line 381 "insns.def"
570
+ val = rb_str_resurrect(str);
571
+
572
+ #line 573 "vm.inc"
573
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
574
+ PUSH(val);
575
+ #undef CURRENT_INSN_putstring
576
+ #undef INSN_IS_SC
577
+ #undef INSN_LABEL
578
+ #undef LABEL_IS_SC
579
+ END_INSN(putstring);}}}
580
+ INSN_ENTRY(concatstrings){
581
+ {
582
+ VALUE val;
583
+ rb_num_t num = (rb_num_t)GET_OPERAND(1);
584
+
585
+ DEBUG_ENTER_INSN("concatstrings");
586
+ ADD_PC(1+1);
587
+ PREFETCH(GET_PC());
588
+ #define CURRENT_INSN_concatstrings 1
589
+ #define INSN_IS_SC() 0
590
+ #define INSN_LABEL(lab) LABEL_concatstrings_##lab
591
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
592
+ USAGE_ANALYSIS_INSN(BIN(concatstrings));
593
+ USAGE_ANALYSIS_OPERAND(BIN(concatstrings), 0, num);
594
+ {
595
+ #line 395 "insns.def"
596
+ rb_num_t i = num - 1;
597
+
598
+ val = rb_str_resurrect(TOPN(i));
599
+ while (i-- > 0) {
600
+ const VALUE v = TOPN(i);
601
+ rb_str_append(val, v);
602
+ }
603
+ POPN(num);
604
+
605
+ #line 606 "vm.inc"
606
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
607
+ PUSH(val);
608
+ #undef CURRENT_INSN_concatstrings
609
+ #undef INSN_IS_SC
610
+ #undef INSN_LABEL
611
+ #undef LABEL_IS_SC
612
+ END_INSN(concatstrings);}}}
613
+ INSN_ENTRY(tostring){
614
+ {
615
+
616
+ VALUE val = TOPN(0);
617
+ DEBUG_ENTER_INSN("tostring");
618
+ ADD_PC(1+0);
619
+ PREFETCH(GET_PC());
620
+ POPN(1);
621
+ #define CURRENT_INSN_tostring 1
622
+ #define INSN_IS_SC() 0
623
+ #define INSN_LABEL(lab) LABEL_tostring_##lab
624
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
625
+ USAGE_ANALYSIS_INSN(BIN(tostring));
626
+ {
627
+ #line 416 "insns.def"
628
+ val = rb_obj_as_string(val);
629
+
630
+ #line 631 "vm.inc"
631
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
632
+ PUSH(val);
633
+ #undef CURRENT_INSN_tostring
634
+ #undef INSN_IS_SC
635
+ #undef INSN_LABEL
636
+ #undef LABEL_IS_SC
637
+ END_INSN(tostring);}}}
638
+ INSN_ENTRY(toregexp){
639
+ {
640
+ VALUE val;
641
+ rb_num_t cnt = (rb_num_t)GET_OPERAND(2);
642
+ rb_num_t opt = (rb_num_t)GET_OPERAND(1);
643
+
644
+ DEBUG_ENTER_INSN("toregexp");
645
+ ADD_PC(1+2);
646
+ PREFETCH(GET_PC());
647
+ #define CURRENT_INSN_toregexp 1
648
+ #define INSN_IS_SC() 0
649
+ #define INSN_LABEL(lab) LABEL_toregexp_##lab
650
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
651
+ USAGE_ANALYSIS_INSN(BIN(toregexp));
652
+ USAGE_ANALYSIS_OPERAND(BIN(toregexp), 0, opt);
653
+ USAGE_ANALYSIS_OPERAND(BIN(toregexp), 1, cnt);
654
+ {
655
+ #line 431 "insns.def"
656
+ VALUE rb_reg_new_ary(VALUE ary, int options);
657
+ rb_num_t i;
658
+ const VALUE ary = rb_ary_tmp_new(cnt);
659
+ for (i = 0; i < cnt; i++) {
660
+ rb_ary_store(ary, cnt-i-1, TOPN(i));
661
+ }
662
+ POPN(cnt);
663
+ val = rb_reg_new_ary(ary, (int)opt);
664
+ rb_ary_clear(ary);
665
+
666
+ #line 667 "vm.inc"
667
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
668
+ PUSH(val);
669
+ #undef CURRENT_INSN_toregexp
670
+ #undef INSN_IS_SC
671
+ #undef INSN_LABEL
672
+ #undef LABEL_IS_SC
673
+ END_INSN(toregexp);}}}
674
+ INSN_ENTRY(newarray){
675
+ {
676
+ VALUE val;
677
+ rb_num_t num = (rb_num_t)GET_OPERAND(1);
678
+
679
+ DEBUG_ENTER_INSN("newarray");
680
+ ADD_PC(1+1);
681
+ PREFETCH(GET_PC());
682
+ #define CURRENT_INSN_newarray 1
683
+ #define INSN_IS_SC() 0
684
+ #define INSN_LABEL(lab) LABEL_newarray_##lab
685
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
686
+ USAGE_ANALYSIS_INSN(BIN(newarray));
687
+ USAGE_ANALYSIS_OPERAND(BIN(newarray), 0, num);
688
+ {
689
+ #line 453 "insns.def"
690
+ val = rb_ary_new4((long)num, STACK_ADDR_FROM_TOP(num));
691
+ POPN(num);
692
+
693
+ #line 694 "vm.inc"
694
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
695
+ PUSH(val);
696
+ #undef CURRENT_INSN_newarray
697
+ #undef INSN_IS_SC
698
+ #undef INSN_LABEL
699
+ #undef LABEL_IS_SC
700
+ END_INSN(newarray);}}}
701
+ INSN_ENTRY(duparray){
702
+ {
703
+ VALUE val;
704
+ VALUE ary = (VALUE)GET_OPERAND(1);
705
+
706
+ DEBUG_ENTER_INSN("duparray");
707
+ ADD_PC(1+1);
708
+ PREFETCH(GET_PC());
709
+ #define CURRENT_INSN_duparray 1
710
+ #define INSN_IS_SC() 0
711
+ #define INSN_LABEL(lab) LABEL_duparray_##lab
712
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
713
+ USAGE_ANALYSIS_INSN(BIN(duparray));
714
+ USAGE_ANALYSIS_OPERAND(BIN(duparray), 0, ary);
715
+ {
716
+ #line 468 "insns.def"
717
+ val = rb_ary_resurrect(ary);
718
+
719
+ #line 720 "vm.inc"
720
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
721
+ PUSH(val);
722
+ #undef CURRENT_INSN_duparray
723
+ #undef INSN_IS_SC
724
+ #undef INSN_LABEL
725
+ #undef LABEL_IS_SC
726
+ END_INSN(duparray);}}}
727
+ INSN_ENTRY(expandarray){
728
+ {
729
+ rb_num_t flag = (rb_num_t)GET_OPERAND(2);
730
+ rb_num_t num = (rb_num_t)GET_OPERAND(1);
731
+ VALUE ary = TOPN(0);
732
+ DEBUG_ENTER_INSN("expandarray");
733
+ ADD_PC(1+2);
734
+ PREFETCH(GET_PC());
735
+ POPN(1);
736
+ #define CURRENT_INSN_expandarray 1
737
+ #define INSN_IS_SC() 0
738
+ #define INSN_LABEL(lab) LABEL_expandarray_##lab
739
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
740
+ USAGE_ANALYSIS_INSN(BIN(expandarray));
741
+ USAGE_ANALYSIS_OPERAND(BIN(expandarray), 0, num);
742
+ USAGE_ANALYSIS_OPERAND(BIN(expandarray), 1, flag);
743
+ {
744
+ #line 489 "insns.def"
745
+ vm_expandarray(GET_CFP(), ary, num, (int)flag);
746
+
747
+ #line 748 "vm.inc"
748
+ #undef CURRENT_INSN_expandarray
749
+ #undef INSN_IS_SC
750
+ #undef INSN_LABEL
751
+ #undef LABEL_IS_SC
752
+ END_INSN(expandarray);}}}
753
+ INSN_ENTRY(concatarray){
754
+ {
755
+ VALUE ary;
756
+
757
+ VALUE ary1 = TOPN(1);
758
+ VALUE ary2st = TOPN(0);
759
+ DEBUG_ENTER_INSN("concatarray");
760
+ ADD_PC(1+0);
761
+ PREFETCH(GET_PC());
762
+ POPN(2);
763
+ #define CURRENT_INSN_concatarray 1
764
+ #define INSN_IS_SC() 0
765
+ #define INSN_LABEL(lab) LABEL_concatarray_##lab
766
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
767
+ USAGE_ANALYSIS_INSN(BIN(concatarray));
768
+ {
769
+ #line 503 "insns.def"
770
+ const VALUE ary2 = ary2st;
771
+ VALUE tmp1 = rb_check_convert_type(ary1, T_ARRAY, "Array", "to_a");
772
+ VALUE tmp2 = rb_check_convert_type(ary2, T_ARRAY, "Array", "to_a");
773
+
774
+ if (NIL_P(tmp1)) {
775
+ tmp1 = rb_ary_new3(1, ary1);
776
+ }
777
+
778
+ if (NIL_P(tmp2)) {
779
+ tmp2 = rb_ary_new3(1, ary2);
780
+ }
781
+
782
+ if (tmp1 == ary1) {
783
+ tmp1 = rb_ary_dup(ary1);
784
+ }
785
+ ary = rb_ary_concat(tmp1, tmp2);
786
+
787
+ #line 788 "vm.inc"
788
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
789
+ PUSH(ary);
790
+ #undef CURRENT_INSN_concatarray
791
+ #undef INSN_IS_SC
792
+ #undef INSN_LABEL
793
+ #undef LABEL_IS_SC
794
+ END_INSN(concatarray);}}}
795
+ INSN_ENTRY(splatarray){
796
+ {
797
+ VALUE obj;
798
+
799
+ VALUE ary = TOPN(0);
800
+ DEBUG_ENTER_INSN("splatarray");
801
+ ADD_PC(1+1);
802
+ PREFETCH(GET_PC());
803
+ POPN(1);
804
+ #define CURRENT_INSN_splatarray 1
805
+ #define INSN_IS_SC() 0
806
+ #define INSN_LABEL(lab) LABEL_splatarray_##lab
807
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
808
+ USAGE_ANALYSIS_INSN(BIN(splatarray));
809
+ USAGE_ANALYSIS_OPERAND(BIN(splatarray), 0, flag);
810
+ {
811
+ #line 532 "insns.def"
812
+ VALUE tmp = rb_check_convert_type(ary, T_ARRAY, "Array", "to_a");
813
+ if (NIL_P(tmp)) {
814
+ tmp = rb_ary_new3(1, ary);
815
+ }
816
+ obj = tmp;
817
+
818
+ #line 819 "vm.inc"
819
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
820
+ PUSH(obj);
821
+ #undef CURRENT_INSN_splatarray
822
+ #undef INSN_IS_SC
823
+ #undef INSN_LABEL
824
+ #undef LABEL_IS_SC
825
+ END_INSN(splatarray);}}}
826
+ INSN_ENTRY(checkincludearray){
827
+ {
828
+ VALUE result;
829
+ VALUE flag = (VALUE)GET_OPERAND(1);
830
+ VALUE obj = TOPN(1);
831
+ VALUE ary = TOPN(0);
832
+ DEBUG_ENTER_INSN("checkincludearray");
833
+ ADD_PC(1+1);
834
+ PREFETCH(GET_PC());
835
+ POPN(2);
836
+ #define CURRENT_INSN_checkincludearray 1
837
+ #define INSN_IS_SC() 0
838
+ #define INSN_LABEL(lab) LABEL_checkincludearray_##lab
839
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
840
+ USAGE_ANALYSIS_INSN(BIN(checkincludearray));
841
+ USAGE_ANALYSIS_OPERAND(BIN(checkincludearray), 0, flag);
842
+ {
843
+ #line 550 "insns.def"
844
+ int i;
845
+ result = Qfalse;
846
+
847
+ if (TYPE(ary) != T_ARRAY) {
848
+ ary = rb_Array(ary);
849
+ }
850
+
851
+ if (flag == Qtrue) {
852
+ /* NODE_CASE */
853
+ for (i = 0; i < RARRAY_LEN(ary); i++) {
854
+ /* TODO: fix me (use another method dispatch) */
855
+ if (RTEST(rb_funcall2(RARRAY_PTR(ary)[i], idEqq, 1, &obj))) {
856
+ result = Qtrue;
857
+ break;
858
+ }
859
+ }
860
+ }
861
+ else {
862
+ obj = Qfalse;
863
+ /* NODE_WHEN */
864
+ for (i = 0; i < RARRAY_LEN(ary); i++) {
865
+ if (RTEST(RARRAY_PTR(ary)[i])) {
866
+ obj = result = Qtrue;
867
+ break;
868
+ }
869
+ }
870
+ }
871
+
872
+ #line 873 "vm.inc"
873
+ CHECK_STACK_OVERFLOW(REG_CFP, 2);
874
+ PUSH(obj);
875
+ PUSH(result);
876
+ #undef CURRENT_INSN_checkincludearray
877
+ #undef INSN_IS_SC
878
+ #undef INSN_LABEL
879
+ #undef LABEL_IS_SC
880
+ END_INSN(checkincludearray);}}}
881
+ INSN_ENTRY(newhash){
882
+ {
883
+ VALUE val;
884
+ rb_num_t num = (rb_num_t)GET_OPERAND(1);
885
+
886
+ DEBUG_ENTER_INSN("newhash");
887
+ ADD_PC(1+1);
888
+ PREFETCH(GET_PC());
889
+ #define CURRENT_INSN_newhash 1
890
+ #define INSN_IS_SC() 0
891
+ #define INSN_LABEL(lab) LABEL_newhash_##lab
892
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
893
+ USAGE_ANALYSIS_INSN(BIN(newhash));
894
+ USAGE_ANALYSIS_OPERAND(BIN(newhash), 0, num);
895
+ {
896
+ #line 591 "insns.def"
897
+ rb_num_t i;
898
+ val = rb_hash_new();
899
+
900
+ for (i = num; i > 0; i -= 2) {
901
+ const VALUE v = TOPN(i - 2);
902
+ const VALUE k = TOPN(i - 1);
903
+ rb_hash_aset(val, k, v);
904
+ }
905
+ POPN(num);
906
+
907
+ #line 908 "vm.inc"
908
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
909
+ PUSH(val);
910
+ #undef CURRENT_INSN_newhash
911
+ #undef INSN_IS_SC
912
+ #undef INSN_LABEL
913
+ #undef LABEL_IS_SC
914
+ END_INSN(newhash);}}}
915
+ INSN_ENTRY(newrange){
916
+ {
917
+ VALUE val;
918
+ rb_num_t flag = (rb_num_t)GET_OPERAND(1);
919
+ VALUE low = TOPN(1);
920
+ VALUE high = TOPN(0);
921
+ DEBUG_ENTER_INSN("newrange");
922
+ ADD_PC(1+1);
923
+ PREFETCH(GET_PC());
924
+ POPN(2);
925
+ #define CURRENT_INSN_newrange 1
926
+ #define INSN_IS_SC() 0
927
+ #define INSN_LABEL(lab) LABEL_newrange_##lab
928
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
929
+ USAGE_ANALYSIS_INSN(BIN(newrange));
930
+ USAGE_ANALYSIS_OPERAND(BIN(newrange), 0, flag);
931
+ {
932
+ #line 613 "insns.def"
933
+ val = rb_range_new(low, high, (int)flag);
934
+
935
+ #line 936 "vm.inc"
936
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
937
+ PUSH(val);
938
+ #undef CURRENT_INSN_newrange
939
+ #undef INSN_IS_SC
940
+ #undef INSN_LABEL
941
+ #undef LABEL_IS_SC
942
+ END_INSN(newrange);}}}
943
+ INSN_ENTRY(pop){
944
+ {
945
+
946
+ VALUE val = TOPN(0);
947
+ DEBUG_ENTER_INSN("pop");
948
+ ADD_PC(1+0);
949
+ PREFETCH(GET_PC());
950
+ POPN(1);
951
+ #define CURRENT_INSN_pop 1
952
+ #define INSN_IS_SC() 0
953
+ #define INSN_LABEL(lab) LABEL_pop_##lab
954
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
955
+ USAGE_ANALYSIS_INSN(BIN(pop));
956
+ {
957
+ #line 631 "insns.def"
958
+ val = val;
959
+ /* none */
960
+
961
+ #line 962 "vm.inc"
962
+ #undef CURRENT_INSN_pop
963
+ #undef INSN_IS_SC
964
+ #undef INSN_LABEL
965
+ #undef LABEL_IS_SC
966
+ END_INSN(pop);}}}
967
+ INSN_ENTRY(dup){
968
+ {
969
+ VALUE val2;
970
+ VALUE val1;
971
+
972
+ VALUE val = TOPN(0);
973
+ DEBUG_ENTER_INSN("dup");
974
+ ADD_PC(1+0);
975
+ PREFETCH(GET_PC());
976
+ POPN(1);
977
+ #define CURRENT_INSN_dup 1
978
+ #define INSN_IS_SC() 0
979
+ #define INSN_LABEL(lab) LABEL_dup_##lab
980
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
981
+ USAGE_ANALYSIS_INSN(BIN(dup));
982
+ {
983
+ #line 646 "insns.def"
984
+ val1 = val2 = val;
985
+
986
+ #line 987 "vm.inc"
987
+ CHECK_STACK_OVERFLOW(REG_CFP, 2);
988
+ PUSH(val1);
989
+ PUSH(val2);
990
+ #undef CURRENT_INSN_dup
991
+ #undef INSN_IS_SC
992
+ #undef INSN_LABEL
993
+ #undef LABEL_IS_SC
994
+ END_INSN(dup);}}}
995
+ INSN_ENTRY(dupn){
996
+ {
997
+ rb_num_t n = (rb_num_t)GET_OPERAND(1);
998
+
999
+ DEBUG_ENTER_INSN("dupn");
1000
+ ADD_PC(1+1);
1001
+ PREFETCH(GET_PC());
1002
+ #define CURRENT_INSN_dupn 1
1003
+ #define INSN_IS_SC() 0
1004
+ #define INSN_LABEL(lab) LABEL_dupn_##lab
1005
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1006
+ USAGE_ANALYSIS_INSN(BIN(dupn));
1007
+ USAGE_ANALYSIS_OPERAND(BIN(dupn), 0, n);
1008
+ {
1009
+ #line 660 "insns.def"
1010
+ rb_num_t i;
1011
+ VALUE *sp = STACK_ADDR_FROM_TOP(n);
1012
+ for (i = 0; i < n; i++) {
1013
+ GET_SP()[i] = sp[i];
1014
+ }
1015
+ INC_SP(n);
1016
+
1017
+ #line 1018 "vm.inc"
1018
+ #undef CURRENT_INSN_dupn
1019
+ #undef INSN_IS_SC
1020
+ #undef INSN_LABEL
1021
+ #undef LABEL_IS_SC
1022
+ END_INSN(dupn);}}}
1023
+ INSN_ENTRY(swap){
1024
+ {
1025
+
1026
+ VALUE val = TOPN(1);
1027
+ VALUE obj = TOPN(0);
1028
+ DEBUG_ENTER_INSN("swap");
1029
+ ADD_PC(1+0);
1030
+ PREFETCH(GET_PC());
1031
+ POPN(2);
1032
+ #define CURRENT_INSN_swap 1
1033
+ #define INSN_IS_SC() 0
1034
+ #define INSN_LABEL(lab) LABEL_swap_##lab
1035
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1036
+ USAGE_ANALYSIS_INSN(BIN(swap));
1037
+ {
1038
+ #line 680 "insns.def"
1039
+ /* none */
1040
+
1041
+ #line 1042 "vm.inc"
1042
+ CHECK_STACK_OVERFLOW(REG_CFP, 2);
1043
+ PUSH(obj);
1044
+ PUSH(val);
1045
+ #undef CURRENT_INSN_swap
1046
+ #undef INSN_IS_SC
1047
+ #undef INSN_LABEL
1048
+ #undef LABEL_IS_SC
1049
+ END_INSN(swap);}}}
1050
+ INSN_ENTRY(reput){
1051
+ {
1052
+
1053
+ VALUE val = TOPN(0);
1054
+ DEBUG_ENTER_INSN("reput");
1055
+ ADD_PC(1+0);
1056
+ PREFETCH(GET_PC());
1057
+ POPN(1);
1058
+ #define CURRENT_INSN_reput 1
1059
+ #define INSN_IS_SC() 0
1060
+ #define INSN_LABEL(lab) LABEL_reput_##lab
1061
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1062
+ USAGE_ANALYSIS_INSN(BIN(reput));
1063
+ {
1064
+ #line 694 "insns.def"
1065
+ /* none */
1066
+
1067
+ #line 1068 "vm.inc"
1068
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
1069
+ PUSH(val);
1070
+ #undef CURRENT_INSN_reput
1071
+ #undef INSN_IS_SC
1072
+ #undef INSN_LABEL
1073
+ #undef LABEL_IS_SC
1074
+ END_INSN(reput);}}}
1075
+ INSN_ENTRY(topn){
1076
+ {
1077
+ VALUE val;
1078
+ rb_num_t n = (rb_num_t)GET_OPERAND(1);
1079
+
1080
+ DEBUG_ENTER_INSN("topn");
1081
+ ADD_PC(1+1);
1082
+ PREFETCH(GET_PC());
1083
+ #define CURRENT_INSN_topn 1
1084
+ #define INSN_IS_SC() 0
1085
+ #define INSN_LABEL(lab) LABEL_topn_##lab
1086
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1087
+ USAGE_ANALYSIS_INSN(BIN(topn));
1088
+ USAGE_ANALYSIS_OPERAND(BIN(topn), 0, n);
1089
+ {
1090
+ #line 708 "insns.def"
1091
+ val = TOPN(n);
1092
+
1093
+ #line 1094 "vm.inc"
1094
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
1095
+ PUSH(val);
1096
+ #undef CURRENT_INSN_topn
1097
+ #undef INSN_IS_SC
1098
+ #undef INSN_LABEL
1099
+ #undef LABEL_IS_SC
1100
+ END_INSN(topn);}}}
1101
+ INSN_ENTRY(setn){
1102
+ {
1103
+ rb_num_t n = (rb_num_t)GET_OPERAND(1);
1104
+ VALUE val = TOPN(0);
1105
+ DEBUG_ENTER_INSN("setn");
1106
+ ADD_PC(1+1);
1107
+ PREFETCH(GET_PC());
1108
+ POPN(1);
1109
+ #define CURRENT_INSN_setn 1
1110
+ #define INSN_IS_SC() 0
1111
+ #define INSN_LABEL(lab) LABEL_setn_##lab
1112
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1113
+ USAGE_ANALYSIS_INSN(BIN(setn));
1114
+ USAGE_ANALYSIS_OPERAND(BIN(setn), 0, n);
1115
+ {
1116
+ #line 722 "insns.def"
1117
+ TOPN(n-1) = val;
1118
+
1119
+ #line 1120 "vm.inc"
1120
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
1121
+ PUSH(val);
1122
+ #undef CURRENT_INSN_setn
1123
+ #undef INSN_IS_SC
1124
+ #undef INSN_LABEL
1125
+ #undef LABEL_IS_SC
1126
+ END_INSN(setn);}}}
1127
+ INSN_ENTRY(adjuststack){
1128
+ {
1129
+ rb_num_t n = (rb_num_t)GET_OPERAND(1);
1130
+
1131
+ DEBUG_ENTER_INSN("adjuststack");
1132
+ ADD_PC(1+1);
1133
+ PREFETCH(GET_PC());
1134
+ #define CURRENT_INSN_adjuststack 1
1135
+ #define INSN_IS_SC() 0
1136
+ #define INSN_LABEL(lab) LABEL_adjuststack_##lab
1137
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1138
+ USAGE_ANALYSIS_INSN(BIN(adjuststack));
1139
+ USAGE_ANALYSIS_OPERAND(BIN(adjuststack), 0, n);
1140
+ {
1141
+ #line 736 "insns.def"
1142
+ DEC_SP(n);
1143
+
1144
+ #line 1145 "vm.inc"
1145
+ #undef CURRENT_INSN_adjuststack
1146
+ #undef INSN_IS_SC
1147
+ #undef INSN_LABEL
1148
+ #undef LABEL_IS_SC
1149
+ END_INSN(adjuststack);}}}
1150
+ INSN_ENTRY(defined){
1151
+ {
1152
+ VALUE val;
1153
+ VALUE needstr = (VALUE)GET_OPERAND(3);
1154
+ VALUE obj = (VALUE)GET_OPERAND(2);
1155
+ rb_num_t op_type = (rb_num_t)GET_OPERAND(1);
1156
+ VALUE v = TOPN(0);
1157
+ DEBUG_ENTER_INSN("defined");
1158
+ ADD_PC(1+3);
1159
+ PREFETCH(GET_PC());
1160
+ POPN(1);
1161
+ #define CURRENT_INSN_defined 1
1162
+ #define INSN_IS_SC() 0
1163
+ #define INSN_LABEL(lab) LABEL_defined_##lab
1164
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1165
+ USAGE_ANALYSIS_INSN(BIN(defined));
1166
+ USAGE_ANALYSIS_OPERAND(BIN(defined), 0, op_type);
1167
+ USAGE_ANALYSIS_OPERAND(BIN(defined), 1, obj);
1168
+ USAGE_ANALYSIS_OPERAND(BIN(defined), 2, needstr);
1169
+ {
1170
+ #line 755 "insns.def"
1171
+ VALUE klass;
1172
+ const char *expr_type = 0;
1173
+ enum defined_type type = (enum defined_type)op_type;
1174
+
1175
+ val = Qnil;
1176
+
1177
+ switch (type) {
1178
+ case DEFINED_IVAR:
1179
+ if (rb_ivar_defined(GET_SELF(), SYM2ID(obj))) {
1180
+ expr_type = "instance-variable";
1181
+ }
1182
+ break;
1183
+ case DEFINED_IVAR2:
1184
+ klass = vm_get_cbase(GET_ISEQ(), GET_LFP(), GET_DFP());
1185
+ break;
1186
+ case DEFINED_GVAR:
1187
+ if (rb_gvar_defined(rb_global_entry(SYM2ID(obj)))) {
1188
+ expr_type = "global-variable";
1189
+ }
1190
+ break;
1191
+ case DEFINED_CVAR:
1192
+ {
1193
+ NODE *cref = vm_get_cref(GET_ISEQ(), GET_LFP(), GET_DFP());
1194
+ klass = vm_get_cvar_base(cref);
1195
+ if (rb_cvar_defined(klass, SYM2ID(obj))) {
1196
+ expr_type = "class variable";
1197
+ }
1198
+ break;
1199
+ }
1200
+ case DEFINED_CONST:
1201
+ klass = v;
1202
+ if (vm_get_ev_const(th, GET_ISEQ(), klass, SYM2ID(obj), 1)) {
1203
+ expr_type = "constant";
1204
+ }
1205
+ break;
1206
+ case DEFINED_FUNC:
1207
+ klass = CLASS_OF(v);
1208
+ if (rb_method_boundp(klass, SYM2ID(obj), 0)) {
1209
+ expr_type = "method";
1210
+ }
1211
+ break;
1212
+ case DEFINED_METHOD:{
1213
+ VALUE klass = CLASS_OF(v);
1214
+ const rb_method_entry_t *me = rb_method_entry(klass, SYM2ID(obj));
1215
+
1216
+ if (me) {
1217
+ if (!(me->flag & NOEX_PRIVATE)) {
1218
+ if (!((me->flag & NOEX_PROTECTED) &&
1219
+ !rb_obj_is_kind_of(GET_SELF(),
1220
+ rb_class_real(klass)))) {
1221
+ expr_type = "method";
1222
+ }
1223
+ }
1224
+ }
1225
+ {
1226
+ VALUE args[2];
1227
+ VALUE r;
1228
+
1229
+ args[0] = obj; args[1] = Qfalse;
1230
+ r = rb_check_funcall(v, rb_intern("respond_to_missing?"), 2, args);
1231
+ if (r != Qundef && RTEST(r))
1232
+ expr_type = "method";
1233
+ }
1234
+ break;
1235
+ }
1236
+ case DEFINED_YIELD:
1237
+ if (GET_BLOCK_PTR()) {
1238
+ expr_type = "yield";
1239
+ }
1240
+ break;
1241
+ case DEFINED_ZSUPER:{
1242
+ rb_iseq_t *iseq = GET_ISEQ();
1243
+ while (iseq) {
1244
+ if (iseq->defined_method_id) {
1245
+ break;
1246
+ }
1247
+ iseq = iseq->parent_iseq;
1248
+ }
1249
+ if (iseq) {
1250
+ VALUE klass = vm_search_normal_superclass(iseq->klass, GET_SELF());
1251
+ if (rb_method_boundp(klass, iseq->defined_method_id, 0)) {
1252
+ expr_type = "super";
1253
+ }
1254
+ }
1255
+ break;
1256
+ }
1257
+ case DEFINED_REF:{
1258
+ val = vm_getspecial(th, GET_LFP(), Qfalse, FIX2INT(obj));
1259
+ if (val != Qnil) {
1260
+ expr_type = "global-variable";
1261
+ }
1262
+ break;
1263
+ }
1264
+ default:
1265
+ rb_bug("unimplemented defined? type (VM)");
1266
+ break;
1267
+ }
1268
+ if (expr_type != 0) {
1269
+ if (needstr != Qfalse) {
1270
+ val = rb_str_new2(expr_type);
1271
+ }
1272
+ else {
1273
+ val = Qtrue;
1274
+ }
1275
+ }
1276
+
1277
+ #line 1278 "vm.inc"
1278
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
1279
+ PUSH(val);
1280
+ #undef CURRENT_INSN_defined
1281
+ #undef INSN_IS_SC
1282
+ #undef INSN_LABEL
1283
+ #undef LABEL_IS_SC
1284
+ END_INSN(defined);}}}
1285
+ INSN_ENTRY(trace){
1286
+ {
1287
+ rb_num_t nf = (rb_num_t)GET_OPERAND(1);
1288
+
1289
+ DEBUG_ENTER_INSN("trace");
1290
+ ADD_PC(1+1);
1291
+ PREFETCH(GET_PC());
1292
+ #define CURRENT_INSN_trace 1
1293
+ #define INSN_IS_SC() 0
1294
+ #define INSN_LABEL(lab) LABEL_trace_##lab
1295
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1296
+ USAGE_ANALYSIS_INSN(BIN(trace));
1297
+ USAGE_ANALYSIS_OPERAND(BIN(trace), 0, nf);
1298
+ {
1299
+ #line 873 "insns.def"
1300
+ rb_event_flag_t flag = (rb_event_flag_t)nf;
1301
+
1302
+ EXEC_EVENT_HOOK(th, flag, GET_SELF(), 0, 0 /* TODO: id, klass */);
1303
+
1304
+ #line 1305 "vm.inc"
1305
+ #undef CURRENT_INSN_trace
1306
+ #undef INSN_IS_SC
1307
+ #undef INSN_LABEL
1308
+ #undef LABEL_IS_SC
1309
+ END_INSN(trace);}}}
1310
+ INSN_ENTRY(defineclass){
1311
+ {
1312
+ VALUE val;
1313
+ rb_num_t define_type = (rb_num_t)GET_OPERAND(3);
1314
+ ISEQ class_iseq = (ISEQ)GET_OPERAND(2);
1315
+ ID id = (ID)GET_OPERAND(1);
1316
+ VALUE cbase = TOPN(1);
1317
+ VALUE super = TOPN(0);
1318
+ DEBUG_ENTER_INSN("defineclass");
1319
+ ADD_PC(1+3);
1320
+ PREFETCH(GET_PC());
1321
+ POPN(2);
1322
+ #define CURRENT_INSN_defineclass 1
1323
+ #define INSN_IS_SC() 0
1324
+ #define INSN_LABEL(lab) LABEL_defineclass_##lab
1325
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1326
+ USAGE_ANALYSIS_INSN(BIN(defineclass));
1327
+ USAGE_ANALYSIS_OPERAND(BIN(defineclass), 0, id);
1328
+ USAGE_ANALYSIS_OPERAND(BIN(defineclass), 1, class_iseq);
1329
+ USAGE_ANALYSIS_OPERAND(BIN(defineclass), 2, define_type);
1330
+ {
1331
+ #line 897 "insns.def"
1332
+ VALUE klass;
1333
+
1334
+ switch ((int)define_type) {
1335
+ case 0: /* scoped: class Foo::Bar */
1336
+ case 3: /* no scope: class Bar */
1337
+ /* val is dummy. classdef returns class scope value */
1338
+
1339
+ if (super == Qnil) {
1340
+ super = rb_cObject;
1341
+ }
1342
+
1343
+ vm_check_if_namespace(cbase);
1344
+
1345
+ /* find klass */
1346
+ rb_autoload_load(cbase, id);
1347
+ if ((klass = vm_search_const_defined_class(cbase, id)) != 0) {
1348
+ /* already exist */
1349
+ klass = define_type == 0 ? rb_public_const_get_at(klass, id) : rb_const_get_at(klass, id);
1350
+ if (TYPE(klass) != T_CLASS) {
1351
+ rb_raise(rb_eTypeError, "%s is not a class", rb_id2name(id));
1352
+ }
1353
+
1354
+ if (super != rb_cObject) {
1355
+ VALUE tmp;
1356
+ tmp = rb_class_real(RCLASS_SUPER(klass));
1357
+
1358
+ if (tmp != super) {
1359
+ rb_raise(rb_eTypeError, "superclass mismatch for class %s",
1360
+ rb_id2name(id));
1361
+ }
1362
+ }
1363
+ }
1364
+ else {
1365
+ /* new class declaration */
1366
+ klass = rb_define_class_id(id, super);
1367
+ rb_set_class_path_string(klass, cbase, rb_id2str(id));
1368
+ rb_const_set(cbase, id, klass);
1369
+ rb_class_inherited(super, klass);
1370
+ }
1371
+ break;
1372
+ case 1:
1373
+ /* val is dummy. classdef returns class scope value */
1374
+ /* super is dummy */
1375
+ klass = rb_singleton_class(cbase);
1376
+ break;
1377
+ case 2: /* scoped: module Foo::Bar or module ::Bar */
1378
+ case 5: /* no scope: module Bar */
1379
+ /* val is dummy. classdef returns class scope value */
1380
+ /* super is dummy */
1381
+
1382
+ vm_check_if_namespace(cbase);
1383
+
1384
+ /* find klass */
1385
+ if ((klass = vm_search_const_defined_class(cbase, id)) != 0) {
1386
+ klass = define_type == 2 ? rb_public_const_get_at(klass, id) : rb_const_get_at(klass, id);
1387
+ /* already exist */
1388
+ if (TYPE(klass) != T_MODULE) {
1389
+ rb_raise(rb_eTypeError, "%s is not a module", rb_id2name(id));
1390
+ }
1391
+ }
1392
+ else {
1393
+ /* new module declaration */
1394
+ klass = rb_define_module_id(id);
1395
+ rb_set_class_path_string(klass, cbase, rb_id2str(id));
1396
+ rb_const_set(cbase, id, klass);
1397
+ }
1398
+ break;
1399
+ default:
1400
+ rb_bug("unknown defineclass type: %d", (int)define_type);
1401
+ }
1402
+
1403
+ COPY_CREF(class_iseq->cref_stack, vm_cref_push(th, klass, NOEX_PUBLIC, NULL));
1404
+
1405
+ /* enter scope */
1406
+ vm_push_frame(th, class_iseq,
1407
+ VM_FRAME_MAGIC_CLASS, klass, (VALUE) GET_BLOCK_PTR(),
1408
+ class_iseq->iseq_encoded, GET_SP(), 0,
1409
+ class_iseq->local_size);
1410
+ RESTORE_REGS();
1411
+
1412
+ INC_VM_STATE_VERSION();
1413
+ NEXT_INSN();
1414
+
1415
+ #line 1416 "vm.inc"
1416
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
1417
+ PUSH(val);
1418
+ #undef CURRENT_INSN_defineclass
1419
+ #undef INSN_IS_SC
1420
+ #undef INSN_LABEL
1421
+ #undef LABEL_IS_SC
1422
+ END_INSN(defineclass);}}}
1423
+ INSN_ENTRY(send){
1424
+ {
1425
+ VALUE val;
1426
+ IC ic = (IC)GET_OPERAND(5);
1427
+ rb_num_t op_flag = (rb_num_t)GET_OPERAND(4);
1428
+ ISEQ blockiseq = (ISEQ)GET_OPERAND(3);
1429
+ rb_num_t op_argc = (rb_num_t)GET_OPERAND(2);
1430
+ ID op_id = (ID)GET_OPERAND(1);
1431
+
1432
+ DEBUG_ENTER_INSN("send");
1433
+ ADD_PC(1+5);
1434
+ PREFETCH(GET_PC());
1435
+ #define CURRENT_INSN_send 1
1436
+ #define INSN_IS_SC() 0
1437
+ #define INSN_LABEL(lab) LABEL_send_##lab
1438
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1439
+ USAGE_ANALYSIS_INSN(BIN(send));
1440
+ USAGE_ANALYSIS_OPERAND(BIN(send), 0, op_id);
1441
+ USAGE_ANALYSIS_OPERAND(BIN(send), 1, op_argc);
1442
+ USAGE_ANALYSIS_OPERAND(BIN(send), 2, blockiseq);
1443
+ USAGE_ANALYSIS_OPERAND(BIN(send), 3, op_flag);
1444
+ USAGE_ANALYSIS_OPERAND(BIN(send), 4, ic);
1445
+ {
1446
+ #line 1003 "insns.def"
1447
+ const rb_method_entry_t *me;
1448
+ VALUE recv, klass;
1449
+ rb_block_t *blockptr = 0;
1450
+ VALUE flag = op_flag;
1451
+ int num = caller_setup_args(th, GET_CFP(), flag, (int)op_argc,
1452
+ (rb_iseq_t *)blockiseq, &blockptr);
1453
+ ID id = op_id;
1454
+
1455
+ /* get receiver */
1456
+ recv = TOPN(num);
1457
+ klass = CLASS_OF(recv);
1458
+ me = vm_method_search(id, klass, ic);
1459
+ CALL_METHOD(num, blockptr, flag, id, me, recv);
1460
+
1461
+ #line 1462 "vm.inc"
1462
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
1463
+ PUSH(val);
1464
+ #undef CURRENT_INSN_send
1465
+ #undef INSN_IS_SC
1466
+ #undef INSN_LABEL
1467
+ #undef LABEL_IS_SC
1468
+ END_INSN(send);}}}
1469
+ INSN_ENTRY(invokesuper){
1470
+ {
1471
+ VALUE val;
1472
+ rb_num_t op_flag = (rb_num_t)GET_OPERAND(3);
1473
+ ISEQ blockiseq = (ISEQ)GET_OPERAND(2);
1474
+ rb_num_t op_argc = (rb_num_t)GET_OPERAND(1);
1475
+
1476
+ DEBUG_ENTER_INSN("invokesuper");
1477
+ ADD_PC(1+3);
1478
+ PREFETCH(GET_PC());
1479
+ #define CURRENT_INSN_invokesuper 1
1480
+ #define INSN_IS_SC() 0
1481
+ #define INSN_LABEL(lab) LABEL_invokesuper_##lab
1482
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1483
+ USAGE_ANALYSIS_INSN(BIN(invokesuper));
1484
+ USAGE_ANALYSIS_OPERAND(BIN(invokesuper), 0, op_argc);
1485
+ USAGE_ANALYSIS_OPERAND(BIN(invokesuper), 1, blockiseq);
1486
+ USAGE_ANALYSIS_OPERAND(BIN(invokesuper), 2, op_flag);
1487
+ {
1488
+ #line 1031 "insns.def"
1489
+ rb_block_t *blockptr = !(op_flag & VM_CALL_ARGS_BLOCKARG_BIT) ? GET_BLOCK_PTR() : 0;
1490
+ VALUE flag = op_flag;
1491
+ int num = caller_setup_args(th, GET_CFP(), flag,
1492
+ (int)op_argc, blockiseq, &blockptr);
1493
+ VALUE recv, klass;
1494
+ ID id;
1495
+ const rb_method_entry_t *me;
1496
+
1497
+ flag = VM_CALL_SUPER_BIT | VM_CALL_FCALL_BIT;
1498
+
1499
+ recv = GET_SELF();
1500
+ vm_search_superclass(GET_CFP(), GET_ISEQ(), recv, TOPN(num), &id, &klass);
1501
+
1502
+ /* temporary measure for [Bug #2402] [Bug #2502] [Bug #3136] */
1503
+ if (!rb_obj_is_kind_of(recv, klass)) {
1504
+ rb_raise(rb_eNotImpError, "super from singleton method that is defined to multiple classes is not supported; this will be fixed in 1.9.3 or later");
1505
+ }
1506
+
1507
+ me = rb_method_entry(klass, id);
1508
+
1509
+ CALL_METHOD(num, blockptr, flag, id, me, recv);
1510
+
1511
+ #line 1512 "vm.inc"
1512
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
1513
+ PUSH(val);
1514
+ #undef CURRENT_INSN_invokesuper
1515
+ #undef INSN_IS_SC
1516
+ #undef INSN_LABEL
1517
+ #undef LABEL_IS_SC
1518
+ END_INSN(invokesuper);}}}
1519
+ INSN_ENTRY(invokeblock){
1520
+ {
1521
+ VALUE val;
1522
+ rb_num_t flag = (rb_num_t)GET_OPERAND(2);
1523
+ rb_num_t num = (rb_num_t)GET_OPERAND(1);
1524
+
1525
+ DEBUG_ENTER_INSN("invokeblock");
1526
+ ADD_PC(1+2);
1527
+ PREFETCH(GET_PC());
1528
+ #define CURRENT_INSN_invokeblock 1
1529
+ #define INSN_IS_SC() 0
1530
+ #define INSN_LABEL(lab) LABEL_invokeblock_##lab
1531
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1532
+ USAGE_ANALYSIS_INSN(BIN(invokeblock));
1533
+ USAGE_ANALYSIS_OPERAND(BIN(invokeblock), 0, num);
1534
+ USAGE_ANALYSIS_OPERAND(BIN(invokeblock), 1, flag);
1535
+ {
1536
+ #line 1066 "insns.def"
1537
+ val = vm_invoke_block(th, GET_CFP(), num, flag);
1538
+ if (val == Qundef) {
1539
+ RESTORE_REGS();
1540
+ NEXT_INSN();
1541
+ }
1542
+
1543
+ #line 1544 "vm.inc"
1544
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
1545
+ PUSH(val);
1546
+ #undef CURRENT_INSN_invokeblock
1547
+ #undef INSN_IS_SC
1548
+ #undef INSN_LABEL
1549
+ #undef LABEL_IS_SC
1550
+ END_INSN(invokeblock);}}}
1551
+ INSN_ENTRY(leave){
1552
+ {
1553
+
1554
+ VALUE val = TOPN(0);
1555
+ DEBUG_ENTER_INSN("leave");
1556
+ ADD_PC(1+0);
1557
+ PREFETCH(GET_PC());
1558
+ POPN(1);
1559
+ #define CURRENT_INSN_leave 1
1560
+ #define INSN_IS_SC() 0
1561
+ #define INSN_LABEL(lab) LABEL_leave_##lab
1562
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1563
+ USAGE_ANALYSIS_INSN(BIN(leave));
1564
+ {
1565
+ #line 1084 "insns.def"
1566
+ if (OPT_CHECKED_RUN) {
1567
+ if (reg_cfp->sp != reg_cfp->bp) {
1568
+ rb_bug("Stack consistency error (sp: %"PRIdPTRDIFF", bp: %"PRIdPTRDIFF")",
1569
+ VM_SP_CNT(th, reg_cfp->sp), VM_SP_CNT(th, reg_cfp->bp));
1570
+ }
1571
+ }
1572
+
1573
+ RUBY_VM_CHECK_INTS();
1574
+ vm_pop_frame(th);
1575
+ RESTORE_REGS();
1576
+
1577
+ #line 1578 "vm.inc"
1578
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
1579
+ PUSH(val);
1580
+ #undef CURRENT_INSN_leave
1581
+ #undef INSN_IS_SC
1582
+ #undef INSN_LABEL
1583
+ #undef LABEL_IS_SC
1584
+ END_INSN(leave);}}}
1585
+ INSN_ENTRY(finish){
1586
+ {
1587
+
1588
+ VALUE val = TOPN(0);
1589
+ DEBUG_ENTER_INSN("finish");
1590
+ ADD_PC(1+0);
1591
+ PREFETCH(GET_PC());
1592
+ POPN(1);
1593
+ #define CURRENT_INSN_finish 1
1594
+ #define INSN_IS_SC() 0
1595
+ #define INSN_LABEL(lab) LABEL_finish_##lab
1596
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1597
+ USAGE_ANALYSIS_INSN(BIN(finish));
1598
+ {
1599
+ #line 1107 "insns.def"
1600
+ #if OPT_CALL_THREADED_CODE
1601
+ rb_bug("unused instruction on OPT_CALL_THREADED_CODE");
1602
+ #else
1603
+ th->cfp++;
1604
+ return val;
1605
+ #endif
1606
+
1607
+ #line 1608 "vm.inc"
1608
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
1609
+ PUSH(val);
1610
+ #undef CURRENT_INSN_finish
1611
+ #undef INSN_IS_SC
1612
+ #undef INSN_LABEL
1613
+ #undef LABEL_IS_SC
1614
+ END_INSN(finish);}}}
1615
+ INSN_ENTRY(throw){
1616
+ {
1617
+ VALUE val;
1618
+ rb_num_t throw_state = (rb_num_t)GET_OPERAND(1);
1619
+ VALUE throwobj = TOPN(0);
1620
+ DEBUG_ENTER_INSN("throw");
1621
+ ADD_PC(1+1);
1622
+ PREFETCH(GET_PC());
1623
+ POPN(1);
1624
+ #define CURRENT_INSN_throw 1
1625
+ #define INSN_IS_SC() 0
1626
+ #define INSN_LABEL(lab) LABEL_throw_##lab
1627
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1628
+ USAGE_ANALYSIS_INSN(BIN(throw));
1629
+ USAGE_ANALYSIS_OPERAND(BIN(throw), 0, throw_state);
1630
+ {
1631
+ #line 1130 "insns.def"
1632
+ RUBY_VM_CHECK_INTS();
1633
+ val = vm_throw(th, GET_CFP(), throw_state, throwobj);
1634
+ THROW_EXCEPTION(val);
1635
+ /* unreachable */
1636
+
1637
+ #line 1638 "vm.inc"
1638
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
1639
+ PUSH(val);
1640
+ #undef CURRENT_INSN_throw
1641
+ #undef INSN_IS_SC
1642
+ #undef INSN_LABEL
1643
+ #undef LABEL_IS_SC
1644
+ END_INSN(throw);}}}
1645
+ INSN_ENTRY(jump){
1646
+ {
1647
+ OFFSET dst = (OFFSET)GET_OPERAND(1);
1648
+
1649
+ DEBUG_ENTER_INSN("jump");
1650
+ ADD_PC(1+1);
1651
+ PREFETCH(GET_PC());
1652
+ #define CURRENT_INSN_jump 1
1653
+ #define INSN_IS_SC() 0
1654
+ #define INSN_LABEL(lab) LABEL_jump_##lab
1655
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1656
+ USAGE_ANALYSIS_INSN(BIN(jump));
1657
+ USAGE_ANALYSIS_OPERAND(BIN(jump), 0, dst);
1658
+ {
1659
+ #line 1151 "insns.def"
1660
+ RUBY_VM_CHECK_INTS();
1661
+ JUMP(dst);
1662
+
1663
+ #line 1664 "vm.inc"
1664
+ #undef CURRENT_INSN_jump
1665
+ #undef INSN_IS_SC
1666
+ #undef INSN_LABEL
1667
+ #undef LABEL_IS_SC
1668
+ END_INSN(jump);}}}
1669
+ INSN_ENTRY(branchif){
1670
+ {
1671
+ OFFSET dst = (OFFSET)GET_OPERAND(1);
1672
+ VALUE val = TOPN(0);
1673
+ DEBUG_ENTER_INSN("branchif");
1674
+ ADD_PC(1+1);
1675
+ PREFETCH(GET_PC());
1676
+ POPN(1);
1677
+ #define CURRENT_INSN_branchif 1
1678
+ #define INSN_IS_SC() 0
1679
+ #define INSN_LABEL(lab) LABEL_branchif_##lab
1680
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1681
+ USAGE_ANALYSIS_INSN(BIN(branchif));
1682
+ USAGE_ANALYSIS_OPERAND(BIN(branchif), 0, dst);
1683
+ {
1684
+ #line 1166 "insns.def"
1685
+ if (RTEST(val)) {
1686
+ RUBY_VM_CHECK_INTS();
1687
+ JUMP(dst);
1688
+ }
1689
+
1690
+ #line 1691 "vm.inc"
1691
+ #undef CURRENT_INSN_branchif
1692
+ #undef INSN_IS_SC
1693
+ #undef INSN_LABEL
1694
+ #undef LABEL_IS_SC
1695
+ END_INSN(branchif);}}}
1696
+ INSN_ENTRY(branchunless){
1697
+ {
1698
+ OFFSET dst = (OFFSET)GET_OPERAND(1);
1699
+ VALUE val = TOPN(0);
1700
+ DEBUG_ENTER_INSN("branchunless");
1701
+ ADD_PC(1+1);
1702
+ PREFETCH(GET_PC());
1703
+ POPN(1);
1704
+ #define CURRENT_INSN_branchunless 1
1705
+ #define INSN_IS_SC() 0
1706
+ #define INSN_LABEL(lab) LABEL_branchunless_##lab
1707
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1708
+ USAGE_ANALYSIS_INSN(BIN(branchunless));
1709
+ USAGE_ANALYSIS_OPERAND(BIN(branchunless), 0, dst);
1710
+ {
1711
+ #line 1183 "insns.def"
1712
+ if (!RTEST(val)) {
1713
+ RUBY_VM_CHECK_INTS();
1714
+ JUMP(dst);
1715
+ }
1716
+
1717
+ #line 1718 "vm.inc"
1718
+ #undef CURRENT_INSN_branchunless
1719
+ #undef INSN_IS_SC
1720
+ #undef INSN_LABEL
1721
+ #undef LABEL_IS_SC
1722
+ END_INSN(branchunless);}}}
1723
+ INSN_ENTRY(getinlinecache){
1724
+ {
1725
+ VALUE val;
1726
+ IC ic = (IC)GET_OPERAND(2);
1727
+ OFFSET dst = (OFFSET)GET_OPERAND(1);
1728
+
1729
+ DEBUG_ENTER_INSN("getinlinecache");
1730
+ ADD_PC(1+2);
1731
+ PREFETCH(GET_PC());
1732
+ #define CURRENT_INSN_getinlinecache 1
1733
+ #define INSN_IS_SC() 0
1734
+ #define INSN_LABEL(lab) LABEL_getinlinecache_##lab
1735
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1736
+ USAGE_ANALYSIS_INSN(BIN(getinlinecache));
1737
+ USAGE_ANALYSIS_OPERAND(BIN(getinlinecache), 0, dst);
1738
+ USAGE_ANALYSIS_OPERAND(BIN(getinlinecache), 1, ic);
1739
+ {
1740
+ #line 1205 "insns.def"
1741
+ if (ic->ic_vmstat == GET_VM_STATE_VERSION()) {
1742
+ val = ic->ic_value.value;
1743
+ JUMP(dst);
1744
+ }
1745
+ else {
1746
+ /* none */
1747
+ val = Qnil;
1748
+ }
1749
+
1750
+ #line 1751 "vm.inc"
1751
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
1752
+ PUSH(val);
1753
+ #undef CURRENT_INSN_getinlinecache
1754
+ #undef INSN_IS_SC
1755
+ #undef INSN_LABEL
1756
+ #undef LABEL_IS_SC
1757
+ END_INSN(getinlinecache);}}}
1758
+ INSN_ENTRY(onceinlinecache){
1759
+ {
1760
+ VALUE val;
1761
+ IC ic = (IC)GET_OPERAND(2);
1762
+ OFFSET dst = (OFFSET)GET_OPERAND(1);
1763
+
1764
+ DEBUG_ENTER_INSN("onceinlinecache");
1765
+ ADD_PC(1+2);
1766
+ PREFETCH(GET_PC());
1767
+ #define CURRENT_INSN_onceinlinecache 1
1768
+ #define INSN_IS_SC() 0
1769
+ #define INSN_LABEL(lab) LABEL_onceinlinecache_##lab
1770
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1771
+ USAGE_ANALYSIS_INSN(BIN(onceinlinecache));
1772
+ USAGE_ANALYSIS_OPERAND(BIN(onceinlinecache), 0, dst);
1773
+ USAGE_ANALYSIS_OPERAND(BIN(onceinlinecache), 1, ic);
1774
+ {
1775
+ #line 1226 "insns.def"
1776
+ retry:
1777
+ if (ic->ic_vmstat) {
1778
+ val = ic->ic_value.value;
1779
+ JUMP(dst);
1780
+ }
1781
+ else if (ic->ic_value.value == Qundef)
1782
+ {
1783
+ RUBY_VM_CHECK_INTS();
1784
+ rb_thread_schedule();
1785
+ goto retry;
1786
+ }
1787
+ else {
1788
+ /* none */
1789
+ ic->ic_value.value = Qundef;
1790
+ val = Qnil;
1791
+ }
1792
+
1793
+ #line 1794 "vm.inc"
1794
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
1795
+ PUSH(val);
1796
+ #undef CURRENT_INSN_onceinlinecache
1797
+ #undef INSN_IS_SC
1798
+ #undef INSN_LABEL
1799
+ #undef LABEL_IS_SC
1800
+ END_INSN(onceinlinecache);}}}
1801
+ INSN_ENTRY(setinlinecache){
1802
+ {
1803
+ IC ic = (IC)GET_OPERAND(1);
1804
+ VALUE val = TOPN(0);
1805
+ DEBUG_ENTER_INSN("setinlinecache");
1806
+ ADD_PC(1+1);
1807
+ PREFETCH(GET_PC());
1808
+ POPN(1);
1809
+ #define CURRENT_INSN_setinlinecache 1
1810
+ #define INSN_IS_SC() 0
1811
+ #define INSN_LABEL(lab) LABEL_setinlinecache_##lab
1812
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1813
+ USAGE_ANALYSIS_INSN(BIN(setinlinecache));
1814
+ USAGE_ANALYSIS_OPERAND(BIN(setinlinecache), 0, ic);
1815
+ {
1816
+ #line 1255 "insns.def"
1817
+ if (ic->ic_value.value == Qundef) {
1818
+ rb_ary_push(GET_ISEQ()->mark_ary, val);
1819
+ }
1820
+ ic->ic_value.value = val;
1821
+ ic->ic_vmstat = GET_VM_STATE_VERSION() - ruby_vm_const_missing_count;
1822
+ ruby_vm_const_missing_count = 0;
1823
+
1824
+ #line 1825 "vm.inc"
1825
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
1826
+ PUSH(val);
1827
+ #undef CURRENT_INSN_setinlinecache
1828
+ #undef INSN_IS_SC
1829
+ #undef INSN_LABEL
1830
+ #undef LABEL_IS_SC
1831
+ END_INSN(setinlinecache);}}}
1832
+ INSN_ENTRY(opt_case_dispatch){
1833
+ {
1834
+ OFFSET else_offset = (OFFSET)GET_OPERAND(2);
1835
+ CDHASH hash = (CDHASH)GET_OPERAND(1);
1836
+ VALUE key = TOPN(0);
1837
+ DEBUG_ENTER_INSN("opt_case_dispatch");
1838
+ ADD_PC(1+2);
1839
+ PREFETCH(GET_PC());
1840
+ POPN(1);
1841
+ #define CURRENT_INSN_opt_case_dispatch 1
1842
+ #define INSN_IS_SC() 0
1843
+ #define INSN_LABEL(lab) LABEL_opt_case_dispatch_##lab
1844
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1845
+ USAGE_ANALYSIS_INSN(BIN(opt_case_dispatch));
1846
+ USAGE_ANALYSIS_OPERAND(BIN(opt_case_dispatch), 0, hash);
1847
+ USAGE_ANALYSIS_OPERAND(BIN(opt_case_dispatch), 1, else_offset);
1848
+ {
1849
+ #line 1274 "insns.def"
1850
+ switch(TYPE(key)) {
1851
+ case T_FLOAT: {
1852
+ double ival;
1853
+ if (modf(RFLOAT_VALUE(key), &ival) == 0.0) {
1854
+ key = FIXABLE(ival) ? LONG2FIX((long)ival) : rb_dbl2big(ival);
1855
+ }
1856
+ }
1857
+ case T_SYMBOL: /* fall through */
1858
+ case T_FIXNUM:
1859
+ case T_BIGNUM:
1860
+ case T_STRING:
1861
+ if (BASIC_OP_UNREDEFINED_P(BOP_EQQ)) {
1862
+ st_data_t val;
1863
+ if (st_lookup(RHASH_TBL(hash), key, &val)) {
1864
+ JUMP(FIX2INT((VALUE)val));
1865
+ }
1866
+ else {
1867
+ JUMP(else_offset);
1868
+ }
1869
+ break;
1870
+ }
1871
+ default:
1872
+ break;
1873
+ }
1874
+
1875
+ #line 1876 "vm.inc"
1876
+ #undef CURRENT_INSN_opt_case_dispatch
1877
+ #undef INSN_IS_SC
1878
+ #undef INSN_LABEL
1879
+ #undef LABEL_IS_SC
1880
+ END_INSN(opt_case_dispatch);}}}
1881
+ INSN_ENTRY(opt_checkenv){
1882
+ {
1883
+
1884
+
1885
+ DEBUG_ENTER_INSN("opt_checkenv");
1886
+ ADD_PC(1+0);
1887
+ PREFETCH(GET_PC());
1888
+ #define CURRENT_INSN_opt_checkenv 1
1889
+ #define INSN_IS_SC() 0
1890
+ #define INSN_LABEL(lab) LABEL_opt_checkenv_##lab
1891
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1892
+ USAGE_ANALYSIS_INSN(BIN(opt_checkenv));
1893
+ {
1894
+ #line 1311 "insns.def"
1895
+ if (GET_CFP()->bp != GET_DFP() + 1) {
1896
+ VALUE *new_dfp = GET_CFP()->bp - 1;
1897
+ /* TODO: copy env and clean stack at creating env? */
1898
+ *new_dfp = *GET_DFP();
1899
+ SET_DFP(new_dfp);
1900
+ }
1901
+
1902
+ #line 1903 "vm.inc"
1903
+ #undef CURRENT_INSN_opt_checkenv
1904
+ #undef INSN_IS_SC
1905
+ #undef INSN_LABEL
1906
+ #undef LABEL_IS_SC
1907
+ END_INSN(opt_checkenv);}}}
1908
+ INSN_ENTRY(opt_plus){
1909
+ {
1910
+ VALUE val;
1911
+ IC ic = (IC)GET_OPERAND(1);
1912
+ VALUE recv = TOPN(1);
1913
+ VALUE obj = TOPN(0);
1914
+ DEBUG_ENTER_INSN("opt_plus");
1915
+ ADD_PC(1+1);
1916
+ PREFETCH(GET_PC());
1917
+ POPN(2);
1918
+ #define CURRENT_INSN_opt_plus 1
1919
+ #define INSN_IS_SC() 0
1920
+ #define INSN_LABEL(lab) LABEL_opt_plus_##lab
1921
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1922
+ USAGE_ANALYSIS_INSN(BIN(opt_plus));
1923
+ USAGE_ANALYSIS_OPERAND(BIN(opt_plus), 0, ic);
1924
+ {
1925
+ #line 1333 "insns.def"
1926
+ if (0) {
1927
+
1928
+ }
1929
+ #if 1
1930
+ else if (FIXNUM_2_P(recv, obj) &&
1931
+ BASIC_OP_UNREDEFINED_P(BOP_PLUS)) {
1932
+ /* fixnum + fixnum */
1933
+ #ifndef LONG_LONG_VALUE
1934
+ val = (recv + (obj & (~1)));
1935
+ if ((~(recv ^ obj) & (recv ^ val)) &
1936
+ ((VALUE)0x01 << ((sizeof(VALUE) * CHAR_BIT) - 1))) {
1937
+ val = rb_big_plus(rb_int2big(FIX2LONG(recv)),
1938
+ rb_int2big(FIX2LONG(obj)));
1939
+ }
1940
+ #else
1941
+ long a, b, c;
1942
+ a = FIX2LONG(recv);
1943
+ b = FIX2LONG(obj);
1944
+ c = a + b;
1945
+ if (FIXABLE(c)) {
1946
+ val = LONG2FIX(c);
1947
+ }
1948
+ else {
1949
+ val = rb_big_plus(rb_int2big(a), rb_int2big(b));
1950
+ }
1951
+ #endif
1952
+ }
1953
+ #endif
1954
+
1955
+ else if (!SPECIAL_CONST_P(recv) && !SPECIAL_CONST_P(obj)) {
1956
+ if (0) {
1957
+ }
1958
+ #if 1
1959
+ else if (HEAP_CLASS_OF(recv) == rb_cFloat &&
1960
+ HEAP_CLASS_OF(obj) == rb_cFloat &&
1961
+ BASIC_OP_UNREDEFINED_P(BOP_PLUS)) {
1962
+ val = DBL2NUM(RFLOAT_VALUE(recv) + RFLOAT_VALUE(obj));
1963
+ }
1964
+ #endif
1965
+
1966
+ #if 1
1967
+ else if (HEAP_CLASS_OF(recv) == rb_cString &&
1968
+ HEAP_CLASS_OF(obj) == rb_cString &&
1969
+ BASIC_OP_UNREDEFINED_P(BOP_PLUS)) {
1970
+ val = rb_str_plus(recv, obj);
1971
+ }
1972
+ #endif
1973
+ #if 1
1974
+ else if (HEAP_CLASS_OF(recv) == rb_cArray &&
1975
+ BASIC_OP_UNREDEFINED_P(BOP_PLUS)) {
1976
+ val = rb_ary_plus(recv, obj);
1977
+ }
1978
+ #endif
1979
+ else {
1980
+ goto INSN_LABEL(normal_dispatch);
1981
+ }
1982
+ }
1983
+ else {
1984
+ INSN_LABEL(normal_dispatch):
1985
+ PUSH(recv);
1986
+ PUSH(obj);
1987
+ CALL_SIMPLE_METHOD(1, idPLUS, recv);
1988
+ }
1989
+
1990
+ #line 1991 "vm.inc"
1991
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
1992
+ PUSH(val);
1993
+ #undef CURRENT_INSN_opt_plus
1994
+ #undef INSN_IS_SC
1995
+ #undef INSN_LABEL
1996
+ #undef LABEL_IS_SC
1997
+ END_INSN(opt_plus);}}}
1998
+ INSN_ENTRY(opt_minus){
1999
+ {
2000
+ VALUE val;
2001
+ IC ic = (IC)GET_OPERAND(1);
2002
+ VALUE recv = TOPN(1);
2003
+ VALUE obj = TOPN(0);
2004
+ DEBUG_ENTER_INSN("opt_minus");
2005
+ ADD_PC(1+1);
2006
+ PREFETCH(GET_PC());
2007
+ POPN(2);
2008
+ #define CURRENT_INSN_opt_minus 1
2009
+ #define INSN_IS_SC() 0
2010
+ #define INSN_LABEL(lab) LABEL_opt_minus_##lab
2011
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2012
+ USAGE_ANALYSIS_INSN(BIN(opt_minus));
2013
+ USAGE_ANALYSIS_OPERAND(BIN(opt_minus), 0, ic);
2014
+ {
2015
+ #line 1409 "insns.def"
2016
+ if (FIXNUM_2_P(recv, obj) &&
2017
+ BASIC_OP_UNREDEFINED_P(BOP_MINUS)) {
2018
+ long a, b, c;
2019
+
2020
+ a = FIX2LONG(recv);
2021
+ b = FIX2LONG(obj);
2022
+ c = a - b;
2023
+
2024
+ if (FIXABLE(c)) {
2025
+ val = LONG2FIX(c);
2026
+ }
2027
+ else {
2028
+ val = rb_big_minus(rb_int2big(a), rb_int2big(b));
2029
+ }
2030
+ }
2031
+ else if (!SPECIAL_CONST_P(recv) && !SPECIAL_CONST_P(obj)) {
2032
+ if (0) {
2033
+ }
2034
+ #if 1
2035
+ else if (HEAP_CLASS_OF(recv) == rb_cFloat &&
2036
+ HEAP_CLASS_OF(obj) == rb_cFloat &&
2037
+ BASIC_OP_UNREDEFINED_P(BOP_MINUS)) {
2038
+ val = DBL2NUM(RFLOAT_VALUE(recv) - RFLOAT_VALUE(obj));
2039
+ }
2040
+ #endif
2041
+ else {
2042
+ goto INSN_LABEL(normal_dispatch);
2043
+ }
2044
+ }
2045
+ else {
2046
+ /* other */
2047
+ INSN_LABEL(normal_dispatch):
2048
+ PUSH(recv);
2049
+ PUSH(obj);
2050
+ CALL_SIMPLE_METHOD(1, idMINUS, recv);
2051
+ }
2052
+
2053
+ #line 2054 "vm.inc"
2054
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
2055
+ PUSH(val);
2056
+ #undef CURRENT_INSN_opt_minus
2057
+ #undef INSN_IS_SC
2058
+ #undef INSN_LABEL
2059
+ #undef LABEL_IS_SC
2060
+ END_INSN(opt_minus);}}}
2061
+ INSN_ENTRY(opt_mult){
2062
+ {
2063
+ VALUE val;
2064
+ IC ic = (IC)GET_OPERAND(1);
2065
+ VALUE recv = TOPN(1);
2066
+ VALUE obj = TOPN(0);
2067
+ DEBUG_ENTER_INSN("opt_mult");
2068
+ ADD_PC(1+1);
2069
+ PREFETCH(GET_PC());
2070
+ POPN(2);
2071
+ #define CURRENT_INSN_opt_mult 1
2072
+ #define INSN_IS_SC() 0
2073
+ #define INSN_LABEL(lab) LABEL_opt_mult_##lab
2074
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2075
+ USAGE_ANALYSIS_INSN(BIN(opt_mult));
2076
+ USAGE_ANALYSIS_OPERAND(BIN(opt_mult), 0, ic);
2077
+ {
2078
+ #line 1458 "insns.def"
2079
+ if (FIXNUM_2_P(recv, obj) &&
2080
+ BASIC_OP_UNREDEFINED_P(BOP_MULT)) {
2081
+ long a, b;
2082
+
2083
+ a = FIX2LONG(recv);
2084
+ if (a == 0) {
2085
+ val = recv;
2086
+ }
2087
+ else {
2088
+ volatile long c;
2089
+ b = FIX2LONG(obj);
2090
+ c = a * b;
2091
+
2092
+ if (FIXABLE(c) && c / a == b) {
2093
+ val = LONG2FIX(c);
2094
+ }
2095
+ else {
2096
+ val = rb_big_mul(rb_int2big(a), rb_int2big(b));
2097
+ }
2098
+ }
2099
+ }
2100
+ else if (!SPECIAL_CONST_P(recv) && !SPECIAL_CONST_P(obj)) {
2101
+ if (0) {
2102
+ }
2103
+ #if 1
2104
+ else if (HEAP_CLASS_OF(recv) == rb_cFloat &&
2105
+ HEAP_CLASS_OF(obj) == rb_cFloat &&
2106
+ BASIC_OP_UNREDEFINED_P(BOP_MULT)) {
2107
+ val = DBL2NUM(RFLOAT_VALUE(recv) * RFLOAT_VALUE(obj));
2108
+ }
2109
+ #endif
2110
+ else {
2111
+ goto INSN_LABEL(normal_dispatch);
2112
+ }
2113
+ }
2114
+ else {
2115
+ INSN_LABEL(normal_dispatch):
2116
+ PUSH(recv);
2117
+ PUSH(obj);
2118
+ CALL_SIMPLE_METHOD(1, idMULT, recv);
2119
+ }
2120
+
2121
+ #line 2122 "vm.inc"
2122
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
2123
+ PUSH(val);
2124
+ #undef CURRENT_INSN_opt_mult
2125
+ #undef INSN_IS_SC
2126
+ #undef INSN_LABEL
2127
+ #undef LABEL_IS_SC
2128
+ END_INSN(opt_mult);}}}
2129
+ INSN_ENTRY(opt_div){
2130
+ {
2131
+ VALUE val;
2132
+ IC ic = (IC)GET_OPERAND(1);
2133
+ VALUE recv = TOPN(1);
2134
+ VALUE obj = TOPN(0);
2135
+ DEBUG_ENTER_INSN("opt_div");
2136
+ ADD_PC(1+1);
2137
+ PREFETCH(GET_PC());
2138
+ POPN(2);
2139
+ #define CURRENT_INSN_opt_div 1
2140
+ #define INSN_IS_SC() 0
2141
+ #define INSN_LABEL(lab) LABEL_opt_div_##lab
2142
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2143
+ USAGE_ANALYSIS_INSN(BIN(opt_div));
2144
+ USAGE_ANALYSIS_OPERAND(BIN(opt_div), 0, ic);
2145
+ {
2146
+ #line 1512 "insns.def"
2147
+ if (FIXNUM_2_P(recv, obj) &&
2148
+ BASIC_OP_UNREDEFINED_P(BOP_DIV)) {
2149
+ long x, y, div;
2150
+
2151
+ x = FIX2LONG(recv);
2152
+ y = FIX2LONG(obj);
2153
+ {
2154
+ /* copied from numeric.c#fixdivmod */
2155
+ long mod;
2156
+ if (y == 0)
2157
+ goto INSN_LABEL(normal_dispatch);
2158
+ if (y < 0) {
2159
+ if (x < 0)
2160
+ div = -x / -y;
2161
+ else
2162
+ div = -(x / -y);
2163
+ }
2164
+ else {
2165
+ if (x < 0)
2166
+ div = -(-x / y);
2167
+ else
2168
+ div = x / y;
2169
+ }
2170
+ mod = x - div * y;
2171
+ if ((mod < 0 && y > 0) || (mod > 0 && y < 0)) {
2172
+ mod += y;
2173
+ div -= 1;
2174
+ }
2175
+ }
2176
+ val = LONG2NUM(div);
2177
+ }
2178
+ else if (!SPECIAL_CONST_P(recv) && !SPECIAL_CONST_P(obj)) {
2179
+ if (0) {
2180
+ }
2181
+ #if 1
2182
+ else if (HEAP_CLASS_OF(recv) == rb_cFloat &&
2183
+ HEAP_CLASS_OF(obj) == rb_cFloat &&
2184
+ BASIC_OP_UNREDEFINED_P(BOP_DIV)) {
2185
+ val = DBL2NUM(RFLOAT_VALUE(recv) / RFLOAT_VALUE(obj));
2186
+ }
2187
+ #endif
2188
+ else {
2189
+ goto INSN_LABEL(normal_dispatch);
2190
+ }
2191
+ }
2192
+ else {
2193
+ INSN_LABEL(normal_dispatch):
2194
+ PUSH(recv);
2195
+ PUSH(obj);
2196
+ CALL_SIMPLE_METHOD(1, idDIV, recv);
2197
+ }
2198
+
2199
+ #line 2200 "vm.inc"
2200
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
2201
+ PUSH(val);
2202
+ #undef CURRENT_INSN_opt_div
2203
+ #undef INSN_IS_SC
2204
+ #undef INSN_LABEL
2205
+ #undef LABEL_IS_SC
2206
+ END_INSN(opt_div);}}}
2207
+ INSN_ENTRY(opt_mod){
2208
+ {
2209
+ VALUE val;
2210
+ IC ic = (IC)GET_OPERAND(1);
2211
+ VALUE recv = TOPN(1);
2212
+ VALUE obj = TOPN(0);
2213
+ DEBUG_ENTER_INSN("opt_mod");
2214
+ ADD_PC(1+1);
2215
+ PREFETCH(GET_PC());
2216
+ POPN(2);
2217
+ #define CURRENT_INSN_opt_mod 1
2218
+ #define INSN_IS_SC() 0
2219
+ #define INSN_LABEL(lab) LABEL_opt_mod_##lab
2220
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2221
+ USAGE_ANALYSIS_INSN(BIN(opt_mod));
2222
+ USAGE_ANALYSIS_OPERAND(BIN(opt_mod), 0, ic);
2223
+ {
2224
+ #line 1576 "insns.def"
2225
+ if (FIXNUM_2_P(recv, obj) &&
2226
+ BASIC_OP_UNREDEFINED_P(BOP_MOD)) {
2227
+ long x, y, mod;
2228
+
2229
+ x = FIX2LONG(recv);
2230
+ y = FIX2LONG(obj);
2231
+ {
2232
+ /* copied from numeric.c#fixdivmod */
2233
+ long div;
2234
+
2235
+ if (y == 0)
2236
+ rb_num_zerodiv();
2237
+ if (y < 0) {
2238
+ if (x < 0)
2239
+ div = -x / -y;
2240
+ else
2241
+ div = -(x / -y);
2242
+ }
2243
+ else {
2244
+ if (x < 0)
2245
+ div = -(-x / y);
2246
+ else
2247
+ div = x / y;
2248
+ }
2249
+ mod = x - div * y;
2250
+ if ((mod < 0 && y > 0) || (mod > 0 && y < 0)) {
2251
+ mod += y;
2252
+ div -= 1;
2253
+ }
2254
+ }
2255
+ val = LONG2FIX(mod);
2256
+ }
2257
+ else if (!SPECIAL_CONST_P(recv) && !SPECIAL_CONST_P(obj)) {
2258
+ if (0) {
2259
+ }
2260
+ else if (HEAP_CLASS_OF(recv) == rb_cFloat &&
2261
+ HEAP_CLASS_OF(obj) == rb_cFloat &&
2262
+ BASIC_OP_UNREDEFINED_P(BOP_MOD)) {
2263
+ val = DBL2NUM(ruby_float_mod(RFLOAT_VALUE(recv), RFLOAT_VALUE(obj)));
2264
+ }
2265
+ else {
2266
+ goto INSN_LABEL(normal_dispatch);
2267
+ }
2268
+ }
2269
+ else {
2270
+ INSN_LABEL(normal_dispatch):
2271
+ PUSH(recv);
2272
+ PUSH(obj);
2273
+ CALL_SIMPLE_METHOD(1, idMOD, recv);
2274
+ }
2275
+
2276
+ #line 2277 "vm.inc"
2277
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
2278
+ PUSH(val);
2279
+ #undef CURRENT_INSN_opt_mod
2280
+ #undef INSN_IS_SC
2281
+ #undef INSN_LABEL
2282
+ #undef LABEL_IS_SC
2283
+ END_INSN(opt_mod);}}}
2284
+ INSN_ENTRY(opt_eq){
2285
+ {
2286
+ VALUE val;
2287
+ IC ic = (IC)GET_OPERAND(1);
2288
+ VALUE recv = TOPN(1);
2289
+ VALUE obj = TOPN(0);
2290
+ DEBUG_ENTER_INSN("opt_eq");
2291
+ ADD_PC(1+1);
2292
+ PREFETCH(GET_PC());
2293
+ POPN(2);
2294
+ #define CURRENT_INSN_opt_eq 1
2295
+ #define INSN_IS_SC() 0
2296
+ #define INSN_LABEL(lab) LABEL_opt_eq_##lab
2297
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2298
+ USAGE_ANALYSIS_INSN(BIN(opt_eq));
2299
+ USAGE_ANALYSIS_OPERAND(BIN(opt_eq), 0, ic);
2300
+ {
2301
+ #line 1639 "insns.def"
2302
+ val = opt_eq_func(recv, obj, ic);
2303
+
2304
+ if (val == Qundef) {
2305
+ /* other */
2306
+ PUSH(recv);
2307
+ PUSH(obj);
2308
+ CALL_SIMPLE_METHOD(1, idEq, recv);
2309
+ }
2310
+
2311
+ #line 2312 "vm.inc"
2312
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
2313
+ PUSH(val);
2314
+ #undef CURRENT_INSN_opt_eq
2315
+ #undef INSN_IS_SC
2316
+ #undef INSN_LABEL
2317
+ #undef LABEL_IS_SC
2318
+ END_INSN(opt_eq);}}}
2319
+ INSN_ENTRY(opt_neq){
2320
+ {
2321
+ VALUE val;
2322
+ IC ic_eq = (IC)GET_OPERAND(2);
2323
+ IC ic = (IC)GET_OPERAND(1);
2324
+ VALUE recv = TOPN(1);
2325
+ VALUE obj = TOPN(0);
2326
+ DEBUG_ENTER_INSN("opt_neq");
2327
+ ADD_PC(1+2);
2328
+ PREFETCH(GET_PC());
2329
+ POPN(2);
2330
+ #define CURRENT_INSN_opt_neq 1
2331
+ #define INSN_IS_SC() 0
2332
+ #define INSN_LABEL(lab) LABEL_opt_neq_##lab
2333
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2334
+ USAGE_ANALYSIS_INSN(BIN(opt_neq));
2335
+ USAGE_ANALYSIS_OPERAND(BIN(opt_neq), 0, ic);
2336
+ USAGE_ANALYSIS_OPERAND(BIN(opt_neq), 1, ic_eq);
2337
+ {
2338
+ #line 1660 "insns.def"
2339
+ extern VALUE rb_obj_not_equal(VALUE obj1, VALUE obj2);
2340
+ const rb_method_entry_t *me = vm_method_search(idNeq, CLASS_OF(recv), ic);
2341
+ val = Qundef;
2342
+
2343
+ if (check_cfunc(me, rb_obj_not_equal)) {
2344
+ val = opt_eq_func(recv, obj, ic_eq);
2345
+
2346
+ if (val != Qundef) {
2347
+ val = RTEST(val) ? Qfalse : Qtrue;
2348
+ }
2349
+ }
2350
+
2351
+ if (val == Qundef) {
2352
+ /* other */
2353
+ PUSH(recv);
2354
+ PUSH(obj);
2355
+ CALL_SIMPLE_METHOD(1, idNeq, recv);
2356
+ }
2357
+
2358
+ #line 2359 "vm.inc"
2359
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
2360
+ PUSH(val);
2361
+ #undef CURRENT_INSN_opt_neq
2362
+ #undef INSN_IS_SC
2363
+ #undef INSN_LABEL
2364
+ #undef LABEL_IS_SC
2365
+ END_INSN(opt_neq);}}}
2366
+ INSN_ENTRY(opt_lt){
2367
+ {
2368
+ VALUE val;
2369
+ IC ic = (IC)GET_OPERAND(1);
2370
+ VALUE recv = TOPN(1);
2371
+ VALUE obj = TOPN(0);
2372
+ DEBUG_ENTER_INSN("opt_lt");
2373
+ ADD_PC(1+1);
2374
+ PREFETCH(GET_PC());
2375
+ POPN(2);
2376
+ #define CURRENT_INSN_opt_lt 1
2377
+ #define INSN_IS_SC() 0
2378
+ #define INSN_LABEL(lab) LABEL_opt_lt_##lab
2379
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2380
+ USAGE_ANALYSIS_INSN(BIN(opt_lt));
2381
+ USAGE_ANALYSIS_OPERAND(BIN(opt_lt), 0, ic);
2382
+ {
2383
+ #line 1691 "insns.def"
2384
+ if (FIXNUM_2_P(recv, obj) &&
2385
+ BASIC_OP_UNREDEFINED_P(BOP_LT)) {
2386
+ SIGNED_VALUE a = recv, b = obj;
2387
+
2388
+ if (a < b) {
2389
+ val = Qtrue;
2390
+ }
2391
+ else {
2392
+ val = Qfalse;
2393
+ }
2394
+ }
2395
+ else if (!SPECIAL_CONST_P(recv) && !SPECIAL_CONST_P(obj)) {
2396
+ if (0) {
2397
+ }
2398
+ #if 1
2399
+ else if (HEAP_CLASS_OF(recv) == rb_cFloat &&
2400
+ HEAP_CLASS_OF(obj) == rb_cFloat &&
2401
+ BASIC_OP_UNREDEFINED_P(BOP_LT)) {
2402
+ double a = RFLOAT_VALUE(recv);
2403
+ double b = RFLOAT_VALUE(obj);
2404
+ #if defined(_MSC_VER) && _MSC_VER < 1300
2405
+ if (isnan(a) || isnan(b)) val = Qfalse;
2406
+ else
2407
+ #endif
2408
+ val = a < b ? Qtrue : Qfalse;
2409
+ }
2410
+ #endif
2411
+ else {
2412
+ goto INSN_LABEL(normal_dispatch);
2413
+ }
2414
+ }
2415
+ else {
2416
+ INSN_LABEL(normal_dispatch):
2417
+ PUSH(recv);
2418
+ PUSH(obj);
2419
+ CALL_SIMPLE_METHOD(1, idLT, recv);
2420
+ }
2421
+
2422
+ #line 2423 "vm.inc"
2423
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
2424
+ PUSH(val);
2425
+ #undef CURRENT_INSN_opt_lt
2426
+ #undef INSN_IS_SC
2427
+ #undef INSN_LABEL
2428
+ #undef LABEL_IS_SC
2429
+ END_INSN(opt_lt);}}}
2430
+ INSN_ENTRY(opt_le){
2431
+ {
2432
+ VALUE val;
2433
+ IC ic = (IC)GET_OPERAND(1);
2434
+ VALUE recv = TOPN(1);
2435
+ VALUE obj = TOPN(0);
2436
+ DEBUG_ENTER_INSN("opt_le");
2437
+ ADD_PC(1+1);
2438
+ PREFETCH(GET_PC());
2439
+ POPN(2);
2440
+ #define CURRENT_INSN_opt_le 1
2441
+ #define INSN_IS_SC() 0
2442
+ #define INSN_LABEL(lab) LABEL_opt_le_##lab
2443
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2444
+ USAGE_ANALYSIS_INSN(BIN(opt_le));
2445
+ USAGE_ANALYSIS_OPERAND(BIN(opt_le), 0, ic);
2446
+ {
2447
+ #line 1741 "insns.def"
2448
+ if (FIXNUM_2_P(recv, obj) &&
2449
+ BASIC_OP_UNREDEFINED_P(BOP_LE)) {
2450
+ SIGNED_VALUE a = recv, b = obj;
2451
+
2452
+ if (a <= b) {
2453
+ val = Qtrue;
2454
+ }
2455
+ else {
2456
+ val = Qfalse;
2457
+ }
2458
+ }
2459
+ else {
2460
+ /* other */
2461
+ PUSH(recv);
2462
+ PUSH(obj);
2463
+ CALL_SIMPLE_METHOD(1, idLE, recv);
2464
+ }
2465
+
2466
+ #line 2467 "vm.inc"
2467
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
2468
+ PUSH(val);
2469
+ #undef CURRENT_INSN_opt_le
2470
+ #undef INSN_IS_SC
2471
+ #undef INSN_LABEL
2472
+ #undef LABEL_IS_SC
2473
+ END_INSN(opt_le);}}}
2474
+ INSN_ENTRY(opt_gt){
2475
+ {
2476
+ VALUE val;
2477
+ IC ic = (IC)GET_OPERAND(1);
2478
+ VALUE recv = TOPN(1);
2479
+ VALUE obj = TOPN(0);
2480
+ DEBUG_ENTER_INSN("opt_gt");
2481
+ ADD_PC(1+1);
2482
+ PREFETCH(GET_PC());
2483
+ POPN(2);
2484
+ #define CURRENT_INSN_opt_gt 1
2485
+ #define INSN_IS_SC() 0
2486
+ #define INSN_LABEL(lab) LABEL_opt_gt_##lab
2487
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2488
+ USAGE_ANALYSIS_INSN(BIN(opt_gt));
2489
+ USAGE_ANALYSIS_OPERAND(BIN(opt_gt), 0, ic);
2490
+ {
2491
+ #line 1771 "insns.def"
2492
+ if (FIXNUM_2_P(recv, obj) &&
2493
+ BASIC_OP_UNREDEFINED_P(BOP_GT)) {
2494
+ SIGNED_VALUE a = recv, b = obj;
2495
+
2496
+ if (a > b) {
2497
+ val = Qtrue;
2498
+ }
2499
+ else {
2500
+ val = Qfalse;
2501
+ }
2502
+ }
2503
+ else if (!SPECIAL_CONST_P(recv) && !SPECIAL_CONST_P(obj)) {
2504
+ if (0) {
2505
+ }
2506
+ #if 1
2507
+ else if (HEAP_CLASS_OF(recv) == rb_cFloat &&
2508
+ HEAP_CLASS_OF(obj) == rb_cFloat &&
2509
+ BASIC_OP_UNREDEFINED_P(BOP_GT)) {
2510
+ double a = RFLOAT_VALUE(recv);
2511
+ double b = RFLOAT_VALUE(obj);
2512
+ #if defined(_MSC_VER) && _MSC_VER < 1300
2513
+ if (isnan(a) || isnan(b)) val = Qfalse;
2514
+ else
2515
+ #endif
2516
+ val = a > b ? Qtrue : Qfalse;
2517
+ }
2518
+ #endif
2519
+ else {
2520
+ goto INSN_LABEL(normal_dispatch);
2521
+ }
2522
+ }
2523
+ else {
2524
+ INSN_LABEL(normal_dispatch):
2525
+ PUSH(recv);
2526
+ PUSH(obj);
2527
+ CALL_SIMPLE_METHOD(1, idGT, recv);
2528
+ }
2529
+
2530
+ #line 2531 "vm.inc"
2531
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
2532
+ PUSH(val);
2533
+ #undef CURRENT_INSN_opt_gt
2534
+ #undef INSN_IS_SC
2535
+ #undef INSN_LABEL
2536
+ #undef LABEL_IS_SC
2537
+ END_INSN(opt_gt);}}}
2538
+ INSN_ENTRY(opt_ge){
2539
+ {
2540
+ VALUE val;
2541
+ IC ic = (IC)GET_OPERAND(1);
2542
+ VALUE recv = TOPN(1);
2543
+ VALUE obj = TOPN(0);
2544
+ DEBUG_ENTER_INSN("opt_ge");
2545
+ ADD_PC(1+1);
2546
+ PREFETCH(GET_PC());
2547
+ POPN(2);
2548
+ #define CURRENT_INSN_opt_ge 1
2549
+ #define INSN_IS_SC() 0
2550
+ #define INSN_LABEL(lab) LABEL_opt_ge_##lab
2551
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2552
+ USAGE_ANALYSIS_INSN(BIN(opt_ge));
2553
+ USAGE_ANALYSIS_OPERAND(BIN(opt_ge), 0, ic);
2554
+ {
2555
+ #line 1821 "insns.def"
2556
+ if (FIXNUM_2_P(recv, obj) &&
2557
+ BASIC_OP_UNREDEFINED_P(BOP_GE)) {
2558
+ SIGNED_VALUE a = recv, b = obj;
2559
+
2560
+ if (a >= b) {
2561
+ val = Qtrue;
2562
+ }
2563
+ else {
2564
+ val = Qfalse;
2565
+ }
2566
+ }
2567
+ else {
2568
+ PUSH(recv);
2569
+ PUSH(obj);
2570
+ CALL_SIMPLE_METHOD(1, idGE, recv);
2571
+ }
2572
+
2573
+ #line 2574 "vm.inc"
2574
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
2575
+ PUSH(val);
2576
+ #undef CURRENT_INSN_opt_ge
2577
+ #undef INSN_IS_SC
2578
+ #undef INSN_LABEL
2579
+ #undef LABEL_IS_SC
2580
+ END_INSN(opt_ge);}}}
2581
+ INSN_ENTRY(opt_ltlt){
2582
+ {
2583
+ VALUE val;
2584
+ IC ic = (IC)GET_OPERAND(1);
2585
+ VALUE recv = TOPN(1);
2586
+ VALUE obj = TOPN(0);
2587
+ DEBUG_ENTER_INSN("opt_ltlt");
2588
+ ADD_PC(1+1);
2589
+ PREFETCH(GET_PC());
2590
+ POPN(2);
2591
+ #define CURRENT_INSN_opt_ltlt 1
2592
+ #define INSN_IS_SC() 0
2593
+ #define INSN_LABEL(lab) LABEL_opt_ltlt_##lab
2594
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2595
+ USAGE_ANALYSIS_INSN(BIN(opt_ltlt));
2596
+ USAGE_ANALYSIS_OPERAND(BIN(opt_ltlt), 0, ic);
2597
+ {
2598
+ #line 1850 "insns.def"
2599
+ if (!SPECIAL_CONST_P(recv)) {
2600
+ if (0) {
2601
+ }
2602
+ else if (HEAP_CLASS_OF(recv) == rb_cString &&
2603
+ BASIC_OP_UNREDEFINED_P(BOP_LTLT)) {
2604
+ val = rb_str_concat(recv, obj);
2605
+ }
2606
+ else if (HEAP_CLASS_OF(recv) == rb_cArray &&
2607
+ BASIC_OP_UNREDEFINED_P(BOP_LTLT)) {
2608
+ val = rb_ary_push(recv, obj);
2609
+ }
2610
+ else {
2611
+ goto INSN_LABEL(normal_dispatch);
2612
+ }
2613
+ }
2614
+ else {
2615
+ INSN_LABEL(normal_dispatch):
2616
+ PUSH(recv);
2617
+ PUSH(obj);
2618
+ CALL_SIMPLE_METHOD(1, idLTLT, recv);
2619
+ }
2620
+
2621
+ #line 2622 "vm.inc"
2622
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
2623
+ PUSH(val);
2624
+ #undef CURRENT_INSN_opt_ltlt
2625
+ #undef INSN_IS_SC
2626
+ #undef INSN_LABEL
2627
+ #undef LABEL_IS_SC
2628
+ END_INSN(opt_ltlt);}}}
2629
+ INSN_ENTRY(opt_aref){
2630
+ {
2631
+ VALUE val;
2632
+ IC ic = (IC)GET_OPERAND(1);
2633
+ VALUE recv = TOPN(1);
2634
+ VALUE obj = TOPN(0);
2635
+ DEBUG_ENTER_INSN("opt_aref");
2636
+ ADD_PC(1+1);
2637
+ PREFETCH(GET_PC());
2638
+ POPN(2);
2639
+ #define CURRENT_INSN_opt_aref 1
2640
+ #define INSN_IS_SC() 0
2641
+ #define INSN_LABEL(lab) LABEL_opt_aref_##lab
2642
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2643
+ USAGE_ANALYSIS_INSN(BIN(opt_aref));
2644
+ USAGE_ANALYSIS_OPERAND(BIN(opt_aref), 0, ic);
2645
+ {
2646
+ #line 1884 "insns.def"
2647
+ if (!SPECIAL_CONST_P(recv) && BASIC_OP_UNREDEFINED_P(BOP_AREF)) {
2648
+ if (HEAP_CLASS_OF(recv) == rb_cArray && FIXNUM_P(obj)) {
2649
+ val = rb_ary_entry(recv, FIX2LONG(obj));
2650
+ }
2651
+ else if (HEAP_CLASS_OF(recv) == rb_cHash) {
2652
+ val = rb_hash_aref(recv, obj);
2653
+ }
2654
+ else {
2655
+ goto INSN_LABEL(normal_dispatch);
2656
+ }
2657
+ }
2658
+ else {
2659
+ INSN_LABEL(normal_dispatch):
2660
+ PUSH(recv);
2661
+ PUSH(obj);
2662
+ CALL_SIMPLE_METHOD(1, idAREF, recv);
2663
+ }
2664
+
2665
+ #line 2666 "vm.inc"
2666
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
2667
+ PUSH(val);
2668
+ #undef CURRENT_INSN_opt_aref
2669
+ #undef INSN_IS_SC
2670
+ #undef INSN_LABEL
2671
+ #undef LABEL_IS_SC
2672
+ END_INSN(opt_aref);}}}
2673
+ INSN_ENTRY(opt_aset){
2674
+ {
2675
+ VALUE val;
2676
+ IC ic = (IC)GET_OPERAND(1);
2677
+ VALUE recv = TOPN(2);
2678
+ VALUE obj = TOPN(1);
2679
+ VALUE set = TOPN(0);
2680
+ DEBUG_ENTER_INSN("opt_aset");
2681
+ ADD_PC(1+1);
2682
+ PREFETCH(GET_PC());
2683
+ POPN(3);
2684
+ #define CURRENT_INSN_opt_aset 1
2685
+ #define INSN_IS_SC() 0
2686
+ #define INSN_LABEL(lab) LABEL_opt_aset_##lab
2687
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2688
+ USAGE_ANALYSIS_INSN(BIN(opt_aset));
2689
+ USAGE_ANALYSIS_OPERAND(BIN(opt_aset), 0, ic);
2690
+ {
2691
+ #line 1914 "insns.def"
2692
+ if (!SPECIAL_CONST_P(recv) &&
2693
+ BASIC_OP_UNREDEFINED_P(BOP_ASET)) {
2694
+ if (HEAP_CLASS_OF(recv) == rb_cArray && FIXNUM_P(obj)) {
2695
+ rb_ary_store(recv, FIX2LONG(obj), set);
2696
+ val = set;
2697
+ }
2698
+ else if (HEAP_CLASS_OF(recv) == rb_cHash) {
2699
+ rb_hash_aset(recv, obj, set);
2700
+ val = set;
2701
+ }
2702
+ else {
2703
+ goto INSN_LABEL(normal_dispatch);
2704
+ }
2705
+ }
2706
+ else {
2707
+ INSN_LABEL(normal_dispatch):
2708
+ PUSH(recv);
2709
+ PUSH(obj);
2710
+ PUSH(set);
2711
+ CALL_SIMPLE_METHOD(2, idASET, recv);
2712
+ }
2713
+
2714
+ #line 2715 "vm.inc"
2715
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
2716
+ PUSH(val);
2717
+ #undef CURRENT_INSN_opt_aset
2718
+ #undef INSN_IS_SC
2719
+ #undef INSN_LABEL
2720
+ #undef LABEL_IS_SC
2721
+ END_INSN(opt_aset);}}}
2722
+ INSN_ENTRY(opt_length){
2723
+ {
2724
+ VALUE val;
2725
+ IC ic = (IC)GET_OPERAND(1);
2726
+ VALUE recv = TOPN(0);
2727
+ DEBUG_ENTER_INSN("opt_length");
2728
+ ADD_PC(1+1);
2729
+ PREFETCH(GET_PC());
2730
+ POPN(1);
2731
+ #define CURRENT_INSN_opt_length 1
2732
+ #define INSN_IS_SC() 0
2733
+ #define INSN_LABEL(lab) LABEL_opt_length_##lab
2734
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2735
+ USAGE_ANALYSIS_INSN(BIN(opt_length));
2736
+ USAGE_ANALYSIS_OPERAND(BIN(opt_length), 0, ic);
2737
+ {
2738
+ #line 1948 "insns.def"
2739
+ if (LIKELY(!SPECIAL_CONST_P(recv) &&
2740
+ BASIC_OP_UNREDEFINED_P(BOP_LENGTH))) {
2741
+ if (HEAP_CLASS_OF(recv) == rb_cString) {
2742
+ val = rb_str_length(recv);
2743
+ }
2744
+ else if (HEAP_CLASS_OF(recv) == rb_cArray) {
2745
+ val = LONG2NUM(RARRAY_LEN(recv));
2746
+ }
2747
+ else if (HEAP_CLASS_OF(recv) == rb_cHash) {
2748
+ val = INT2FIX(RHASH_SIZE(recv));
2749
+ }
2750
+ else {
2751
+ goto INSN_LABEL(normal_dispatch);
2752
+ }
2753
+ }
2754
+ else {
2755
+ INSN_LABEL(normal_dispatch):
2756
+ PUSH(recv);
2757
+ CALL_SIMPLE_METHOD(0, idLength, recv);
2758
+ }
2759
+
2760
+ #line 2761 "vm.inc"
2761
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
2762
+ PUSH(val);
2763
+ #undef CURRENT_INSN_opt_length
2764
+ #undef INSN_IS_SC
2765
+ #undef INSN_LABEL
2766
+ #undef LABEL_IS_SC
2767
+ END_INSN(opt_length);}}}
2768
+ INSN_ENTRY(opt_size){
2769
+ {
2770
+ VALUE val;
2771
+ IC ic = (IC)GET_OPERAND(1);
2772
+ VALUE recv = TOPN(0);
2773
+ DEBUG_ENTER_INSN("opt_size");
2774
+ ADD_PC(1+1);
2775
+ PREFETCH(GET_PC());
2776
+ POPN(1);
2777
+ #define CURRENT_INSN_opt_size 1
2778
+ #define INSN_IS_SC() 0
2779
+ #define INSN_LABEL(lab) LABEL_opt_size_##lab
2780
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2781
+ USAGE_ANALYSIS_INSN(BIN(opt_size));
2782
+ USAGE_ANALYSIS_OPERAND(BIN(opt_size), 0, ic);
2783
+ {
2784
+ #line 1981 "insns.def"
2785
+ if (LIKELY(BASIC_OP_UNREDEFINED_P(BOP_SIZE) &&
2786
+ !SPECIAL_CONST_P(recv))) {
2787
+ if (HEAP_CLASS_OF(recv) == rb_cString) {
2788
+ val = rb_str_length(recv);
2789
+ }
2790
+ else if (HEAP_CLASS_OF(recv) == rb_cArray) {
2791
+ val = LONG2NUM(RARRAY_LEN(recv));
2792
+ }
2793
+ else if (HEAP_CLASS_OF(recv) == rb_cHash) {
2794
+ val = INT2FIX(RHASH_SIZE(recv));
2795
+ }
2796
+ else {
2797
+ goto INSN_LABEL(normal_dispatch);
2798
+ }
2799
+ }
2800
+ else {
2801
+ INSN_LABEL(normal_dispatch):
2802
+ PUSH(recv);
2803
+ CALL_SIMPLE_METHOD(0, idSize, recv);
2804
+ }
2805
+
2806
+ #line 2807 "vm.inc"
2807
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
2808
+ PUSH(val);
2809
+ #undef CURRENT_INSN_opt_size
2810
+ #undef INSN_IS_SC
2811
+ #undef INSN_LABEL
2812
+ #undef LABEL_IS_SC
2813
+ END_INSN(opt_size);}}}
2814
+ INSN_ENTRY(opt_succ){
2815
+ {
2816
+ VALUE val;
2817
+ IC ic = (IC)GET_OPERAND(1);
2818
+ VALUE recv = TOPN(0);
2819
+ DEBUG_ENTER_INSN("opt_succ");
2820
+ ADD_PC(1+1);
2821
+ PREFETCH(GET_PC());
2822
+ POPN(1);
2823
+ #define CURRENT_INSN_opt_succ 1
2824
+ #define INSN_IS_SC() 0
2825
+ #define INSN_LABEL(lab) LABEL_opt_succ_##lab
2826
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2827
+ USAGE_ANALYSIS_INSN(BIN(opt_succ));
2828
+ USAGE_ANALYSIS_OPERAND(BIN(opt_succ), 0, ic);
2829
+ {
2830
+ #line 2014 "insns.def"
2831
+ if (SPECIAL_CONST_P(recv)) {
2832
+ if (FIXNUM_P(recv) &&
2833
+ BASIC_OP_UNREDEFINED_P(BOP_SUCC)) {
2834
+ const VALUE obj = INT2FIX(1);
2835
+ /* fixnum + INT2FIX(1) */
2836
+ val = (recv + (obj & (~1)));
2837
+ if ((~(recv ^ obj) & (recv ^ val)) & ((unsigned long)LONG_MAX + 1)) {
2838
+ val = rb_big_plus(rb_int2big(FIX2LONG(recv)),
2839
+ rb_int2big(FIX2LONG(obj)));
2840
+ }
2841
+ }
2842
+ else {
2843
+ goto INSN_LABEL(normal_dispatch);
2844
+ }
2845
+ }
2846
+ else {
2847
+ if (HEAP_CLASS_OF(recv) == rb_cString &&
2848
+ BASIC_OP_UNREDEFINED_P(BOP_SUCC)) {
2849
+ val = rb_str_succ(recv);
2850
+ }
2851
+ else if (HEAP_CLASS_OF(recv) == rb_cTime &&
2852
+ BASIC_OP_UNREDEFINED_P(BOP_SUCC)) {
2853
+ val = rb_time_succ(recv);
2854
+ }
2855
+ else
2856
+ {
2857
+ goto INSN_LABEL(normal_dispatch);
2858
+ }
2859
+ }
2860
+ if (0) {
2861
+ INSN_LABEL(normal_dispatch):
2862
+ PUSH(recv);
2863
+ CALL_SIMPLE_METHOD(0, idSucc, recv);
2864
+ }
2865
+
2866
+ #line 2867 "vm.inc"
2867
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
2868
+ PUSH(val);
2869
+ #undef CURRENT_INSN_opt_succ
2870
+ #undef INSN_IS_SC
2871
+ #undef INSN_LABEL
2872
+ #undef LABEL_IS_SC
2873
+ END_INSN(opt_succ);}}}
2874
+ INSN_ENTRY(opt_not){
2875
+ {
2876
+ VALUE val;
2877
+ IC ic = (IC)GET_OPERAND(1);
2878
+ VALUE recv = TOPN(0);
2879
+ DEBUG_ENTER_INSN("opt_not");
2880
+ ADD_PC(1+1);
2881
+ PREFETCH(GET_PC());
2882
+ POPN(1);
2883
+ #define CURRENT_INSN_opt_not 1
2884
+ #define INSN_IS_SC() 0
2885
+ #define INSN_LABEL(lab) LABEL_opt_not_##lab
2886
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2887
+ USAGE_ANALYSIS_INSN(BIN(opt_not));
2888
+ USAGE_ANALYSIS_OPERAND(BIN(opt_not), 0, ic);
2889
+ {
2890
+ #line 2061 "insns.def"
2891
+ extern VALUE rb_obj_not(VALUE obj);
2892
+ const rb_method_entry_t *me = vm_method_search(idNot, CLASS_OF(recv), ic);
2893
+
2894
+ if (check_cfunc(me, rb_obj_not)) {
2895
+ val = RTEST(recv) ? Qfalse : Qtrue;
2896
+ }
2897
+ else {
2898
+ PUSH(recv);
2899
+ CALL_SIMPLE_METHOD(0, idNot, recv);
2900
+ }
2901
+
2902
+ #line 2903 "vm.inc"
2903
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
2904
+ PUSH(val);
2905
+ #undef CURRENT_INSN_opt_not
2906
+ #undef INSN_IS_SC
2907
+ #undef INSN_LABEL
2908
+ #undef LABEL_IS_SC
2909
+ END_INSN(opt_not);}}}
2910
+ INSN_ENTRY(opt_regexpmatch1){
2911
+ {
2912
+ VALUE val;
2913
+ VALUE r = (VALUE)GET_OPERAND(1);
2914
+ VALUE obj = TOPN(0);
2915
+ DEBUG_ENTER_INSN("opt_regexpmatch1");
2916
+ ADD_PC(1+1);
2917
+ PREFETCH(GET_PC());
2918
+ POPN(1);
2919
+ #define CURRENT_INSN_opt_regexpmatch1 1
2920
+ #define INSN_IS_SC() 0
2921
+ #define INSN_LABEL(lab) LABEL_opt_regexpmatch1_##lab
2922
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2923
+ USAGE_ANALYSIS_INSN(BIN(opt_regexpmatch1));
2924
+ USAGE_ANALYSIS_OPERAND(BIN(opt_regexpmatch1), 0, r);
2925
+ {
2926
+ #line 2085 "insns.def"
2927
+ val = rb_reg_match(r, obj);
2928
+
2929
+ #line 2930 "vm.inc"
2930
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
2931
+ PUSH(val);
2932
+ #undef CURRENT_INSN_opt_regexpmatch1
2933
+ #undef INSN_IS_SC
2934
+ #undef INSN_LABEL
2935
+ #undef LABEL_IS_SC
2936
+ END_INSN(opt_regexpmatch1);}}}
2937
+ INSN_ENTRY(opt_regexpmatch2){
2938
+ {
2939
+ VALUE val;
2940
+
2941
+ VALUE obj2 = TOPN(1);
2942
+ VALUE obj1 = TOPN(0);
2943
+ DEBUG_ENTER_INSN("opt_regexpmatch2");
2944
+ ADD_PC(1+0);
2945
+ PREFETCH(GET_PC());
2946
+ POPN(2);
2947
+ #define CURRENT_INSN_opt_regexpmatch2 1
2948
+ #define INSN_IS_SC() 0
2949
+ #define INSN_LABEL(lab) LABEL_opt_regexpmatch2_##lab
2950
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2951
+ USAGE_ANALYSIS_INSN(BIN(opt_regexpmatch2));
2952
+ {
2953
+ #line 2099 "insns.def"
2954
+ if (TYPE(obj2) == T_STRING) {
2955
+ val = rb_reg_match(obj1, obj2);
2956
+ }
2957
+ else {
2958
+ val = rb_funcall(obj2, idEqTilde, 1, obj1);
2959
+ }
2960
+
2961
+ #line 2962 "vm.inc"
2962
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
2963
+ PUSH(val);
2964
+ #undef CURRENT_INSN_opt_regexpmatch2
2965
+ #undef INSN_IS_SC
2966
+ #undef INSN_LABEL
2967
+ #undef LABEL_IS_SC
2968
+ END_INSN(opt_regexpmatch2);}}}
2969
+ INSN_ENTRY(opt_call_c_function){
2970
+ {
2971
+ rb_insn_func_t funcptr = (rb_insn_func_t)GET_OPERAND(1);
2972
+
2973
+ DEBUG_ENTER_INSN("opt_call_c_function");
2974
+ ADD_PC(1+1);
2975
+ PREFETCH(GET_PC());
2976
+ #define CURRENT_INSN_opt_call_c_function 1
2977
+ #define INSN_IS_SC() 0
2978
+ #define INSN_LABEL(lab) LABEL_opt_call_c_function_##lab
2979
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2980
+ USAGE_ANALYSIS_INSN(BIN(opt_call_c_function));
2981
+ USAGE_ANALYSIS_OPERAND(BIN(opt_call_c_function), 0, funcptr);
2982
+ {
2983
+ #line 2118 "insns.def"
2984
+ reg_cfp = (funcptr)(th, reg_cfp);
2985
+
2986
+ if (reg_cfp == 0) {
2987
+ VALUE err = th->errinfo;
2988
+ th->errinfo = Qnil;
2989
+ THROW_EXCEPTION(err);
2990
+ }
2991
+
2992
+ RESTORE_REGS();
2993
+ NEXT_INSN();
2994
+
2995
+ #line 2996 "vm.inc"
2996
+ #undef CURRENT_INSN_opt_call_c_function
2997
+ #undef INSN_IS_SC
2998
+ #undef INSN_LABEL
2999
+ #undef LABEL_IS_SC
3000
+ END_INSN(opt_call_c_function);}}}
3001
+ INSN_ENTRY(bitblt){
3002
+ {
3003
+ VALUE ret;
3004
+
3005
+
3006
+ DEBUG_ENTER_INSN("bitblt");
3007
+ ADD_PC(1+0);
3008
+ PREFETCH(GET_PC());
3009
+ #define CURRENT_INSN_bitblt 1
3010
+ #define INSN_IS_SC() 0
3011
+ #define INSN_LABEL(lab) LABEL_bitblt_##lab
3012
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
3013
+ USAGE_ANALYSIS_INSN(BIN(bitblt));
3014
+ {
3015
+ #line 2141 "insns.def"
3016
+ ret = rb_str_new2("a bit of bacon, lettuce and tomato");
3017
+
3018
+ #line 3019 "vm.inc"
3019
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
3020
+ PUSH(ret);
3021
+ #undef CURRENT_INSN_bitblt
3022
+ #undef INSN_IS_SC
3023
+ #undef INSN_LABEL
3024
+ #undef LABEL_IS_SC
3025
+ END_INSN(bitblt);}}}
3026
+ INSN_ENTRY(answer){
3027
+ {
3028
+ VALUE ret;
3029
+
3030
+
3031
+ DEBUG_ENTER_INSN("answer");
3032
+ ADD_PC(1+0);
3033
+ PREFETCH(GET_PC());
3034
+ #define CURRENT_INSN_answer 1
3035
+ #define INSN_IS_SC() 0
3036
+ #define INSN_LABEL(lab) LABEL_answer_##lab
3037
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
3038
+ USAGE_ANALYSIS_INSN(BIN(answer));
3039
+ {
3040
+ #line 2155 "insns.def"
3041
+ ret = INT2FIX(42);
3042
+
3043
+ #line 3044 "vm.inc"
3044
+ CHECK_STACK_OVERFLOW(REG_CFP, 1);
3045
+ PUSH(ret);
3046
+ #undef CURRENT_INSN_answer
3047
+ #undef INSN_IS_SC
3048
+ #undef INSN_LABEL
3049
+ #undef LABEL_IS_SC
3050
+ END_INSN(answer);}}}
3051
+