00001
00004 #ifndef RUBY_H
00005 #define RUBY_H
00006
00007 #if defined(__cplusplus)
00008 extern "C" {
00009 #endif
00010
00011 #include "config.h"
00012 #include "defines.h"
00013
00014 #ifdef HAVE_STDLIB_H
00015 # include <stdlib.h>
00016 #endif
00017
00018 #ifdef HAVE_STRING_H
00019 # include <string.h>
00020 #else
00021 # include <strings.h>
00022 #endif
00023
00024 #ifdef HAVE_INTRINSICS_H
00025 # include <intrinsics.h>
00026 #endif
00027
00028 #include <stddef.h>
00029 #include <stdio.h>
00030
00031
00032 #ifndef ISPRINT
00033 #define ISASCII(c) isascii((int)(unsigned char)(c))
00034 #undef ISPRINT
00035 #define ISPRINT(c) (ISASCII(c) && isprint((int)(unsigned char)(c)))
00036 #define ISSPACE(c) (ISASCII(c) && isspace((int)(unsigned char)(c)))
00037 #define ISUPPER(c) (ISASCII(c) && isupper((int)(unsigned char)(c)))
00038 #define ISLOWER(c) (ISASCII(c) && islower((int)(unsigned char)(c)))
00039 #define ISALNUM(c) (ISASCII(c) && isalnum((int)(unsigned char)(c)))
00040 #define ISALPHA(c) (ISASCII(c) && isalpha((int)(unsigned char)(c)))
00041 #define ISDIGIT(c) (ISASCII(c) && isdigit((int)(unsigned char)(c)))
00042 #define ISXDIGIT(c) (ISASCII(c) && isxdigit((int)(unsigned char)(c)))
00043 #endif
00044
00045 #define NORETURN_STYLE_NEW 1
00046 #ifndef NORETURN
00047 # define NORETURN(x) x
00048 #endif
00049
00050 #if defined(HAVE_ALLOCA_H)
00051 #include <alloca.h>
00052 #endif
00053
00054 #ifdef _AIX
00055 #pragma alloca
00056 #endif
00057
00058 #if defined(__VMS)
00059 # pragma builtins
00060 # define alloca __alloca
00061 #endif
00062
00063 #if SIZEOF_LONG != SIZEOF_VOIDP
00064 # error ---->> ruby requires sizeof(void*) == sizeof(long) to be compiled. <<----
00065 #endif
00066 typedef unsigned long VALUE;
00067 typedef unsigned long ID;
00068
00069 #ifdef __STDC__
00070 # include <limits.h>
00071 #else
00072 # ifndef LONG_MAX
00073 # ifdef HAVE_LIMITS_H
00074 # include <limits.h>
00075 # else
00076
00077 # define LONG_MAX 2147483647
00078 # endif
00079 # endif
00080 # ifndef LONG_MIN
00081 # define LONG_MIN (-LONG_MAX-1)
00082 # endif
00083 # ifndef CHAR_BIT
00084 # define CHAR_BIT 8
00085 # endif
00086 #endif
00087
00088 #if HAVE_LONG_LONG
00089 # ifndef LLONG_MAX
00090 # ifdef LONG_LONG_MAX
00091 # define LLONG_MAX LONG_LONG_MAX
00092 # else
00093 # ifdef _I64_MAX
00094 # define LLONG_MAX _I64_MAX
00095 # else
00096
00097 # define LLONG_MAX 9223372036854775807LL
00098 # endif
00099 # endif
00100 # endif
00101 # ifndef LLONG_MIN
00102 # ifdef LONG_LONG_MIN
00103 # define LLONG_MIN LONG_LONG_MIN
00104 # else
00105 # ifdef _I64_MIN
00106 # define LLONG_MIN _I64_MIN
00107 # else
00108 # define LLONG_MIN (-LLONG_MAX-1)
00109 # endif
00110 # endif
00111 # endif
00112 #endif
00113
00115 #define FIXNUM_MAX (LONG_MAX>>1)
00116
00117 #define FIXNUM_MIN RSHIFT((long)LONG_MIN,1)
00118
00119 #define FIXNUM_FLAG 0x01
00120
00124 #define INT2FIX(i) ((VALUE)(((long)(i))<<1 | FIXNUM_FLAG))
00125 #define LONG2FIX(i) INT2FIX(i)
00126 #define rb_fix_new(v) INT2FIX(v)
00127 VALUE rb_int2inum (long);
00128 #define INT2NUM(v) rb_int2inum(v)
00129 #define LONG2NUM(v) INT2NUM(v)
00130 #define rb_int_new(v) rb_int2inum(v)
00131 VALUE rb_uint2inum (unsigned long);
00132 #define UINT2NUM(v) rb_uint2inum(v)
00133 #define ULONG2NUM(v) UINT2NUM(v)
00134 #define rb_uint_new(v) rb_uint2inum(v)
00135
00136 #if HAVE_LONG_LONG
00137 VALUE rb_ll2inum (LONG_LONG);
00138 #define LL2NUM(v) rb_ll2inum(v)
00139 VALUE rb_ull2inum (unsigned LONG_LONG);
00140 #define ULL2NUM(v) rb_ull2inum(v)
00141 #endif
00142
00143 #if SIZEOF_OFF_T > SIZEOF_LONG && defined(HAVE_LONG_LONG)
00144 # define OFFT2NUM(v) LL2NUM(v)
00145 #else
00146 # define OFFT2NUM(v) INT2NUM(v)
00147 #endif
00148
00149 #define FIX2LONG(x) RSHIFT((long)x,1)
00150 #define FIX2ULONG(x) (((unsigned long)(x))>>1)
00151 #define FIXNUM_P(f) (((long)(f))&FIXNUM_FLAG)
00152 #define POSFIXABLE(f) ((f) <= FIXNUM_MAX)
00153 #define NEGFIXABLE(f) ((f) >= FIXNUM_MIN)
00154 #define FIXABLE(f) (POSFIXABLE(f) && NEGFIXABLE(f))
00155
00158 #define IMMEDIATE_MASK 0x03
00159 #define IMMEDIATE_P(x) ((VALUE)(x) & IMMEDIATE_MASK)
00160
00163 #define SYMBOL_FLAG 0x0e
00164 #define SYMBOL_P(x) (((VALUE)(x)&0xff)==SYMBOL_FLAG)
00165 #define ID2SYM(x) ((VALUE)(((long)(x))<<8|SYMBOL_FLAG))
00166 #define SYM2ID(x) RSHIFT((long)x,8)
00167 /! @} */
00168
00173 #define Qfalse 0
00174 #define Qtrue 2
00175 #define Qnil 4
00176 #define Qundef 6
00180 #define RTEST(v) (((VALUE)(v) & ~Qnil) != 0)
00181
00182 #define NIL_P(v) ((VALUE)(v) == Qnil)
00183
00184 #define CLASS_OF(v) rb_class_of((VALUE)(v))
00185
00189 #define T_NONE 0x00
00190
00191 #define T_NIL 0x01
00192 #define T_OBJECT 0x02
00193 #define T_CLASS 0x03
00194 #define T_ICLASS 0x04
00195 #define T_MODULE 0x05
00196 #define T_FLOAT 0x06
00197 #define T_STRING 0x07
00198 #define T_REGEXP 0x08
00199 #define T_ARRAY 0x09
00200 #define T_FIXNUM 0x0a
00201 #define T_HASH 0x0b
00202 #define T_STRUCT 0x0c
00203 #define T_BIGNUM 0x0d
00204 #define T_FILE 0x0e
00205
00206 #define T_TRUE 0x20
00207 #define T_FALSE 0x21
00208 #define T_DATA 0x22
00209 #define T_MATCH 0x23
00210 #define T_SYMBOL 0x24
00211
00212 #define T_BLKTAG 0x3b
00213 #define T_UNDEF 0x3c
00214 #define T_VARMAP 0x3d
00215 #define T_SCOPE 0x3e
00216 #define T_NODE 0x3f
00217
00218 #define T_MASK 0x3f
00219
00222 #define BUILTIN_TYPE(x) (((struct RBasic*)(x))->flags & T_MASK)
00223
00227 #define TYPE(x) rb_type((VALUE)(x))
00228
00229 void rb_check_type (VALUE,int);
00232 #define Check_Type(v,t) rb_check_type((VALUE)(v),t)
00233
00238 VALUE rb_str_to_str (VALUE);
00239 VALUE rb_string_value (volatile VALUE*);
00240 char *rb_string_value_ptr (volatile VALUE*);
00241 char *rb_string_value_cstr (volatile VALUE*);
00242
00243 #define StringValue(v) rb_string_value(&(v))
00244 #define StringValuePtr(v) rb_string_value_ptr(&(v))
00245 #define StringValueCStr(v) rb_string_value_cstr(&(v))
00246
00247 void rb_check_safe_obj (VALUE);
00248 void rb_check_safe_str (VALUE);
00249 #define SafeStringValue(v) do {\
00250 StringValue(v);\
00251 rb_check_safe_obj(v);\
00252 } while (0)
00253
00254 #define Check_SafeStr(v) rb_check_safe_str((VALUE)(v))
00255
00258 void rb_secure (int);
00259 RUBY_EXTERN int ruby_safe_level;
00260 #define rb_safe_level() (ruby_safe_level)
00261 void rb_set_safe_level (int);
00262 void rb_secure_update (VALUE);
00263
00268 long rb_num2long (VALUE);
00269 unsigned long rb_num2ulong (VALUE);
00270 #define NUM2LONG(x) (FIXNUM_P(x)?FIX2LONG(x):rb_num2long((VALUE)x))
00271 #define NUM2ULONG(x) rb_num2ulong((VALUE)x)
00272 #if SIZEOF_INT < SIZEOF_LONG
00273 long rb_num2int (VALUE);
00274 #define NUM2INT(x) (FIXNUM_P(x)?FIX2INT(x):rb_num2int((VALUE)x))
00275 long rb_fix2int (VALUE);
00276 #define FIX2INT(x) rb_fix2int((VALUE)x)
00277 unsigned long rb_num2uint (VALUE);
00278 #define NUM2UINT(x) rb_num2uint(x)
00279 unsigned long rb_fix2uint (VALUE);
00280 #define FIX2UINT(x) rb_fix2uint(x)
00281 #else
00282 #define NUM2INT(x) ((int)NUM2LONG(x))
00283 #define NUM2UINT(x) ((unsigned int)NUM2ULONG(x))
00284 #define FIX2INT(x) ((int)FIX2LONG(x))
00285 #define FIX2UINT(x) ((unsigned int)FIX2ULONG(x))
00286 #endif
00287
00288 #if HAVE_LONG_LONG
00289 LONG_LONG rb_num2ll (VALUE);
00290 unsigned LONG_LONG rb_num2ull (VALUE);
00291 # define NUM2LL(x) (FIXNUM_P(x)?FIX2LONG(x):rb_num2ll((VALUE)x))
00292 #endif
00293
00294 #if HAVE_LONG_LONG && SIZEOF_OFF_T > SIZEOF_LONG
00295 # define NUM2OFFT(x) ((off_t)NUM2LL(x))
00296 #else
00297 # define NUM2OFFT(x) NUM2LONG(x)
00298 #endif
00299
00303 double rb_num2dbl (VALUE);
00304 #define NUM2DBL(x) rb_num2dbl((VALUE)(x))
00305
00311 char *rb_str2cstr (VALUE,long*);
00313 #define STR2CSTR(x) rb_str2cstr((VALUE)(x),0)
00314
00316 #define NUM2CHR(x) (((TYPE(x) == T_STRING)&&(RSTRING(x)->len>=1))?\
00317 RSTRING(x)->ptr[0]:(char)(NUM2INT(x)&0xff))
00318 #define CHR2FIX(x) INT2FIX((long)((x)&0xff))
00319
00322 VALUE rb_newobj (void);
00323 #define NEWOBJ(obj,type) type *obj = (type*)rb_newobj()
00324 #define OBJSETUP(obj,c,t) do {\
00325 RBASIC(obj)->flags = (t);\
00326 RBASIC(obj)->klass = (c);\
00327 if (rb_safe_level() >= 3) FL_SET(obj, FL_TAINT);\
00328 } while (0)
00329 #define CLONESETUP(clone,obj) do {\
00330 OBJSETUP(clone,rb_singleton_class_clone((VALUE)obj),RBASIC(obj)->flags);\
00331 rb_singleton_class_attached(RBASIC(clone)->klass, (VALUE)clone);\
00332 if (FL_TEST(obj, FL_EXIVAR)) rb_copy_generic_ivar((VALUE)clone,(VALUE)obj);\
00333 } while (0)
00334 #define DUPSETUP(dup,obj) do {\
00335 OBJSETUP(dup,rb_obj_class(obj),(RBASIC(obj)->flags)&(T_MASK|FL_EXIVAR|FL_TAINT));\
00336 if (FL_TEST(obj, FL_EXIVAR)) rb_copy_generic_ivar((VALUE)dup,(VALUE)obj);\
00337 } while (0)
00338
00339 struct RBasic {
00340 unsigned long flags;
00341 VALUE klass;
00342 };
00343
00344 struct RObject {
00345 struct RBasic basic;
00346 struct st_table *iv_tbl;
00347 };
00348
00349 struct RClass {
00350 struct RBasic basic;
00351 struct st_table *iv_tbl;
00352 struct st_table *m_tbl;
00353 VALUE super;
00354 };
00355
00356 struct RFloat {
00357 struct RBasic basic;
00358 double value;
00359 };
00360
00361 #define ELTS_SHARED FL_USER2
00362
00363 struct RString {
00364 struct RBasic basic;
00365 long len;
00366 char *ptr;
00367 union {
00368 long capa;
00369 VALUE shared;
00370 } aux;
00371 };
00372
00373 struct RArray {
00374 struct RBasic basic;
00375 long len;
00376 union {
00377 long capa;
00378 VALUE shared;
00379 } aux;
00380 VALUE *ptr;
00381 };
00382
00383 struct RRegexp {
00384 struct RBasic basic;
00385 struct re_pattern_buffer *ptr;
00386 long len;
00387 char *str;
00388 };
00389
00390 struct RHash {
00391 struct RBasic basic;
00392 struct st_table *tbl;
00393 int iter_lev;
00394 VALUE ifnone;
00395 };
00396
00397 struct RFile {
00398 struct RBasic basic;
00399 struct OpenFile *fptr;
00400 };
00401
00402 struct RData {
00403 struct RBasic basic;
00404 void (*dmark) (void*);
00405 void (*dfree) (void*);
00406 void *data;
00407 };
00408
00409 #define DATA_PTR(dta) (RDATA(dta)->data)
00410
00411
00412
00413
00414 typedef void (*RUBY_DATA_FUNC) (void*);
00415
00416 VALUE rb_data_object_alloc (VALUE,void*,RUBY_DATA_FUNC,RUBY_DATA_FUNC);
00417
00418 #define Data_Wrap_Struct(klass,mark,free,sval)\
00419 rb_data_object_alloc(klass,sval,(RUBY_DATA_FUNC)mark,(RUBY_DATA_FUNC)free)
00420
00421 #define Data_Make_Struct(klass,type,mark,free,sval) (\
00422 sval = ALLOC(type),\
00423 memset(sval, 0, sizeof(type)),\
00424 Data_Wrap_Struct(klass,mark,free,sval)\
00425 )
00426
00427 #define Data_Get_Struct(obj,type,sval) do {\
00428 Check_Type(obj, T_DATA); \
00429 sval = (type*)DATA_PTR(obj);\
00430 } while (0)
00431
00432 struct RStruct {
00433 struct RBasic basic;
00434 long len;
00435 VALUE *ptr;
00436 };
00437
00438 struct RBignum {
00439 struct RBasic basic;
00440 char sign;
00441 long len;
00442 void *digits;
00443 };
00444
00447 #define R_CAST(st) (struct st*)
00448 #define RBASIC(obj) (R_CAST(RBasic)(obj))
00449 #define ROBJECT(obj) (R_CAST(RObject)(obj))
00450 #define RCLASS(obj) (R_CAST(RClass)(obj))
00451 #define RMODULE(obj) RCLASS(obj)
00452 #define RFLOAT(obj) (R_CAST(RFloat)(obj))
00453 #define RSTRING(obj) (R_CAST(RString)(obj))
00454 #define RREGEXP(obj) (R_CAST(RRegexp)(obj))
00455 #define RARRAY(obj) (R_CAST(RArray)(obj))
00456 #define RHASH(obj) (R_CAST(RHash)(obj))
00457 #define RDATA(obj) (R_CAST(RData)(obj))
00458 #define RSTRUCT(obj) (R_CAST(RStruct)(obj))
00459 #define RBIGNUM(obj) (R_CAST(RBignum)(obj))
00460 #define RFILE(obj) (R_CAST(RFile)(obj))
00461
00463 #define FL_SINGLETON FL_USER0
00464 #define FL_MARK (1<<6)
00465 #define FL_FINALIZE (1<<7)
00466 #define FL_TAINT (1<<8)
00467 #define FL_EXIVAR (1<<9)
00468 #define FL_FREEZE (1<<10)
00469
00470 #define FL_USHIFT 11
00471
00472 #define FL_USER0 (1<<(FL_USHIFT+0))
00473 #define FL_USER1 (1<<(FL_USHIFT+1))
00474 #define FL_USER2 (1<<(FL_USHIFT+2))
00475 #define FL_USER3 (1<<(FL_USHIFT+3))
00476 #define FL_USER4 (1<<(FL_USHIFT+4))
00477 #define FL_USER5 (1<<(FL_USHIFT+5))
00478 #define FL_USER6 (1<<(FL_USHIFT+6))
00479 #define FL_USER7 (1<<(FL_USHIFT+7))
00480
00481 #define FL_UMASK (0xff<<FL_USHIFT)
00482
00483 #define SPECIAL_CONST_P(x) (IMMEDIATE_P(x) || !RTEST(x))
00484
00485 #define FL_ABLE(x) (!SPECIAL_CONST_P(x))
00486 #define FL_TEST(x,f) (FL_ABLE(x)?(RBASIC(x)->flags&(f)):0)
00487 #define FL_SET(x,f) do {if (FL_ABLE(x)) RBASIC(x)->flags |= (f);} while (0)
00488 #define FL_UNSET(x,f) do {if (FL_ABLE(x)) RBASIC(x)->flags &= ~(f);} while (0)
00489 #define FL_REVERSE(x,f) do {if (FL_ABLE(x)) RBASIC(x)->flags ^= (f);} while (0)
00490
00491 #define OBJ_TAINTED(x) FL_TEST((x), FL_TAINT)
00492 #define OBJ_TAINT(x) FL_SET((x), FL_TAINT)
00493 #define OBJ_INFECT(x,s) do {if (FL_ABLE(x) && FL_ABLE(s)) RBASIC(x)->flags |= RBASIC(s)->flags & FL_TAINT;} while (0)
00494
00497 #define OBJ_FROZEN(x) FL_TEST((x), FL_FREEZE)
00498 #define OBJ_FREEZE(x) FL_SET((x), FL_FREEZE)
00499
00503 #define ALLOC_N(type,n) (type*)xmalloc(sizeof(type)*(n))
00504 #define ALLOC(type) (type*)xmalloc(sizeof(type))
00505 #define REALLOC_N(var,type,n) (var)=(type*)xrealloc((char*)(var),sizeof(type)*(n))
00506
00507 #define ALLOCA_N(type,n) (type*)alloca(sizeof(type)*(n))
00508
00509 #define MEMZERO(p,type,n) memset((p), 0, sizeof(type)*(n))
00510 #define MEMCPY(p1,p2,type,n) memcpy((p1), (p2), sizeof(type)*(n))
00511 #define MEMMOVE(p1,p2,type,n) memmove((p1), (p2), sizeof(type)*(n))
00512 #define MEMCMP(p1,p2,type,n) memcmp((p1), (p2), sizeof(type)*(n))
00513
00517 void rb_obj_infect (VALUE,VALUE);
00518
00519 void rb_glob (char*,void(*(const char*,VALUE),VALUE));
00520 void rb_globi (char*,void(*(const char*,VALUE),VALUE));
00521
00522 VALUE rb_define_class (const char*,VALUE);
00523 VALUE rb_define_module (const char*);
00524 VALUE rb_define_class_under (VALUE, const char*, VALUE);
00525 VALUE rb_define_module_under (VALUE, const char*);
00526
00527 void rb_include_module (VALUE,VALUE);
00528 void rb_extend_object (VALUE,VALUE);
00529
00530 void rb_define_variable (const char*,VALUE*);
00531 void rb_define_virtual_variable (const char*,VALUE(*(ANYARGS),void(*)(ANYARGS)));
00532 void rb_define_hooked_variable (const char*,VALUE*,VALUE(*(ANYARGS),void(*)(ANYARGS)));
00533 void rb_define_readonly_variable (const char*,VALUE*);
00534 void rb_define_const (VALUE,const char*,VALUE);
00535 void rb_define_global_const (const char*,VALUE);
00536
00537 #define RUBY_METHOD_FUNC(func) ((VALUE (*)(ANYARGS))func)
00538 void rb_define_method (VALUE,const char*,VALUE(*(ANYARGS),int));
00539 void rb_define_module_function (VALUE,const char*,VALUE(*(ANYARGS),int));
00540 void rb_define_global_function (const char*,VALUE(*(ANYARGS),int));
00541
00542 void rb_undef_method (VALUE,const char*);
00543 void rb_define_alias (VALUE,const char*,const char*);
00544 void rb_define_attr (VALUE,const char*,int,int);
00545
00546 void rb_global_variable (VALUE*);
00547 void rb_gc_register_address (VALUE*);
00548 void rb_gc_unregister_address (VALUE*);
00549
00550 ID rb_intern (const char*);
00551 char *rb_id2name (ID);
00552 ID rb_to_id (VALUE);
00553
00554 char *rb_class2name (VALUE);
00555 char *rb_obj_classname (VALUE);
00556
00558 void rb_p (VALUE);
00559
00560 VALUE rb_eval_string (const char*);
00561 VALUE rb_eval_string_protect (const char*, int*);
00562 VALUE rb_eval_string_wrap (const char*, int*);
00563 VALUE rb_funcall (VALUE, ID, int, ...);
00564 VALUE rb_funcall2 (VALUE, ID, int, const VALUE*);
00565 VALUE rb_funcall3 (VALUE, ID, int, const VALUE*);
00566 int rb_scan_args (int, const VALUE*, const char*, ...);
00567 VALUE rb_call_super (int, const VALUE*);
00568
00569 VALUE rb_gv_set (const char*, VALUE);
00570 VALUE rb_gv_get (const char*);
00571 VALUE rb_iv_get (VALUE, const char*);
00572 VALUE rb_iv_set (VALUE, const char*, VALUE);
00573
00574 VALUE rb_equal (VALUE,VALUE);
00575
00576 RUBY_EXTERN VALUE ruby_verbose, ruby_debug;
00579 void rb_raise (VALUE, const char*, ...);
00581 void rb_fatal (const char*, ...);
00583 void rb_bug (const char*, ...);
00585 void rb_sys_fail (const char*);
00587 void rb_iter_break (void);
00589 void rb_exit (int);
00591 void rb_notimplement (void);
00592
00593 void rb_warning (const char*, ...);
00594 void rb_sys_warning (const char*, ...);
00595 void rb_warn (const char*, ...);
00596
00597 VALUE rb_each (VALUE);
00598 VALUE rb_yield (VALUE);
00599 VALUE rb_yield_values (int n, ...);
00600 VALUE rb_yield_splat (VALUE);
00601 int rb_block_given_p (void);
00602 VALUE rb_iterate (VALUE(*(VALUE),VALUE,VALUE(*)(ANYARGS),VALUE));
00603 VALUE rb_rescue (VALUE(*(ANYARGS),VALUE,VALUE(*)(ANYARGS),VALUE));
00604 VALUE rb_rescue2 (VALUE(*(ANYARGS),VALUE,VALUE(*)(ANYARGS),VALUE,...));
00605 VALUE rb_ensure (VALUE(*(ANYARGS),VALUE,VALUE(*)(ANYARGS),VALUE));
00606 VALUE rb_catch (const char*,VALUE(*(ANYARGS),VALUE));
00608 void rb_throw (const char*,VALUE);
00609
00610 VALUE rb_require (const char*);
00611
00612 void ruby_init (void);
00613 void ruby_options (int, char**);
00615 void ruby_run (void);
00620 RUBY_EXTERN VALUE rb_mKernel;
00621 RUBY_EXTERN VALUE rb_mComparable;
00622 RUBY_EXTERN VALUE rb_mEnumerable;
00623 RUBY_EXTERN VALUE rb_mPrecision;
00624 RUBY_EXTERN VALUE rb_mErrno;
00625 RUBY_EXTERN VALUE rb_mFileTest;
00626 RUBY_EXTERN VALUE rb_mGC;
00627 RUBY_EXTERN VALUE rb_mMath;
00628 RUBY_EXTERN VALUE rb_mProcess;
00633 RUBY_EXTERN VALUE rb_cObject;
00634 RUBY_EXTERN VALUE rb_cArray;
00635 RUBY_EXTERN VALUE rb_cBignum;
00636 RUBY_EXTERN VALUE rb_cClass;
00637 RUBY_EXTERN VALUE rb_cDir;
00638 RUBY_EXTERN VALUE rb_cData;
00639 RUBY_EXTERN VALUE rb_cFalseClass;
00640 RUBY_EXTERN VALUE rb_cFile;
00641 RUBY_EXTERN VALUE rb_cFixnum;
00642 RUBY_EXTERN VALUE rb_cFloat;
00643 RUBY_EXTERN VALUE rb_cHash;
00644 RUBY_EXTERN VALUE rb_cInteger;
00645 RUBY_EXTERN VALUE rb_cIO;
00646 RUBY_EXTERN VALUE rb_cModule;
00647 RUBY_EXTERN VALUE rb_cNilClass;
00648 RUBY_EXTERN VALUE rb_cNumeric;
00649 RUBY_EXTERN VALUE rb_cProc;
00650 RUBY_EXTERN VALUE rb_cRange;
00651 RUBY_EXTERN VALUE rb_cRegexp;
00652 RUBY_EXTERN VALUE rb_cString;
00653 RUBY_EXTERN VALUE rb_cSymbol;
00654 RUBY_EXTERN VALUE rb_cThread;
00655 RUBY_EXTERN VALUE rb_cTime;
00656 RUBY_EXTERN VALUE rb_cTrueClass;
00657 RUBY_EXTERN VALUE rb_cStruct;
00662 RUBY_EXTERN VALUE rb_eException;
00663 RUBY_EXTERN VALUE rb_eStandardError;
00664 RUBY_EXTERN VALUE rb_eSystemExit;
00665 RUBY_EXTERN VALUE rb_eInterrupt;
00666 RUBY_EXTERN VALUE rb_eSignal;
00667 RUBY_EXTERN VALUE rb_eFatal;
00668 RUBY_EXTERN VALUE rb_eArgError;
00669 RUBY_EXTERN VALUE rb_eEOFError;
00670 RUBY_EXTERN VALUE rb_eIndexError;
00671 RUBY_EXTERN VALUE rb_eRangeError;
00672 RUBY_EXTERN VALUE rb_eIOError;
00673 RUBY_EXTERN VALUE rb_eRuntimeError;
00674 RUBY_EXTERN VALUE rb_eSecurityError;
00675 RUBY_EXTERN VALUE rb_eSystemCallError;
00676 RUBY_EXTERN VALUE rb_eTypeError;
00677 RUBY_EXTERN VALUE rb_eZeroDivError;
00678 RUBY_EXTERN VALUE rb_eNotImpError;
00679 RUBY_EXTERN VALUE rb_eNoMemError;
00680 RUBY_EXTERN VALUE rb_eNoMethodError;
00681 RUBY_EXTERN VALUE rb_eFloatDomainError;
00682
00683 RUBY_EXTERN VALUE rb_eScriptError;
00684 RUBY_EXTERN VALUE rb_eNameError;
00685 RUBY_EXTERN VALUE rb_eSyntaxError;
00686 RUBY_EXTERN VALUE rb_eLoadError;
00691 RUBY_EXTERN VALUE rb_stdin, rb_stdout, rb_stderr;
00692 RUBY_EXTERN VALUE ruby_errinfo;
00695 static inline VALUE
00696 #if defined(HAVE_PROTOTYPES)
00697 rb_class_of(VALUE obj)
00698 #else
00699 rb_class_of(obj)
00700 VALUE obj;
00701 #endif
00702 {
00703 if (FIXNUM_P(obj)) return rb_cFixnum;
00704 if (obj == Qnil) return rb_cNilClass;
00705 if (obj == Qfalse) return rb_cFalseClass;
00706 if (obj == Qtrue) return rb_cTrueClass;
00707 if (SYMBOL_P(obj)) return rb_cSymbol;
00708
00709 return RBASIC(obj)->klass;
00710 }
00711
00712 static inline int
00713 #if defined(HAVE_PROTOTYPES)
00714 rb_type(VALUE obj)
00715 #else
00716 rb_type(obj)
00717 VALUE obj;
00718 #endif
00719 {
00720 if (FIXNUM_P(obj)) return T_FIXNUM;
00721 if (obj == Qnil) return T_NIL;
00722 if (obj == Qfalse) return T_FALSE;
00723 if (obj == Qtrue) return T_TRUE;
00724 if (obj == Qundef) return T_UNDEF;
00725 if (SYMBOL_P(obj)) return T_SYMBOL;
00726 return BUILTIN_TYPE(obj);
00727 }
00728
00729 static inline int
00730 #if defined(HAVE_PROTOTYPES)
00731 rb_special_const_p(VALUE obj)
00732 #else
00733 rb_special_const_p(obj)
00734 VALUE obj;
00735 #endif
00736 {
00737 if (SPECIAL_CONST_P(obj)) return Qtrue;
00738 return Qfalse;
00739 }
00740
00741 #include "intern.h"
00742 #include "missing.h"
00743
00744 #if defined(EXTLIB) && defined(USE_DLN_A_OUT)
00745
00746 static char *dln_libs_to_be_linked[] = { EXTLIB, 0 };
00747 #endif
00748
00749 #if defined(HAVE_LIBPTHREAD)
00750 #ifdef HAVE_PTHREAD_H
00751 #include <pthread.h>
00752 #endif
00753 typedef pthread_t rb_nativethread_t;
00754 # define NATIVETHREAD_CURRENT() pthread_self()
00755 # define NATIVETHREAD_EQUAL(t1,t2) pthread_equal((t1),(t2))
00756 # define HAVE_NATIVETHREAD
00757 #elif defined(_WIN32) || defined(_WIN32_WCE)
00758 typedef DWORD rb_nativethread_t;
00759 # define NATIVETHREAD_CURRENT() GetCurrentThreadId()
00760 # define NATIVETHREAD_EQUAL(t1,t2) ((t1) == (t2))
00761 # define HAVE_NATIVETHREAD
00762 #endif
00763 #ifdef HAVE_NATIVETHREAD
00764 RUBY_EXTERN int is_ruby_native_thread();
00765 #else
00766 #define is_ruby_native_thread() (1)
00767 #endif
00768
00769 #if defined(__cplusplus)
00770 }
00771 #endif
00772
00773 #endif
00774