did_you_mean 0.5.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (209) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +12 -4
  3. data/Appraisals +6 -0
  4. data/Gemfile +14 -0
  5. data/README.md +69 -13
  6. data/Rakefile +47 -22
  7. data/did_you_mean.gemspec +3 -5
  8. data/docs/did_you_mean_example.png +0 -0
  9. data/ext/did_you_mean/extconf.rb +16 -11
  10. data/ext/did_you_mean/org/yukinishijima/ReceiverCapturer.java +58 -0
  11. data/ext/did_you_mean/ruby_headers/210/id.h +11 -9
  12. data/ext/did_you_mean/ruby_headers/210/version.h +6 -6
  13. data/ext/did_you_mean/ruby_headers/211/addr2line.h +21 -0
  14. data/ext/did_you_mean/ruby_headers/211/constant.h +36 -0
  15. data/ext/did_you_mean/ruby_headers/211/dln.h +51 -0
  16. data/ext/did_you_mean/ruby_headers/211/encdb.h +170 -0
  17. data/ext/did_you_mean/ruby_headers/211/eval_intern.h +260 -0
  18. data/ext/did_you_mean/ruby_headers/211/gc.h +101 -0
  19. data/ext/did_you_mean/ruby_headers/211/id.h +173 -0
  20. data/ext/did_you_mean/ruby_headers/211/internal.h +889 -0
  21. data/ext/did_you_mean/ruby_headers/211/iseq.h +136 -0
  22. data/ext/did_you_mean/ruby_headers/211/method.h +142 -0
  23. data/ext/did_you_mean/ruby_headers/211/node.h +543 -0
  24. data/ext/did_you_mean/ruby_headers/211/parse.h +183 -0
  25. data/ext/did_you_mean/ruby_headers/211/probes.h +83 -0
  26. data/ext/did_you_mean/ruby_headers/211/probes_helper.h +67 -0
  27. data/ext/did_you_mean/ruby_headers/211/regenc.h +223 -0
  28. data/ext/did_you_mean/ruby_headers/211/regint.h +911 -0
  29. data/ext/did_you_mean/ruby_headers/211/regparse.h +363 -0
  30. data/ext/did_you_mean/ruby_headers/211/revision.h +1 -0
  31. data/ext/did_you_mean/ruby_headers/211/ruby_atomic.h +170 -0
  32. data/ext/did_you_mean/ruby_headers/211/siphash.h +48 -0
  33. data/ext/did_you_mean/ruby_headers/211/thread_native.h +23 -0
  34. data/ext/did_you_mean/ruby_headers/211/thread_pthread.h +56 -0
  35. data/ext/did_you_mean/ruby_headers/211/thread_win32.h +45 -0
  36. data/ext/did_you_mean/ruby_headers/211/timev.h +42 -0
  37. data/ext/did_you_mean/ruby_headers/211/transcode_data.h +123 -0
  38. data/ext/did_you_mean/ruby_headers/211/transdb.h +190 -0
  39. data/ext/did_you_mean/ruby_headers/211/verconf.h +13 -0
  40. data/ext/did_you_mean/ruby_headers/211/version.h +52 -0
  41. data/ext/did_you_mean/ruby_headers/211/vm_core.h +1043 -0
  42. data/ext/did_you_mean/ruby_headers/211/vm_debug.h +37 -0
  43. data/ext/did_you_mean/ruby_headers/211/vm_exec.h +182 -0
  44. data/ext/did_you_mean/ruby_headers/211/vm_insnhelper.h +273 -0
  45. data/ext/did_you_mean/ruby_headers/211/vm_opts.h +56 -0
  46. data/ext/did_you_mean/ruby_headers/212/addr2line.h +21 -0
  47. data/ext/did_you_mean/ruby_headers/212/constant.h +36 -0
  48. data/ext/did_you_mean/ruby_headers/212/dln.h +51 -0
  49. data/ext/did_you_mean/ruby_headers/212/encdb.h +170 -0
  50. data/ext/did_you_mean/ruby_headers/212/eval_intern.h +260 -0
  51. data/ext/did_you_mean/ruby_headers/212/gc.h +101 -0
  52. data/ext/did_you_mean/ruby_headers/212/id.h +173 -0
  53. data/ext/did_you_mean/ruby_headers/212/internal.h +889 -0
  54. data/ext/did_you_mean/ruby_headers/212/iseq.h +136 -0
  55. data/ext/did_you_mean/ruby_headers/212/method.h +142 -0
  56. data/ext/did_you_mean/ruby_headers/212/node.h +543 -0
  57. data/ext/did_you_mean/ruby_headers/212/parse.h +183 -0
  58. data/ext/did_you_mean/ruby_headers/212/probes.h +83 -0
  59. data/ext/did_you_mean/ruby_headers/212/probes_helper.h +67 -0
  60. data/ext/did_you_mean/ruby_headers/212/regenc.h +223 -0
  61. data/ext/did_you_mean/ruby_headers/212/regint.h +911 -0
  62. data/ext/did_you_mean/ruby_headers/212/regparse.h +363 -0
  63. data/ext/did_you_mean/ruby_headers/212/revision.h +1 -0
  64. data/ext/did_you_mean/ruby_headers/212/ruby_atomic.h +170 -0
  65. data/ext/did_you_mean/ruby_headers/212/siphash.h +48 -0
  66. data/ext/did_you_mean/ruby_headers/212/thread_native.h +23 -0
  67. data/ext/did_you_mean/ruby_headers/212/thread_pthread.h +56 -0
  68. data/ext/did_you_mean/ruby_headers/212/thread_win32.h +45 -0
  69. data/ext/did_you_mean/ruby_headers/212/timev.h +42 -0
  70. data/ext/did_you_mean/ruby_headers/212/transcode_data.h +123 -0
  71. data/ext/did_you_mean/ruby_headers/212/transdb.h +190 -0
  72. data/ext/did_you_mean/ruby_headers/212/verconf.h +13 -0
  73. data/ext/did_you_mean/ruby_headers/212/version.h +52 -0
  74. data/ext/did_you_mean/ruby_headers/212/vm_core.h +1043 -0
  75. data/ext/did_you_mean/ruby_headers/212/vm_debug.h +37 -0
  76. data/ext/did_you_mean/ruby_headers/212/vm_exec.h +182 -0
  77. data/ext/did_you_mean/ruby_headers/212/vm_insnhelper.h +273 -0
  78. data/ext/did_you_mean/ruby_headers/212/vm_opts.h +56 -0
  79. data/ext/did_you_mean/ruby_headers/213/addr2line.h +21 -0
  80. data/ext/did_you_mean/ruby_headers/213/constant.h +36 -0
  81. data/ext/did_you_mean/ruby_headers/213/dln.h +51 -0
  82. data/ext/did_you_mean/ruby_headers/213/encdb.h +170 -0
  83. data/ext/did_you_mean/ruby_headers/213/eval_intern.h +270 -0
  84. data/ext/did_you_mean/ruby_headers/213/gc.h +101 -0
  85. data/ext/did_you_mean/ruby_headers/213/id.h +173 -0
  86. data/ext/did_you_mean/ruby_headers/213/internal.h +892 -0
  87. data/ext/did_you_mean/ruby_headers/213/iseq.h +136 -0
  88. data/ext/did_you_mean/ruby_headers/213/method.h +142 -0
  89. data/ext/did_you_mean/ruby_headers/213/node.h +543 -0
  90. data/ext/did_you_mean/ruby_headers/213/parse.h +183 -0
  91. data/ext/did_you_mean/ruby_headers/213/probes.h +83 -0
  92. data/ext/did_you_mean/ruby_headers/213/probes_helper.h +67 -0
  93. data/ext/did_you_mean/ruby_headers/213/regenc.h +223 -0
  94. data/ext/did_you_mean/ruby_headers/213/regint.h +911 -0
  95. data/ext/did_you_mean/ruby_headers/213/regparse.h +363 -0
  96. data/ext/did_you_mean/ruby_headers/213/revision.h +1 -0
  97. data/ext/did_you_mean/ruby_headers/213/ruby_atomic.h +170 -0
  98. data/ext/did_you_mean/ruby_headers/213/siphash.h +48 -0
  99. data/ext/did_you_mean/ruby_headers/213/thread_native.h +23 -0
  100. data/ext/did_you_mean/ruby_headers/213/thread_pthread.h +56 -0
  101. data/ext/did_you_mean/ruby_headers/213/thread_win32.h +45 -0
  102. data/ext/did_you_mean/ruby_headers/213/timev.h +42 -0
  103. data/ext/did_you_mean/ruby_headers/213/transcode_data.h +123 -0
  104. data/ext/did_you_mean/ruby_headers/213/transdb.h +190 -0
  105. data/ext/did_you_mean/ruby_headers/213/verconf.h +13 -0
  106. data/ext/did_you_mean/ruby_headers/213/version.h +52 -0
  107. data/ext/did_you_mean/ruby_headers/213/vm_core.h +1052 -0
  108. data/ext/did_you_mean/ruby_headers/213/vm_debug.h +37 -0
  109. data/ext/did_you_mean/ruby_headers/213/vm_exec.h +182 -0
  110. data/ext/did_you_mean/ruby_headers/213/vm_insnhelper.h +273 -0
  111. data/ext/did_you_mean/ruby_headers/213/vm_opts.h +56 -0
  112. data/ext/did_you_mean/ruby_headers/214/addr2line.h +21 -0
  113. data/ext/did_you_mean/ruby_headers/214/constant.h +36 -0
  114. data/ext/did_you_mean/ruby_headers/214/dln.h +51 -0
  115. data/ext/did_you_mean/ruby_headers/214/encdb.h +170 -0
  116. data/ext/did_you_mean/ruby_headers/214/eval_intern.h +270 -0
  117. data/ext/did_you_mean/ruby_headers/214/gc.h +101 -0
  118. data/ext/did_you_mean/ruby_headers/214/id.h +173 -0
  119. data/ext/did_you_mean/ruby_headers/214/internal.h +892 -0
  120. data/ext/did_you_mean/ruby_headers/214/iseq.h +136 -0
  121. data/ext/did_you_mean/ruby_headers/214/method.h +142 -0
  122. data/ext/did_you_mean/ruby_headers/214/node.h +543 -0
  123. data/ext/did_you_mean/ruby_headers/214/parse.h +183 -0
  124. data/ext/did_you_mean/ruby_headers/214/probes.h +83 -0
  125. data/ext/did_you_mean/ruby_headers/214/probes_helper.h +67 -0
  126. data/ext/did_you_mean/ruby_headers/214/regenc.h +223 -0
  127. data/ext/did_you_mean/ruby_headers/214/regint.h +911 -0
  128. data/ext/did_you_mean/ruby_headers/214/regparse.h +363 -0
  129. data/ext/did_you_mean/ruby_headers/214/revision.h +1 -0
  130. data/ext/did_you_mean/ruby_headers/214/ruby_atomic.h +170 -0
  131. data/ext/did_you_mean/ruby_headers/214/siphash.h +48 -0
  132. data/ext/did_you_mean/ruby_headers/214/thread_native.h +23 -0
  133. data/ext/did_you_mean/ruby_headers/214/thread_pthread.h +56 -0
  134. data/ext/did_you_mean/ruby_headers/214/thread_win32.h +45 -0
  135. data/ext/did_you_mean/ruby_headers/214/timev.h +42 -0
  136. data/ext/did_you_mean/ruby_headers/214/transcode_data.h +123 -0
  137. data/ext/did_you_mean/ruby_headers/214/transdb.h +190 -0
  138. data/ext/did_you_mean/ruby_headers/214/verconf.h +13 -0
  139. data/ext/did_you_mean/ruby_headers/214/version.h +52 -0
  140. data/ext/did_you_mean/ruby_headers/214/vm_core.h +1055 -0
  141. data/ext/did_you_mean/ruby_headers/214/vm_debug.h +37 -0
  142. data/ext/did_you_mean/ruby_headers/214/vm_exec.h +182 -0
  143. data/ext/did_you_mean/ruby_headers/214/vm_insnhelper.h +273 -0
  144. data/ext/did_you_mean/ruby_headers/214/vm_opts.h +56 -0
  145. data/ext/did_you_mean/ruby_headers/220/addr2line.h +1 -1
  146. data/ext/did_you_mean/ruby_headers/220/ccan/build_assert/build_assert.h +40 -0
  147. data/ext/did_you_mean/ruby_headers/220/ccan/check_type/check_type.h +63 -0
  148. data/ext/did_you_mean/ruby_headers/220/ccan/container_of/container_of.h +106 -0
  149. data/ext/did_you_mean/ruby_headers/220/ccan/licenses/BSD-MIT +17 -0
  150. data/ext/did_you_mean/ruby_headers/220/ccan/licenses/CC0 +28 -0
  151. data/ext/did_you_mean/ruby_headers/220/ccan/list/list.h +602 -0
  152. data/ext/did_you_mean/ruby_headers/220/ccan/str/str.h +16 -0
  153. data/ext/did_you_mean/ruby_headers/220/constant.h +10 -3
  154. data/ext/did_you_mean/ruby_headers/220/eval_intern.h +24 -5
  155. data/ext/did_you_mean/ruby_headers/220/gc.h +5 -0
  156. data/ext/did_you_mean/ruby_headers/220/id.h +11 -9
  157. data/ext/did_you_mean/ruby_headers/220/internal.h +116 -21
  158. data/ext/did_you_mean/ruby_headers/220/iseq.h +28 -7
  159. data/ext/did_you_mean/ruby_headers/220/method.h +0 -1
  160. data/ext/did_you_mean/ruby_headers/220/node.h +5 -4
  161. data/ext/did_you_mean/ruby_headers/220/regenc.h +18 -7
  162. data/ext/did_you_mean/ruby_headers/220/regint.h +72 -11
  163. data/ext/did_you_mean/ruby_headers/220/regparse.h +2 -2
  164. data/ext/did_you_mean/ruby_headers/220/ruby_atomic.h +2 -2
  165. data/ext/did_you_mean/ruby_headers/220/symbol.h +87 -0
  166. data/ext/did_you_mean/ruby_headers/220/thread_pthread.h +4 -6
  167. data/ext/did_you_mean/ruby_headers/220/thread_win32.h +0 -9
  168. data/ext/did_you_mean/ruby_headers/220/timev.h +2 -2
  169. data/ext/did_you_mean/ruby_headers/220/version.h +3 -3
  170. data/ext/did_you_mean/ruby_headers/220/vm_core.h +200 -65
  171. data/ext/did_you_mean/ruby_headers/220/vm_insnhelper.h +0 -40
  172. data/gemfiles/activerecord_30.gemfile +14 -0
  173. data/gemfiles/activerecord_31.gemfile +14 -0
  174. data/gemfiles/activerecord_32.gemfile +14 -0
  175. data/gemfiles/activerecord_40.gemfile +14 -0
  176. data/gemfiles/activerecord_41.gemfile +14 -0
  177. data/gemfiles/activerecord_42.gemfile +21 -0
  178. data/gemfiles/activerecord_edge.gemfile +16 -0
  179. data/lib/did_you_mean.rb +14 -4
  180. data/lib/did_you_mean/core_ext/name_error.rb +11 -44
  181. data/lib/did_you_mean/finders.rb +31 -0
  182. data/lib/did_you_mean/finders/name_error_finders.rb +24 -0
  183. data/lib/did_you_mean/finders/name_error_finders/similar_class_finder.rb +50 -0
  184. data/lib/did_you_mean/finders/name_error_finders/similar_name_finder.rb +61 -0
  185. data/lib/did_you_mean/finders/similar_attribute_finder.rb +26 -0
  186. data/lib/did_you_mean/finders/similar_method_finder.rb +42 -0
  187. data/lib/did_you_mean/levenshtein.rb +49 -0
  188. data/lib/did_you_mean/test_helper.rb +11 -0
  189. data/lib/did_you_mean/version.rb +1 -1
  190. data/lib/did_you_mean/word_collection.rb +27 -0
  191. data/test/all_test.rb +16 -2
  192. data/test/name_error_extension_test.rb +24 -0
  193. data/test/no_method_error_extension_test.rb +20 -0
  194. data/test/null_finder_test.rb +19 -0
  195. data/test/similar_attribute_finder_test.rb +2 -6
  196. data/test/similar_class_finder_test.rb +85 -0
  197. data/test/similar_method_finder_test.rb +16 -35
  198. data/test/similar_name_finder_test.rb +31 -23
  199. data/test/test_helper.rb +19 -11
  200. metadata +168 -45
  201. data/docs/better_errors_example.png +0 -0
  202. data/docs/irb_example.png +0 -0
  203. data/docs/rspec_example.png +0 -0
  204. data/lib/did_you_mean/method_finder.rb +0 -24
  205. data/lib/did_you_mean/strategies.rb +0 -23
  206. data/lib/did_you_mean/strategies/similar_attribute_finder.rb +0 -41
  207. data/lib/did_you_mean/strategies/similar_method_finder.rb +0 -46
  208. data/lib/did_you_mean/strategies/similar_name_finder.rb +0 -57
  209. data/test.sh +0 -18
@@ -17,6 +17,7 @@ RUBY_SYMBOL_EXPORT_BEGIN
17
17
  /* compile.c */
18
18
  VALUE rb_iseq_compile_node(VALUE self, NODE *node);
19
19
  int rb_iseq_translate_threaded_code(rb_iseq_t *iseq);
20
+ VALUE *rb_iseq_original_iseq(rb_iseq_t *iseq);
20
21
  VALUE rb_iseq_build_from_ary(rb_iseq_t *iseq, VALUE locals, VALUE args,
21
22
  VALUE exception, VALUE body);
22
23
 
@@ -62,21 +63,41 @@ struct iseq_catch_table_entry {
62
63
  CATCH_TYPE_NEXT = INT2FIX(6)
63
64
  } type;
64
65
  VALUE iseq;
65
- unsigned long start;
66
- unsigned long end;
67
- unsigned long cont;
68
- unsigned long sp;
66
+ unsigned int start;
67
+ unsigned int end;
68
+ unsigned int cont;
69
+ unsigned int sp;
69
70
  };
70
71
 
72
+ PACKED_STRUCT_UNALIGNED(struct iseq_catch_table {
73
+ int size;
74
+ struct iseq_catch_table_entry entries[1]; /* flexible array */
75
+ });
76
+
77
+ static inline int
78
+ iseq_catch_table_bytes(int n)
79
+ {
80
+ enum {
81
+ catch_table_entries_max = (INT_MAX - sizeof(struct iseq_catch_table)) / sizeof(struct iseq_catch_table_entry)
82
+ };
83
+ if (n > catch_table_entries_max) rb_fatal("too large iseq_catch_table - %d", n);
84
+ return (int)(sizeof(struct iseq_catch_table) +
85
+ (n - 1) * sizeof(struct iseq_catch_table_entry));
86
+ }
87
+
71
88
  #define INITIAL_ISEQ_COMPILE_DATA_STORAGE_BUFF_SIZE (512)
72
89
 
73
90
  struct iseq_compile_data_storage {
74
91
  struct iseq_compile_data_storage *next;
75
- unsigned long pos;
76
- unsigned long size;
77
- char *buff;
92
+ unsigned int pos;
93
+ unsigned int size;
94
+ char buff[1]; /* flexible array */
78
95
  };
79
96
 
97
+ /* account for flexible array */
98
+ #define SIZEOF_ISEQ_COMPILE_DATA_STORAGE \
99
+ (sizeof(struct iseq_compile_data_storage) - 1)
100
+
80
101
  struct iseq_compile_data {
81
102
  /* GC is needed */
82
103
  const VALUE err_info;
@@ -136,7 +136,6 @@ VALUE rb_obj_method_location(VALUE obj, ID id);
136
136
  void rb_mark_method_entry(const rb_method_entry_t *me);
137
137
  void rb_free_method_entry(rb_method_entry_t *me);
138
138
  void rb_sweep_method_entry(void *vm);
139
- void rb_free_m_tbl(st_table *tbl);
140
139
  void rb_free_m_tbl_wrapper(struct method_table_wrapper *wrapper);
141
140
 
142
141
  #endif /* METHOD_H */
@@ -287,7 +287,7 @@ typedef struct RNode {
287
287
  #define NODE_LMASK (((SIGNED_VALUE)1<<(sizeof(VALUE)*CHAR_BIT-NODE_LSHIFT))-1)
288
288
  #define nd_line(n) (int)(RNODE(n)->flags>>NODE_LSHIFT)
289
289
  #define nd_set_line(n,l) \
290
- RNODE(n)->flags=((RNODE(n)->flags&~(-1<<NODE_LSHIFT))|(((l)&NODE_LMASK)<<NODE_LSHIFT))
290
+ RNODE(n)->flags=((RNODE(n)->flags&~((VALUE)(-1)<<NODE_LSHIFT))|((VALUE)((l)&NODE_LMASK)<<NODE_LSHIFT))
291
291
 
292
292
  #define nd_refinements nd_reserved
293
293
 
@@ -468,9 +468,7 @@ typedef struct RNode {
468
468
  #define roomof(x, y) ((sizeof(x) + sizeof(y) - 1) / sizeof(y))
469
469
  #define MEMO_FOR(type, value) ((type *)RARRAY_PTR(value))
470
470
  #define NEW_MEMO_FOR(type, value) \
471
- (rb_ary_set_len(((value) = rb_ary_tmp_new(roomof(type, VALUE))), \
472
- roomof(type, VALUE)), \
473
- MEMO_FOR(type, value))
471
+ ((value) = rb_ary_tmp_new_fill(roomof(type, VALUE)), MEMO_FOR(type, value))
474
472
 
475
473
  RUBY_SYMBOL_EXPORT_BEGIN
476
474
 
@@ -495,6 +493,9 @@ NODE *rb_compile_file(const char*, VALUE, int);
495
493
 
496
494
  NODE *rb_node_newnode(enum node_type,VALUE,VALUE,VALUE);
497
495
  NODE *rb_node_newnode_longlife(enum node_type,VALUE,VALUE,VALUE);
496
+ void rb_gc_free_node(VALUE obj);
497
+ size_t rb_node_memsize(VALUE obj);
498
+ VALUE rb_gc_mark_node(NODE *obj);
498
499
 
499
500
  struct rb_global_entry {
500
501
  struct rb_global_variable *var;
@@ -29,15 +29,18 @@
29
29
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30
30
  * SUCH DAMAGE.
31
31
  */
32
+
32
33
  #ifndef REGINT_H
33
34
  #ifndef RUBY_EXTERN
34
35
  #include "ruby/config.h"
35
36
  #include "ruby/defines.h"
36
37
  #endif
38
+ #endif
39
+
37
40
  #ifdef ONIG_ESCAPE_UCHAR_COLLISION
38
41
  #undef ONIG_ESCAPE_UCHAR_COLLISION
39
42
  #endif
40
- #endif
43
+
41
44
  #include "ruby/oniguruma.h"
42
45
 
43
46
  RUBY_SYMBOL_EXPORT_BEGIN
@@ -99,15 +102,22 @@ typedef struct {
99
102
 
100
103
 
101
104
  typedef struct {
102
- const UChar *name;
103
- int ctype;
104
105
  short int len;
106
+ const UChar name[6];
107
+ int ctype;
105
108
  } PosixBracketEntryType;
106
109
 
107
- #define PosixBracketEntryInit(name, ctype) {(const UChar *)name, ctype, (short int)(sizeof(name) - 1)}
110
+ #define POSIX_BRACKET_ENTRY_INIT(name, ctype) \
111
+ {(short int )(sizeof(name) - 1), (name), (ctype)}
112
+
113
+ #ifndef numberof
114
+ #define numberof(array) (int )(sizeof(array) / sizeof((array)[0]))
115
+ #endif
116
+
108
117
 
109
118
  #define USE_CRNL_AS_LINE_TERMINATOR
110
119
  #define USE_UNICODE_PROPERTIES
120
+ #define USE_UNICODE_AGE_PROPERTIES
111
121
  /* #define USE_UNICODE_CASE_FOLD_TURKISH_AZERI */
112
122
  /* #define USE_UNICODE_ALL_LINE_TERMINATORS */ /* see Unicode.org UTS #18 */
113
123
 
@@ -158,6 +168,7 @@ ONIG_EXTERN int onigenc_unicode_apply_all_case_fold P_((OnigCaseFoldType flag, O
158
168
 
159
169
  #define UTF16_IS_SURROGATE_FIRST(c) (((c) & 0xfc) == 0xd8)
160
170
  #define UTF16_IS_SURROGATE_SECOND(c) (((c) & 0xfc) == 0xdc)
171
+ #define UTF16_IS_SURROGATE(c) (((c) & 0xf8) == 0xd8)
161
172
 
162
173
  #define ONIGENC_ISO_8859_1_TO_LOWER_CASE(c) \
163
174
  OnigEncISO_8859_1_ToLowerCaseTable[c]
@@ -197,9 +208,9 @@ ONIG_EXTERN const unsigned short OnigEncAsciiCtypeTable[];
197
208
 
198
209
 
199
210
  #ifdef ONIG_ENC_REGISTER
200
- extern int ONIG_ENC_REGISTER(const char *, OnigEncodingType*);
211
+ extern int ONIG_ENC_REGISTER(const char *, OnigEncoding);
201
212
  #define OnigEncodingName(n) encoding_##n
202
- #define OnigEncodingDeclare(n) static OnigEncodingType OnigEncodingName(n)
213
+ #define OnigEncodingDeclare(n) static const OnigEncodingType OnigEncodingName(n)
203
214
  #define OnigEncodingDefine(f,n) \
204
215
  OnigEncodingDeclare(n); \
205
216
  void Init_##f(void) { \
@@ -209,7 +220,7 @@ extern int ONIG_ENC_REGISTER(const char *, OnigEncodingType*);
209
220
  OnigEncodingDeclare(n)
210
221
  #else
211
222
  #define OnigEncodingName(n) OnigEncoding##n
212
- #define OnigEncodingDeclare(n) OnigEncodingType OnigEncodingName(n)
223
+ #define OnigEncodingDeclare(n) const OnigEncodingType OnigEncodingName(n)
213
224
  #define OnigEncodingDefine(f,n) OnigEncodingDeclare(n)
214
225
  #endif
215
226
 
@@ -5,7 +5,7 @@
5
5
  **********************************************************************/
6
6
  /*-
7
7
  * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
8
- * Copyright (c) 2011-2012 K.Takata <kentkt AT csc DOT jp>
8
+ * Copyright (c) 2011-2014 K.Takata <kentkt AT csc DOT jp>
9
9
  * All rights reserved.
10
10
  *
11
11
  * Redistribution and use in source and binary forms, with or without
@@ -50,6 +50,7 @@
50
50
 
51
51
  #if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \
52
52
  defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || \
53
+ defined(__powerpc64__) || \
53
54
  defined(__mc68020__)
54
55
  #define PLATFORM_UNALIGNED_WORD_ACCESS
55
56
  #endif
@@ -92,8 +93,6 @@
92
93
  # define ARG_UNUSED
93
94
  #endif
94
95
 
95
- /* */
96
- /* escape other system UChar definition */
97
96
  #ifndef RUBY_DEFINES_H
98
97
  #include "ruby/ruby.h"
99
98
  #undef xmalloc
@@ -101,23 +100,67 @@
101
100
  #undef xcalloc
102
101
  #undef xfree
103
102
  #endif
103
+
104
+ /* */
105
+ /* escape other system UChar definition */
104
106
  #ifdef ONIG_ESCAPE_UCHAR_COLLISION
105
107
  #undef ONIG_ESCAPE_UCHAR_COLLISION
106
108
  #endif
109
+
107
110
  #define USE_WORD_BEGIN_END /* "\<": word-begin, "\>": word-end */
108
- #undef USE_MATCH_RANGE_IS_COMPLETE_RANGE
109
111
  #undef USE_CAPTURE_HISTORY
110
112
  #define USE_VARIABLE_META_CHARS
111
113
  #define USE_POSIX_API_REGION_OPTION /* needed for POSIX API support */
112
114
  #define USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE
113
115
  /* #define USE_COMBINATION_EXPLOSION_CHECK */ /* (X*)* */
114
116
 
117
+ /* multithread config */
115
118
  /* #define USE_MULTI_THREAD_SYSTEM */
119
+ /* #define USE_DEFAULT_MULTI_THREAD_SYSTEM */
120
+
121
+ #if defined(USE_MULTI_THREAD_SYSTEM) \
122
+ && defined(USE_DEFAULT_MULTI_THREAD_SYSTEM)
123
+
124
+ #ifdef _WIN32
125
+ #define WIN32_LEAN_AND_MEAN
126
+ #include <windows.h>
127
+ extern CRITICAL_SECTION gOnigMutex;
128
+ #define THREAD_SYSTEM_INIT InitializeCriticalSection(&gOnigMutex)
129
+ #define THREAD_SYSTEM_END DeleteCriticalSection(&gOnigMutex)
130
+ #define THREAD_ATOMIC_START EnterCriticalSection(&gOnigMutex)
131
+ #define THREAD_ATOMIC_END LeaveCriticalSection(&gOnigMutex)
132
+ #define THREAD_PASS Sleep(0)
133
+ #else /* _WIN32 */
134
+ #include <pthread.h>
135
+ #include <sched.h>
136
+ extern pthread_mutex_t gOnigMutex;
137
+ #define THREAD_SYSTEM_INIT pthread_mutex_init(&gOnigMutex, NULL)
138
+ #define THREAD_SYSTEM_END pthread_mutex_destroy(&gOnigMutex)
139
+ #define THREAD_ATOMIC_START pthread_mutex_lock(&gOnigMutex)
140
+ #define THREAD_ATOMIC_END pthread_mutex_unlock(&gOnigMutex)
141
+ #define THREAD_PASS sched_yield()
142
+ #endif /* _WIN32 */
143
+
144
+ #else /* USE_DEFAULT_MULTI_THREAD_SYSTEM */
145
+
146
+ #ifndef THREAD_SYSTEM_INIT
116
147
  #define THREAD_SYSTEM_INIT /* depend on thread system */
148
+ #endif
149
+ #ifndef THREAD_SYSTEM_END
117
150
  #define THREAD_SYSTEM_END /* depend on thread system */
151
+ #endif
152
+ #ifndef THREAD_ATOMIC_START
118
153
  #define THREAD_ATOMIC_START /* depend on thread system */
154
+ #endif
155
+ #ifndef THREAD_ATOMIC_END
119
156
  #define THREAD_ATOMIC_END /* depend on thread system */
157
+ #endif
158
+ #ifndef THREAD_PASS
120
159
  #define THREAD_PASS /* depend on thread system */
160
+ #endif
161
+
162
+ #endif /* USE_DEFAULT_MULTI_THREAD_SYSTEM */
163
+
121
164
  #ifndef xmalloc
122
165
  #define xmalloc malloc
123
166
  #define xrealloc realloc
@@ -150,6 +193,8 @@
150
193
  #define USE_UPPER_CASE_TABLE
151
194
  #else
152
195
 
196
+ #define CHECK_INTERRUPT_IN_MATCH_AT
197
+
153
198
  #define st_init_table onig_st_init_table
154
199
  #define st_init_table_with_size onig_st_init_table_with_size
155
200
  #define st_init_numtable onig_st_init_numtable
@@ -170,8 +215,6 @@
170
215
  /* */
171
216
  #define onig_st_is_member st_is_member
172
217
 
173
- #define CHECK_INTERRUPT_IN_MATCH_AT
174
-
175
218
  #endif
176
219
 
177
220
  #define STATE_CHECK_STRING_THRESHOLD_LEN 7
@@ -235,12 +278,16 @@
235
278
  # include <stdint.h>
236
279
  #endif
237
280
 
281
+ #ifdef HAVE_INTTYPES_H
282
+ # include <inttypes.h>
283
+ #endif
284
+
238
285
  #ifdef STDC_HEADERS
239
286
  # include <stddef.h>
240
287
  #endif
241
288
 
242
- #ifdef __BORLANDC__
243
- #include <malloc.h>
289
+ #ifdef _WIN32
290
+ #include <malloc.h> /* for alloca() */
244
291
  #endif
245
292
 
246
293
  #ifdef ONIG_DEBUG
@@ -260,6 +307,18 @@ typedef unsigned int uintptr_t;
260
307
  #endif
261
308
  #endif /* _WIN32 */
262
309
 
310
+ #ifndef PRIdPTR
311
+ #ifdef _WIN64
312
+ #define PRIdPTR "I64d"
313
+ #define PRIuPTR "I64u"
314
+ #define PRIxPTR "I64x"
315
+ #else
316
+ #define PRIdPTR "ld"
317
+ #define PRIuPTR "lu"
318
+ #define PRIxPTR "lx"
319
+ #endif
320
+ #endif
321
+
263
322
  #include "regenc.h"
264
323
 
265
324
  RUBY_SYMBOL_EXPORT_BEGIN
@@ -333,7 +392,7 @@ typedef unsigned int BitStatusType;
333
392
  #define BIT_STATUS_CLEAR(stats) (stats) = 0
334
393
  #define BIT_STATUS_ON_ALL(stats) (stats) = ~((BitStatusType )0)
335
394
  #define BIT_STATUS_AT(stats,n) \
336
- ((n) < (int )BIT_STATUS_BITS_NUM ? ((stats) & (1 << n)) : ((stats) & 1))
395
+ ((n) < (int )BIT_STATUS_BITS_NUM ? ((stats) & ((BitStatusType)1 << n)) : ((stats) & 1))
337
396
 
338
397
  #define BIT_STATUS_ON_AT(stats,n) do {\
339
398
  if ((n) < (int )BIT_STATUS_BITS_NUM) \
@@ -366,6 +425,8 @@ typedef unsigned int BitStatusType;
366
425
  (ONIG_OPTION_FIND_LONGEST | ONIG_OPTION_FIND_NOT_EMPTY))
367
426
  #define IS_NOTBOL(option) ((option) & ONIG_OPTION_NOTBOL)
368
427
  #define IS_NOTEOL(option) ((option) & ONIG_OPTION_NOTEOL)
428
+ #define IS_NOTBOS(option) ((option) & ONIG_OPTION_NOTBOS)
429
+ #define IS_NOTEOS(option) ((option) & ONIG_OPTION_NOTEOS)
369
430
  #define IS_POSIX_REGION(option) ((option) & ONIG_OPTION_POSIX_REGION)
370
431
  #define IS_ASCII_RANGE(option) ((option) & ONIG_OPTION_ASCII_RANGE)
371
432
  #define IS_POSIX_BRACKET_ALL_RANGE(option) ((option) & ONIG_OPTION_POSIX_BRACKET_ALL_RANGE)
@@ -407,7 +468,7 @@ typedef Bits* BitSetRef;
407
468
  } while (0)
408
469
 
409
470
  #define BS_ROOM(bs,pos) (bs)[(int )(pos) / BITS_IN_ROOM]
410
- #define BS_BIT(pos) (1 << ((int )(pos) % BITS_IN_ROOM))
471
+ #define BS_BIT(pos) (1U << ((int )(pos) % BITS_IN_ROOM))
411
472
 
412
473
  #define BITSET_AT(bs, pos) (BS_ROOM(bs,pos) & BS_BIT(pos))
413
474
  #define BITSET_SET_BIT(bs, pos) BS_ROOM(bs,pos) |= BS_BIT(pos)
@@ -852,7 +913,7 @@ typedef struct {
852
913
 
853
914
  extern OnigOpInfoType OnigOpInfo[];
854
915
 
855
- /* extern void onig_print_compiled_byte_code P_((FILE* f, UChar* bp, UChar* bpend, UChar** nextp, OnigEncoding enc)); */
916
+ extern void onig_print_compiled_byte_code P_((FILE* f, UChar* bp, UChar* bpend, UChar** nextp, OnigEncoding enc));
856
917
 
857
918
  #ifdef ONIG_DEBUG_STATISTICS
858
919
  extern void onig_statistics_init P_((void));
@@ -193,8 +193,8 @@ typedef struct {
193
193
  int type;
194
194
  int regnum;
195
195
  OnigOptionType option;
196
- struct _Node* target;
197
196
  AbsAddrType call_addr;
197
+ struct _Node* target;
198
198
  /* for multiple call reference */
199
199
  OnigDistance min_len; /* min length (byte) */
200
200
  OnigDistance max_len; /* max length (byte) */
@@ -296,10 +296,10 @@ typedef struct {
296
296
  UChar* error;
297
297
  UChar* error_end;
298
298
  regex_t* reg; /* for reg->names only */
299
- int num_call;
300
299
  #ifdef USE_SUBEXP_CALL
301
300
  UnsetAddrList* unset_addr_list;
302
301
  #endif
302
+ int num_call;
303
303
  int num_mem;
304
304
  #ifdef USE_NAMED_GROUP
305
305
  int num_named;
@@ -7,7 +7,7 @@ typedef unsigned int rb_atomic_t;
7
7
  # define ATOMIC_SET(var, val) (void)__atomic_exchange_n(&(var), (val), __ATOMIC_SEQ_CST)
8
8
  # define ATOMIC_INC(var) __atomic_fetch_add(&(var), 1, __ATOMIC_SEQ_CST)
9
9
  # define ATOMIC_DEC(var) __atomic_fetch_sub(&(var), 1, __ATOMIC_SEQ_CST)
10
- # define ATOMIC_OR(var, val) __atomic_or_fetch(&(var), (val), __ATOMIC_SEQ_CST)
10
+ # define ATOMIC_OR(var, val) __atomic_fetch_or(&(var), (val), __ATOMIC_SEQ_CST)
11
11
  # define ATOMIC_EXCHANGE(var, val) __atomic_exchange_n(&(var), (val), __ATOMIC_SEQ_CST)
12
12
  # define ATOMIC_CAS(var, oldval, newval) \
13
13
  ({ __typeof__(oldval) oldvaldup = (oldval); /* oldval should not be modified */ \
@@ -28,7 +28,7 @@ typedef unsigned int rb_atomic_t; /* Anything OK */
28
28
  # define ATOMIC_SET(var, val) (void)__sync_lock_test_and_set(&(var), (val))
29
29
  # define ATOMIC_INC(var) __sync_fetch_and_add(&(var), 1)
30
30
  # define ATOMIC_DEC(var) __sync_fetch_and_sub(&(var), 1)
31
- # define ATOMIC_OR(var, val) __sync_or_and_fetch(&(var), (val))
31
+ # define ATOMIC_OR(var, val) __sync_fetch_and_or(&(var), (val))
32
32
  # define ATOMIC_EXCHANGE(var, val) __sync_lock_test_and_set(&(var), (val))
33
33
  # define ATOMIC_CAS(var, oldval, newval) __sync_val_compare_and_swap(&(var), (oldval), (newval))
34
34
 
@@ -0,0 +1,87 @@
1
+ /**********************************************************************
2
+
3
+ symbol.h -
4
+
5
+ $Author$
6
+ created at: Tue Jul 8 15:49:54 JST 2014
7
+
8
+ Copyright (C) 2014 Yukihiro Matsumoto
9
+
10
+ **********************************************************************/
11
+
12
+ #ifndef RUBY_SYMBOL_H
13
+ #define RUBY_SYMBOL_H 1
14
+
15
+ #include "id.h"
16
+
17
+ #define DYNAMIC_ID_P(id) (!(id&ID_STATIC_SYM)&&id>tLAST_OP_ID)
18
+ #define STATIC_ID2SYM(id) (((VALUE)(id)<<RUBY_SPECIAL_SHIFT)|SYMBOL_FLAG)
19
+
20
+ #ifdef __GNUC__
21
+ #define rb_id2sym(id) \
22
+ __extension__(__builtin_constant_p(id) && !DYNAMIC_ID_P(id) ? \
23
+ STATIC_ID2SYM(id) : rb_id2sym(id))
24
+ #endif
25
+
26
+ struct RSymbol {
27
+ struct RBasic basic;
28
+ VALUE fstr;
29
+ ID id;
30
+ };
31
+
32
+ #define RSYMBOL(obj) (R_CAST(RSymbol)(obj))
33
+
34
+ static inline int
35
+ id_type(ID id)
36
+ {
37
+ if (id<=tLAST_OP_ID) {
38
+ return -1;
39
+ }
40
+ return (int)(id&ID_SCOPE_MASK);
41
+ }
42
+
43
+ #define is_notop_id(id) ((id)>tLAST_OP_ID)
44
+ #define is_local_id(id) (id_type(id)==ID_LOCAL)
45
+ #define is_global_id(id) (id_type(id)==ID_GLOBAL)
46
+ #define is_instance_id(id) (id_type(id)==ID_INSTANCE)
47
+ #define is_attrset_id(id) (id_type(id)==ID_ATTRSET)
48
+ #define is_const_id(id) (id_type(id)==ID_CONST)
49
+ #define is_class_id(id) (id_type(id)==ID_CLASS)
50
+ #define is_junk_id(id) (id_type(id)==ID_JUNK)
51
+
52
+ static inline int
53
+ sym_type(VALUE sym)
54
+ {
55
+ ID id;
56
+ if (STATIC_SYM_P(sym)) {
57
+ id = RSHIFT(sym, RUBY_SPECIAL_SHIFT);
58
+ if (id<=tLAST_OP_ID) {
59
+ return -1;
60
+ }
61
+ }
62
+ else {
63
+ id = RSYMBOL(sym)->id;
64
+ }
65
+ return (int)(id&ID_SCOPE_MASK);
66
+ }
67
+
68
+ #define is_local_sym(sym) (sym_type(sym)==SYM_LOCAL)
69
+ #define is_global_sym(sym) (sym_type(sym)==SYM_GLOBAL)
70
+ #define is_instance_sym(sym) (sym_type(sym)==SYM_INSTANCE)
71
+ #define is_attrset_sym(sym) (sym_type(sym)==SYM_ATTRSET)
72
+ #define is_const_sym(sym) (sym_type(sym)==SYM_CONST)
73
+ #define is_class_sym(sym) (sym_type(sym)==SYM_CLASS)
74
+ #define is_junk_sym(sym) (sym_type(sym)==SYM_JUNK)
75
+
76
+ RUBY_FUNC_EXPORTED const unsigned int ruby_global_name_punct_bits[(0x7e - 0x20 + 31) / 32];
77
+
78
+ static inline int
79
+ is_global_name_punct(const int c)
80
+ {
81
+ if (c <= 0x20 || 0x7e < c) return 0;
82
+ return (ruby_global_name_punct_bits[(c - 0x20) / 32] >> (c % 32)) & 1;
83
+ }
84
+
85
+ ID rb_intern_cstr_without_pindown(const char *, long, rb_encoding *);
86
+
87
+ #endif