home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / kaffe-0.5p4-src.tgz / tar.out / contrib / kaffe / kaffevm / classMethod.h < prev    next >
C/C++ Source or Header  |  1996-09-28  |  3KB  |  142 lines

  1. /*
  2.  * classMethod.h
  3.  * Class, method and field tables.
  4.  *
  5.  * Copyright (c) 1996 Systems Architecture Research Centre,
  6.  *           City University, London, UK.
  7.  *
  8.  * See the file "license.terms" for information on usage and redistribution
  9.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  10.  *
  11.  * Written by Tim Wilkinson <tim@sarc.city.ac.uk>, February 1996.
  12.  */
  13.  
  14. #ifndef __classmethod_h
  15. #define __classmethod_h
  16.  
  17. #define    MAXMETHOD        64
  18.  
  19. /* Class state */
  20. #define    CSTATE_OK        0
  21. #define    CSTATE_NEEDINIT        1
  22. #define    CSTATE_DOINGINIT    2
  23.  
  24. struct _constants;
  25. struct _methods;
  26. struct _fields;
  27. struct _methodTable;
  28. struct _dispatchTable;
  29. struct _jexception;
  30.  
  31. typedef struct _classes {
  32.     object            head;        /* A class is an object too */
  33.     struct _classes*    next;
  34.     char*            name;
  35.     char*            sig;
  36.     int            accflags;
  37.     char*            supername;
  38.     struct _classes*    superclass;
  39.     struct _constants*    constants;
  40.     struct _methods*    methodList;
  41.     int            msize;
  42.     struct _fields*        fieldList;
  43.     int            fsize;
  44.     struct _fields*        staticFieldList;
  45.     int            sfsize;
  46.     struct _methodTable*    mtable;
  47.     struct _dispatchTable*    dtable;
  48.     int*            staticFields;
  49.         struct _classes**       interfaces;
  50.     int            interface_len;
  51.     struct _classes*    nextInit;
  52.     struct _classes*    prevInit;
  53.     int            state;
  54.     bool            final;
  55. } classes;
  56.  
  57. typedef struct _methods {
  58.     struct _methods*    next;
  59.     strpair*        pair;
  60.     accessFlags        accflags;
  61.     char*            code;
  62.     int            codelen;
  63.     struct _instn*        insn;
  64.     nativecode*        ncode;
  65.     nativecode*        ncode_end;
  66.     struct _constants*    constants;
  67.     struct _jexception*    exception_table;
  68.     int            exception_table_len;
  69.     struct _methods*    exception_next;
  70.     int            stacksz;
  71.     int            localsz;
  72.     int            ins;
  73.     int            outs;
  74.     char            outtype;
  75.     classes*        class;
  76.     int            idx;
  77. } methods;
  78.  
  79. typedef struct _methodTable {
  80.     classes*        class;
  81.     struct {
  82.         strpair*    tag;
  83.         void*        method;
  84.     } m[MAXMETHOD];
  85. } methodTable;
  86.  
  87. typedef struct _dispatchTable {
  88.     classes*        class;
  89.     methodTable*        mtable;
  90.     struct {
  91.         void*        method;
  92.     } m[1];
  93. } dispatchTable;
  94.  
  95. #define    DTABLE_CLASS        0
  96. #define    DTABLE_MTABLEOFFSET    4
  97. #define    DTABLE_METHODOFFSET    8
  98. #define    DTABLE_METHODSIZE    4
  99.  
  100. #define    MTABLE_CLASS        0
  101. #define    MTABLE_METHODOFFSET    4
  102. #define    MTABLE_METHODSIZE    8
  103. #define    MTABLE_TAG        0
  104. #define    MTABLE_METHOD        4
  105.  
  106. typedef struct _fields {
  107.     struct _fields*        next;
  108.     char*            name;
  109.     char*            sig;
  110.     accessFlags        accflags;
  111.     classes*        class;
  112.     int            size;
  113.     int            offset;
  114. } fields;
  115.  
  116. #define    CLASSHASHSZ        128
  117. #define    CLASSMAXSIG        256
  118.  
  119. struct _Code;
  120. struct _method_info;
  121. struct _field_info;
  122. struct _classFile;
  123.  
  124. classes*    addClass(constIndex, constIndex, u2, struct _constants*);
  125. methods*    addMethod(classes*, struct _method_info*);
  126. void         addMethodCode(methods*, struct _Code*);
  127. void        finishClassMethods(classes*);
  128. fields*         addField(classes*, struct _field_info*);
  129. void        addCode(methods*, uint32, struct _classFile*);
  130. classes*    lookupClass(char*);
  131. classes*    simpleLookupClass(char*);
  132. classes*    lookupArray(char*);
  133. fields*        lookupClassField(char*, char*, bool);
  134. void        countInsAndOuts(char*, int*, int*, char*);
  135. int        sizeofSig(char**);
  136. int        sizeofSigItem(char**, char*);
  137. void        establishMethod(methods*);
  138. void        addInterfaces(classes*, int, classes**);
  139.  
  140.  
  141. #endif
  142.