mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			147 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			147 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C++
		
	
	
	
| // execution.h - Execution engines. -*- c++ -*-
 | |
| 
 | |
| /* Copyright (C) 2004  Free Software Foundation
 | |
| 
 | |
|    This file is part of libgcj.
 | |
| 
 | |
| This software is copyrighted work licensed under the terms of the
 | |
| Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
 | |
| details.  */
 | |
| 
 | |
| #ifndef __JAVA_EXECUTION_H__
 | |
| #define __JAVA_EXECUTION_H__
 | |
| 
 | |
| // This represents one execution engine.  Note that we use function
 | |
| // pointers and not virtual methods to avoid calls to
 | |
| // __cxa_call_unexpected and the like.
 | |
| struct _Jv_ExecutionEngine
 | |
| {
 | |
|  public:
 | |
| 
 | |
|   void (*unregister) (jclass);
 | |
|   // FIXME: probably should handle this elsewhere, see how
 | |
|   // interpreter does it.
 | |
|   bool (*need_resolve_string_fields) ();
 | |
|   void (*verify) (jclass);
 | |
|   void (*allocate_static_fields) (jclass, int);
 | |
|   void (*create_ncode) (jclass);
 | |
|   _Jv_ResolvedMethod *(*resolve_method) (_Jv_Method *, jclass,
 | |
| 					 jboolean, jint);
 | |
|   void (*post_miranda_hook) (jclass);
 | |
| };
 | |
| 
 | |
| // This handles all gcj-compiled code, including BC ABI.
 | |
| struct _Jv_CompiledEngine : public _Jv_ExecutionEngine
 | |
| {
 | |
|  public:
 | |
| 
 | |
|   static void do_unregister (jclass)
 | |
|   {
 | |
|   }
 | |
| 
 | |
|   static bool do_need_resolve_string_fields ()
 | |
|   {
 | |
|     return true;
 | |
|   }
 | |
| 
 | |
|   static void do_verify (jclass klass)
 | |
|   {
 | |
|     _Jv_Linker::verify_type_assertions (klass);
 | |
|   }
 | |
| 
 | |
|   static _Jv_ResolvedMethod *do_resolve_method (_Jv_Method *, jclass,
 | |
| 						jboolean, jint)
 | |
|   {
 | |
|     return NULL;
 | |
|   }
 | |
| 
 | |
|   static void do_allocate_static_fields (jclass, int)
 | |
|   {
 | |
|     // Compiled classes don't need this.
 | |
|   }
 | |
| 
 | |
|   static void do_create_ncode (jclass)
 | |
|   {
 | |
|     // Not needed.
 | |
|   }
 | |
| 
 | |
|   static void do_post_miranda_hook (jclass)
 | |
|   {
 | |
|     // Not needed.
 | |
|   }
 | |
| 
 | |
|   _Jv_CompiledEngine ()
 | |
|   {
 | |
|     unregister = do_unregister;
 | |
|     need_resolve_string_fields = do_need_resolve_string_fields;
 | |
|     verify = do_verify;
 | |
|     allocate_static_fields = do_allocate_static_fields;
 | |
|     create_ncode = do_create_ncode;
 | |
|     resolve_method = do_resolve_method;
 | |
|     post_miranda_hook = do_post_miranda_hook;
 | |
|   }
 | |
| 
 | |
|   // These operators make it so we don't have to link in libstdc++.
 | |
|   void *operator new (size_t bytes)
 | |
|   {
 | |
|     return _Jv_Malloc(bytes);
 | |
|   }
 | |
| 
 | |
|   void operator delete (void *mem)
 | |
|   {
 | |
|     _Jv_Free(mem);
 | |
|   }
 | |
| };
 | |
| 
 | |
| // This handles interpreted code.
 | |
| class _Jv_InterpreterEngine : public _Jv_ExecutionEngine
 | |
| {
 | |
|  public:
 | |
| 
 | |
|   static void do_verify (jclass);
 | |
|   static void do_allocate_static_fields (jclass, int);
 | |
|   static void do_create_ncode (jclass);
 | |
|   static _Jv_ResolvedMethod *do_resolve_method (_Jv_Method *, jclass,
 | |
| 						jboolean, jint);
 | |
| 
 | |
|   static bool do_need_resolve_string_fields ()
 | |
|   {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   static void do_unregister(jclass klass)
 | |
|   {
 | |
|     _Jv_UnregisterClass(klass);
 | |
|   }
 | |
| 
 | |
|   static void do_post_miranda_hook (jclass);
 | |
| 
 | |
|   _Jv_InterpreterEngine ()
 | |
|   {
 | |
|     unregister = do_unregister;
 | |
|     need_resolve_string_fields = do_need_resolve_string_fields;
 | |
|     verify = do_verify;
 | |
|     allocate_static_fields = do_allocate_static_fields;
 | |
|     create_ncode = do_create_ncode;
 | |
|     resolve_method = do_resolve_method;
 | |
|     post_miranda_hook = do_post_miranda_hook;
 | |
|   }
 | |
| 
 | |
|   // These operators make it so we don't have to link in libstdc++.
 | |
|   void *operator new (size_t bytes)
 | |
|   {
 | |
|     return _Jv_Malloc(bytes);
 | |
|   }
 | |
| 
 | |
|   void operator delete (void *mem)
 | |
|   {
 | |
|     _Jv_Free(mem);
 | |
|   }
 | |
| };
 | |
| 
 | |
| 
 | |
| extern _Jv_InterpreterEngine _Jv_soleInterpreterEngine;
 | |
| extern _Jv_CompiledEngine _Jv_soleCompiledEngine;
 | |
| 
 | |
| #endif // __JAVA_EXECUTION_H__
 |