68 lines
1.7 KiB
ObjectPascal
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.
|