Main Page   Modules   Alphabetical List   Data Structures   File List   Data Fields   Globals  

ruby.h

Go to the documentation of this file.
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 /* need to include <ctype.h> to use these macros */
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     /* assuming 32bit(2's compliment) long */
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     /* assuming 64bit(2's complement) long long */
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 #define RUBY_DATA_FUNC(func) ((void (*)(void*))func)
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*, ...);             /* reports if `-w' specified */
00594 void rb_sys_warning (const char*, ...); /* reports if `-w' specified */
00595 void rb_warn (const char*, ...);                /* reports always */
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 /* hook for external modules */
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 }  /* extern "C" { */
00771 #endif
00772 
00773 #endif /* ifndef RUBY_H */
00774 

Generated on Sat Jan 22 14:29:36 2005 for Ruby by doxygen1.2.18