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

  1. /*
  2.  * native.h
  3.  * Native method support.
  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 __native_h
  15. #define __native_h
  16.  
  17. /* #define    GC_INCREMENTAL /**/
  18.  
  19. #include <jtypes.h>
  20.  
  21. /*
  22.  * Some systems need specific exports for funcions to be shared.
  23.  */
  24. #if defined(__WIN32__)
  25. #define    EXPORT(t)    t __export
  26. #define    IMPORT(t)    extern t __import
  27. #else
  28. #define    EXPORT(t)    t
  29. #define    IMPORT(t)    extern t
  30. #endif
  31.  
  32. struct _methods;
  33. struct _classes;
  34. struct _thread;
  35.  
  36. /* From locks.h */
  37. #if !defined(__locks_h)
  38. #define    __locks_h
  39. typedef struct _iMux {
  40.     struct _thread*        holder;
  41.     int            count;
  42.     struct _thread*        muxWaiters;
  43. } iMux;
  44. typedef struct _iCv {
  45.     struct _thread*        cvWaiters; 
  46.     struct _iMux*        mux;
  47. } iCv;
  48. #endif
  49.  
  50. /* From gc.h */
  51. #if !defined(__gc_h)
  52. #define    __gc_h
  53.  
  54. #if defined(GC_INCREMENTAL)
  55. typedef struct _gcHead {
  56.     int            colour;
  57.     int            size;
  58.     struct _gcHead*        nextGrey;
  59.     struct _gcHead*        nextRoot;
  60. } gcHead;
  61. #else
  62. typedef struct _gcHead {
  63.     int            idx;
  64. } gcHead;
  65. #endif
  66.  
  67. #endif
  68.  
  69. /* From object.h */
  70. #define    __object_h
  71. typedef struct _object {
  72.     gcHead            gc;
  73.     struct _dispatchTable*    dtable;
  74.     unsigned int        size;
  75.     iMux            mux;
  76.     iCv            cv;
  77. } object;
  78.  
  79. /* From baseClasses.h */
  80. typedef struct _stringClass {
  81.     object        head;
  82.     object*        value;
  83.     int        offset;
  84.     int        count;
  85. } stringClass;
  86.  
  87. /* Build an object handle */
  88. #define    HandleTo(class)                    \
  89.     struct H##class {                \
  90.         object base;                \
  91.         struct Class##class data[1];        \
  92.     }
  93.  
  94. /* Turn a handle into the real thing */
  95. #define    unhand(o)    ((o)->data)
  96.  
  97. /* Some internal machine object conversions to "standard" types. */
  98. #define    Hjava_lang_Object    _object
  99. #define    Hjava_lang_String    _stringClass
  100. #define    Hjava_lang_Class    _classes
  101.  
  102. /* Array types */
  103. typedef struct { object base; struct { jbyte body[1]; } data[1]; } HArrayOfByte;
  104. typedef struct { object base; struct { jchar body[1]; } data[1]; } HArrayOfChar;
  105. typedef struct { object base; struct { jdouble body[1]; } data[1]; } HArrayOfDouble;
  106. typedef struct { object base; struct { jfloat body[1]; } data[1]; } HArrayOfFloat;
  107. typedef struct { object base; struct { jint body[1]; } data[1]; } HArrayOfInt;
  108. typedef struct { object base; struct { jshort body[1]; } data[1]; } HArrayOfShort;
  109. typedef struct { object base; struct { jlong body[1]; } data[1]; } HArrayOfLong;
  110. typedef struct { object base; struct { object* body[1]; } data[1]; } HArrayOfArray;
  111. typedef struct { object base; struct { object* body[1]; } data[1]; } HArrayOfObject;
  112.  
  113. /* Get length of arrays */
  114. #define    obj_length(_obj)    ((_obj)->base.size)
  115.  
  116. /* Various useful function prototypes */
  117. extern char* javaString2CString(struct Hjava_lang_String*, char*, int);
  118. extern struct Hjava_lang_String* makeJavaString(char*, int);
  119.  
  120. extern long    do_execute_java_method(void*, object*, char*, char*, struct _methods*, int, ...);
  121. extern long    do_execute_java_class_method(char*, char*, char*, ...);
  122. extern object* execute_java_constructor(void*, char*, struct _classes*, char*, ...);
  123.  
  124. extern void    SignalError(void*, char*, char*);
  125.  
  126. extern void    classname2pathname(char*, char*);
  127.  
  128. extern object* AllocObject(char*);
  129. extern object* AllocArray(int, int);
  130. extern object* AllocObjectArray(int, char*);
  131.  
  132. #endif
  133.