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