sender 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,17 +1,25 @@
1
1
 
2
- #include <ruby.h>
3
-
4
2
  #include "rb_Global.h"
5
- #include "rb_Global_internal.h"
6
3
 
7
4
  // Internals from ruby that aren't included in the ruby lib
8
5
  #include "RubySourceSupport.h"
9
6
 
10
7
  #include "eval_intern.h"
11
8
 
9
+ /***********
10
+ * Global *
11
+ ***********/
12
+
13
+ void Init_senderGlobal() {
14
+
15
+ rb_define_global_function( "__sender__", rb_RPRuby_Sender___sender__, 0 );
16
+ rb_define_global_function( "__caller__", rb_RPRuby_Sender___caller__, 0 );
17
+
18
+ }
19
+
12
20
  /***************************************************************************************************************************************************************
13
21
  ****************************************************************************************************************************************************************
14
- Global Ruby Methods
22
+ Ruby Global Methods
15
23
  ****************************************************************************************************************************************************************
16
24
  ***************************************************************************************************************************************************************/
17
25
 
@@ -25,15 +33,17 @@
25
33
  *
26
34
  * Return object sending message to receiver.
27
35
  */
28
- VALUE rb_RPRuby_SenderCaller__sender__() {
36
+ VALUE rb_RPRuby_Sender___sender__() {
29
37
 
30
- rb_control_frame_t* c_sending_frame = RPRuby_internal_framePriorToCurrent();
38
+ // get the frame prior to current frame
39
+ rb_control_frame_t* c_sending_frame = RPRuby_internal_framePriorTo( NULL );
31
40
 
41
+ // make sure the current frame wasn't the first frame or return nil
32
42
  if ( c_sending_frame == NULL ) {
33
43
  return Qnil;
34
44
  }
35
45
 
36
- // return rb_self that is sender
46
+ // assuming we have a previous frame, return its rb_self (our current receiver's sender)
37
47
  return c_sending_frame->self;
38
48
  }
39
49
 
@@ -47,30 +57,8 @@ VALUE rb_RPRuby_SenderCaller__sender__() {
47
57
  *
48
58
  * Return method sending message to receiver.
49
59
  */
50
- VALUE rb_RPRuby_SenderCaller__caller__() {
60
+ VALUE rb_RPRuby_Sender___caller__() {
51
61
 
52
62
  return ID2SYM( rb_frame_caller() );
53
63
  }
54
64
 
55
- /***************************************************************************************************************************************************************
56
- ****************************************************************************************************************************************************************
57
- Internal Methods
58
- ****************************************************************************************************************************************************************
59
- ***************************************************************************************************************************************************************/
60
-
61
- /*************************
62
- * framePriorToCurrent *
63
- ************************/
64
-
65
- rb_control_frame_t* RPRuby_internal_framePriorToCurrent() {
66
-
67
- rb_thread_t* c_thread = GET_THREAD();
68
- rb_control_frame_t* prior_control_frame = RUBY_VM_PREVIOUS_CONTROL_FRAME( c_thread->cfp );
69
-
70
- // Make sure we actually have a prior frame
71
- if ( (void*)( c_thread->stack + c_thread->stack_size ) == (void*)( prior_control_frame ) ) {
72
- return NULL;
73
- }
74
-
75
- return prior_control_frame;
76
- }
@@ -1,11 +1,11 @@
1
- #ifndef RP_SENDER_CALLER_GLOBAL
2
- #define RP_SENDER_CALLER_GLOBAL
1
+ #ifndef RP_SENDER_GLOBAL
2
+ #define RP_SENDER_GLOBAL
3
3
 
4
- #include "ruby.h"
5
- #include "eval_intern.h"
6
- #include "RubySourceSupport.h"
4
+ #include "RPSender_internal.h"
7
5
 
8
- VALUE rb_RPRuby_SenderCaller__sender__();
9
- VALUE rb_RPRuby_SenderCaller__caller__();
6
+ void Init_senderGlobal();
10
7
 
8
+ VALUE rb_RPRuby_Sender___sender__();
9
+ VALUE rb_RPRuby_Sender___caller__();
10
+
11
11
  #endif
@@ -2,6 +2,6 @@
2
2
  #ifndef RP_SENDER_CALLER_GLOBAL_INTERNAL
3
3
  #define RP_SENDER_CALLER_GLOBAL_INTERNAL
4
4
 
5
- rb_control_frame_t* RPRuby_internal_framePriorToCurrent();
5
+ rb_control_frame_t* RPRuby_internal_framePriorTo();
6
6
 
7
7
  #endif
@@ -0,0 +1,162 @@
1
+
2
+ #include "rb_Kernel.h"
3
+
4
+ #include "RPSender_internal.h"
5
+
6
+ #include "RubySourceSupport.h"
7
+
8
+ /***********
9
+ * Kernel *
10
+ ***********/
11
+
12
+ void Init_senderKernel() {
13
+
14
+ rb_define_singleton_method( rb_mKernel, "backtrace", rb_RPRuby_Sender_Kernel_backtrace, -1 );
15
+ rb_define_singleton_method( rb_mKernel, "backtrace_includes?", rb_RPRuby_Sender_Kernel_backtrace_includes, -1 );
16
+
17
+ }
18
+
19
+ /***************************************************************************************************************************************************************
20
+ ****************************************************************************************************************************************************************
21
+ Ruby Kernel Methods
22
+ ****************************************************************************************************************************************************************
23
+ ***************************************************************************************************************************************************************/
24
+
25
+ /******************
26
+ * __backtrace__ *
27
+ ******************/
28
+
29
+ /*
30
+ * call-seq:
31
+ * __backtrace__( number_of_frames = nil ) -> [ { :object => object, :method => method }, ... ]
32
+ *
33
+ * Return array of hashes with object and method frame information for backtrace.
34
+ * Specifying number_of_frames will cause only the last number_of_frames to be returned.
35
+ */
36
+ VALUE rb_RPRuby_Sender_Kernel_backtrace( int argc,
37
+ VALUE* args,
38
+ VALUE rb_self ) {
39
+
40
+ // create return array
41
+ VALUE rb_return_array = rb_ary_new();
42
+
43
+ // for each previous frame
44
+ rb_control_frame_t* c_control_frame = NULL;
45
+ int c_stack_level = 0;
46
+ int c_max_stack_level = 0;
47
+ if ( argc ) {
48
+ c_max_stack_level = FIX2INT( args[ 0 ] );
49
+ }
50
+ // loop while we have a prior control frame
51
+ while ( ( c_control_frame = RPRuby_internal_framePriorTo( c_control_frame ) ) != NULL
52
+ // and as long as we either have no stack limit specified, or until we reach the stack limit
53
+ && ( argc == 0
54
+ || c_stack_level < c_max_stack_level ) ) {
55
+
56
+ // get hash of info for this frame
57
+ VALUE rb_frame_hash = RPSender_internal_backtraceHashForControlFrame( c_control_frame );
58
+
59
+ if ( rb_frame_hash == Qnil ) {
60
+ break;
61
+ }
62
+
63
+ // push hash to array
64
+ rb_ary_push( rb_return_array,
65
+ rb_frame_hash );
66
+
67
+ c_stack_level++;
68
+ }
69
+
70
+ // return return array
71
+ return rb_return_array;
72
+ }
73
+
74
+ /*****************************
75
+ * __backtrace_includes?__ *
76
+ ****************************/
77
+
78
+ /*
79
+ * call-seq:
80
+ * __backtrace_includes?( method_or_object, ... ) -> true or false
81
+ * __backtrace_includes?( number_of_frames, method_or_object, ... ) -> true or false
82
+ *
83
+ * Returns whether specified methods or objects or classes are in the current backtrace context.
84
+ * Backtrace begins with the prior frame, so asking if the backtrace includes the current method
85
+ * will only report true if the current method is part of the earlier call chain.
86
+ */
87
+ VALUE rb_RPRuby_Sender_Kernel_backtrace_includes( int argc,
88
+ VALUE* args,
89
+ VALUE rb_self ) {
90
+
91
+ // create tracking array
92
+ VALUE rb_tracking_array = rb_ary_new();
93
+
94
+ // populate array with methods/objects
95
+ int c_which_arg = 0;
96
+ for ( c_which_arg = 0 ; c_which_arg < argc ; c_which_arg++ ) {
97
+ rb_ary_push( rb_tracking_array,
98
+ args[ c_which_arg ] );
99
+ }
100
+
101
+ // for each previous frame
102
+ rb_control_frame_t* c_control_frame = NULL;
103
+ while ( ( c_control_frame = RPRuby_internal_framePriorTo( c_control_frame ) ) != NULL ) {
104
+
105
+ // iterate each array member
106
+ int c_which_member;
107
+ for ( c_which_member = 0 ; c_which_member < RARRAY_LEN( rb_tracking_array ) ; c_which_member++ ) {
108
+
109
+ VALUE rb_array_member = args[ c_which_member ];
110
+
111
+ int matched = 0;
112
+
113
+ // if rb_array_member is a class
114
+ if ( TYPE( rb_array_member ) == T_CLASS ) {
115
+ // if rb_array_member is the current frame's object's class
116
+ if ( rb_array_member == rb_class_of( c_control_frame->self ) ) {
117
+ matched = 1;
118
+ }
119
+ }
120
+ // if rb_array_member is a method symbol and matches our current frame's method
121
+ else if ( TYPE( rb_array_member ) == T_SYMBOL ) {
122
+
123
+ if ( rb_to_id( rb_array_member ) == frame_func_id( c_control_frame ) ) {
124
+ matched = 1;
125
+ }
126
+ }
127
+ // if rb_array_member is an object
128
+ else if ( TYPE( rb_array_member ) == T_OBJECT ) {
129
+ // if rb_array_member is the current frame's object (self)
130
+ if ( rb_array_member == c_control_frame->self ) {
131
+ matched = 1;
132
+ }
133
+ }
134
+
135
+ // if array member exists in frame, remove from array
136
+ if ( matched ) {
137
+ // delete this index
138
+ rb_ary_delete_at( rb_tracking_array,
139
+ c_which_member );
140
+
141
+ // decrement the loop iterator so that the increase is offset
142
+ // this is necessary since we just removed an index and are iterating vs. the length of the array
143
+ c_which_member--;
144
+ }
145
+ }
146
+
147
+ // if array is empty, return true
148
+ // we check here as well as at the end so we can stop iterating the backtrace if we find all our items
149
+ if ( RARRAY_LEN( rb_tracking_array ) == 0 ) {
150
+ return Qtrue;
151
+ }
152
+ }
153
+
154
+ // if we finish iterating frames and still have items in the array, return false
155
+ if ( RARRAY_LEN( rb_tracking_array ) > 0 ) {
156
+ return Qfalse;
157
+ }
158
+
159
+ // otherwise, return true
160
+ return Qtrue;
161
+ }
162
+
@@ -0,0 +1,16 @@
1
+
2
+ #ifndef RP_SENDER_KERNEL
3
+ #define RP_SENDER_KERNEL
4
+
5
+ #include "ruby.h"
6
+
7
+ void Init_senderKernel();
8
+
9
+ VALUE rb_RPRuby_Sender_Kernel_backtrace( int argc,
10
+ VALUE* args,
11
+ VALUE rb_self );
12
+ VALUE rb_RPRuby_Sender_Kernel_backtrace_includes( int argc,
13
+ VALUE* args,
14
+ VALUE rb_self );
15
+
16
+ #endif
@@ -0,0 +1,207 @@
1
+ #ifndef ONIGURUMA_REGENC_H
2
+ #define ONIGURUMA_REGENC_H
3
+ /**********************************************************************
4
+ regenc.h - Oniguruma (regular expression library)
5
+ **********************************************************************/
6
+ /*-
7
+ * Copyright (c) 2002-2007 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
8
+ * All rights reserved.
9
+ *
10
+ * Redistribution and use in source and binary forms, with or without
11
+ * modification, are permitted provided that the following conditions
12
+ * are met:
13
+ * 1. Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ * 2. Redistributions in binary form must reproduce the above copyright
16
+ * notice, this list of conditions and the following disclaimer in the
17
+ * documentation and/or other materials provided with the distribution.
18
+ *
19
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
20
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
23
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29
+ * SUCH DAMAGE.
30
+ */
31
+ #ifndef REGINT_H
32
+ #ifndef RUBY_EXTERN
33
+ #include "ruby/config.h"
34
+ #include "ruby/defines.h"
35
+ #endif
36
+ #ifdef ONIG_ESCAPE_UCHAR_COLLISION
37
+ #undef ONIG_ESCAPE_UCHAR_COLLISION
38
+ #endif
39
+ #endif
40
+ #include "ruby/oniguruma.h"
41
+
42
+ typedef struct {
43
+ OnigCodePoint from;
44
+ OnigCodePoint to;
45
+ } OnigPairCaseFoldCodes;
46
+
47
+
48
+ #ifndef NULL
49
+ #define NULL ((void* )0)
50
+ #endif
51
+
52
+ #ifndef TRUE
53
+ #define TRUE 1
54
+ #endif
55
+
56
+ #ifndef FALSE
57
+ #define FALSE 0
58
+ #endif
59
+
60
+ #ifndef ARG_UNUSED
61
+ #if defined(__GNUC__)
62
+ # define ARG_UNUSED __attribute__ ((unused))
63
+ #else
64
+ # define ARG_UNUSED
65
+ #endif
66
+ #endif
67
+
68
+ #define ONIG_IS_NULL(p) (((void*)(p)) == (void*)0)
69
+ #define ONIG_IS_NOT_NULL(p) (((void*)(p)) != (void*)0)
70
+ #define ONIG_CHECK_NULL_RETURN(p) if (ONIG_IS_NULL(p)) return NULL
71
+ #define ONIG_CHECK_NULL_RETURN_VAL(p,val) if (ONIG_IS_NULL(p)) return (val)
72
+
73
+ #define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
74
+
75
+ /* character types bit flag */
76
+ #define BIT_CTYPE_NEWLINE (1<< ONIGENC_CTYPE_NEWLINE)
77
+ #define BIT_CTYPE_ALPHA (1<< ONIGENC_CTYPE_ALPHA)
78
+ #define BIT_CTYPE_BLANK (1<< ONIGENC_CTYPE_BLANK)
79
+ #define BIT_CTYPE_CNTRL (1<< ONIGENC_CTYPE_CNTRL)
80
+ #define BIT_CTYPE_DIGIT (1<< ONIGENC_CTYPE_DIGIT)
81
+ #define BIT_CTYPE_GRAPH (1<< ONIGENC_CTYPE_GRAPH)
82
+ #define BIT_CTYPE_LOWER (1<< ONIGENC_CTYPE_LOWER)
83
+ #define BIT_CTYPE_PRINT (1<< ONIGENC_CTYPE_PRINT)
84
+ #define BIT_CTYPE_PUNCT (1<< ONIGENC_CTYPE_PUNCT)
85
+ #define BIT_CTYPE_SPACE (1<< ONIGENC_CTYPE_SPACE)
86
+ #define BIT_CTYPE_UPPER (1<< ONIGENC_CTYPE_UPPER)
87
+ #define BIT_CTYPE_XDIGIT (1<< ONIGENC_CTYPE_XDIGIT)
88
+ #define BIT_CTYPE_WORD (1<< ONIGENC_CTYPE_WORD)
89
+ #define BIT_CTYPE_ALNUM (1<< ONIGENC_CTYPE_ALNUM)
90
+ #define BIT_CTYPE_ASCII (1<< ONIGENC_CTYPE_ASCII)
91
+
92
+ #define CTYPE_TO_BIT(ctype) (1<<(ctype))
93
+ #define CTYPE_IS_WORD_GRAPH_PRINT(ctype) \
94
+ ((ctype) == ONIGENC_CTYPE_WORD || (ctype) == ONIGENC_CTYPE_GRAPH ||\
95
+ (ctype) == ONIGENC_CTYPE_PRINT)
96
+
97
+
98
+ typedef struct {
99
+ UChar *name;
100
+ int ctype;
101
+ short int len;
102
+ } PosixBracketEntryType;
103
+
104
+
105
+ /* #define USE_CRNL_AS_LINE_TERMINATOR */
106
+ #define USE_UNICODE_PROPERTIES
107
+ /* #define USE_UNICODE_CASE_FOLD_TURKISH_AZERI */
108
+ /* #define USE_UNICODE_ALL_LINE_TERMINATORS */ /* see Unicode.org UTF#18 */
109
+
110
+
111
+ #define ONIG_ENCODING_INIT_DEFAULT ONIG_ENCODING_ASCII
112
+
113
+ /* for encoding system implementation (internal) */
114
+ ONIG_EXTERN int onigenc_ascii_apply_all_case_fold P_((OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg, OnigEncoding enc));
115
+ ONIG_EXTERN int onigenc_ascii_get_case_fold_codes_by_str P_((OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[], OnigEncoding enc));
116
+ ONIG_EXTERN int onigenc_apply_all_case_fold_with_map P_((int map_size, const OnigPairCaseFoldCodes map[], int ess_tsett_flag, OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg));
117
+ ONIG_EXTERN int onigenc_get_case_fold_codes_by_str_with_map P_((int map_size, const OnigPairCaseFoldCodes map[], int ess_tsett_flag, OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[]));
118
+ ONIG_EXTERN int onigenc_not_support_get_ctype_code_range P_((OnigCtype ctype, OnigCodePoint* sb_out, const OnigCodePoint* ranges[], OnigEncoding enc));
119
+ ONIG_EXTERN int onigenc_is_mbc_newline_0x0a P_((const UChar* p, const UChar* end, OnigEncoding enc));
120
+
121
+
122
+ /* methods for single byte encoding */
123
+ ONIG_EXTERN int onigenc_ascii_mbc_case_fold P_((OnigCaseFoldType flag, const UChar** p, const UChar* end, UChar* lower, OnigEncoding enc));
124
+ ONIG_EXTERN int onigenc_single_byte_mbc_enc_len P_((const UChar* p, const UChar* e, OnigEncoding enc));
125
+ ONIG_EXTERN OnigCodePoint onigenc_single_byte_mbc_to_code P_((const UChar* p, const UChar* end, OnigEncoding enc));
126
+ ONIG_EXTERN int onigenc_single_byte_code_to_mbclen P_((OnigCodePoint code, OnigEncoding enc));
127
+ ONIG_EXTERN int onigenc_single_byte_code_to_mbc P_((OnigCodePoint code, UChar *buf, OnigEncoding enc));
128
+ ONIG_EXTERN UChar* onigenc_single_byte_left_adjust_char_head P_((const UChar* start, const UChar* s, const OnigUChar* end, OnigEncoding enc));
129
+ ONIG_EXTERN int onigenc_always_true_is_allowed_reverse_match P_((const UChar* s, const UChar* end, OnigEncoding enc));
130
+ ONIG_EXTERN int onigenc_always_false_is_allowed_reverse_match P_((const UChar* s, const UChar* end, OnigEncoding enc));
131
+ ONIG_EXTERN int onigenc_ascii_is_code_ctype P_((OnigCodePoint code, unsigned int ctype, OnigEncoding enc));
132
+
133
+ /* methods for multi byte encoding */
134
+ ONIG_EXTERN OnigCodePoint onigenc_mbn_mbc_to_code P_((OnigEncoding enc, const UChar* p, const UChar* end));
135
+ ONIG_EXTERN int onigenc_mbn_mbc_case_fold P_((OnigEncoding enc, OnigCaseFoldType flag, const UChar** p, const UChar* end, UChar* lower));
136
+ ONIG_EXTERN int onigenc_mb2_code_to_mbclen P_((OnigCodePoint code, OnigEncoding enc));
137
+ ONIG_EXTERN int onigenc_mb2_code_to_mbc P_((OnigEncoding enc, OnigCodePoint code, UChar *buf));
138
+ ONIG_EXTERN int onigenc_minimum_property_name_to_ctype P_((OnigEncoding enc, UChar* p, UChar* end));
139
+ ONIG_EXTERN int onigenc_unicode_property_name_to_ctype P_((OnigEncoding enc, UChar* p, UChar* end));
140
+ ONIG_EXTERN int onigenc_mb2_is_code_ctype P_((OnigEncoding enc, OnigCodePoint code, unsigned int ctype));
141
+ ONIG_EXTERN int onigenc_mb4_code_to_mbclen P_((OnigCodePoint code, OnigEncoding enc));
142
+ ONIG_EXTERN int onigenc_mb4_code_to_mbc P_((OnigEncoding enc, OnigCodePoint code, UChar *buf));
143
+ ONIG_EXTERN int onigenc_mb4_is_code_ctype P_((OnigEncoding enc, OnigCodePoint code, unsigned int ctype));
144
+
145
+
146
+ /* in enc/unicode.c */
147
+ ONIG_EXTERN int onigenc_unicode_is_code_ctype P_((OnigCodePoint code, unsigned int ctype, OnigEncoding enc));
148
+ ONIG_EXTERN int onigenc_utf16_32_get_ctype_code_range P_((OnigCtype ctype, OnigCodePoint *sb_out, const OnigCodePoint* ranges[], OnigEncoding enc));
149
+ ONIG_EXTERN int onigenc_unicode_ctype_code_range P_((int ctype, const OnigCodePoint* ranges[]));
150
+ ONIG_EXTERN int onigenc_unicode_get_case_fold_codes_by_str P_((OnigEncoding enc, OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[]));
151
+ ONIG_EXTERN int onigenc_unicode_mbc_case_fold P_((OnigEncoding enc, OnigCaseFoldType flag, const UChar** pp, const UChar* end, UChar* fold));
152
+ ONIG_EXTERN int onigenc_unicode_apply_all_case_fold P_((OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg, OnigEncoding enc));
153
+
154
+
155
+ #define ONIGENC_ISO_8859_1_TO_LOWER_CASE(c) \
156
+ OnigEncISO_8859_1_ToLowerCaseTable[c]
157
+ #define ONIGENC_ISO_8859_1_TO_UPPER_CASE(c) \
158
+ OnigEncISO_8859_1_ToUpperCaseTable[c]
159
+
160
+ ONIG_EXTERN const UChar OnigEncISO_8859_1_ToLowerCaseTable[];
161
+ ONIG_EXTERN const UChar OnigEncISO_8859_1_ToUpperCaseTable[];
162
+
163
+ ONIG_EXTERN int
164
+ onigenc_with_ascii_strncmp P_((OnigEncoding enc, const UChar* p, const UChar* end, const UChar* sascii /* ascii */, int n));
165
+ ONIG_EXTERN UChar*
166
+ onigenc_step P_((OnigEncoding enc, const UChar* p, const UChar* end, int n));
167
+
168
+ /* defined in regexec.c, but used in enc/xxx.c */
169
+ extern int onig_is_in_code_range P_((const UChar* p, OnigCodePoint code));
170
+
171
+ ONIG_EXTERN OnigEncoding OnigEncDefaultCharEncoding;
172
+ ONIG_EXTERN const UChar OnigEncAsciiToLowerCaseTable[];
173
+ ONIG_EXTERN const UChar OnigEncAsciiToUpperCaseTable[];
174
+ ONIG_EXTERN const unsigned short OnigEncAsciiCtypeTable[];
175
+
176
+ #define ONIGENC_IS_ASCII_CODE(code) ((code) < 0x80)
177
+ #define ONIGENC_ASCII_CODE_TO_LOWER_CASE(c) OnigEncAsciiToLowerCaseTable[c]
178
+ #define ONIGENC_ASCII_CODE_TO_UPPER_CASE(c) OnigEncAsciiToUpperCaseTable[c]
179
+ #define ONIGENC_IS_ASCII_CODE_CTYPE(code,ctype) \
180
+ ((OnigEncAsciiCtypeTable[code] & CTYPE_TO_BIT(ctype)) != 0)
181
+ #define ONIGENC_IS_ASCII_CODE_CASE_AMBIG(code) \
182
+ (ONIGENC_IS_ASCII_CODE_CTYPE(code, ONIGENC_CTYPE_UPPER) ||\
183
+ ONIGENC_IS_ASCII_CODE_CTYPE(code, ONIGENC_CTYPE_LOWER))
184
+
185
+ #ifdef ONIG_ENC_REGISTER
186
+ extern int ONIG_ENC_REGISTER(const char *, OnigEncodingType*);
187
+ #define OnigEncodingName(n) encoding_##n
188
+ #define OnigEncodingDeclare(n) static OnigEncodingType OnigEncodingName(n)
189
+ #define OnigEncodingDefine(f,n) \
190
+ OnigEncodingDeclare(n); \
191
+ void Init_##f(void) { \
192
+ ONIG_ENC_REGISTER(OnigEncodingName(n).name, \
193
+ &OnigEncodingName(n)); \
194
+ } \
195
+ OnigEncodingDeclare(n)
196
+ #else
197
+ #define OnigEncodingName(n) OnigEncoding##n
198
+ #define OnigEncodingDeclare(n) OnigEncodingType OnigEncodingName(n)
199
+ #define OnigEncodingDefine(f,n) OnigEncodingDeclare(n)
200
+ #endif
201
+
202
+ /* macros for define replica encoding and encoding alias */
203
+ #define ENC_REPLICATE(name, orig)
204
+ #define ENC_ALIAS(name, orig)
205
+ #define ENC_DUMMY(name)
206
+
207
+ #endif /* ONIGURUMA_REGENC_H */