Skip to content

Instantly share code, notes, and snippets.

@lumi-c

lumi-c/wren.pas Secret

Created March 22, 2021 20:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lumi-c/0a84df98685460d43c281fa508e86b25 to your computer and use it in GitHub Desktop.
Save lumi-c/0a84df98685460d43c281fa508e86b25 to your computer and use it in GitHub Desktop.
unit wren;
interface
const
WREN_VERSION_MAJOR = 0;
WREN_VERSION_MINOR = 4;
WREN_VERSION_PATCH = 0;
WREN_VERSION_STRING = '0.4.0';
type
Pchar = ^char;
Plongint = ^longint;
PWrenConfiguration = ^WrenConfiguration;
PWrenHandle = ^WrenHandle;
PWrenVM = ^WrenVM;
{$IFDEF FPC}
{$PACKRECORDS C}
{$ENDIF}
WrenVM = record
end;
WrenHandle = record
end;
WrenReallocateFn = function (memory:pointer; newSize:size_t; userData:pointer):pointer;cdecl;
WrenForeignMethodFn = procedure (vm:PWrenVM);cdecl;
WrenFinalizerFn = procedure (data:pointer);cdecl;
WrenResolveModuleFn = function (vm:PWrenVM; importer:Pchar; name:Pchar):Pchar;cdecl;
WrenLoadModuleResult = record
source : Pchar;
onComplete : Pointer;
userData : pointer;
end;
WrenLoadModuleCompleteFn = procedure (vm:PWrenVM; name:Pchar; result_:WrenLoadModuleResult);cdecl;
WrenLoadModuleFn = function (vm:PWrenVM; name:Pchar):WrenLoadModuleResult;cdecl;
WrenBindForeignMethodFn = function (vm:PWrenVM; module:Pchar; className:Pchar; isStatic:boolean; signature:Pchar):WrenForeignMethodFn;cdecl;
WrenWriteFn = procedure (vm:PWrenVM; text:Pchar);cdecl;
WrenErrorType = (WREN_ERROR_COMPILE,WREN_ERROR_RUNTIME,
WREN_ERROR_STACK_TRACE);
WrenErrorFn = procedure (vm:PWrenVM; _type:WrenErrorType; module:Pchar; line:longint; message:Pchar);cdecl;
WrenForeignClassMethods = record
allocate : WrenForeignMethodFn;
finalize : WrenFinalizerFn;
end;
WrenBindForeignClassFn = function (vm:PWrenVM; module:Pchar; className:Pchar):WrenForeignClassMethods;cdecl;
WrenConfiguration = record
reallocateFn : WrenReallocateFn;
resolveModuleFn : WrenResolveModuleFn;
loadModuleFn : WrenLoadModuleFn;
bindForeignMethodFn : WrenBindForeignMethodFn;
bindForeignClassFn : WrenBindForeignClassFn;
writeFn : WrenWriteFn;
errorFn : WrenErrorFn;
initialHeapSize : size_t;
minHeapSize : size_t;
heapGrowthPercent : longint;
userData : pointer;
end;
WrenInterpretResult = (WREN_RESULT_SUCCESS,WREN_RESULT_COMPILE_ERROR,
WREN_RESULT_RUNTIME_ERROR);
WrenType = (WREN_TYPE_BOOL,WREN_TYPE_NUM,WREN_TYPE_FOREIGN,
WREN_TYPE_LIST,WREN_TYPE_MAP,WREN_TYPE_NULL,
WREN_TYPE_STRING,WREN_TYPE_UNKNOWN);
procedure wrenInitConfiguration(configuration:PWrenConfiguration)cdecl; external 'wren.dll';
function wrenNewVM(configuration:PWrenConfiguration):PWrenVM; cdecl; external 'wren.dll';
procedure wrenFreeVM(vm:PWrenVM);cdecl; external 'wren.dll';
procedure wrenCollectGarbage(vm:PWrenVM);cdecl; external 'wren.dll';
function wrenInterpret(vm:PWrenVM; module:Pchar; source:Pchar):WrenInterpretResult; cdecl; external 'wren.dll';
function wrenMakeCallHandle(vm:PWrenVM; signature:Pchar):PWrenHandle; cdecl; external 'wren.dll';
function wrenCall(vm:PWrenVM; method:PWrenHandle):WrenInterpretResult; cdecl; external 'wren.dll';
procedure wrenReleaseHandle(vm:PWrenVM; handle:PWrenHandle); cdecl; external 'wren.dll';
function wrenGetSlotCount(vm:PWrenVM):longint; cdecl; external 'wren.dll';
procedure wrenEnsureSlots(vm:PWrenVM; numSlots:longint); cdecl; external 'wren.dll';
function wrenGetSlotType(vm:PWrenVM; slot:longint):WrenType; cdecl; external 'wren.dll';
function wrenGetSlotBool(vm:PWrenVM; slot:longint):boolean; cdecl; external 'wren.dll';
function wrenGetSlotBytes(vm:PWrenVM; slot:longint; length:Plongint):Pchar; cdecl; external 'wren.dll';
function wrenGetSlotDouble(vm:PWrenVM; slot:longint):double; cdecl; external 'wren.dll';
function wrenGetSlotForeign(vm:PWrenVM; slot:longint):pointer; cdecl; external 'wren.dll';
function wrenGetSlotString(vm:PWrenVM; slot:longint):Pchar; cdecl; external 'wren.dll';
function wrenGetSlotHandle(vm:PWrenVM; slot:longint):PWrenHandle; cdecl; external 'wren.dll';
procedure wrenSetSlotBool(vm:PWrenVM; slot:longint; value:boolean); cdecl; external 'wren.dll';
procedure wrenSetSlotBytes(vm:PWrenVM; slot:longint; bytes:Pchar; length:size_t); cdecl; external 'wren.dll';
procedure wrenSetSlotDouble(vm:PWrenVM; slot:longint; value:double); cdecl; external 'wren.dll';
function wrenSetSlotNewForeign(vm:PWrenVM; slot:longint; classSlot:longint; size:size_t):pointer; cdecl; external 'wren.dll';
procedure wrenSetSlotNewList(vm:PWrenVM; slot:longint); cdecl; external 'wren.dll';
procedure wrenSetSlotNewMap(vm:PWrenVM; slot:longint); cdecl; external 'wren.dll';
procedure wrenSetSlotNull(vm:PWrenVM; slot:longint); cdecl; external 'wren.dll';
procedure wrenSetSlotString(vm:PWrenVM; slot:longint; text:Pchar); cdecl; external 'wren.dll';
procedure wrenSetSlotHandle(vm:PWrenVM; slot:longint; handle:PWrenHandle); cdecl; external 'wren.dll';
function wrenGetListCount(vm:PWrenVM; slot:longint):longint; cdecl; external 'wren.dll';
procedure wrenGetListElement(vm:PWrenVM; listSlot:longint; index:longint; elementSlot:longint); cdecl; external 'wren.dll';
procedure wrenSetListElement(vm:PWrenVM; listSlot:longint; index:longint; elementSlot:longint); cdecl; external 'wren.dll';
procedure wrenInsertInList(vm:PWrenVM; listSlot:longint; index:longint; elementSlot:longint); cdecl; external 'wren.dll';
function wrenGetMapCount(vm:PWrenVM; slot:longint):longint; cdecl; external 'wren.dll';
function wrenGetMapContainsKey(vm:PWrenVM; mapSlot:longint; keySlot:longint):boolean; cdecl; external 'wren.dll';
procedure wrenGetMapValue(vm:PWrenVM; mapSlot:longint; keySlot:longint; valueSlot:longint); cdecl; external 'wren.dll';
procedure wrenSetMapValue(vm:PWrenVM; mapSlot:longint; keySlot:longint; valueSlot:longint); cdecl; external 'wren.dll';
procedure wrenRemoveMapValue(vm:PWrenVM; mapSlot:longint; keySlot:longint; removedValueSlot:longint); cdecl; external 'wren.dll';
procedure wrenGetVariable(vm:PWrenVM; module:Pchar; name:Pchar; slot:longint); cdecl; external 'wren.dll';
function wrenHasVariable(vm:PWrenVM; module:Pchar; name:Pchar):boolean; cdecl; external 'wren.dll';
function wrenHasModule(vm:PWrenVM; module:Pchar):boolean; cdecl; external 'wren.dll';
procedure wrenAbortFiber(vm:PWrenVM; slot:longint); cdecl; external 'wren.dll';
function wrenGetUserData(vm:PWrenVM):pointer; cdecl; external 'wren.dll';
procedure wrenSetUserData(vm:PWrenVM; userData:pointer); cdecl; external 'wren.dll';
implementation
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment