/*! @header PJS_Runtime.h @abstract Types and functions related to runtime handling */ #ifndef __PJS_RUNTIME_H__ #define __PJS_RUNTIME_H__ #ifdef __cplusplus extern "C" { #endif #include "EXTERN.h" #include "perl.h" #include "JavaScript_Env.h" #include "PJS_Types.h" #include "PJS_Common.h" struct PJS_TrapHandler { JSTrapHandler handler; void *data; /* Private field, don't mess with it */ struct PJS_TrapHandler *_next; }; /*! @struct PJS_Runtime @abstract A structure that encapsulates a JSRuntime and supporting information. @field rt Pointer to the JSRuntime for this runtime. @field list Pointer to a linked list of PJS_Context that are defined in this runtime. @field trap_handlers Pointer to a linked list of PJS_TrapHandler structures that are defined for this runtime. */ struct PJS_Runtime { JSRuntime *rt; struct PJS_Context *list; struct PJS_TrapHandler *trap_handlers; }; /*! @function PJS_CreateRuntime @abstract Creates and initializes a new runtime. @param maxbytes The maximum number of bytes that this runtime may use before throwing an error. @result A pointer to an PJS_Runtime. */ PJS_EXTERN PJS_Runtime * PJS_CreateRuntime(int maxbytes); /*! @function PJS_DestroyRuntime @abstract Frees the runtime and any memory allocated by it. @param runtime The runtime to free. */ PJS_EXTERN void PJS_DestroyRuntime(PJS_Runtime *runtime); /*! @function PJS_AddTrapHandler @abstract Registers a traphandler in the runtime. @param inRuntime The runtime to install a trap hander in. @param trapHandler The trap handler to install */ PJS_EXTERN void PJS_AddTrapHandler(PJS_Runtime *inRuntime, PJS_TrapHandler *trapHandler); /*! @function PJS_RemoteTrapHandler @abstract Removes a traphandler from the runtime. @param fromRuntime The runtime to remove the handler from. @param trapHandler The trap handler to remove. */ PJS_EXTERN void PJS_RemoveTrapHandler(PJS_Runtime *fromRuntime, PJS_TrapHandler *trapHandler); PJS_EXTERN JSTrapStatus PJS_trap_handler(JSContext *, JSScript *, jsbytecode *, jsval *, void *); PJS_EXTERN JSTrapStatus PJS_perl_trap_handler(JSContext *, JSScript *, jsbytecode *, jsval *, void *); #ifdef __cplusplus } #endif #endif