pocketlang/tests/native/dl/pknative.c
Thakee Nathees bd61e77593 extension module implemented
now it's possible to import a dynamic libray (*.dll, *.so) in
a pocket script.
2022-05-30 22:55:22 +05:30

418 lines
15 KiB
C

/*
* Copyright (c) 2020-2022 Thakee Nathees
* Copyright (c) 2021-2022 Pocketlang Contributors
* Distributed Under The MIT License
*/
#include <pocketlang.h>
// !! THIS FILE IS GENERATED DO NOT EDIT !!
typedef PkConfiguration (*pkNewConfiguration_t)();
typedef PKVM* (*pkNewVM_t)(PkConfiguration*);
typedef void (*pkFreeVM_t)(PKVM*);
typedef void (*pkSetUserData_t)(PKVM*, void*);
typedef void* (*pkGetUserData_t)(const PKVM*);
typedef void (*pkRegisterBuiltinFn_t)(PKVM*, const char*, pkNativeFn, int, const char*);
typedef void (*pkAddSearchPath_t)(PKVM*, const char*);
typedef void* (*pkRealloc_t)(PKVM*, void*, size_t);
typedef void (*pkReleaseHandle_t)(PKVM*, PkHandle*);
typedef PkHandle* (*pkNewModule_t)(PKVM*, const char*);
typedef void (*pkRegisterModule_t)(PKVM*, PkHandle*);
typedef void (*pkModuleAddFunction_t)(PKVM*, PkHandle*, const char*, pkNativeFn, int);
typedef PkHandle* (*pkNewClass_t)(PKVM*, const char*, PkHandle*, PkHandle*, pkNewInstanceFn, pkDeleteInstanceFn);
typedef void (*pkClassAddMethod_t)(PKVM*, PkHandle*, const char*, pkNativeFn, int);
typedef void (*pkModuleAddSource_t)(PKVM*, PkHandle*, const char*);
typedef PkResult (*pkRunString_t)(PKVM*, const char*);
typedef PkResult (*pkRunFile_t)(PKVM*, const char*);
typedef PkResult (*pkRunREPL_t)(PKVM*);
typedef void (*pkSetRuntimeError_t)(PKVM*, const char*);
typedef void* (*pkGetSelf_t)(const PKVM*);
typedef int (*pkGetArgc_t)(const PKVM*);
typedef bool (*pkCheckArgcRange_t)(PKVM*, int, int, int);
typedef bool (*pkValidateSlotBool_t)(PKVM*, int, bool*);
typedef bool (*pkValidateSlotNumber_t)(PKVM*, int, double*);
typedef bool (*pkValidateSlotInteger_t)(PKVM*, int, int32_t*);
typedef bool (*pkValidateSlotString_t)(PKVM*, int, const char**, uint32_t*);
typedef bool (*pkValidateSlotType_t)(PKVM*, int, PkVarType);
typedef bool (*pkValidateSlotInstanceOf_t)(PKVM*, int, int);
typedef bool (*pkIsSlotInstanceOf_t)(PKVM*, int, int, bool*);
typedef void (*pkReserveSlots_t)(PKVM*, int);
typedef int (*pkGetSlotsCount_t)(PKVM*);
typedef PkVarType (*pkGetSlotType_t)(PKVM*, int);
typedef bool (*pkGetSlotBool_t)(PKVM*, int);
typedef double (*pkGetSlotNumber_t)(PKVM*, int);
typedef const char* (*pkGetSlotString_t)(PKVM*, int, uint32_t*);
typedef PkHandle* (*pkGetSlotHandle_t)(PKVM*, int);
typedef void* (*pkGetSlotNativeInstance_t)(PKVM*, int);
typedef void (*pkSetSlotNull_t)(PKVM*, int);
typedef void (*pkSetSlotBool_t)(PKVM*, int, bool);
typedef void (*pkSetSlotNumber_t)(PKVM*, int, double);
typedef void (*pkSetSlotString_t)(PKVM*, int, const char*);
typedef void (*pkSetSlotStringLength_t)(PKVM*, int, const char*, uint32_t);
typedef void (*pkSetSlotHandle_t)(PKVM*, int, PkHandle*);
typedef void (*pkPlaceSelf_t)(PKVM*, int);
typedef void (*pkGetClass_t)(PKVM*, int, int);
typedef bool (*pkNewInstance_t)(PKVM*, int, int, int, int);
typedef void (*pkNewRange_t)(PKVM*, int, double, double);
typedef void (*pkNewList_t)(PKVM*, int);
typedef void (*pkNewMap_t)(PKVM*, int);
typedef bool (*pkListInsert_t)(PKVM*, int, int32_t, int);
typedef bool (*pkListPop_t)(PKVM*, int, int32_t, int);
typedef uint32_t (*pkListLength_t)(PKVM*, int);
typedef bool (*pkCallFunction_t)(PKVM*, int, int, int, int);
typedef bool (*pkCallMethod_t)(PKVM*, int, const char*, int, int, int);
typedef bool (*pkGetAttribute_t)(PKVM*, int, const char*, int);
typedef bool (*pkSetAttribute_t)(PKVM*, int, const char*, int);
typedef bool (*pkImportModule_t)(PKVM*, const char*, int);
typedef struct {
pkNewConfiguration_t pkNewConfiguration_ptr;
pkNewVM_t pkNewVM_ptr;
pkFreeVM_t pkFreeVM_ptr;
pkSetUserData_t pkSetUserData_ptr;
pkGetUserData_t pkGetUserData_ptr;
pkRegisterBuiltinFn_t pkRegisterBuiltinFn_ptr;
pkAddSearchPath_t pkAddSearchPath_ptr;
pkRealloc_t pkRealloc_ptr;
pkReleaseHandle_t pkReleaseHandle_ptr;
pkNewModule_t pkNewModule_ptr;
pkRegisterModule_t pkRegisterModule_ptr;
pkModuleAddFunction_t pkModuleAddFunction_ptr;
pkNewClass_t pkNewClass_ptr;
pkClassAddMethod_t pkClassAddMethod_ptr;
pkModuleAddSource_t pkModuleAddSource_ptr;
pkRunString_t pkRunString_ptr;
pkRunFile_t pkRunFile_ptr;
pkRunREPL_t pkRunREPL_ptr;
pkSetRuntimeError_t pkSetRuntimeError_ptr;
pkGetSelf_t pkGetSelf_ptr;
pkGetArgc_t pkGetArgc_ptr;
pkCheckArgcRange_t pkCheckArgcRange_ptr;
pkValidateSlotBool_t pkValidateSlotBool_ptr;
pkValidateSlotNumber_t pkValidateSlotNumber_ptr;
pkValidateSlotInteger_t pkValidateSlotInteger_ptr;
pkValidateSlotString_t pkValidateSlotString_ptr;
pkValidateSlotType_t pkValidateSlotType_ptr;
pkValidateSlotInstanceOf_t pkValidateSlotInstanceOf_ptr;
pkIsSlotInstanceOf_t pkIsSlotInstanceOf_ptr;
pkReserveSlots_t pkReserveSlots_ptr;
pkGetSlotsCount_t pkGetSlotsCount_ptr;
pkGetSlotType_t pkGetSlotType_ptr;
pkGetSlotBool_t pkGetSlotBool_ptr;
pkGetSlotNumber_t pkGetSlotNumber_ptr;
pkGetSlotString_t pkGetSlotString_ptr;
pkGetSlotHandle_t pkGetSlotHandle_ptr;
pkGetSlotNativeInstance_t pkGetSlotNativeInstance_ptr;
pkSetSlotNull_t pkSetSlotNull_ptr;
pkSetSlotBool_t pkSetSlotBool_ptr;
pkSetSlotNumber_t pkSetSlotNumber_ptr;
pkSetSlotString_t pkSetSlotString_ptr;
pkSetSlotStringLength_t pkSetSlotStringLength_ptr;
pkSetSlotHandle_t pkSetSlotHandle_ptr;
pkPlaceSelf_t pkPlaceSelf_ptr;
pkGetClass_t pkGetClass_ptr;
pkNewInstance_t pkNewInstance_ptr;
pkNewRange_t pkNewRange_ptr;
pkNewList_t pkNewList_ptr;
pkNewMap_t pkNewMap_ptr;
pkListInsert_t pkListInsert_ptr;
pkListPop_t pkListPop_ptr;
pkListLength_t pkListLength_ptr;
pkCallFunction_t pkCallFunction_ptr;
pkCallMethod_t pkCallMethod_ptr;
pkGetAttribute_t pkGetAttribute_ptr;
pkSetAttribute_t pkSetAttribute_ptr;
pkImportModule_t pkImportModule_ptr;
} PkNativeApi;
static PkNativeApi pk_api;
PK_EXPORT void pkInitApi(PkNativeApi* api) {
pk_api.pkNewConfiguration_ptr = api->pkNewConfiguration_ptr;
pk_api.pkNewVM_ptr = api->pkNewVM_ptr;
pk_api.pkFreeVM_ptr = api->pkFreeVM_ptr;
pk_api.pkSetUserData_ptr = api->pkSetUserData_ptr;
pk_api.pkGetUserData_ptr = api->pkGetUserData_ptr;
pk_api.pkRegisterBuiltinFn_ptr = api->pkRegisterBuiltinFn_ptr;
pk_api.pkAddSearchPath_ptr = api->pkAddSearchPath_ptr;
pk_api.pkRealloc_ptr = api->pkRealloc_ptr;
pk_api.pkReleaseHandle_ptr = api->pkReleaseHandle_ptr;
pk_api.pkNewModule_ptr = api->pkNewModule_ptr;
pk_api.pkRegisterModule_ptr = api->pkRegisterModule_ptr;
pk_api.pkModuleAddFunction_ptr = api->pkModuleAddFunction_ptr;
pk_api.pkNewClass_ptr = api->pkNewClass_ptr;
pk_api.pkClassAddMethod_ptr = api->pkClassAddMethod_ptr;
pk_api.pkModuleAddSource_ptr = api->pkModuleAddSource_ptr;
pk_api.pkRunString_ptr = api->pkRunString_ptr;
pk_api.pkRunFile_ptr = api->pkRunFile_ptr;
pk_api.pkRunREPL_ptr = api->pkRunREPL_ptr;
pk_api.pkSetRuntimeError_ptr = api->pkSetRuntimeError_ptr;
pk_api.pkGetSelf_ptr = api->pkGetSelf_ptr;
pk_api.pkGetArgc_ptr = api->pkGetArgc_ptr;
pk_api.pkCheckArgcRange_ptr = api->pkCheckArgcRange_ptr;
pk_api.pkValidateSlotBool_ptr = api->pkValidateSlotBool_ptr;
pk_api.pkValidateSlotNumber_ptr = api->pkValidateSlotNumber_ptr;
pk_api.pkValidateSlotInteger_ptr = api->pkValidateSlotInteger_ptr;
pk_api.pkValidateSlotString_ptr = api->pkValidateSlotString_ptr;
pk_api.pkValidateSlotType_ptr = api->pkValidateSlotType_ptr;
pk_api.pkValidateSlotInstanceOf_ptr = api->pkValidateSlotInstanceOf_ptr;
pk_api.pkIsSlotInstanceOf_ptr = api->pkIsSlotInstanceOf_ptr;
pk_api.pkReserveSlots_ptr = api->pkReserveSlots_ptr;
pk_api.pkGetSlotsCount_ptr = api->pkGetSlotsCount_ptr;
pk_api.pkGetSlotType_ptr = api->pkGetSlotType_ptr;
pk_api.pkGetSlotBool_ptr = api->pkGetSlotBool_ptr;
pk_api.pkGetSlotNumber_ptr = api->pkGetSlotNumber_ptr;
pk_api.pkGetSlotString_ptr = api->pkGetSlotString_ptr;
pk_api.pkGetSlotHandle_ptr = api->pkGetSlotHandle_ptr;
pk_api.pkGetSlotNativeInstance_ptr = api->pkGetSlotNativeInstance_ptr;
pk_api.pkSetSlotNull_ptr = api->pkSetSlotNull_ptr;
pk_api.pkSetSlotBool_ptr = api->pkSetSlotBool_ptr;
pk_api.pkSetSlotNumber_ptr = api->pkSetSlotNumber_ptr;
pk_api.pkSetSlotString_ptr = api->pkSetSlotString_ptr;
pk_api.pkSetSlotStringLength_ptr = api->pkSetSlotStringLength_ptr;
pk_api.pkSetSlotHandle_ptr = api->pkSetSlotHandle_ptr;
pk_api.pkPlaceSelf_ptr = api->pkPlaceSelf_ptr;
pk_api.pkGetClass_ptr = api->pkGetClass_ptr;
pk_api.pkNewInstance_ptr = api->pkNewInstance_ptr;
pk_api.pkNewRange_ptr = api->pkNewRange_ptr;
pk_api.pkNewList_ptr = api->pkNewList_ptr;
pk_api.pkNewMap_ptr = api->pkNewMap_ptr;
pk_api.pkListInsert_ptr = api->pkListInsert_ptr;
pk_api.pkListPop_ptr = api->pkListPop_ptr;
pk_api.pkListLength_ptr = api->pkListLength_ptr;
pk_api.pkCallFunction_ptr = api->pkCallFunction_ptr;
pk_api.pkCallMethod_ptr = api->pkCallMethod_ptr;
pk_api.pkGetAttribute_ptr = api->pkGetAttribute_ptr;
pk_api.pkSetAttribute_ptr = api->pkSetAttribute_ptr;
pk_api.pkImportModule_ptr = api->pkImportModule_ptr;
}
PkConfiguration pkNewConfiguration() {
return pk_api.pkNewConfiguration_ptr();
}
PKVM* pkNewVM(PkConfiguration* config) {
return pk_api.pkNewVM_ptr(config);
}
void pkFreeVM(PKVM* vm) {
pk_api.pkFreeVM_ptr(vm);
}
void pkSetUserData(PKVM* vm, void* user_data) {
pk_api.pkSetUserData_ptr(vm, user_data);
}
void* pkGetUserData(const PKVM* vm) {
return pk_api.pkGetUserData_ptr(vm);
}
void pkRegisterBuiltinFn(PKVM* vm, const char* name, pkNativeFn fn, int arity, const char* docstring) {
pk_api.pkRegisterBuiltinFn_ptr(vm, name, fn, arity, docstring);
}
void pkAddSearchPath(PKVM* vm, const char* path) {
pk_api.pkAddSearchPath_ptr(vm, path);
}
void* pkRealloc(PKVM* vm, void* ptr, size_t size) {
return pk_api.pkRealloc_ptr(vm, ptr, size);
}
void pkReleaseHandle(PKVM* vm, PkHandle* handle) {
pk_api.pkReleaseHandle_ptr(vm, handle);
}
PkHandle* pkNewModule(PKVM* vm, const char* name) {
return pk_api.pkNewModule_ptr(vm, name);
}
void pkRegisterModule(PKVM* vm, PkHandle* module) {
pk_api.pkRegisterModule_ptr(vm, module);
}
void pkModuleAddFunction(PKVM* vm, PkHandle* module, const char* name, pkNativeFn fptr, int arity) {
pk_api.pkModuleAddFunction_ptr(vm, module, name, fptr, arity);
}
PkHandle* pkNewClass(PKVM* vm, const char* name, PkHandle* base_class, PkHandle* module, pkNewInstanceFn new_fn, pkDeleteInstanceFn delete_fn) {
return pk_api.pkNewClass_ptr(vm, name, base_class, module, new_fn, delete_fn);
}
void pkClassAddMethod(PKVM* vm, PkHandle* cls, const char* name, pkNativeFn fptr, int arity) {
pk_api.pkClassAddMethod_ptr(vm, cls, name, fptr, arity);
}
void pkModuleAddSource(PKVM* vm, PkHandle* module, const char* source) {
pk_api.pkModuleAddSource_ptr(vm, module, source);
}
PkResult pkRunString(PKVM* vm, const char* source) {
return pk_api.pkRunString_ptr(vm, source);
}
PkResult pkRunFile(PKVM* vm, const char* path) {
return pk_api.pkRunFile_ptr(vm, path);
}
PkResult pkRunREPL(PKVM* vm) {
return pk_api.pkRunREPL_ptr(vm);
}
void pkSetRuntimeError(PKVM* vm, const char* message) {
pk_api.pkSetRuntimeError_ptr(vm, message);
}
void* pkGetSelf(const PKVM* vm) {
return pk_api.pkGetSelf_ptr(vm);
}
int pkGetArgc(const PKVM* vm) {
return pk_api.pkGetArgc_ptr(vm);
}
bool pkCheckArgcRange(PKVM* vm, int argc, int min, int max) {
return pk_api.pkCheckArgcRange_ptr(vm, argc, min, max);
}
bool pkValidateSlotBool(PKVM* vm, int slot, bool* value) {
return pk_api.pkValidateSlotBool_ptr(vm, slot, value);
}
bool pkValidateSlotNumber(PKVM* vm, int slot, double* value) {
return pk_api.pkValidateSlotNumber_ptr(vm, slot, value);
}
bool pkValidateSlotInteger(PKVM* vm, int slot, int32_t* value) {
return pk_api.pkValidateSlotInteger_ptr(vm, slot, value);
}
bool pkValidateSlotString(PKVM* vm, int slot, const char** value, uint32_t* length) {
return pk_api.pkValidateSlotString_ptr(vm, slot, value, length);
}
bool pkValidateSlotType(PKVM* vm, int slot, PkVarType type) {
return pk_api.pkValidateSlotType_ptr(vm, slot, type);
}
bool pkValidateSlotInstanceOf(PKVM* vm, int slot, int cls) {
return pk_api.pkValidateSlotInstanceOf_ptr(vm, slot, cls);
}
bool pkIsSlotInstanceOf(PKVM* vm, int inst, int cls, bool* val) {
return pk_api.pkIsSlotInstanceOf_ptr(vm, inst, cls, val);
}
void pkReserveSlots(PKVM* vm, int count) {
pk_api.pkReserveSlots_ptr(vm, count);
}
int pkGetSlotsCount(PKVM* vm) {
return pk_api.pkGetSlotsCount_ptr(vm);
}
PkVarType pkGetSlotType(PKVM* vm, int index) {
return pk_api.pkGetSlotType_ptr(vm, index);
}
bool pkGetSlotBool(PKVM* vm, int index) {
return pk_api.pkGetSlotBool_ptr(vm, index);
}
double pkGetSlotNumber(PKVM* vm, int index) {
return pk_api.pkGetSlotNumber_ptr(vm, index);
}
const char* pkGetSlotString(PKVM* vm, int index, uint32_t* length) {
return pk_api.pkGetSlotString_ptr(vm, index, length);
}
PkHandle* pkGetSlotHandle(PKVM* vm, int index) {
return pk_api.pkGetSlotHandle_ptr(vm, index);
}
void* pkGetSlotNativeInstance(PKVM* vm, int index) {
return pk_api.pkGetSlotNativeInstance_ptr(vm, index);
}
void pkSetSlotNull(PKVM* vm, int index) {
pk_api.pkSetSlotNull_ptr(vm, index);
}
void pkSetSlotBool(PKVM* vm, int index, bool value) {
pk_api.pkSetSlotBool_ptr(vm, index, value);
}
void pkSetSlotNumber(PKVM* vm, int index, double value) {
pk_api.pkSetSlotNumber_ptr(vm, index, value);
}
void pkSetSlotString(PKVM* vm, int index, const char* value) {
pk_api.pkSetSlotString_ptr(vm, index, value);
}
void pkSetSlotStringLength(PKVM* vm, int index, const char* value, uint32_t length) {
pk_api.pkSetSlotStringLength_ptr(vm, index, value, length);
}
void pkSetSlotHandle(PKVM* vm, int index, PkHandle* handle) {
pk_api.pkSetSlotHandle_ptr(vm, index, handle);
}
void pkPlaceSelf(PKVM* vm, int index) {
pk_api.pkPlaceSelf_ptr(vm, index);
}
void pkGetClass(PKVM* vm, int instance, int index) {
pk_api.pkGetClass_ptr(vm, instance, index);
}
bool pkNewInstance(PKVM* vm, int cls, int index, int argc, int argv) {
return pk_api.pkNewInstance_ptr(vm, cls, index, argc, argv);
}
void pkNewRange(PKVM* vm, int index, double first, double last) {
pk_api.pkNewRange_ptr(vm, index, first, last);
}
void pkNewList(PKVM* vm, int index) {
pk_api.pkNewList_ptr(vm, index);
}
void pkNewMap(PKVM* vm, int index) {
pk_api.pkNewMap_ptr(vm, index);
}
bool pkListInsert(PKVM* vm, int list, int32_t index, int value) {
return pk_api.pkListInsert_ptr(vm, list, index, value);
}
bool pkListPop(PKVM* vm, int list, int32_t index, int popped) {
return pk_api.pkListPop_ptr(vm, list, index, popped);
}
uint32_t pkListLength(PKVM* vm, int list) {
return pk_api.pkListLength_ptr(vm, list);
}
bool pkCallFunction(PKVM* vm, int fn, int argc, int argv, int ret) {
return pk_api.pkCallFunction_ptr(vm, fn, argc, argv, ret);
}
bool pkCallMethod(PKVM* vm, int instance, const char* method, int argc, int argv, int ret) {
return pk_api.pkCallMethod_ptr(vm, instance, method, argc, argv, ret);
}
bool pkGetAttribute(PKVM* vm, int instance, const char* name, int index) {
return pk_api.pkGetAttribute_ptr(vm, instance, name, index);
}
bool pkSetAttribute(PKVM* vm, int instance, const char* name, int value) {
return pk_api.pkSetAttribute_ptr(vm, instance, name, value);
}
bool pkImportModule(PKVM* vm, const char* path, int index) {
return pk_api.pkImportModule_ptr(vm, path, index);
}