• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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