mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	 478003f6df
			
		
	
	
		478003f6df
		
	
	
	
	
		
			
			* vm_core.h: rename absolute_path to realpath because it is expected name.
  external APIs (#absolute_path methods) are remained.
* vm_core.h: remove rb_iseq_location_struct::path and
  rb_iseq_location_struct::absolute_path and introduce pathobj.
  if given path equals to given absolute_path (and most of case
  it is true), pathobj is simply given path String. If it is not same,
  pathobj is Array and pathobj[0] is path and pathobj[1] is realpath.
  This size optimization reduce 8 bytes and
  sizeof(struct rb_iseq_constant_body) is 200 bytes -> 192 bytes
  on 64bit CPU.
  To support this change, the following functions are introduced:
    * pathobj_path() (defined in vm_core.h)
    * pathobj_realpath() (ditto)
    * rb_iseq_path() (decl. in vm_core.h)
    * rb_iseq_realpath() (ditto)
    * rb_iseq_pathobj_new() (ditto)
    * rb_iseq_pathobj_set() (ditto)
* vm_core.h (rb_binding_t): use pathobj instead of path. If binding
  is given at eval methods, realpath (absolute_path) was caller's
  realpath. However, they should use binding's realpath.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58979 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
	
			
		
			
				
	
	
		
			109 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /**********************************************************************
 | |
| 
 | |
|   debug_counter.h -
 | |
| 
 | |
|   created at: Tue Feb 21 16:51:18 2017
 | |
| 
 | |
|   Copyright (C) 2017 Koichi Sasada
 | |
| 
 | |
| **********************************************************************/
 | |
| 
 | |
| #ifndef USE_DEBUG_COUNTER
 | |
| #define USE_DEBUG_COUNTER 0
 | |
| #endif
 | |
| 
 | |
| #ifdef RB_DEBUG_COUNTER
 | |
| 
 | |
| /* method search */
 | |
| RB_DEBUG_COUNTER(mc_inline_hit)
 | |
| RB_DEBUG_COUNTER(mc_inline_miss)
 | |
| RB_DEBUG_COUNTER(mc_global_hit)
 | |
| RB_DEBUG_COUNTER(mc_global_miss)
 | |
| RB_DEBUG_COUNTER(mc_global_state_miss)
 | |
| RB_DEBUG_COUNTER(mc_class_serial_miss)
 | |
| RB_DEBUG_COUNTER(mc_cme_complement)
 | |
| RB_DEBUG_COUNTER(mc_cme_complement_hit)
 | |
| RB_DEBUG_COUNTER(mc_search_super)
 | |
| 
 | |
| /* ivar access */
 | |
| RB_DEBUG_COUNTER(ivar_get_ic_hit)
 | |
| RB_DEBUG_COUNTER(ivar_get_ic_miss)
 | |
| RB_DEBUG_COUNTER(ivar_get_ic_miss_serial)
 | |
| RB_DEBUG_COUNTER(ivar_get_ic_miss_unset)
 | |
| RB_DEBUG_COUNTER(ivar_get_ic_miss_noobject)
 | |
| RB_DEBUG_COUNTER(ivar_set_ic_hit)
 | |
| RB_DEBUG_COUNTER(ivar_set_ic_miss)
 | |
| RB_DEBUG_COUNTER(ivar_set_ic_miss_serial)
 | |
| RB_DEBUG_COUNTER(ivar_set_ic_miss_unset)
 | |
| RB_DEBUG_COUNTER(ivar_set_ic_miss_oorange)
 | |
| RB_DEBUG_COUNTER(ivar_set_ic_miss_noobject)
 | |
| RB_DEBUG_COUNTER(ivar_get_base)
 | |
| RB_DEBUG_COUNTER(ivar_set_base)
 | |
| 
 | |
| /* lvar access */
 | |
| RB_DEBUG_COUNTER(lvar_get)
 | |
| RB_DEBUG_COUNTER(lvar_get_dynamic)
 | |
| RB_DEBUG_COUNTER(lvar_set)
 | |
| RB_DEBUG_COUNTER(lvar_set_dynamic)
 | |
| RB_DEBUG_COUNTER(lvar_set_slowpath)
 | |
| 
 | |
| /* object counts */
 | |
| RB_DEBUG_COUNTER(obj_free)
 | |
| 
 | |
| RB_DEBUG_COUNTER(obj_str_ptr)
 | |
| RB_DEBUG_COUNTER(obj_str_embed)
 | |
| RB_DEBUG_COUNTER(obj_str_shared)
 | |
| RB_DEBUG_COUNTER(obj_str_nofree)
 | |
| RB_DEBUG_COUNTER(obj_str_fstr)
 | |
| 
 | |
| RB_DEBUG_COUNTER(obj_ary_ptr)
 | |
| RB_DEBUG_COUNTER(obj_ary_embed)
 | |
| 
 | |
| RB_DEBUG_COUNTER(obj_obj_ptr)
 | |
| RB_DEBUG_COUNTER(obj_obj_embed)
 | |
| 
 | |
| /* load */
 | |
| RB_DEBUG_COUNTER(load_files)
 | |
| RB_DEBUG_COUNTER(load_path_is_not_realpath)
 | |
| 
 | |
| #endif
 | |
| 
 | |
| #ifndef RUBY_DEBUG_COUNTER_H
 | |
| #define RUBY_DEBUG_COUNTER_H 1
 | |
| 
 | |
| #if !defined(__GNUC__) && USE_DEBUG_COUNTER
 | |
| #error "USE_DEBUG_COUNTER is not supported by other than __GNUC__"
 | |
| #endif
 | |
| 
 | |
| enum rb_debug_counter_type {
 | |
| #define RB_DEBUG_COUNTER(name) RB_DEBUG_COUNTER_##name,
 | |
| #include "debug_counter.h"
 | |
|     RB_DEBUG_COUNTER_MAX
 | |
| #undef RB_DEBUG_COUNTER
 | |
| };
 | |
| 
 | |
| #if USE_DEBUG_COUNTER
 | |
| #include "ruby/ruby.h"
 | |
| 
 | |
| extern size_t rb_debug_counter[];
 | |
| 
 | |
| inline static int
 | |
| rb_debug_counter_add(enum rb_debug_counter_type type, int add, int cond)
 | |
| {
 | |
|     if (cond) {
 | |
| 	rb_debug_counter[(int)type] += add;
 | |
|     }
 | |
|     return cond;
 | |
| }
 | |
| 
 | |
| #define RB_DEBUG_COUNTER_INC(type)                rb_debug_counter_add(RB_DEBUG_COUNTER_##type, 1, 1)
 | |
| #define RB_DEBUG_COUNTER_INC_UNLESS(type, cond) (!rb_debug_counter_add(RB_DEBUG_COUNTER_##type, 1, !(cond)))
 | |
| #define RB_DEBUG_COUNTER_INC_IF(type, cond)       rb_debug_counter_add(RB_DEBUG_COUNTER_##type, 1, (cond))
 | |
| 
 | |
| #else
 | |
| #define RB_DEBUG_COUNTER_INC(type)              ((void)0)
 | |
| #define RB_DEBUG_COUNTER_INC_UNLESS(type, cond) (cond)
 | |
| #define RB_DEBUG_COUNTER_INC_IF(type, cond)     (cond)
 | |
| #endif
 | |
| 
 | |
| #endif /* RUBY_DEBUG_COUNTER_H */
 |