1/********************************************************************** 2 3 ruby/vm.h - 4 5 $Author: shyouhei $ 6 created at: Sat May 31 15:17:36 2008 7 8 Copyright (C) 2008 Yukihiro Matsumoto 9 10**********************************************************************/ 11 12#ifndef RUBY_VM_H 13#define RUBY_VM_H 1 14 15#if defined(__cplusplus) 16extern "C" { 17#if 0 18} /* satisfy cc-mode */ 19#endif 20#endif 21 22#if defined __GNUC__ && __GNUC__ >= 4 23#pragma GCC visibility push(default) 24#endif 25 26/* Place holder. 27 * 28 * We will prepare VM creation/control APIs on 1.9.2 or later. 29 * If you have an interest about it, please see mvm branch. 30 * http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/mvm/ 31 */ 32 33/* VM type declaration */ 34typedef struct rb_vm_struct ruby_vm_t; 35 36/* core API */ 37int ruby_vm_destruct(ruby_vm_t *vm); 38 39/** 40 * ruby_vm_at_exit registers a function _func_ to be invoked when a VM 41 * passed away. Functions registered this way runs in reverse order 42 * of registration, just like END {} block does. The difference is 43 * its timing to be triggered. ruby_vm_at_exit functions runs when a 44 * VM _passed_ _away_, while END {} blocks runs just _before_ a VM 45 * _is_ _passing_ _away_. 46 * 47 * You cannot register a function to another VM than where you are in. 48 * So where to register is intuitive, omitted. OTOH the argument 49 * _func_ cannot know which VM it is in because at the time of 50 * invocation, the VM has already died and there is no execution 51 * context. The VM itself is passed as the first argument to it. 52 * 53 * @param[in] func the function to register. 54 */ 55void ruby_vm_at_exit(void(*func)(ruby_vm_t *)); 56 57#if defined __GNUC__ && __GNUC__ >= 4 58#pragma GCC visibility pop 59#endif 60 61#if defined(__cplusplus) 62#if 0 63{ /* satisfy cc-mode */ 64#endif 65} /* extern "C" { */ 66#endif 67 68#endif /* RUBY_VM_H */ 69