Home | History | Annotate | Download | only in java
      1 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
      2 /* ***** BEGIN LICENSE BLOCK *****
      3  * Version: NPL 1.1/GPL 2.0/LGPL 2.1
      4  *
      5  * The contents of this file are subject to the Netscape Public License
      6  * Version 1.1 (the "License"); you may not use this file except in
      7  * compliance with the License. You may obtain a copy of the License at
      8  * http://www.mozilla.org/NPL/
      9  *
     10  * Software distributed under the License is distributed on an "AS IS" basis,
     11  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
     12  * for the specific language governing rights and limitations under the
     13  * License.
     14  *
     15  * The Original Code is mozilla.org code.
     16  *
     17  * The Initial Developer of the Original Code is
     18  * Netscape Communications Corporation.
     19  * Portions created by the Initial Developer are Copyright (C) 1998
     20  * the Initial Developer. All Rights Reserved.
     21  *
     22  * Contributor(s):
     23  *
     24  * Alternatively, the contents of this file may be used under the terms of
     25  * either the GNU General Public License Version 2 or later (the "GPL"), or
     26  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
     27  * in which case the provisions of the GPL or the LGPL are applicable instead
     28  * of those above. If you wish to allow use of your version of this file only
     29  * under the terms of either the GPL or the LGPL, and not to allow others to
     30  * use your version of this file under the terms of the NPL, indicate your
     31  * decision by deleting the provisions above and replace them with the notice
     32  * and other provisions required by the GPL or the LGPL. If you do not delete
     33  * the provisions above, a recipient may use your version of this file under
     34  * the terms of any one of the NPL, the GPL or the LGPL.
     35  *
     36  * ***** END LICENSE BLOCK ***** */
     37 
     38 /*******************************************************************************
     39  * Java Runtime Interface -- Extension Interfaces
     40  ******************************************************************************/
     41 
     42 #ifndef JRIEXT_H
     43 #define JRIEXT_H
     44 
     45 #include "jri.h"
     46 #include "minicom.h"
     47 
     48 #ifdef __cplusplus
     49 extern "C" {
     50 #endif
     51 
     52 extern const GUID JRINativePkgID;
     53 
     54 /*******************************************************************************
     55  * Optional Embedding
     56  ******************************************************************************/
     57 
     58 /* Runtime */
     59 extern const GUID JRIRuntimePkgID;
     60 
     61 typedef struct JRIRuntimeInterface		JRIRuntimeInterface;
     62 typedef const JRIRuntimeInterface*		JRIRuntimeInstance;
     63 
     64 typedef void
     65 (JRI_CALLBACK* JRICollectionStartProc)(JRIRuntimeInstance* runtime);
     66 
     67 typedef void
     68 (JRI_CALLBACK* JRICollectionEndProc)(JRIRuntimeInstance* runtime);
     69 
     70 /* Passed in JRIRuntimeInitargs: */
     71 typedef enum JRIVerifyMode {
     72     JRIVerifyNone,
     73     JRIVerifyRemote,
     74     JRIVerifyAll
     75 } JRIVerifyMode;
     76 
     77 typedef struct JRIRuntimeInitargsStruct {
     78     /* Required arguments */
     79     short					majorVersion;
     80     short					minorVersion;
     81     jsize					initialHeapSize;
     82     jsize					maxHeapSize;
     83     JRICollectionStartProc	collectionStartProc;
     84     JRICollectionEndProc	collectionEndProc;
     85     JRIVerifyMode			verifyMode;
     86     int                     insideNavigator;
     87 } JRIRuntimeInitargs;
     88 
     89 /* JRIIOMode control bits. These can be or'd together */
     90 typedef enum JRIIOModeFlags {
     91     JRIIOMode_Unrestricted		= ~0,
     92     JRIIOMode_None				= 0,
     93     JRIIOMode_AllowStdin		= 0x01,
     94     JRIIOMode_AllowStdout		= 0x02,
     95     JRIIOMode_AllowSocket		= 0x04,
     96     JRIIOMode_AllowFileInput	= 0x08,
     97     JRIIOMode_AllowFileOutput	= 0x10
     98 } JRIIOModeFlags;
     99 
    100 typedef enum JRIFSModeFlags {
    101     JRIFSMode_Unrestricted,	/* no C level filesystem checks */
    102     JRIFSMode_None		/* no filesystem access allowed */
    103 } JRIFSModeFlags;
    104 
    105 typedef enum JRIRTModeFlags {
    106     JRIRTMode_Unrestricted,	/* no C level runtime checks */
    107     JRIRTMode_None		/* no runtime access allowed */
    108 } JRIRTModeFlags;
    109 
    110 extern JRI_PUBLIC_API(JRIRuntimeInstance*)
    111 JRI_NewRuntime(JRIRuntimeInitargs* initargs);
    112 
    113 typedef void
    114 (*JRI_DisposeRuntime_t)(JRIRuntimeInstance* runtime);
    115 
    116 /*
    117 ** Change the JRI io mode. The JRI io mode is the lowest level security
    118 ** check done by the C implementation of the native i/o methods.
    119 */
    120 typedef void
    121 (*JRI_SetIOMode_t)(JRIRuntimeInstance* runtime, JRIIOModeFlags mode);
    122 
    123 /*
    124 ** Change the JRI fs mode. The JRI fs mode is the lowest level security
    125 ** check done by the C implementation of the native filesystem methods.
    126 */
    127 typedef void
    128 (*JRI_SetFSMode_t)(JRIRuntimeInstance* runtime, JRIFSModeFlags mode);
    129 
    130 /*
    131 ** Change the JRI runtime mode. The JRI runtime mode is the lowest
    132 ** level security check done by the C implementation of the native
    133 ** runtime methods.
    134 */
    135 typedef void
    136 (*JRI_SetRTMode_t)(JRIRuntimeInstance* runtime, JRIRTModeFlags mode);
    137 
    138 /* Environments */
    139 
    140 typedef JRIEnv*
    141 (*JRI_NewEnv_t)(JRIRuntimeInstance* runtime, void* thread);
    142 
    143 typedef void
    144 (*JRI_DisposeEnv_t)(JRIEnv* env);
    145 
    146 typedef JRIRuntimeInstance*
    147 (*JRI_GetRuntime_t)(JRIEnv* env);
    148 
    149 typedef void*
    150 (*JRI_GetThread_t)(JRIEnv* env);
    151 
    152 typedef void
    153 (*JRI_SetClassLoader_t)(JRIEnv* env, jref classLoader);
    154 
    155 struct JRIRuntimeInterface {
    156     MCOM_QueryInterface_t		QueryInterface;
    157     MCOM_AddRef_t				AddRef;
    158     MCOM_Release_t				Release;
    159 	void*						reserved3;
    160 	JRI_DisposeRuntime_t		DisposeRuntime;
    161 	JRI_SetIOMode_t				SetIOMode;
    162 	JRI_SetFSMode_t				SetFSMode;
    163 	JRI_SetRTMode_t				SetRTMode;
    164 	JRI_NewEnv_t				NewEnv;
    165 	JRI_DisposeEnv_t			DisposeEnv;
    166 	JRI_GetRuntime_t			GetRuntime;
    167 	JRI_GetThread_t				GetThread;
    168 	JRI_SetClassLoader_t		SetClassLoader;
    169 };
    170 
    171 #define JRI_DisposeRuntime(runtime)		\
    172 	((*(runtime))->DisposeRuntime(runtime))
    173 
    174 /*
    175 ** Change the JRI io mode. The JRI io mode is the lowest level security
    176 ** check done by the C implementation of the native i/o methods.
    177 */
    178 #define JRI_SetIOMode(runtime, mode)		\
    179 	((*(runtime))->SetIOMode(runtime, mode))
    180 
    181 /*
    182 ** Change the JRI fs mode. The JRI fs mode is the lowest level security
    183 ** check done by the C implementation of the native filesystem methods.
    184 */
    185 #define JRI_SetFSMode(runtime, mode)		\
    186 	((*(runtime))->SetFSMode(runtime, mode))
    187 
    188 /*
    189 ** Change the JRI runtime mode. The JRI runtime mode is the lowest
    190 ** level security check done by the C implementation of the native
    191 ** runtime methods.
    192 */
    193 #define JRI_SetRTMode(runtime, mode)		\
    194 	((*(runtime))->SetRTMode(runtime, mode))
    195 
    196 /* Environments */
    197 
    198 #define JRI_NewEnv(runtime, thread)	\
    199 	((*(runtime))->NewEnv(runtime, thread))
    200 
    201 #define JRI_DisposeEnv(env)	\
    202 	((*(env))->DisposeEnv(env))
    203 
    204 #define JRI_GetRuntime(env)	\
    205 	((*(env))->GetRuntime(env))
    206 
    207 #define JRI_GetThread(env)		\
    208 	((*(env))->GetThread(env))
    209 
    210 #define JRI_SetClassLoader(env, classLoader)		\
    211 	((*(env))->SetClassLoader(env, classLoader))
    212 
    213 /*******************************************************************************
    214  * Optional Reflection
    215  ******************************************************************************/
    216 
    217 extern const GUID JRIReflectionPkgID;
    218 
    219 typedef struct JRIReflectionInterface	JRIReflectionInterface;
    220 typedef const JRIReflectionInterface*	JRIReflectionEnv;
    221 
    222 typedef enum JRIAccessFlags {
    223     /* Field and Method Access */
    224     JRIAccessPublic			= 0x0001,
    225     JRIAccessPrivate		= 0x0002,
    226     JRIAccessProtected		= 0x0004,
    227     JRIAccessStatic			= 0x0008,
    228     JRIAccessFinal			= 0x0010,
    229     JRIAccessSynchronized	= 0x0020,
    230     JRIAccessNative			= 0x0100,
    231     /* Class Access */
    232     JRIAccessInterface		= 0x0200,
    233     JRIAccessAbstract		= 0x0400
    234 } JRIAccessFlags;
    235 
    236 typedef jsize
    237 (*JRI_GetClassCount_t)(JRIReflectionEnv* env);
    238 
    239 typedef jref
    240 (*JRI_GetClass_t)(JRIReflectionEnv* env, jsize index);
    241 
    242 typedef const char*
    243 (*JRI_GetClassName_t)(JRIReflectionEnv* env, struct java_lang_Class* clazz);
    244 
    245 typedef jbool
    246 (*JRI_VerifyClass_t)(JRIReflectionEnv* env, struct java_lang_Class* clazz);
    247 
    248 typedef jref
    249 (*JRI_GetClassSuperclass_t)(JRIReflectionEnv* env, struct java_lang_Class* clazz);
    250 
    251 /* These next two routines can be used to iterate through all the
    252    interfaces of a class: */
    253 
    254 typedef jsize
    255 (*JRI_GetClassInterfaceCount_t)(JRIReflectionEnv* env, struct java_lang_Class* clazz);
    256 
    257 typedef jref
    258 (*JRI_GetClassInterface_t)(JRIReflectionEnv* env, struct java_lang_Class* clazz, jsize index);
    259 
    260 /* These next two routines can be used to iterate through all the
    261    fields of a class, getting info about them: */
    262 
    263 typedef jsize
    264 (*JRI_GetClassFieldCount_t)(JRIReflectionEnv* env, struct java_lang_Class* clazz);
    265 
    266 typedef void
    267 (*JRI_GetClassFieldInfo_t)(JRIReflectionEnv* env, struct java_lang_Class* clazz,
    268 						   jsize fieldIndex, char* *fieldName, char* *fieldSig,
    269 						   JRIAccessFlags *fieldAccess, jref *fieldClass);
    270 
    271 /* These next two routines can be used to iterate through all the
    272    methods of a class, getting info about them: */
    273 
    274 typedef jsize
    275 (*JRI_GetClassMethodCount_t)(JRIReflectionEnv* env, struct java_lang_Class* clazz);
    276 
    277 typedef void
    278 (*JRI_GetClassMethodInfo_t)(JRIReflectionEnv* env, struct java_lang_Class* clazz,
    279 							jsize methodIndex, char* *methodName, char* *methodSig,
    280 							JRIAccessFlags *methodAccess,
    281 							jref *methodClass, void* *methodNativeProc);
    282 
    283 typedef JRIAccessFlags
    284 (*JRI_GetClassAccessFlags_t)(JRIReflectionEnv* env, struct java_lang_Class* clazz);
    285 
    286 /******************************************************************************/
    287 
    288 struct JRIReflectionInterface {
    289     MCOM_QueryInterface_t				QueryInterface;
    290     MCOM_AddRef_t						AddRef;
    291     MCOM_Release_t						Release;
    292 	void*								reserved3;
    293 	JRI_GetClassCount_t					GetClassCount;
    294 	JRI_GetClass_t						GetClass;
    295 	JRI_GetClassName_t					GetClassName;
    296 	JRI_VerifyClass_t					VerifyClass;
    297 	JRI_GetClassSuperclass_t			GetClassSuperclass;
    298 	JRI_GetClassInterfaceCount_t		GetClassInterfaceCount;
    299 	JRI_GetClassInterface_t				GetClassInterface;
    300 	JRI_GetClassFieldCount_t			GetClassFieldCount;
    301 	JRI_GetClassFieldInfo_t				GetClassFieldInfo;
    302 	JRI_GetClassMethodCount_t			GetClassMethodCount;
    303 	JRI_GetClassMethodInfo_t			GetClassMethodInfo;
    304 	JRI_GetClassAccessFlags_t			GetClassAccessFlags;
    305 };
    306 
    307 #define JRI_GetClassCount(env)	\
    308 	((*(env))->GetClassCount(env))
    309 
    310 #define JRI_GetClass(env, index)	\
    311 	((*(env))->GetClass(env, index))
    312 
    313 #define JRI_GetClassName(env, clazz)		\
    314 	((*(env))->GetClassName(env, clazz))
    315 
    316 #define JRI_VerifyClass(env, clazz)		\
    317 	((*(env))->VerifyClass(env, clazz))
    318 
    319 #define JRI_GetClassSuperclass(env, clazz)		\
    320 	((*(env))->GetClassSuperclass(env, clazz))
    321 
    322 /* These next two routines can be used to iterate through all the
    323    interfaces of a class: */
    324 
    325 #define JRI_GetClassInterfaceCount(env, clazz)	\
    326 	((*(env))->GetClassInterfaceCount(env, clazz))
    327 
    328 #define JRI_GetClassInterface(env, clazz, index)	\
    329 	((*(env))->GetClassInterface(env, clazz, index))
    330 
    331 /* These next two routines can be used to iterate through all the
    332    fields of a class, getting info about them: */
    333 
    334 #define JRI_GetClassFieldCount(env, clazz)		\
    335 	((*(env))->GetClassFieldCount(env, clazz))
    336 
    337 #define JRI_GetClassFieldInfo(env, clazz, fieldIndex, fieldName, fieldSig, fieldAccess, fieldClass)	\
    338 	((*(env))->GetClassFieldInfo(env, clazz, fieldIndex, fieldName, fieldSig, fieldAccess, fieldClass))
    339 
    340 /* These next two routines can be used to iterate through all the
    341    methods of a class, getting info about them: */
    342 
    343 #define JRI_GetClassMethodCount(env, clazz)		\
    344 	((*(env))->GetClassMethodCount(env, clazz))
    345 
    346 #define JRI_GetClassMethodInfo(env, clazz, methodIndex, methodName, methodSig, methodAccess, methodClass, methodNativeProc)		\
    347 	((*(env))->GetClassMethodInfo(env, clazz, methodIndex, methodName, methodSig, methodAccess, methodClass, methodNativeProc))
    348 
    349 #define JRI_GetClassAccessFlags(env, clazz)		\
    350 	((*(env))->GetClassAccessFlags(env, clazz))
    351 
    352 /*******************************************************************************
    353  * Optional Debugger
    354  ******************************************************************************/
    355 
    356 extern const GUID JRIDebuggerPkgID;
    357 
    358 typedef struct JRIDebuggerInterface	JRIDebuggerInterface;
    359 typedef const JRIDebuggerInterface*	JRIDebuggerEnv;
    360 
    361 /* Manipulating Stacks */
    362 
    363 typedef jsize
    364 (*JRI_GetFrameCount_t)(JRIDebuggerEnv* env);
    365 
    366 typedef jbool
    367 (*JRI_GetFrameInfo_t)(JRIDebuggerEnv* env, jsize frameIndex,
    368 				  jref *methodClass, jsize *methodIndex,
    369 				  jsize *pc, jsize *varsCount);
    370 
    371 typedef void
    372 (*JRI_GetVarInfo_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex,
    373 					char* *name, char* *signature,
    374 					jbool *isArgument, jsize *startScope, jsize *endScope);
    375 
    376 #define JRIVarNotInScope	((JRIFieldID)-1)
    377 
    378 typedef void
    379 (*JRI_GetSourceInfo_t)(JRIDebuggerEnv* env, jsize frameIndex,
    380 				   const char* *filename, jsize *lineNumber);
    381 
    382 /******************************************************************************/
    383 
    384 typedef jref
    385 (*JRI_GetVar_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex);
    386 
    387 typedef jbool
    388 (*JRI_GetVar_boolean_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex);
    389 
    390 typedef jbyte
    391 (*JRI_GetVar_byte_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex);
    392 
    393 typedef jchar
    394 (*JRI_GetVar_char_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex);
    395 
    396 typedef jshort
    397 (*JRI_GetVar_short_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex);
    398 
    399 typedef jint
    400 (*JRI_GetVar_int_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex);
    401 
    402 typedef jlong
    403 (*JRI_GetVar_long_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex);
    404 
    405 typedef jfloat
    406 (*JRI_GetVar_float_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex);
    407 
    408 typedef jdouble
    409 (*JRI_GetVar_double_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex);
    410 
    411 /******************************************************************************/
    412 
    413 typedef void
    414 (*JRI_SetVar_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex, jref value);
    415 
    416 typedef void
    417 (*JRI_SetVar_boolean_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex, jbool value);
    418 
    419 typedef void
    420 (*JRI_SetVar_byte_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex, jbyte value);
    421 
    422 typedef void
    423 (*JRI_SetVar_char_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex, jchar value);
    424 
    425 typedef void
    426 (*JRI_SetVar_short_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex, jshort value);
    427 
    428 typedef void
    429 (*JRI_SetVar_int_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex, jint value);
    430 
    431 typedef void
    432 (*JRI_SetVar_long_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex, jlong value);
    433 
    434 typedef void
    435 (*JRI_SetVar_float_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex, jfloat value);
    436 
    437 typedef void
    438 (*JRI_SetVar_double_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex, jdouble value);
    439 
    440 /******************************************************************************/
    441 
    442 /* Controlling Execution */
    443 
    444 typedef void
    445 (*JRI_StepOver_t)(JRIDebuggerEnv* env);
    446 
    447 typedef void
    448 (*JRI_StepIn_t)(JRIDebuggerEnv* env);
    449 
    450 typedef void
    451 (*JRI_StepOut_t)(JRIDebuggerEnv* env);
    452 
    453 typedef void
    454 (*JRI_Continue_t)(JRIDebuggerEnv* env);
    455 
    456 typedef void
    457 (*JRI_Return_t)(JRIDebuggerEnv* env, jsize frameIndex, JRIValue value);
    458 
    459 /******************************************************************************/
    460 
    461 struct JRIDebuggerInterface {
    462     MCOM_QueryInterface_t		QueryInterface;
    463     MCOM_AddRef_t				AddRef;
    464     MCOM_Release_t				Release;
    465 	void*						reserved3;
    466 	JRI_GetFrameCount_t			GetFrameCount;
    467 	JRI_GetFrameInfo_t			GetFrameInfo;
    468 	JRI_GetVarInfo_t			GetVarInfo;
    469 	JRI_GetSourceInfo_t			GetSourceInfo;
    470 	JRI_GetVar_t				GetVar;
    471 	JRI_GetVar_boolean_t		GetVar_boolean;
    472 	JRI_GetVar_byte_t			GetVar_byte;
    473 	JRI_GetVar_char_t			GetVar_char;
    474 	JRI_GetVar_short_t			GetVar_short;
    475 	JRI_GetVar_int_t			GetVar_int;
    476 	JRI_GetVar_long_t			GetVar_long;
    477 	JRI_GetVar_float_t			GetVar_float;
    478 	JRI_GetVar_double_t			GetVar_double;
    479 	JRI_SetVar_t				SetVar;
    480 	JRI_SetVar_boolean_t		SetVar_boolean;
    481 	JRI_SetVar_byte_t			SetVar_byte;
    482 	JRI_SetVar_char_t			SetVar_char;
    483 	JRI_SetVar_short_t			SetVar_short;
    484 	JRI_SetVar_int_t			SetVar_int;
    485 	JRI_SetVar_long_t			SetVar_long;
    486 	JRI_SetVar_float_t			SetVar_float;
    487 	JRI_SetVar_double_t			SetVar_double;
    488 	JRI_StepOver_t				StepOver;
    489 	JRI_StepIn_t				StepIn;
    490 	JRI_StepOut_t				StepOut;
    491 	JRI_Continue_t				Continue;
    492 	JRI_Return_t				Return;
    493 };
    494 
    495 
    496 #define JRI_GetFrameCount(env)	\
    497 	((*(env))->GetFrameCount(env))
    498 
    499 #define JRI_GetFrameInfo(env, frameIndex, methodClass, methodIndex, pc, varsCount)	\
    500 	((*(env))->GetFrameInfo(env, frameIndex, methodClass, methodIndex, pc, varsCount))
    501 
    502 #define JRI_GetVarInfo(env, frameIndex, varIndex, name, signature, pos, isArgument, startScope, endScope)		\
    503 	((*(env))->GetVarInfo(env, frameIndex, varIndex, name, signature, pos, isArgument, startScope, endScope))
    504 
    505 #define JRI_GetSourceInfo(env, frameIndex, filename, lineNumber)	\
    506 	((*(env))->GetSourceInfo(env, frameIndex, filename, lineNumber))
    507 
    508 /******************************************************************************/
    509 
    510 #define JRI_GetVar(env, frameIndex, varIndex)		\
    511 	((*(env))->GetVar(env, frameIndex, varIndex))
    512 
    513 #define JRI_GetVar_boolean(env, frameIndex, varIndex)		\
    514 	((*(env))->GetVar_boolean(env, frameIndex, varIndex))
    515 
    516 #define JRI_GetVar_byte(env, frameIndex, varIndex)	\
    517 	((*(env))->GetVar_byte(env, frameIndex, varIndex))
    518 
    519 #define JRI_GetVar_char(env, frameIndex, varIndex)	\
    520 	((*(env))->GetVar_char(env, frameIndex, varIndex))
    521 
    522 #define JRI_GetVar_short(env, frameIndex, varIndex)		\
    523 	((*(env))->GetVar_short(env, frameIndex, varIndex))
    524 
    525 #define JRI_GetVar_int(env, frameIndex, varIndex)	\
    526 	((*(env))->GetVar_int(env, frameIndex, varIndex))
    527 
    528 #define JRI_GetVar_long(env, frameIndex, varIndex)	\
    529 	((*(env))->GetVar_long(env, frameIndex, varIndex))
    530 
    531 #define JRI_GetVar_float(env, frameIndex, varIndex)		\
    532 	((*(env))->GetVar_float(env, frameIndex, varIndex))
    533 
    534 #define JRI_GetVar_double(env, frameIndex, varIndex)		\
    535 	((*(env))->GetVar_double(env, frameIndex, varIndex))
    536 
    537 /******************************************************************************/
    538 
    539 #define JRI_SetVar(env, frameIndex, varIndex, value)	\
    540 	((*(env))->SetVar(env, frameIndex, varIndex, value))
    541 
    542 #define JRI_SetVar_boolean(env, frameIndex, varIndex, value)	\
    543 	((*(env))->SetVar_boolean(env, frameIndex, varIndex, value))
    544 
    545 #define JRI_SetVar_byte(env, frameIndex, varIndex, value)	\
    546 	((*(env))->SetVar_byte(env, frameIndex, varIndex, value))
    547 
    548 #define JRI_SetVar_char(env, frameIndex, varIndex, value)	\
    549 	((*(env))->SetVar_char(env, frameIndex, varIndex, value))
    550 
    551 #define JRI_SetVar_short(env, frameIndex, varIndex, value)	\
    552 	((*(env))->SetVar_short(env, frameIndex, varIndex, value))
    553 
    554 #define JRI_SetVar_int(env, frameIndex, varIndex, value)		\
    555 	((*(env))->SetVar_int(env, frameIndex, varIndex, value))
    556 
    557 #define JRI_SetVar_long(env, frameIndex, varIndex, value)	\
    558 	((*(env))->SetVar_long(env, frameIndex, varIndex, value))
    559 
    560 #define JRI_SetVar_float(env, frameIndex, varIndex, value)	\
    561 	((*(env))->SetVar_float(env, frameIndex, varIndex, value))
    562 
    563 #define JRI_SetVar_double(env, frameIndex, varIndex, value)		\
    564 	((*(env))->SetVar_double(env, frameIndex, varIndex, value))
    565 
    566 /******************************************************************************/
    567 
    568 /* Controlling Execution */
    569 
    570 #define JRI_StepOver(env)		\
    571 	((*(env))->StepOver(env))
    572 
    573 #define JRI_StepIn(env)		\
    574 	((*(env))->StepIn(env))
    575 
    576 #define JRI_StepOut(env)		\
    577 	((*(env))->StepOut(env))
    578 
    579 #define JRI_Continue(env)		\
    580 	((*(env))->Continue(env))
    581 
    582 #define JRI_Return(env, frameIndex, value)		\
    583 	((*(env))->Return(env, frameIndex, value))
    584 
    585 /*******************************************************************************
    586  * Optional Compiling
    587  ******************************************************************************/
    588 
    589 extern const GUID JRICompilerPkgID;
    590 
    591 typedef struct JRICompilerInterface	JRICompilerInterface;
    592 typedef const JRICompilerInterface*	JRICompilerEnv;
    593 
    594 typedef void
    595 (*JRI_CompileClass_t)(JRICompilerEnv* env,
    596 					  const char* classSrc, jsize classSrcLen,
    597 					  jbyte* *resultingClassData, jsize *classDataLen);
    598 
    599 struct JRICompilerInterface {
    600     MCOM_QueryInterface_t	QueryInterface;
    601     MCOM_AddRef_t			AddRef;
    602     MCOM_Release_t			Release;
    603 	void*					reserved3;
    604 	JRI_CompileClass_t		CompileClass;
    605 };
    606 
    607 #define JRI_CompileClass(env, classSrc, classSrcLen, resultingClassData, classDataLen)		\
    608 	((*(env))->CompileClass(env, classSrc, classSrcLen, resultingClassData, classDataLen))
    609 
    610 /*******************************************************************************
    611  * Optional Expression Evaluation
    612  ******************************************************************************/
    613 
    614 extern const GUID JRIExprPkgID;
    615 
    616 typedef struct JRIExprInterface	JRIExprInterface;
    617 typedef const JRIExprInterface*	JRIExprEnv;
    618 
    619 typedef jref
    620 (*JRI_CompileExpr_t)(JRIExprEnv* env,
    621 					 const char* exprSrc, jsize exprSrcLen);
    622 
    623 typedef jref
    624 (*JRI_EvalExpr_t)(JRIExprEnv* env, jref expr);
    625 
    626 struct JRIExprInterface {
    627     MCOM_QueryInterface_t	QueryInterface;
    628     MCOM_AddRef_t			AddRef;
    629     MCOM_Release_t			Release;
    630 	void*					reserved3;
    631 	JRI_CompileExpr_t		CompileExpr;
    632 	JRI_EvalExpr_t			EvalExpr;
    633 };
    634 
    635 #define JRI_CompileExpr(env, exprSrc, exprSrcLen)		\
    636 	((*(env))->CompileExpr(env, exprSrc, exprSrcLen))
    637 
    638 #define JRI_EvalExpr(env, expr)		\
    639 	((*(env))->EvalExpr(env, expr))
    640 
    641 /******************************************************************************/
    642 #ifdef __cplusplus
    643 }
    644 #endif
    645 #endif /* JRIEXT_H */
    646 /******************************************************************************/
    647