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
49extern "C" {
50#endif
51
52extern const GUID JRINativePkgID;
53
54/*******************************************************************************
55 * Optional Embedding
56 ******************************************************************************/
57
58/* Runtime */
59extern const GUID JRIRuntimePkgID;
60
61typedef struct JRIRuntimeInterface		JRIRuntimeInterface;
62typedef const JRIRuntimeInterface*		JRIRuntimeInstance;
63
64typedef void
65(JRI_CALLBACK* JRICollectionStartProc)(JRIRuntimeInstance* runtime);
66
67typedef void
68(JRI_CALLBACK* JRICollectionEndProc)(JRIRuntimeInstance* runtime);
69
70/* Passed in JRIRuntimeInitargs: */
71typedef enum JRIVerifyMode {
72    JRIVerifyNone,
73    JRIVerifyRemote,
74    JRIVerifyAll
75} JRIVerifyMode;
76
77typedef 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 */
90typedef 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
100typedef enum JRIFSModeFlags {
101    JRIFSMode_Unrestricted,	/* no C level filesystem checks */
102    JRIFSMode_None		/* no filesystem access allowed */
103} JRIFSModeFlags;
104
105typedef enum JRIRTModeFlags {
106    JRIRTMode_Unrestricted,	/* no C level runtime checks */
107    JRIRTMode_None		/* no runtime access allowed */
108} JRIRTModeFlags;
109
110extern JRI_PUBLIC_API(JRIRuntimeInstance*)
111JRI_NewRuntime(JRIRuntimeInitargs* initargs);
112
113typedef 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*/
120typedef 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*/
127typedef 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*/
135typedef void
136(*JRI_SetRTMode_t)(JRIRuntimeInstance* runtime, JRIRTModeFlags mode);
137
138/* Environments */
139
140typedef JRIEnv*
141(*JRI_NewEnv_t)(JRIRuntimeInstance* runtime, void* thread);
142
143typedef void
144(*JRI_DisposeEnv_t)(JRIEnv* env);
145
146typedef JRIRuntimeInstance*
147(*JRI_GetRuntime_t)(JRIEnv* env);
148
149typedef void*
150(*JRI_GetThread_t)(JRIEnv* env);
151
152typedef void
153(*JRI_SetClassLoader_t)(JRIEnv* env, jref classLoader);
154
155struct 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
217extern const GUID JRIReflectionPkgID;
218
219typedef struct JRIReflectionInterface	JRIReflectionInterface;
220typedef const JRIReflectionInterface*	JRIReflectionEnv;
221
222typedef 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
236typedef jsize
237(*JRI_GetClassCount_t)(JRIReflectionEnv* env);
238
239typedef jref
240(*JRI_GetClass_t)(JRIReflectionEnv* env, jsize index);
241
242typedef const char*
243(*JRI_GetClassName_t)(JRIReflectionEnv* env, struct java_lang_Class* clazz);
244
245typedef jbool
246(*JRI_VerifyClass_t)(JRIReflectionEnv* env, struct java_lang_Class* clazz);
247
248typedef 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
254typedef jsize
255(*JRI_GetClassInterfaceCount_t)(JRIReflectionEnv* env, struct java_lang_Class* clazz);
256
257typedef 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
263typedef jsize
264(*JRI_GetClassFieldCount_t)(JRIReflectionEnv* env, struct java_lang_Class* clazz);
265
266typedef 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
274typedef jsize
275(*JRI_GetClassMethodCount_t)(JRIReflectionEnv* env, struct java_lang_Class* clazz);
276
277typedef 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
283typedef JRIAccessFlags
284(*JRI_GetClassAccessFlags_t)(JRIReflectionEnv* env, struct java_lang_Class* clazz);
285
286/******************************************************************************/
287
288struct 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
356extern const GUID JRIDebuggerPkgID;
357
358typedef struct JRIDebuggerInterface	JRIDebuggerInterface;
359typedef const JRIDebuggerInterface*	JRIDebuggerEnv;
360
361/* Manipulating Stacks */
362
363typedef jsize
364(*JRI_GetFrameCount_t)(JRIDebuggerEnv* env);
365
366typedef jbool
367(*JRI_GetFrameInfo_t)(JRIDebuggerEnv* env, jsize frameIndex,
368				  jref *methodClass, jsize *methodIndex,
369				  jsize *pc, jsize *varsCount);
370
371typedef 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
378typedef void
379(*JRI_GetSourceInfo_t)(JRIDebuggerEnv* env, jsize frameIndex,
380				   const char* *filename, jsize *lineNumber);
381
382/******************************************************************************/
383
384typedef jref
385(*JRI_GetVar_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex);
386
387typedef jbool
388(*JRI_GetVar_boolean_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex);
389
390typedef jbyte
391(*JRI_GetVar_byte_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex);
392
393typedef jchar
394(*JRI_GetVar_char_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex);
395
396typedef jshort
397(*JRI_GetVar_short_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex);
398
399typedef jint
400(*JRI_GetVar_int_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex);
401
402typedef jlong
403(*JRI_GetVar_long_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex);
404
405typedef jfloat
406(*JRI_GetVar_float_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex);
407
408typedef jdouble
409(*JRI_GetVar_double_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex);
410
411/******************************************************************************/
412
413typedef void
414(*JRI_SetVar_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex, jref value);
415
416typedef void
417(*JRI_SetVar_boolean_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex, jbool value);
418
419typedef void
420(*JRI_SetVar_byte_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex, jbyte value);
421
422typedef void
423(*JRI_SetVar_char_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex, jchar value);
424
425typedef void
426(*JRI_SetVar_short_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex, jshort value);
427
428typedef void
429(*JRI_SetVar_int_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex, jint value);
430
431typedef void
432(*JRI_SetVar_long_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex, jlong value);
433
434typedef void
435(*JRI_SetVar_float_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex, jfloat value);
436
437typedef void
438(*JRI_SetVar_double_t)(JRIDebuggerEnv* env, jsize frameIndex, jsize varIndex, jdouble value);
439
440/******************************************************************************/
441
442/* Controlling Execution */
443
444typedef void
445(*JRI_StepOver_t)(JRIDebuggerEnv* env);
446
447typedef void
448(*JRI_StepIn_t)(JRIDebuggerEnv* env);
449
450typedef void
451(*JRI_StepOut_t)(JRIDebuggerEnv* env);
452
453typedef void
454(*JRI_Continue_t)(JRIDebuggerEnv* env);
455
456typedef void
457(*JRI_Return_t)(JRIDebuggerEnv* env, jsize frameIndex, JRIValue value);
458
459/******************************************************************************/
460
461struct 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
589extern const GUID JRICompilerPkgID;
590
591typedef struct JRICompilerInterface	JRICompilerInterface;
592typedef const JRICompilerInterface*	JRICompilerEnv;
593
594typedef void
595(*JRI_CompileClass_t)(JRICompilerEnv* env,
596					  const char* classSrc, jsize classSrcLen,
597					  jbyte* *resultingClassData, jsize *classDataLen);
598
599struct 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
614extern const GUID JRIExprPkgID;
615
616typedef struct JRIExprInterface	JRIExprInterface;
617typedef const JRIExprInterface*	JRIExprEnv;
618
619typedef jref
620(*JRI_CompileExpr_t)(JRIExprEnv* env,
621					 const char* exprSrc, jsize exprSrcLen);
622
623typedef jref
624(*JRI_EvalExpr_t)(JRIExprEnv* env, jref expr);
625
626struct 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