1 /* src/vmcore/loader.h - class loader header
3 Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel,
4 C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
5 E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
6 J. Wenninger, Institut f. Computersprachen - TU Wien
8 This file is part of CACAO.
10 This program is free software; you can redistribute it and/or
11 modify it under the terms of the GNU General Public License as
12 published by the Free Software Foundation; either version 2, or (at
13 your option) any later version.
15 This program is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
25 $Id: loader.h 8324 2007-08-16 16:48:12Z michi $
32 /* forward typedefs ***********************************************************/
34 typedef struct classbuffer classbuffer;
43 #include "vm/global.h"
45 #include "vmcore/descriptor.h"
46 #include "vmcore/class.h"
47 #include "vmcore/method.h"
48 #include "vmcore/references.h"
49 #include "vmcore/utf8.h"
52 /* constant pool entries *******************************************************
54 All constant pool entries need a data structure which contain the entrys
55 value. In some cases this structure exist already, in the remaining cases
56 this structure must be generated:
58 kind structure generated?
59 ----------------------------------------------------------------------
60 CONSTANT_Class constant_classref yes
61 CONSTANT_Fieldref constant_FMIref yes
62 CONSTANT_Methodref constant_FMIref yes
63 CONSTANT_InterfaceMethodref constant_FMIref yes
64 CONSTANT_String unicode no
65 CONSTANT_Integer constant_integer yes
66 CONSTANT_Float constant_float yes
67 CONSTANT_Long constant_long yes
68 CONSTANT_Double constant_double yes
69 CONSTANT_NameAndType constant_nameandtype yes
70 CONSTANT_Utf8 unicode no
73 *******************************************************************************/
75 typedef struct { /* Integer */
80 typedef struct { /* Float */
85 typedef struct { /* Long */
90 typedef struct { /* Double */
95 typedef struct { /* NameAndType (Field or Method) */
96 utf *name; /* field/method name */
97 utf *descriptor; /* field/method type descriptor string */
98 } constant_nameandtype;
101 /* classbuffer ****************************************************************/
104 classinfo *class; /* pointer to classinfo structure */
105 u1 *data; /* pointer to byte code */
106 s4 size; /* size of the byte code */
107 u1 *pos; /* current read position */
108 char *path; /* path to file (for debugging) */
112 /* hashtable_classloader_entry *************************************************
114 ATTENTION: The pointer to the classloader object needs to be the
115 first field of the entry, so that it can be used as an indirection
116 cell. This is checked by gc_init() during startup.
118 *******************************************************************************/
120 typedef struct hashtable_classloader_entry hashtable_classloader_entry;
122 struct hashtable_classloader_entry {
123 java_object_t *object;
124 hashtable_classloader_entry *hashlink;
128 /* classloader ****************************************************************/
130 typedef hashtable_classloader_entry classloader;
133 /* function prototypes ********************************************************/
135 /* initialize loader, load important systemclasses */
136 bool loader_init(void);
138 /* classloader management functions */
139 classloader *loader_hashtable_classloader_add(java_handle_t *cl);
140 classloader *loader_hashtable_classloader_find(java_handle_t *cl);
142 void loader_load_all_classes(void);
144 bool loader_skip_attribute_body(classbuffer *cb);
146 #if defined(ENABLE_JAVASE)
147 bool loader_load_attribute_signature(classbuffer *cb, utf **signature);
151 void loader_close(void);
153 /* class loading functions */
154 classinfo *load_class_from_sysloader(utf *name);
155 classinfo *load_class_from_classloader(utf *name, classloader *cl);
156 classinfo *load_class_bootstrap(utf *name);
158 /* (don't use the following directly) */
159 classinfo *load_class_from_classbuffer(classbuffer *cb);
160 classinfo *load_newly_created_array(classinfo *c, classloader *loader);
162 #endif /* _LOADER_H */
165 * These are local overrides for various environment variables in Emacs.
166 * Please do not remove this and leave it at the end of the file, where
167 * Emacs will automagically detect them.
168 * ---------------------------------------------------------------------
171 * indent-tabs-mode: t
175 * vim:noexpandtab:sw=4:ts=4: