9a20dbde007ba161964cdba6c8570758ecdfd320
[cacao.git] / src / vm / jit / inline / parseXTA.h
1 /* jit/parseXTA.h - XTA parser header
2
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
7
8    This file is part of CACAO.
9
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.
14
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.
19
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
23    02111-1307, USA.
24
25    Contact: cacao@complang.tuwien.ac.at
26
27    Authors: Carolyn Oates
28
29    $Id: parseXTA.h 3888 2005-12-05 22:08:45Z twisti $
30
31 */
32
33 #ifndef _PARSEXTA_H
34 #define _PARSEXTA_H
35
36 /* forward typedefs ***********************************************************/
37
38 typedef struct xtainfo xtainfo;
39 typedef struct xtafldinfo xtafldinfo;
40
41
42 #include "toolbox/list.h"
43 #include "vm/global.h"
44 #include "vm/jit/inline/sets.h"
45
46
47 #define LAZYLOADING(class) { \
48         if (!(class->state & CLASS_LINKED)) \
49             if (!link_class(class)) \
50                 return 0; }
51
52
53
54 #define LAZYLOADING1(class) { \
55         if (!(class->state & CLASS_LINKED)) \
56             if (!link_class(class)) \
57                 return; }
58
59
60 /* methodinfo static info *****************************************************/
61
62 struct xtainfo {
63         s4          XTAmethodUsed;     /* XTA if used in callgraph - not used /used */
64         classSet    *XTAclassSet;      /* method class type set                 */ 
65         /*classSet      *PartClassSet */   /* method class type set                 */ 
66
67         classSetNode    *paramClassSet; /* cone set of methods parameters       */
68         
69         /* Needed for interative checking */
70         methSet         *calls;            /* Edges - methods this method calls                 */ 
71         methSet         *calledBy;         /* Edges - methods that call this method         */ 
72         methSet         *markedBy;  
73         fldSet          *fldsUsed;         /* fields used by this method             */ 
74         /*methSetNode  *interfaceCalls*/   /* methods this method calls as interface */ 
75         bool           chgdSinceLastParse; /* Changed since last parse ?          */
76 }; 
77
78
79 /* field, method and class structures *****************************************/
80
81 struct xtafldinfo {
82         bool       fieldChecked;                
83         classinfo *fldClassType;
84         classSet  *XTAclassSet;          /* field class type set                  */
85 };
86
87
88 extern FILE *xtaMissed;  /* Methods missed during XTA parse of Main  */
89
90 typedef struct {
91         listnode linkage;
92         methodinfo *method;
93         } xtaNode ;
94
95
96 extern int XTA_jit_parse(methodinfo *m);
97
98 #endif /* _PARSEXTA_H */
99
100 /*
101  * These are local overrides for various environment variables in Emacs.
102  * Please do not remove this and leave it at the end of the file, where
103  * Emacs will automagically detect them.
104  * ---------------------------------------------------------------------
105  * Local variables:
106  * mode: c
107  * indent-tabs-mode: t
108  * c-basic-offset: 4
109  * tab-width: 4
110  * End:
111  */
112