Extension Libraries Subsystem
// typedefs typedef void jnc_ExtensionLib_AddSourcesFunc(jnc_Module *module); typedef void jnc_ExtensionLib_AddOpaqueClassTypeInfosFunc(jnc_Module *module); typedef bool_t jnc_ExtensionLib_MapAddressesFunc(jnc_Module *module); typedef void jnc_ExtensionLib_UpdateCapabilitiesFunc(); typedef jnc_ExtensionLib* jnc_DynamicExtensionLibMainFunc(jnc_DynamicExtensionLibHost *host); typedef bool_t jnc_DynamicExtensionLibUnloadFunc(); typedef size_t jnc_StdLib_StdInputFunc( void *p, size_t size ); typedef size_t jnc_StdLib_StdOutputFunc( const void *p, size_t size ); // structs struct jnc_DynamicExtensionLibHost; struct jnc_ExtensionLib; // global variables JNC_SELECT_ANY char jnc_g_dynamicExtensionLibMainFuncName[] = "jncDynamicExtensionLibMain"; JNC_SELECT_ANY char jnc_g_dynamicExtensionLibUnloadFuncName[] = "jncDynamicExtensionLibUnload"; // global functions jnc_ExtensionLib* jnc_CoreLib_getLib(); jnc_ExtensionLib* jnc_IntrospectionLib_getLib(); jnc_ExtensionLib* jnc_StdLib_getLib(); jnc_ExtensionLib* jnc_SysLib_getLib(); void jnc_StdLib_setStdIo( jnc_StdLib_StdInputFunc* getsFunc, jnc_StdLib_StdOutputFunc* printOutFunc, jnc_StdLib_StdOutputFunc* printErrFunc ); // macros #define JNC_BEGIN_CLASS_TYPE_VTABLE(TypePrefix) #define JNC_BEGIN_LIB_FUNCTION_MAP(LibPrefix) #define JNC_BEGIN_LIB_OPAQUE_CLASS_TYPE_TABLE(LibPrefix) #define JNC_BEGIN_LIB_SOURCE_FILE_TABLE(LibPrefix) #define JNC_BEGIN_OPAQUE_CLASS_REQUIRE_TABLE(TypePrefix) #define JNC_BEGIN_TYPE_FUNCTION_MAP(TypePrefix) #define JNC_CLASS_TYPE_VTABLE_ENTRY(function) #define JNC_DECLARE_CLASS_TYPE(TypePrefix) #define JNC_DECLARE_CLASS_TYPE_STATIC_METHODS(TypePrefix) #define JNC_DECLARE_LIB(LibPrefix) #define JNC_DECLARE_OPAQUE_CLASS_TYPE(TypePrefix) #define JNC_DECLARE_OPAQUE_CLASS_TYPE_STATIC_METHODS(TypePrefix) #define JNC_DECLARE_TYPE(TypePrefix) #define JNC_DECLARE_TYPE_EX( \ TypePrefix, \ JncType \ ) #define JNC_DECLARE_TYPE_STATIC_METHODS(TypePrefix) #define JNC_DECLARE_TYPE_STATIC_METHODS_EX( \ TypePrefix, \ JncType \ ) #define JNC_DEFINE_CLASS_TYPE( \ TypePrefix, \ qualifiedName, \ libGuid, \ cacheSlot \ ) #define JNC_DEFINE_LIB( \ LibPrefix, \ libGuid, \ libName, \ libDescription \ ) #define JNC_DEFINE_LIB_EX( \ LibPrefix, \ libGuid, \ libName, \ libDescription, \ updateCapabilities \ ) #define JNC_DEFINE_OPAQUE_CLASS_TYPE( \ TypePrefix, \ qualifiedName, \ libGuid, \ cacheSlot, \ Type, \ markOpaqueGcRootsFunc \ ) #define JNC_DEFINE_OPAQUE_CLASS_TYPE_EX( \ TypePrefix, \ qualifiedName, \ libGuid, \ cacheSlot, \ Type, \ markOpaqueGcRootsFunc, \ requireOpaqueItemsFunc, \ isNonCreatable \ ) #define JNC_DEFINE_OPAQUE_CLASS_TYPE_NC( \ TypePrefix, \ qualifiedName, \ libGuid, \ cacheSlot, \ Type, \ markOpaqueGcRootsFunc \ ) #define JNC_DEFINE_OPAQUE_CLASS_TYPE_REQ( \ TypePrefix, \ qualifiedName, \ libGuid, \ cacheSlot, \ Type, \ markOpaqueGcRootsFunc \ ) #define JNC_DEFINE_TYPE( \ TypePrefix, \ qualifiedName, \ libGuid, \ cacheSlot \ ) #define JNC_DEFINE_TYPE_EX( \ TypePrefix, \ JncType, \ qualifiedName, \ libGuid, \ cacheSlot \ ) #define JNC_END_CLASS_TYPE_VTABLE() #define JNC_END_LIB_FUNCTION_MAP() #define JNC_END_LIB_OPAQUE_CLASS_TYPE_TABLE() #define JNC_END_LIB_SOURCE_FILE_TABLE() #define JNC_END_OPAQUE_CLASS_REQUIRE_TABLE() #define JNC_END_TYPE_FUNCTION_MAP() #define JNC_FIND_ITEM_IMPL( \ name, \ findMethod, \ itemKind, \ ItemType, \ item \ ) #define JNC_LIB_IMPORT(fileName) #define JNC_LIB_OPAQUE_CLASS_TYPE_TABLE_ENTRY(TypePrefix) #define JNC_LIB_REQUIRE( \ itemKind, \ name \ ) #define JNC_LIB_REQUIRE_EX( \ itemKind, \ name, \ flags \ ) #define JNC_LIB_REQUIRE_TYPE( \ typeKind, \ name \ ) #define JNC_LIB_REQUIRE_TYPE_EX( \ typeKind, \ name, \ flags \ ) #define JNC_LIB_SOURCE_FILE( \ fileName, \ sourceVar \ ) #define JNC_MAP_AUTOGET_PROPERTY( \ name, \ setter \ ) #define JNC_MAP_AUTOGET_PROPERTY_IMPL( \ name, \ findMethod, \ setter \ ) #define JNC_MAP_AUTOGET_PROPERTY_Q( \ name, \ setter \ ) #define JNC_MAP_BINARY_OPERATOR( \ opKind, \ p \ ) #define JNC_MAP_CALL_OPERATOR(p) #define JNC_MAP_CAST_OPERATOR( \ i, \ p \ ) #define JNC_MAP_CONSTRUCTOR(p) #define JNC_MAP_CONST_PROPERTY( \ name, \ getter \ ) #define JNC_MAP_CONST_PROPERTY_IMPL( \ name, \ findMethod, \ getter \ ) #define JNC_MAP_CONST_PROPERTY_Q( \ name, \ getter \ ) #define JNC_MAP_DESTRUCTOR(p) #define JNC_MAP_FUNCTION( \ name, \ p \ ) #define JNC_MAP_FUNCTION_IMPL( \ function, \ p \ ) #define JNC_MAP_FUNCTION_Q( \ name, \ p \ ) #define JNC_MAP_OVERLOAD(p) #define JNC_MAP_OVERLOADABLE_FUNCTION( \ item, \ p \ ) #define JNC_MAP_PROPERTY( \ name, \ getter, \ setter \ ) #define JNC_MAP_PROPERTY_GETTER( \ prop, \ p \ ) #define JNC_MAP_PROPERTY_IMPL( \ name, \ findMethod, \ getter, \ setter \ ) #define JNC_MAP_PROPERTY_Q( \ name, \ getter, \ setter \ ) #define JNC_MAP_PROPERTY_SETTER( \ prop, \ p \ ) #define JNC_MAP_TYPE(TypePrefix) #define JNC_MAP_TYPE_IMPL( \ TypePrefix, \ isRequired \ ) #define JNC_MAP_TYPE_REQ(TypePrefix) #define JNC_MAP_UNARY_OPERATOR( \ opKind, \ p \ ) #define JNC_MAP_VARIABLE( \ name, \ p \ ) #define JNC_MAP_VARIABLE_IMPL( \ name, \ findMethod, \ p \ ) #define JNC_MAP_VARIABLE_Q( \ name, \ p \ ) #define JNC_OPAQUE_CLASS_REQUIRE( \ itemKind, \ name \ ) #define JNC_OPAQUE_CLASS_REQUIRE_TYPE( \ typeKind, \ name \ ) #define jnc_pvoid_cast(x)