home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-bin / include / kaffe / native.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-10-14  |  3.3 KB  |  132 lines

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