1 /* src/vm/method.c - method functions
3 Copyright (C) 1996-2005 R. Grafl, A. Krall, C. Kruegel, C. Oates,
4 R. Obermaisser, M. Platter, M. Probst, S. Ring, E. Steiner,
5 C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, J. Wenninger,
6 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., 59 Temple Place - Suite 330, Boston, MA
25 Contact: cacao@complang.tuwien.ac.at
27 Authors: Reinhard Grafl
29 Changes: Andreas Krall
35 $Id: method.c 4008 2005-12-30 14:13:10Z twisti $
43 #include "mm/memory.h"
45 #include "vm/global.h"
46 #include "vm/loader.h"
47 #include "vm/method.h"
50 /* method_free *****************************************************************
52 Frees all memory that was allocated for this method.
54 *******************************************************************************/
56 void method_free(methodinfo *m)
59 MFREE(m->jcode, u1, m->jcodelength);
61 if (m->exceptiontable)
62 MFREE(m->exceptiontable, exceptiontable, m->exceptiontablelength);
65 CFREE((void *) (ptrint) m->mcode, m->mcodelength);
68 if (m->flags & ACC_NATIVE) {
69 removenativestub(m->stubroutine);
72 removecompilerstub(m->stubroutine);
78 /* method_canoverwrite *********************************************************
80 Check if m and old are identical with respect to type and
81 name. This means that old can be overwritten with m.
83 *******************************************************************************/
85 bool method_canoverwrite(methodinfo *m, methodinfo *old)
87 if (m->name != old->name)
90 if (m->descriptor != old->descriptor)
93 if (m->flags & ACC_STATIC)
99 /* method_descriptor2types *****************************************************
101 Fills in the following members of the given methodinfo:
107 This function uses dump_alloc functions to allocate memory.
109 *******************************************************************************/
111 void method_descriptor2types(methodinfo *m)
115 methoddesc *md = m->parseddesc;
118 pcount = md->paramcount;
119 if ((m->flags & ACC_STATIC) == 0)
120 pcount++; /* count this pointer */
122 types = DMNEW(u1,pcount);
125 if (!(m->flags & ACC_STATIC)) {
130 paramtype = md->paramtypes;
131 for (i=0; i<md->paramcount; ++i,++paramtype)
132 *tptr++ = paramtype->type;
134 m->returntype = md->returntype.type;
135 m->paramcount = pcount;
136 m->paramtypes = types;
139 /************** Function: method_display (debugging only) **************/
141 void method_display(methodinfo *m)
144 printflags(m->flags);
146 utf_display(m->name);
148 utf_display(m->descriptor);
152 /************** Function: method_display_w_class (debugging only) **************/
154 void method_display_w_class(methodinfo *m)
156 printflags(m->class->flags);
157 printf(" "); fflush(stdout);
158 utf_display(m->class->name);
159 printf(".");fflush(stdout);
162 printflags(m->flags);
163 printf(" "); fflush(stdout);
164 utf_display(m->name);
165 printf(" "); fflush(stdout);
166 utf_display(m->descriptor);
167 printf("\n"); fflush(stdout);
170 /************** Function: method_display_flags_last (debugging only) **************/
172 void method_display_flags_last(methodinfo *m)
175 utf_display(m->name);
177 utf_display(m->descriptor);
179 printflags(m->flags);
185 * These are local overrides for various environment variables in Emacs.
186 * Please do not remove this and leave it at the end of the file, where
187 * Emacs will automagically detect them.
188 * ---------------------------------------------------------------------
191 * indent-tabs-mode: t