mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	2000-02-17
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@618 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									7dd3853eac
								
							
						
					
					
						commit
						96b40dff45
					
				
					 27 changed files with 286 additions and 171 deletions
				
			
		
							
								
								
									
										55
									
								
								ChangeLog
									
										
									
									
									
								
							
							
						
						
									
										55
									
								
								ChangeLog
									
										
									
									
									
								
							|  | @ -1,3 +1,58 @@ | |||
| Wed Feb 16 00:32:49 2000  Yukihiro Matsumoto  <matz@netlab.co.jp> | ||||
| 
 | ||||
| 	* eval.c (method_arity): nd_rest is -1 for no rest argument. | ||||
| 
 | ||||
| 	* process.c (proc_waitpid): returns nil when waitpid(2) returns 0. | ||||
| 
 | ||||
| Tue Feb 15 01:47:00 2000  Yukihiro Matsumoto  <matz@netlab.co.jp> | ||||
| 
 | ||||
| 	* process.c (rb_f_waitpid): pid_t should be signed. | ||||
| 
 | ||||
| Mon Feb 14 13:59:01 2000  Yukihiro Matsumoto  <matz@netlab.co.jp> | ||||
| 
 | ||||
| 	* parse.y (yylex): yylex yields wrong token for `:foo=~expr'. | ||||
| 
 | ||||
| 	* ruby.c (load_file): exit if reading file is empty. | ||||
| 
 | ||||
| Mon Feb 14 03:34:52 2000  Yukihiro Matsumoto  <matz@netlab.co.jp> | ||||
| 
 | ||||
| 	* parse.y (yylex): `foo.bar=' should be <foo><.><bar><=>. | ||||
| 
 | ||||
| 	* eval.c (rb_thread_restore_context): process according to | ||||
| 	  RESTORE_* is moved after longjmp(). | ||||
| 
 | ||||
| 	* eval.c (thread_switch): new function to process RESTORE_*. | ||||
| 
 | ||||
| Sun Feb 13 16:19:49 2000  WATANABE Hirofumi  <eban@os.rim.or.jp> | ||||
| 
 | ||||
| 	* ruby.c (require_libraries): don't access freed memory. | ||||
| 
 | ||||
| 	* ruby.c (add_modules): ditto. | ||||
| 
 | ||||
| Fri Feb 11 12:06:22 2000  Yukihiro Matsumoto  <matz@netlab.co.jp> | ||||
| 
 | ||||
| 	* parse.y (parse_quotedwords): %w() need to split not only by mere | ||||
| 	  spaces, but by all whitespaces. | ||||
| 
 | ||||
| Thu Feb 10 02:12:04 2000  Yukihiro Matsumoto  <matz@netlab.co.jp> | ||||
| 
 | ||||
| 	* string.c (rb_str_index_m): did not support negative offset. | ||||
| 
 | ||||
| Wed Feb  9 21:54:26 2000  Katsuyuki Komatsu  <komatsu@sarion.co.jp> | ||||
| 
 | ||||
| 	* ext/socket/getaddrinfo.c: gcc --traditional support. | ||||
| 	  Rearrange headers to work AC_C_CONST. | ||||
| 	* ext/socket/getnameinfo.c: ditto. | ||||
| 	* ext/socket/socket.c: mswin32: use double instead of long long. | ||||
| 
 | ||||
| Wed Feb  9 16:30:41 2000  Yukihiro Matsumoto  <matz@netlab.co.jp> | ||||
| 
 | ||||
| 	* numeric.c (num_coerce): should return [y, x]. | ||||
| 
 | ||||
| Wed Feb  9 11:07:30 2000  Yukihiro Matsumoto  <matz@netlab.co.jp> | ||||
| 
 | ||||
| 	* ruby.c (ruby_prog_init): loadpath structure changed. | ||||
| 
 | ||||
| Tue Feb  8 02:07:33 2000  Yukihiro Matsumoto  <matz@netlab.co.jp> | ||||
| 
 | ||||
| 	* regex.c (re_search): optimize for \G at top. | ||||
|  |  | |||
							
								
								
									
										7
									
								
								array.c
									
										
									
									
									
								
							
							
						
						
									
										7
									
								
								array.c
									
										
									
									
									
								
							|  | @ -51,6 +51,13 @@ rb_ary_modify(ary) | |||
| 	rb_raise(rb_eSecurityError, "Insecure: can't modify array"); | ||||
| } | ||||
| 
 | ||||
| VALUE | ||||
| rb_ary_freeze(ary) | ||||
|     VALUE ary; | ||||
| { | ||||
|     return rb_obj_freeze(ary); | ||||
| } | ||||
| 
 | ||||
| static VALUE | ||||
| rb_ary_frozen_p(ary) | ||||
|     VALUE ary; | ||||
|  |  | |||
							
								
								
									
										15
									
								
								configure
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								configure
									
										
									
									
										vendored
									
									
								
							|  | @ -4966,16 +4966,24 @@ test "$program_suffix" != NONE && | |||
|   ri_suffix=$program_suffix | ||||
| 
 | ||||
| RUBY_INSTALL_NAME="${ri_prefix}ruby${ri_suffix}" | ||||
| RUBY_LIB_PATH="${prefix}/lib/ruby/${MAJOR}.${MINOR}" | ||||
| RUBY_LIB_PREFIX="${prefix}/lib/ruby" | ||||
| RUBY_LIB_PATH="${RUBY_LIB_PREFIX}/${MAJOR}.${MINOR}" | ||||
| RUBY_SITE_LIB_PATH="${RUBY_LIB_PREFIX}/site_ruby" | ||||
| RUBY_SITE_LIB_PATH2="${RUBY_SITE_LIB_PATH}/${MAJOR}.${MINOR}" | ||||
| 
 | ||||
| cat >> confdefs.h <<EOF | ||||
| #define RUBY_LIB "${RUBY_LIB_PATH}" | ||||
| EOF | ||||
| 
 | ||||
| RUBY_SITE_LIB_PATH="${RUBY_LIB_PATH}/site_ruby" | ||||
| cat >> confdefs.h <<EOF | ||||
| #define RUBY_SITE_LIB "${RUBY_SITE_LIB_PATH}" | ||||
| EOF | ||||
| 
 | ||||
| cat >> confdefs.h <<EOF | ||||
| #define RUBY_SITE_LIB2 "${RUBY_SITE_LIB_PATH2}" | ||||
| EOF | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| configure_args=$ac_configure_args | ||||
| 
 | ||||
|  | @ -5002,12 +5010,13 @@ else | |||
| EOF | ||||
| 
 | ||||
| fi | ||||
| 
 | ||||
| cat >> confdefs.h <<EOF | ||||
| #define RUBY_ARCHLIB "${RUBY_LIB_PATH}/${arch}" | ||||
| EOF | ||||
| 
 | ||||
| cat >> confdefs.h <<EOF | ||||
| #define RUBY_SITE_ARCHLIB "${RUBY_SITE_LIB_PATH}/${arch}" | ||||
| #define RUBY_SITE_ARCHLIB "${RUBY_SITE_LIB_PATH2}/${arch}" | ||||
| EOF | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										12
									
								
								configure.in
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								configure.in
									
										
									
									
									
								
							|  | @ -798,10 +798,15 @@ test "$program_suffix" != NONE && | |||
|   ri_suffix=$program_suffix | ||||
| 
 | ||||
| RUBY_INSTALL_NAME="${ri_prefix}ruby${ri_suffix}" | ||||
| RUBY_LIB_PATH="${prefix}/lib/ruby/${MAJOR}.${MINOR}" | ||||
| RUBY_LIB_PREFIX="${prefix}/lib/ruby" | ||||
| RUBY_LIB_PATH="${RUBY_LIB_PREFIX}/${MAJOR}.${MINOR}" | ||||
| RUBY_SITE_LIB_PATH="${RUBY_LIB_PREFIX}/site_ruby" | ||||
| RUBY_SITE_LIB_PATH2="${RUBY_SITE_LIB_PATH}/${MAJOR}.${MINOR}" | ||||
| 
 | ||||
| AC_DEFINE_UNQUOTED(RUBY_LIB, "${RUBY_LIB_PATH}") | ||||
| RUBY_SITE_LIB_PATH="${RUBY_LIB_PATH}/site_ruby" | ||||
| AC_DEFINE_UNQUOTED(RUBY_SITE_LIB, "${RUBY_SITE_LIB_PATH}") | ||||
| AC_DEFINE_UNQUOTED(RUBY_SITE_LIB2, "${RUBY_SITE_LIB_PATH2}") | ||||
| 
 | ||||
| AC_SUBST(arch)dnl | ||||
| 
 | ||||
| configure_args=$ac_configure_args | ||||
|  | @ -820,8 +825,9 @@ else | |||
|     arch="${target_cpu}-${target_os}" | ||||
|     AC_DEFINE_UNQUOTED(RUBY_PLATFORM, "${arch}") | ||||
| fi | ||||
| 
 | ||||
| AC_DEFINE_UNQUOTED(RUBY_ARCHLIB, "${RUBY_LIB_PATH}/${arch}") | ||||
| AC_DEFINE_UNQUOTED(RUBY_SITE_ARCHLIB, "${RUBY_SITE_LIB_PATH}/${arch}") | ||||
| AC_DEFINE_UNQUOTED(RUBY_SITE_ARCHLIB, "${RUBY_SITE_LIB_PATH2}/${arch}") | ||||
| 
 | ||||
| AC_ARG_WITH(search-path, | ||||
| 		[--with-search-path	  specify the additional search path], | ||||
|  |  | |||
|  | @ -50,6 +50,8 @@ | |||
| 
 | ||||
| #if defined(MSDOS) || defined(NT) || defined(__human68k__) || defined(OS2) | ||||
| #define PATH_SEP ";" | ||||
| #elif defined(riscos) | ||||
| #define PATH_SEP "," | ||||
| #else | ||||
| #define PATH_SEP ":" | ||||
| #endif | ||||
|  |  | |||
							
								
								
									
										2
									
								
								dir.c
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								dir.c
									
										
									
									
									
								
							|  | @ -412,7 +412,7 @@ static VALUE | |||
| dir_s_chroot(dir, path) | ||||
|     VALUE dir, path; | ||||
| { | ||||
| #if !defined(DJGPP) && !defined(NT) && !defined(__human68k__) && !defined(USE_CWGUSI) && !defined(__BEOS__) && !defined(__EMX__) | ||||
| #if !defined(DJGPP) && !defined(NT) && !defined(__human68k__) && !defined(USE_CWGUSI) && !defined(__BEOS__) && !defined(__EMX__) && !defined(riscos) | ||||
|     rb_secure(2); | ||||
|     Check_SafeStr(path); | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										154
									
								
								eval.c
									
										
									
									
									
								
							
							
						
						
									
										154
									
								
								eval.c
									
										
									
									
									
								
							|  | @ -3359,7 +3359,7 @@ rb_yield_0(val, self, klass, acheck) | |||
| 	    rb_gc_force_recycle((VALUE)vars); | ||||
| 	    vars = vars->next; | ||||
| 	} | ||||
| 	if (ruby_dyna_vars->id == 0) { | ||||
| 	if (ruby_dyna_vars && ruby_dyna_vars->id == 0) { | ||||
| 	    rb_gc_force_recycle((VALUE)ruby_dyna_vars); | ||||
| 	} | ||||
|     } | ||||
|  | @ -3720,7 +3720,7 @@ rb_f_missing(argc, argv, obj) | |||
| 
 | ||||
|     if (argc == 0) rb_raise(rb_eArgError, "no id given"); | ||||
| 
 | ||||
|     id = FIX2INT(argv[0]); | ||||
|     id = NUM2INT(argv[0]); | ||||
|     argc--; argv++; | ||||
| 
 | ||||
|     switch (TYPE(obj)) { | ||||
|  | @ -5789,7 +5789,7 @@ proc_arity(proc) | |||
|     int n; | ||||
| 
 | ||||
|     Data_Get_Struct(proc, struct BLOCK, data); | ||||
|     if (data->var == 0) return FIX2INT(-1); | ||||
|     if (data->var == 0) return INT2FIX(-1); | ||||
|     switch (nd_type(data->var)) { | ||||
|       default: | ||||
| 	return INT2FIX(-2); | ||||
|  | @ -5986,7 +5986,7 @@ method_arity(method) | |||
| 	    body = body->nd_head; | ||||
| 	if (!body) return INT2FIX(0); | ||||
| 	n = body->nd_cnt; | ||||
| 	if (body->nd_rest) n = -n-1; | ||||
| 	if (body->nd_rest >= 0) n = -n-1; | ||||
| 	return INT2FIX(n); | ||||
|     } | ||||
| } | ||||
|  | @ -6261,13 +6261,30 @@ rb_thread_check(data) | |||
|     return (thread_t)RDATA(data)->data; | ||||
| } | ||||
| 
 | ||||
| static int   th_raise_argc; | ||||
| static VALUE th_raise_argv[2]; | ||||
| static char *th_raise_file; | ||||
| static int   th_raise_line; | ||||
| static VALUE th_cmd; | ||||
| static int   th_sig; | ||||
| static char *th_signm; | ||||
| 
 | ||||
| #define RESTORE_NORMAL		1 | ||||
| #define RESTORE_FATAL		2 | ||||
| #define RESTORE_INTERRUPT	3 | ||||
| #define RESTORE_TRAP		4 | ||||
| #define RESTORE_RAISE		5 | ||||
| #define RESTORE_SIGNAL		6 | ||||
| 
 | ||||
| static void | ||||
| rb_thread_save_context(th) | ||||
|     thread_t th; | ||||
| { | ||||
|     VALUE v; | ||||
| 
 | ||||
|     int len = stack_length(); | ||||
|     int len; | ||||
| 
 | ||||
|     len = stack_length(); | ||||
|     th->stk_len = 0; | ||||
|     th->stk_pos = (rb_gc_stack_start<(VALUE*)&v)?rb_gc_stack_start | ||||
| 				                :rb_gc_stack_start - len; | ||||
|  | @ -6299,6 +6316,41 @@ rb_thread_save_context(th) | |||
|     th->line = ruby_sourceline; | ||||
| } | ||||
| 
 | ||||
| static int | ||||
| thread_switch(n) | ||||
|     int n; | ||||
| { | ||||
|     switch (n) { | ||||
|       case 0: | ||||
| 	return 0; | ||||
|       case RESTORE_FATAL: | ||||
| 	JUMP_TAG(TAG_FATAL); | ||||
| 	break; | ||||
|       case RESTORE_INTERRUPT: | ||||
| 	rb_interrupt(); | ||||
| 	break; | ||||
|       case RESTORE_TRAP: | ||||
| 	rb_trap_eval(th_cmd, th_sig); | ||||
| 	errno = EINTR; | ||||
| 	break; | ||||
|       case RESTORE_RAISE: | ||||
| 	ruby_frame->last_func = 0; | ||||
| 	ruby_sourcefile = th_raise_file; | ||||
| 	ruby_sourceline = th_raise_line; | ||||
| 	rb_f_raise(th_raise_argc, th_raise_argv); | ||||
| 	break; | ||||
|       case RESTORE_SIGNAL: | ||||
| 	rb_raise(rb_eSignal, "SIG%s", th_signm); | ||||
| 	break; | ||||
|       case RESTORE_NORMAL: | ||||
|       default: | ||||
| 	return 1; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| #define THREAD_SAVE_CONTEXT(th) \ | ||||
|     (rb_thread_save_context(th),thread_switch(setjmp((th)->context))) | ||||
| 
 | ||||
| static void rb_thread_restore_context _((thread_t,int)); | ||||
| 
 | ||||
| static void | ||||
|  | @ -6312,21 +6364,6 @@ stack_extend(th, exit) | |||
|     rb_thread_restore_context(th, exit); | ||||
| } | ||||
| 
 | ||||
| static int   th_raise_argc; | ||||
| static VALUE th_raise_argv[2]; | ||||
| static char *th_raise_file; | ||||
| static int   th_raise_line; | ||||
| static VALUE th_cmd; | ||||
| static int   th_sig; | ||||
| static char *th_signm; | ||||
| 
 | ||||
| #define RESTORE_NORMAL		0  | ||||
| #define RESTORE_FATAL		1 | ||||
| #define RESTORE_INTERRUPT	2 | ||||
| #define RESTORE_TRAP		3 | ||||
| #define RESTORE_RAISE		4 | ||||
| #define RESTORE_SIGNAL		5 | ||||
| 
 | ||||
| static void | ||||
| rb_thread_restore_context(th, exit) | ||||
|     thread_t th; | ||||
|  | @ -6373,35 +6410,7 @@ rb_thread_restore_context(th, exit) | |||
|     rb_lastline_set(tmp->last_line); | ||||
|     rb_backref_set(tmp->last_match); | ||||
| 
 | ||||
|     switch (ex) { | ||||
|       case RESTORE_FATAL: | ||||
| 	JUMP_TAG(TAG_FATAL); | ||||
| 	break; | ||||
| 
 | ||||
|       case RESTORE_INTERRUPT: | ||||
| 	rb_interrupt(); | ||||
| 	break; | ||||
| 
 | ||||
|       case RESTORE_TRAP: | ||||
| 	rb_trap_eval(th_cmd, th_sig); | ||||
| 	errno = EINTR; | ||||
| 	break; | ||||
| 
 | ||||
|       case RESTORE_SIGNAL: | ||||
| 	rb_raise(rb_eSignal, "SIG%s", th_signm); | ||||
| 	break; | ||||
| 
 | ||||
|       case RESTORE_RAISE: | ||||
| 	ruby_frame->last_func = 0; | ||||
| 	ruby_sourcefile = th_raise_file; | ||||
| 	ruby_sourceline = th_raise_line; | ||||
| 	rb_f_raise(th_raise_argc, th_raise_argv); | ||||
| 	break; | ||||
| 
 | ||||
|       case RESTORE_NORMAL: | ||||
|       default: | ||||
| 	longjmp(tmp->context, 1); | ||||
|     } | ||||
|     longjmp(tmp->context, ex); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
|  | @ -6639,8 +6648,7 @@ rb_thread_schedule() | |||
| 
 | ||||
|     /* context switch */ | ||||
|     if (curr == curr_thread) { | ||||
| 	rb_thread_save_context(curr); | ||||
| 	if (setjmp(curr->context)) { | ||||
| 	if (THREAD_SAVE_CONTEXT(curr)) { | ||||
| 	    return; | ||||
| 	} | ||||
|     } | ||||
|  | @ -7209,15 +7217,13 @@ rb_thread_create_0(fn, arg, klass) | |||
| 
 | ||||
|     scope_dup(ruby_scope); | ||||
|     FL_SET(ruby_scope, SCOPE_SHARED); | ||||
|     rb_thread_save_context(curr_thread); | ||||
|     if (setjmp(curr_thread->context)) { | ||||
|     if (THREAD_SAVE_CONTEXT(curr_thread)) { | ||||
| 	return thread; | ||||
|     } | ||||
| 
 | ||||
|     PUSH_TAG(PROT_THREAD); | ||||
|     if ((state = EXEC_TAG()) == 0) { | ||||
| 	rb_thread_save_context(th); | ||||
| 	if (setjmp(th->context) == 0) { | ||||
| 	if (THREAD_SAVE_CONTEXT(th) == 0) { | ||||
| 	    curr_thread = th; | ||||
| 	    th->result = (*fn)(arg, th); | ||||
| 	} | ||||
|  | @ -7384,8 +7390,7 @@ rb_thread_interrupt() | |||
|     if (curr_thread == main_thread) { | ||||
| 	rb_interrupt(); | ||||
|     } | ||||
|     rb_thread_save_context(curr_thread); | ||||
|     if (setjmp(curr_thread->context)) { | ||||
|     if (THREAD_SAVE_CONTEXT(curr_thread)) { | ||||
| 	return; | ||||
|     } | ||||
|     curr_thread = main_thread; | ||||
|  | @ -7403,8 +7408,7 @@ rb_thread_signal_raise(sig) | |||
| 	rb_raise(rb_eSignal, "SIG%s", sig); | ||||
|     } | ||||
|     rb_thread_ready(main_thread); | ||||
|     rb_thread_save_context(curr_thread); | ||||
|     if (setjmp(curr_thread->context)) { | ||||
|     if (THREAD_SAVE_CONTEXT(curr_thread)) { | ||||
| 	return; | ||||
|     } | ||||
|     th_signm = sig; | ||||
|  | @ -7417,6 +7421,7 @@ rb_thread_trap_eval(cmd, sig) | |||
|     VALUE cmd; | ||||
|     int sig; | ||||
| { | ||||
| #if 0 | ||||
|     rb_thread_critical = 0; | ||||
|     if (!rb_thread_dead(curr_thread)) { | ||||
| 	rb_thread_ready(curr_thread); | ||||
|  | @ -7424,14 +7429,26 @@ rb_thread_trap_eval(cmd, sig) | |||
| 	return; | ||||
|     } | ||||
|     rb_thread_ready(main_thread); | ||||
|     rb_thread_save_context(curr_thread); | ||||
|     if (setjmp(curr_thread->context)) { | ||||
|     if (THREAD_SAVE_CONTEXT(curr_thread)) { | ||||
| 	return; | ||||
|     } | ||||
|     th_cmd = cmd; | ||||
|     th_sig = sig; | ||||
|     curr_thread = main_thread; | ||||
|     rb_thread_restore_context(curr_thread, RESTORE_TRAP); | ||||
| #else | ||||
|     rb_thread_critical = 0; | ||||
|     if (!rb_thread_dead(curr_thread)) { | ||||
| 	if (THREAD_SAVE_CONTEXT(curr_thread)) { | ||||
| 	    return; | ||||
| 	} | ||||
|     } | ||||
|     rb_thread_ready(main_thread); | ||||
|     th_cmd = cmd; | ||||
|     th_sig = sig; | ||||
|     curr_thread = main_thread; | ||||
|     rb_thread_restore_context(curr_thread, RESTORE_TRAP); | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| static VALUE | ||||
|  | @ -7442,17 +7459,15 @@ rb_thread_raise(argc, argv, thread) | |||
| { | ||||
|     thread_t th = rb_thread_check(thread); | ||||
| 
 | ||||
|     if (rb_thread_dead(th)) return thread; | ||||
|     if (rb_thread_dead(th)) return Qnil; | ||||
|     if (curr_thread == th) { | ||||
| 	rb_f_raise(argc, argv); | ||||
|     } | ||||
|     if (th->safe < 4) { | ||||
|     if (ruby_safe_level > th->safe) { | ||||
| 	rb_secure(4); | ||||
|     } | ||||
| 
 | ||||
|     if (curr_thread->status != THREAD_KILLED) | ||||
| 	rb_thread_save_context(curr_thread); | ||||
|     if (setjmp(curr_thread->context)) { | ||||
|     if (THREAD_SAVE_CONTEXT(curr_thread)) { | ||||
| 	return thread; | ||||
|     } | ||||
| 
 | ||||
|  | @ -7613,8 +7628,7 @@ rb_callcc(self) | |||
|     for (tag=prot_tag; tag; tag=tag->prev) { | ||||
| 	scope_dup(tag->scope); | ||||
|     } | ||||
|     rb_thread_save_context(th); | ||||
|     if (setjmp(th->context)) { | ||||
|     if (THREAD_SAVE_CONTEXT(th)) { | ||||
| 	return th->result; | ||||
|     } | ||||
|     else { | ||||
|  | @ -7793,7 +7807,7 @@ static VALUE | |||
| catch_i(tag) | ||||
|     ID tag; | ||||
| { | ||||
|     return rb_funcall(Qnil, rb_intern("catch"), 0, FIX2INT(tag)); | ||||
|     return rb_funcall(Qnil, rb_intern("catch"), 0, INT2FIX(tag)); | ||||
| } | ||||
| 
 | ||||
| VALUE | ||||
|  | @ -7846,7 +7860,7 @@ rb_throw(tag, val) | |||
|     VALUE argv[2]; | ||||
|     ID t = rb_intern(tag); | ||||
| 
 | ||||
|     argv[0] = FIX2INT(t); | ||||
|     argv[0] = INT2FIX(t); | ||||
|     argv[1] = val; | ||||
|     rb_f_throw(2, argv); | ||||
| } | ||||
|  |  | |||
|  | @ -38,6 +38,7 @@ | |||
|  * - PF_UNSPEC case would be handled in getipnodebyname() with the AI_ALL flag. | ||||
|  */ | ||||
| 
 | ||||
| #include "config.h" | ||||
| #include <sys/types.h> | ||||
| #ifndef NT | ||||
| #include <sys/param.h> | ||||
|  | @ -66,7 +67,6 @@ | |||
| #include <socks.h> | ||||
| #endif | ||||
| 
 | ||||
| #include "config.h" | ||||
| #include "addrinfo.h" | ||||
| #include "sockport.h" | ||||
| 
 | ||||
|  |  | |||
|  | @ -34,6 +34,7 @@ | |||
|  *   but INRIA implementation returns EAI_xxx defined for getaddrinfo(). | ||||
|  */ | ||||
| 
 | ||||
| #include "config.h" | ||||
| #include <sys/types.h> | ||||
| #ifndef NT | ||||
| #include <sys/socket.h> | ||||
|  | @ -60,7 +61,6 @@ | |||
| #include <socks.h> | ||||
| #endif | ||||
| 
 | ||||
| #include "config.h" | ||||
| #include "addrinfo.h" | ||||
| #include "sockport.h" | ||||
| 
 | ||||
|  |  | |||
|  | @ -86,7 +86,7 @@ int Rconnect(); | |||
|  * RFC 2553: protocol-independent placeholder for socket addresses | ||||
|  */ | ||||
| #define _SS_MAXSIZE	128 | ||||
| #define _SS_ALIGNSIZE	(sizeof(long long)) | ||||
| #define _SS_ALIGNSIZE	(sizeof(double)) | ||||
| #define _SS_PAD1SIZE	(_SS_ALIGNSIZE - sizeof(unsigned char) * 2) | ||||
| #define _SS_PAD2SIZE	(_SS_MAXSIZE - sizeof(unsigned char) * 2 - \ | ||||
| 				_SS_PAD1SIZE - _SS_ALIGNSIZE) | ||||
|  | @ -99,7 +99,7 @@ struct sockaddr_storage { | |||
| 	unsigned short ss_family; | ||||
| #endif | ||||
| 	char	__ss_pad1[_SS_PAD1SIZE]; | ||||
| 	long long __ss_align;	/* force desired structure storage alignment */ | ||||
| 	double	__ss_align;	/* force desired structure storage alignment */ | ||||
| 	char	__ss_pad2[_SS_PAD2SIZE]; | ||||
| }; | ||||
| #endif | ||||
|  |  | |||
							
								
								
									
										8
									
								
								file.c
									
										
									
									
									
								
							
							
						
						
									
										8
									
								
								file.c
									
										
									
									
									
								
							|  | @ -1077,7 +1077,7 @@ static VALUE | |||
| rb_file_s_symlink(obj, from, to) | ||||
|     VALUE obj, from, to; | ||||
| { | ||||
| #if !defined(MSDOS) && !defined(NT) && !defined(__EMX__) | ||||
| #if !defined(MSDOS) && !defined(NT) && !defined(__EMX__) && !defined(riscos) | ||||
|     Check_SafeStr(from); | ||||
|     Check_SafeStr(to); | ||||
| 
 | ||||
|  | @ -1094,7 +1094,7 @@ static VALUE | |||
| rb_file_s_readlink(obj, path) | ||||
|     VALUE obj, path; | ||||
| { | ||||
| #if !defined(MSDOS) && !defined(NT) && !defined(__EMX__) | ||||
| #if !defined(MSDOS) && !defined(NT) && !defined(__EMX__) && !defined(riscos) | ||||
|     char buf[MAXPATHLEN]; | ||||
|     int cc; | ||||
| 
 | ||||
|  | @ -2026,7 +2026,7 @@ rb_path_check(path) | |||
|     return 1; | ||||
| } | ||||
| 
 | ||||
| #ifdef __MACOS__ | ||||
| #if defined(__MACOS__) || defined(riscos) | ||||
| static int | ||||
| is_macos_native_path(path) | ||||
|     const char *path; | ||||
|  | @ -2045,7 +2045,7 @@ rb_find_file(file) | |||
|     VALUE fname; | ||||
|     char *path; | ||||
| 
 | ||||
| #ifdef __MACOS__ | ||||
| #if defined(__MACOS__) || defined(riscos) | ||||
|     if (is_macos_native_path(file)) { | ||||
| 	FILE *f; | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										7
									
								
								hash.c
									
										
									
									
									
								
							
							
						
						
									
										7
									
								
								hash.c
									
										
									
									
									
								
							|  | @ -34,6 +34,13 @@ rb_hash_modify(hash) | |||
| 	rb_raise(rb_eSecurityError, "Insecure: can't modify hash"); | ||||
| } | ||||
| 
 | ||||
| VALUE | ||||
| rb_hash_freeze(hash) | ||||
|     VALUE hash; | ||||
| { | ||||
|     return rb_obj_freeze(hash); | ||||
| } | ||||
| 
 | ||||
| VALUE rb_cHash; | ||||
| 
 | ||||
| static VALUE envtbl; | ||||
|  |  | |||
							
								
								
									
										36
									
								
								instruby.rb
									
										
									
									
									
								
							
							
						
						
									
										36
									
								
								instruby.rb
									
										
									
									
									
								
							|  | @ -15,12 +15,17 @@ if ENV["prefix"] | |||
| else | ||||
|   prefix = CONFIG["prefix"] | ||||
| end | ||||
| 
 | ||||
| ruby_install_name = CONFIG["ruby_install_name"] | ||||
| version = "/"+CONFIG["MAJOR"]+"."+CONFIG["MINOR"] | ||||
| arch = version+"/"+CONFIG["arch"] | ||||
| 
 | ||||
| bindir = destdir+CONFIG["bindir"] | ||||
| libdir = destdir+CONFIG["libdir"] | ||||
| #pkglibdir = libdir + "/" + ruby_install_name+"/"+CONFIG["MAJOR"]+"."+CONFIG["MINOR"] | ||||
| pkglibdir = libdir + "/ruby/"+CONFIG["MAJOR"]+"."+CONFIG["MINOR"] | ||||
| archdir = pkglibdir + "/" + CONFIG["arch"] | ||||
| rubydir = libdir+"/ruby" | ||||
| rubylibdir = rubydir+version | ||||
| archlibdir = rubydir+arch | ||||
| sitelibdir = rubydir+"/site_ruby"+version | ||||
| mandir = destdir+CONFIG["mandir"] + "/man1" | ||||
| wdir = Dir.getwd | ||||
| 
 | ||||
|  | @ -47,17 +52,16 @@ if File.exist? CONFIG["LIBRUBY_SO"] | |||
|   end | ||||
| end | ||||
| Dir.chdir wdir | ||||
| File.makedirs pkglibdir, true | ||||
| File.makedirs archdir, true | ||||
| File.makedirs pkglibdir+"/site_ruby", true | ||||
| File.makedirs pkglibdir+"/site_ruby/"+CONFIG["arch"], true | ||||
| File.makedirs rubylibdir, true | ||||
| File.makedirs archlibdir, true | ||||
| File.makedirs sitelibdir, true | ||||
| 
 | ||||
| if RUBY_PLATFORM =~ /cygwin/ and File.exist? "import.h" | ||||
|   File.install "import.h", archdir, 0644, true | ||||
|   File.install "import.h", archlibdir, 0644, true | ||||
| end | ||||
| 
 | ||||
| if RUBY_PLATFORM =~ /-aix/ | ||||
|   File.install "ruby.imp", archdir, 0644, true | ||||
|   File.install "ruby.imp", archlibdir, 0644, true | ||||
| end | ||||
| 
 | ||||
| Dir.chdir "ext" | ||||
|  | @ -72,20 +76,20 @@ Find.find("lib") do |f| | |||
| end | ||||
| 
 | ||||
| for f in Dir["*.h"] | ||||
|   File.install f, archdir, 0644, true | ||||
|   File.install f, archlibdir, 0644, true | ||||
| end | ||||
| if RUBY_PLATFORM =~ /mswin32/ | ||||
|   File.makedirs archdir + "/win32", true | ||||
|   File.install "win32/win32.h", archdir + "/win32", 0644, true | ||||
|   File.makedirs archlibdir + "/win32", true | ||||
|   File.install "win32/win32.h", archlibdir + "/win32", 0644, true | ||||
|   if File.exist? wdir+'/rubymw.lib' | ||||
|     File.install wdir+'/rubymw.lib', archdir, 0644, true | ||||
|     File.install wdir+'/rubymw.lib', archlibdir, 0644, true | ||||
|   end | ||||
| end | ||||
| File.install wdir+'/'+CONFIG['LIBRUBY_A'], archdir, 0644, true | ||||
| File.install wdir+'/'+CONFIG['LIBRUBY_A'], archlibdir, 0644, true | ||||
| 
 | ||||
| File.makedirs mandir, true | ||||
| File.install "ruby.1", mandir, 0644, true | ||||
| Dir.chdir wdir | ||||
| File.install "config.h", archdir, 0644, true | ||||
| File.install "rbconfig.rb", archdir, 0644, true | ||||
| File.install "config.h", archlibdir, 0644, true | ||||
| File.install "rbconfig.rb", archlibdir, 0644, true | ||||
| # vi:set sw=2: | ||||
|  |  | |||
							
								
								
									
										10
									
								
								io.c
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								io.c
									
										
									
									
									
								
							|  | @ -1608,8 +1608,8 @@ rb_file_s_open(argc, argv, klass) | |||
|     path = RSTRING(fname)->ptr; | ||||
| 
 | ||||
|     if (FIXNUM_P(vmode)) { | ||||
| 	int flags = FIX2INT(vmode); | ||||
| 	int fmode = NIL_P(perm) ? 0666 : FIX2INT(perm); | ||||
| 	int flags = NUM2INT(vmode); | ||||
| 	int fmode = NIL_P(perm) ? 0666 : NUM2INT(perm); | ||||
| 
 | ||||
| 	file = rb_file_sysopen_internal(klass, path, flags, fmode); | ||||
|     } | ||||
|  | @ -1649,7 +1649,7 @@ rb_f_open(argc, argv) | |||
| 	mode = "r"; | ||||
|     } | ||||
|     else if (FIXNUM_P(pmode)) { | ||||
| 	mode = rb_io_flags_mode(FIX2INT(pmode)); | ||||
| 	mode = rb_io_flags_mode(NUM2INT(pmode)); | ||||
|     } | ||||
|     else { | ||||
| 	int len; | ||||
|  | @ -1661,6 +1661,7 @@ rb_f_open(argc, argv) | |||
|     } | ||||
| 
 | ||||
|     port = pipe_open(RSTRING(pname)->ptr+1, mode); | ||||
|     if (!rb_iterator_p()) return port; | ||||
|     if (NIL_P(port)) { | ||||
| 	rb_yield(port); | ||||
|     } | ||||
|  | @ -3396,4 +3397,7 @@ Init_IO() | |||
| #ifdef O_BINARY | ||||
|     rb_file_const("BINARY", INT2FIX(O_BINARY)); | ||||
| #endif | ||||
| #ifdef O_SYNC | ||||
|     rb_file_const("BINARY", INT2FIX(O_SYNC)); | ||||
| #endif | ||||
| } | ||||
|  |  | |||
|  | @ -16,7 +16,7 @@ module Find | |||
| 	  d = Dir.open(file) | ||||
| 	  begin | ||||
| 	    for f in d | ||||
| 	      next if f =~ /^\.\.?$/ | ||||
| 	      next if f =~ /\A\.\.?\z/ | ||||
| 	      if File::ALT_SEPARATOR and file =~ /^([\/\\]|[A-Za-z]:[\/\\]?)$/ then | ||||
| 		f = file + f | ||||
| 	      elsif file == "/" then | ||||
|  |  | |||
							
								
								
									
										6
									
								
								math.c
									
										
									
									
									
								
							
							
						
						
									
										6
									
								
								math.c
									
										
									
									
									
								
							|  | @ -22,11 +22,11 @@ VALUE rb_mMath; | |||
| } | ||||
| 
 | ||||
| static VALUE | ||||
| math_atan2(obj, x, y) | ||||
| math_atan2(obj, y, x) | ||||
|     VALUE obj, x, y; | ||||
| { | ||||
|     Need_Float2(x, y); | ||||
|     return rb_float_new(atan2(RFLOAT(x)->value, RFLOAT(y)->value)); | ||||
|     Need_Float2(y, x); | ||||
|     return rb_float_new(atan2(RFLOAT(y)->value, RFLOAT(x)->value)); | ||||
| } | ||||
| 
 | ||||
| static VALUE | ||||
|  |  | |||
|  | @ -1,31 +1,23 @@ | |||
| /* This is file FILE.H */ | ||||
| /*
 | ||||
| ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954 | ||||
| ** | ||||
| ** This file is distributed under the terms listed in the document | ||||
| ** "copying.dj", available from DJ Delorie at the address above. | ||||
| ** A copy of "copying.dj" should accompany this file; if not, a copy | ||||
| ** should be available from where this file was obtained.  This file | ||||
| ** may not be distributed without a verbatim copy of "copying.dj". | ||||
| ** | ||||
| ** This file is distributed WITHOUT ANY WARRANTY; without even the implied | ||||
| ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||||
| */ | ||||
| 
 | ||||
| #ifndef _FILE_H_ | ||||
| #define _FILE_H_ | ||||
| 
 | ||||
| #include <fcntl.h> | ||||
| 
 | ||||
| #define L_SET  0 | ||||
| #define L_CURR 1 | ||||
| #define L_INCR 1 | ||||
| #define L_XTND 2 | ||||
| #ifndef L_SET | ||||
| # define L_SET  0       /* seek from beginning.  */ | ||||
| # define L_CURR	1       /* seek from current position.  */ | ||||
| # define L_INCR	1       /* ditto.  */ | ||||
| # define L_XTND 2       /* seek from end.  */ | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| #define	F_OK		0	/* does file exist */ | ||||
| #define	X_OK		1	/* is it executable by caller */ | ||||
| #define	W_OK		2	/* is it writable by caller */ | ||||
| #define	R_OK		4	/* is it readable by caller */ | ||||
| # ifndef R_OK | ||||
| #  define R_OK  4       /* test whether readable.  */ | ||||
| #  define W_OK  2       /* test whether writable.  */ | ||||
| #  define X_OK  1       /* test whether execubale. */ | ||||
| #  define F_OK  0       /* test whether exist.  */ | ||||
| # endif | ||||
| #endif | ||||
| 
 | ||||
| #endif | ||||
|  |  | |||
|  | @ -6,8 +6,13 @@ | |||
|  * Copyright (c) 1988-1993 The Regents of the University of California. | ||||
|  * Copyright (c) 1994 Sun Microsystems, Inc. | ||||
|  * | ||||
|  * See the file "license.terms" for information on usage and redistribution | ||||
|  * of this file, and for a DISCLAIMER OF ALL WARRANTIES. | ||||
|  * Permission to use, copy, modify, and distribute this | ||||
|  * software and its documentation for any purpose and without | ||||
|  * fee is hereby granted, provided that the above copyright | ||||
|  * notice appear in all copies.  The University of California | ||||
|  * makes no representations about the suitability of this | ||||
|  * software for any purpose.  It is provided "as is" without | ||||
|  * express or implied warranty. | ||||
|  * | ||||
|  * RCS: @(#) $Id$ | ||||
|  */ | ||||
|  |  | |||
|  | @ -43,8 +43,8 @@ num_coerce(x, y) | |||
|     VALUE x, y; | ||||
| { | ||||
|     if (CLASS_OF(x) == CLASS_OF(y)) | ||||
| 	return rb_assoc_new(x, y); | ||||
|     return rb_assoc_new(rb_Float(x), rb_Float(y)); | ||||
| 	return rb_assoc_new(y, x); | ||||
|     return rb_assoc_new(rb_Float(y), rb_Float(x)); | ||||
| } | ||||
| 
 | ||||
| static VALUE | ||||
|  |  | |||
							
								
								
									
										17
									
								
								parse.y
									
										
									
									
									
								
							
							
						
						
									
										17
									
								
								parse.y
									
										
									
									
									
								
							|  | @ -2430,7 +2430,7 @@ parse_quotedwords(term, paren) | |||
|     strstart = ruby_sourceline; | ||||
|     newtok(); | ||||
| 
 | ||||
|     while ((c = nextc()) == ' ') | ||||
|     while (c = nextc(),ISSPACE(c)) | ||||
| 	;		/* skip preceding spaces */ | ||||
|     pushback(c); | ||||
|     while ((c = nextc()) != term || nest > 0) { | ||||
|  | @ -2455,14 +2455,13 @@ parse_quotedwords(term, paren) | |||
| 	      case '\\': | ||||
| 		c = '\\'; | ||||
| 		break; | ||||
| 	      case ' ': | ||||
| 		tokadd(' '); | ||||
| 		break; | ||||
| 	      default: | ||||
| 		tokadd('\\'); | ||||
| 		if (ISSPACE(c)) | ||||
| 		    tokadd('\\'); | ||||
| 		tokadd(c); | ||||
| 	    } | ||||
| 	} | ||||
| 	else if (c == ' ') { | ||||
| 	else if (ISSPACE(c)) { | ||||
| 	    NODE *str; | ||||
| 
 | ||||
| 	    tokfix(); | ||||
|  | @ -2470,7 +2469,7 @@ parse_quotedwords(term, paren) | |||
| 	    newtok(); | ||||
| 	    if (!qwords) qwords = NEW_LIST(str); | ||||
| 	    else list_append(qwords, str); | ||||
| 	    while ((c = nextc()) == ' ') | ||||
| 	    while (c = nextc(),ISSPACE(c)) | ||||
| 		;		/* skip continuous spaces */ | ||||
| 	    pushback(c); | ||||
| 	    continue; | ||||
|  | @ -3414,8 +3413,8 @@ yylex() | |||
| 		result = tFID; | ||||
| 	    } | ||||
| 	    else { | ||||
| 		if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) { | ||||
| 		    if ((c = nextc()) == '=' && !peek('=')) { | ||||
| 		if (lex_state == EXPR_FNAME) { | ||||
| 		    if ((c = nextc()) == '=' && !peek('=') && !peek('~')) { | ||||
| 			result = tIDENTIFIER; | ||||
| 			tokadd(c); | ||||
| 		    } | ||||
|  |  | |||
							
								
								
									
										13
									
								
								process.c
									
										
									
									
									
								
							
							
						
						
									
										13
									
								
								process.c
									
										
									
									
									
								
							|  | @ -160,7 +160,7 @@ wait_each(key, value, data) | |||
| #endif | ||||
| 
 | ||||
| static VALUE | ||||
| rb_f_wait() | ||||
| proc_wait() | ||||
| { | ||||
|     int pid, state; | ||||
| #ifdef NO_WAITPID | ||||
|  | @ -189,16 +189,17 @@ rb_f_wait() | |||
| } | ||||
| 
 | ||||
| static VALUE | ||||
| rb_f_waitpid(obj, vpid, vflags) | ||||
| proc_waitpid(obj, vpid, vflags) | ||||
|     VALUE obj, vpid, vflags; | ||||
| { | ||||
|     int pid, flags, status; | ||||
| 
 | ||||
|     if (NIL_P(vflags)) flags = 0; | ||||
|     else flags = FIX2UINT(vflags); | ||||
|     else flags = NUM2UINT(vflags); | ||||
| 
 | ||||
|     if ((pid = rb_waitpid(FIX2UINT(vpid), flags, &status)) < 0) | ||||
|     if ((pid = rb_waitpid(NUM2INT(vpid), flags, &status)) < 0) | ||||
| 	rb_sys_fail(0); | ||||
|     if (pid == 0) return Qnil; | ||||
|     return INT2FIX(pid); | ||||
| } | ||||
| 
 | ||||
|  | @ -1056,8 +1057,8 @@ Init_process() | |||
|     rb_define_module_function(rb_mProcess, "kill", rb_f_kill, -1); | ||||
| #endif | ||||
| #ifndef NT | ||||
|     rb_define_module_function(rb_mProcess, "wait", rb_f_wait, 0); | ||||
|     rb_define_module_function(rb_mProcess, "waitpid", rb_f_waitpid, 2); | ||||
|     rb_define_module_function(rb_mProcess, "wait", proc_wait, 0); | ||||
|     rb_define_module_function(rb_mProcess, "waitpid", proc_waitpid, 2); | ||||
| 
 | ||||
| #ifndef USE_CWGUSI | ||||
|     rb_define_module_function(rb_mProcess, "pid", get_pid, 0); | ||||
|  |  | |||
							
								
								
									
										6
									
								
								regex.c
									
										
									
									
									
								
							
							
						
						
									
										6
									
								
								regex.c
									
										
									
									
									
								
							|  | @ -3721,12 +3721,12 @@ re_match(bufp, string_arg, size, pos, regs) | |||
| 	    cc = c = (unsigned char)translate[c]; | ||||
| 
 | ||||
| 	  not = is_in_list(c, p); | ||||
| 	  if (!not && cc != c) { | ||||
| 	      part = not = is_in_list(cc, p); | ||||
| 	  } | ||||
| 	  if (*(p - 1) == (unsigned char)charset_not) { | ||||
| 	    not = !not; | ||||
| 	  } | ||||
| 	  else if (!not && cc != c) { | ||||
| 	      part = not = is_in_list(cc, p); | ||||
| 	  } | ||||
| 	  if (!not) goto fail; | ||||
| 
 | ||||
| 	  p += 1 + *p + 2 + EXTRACT_UNSIGNED(&p[1 + *p])*8; | ||||
|  |  | |||
							
								
								
									
										24
									
								
								ruby.c
									
										
									
									
									
								
							
							
						
						
									
										24
									
								
								ruby.c
									
										
									
									
									
								
							|  | @ -108,13 +108,6 @@ NULL | |||
| 	printf("\n  %s", *p++); | ||||
| } | ||||
| 
 | ||||
| #ifndef RUBY_LIB | ||||
| #define RUBY_LIB "/usr/local/lib/ruby" | ||||
| #endif | ||||
| #ifndef RUBY_SITE_LIB | ||||
| #define RUBY_SITE_LIB "/usr/local/lib/site_ruby" | ||||
| #endif | ||||
| 
 | ||||
| extern VALUE rb_load_path; | ||||
| 
 | ||||
| #define STATIC_FILE_LENGTH 255 | ||||
|  | @ -215,7 +208,7 @@ addpath(path) | |||
| } | ||||
| 
 | ||||
| struct req_list { | ||||
|     const char *name; | ||||
|     char *name; | ||||
|     struct req_list *next; | ||||
| } req_list_head; | ||||
| struct req_list *req_list_last = &req_list_head; | ||||
|  | @ -227,7 +220,8 @@ add_modules(mod) | |||
|     struct req_list *list; | ||||
| 
 | ||||
|     list = ALLOC(struct req_list); | ||||
|     list->name = mod; | ||||
|     list->name = ALLOC_N(char, strlen(mod)+1); | ||||
|     strcpy(list->name, mod); | ||||
|     list->next = 0; | ||||
|     req_list_last->next = list; | ||||
|     req_list_last = list; | ||||
|  | @ -248,6 +242,7 @@ require_libraries() | |||
|     while (list) { | ||||
| 	rb_require(list->name); | ||||
| 	tmp = list->next; | ||||
| 	free(list->name); | ||||
| 	free(list); | ||||
| 	list = tmp; | ||||
|     } | ||||
|  | @ -745,7 +740,11 @@ load_file(fname, script) | |||
| 		} | ||||
| 	    } | ||||
| 	} | ||||
| 	else if (!NIL_P(c)) { | ||||
| 	else if (NIL_P(c)) { | ||||
| 	    rb_io_close(f); | ||||
| 	    return; | ||||
| 	} | ||||
| 	else { | ||||
| 	    rb_io_ungetc(f, c); | ||||
| 	} | ||||
|     } | ||||
|  | @ -930,17 +929,14 @@ ruby_prog_init() | |||
|     addpath(ruby_libpath()); | ||||
| #endif | ||||
| 
 | ||||
| #ifdef RUBY_ARCHLIB | ||||
|     addpath(RUBY_ARCHLIB); | ||||
| #endif | ||||
| #ifdef RUBY_THIN_ARCHLIB | ||||
|     addpath(RUBY_THIN_ARCHLIB); | ||||
| #endif | ||||
| 
 | ||||
|     addpath(RUBY_SITE_LIB); | ||||
| #ifdef RUBY_SITE_ARCHLIB | ||||
|     addpath(RUBY_SITE_LIB2); | ||||
|     addpath(RUBY_SITE_ARCHLIB); | ||||
| #endif | ||||
| #ifdef RUBY_SITE_THIN_ARCHLIB | ||||
|     addpath(RUBY_SITE_THIN_ARCHLIB); | ||||
| #endif | ||||
|  |  | |||
							
								
								
									
										3
									
								
								ruby.h
									
										
									
									
									
								
							
							
						
						
									
										3
									
								
								ruby.h
									
										
									
									
									
								
							|  | @ -115,10 +115,13 @@ typedef unsigned long ID; | |||
| 
 | ||||
| #define FIXNUM_FLAG 0x01 | ||||
| #define INT2FIX(i) (VALUE)(((long)(i))<<1 | FIXNUM_FLAG) | ||||
| #define rb_fix_new(v) INT2FIX(v) | ||||
| VALUE rb_int2inum _((long)); | ||||
| #define INT2NUM(v) rb_int2inum(v) | ||||
| #define rb_int_new(v) rb_int2inum(v) | ||||
| VALUE rb_uint2inum _((unsigned long)); | ||||
| #define UINT2NUM(v) rb_uint2inum(v) | ||||
| #define rb_uint_new(v) rb_uint2inum(v) | ||||
| 
 | ||||
| #define FIX2LONG(x) RSHIFT((long)x,1) | ||||
| #define FIX2ULONG(x) (((unsigned long)(x))>>1) | ||||
|  |  | |||
							
								
								
									
										11
									
								
								string.c
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								string.c
									
										
									
									
									
								
							|  | @ -340,6 +340,13 @@ rb_str_modify(str) | |||
|     RSTRING(str)->orig = 0; | ||||
| } | ||||
| 
 | ||||
| VALUE | ||||
| rb_str_freeze(str) | ||||
|     VALUE str; | ||||
| { | ||||
|     return rb_obj_freeze(str); | ||||
| } | ||||
| 
 | ||||
| VALUE | ||||
| rb_str_dup_frozen(str) | ||||
|     VALUE str; | ||||
|  | @ -561,6 +568,10 @@ rb_str_index_m(argc, argv, str) | |||
|     else { | ||||
| 	pos = 0; | ||||
|     } | ||||
|     if (pos < 0) { | ||||
| 	pos += RSTRING(str)->len; | ||||
| 	if (pos < 0) return Qnil; | ||||
|     } | ||||
| 
 | ||||
|     switch (TYPE(sub)) { | ||||
|       case T_REGEXP: | ||||
|  |  | |||
							
								
								
									
										8
									
								
								time.c
									
										
									
									
									
								
							
							
						
						
									
										8
									
								
								time.c
									
										
									
									
									
								
							|  | @ -394,7 +394,7 @@ time_cmp(time1, time2) | |||
| 	i = FIX2LONG(time2); | ||||
| 	if (tobj1->tv.tv_sec == i) return INT2FIX(0); | ||||
| 	if (tobj1->tv.tv_sec > i) return INT2FIX(1); | ||||
| 	return FIX2INT(-1); | ||||
| 	return INT2FIX(-1); | ||||
| 	 | ||||
|       case T_FLOAT: | ||||
| 	{ | ||||
|  | @ -414,15 +414,15 @@ time_cmp(time1, time2) | |||
| 	if (tobj1->tv.tv_sec == tobj2->tv.tv_sec) { | ||||
| 	    if (tobj1->tv.tv_usec == tobj2->tv.tv_usec) return INT2FIX(0); | ||||
| 	    if (tobj1->tv.tv_usec > tobj2->tv.tv_usec) return INT2FIX(1); | ||||
| 	    return FIX2INT(-1); | ||||
| 	    return INT2FIX(-1); | ||||
| 	} | ||||
| 	if (tobj1->tv.tv_sec > tobj2->tv.tv_sec) return INT2FIX(1); | ||||
| 	return FIX2INT(-1); | ||||
| 	return INT2FIX(-1); | ||||
|     } | ||||
|     i = NUM2LONG(time2); | ||||
|     if (tobj1->tv.tv_sec == i) return INT2FIX(0); | ||||
|     if (tobj1->tv.tv_sec > i) return INT2FIX(1); | ||||
|     return FIX2INT(-1); | ||||
|     return INT2FIX(-1); | ||||
| } | ||||
| 
 | ||||
| static VALUE | ||||
|  |  | |||
|  | @ -1,4 +1,4 @@ | |||
| #define RUBY_VERSION "1.5.2" | ||||
| #define RUBY_RELEASE_DATE "2000-02-08" | ||||
| #define RUBY_RELEASE_DATE "2000-02-17" | ||||
| #define RUBY_VERSION_CODE 152 | ||||
| #define RUBY_RELEASE_CODE 20000208 | ||||
| #define RUBY_RELEASE_CODE 20000217 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 matz
						matz