mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* load.c (rb_load_internal): remove call to rb_realpath_internal
within rb_load_internal which caused big performance degradation. Instead, call rb_realpath_internal in the caller of rb_load_internal. [ruby-dev:41502] [ruby-dev:41610] * vm.c (rb_vm_call_cfunc): ditto. * eval_intern.h (rb_vm_call_cfunc): ditto. * ruby.c (process_options): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28351 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									4df965f4ed
								
							
						
					
					
						commit
						2db572514c
					
				
					 6 changed files with 24 additions and 9 deletions
				
			
		
							
								
								
									
										13
									
								
								ChangeLog
									
										
									
									
									
								
							
							
						
						
									
										13
									
								
								ChangeLog
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,3 +1,16 @@
 | 
			
		|||
Thu Jun 17 23:20:14 2010  Yusuke Endoh  <mame@tsg.ne.jp>
 | 
			
		||||
 | 
			
		||||
	* load.c (rb_load_internal): remove call to rb_realpath_internal
 | 
			
		||||
	  within rb_load_internal which caused big performance degradation.
 | 
			
		||||
	  Instead, call rb_realpath_internal in the caller of
 | 
			
		||||
	  rb_load_internal.  [ruby-dev:41502] [ruby-dev:41610]
 | 
			
		||||
 | 
			
		||||
	* vm.c (rb_vm_call_cfunc): ditto.
 | 
			
		||||
 | 
			
		||||
	* eval_intern.h (rb_vm_call_cfunc): ditto.
 | 
			
		||||
 | 
			
		||||
	* ruby.c (process_options): ditto.
 | 
			
		||||
 | 
			
		||||
Thu Jun 17 18:37:47 2010  NAKAMURA Usaku  <usa@ruby-lang.org>
 | 
			
		||||
 | 
			
		||||
	* file.c (rb_str_encode_ospath): when the encoding of the parameter
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -205,7 +205,7 @@ NORETURN(void rb_raise_method_missing(rb_thread_t *th, int argc, VALUE *argv,
 | 
			
		|||
 | 
			
		||||
VALUE rb_vm_make_jump_tag_but_local_jump(int state, VALUE val);
 | 
			
		||||
NODE *rb_vm_cref(void);
 | 
			
		||||
VALUE rb_vm_call_cfunc(VALUE recv, VALUE (*func)(VALUE), VALUE arg, const rb_block_t *blockptr, VALUE filename, VALUE filepath);
 | 
			
		||||
VALUE rb_vm_call_cfunc(VALUE recv, VALUE (*func)(VALUE), VALUE arg, const rb_block_t *blockptr, VALUE filename);
 | 
			
		||||
void rb_vm_set_progname(VALUE filename);
 | 
			
		||||
void rb_thread_terminate_all(void);
 | 
			
		||||
VALUE rb_vm_top_self();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										5
									
								
								iseq.c
									
										
									
									
									
								
							
							
						
						
									
										5
									
								
								iseq.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -228,7 +228,7 @@ prepare_iseq_build(rb_iseq_t *iseq,
 | 
			
		|||
 | 
			
		||||
    iseq->name = name;
 | 
			
		||||
    iseq->filename = filename;
 | 
			
		||||
    iseq->filepath = filepath == Qnil ? Qnil : rb_realpath_internal(Qnil, filepath, 1);
 | 
			
		||||
    iseq->filepath = filepath;
 | 
			
		||||
    iseq->line_no = (unsigned short)line_no; /* TODO: really enough? */
 | 
			
		||||
    iseq->defined_method_id = 0;
 | 
			
		||||
    iseq->mark_ary = rb_ary_tmp_new(3);
 | 
			
		||||
| 
						 | 
				
			
			@ -606,7 +606,8 @@ iseq_s_compile_file(int argc, VALUE *argv, VALUE self)
 | 
			
		|||
    parser = rb_parser_new();
 | 
			
		||||
    node = rb_parser_compile_file(parser, fname, f, NUM2INT(line));
 | 
			
		||||
    make_compile_option(&option, opt);
 | 
			
		||||
    return rb_iseq_new_with_opt(node, rb_str_new2("<main>"), file, file, line, Qfalse,
 | 
			
		||||
    return rb_iseq_new_with_opt(node, rb_str_new2("<main>"), file,
 | 
			
		||||
				rb_realpath_internal(Qnil, file, 1), line, Qfalse,
 | 
			
		||||
				ISEQ_TYPE_TOP, &option);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										6
									
								
								load.c
									
										
									
									
									
								
							
							
						
						
									
										6
									
								
								load.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -297,7 +297,7 @@ rb_load_internal(VALUE fname, int wrap)
 | 
			
		|||
	th->mild_compile_error++;
 | 
			
		||||
	node = (NODE *)rb_load_file(RSTRING_PTR(fname));
 | 
			
		||||
	loaded = TRUE;
 | 
			
		||||
	iseq = rb_iseq_new_top(node, rb_str_new2("<top (required)>"), fname, fname, Qfalse);
 | 
			
		||||
	iseq = rb_iseq_new_top(node, rb_str_new2("<top (required)>"), fname, rb_realpath_internal(Qnil, fname, 1), Qfalse);
 | 
			
		||||
	th->mild_compile_error--;
 | 
			
		||||
	rb_iseq_eval(iseq);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -596,7 +596,7 @@ rb_require_safe(VALUE fname, int safe)
 | 
			
		|||
 | 
			
		||||
		  case 's':
 | 
			
		||||
		    handle = (long)rb_vm_call_cfunc(rb_vm_top_self(), load_ext,
 | 
			
		||||
						    path, 0, path, path);
 | 
			
		||||
						    path, 0, path);
 | 
			
		||||
		    rb_ary_push(ruby_dln_librefs, LONG2NUM(handle));
 | 
			
		||||
		    break;
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -643,7 +643,7 @@ ruby_init_ext(const char *name, void (*init)(void))
 | 
			
		|||
{
 | 
			
		||||
    if (load_lock(name)) {
 | 
			
		||||
	rb_vm_call_cfunc(rb_vm_top_self(), init_ext_call, (VALUE)init,
 | 
			
		||||
			 0, rb_str_new2(name), Qnil);
 | 
			
		||||
			 0, rb_str_new2(name));
 | 
			
		||||
	rb_provide(name);
 | 
			
		||||
	load_unlock(name, 1);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										3
									
								
								ruby.c
									
										
									
									
									
								
							
							
						
						
									
										3
									
								
								ruby.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1462,7 +1462,8 @@ process_options(int argc, char **argv, struct cmdline_options *opt)
 | 
			
		|||
 | 
			
		||||
    PREPARE_PARSE_MAIN({
 | 
			
		||||
	VALUE path = Qnil;
 | 
			
		||||
	if (!opt->e_script && strcmp(opt->script, "-")) path = opt->script_name;
 | 
			
		||||
	if (!opt->e_script && strcmp(opt->script, "-"))
 | 
			
		||||
	    path = rb_realpath_internal(Qnil, opt->script_name, 1);
 | 
			
		||||
	iseq = rb_iseq_new_main(tree, opt->script_name, path);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										4
									
								
								vm.c
									
										
									
									
									
								
							
							
						
						
									
										4
									
								
								vm.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1450,11 +1450,11 @@ rb_thread_current_status(const rb_thread_t *th)
 | 
			
		|||
 | 
			
		||||
VALUE
 | 
			
		||||
rb_vm_call_cfunc(VALUE recv, VALUE (*func)(VALUE), VALUE arg,
 | 
			
		||||
		 const rb_block_t *blockptr, VALUE filename, VALUE filepath)
 | 
			
		||||
		 const rb_block_t *blockptr, VALUE filename)
 | 
			
		||||
{
 | 
			
		||||
    rb_thread_t *th = GET_THREAD();
 | 
			
		||||
    const rb_control_frame_t *reg_cfp = th->cfp;
 | 
			
		||||
    volatile VALUE iseqval = rb_iseq_new(0, filename, filename, filepath, 0, ISEQ_TYPE_TOP);
 | 
			
		||||
    volatile VALUE iseqval = rb_iseq_new(0, filename, filename, Qnil, 0, ISEQ_TYPE_TOP);
 | 
			
		||||
    VALUE val;
 | 
			
		||||
 | 
			
		||||
    vm_push_frame(th, DATA_PTR(iseqval), VM_FRAME_MAGIC_TOP,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue