/*!
@header PJS_Context.h
@abstract Types and functions related to context handling
*/
#ifndef __PJS_CONTEXT_H__
#define __PJS_CONTEXT_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_Context
@abstract
*/
struct PJS_Context {
/* The JavaScript context which this instance belongs to */
JSContext *cx;
/* Pointer to the first callback item that is registered */
HV *function_by_name;
/* Pointer to the first bound class */
HV *class_by_name;
HV *class_by_package;
PJS_Context *next; /* Pointer to the next created context */
PJS_Runtime *rt;
/* Set to a SVt_PVCV if we have an branch handler */
SV *branch_handler;
/* Flags */
U32 flags;
};
/*! @function PJS_DestroyContext
@abstract Frees a PJS_Context and the underlying JSContext
@param context The context to free
*/
PJS_EXTERN void
PJS_DestroyContext(PJS_Context *context);
/*! @function PJS_DefineFunction
@abstract Binds a Perl function to JavaScript
@param inContext The context to add the function to
@param functionName The name that the function will be callable as from JavaScript.
@param functionRef A SVt_PVCV that we call when the function is called.
@result A pointer to a PJS_Function that represents the function if binding was successful or NULL if otherwise.
*/
PJS_EXTERN PJS_Function *
PJS_DefineFunction(PJS_Context *inContext, const char *functionName, SV *functionRef);
/*! @function PJS_CreateContext
@abstract Creates a new context
@discussion This function creates a new context in the given runtime and sets
up initial classes and global object.
@param runtime Runtime that'll execute the context.
@result A pointer to a PJS_Context structure if successfull.
*/
PJS_EXTERN PJS_Context *
PJS_CreateContext(PJS_Runtime *runtime);
PJS_EXTERN JSBool
PJS_branch_handler(JSContext *, JSScript *);
/*! @functiongroup Querying contexts */
/*! @function PJS_GetFunctionByName
@abstract Retrieves a function by name from a given context
@param fromContext Context to retrieve the function from
@param functionName Name of the function
@result A pointer to a PJS_Function structure if the function was found
or NULL if the function did not exist.
*/
PJS_EXTERN PJS_Function *
PJS_GetFunctionByName(PJS_Context *fromContext, const char *functionName);
/*! @function PJS_GetJSContext
@abstract Retrieve the JSContext from a PJS_Context
@param fromContext The context to search in
@result A pointer to the underlying JSContext
*/
#define PJS_GetJSContext(fromContext) (fromContext->cx)
/*PJS_EXTERN JSContext *
PJS_GetJSContext(PJS_Context *fromContext);*/
/*! @function PJS_GetClassByName
@abstract Retrieve a bound class from a context
@param fromContext The Context to search in
@param className The name exposed to JavaScript
@result a pointer to a PJS_Class if it exists, NULL otherwise
*/
PJS_EXTERN PJS_Class *
PJS_GetClassByName(PJS_Context *fromContext, const char *className);
/*! @function PJS_GetClassByPackage
@abstract Retrieve a bound class from a context
@param fromContext The Context to search in
@param className The package name used in Perl to represent the class
@result a pointer to a PJS_Class if it exists, NULL otherwise
*/
PJS_EXTERN PJS_Class *
PJS_GetClassByPackage(PJS_Context *fromContext, const char *packageName);
#ifdef _cplusplus
}
#endif
#endif