mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	 1e3a1bbb66
			
		
	
	
		1e3a1bbb66
		
	
	
	
	
		
			
			* include/ruby/ruby.h: prefix RUBY or RB to global symbols to get rid of name conflicts with other headers. * include/ruby/encoding.h, include/ruby/intern.h: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51851 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			132 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /**********************************************************************
 | |
| 
 | |
|   debug.c -
 | |
| 
 | |
|   $Author$
 | |
|   created at: 04/08/25 02:31:54 JST
 | |
| 
 | |
|   Copyright (C) 2004-2007 Koichi Sasada
 | |
| 
 | |
| **********************************************************************/
 | |
| 
 | |
| #include "ruby/ruby.h"
 | |
| #include "ruby/encoding.h"
 | |
| #include "ruby/util.h"
 | |
| #include "vm_debug.h"
 | |
| #include "eval_intern.h"
 | |
| #include "vm_core.h"
 | |
| #include "id.h"
 | |
| 
 | |
| /* for gdb */
 | |
| const union {
 | |
|     enum ruby_special_consts    special_consts;
 | |
|     enum ruby_value_type        value_type;
 | |
|     enum ruby_tag_type          tag_type;
 | |
|     enum node_type              node_type;
 | |
|     enum ruby_method_ids        method_ids;
 | |
|     enum ruby_id_types          id_types;
 | |
|     enum ruby_fl_type           fl_types;
 | |
|     enum ruby_encoding_consts   encoding_consts;
 | |
|     enum ruby_coderange_type    enc_coderange_types;
 | |
|     enum ruby_econv_flag_type   econv_flag_types;
 | |
|     enum {
 | |
|         RUBY_NODE_TYPESHIFT = NODE_TYPESHIFT,
 | |
|         RUBY_NODE_TYPEMASK  = NODE_TYPEMASK,
 | |
|         RUBY_NODE_LSHIFT    = NODE_LSHIFT,
 | |
|         RUBY_NODE_FL_NEWLINE   = NODE_FL_NEWLINE
 | |
|     } various;
 | |
| } ruby_dummy_gdb_enums;
 | |
| 
 | |
| const SIGNED_VALUE RUBY_NODE_LMASK = NODE_LMASK;
 | |
| 
 | |
| int
 | |
| ruby_debug_print_indent(int level, int debug_level, int indent_level)
 | |
| {
 | |
|     if (level < debug_level) {
 | |
| 	fprintf(stderr, "%*s", indent_level, "");
 | |
| 	fflush(stderr);
 | |
| 	return TRUE;
 | |
|     }
 | |
|     return FALSE;
 | |
| }
 | |
| 
 | |
| void
 | |
| ruby_debug_printf(const char *format, ...)
 | |
| {
 | |
|     va_list ap;
 | |
|     va_start(ap, format);
 | |
|     vfprintf(stderr, format, ap);
 | |
|     va_end(ap);
 | |
| }
 | |
| 
 | |
| VALUE
 | |
| ruby_debug_print_value(int level, int debug_level, const char *header, VALUE obj)
 | |
| {
 | |
|     if (level < debug_level) {
 | |
| 	VALUE str;
 | |
| 	str = rb_inspect(obj);
 | |
| 	fprintf(stderr, "DBG> %s: %s\n", header,
 | |
| 		obj == (VALUE)(SIGNED_VALUE)-1 ? "" : StringValueCStr(str));
 | |
| 	fflush(stderr);
 | |
|     }
 | |
|     return obj;
 | |
| }
 | |
| 
 | |
| void
 | |
| ruby_debug_print_v(VALUE v)
 | |
| {
 | |
|     ruby_debug_print_value(0, 1, "", v);
 | |
| }
 | |
| 
 | |
| ID
 | |
| ruby_debug_print_id(int level, int debug_level, const char *header, ID id)
 | |
| {
 | |
|     if (level < debug_level) {
 | |
| 	fprintf(stderr, "DBG> %s: %s\n", header, rb_id2name(id));
 | |
| 	fflush(stderr);
 | |
|     }
 | |
|     return id;
 | |
| }
 | |
| 
 | |
| NODE *
 | |
| ruby_debug_print_node(int level, int debug_level, const char *header, const NODE *node)
 | |
| {
 | |
|     if (level < debug_level) {
 | |
| 	fprintf(stderr, "DBG> %s: %s (%u)\n", header,
 | |
| 		ruby_node_name(nd_type(node)), nd_line(node));
 | |
|     }
 | |
|     return (NODE *)node;
 | |
| }
 | |
| 
 | |
| void
 | |
| ruby_debug_breakpoint(void)
 | |
| {
 | |
|     /* */
 | |
| }
 | |
| 
 | |
| static void
 | |
| set_debug_option(const char *str, int len, void *arg)
 | |
| {
 | |
| #if defined _WIN32 && RUBY_MSVCRT_VERSION >= 80
 | |
|     extern int ruby_w32_rtc_error;
 | |
| #endif
 | |
| #define SET_WHEN(name, var, val) do {	    \
 | |
| 	if (len == sizeof(name) - 1 &&	    \
 | |
| 	    strncmp(str, (name), len) == 0) { \
 | |
| 	    (var) = (val);		    \
 | |
| 	    return;			    \
 | |
| 	}				    \
 | |
|     } while (0)
 | |
|     SET_WHEN("gc_stress", *ruby_initial_gc_stress_ptr, Qtrue);
 | |
|     SET_WHEN("core", ruby_enable_coredump, 1);
 | |
| #if defined _WIN32 && RUBY_MSVCRT_VERSION >= 80
 | |
|     SET_WHEN("rtc_error", ruby_w32_rtc_error, 1);
 | |
| #endif
 | |
|     fprintf(stderr, "unexpected debug option: %.*s\n", len, str);
 | |
| }
 | |
| 
 | |
| void
 | |
| ruby_set_debug_option(const char *str)
 | |
| {
 | |
|     ruby_each_words(str, set_debug_option, 0);
 | |
| }
 |