mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* probes_helper.h (RUBY_DTRACE_HOOK): surround with do..while. * vm.c (vm_exec): supply semicolon. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38307 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			67 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef RUBY_PROBES_HELPER_H
 | 
						|
#define RUBY_PROBES_HELPER_H
 | 
						|
 | 
						|
#include "ruby/ruby.h"
 | 
						|
#include "probes.h"
 | 
						|
 | 
						|
VALUE rb_class_path_no_cache(VALUE _klass);
 | 
						|
 | 
						|
#define RUBY_DTRACE_HOOK(name, th, klazz, id) \
 | 
						|
do { \
 | 
						|
    if (RUBY_DTRACE_##name##_ENABLED()) { \
 | 
						|
	VALUE _klass = (klazz); \
 | 
						|
	VALUE _id = (id); \
 | 
						|
	const char * classname; \
 | 
						|
	const char * methodname; \
 | 
						|
	const char * filename; \
 | 
						|
	if (!_klass) { \
 | 
						|
	    rb_thread_method_id_and_class((th), &_id, &_klass); \
 | 
						|
	} \
 | 
						|
	if (_klass) { \
 | 
						|
	    if (RB_TYPE_P(_klass, T_ICLASS)) { \
 | 
						|
		_klass = RBASIC(_klass)->klass; \
 | 
						|
	    } \
 | 
						|
	    else if (FL_TEST(_klass, FL_SINGLETON)) { \
 | 
						|
		_klass = rb_iv_get(_klass, "__attached__"); \
 | 
						|
	    } \
 | 
						|
	    switch (TYPE(_klass)) { \
 | 
						|
		case T_CLASS: \
 | 
						|
		case T_ICLASS: \
 | 
						|
		case T_MODULE: \
 | 
						|
		{ \
 | 
						|
		    VALUE _name = rb_class_path_no_cache(_klass); \
 | 
						|
		    if (!NIL_P(_name)) { \
 | 
						|
		        classname = StringValuePtr(_name); \
 | 
						|
		    } \
 | 
						|
		    else {			 \
 | 
						|
		        classname = "<unknown>"; \
 | 
						|
		    } \
 | 
						|
		    methodname = rb_id2name(_id); \
 | 
						|
		    filename   = rb_sourcefile(); \
 | 
						|
		    if (classname && methodname && filename) { \
 | 
						|
		        RUBY_DTRACE_##name( \
 | 
						|
				classname, \
 | 
						|
				methodname, \
 | 
						|
				filename, \
 | 
						|
				rb_sourceline()); \
 | 
						|
		    } \
 | 
						|
		    break; \
 | 
						|
		} \
 | 
						|
	    } \
 | 
						|
	} \
 | 
						|
    } \
 | 
						|
} while (0)
 | 
						|
 | 
						|
#define RUBY_DTRACE_METHOD_ENTRY_HOOK(th, klass, id) \
 | 
						|
    RUBY_DTRACE_HOOK(METHOD_ENTRY, th, klass, id)
 | 
						|
 | 
						|
#define RUBY_DTRACE_METHOD_RETURN_HOOK(th, klass, id) \
 | 
						|
    RUBY_DTRACE_HOOK(METHOD_RETURN, th, klass, id)
 | 
						|
 | 
						|
#define RUBY_DTRACE_CMETHOD_ENTRY_HOOK(th, klass, id) \
 | 
						|
    RUBY_DTRACE_HOOK(CMETHOD_ENTRY, th, klass, id)
 | 
						|
 | 
						|
#define RUBY_DTRACE_CMETHOD_RETURN_HOOK(th, klass, id) \
 | 
						|
    RUBY_DTRACE_HOOK(CMETHOD_RETURN, th, klass, id)
 | 
						|
 | 
						|
#endif /* RUBY_PROBES_HELPER_H */
 |