xtool/contrib/mORMot/SyNode/SyNodeBinding_uv.pas

68 lines
1.7 KiB
ObjectPascal

/// `uv` module support bindings for SyNode
// - this unit is a part of the freeware Synopse framework,
// licensed under a MPL/GPL/LGPL tri-license; version 1.18
unit SyNodeBinding_uv;
interface
{$I Synopse.inc}
{$I SyNode.inc}
implementation
uses
{$ifdef ISDELPHIXE2}System.SysUtils,{$else}SysUtils,{$endif}
SynCommons,
SpiderMonkey,
SyNode;
//See https://github.com/libuv/libuv#documentation for documentation
// todo: normal realization
function errname(cx: PJSContext; argc: uintN; var vp: jsargRec): Boolean; cdecl;
var
in_argv: PjsvalVector;
err: Int32;
const
sInvalidCall = 'usage: errname(err: Integer);';
begin
try
Result := True;
in_argv := vp.argv;
if (argc < 1) or (in_argv[0].isInteger) then
raise ESMException.Create(sInvalidCall);
err := in_argv[0].asInteger;
if err >= 0 then
raise ESMException.Create('err >= 0');
//todo uv_err_name(err)
vp.rval := cx.NewJSString('Fake').ToJSVal;
except
on E: Exception do
begin
Result := False;
vp.rval := JSVAL_VOID;
JSError(cx, E);
end;
end;
end;
function SyNodeBindingProc_uv(const Engine: TSMEngine;
const bindingNamespaceName: SynUnicode): jsval;
var
obj: PJSRootedObject;
cx: PJSContext;
begin
cx := Engine.cx;
obj := cx.NewRootedObject(cx.NewObject(nil));
try
obj.ptr.DefineFunction(cx, 'errname', errname, 1, JSPROP_READONLY or JSPROP_PERMANENT);
//todo
// obj.ptr.DefineProperty(cx, 'UV_err', SimpleVariantToJSval(cx, UV_err), JSPROP_READONLY or JSPROP_PERMANENT);
Result := obj.ptr.ToJSValue;
finally
cx.FreeRootedObject(obj);
end;
end;
initialization
TSMEngineManager.RegisterBinding('uv', SyNodeBindingProc_uv);
end.