public JSBool DefaultConstructor(JSContextPtr context, uint argc, JSCallArgumentsPtr vp) { // We have to invoke NewObjectForConstructor in order to construct a this-reference // that has our class's prototype and .constructor values. var @this = NewObjectForConstructor(argc, vp); vp.Result = @this; return(true); }
/// <summary> /// Creates a this-reference for use inside this class's constructor. /// </summary> public JS.Value NewObjectForConstructor(uint argc, JSCallArgumentsPtr vp) { var callArgs = new JSCallArgs(vp, argc); return(new JS.Value( JSAPI.NewObjectForConstructor( Context, ClassPtr, ref callArgs ) )); }
// Bound via reflection private JSBool Invoke(JSContextPtr cx, uint argc, JSCallArgumentsPtr args) { // TODO: Marshal params arrays var managedArgs = new object[ArgumentCount]; for (uint i = 0, l = Math.Min(ArgumentCount, argc); i < l; i++) { try { managedArgs[i] = JSMarshal.NativeToManaged(cx, args[i]); } catch (Exception exc) { var wrapped = new Exception( "Argument #" + i + " could not be converted", exc ); JSMarshal.Throw(cx, wrapped); return(false); } } object managedResult; try { managedResult = ManagedMethod.DynamicInvoke(managedArgs); } catch (Exception exc) { JSMarshal.Throw(cx, exc); return(false); } if ( (ManagedMethod.Method.ReturnType == null) || (ManagedMethod.Method.ReturnType.FullName == "System.Void") ) { args.Result = JS.Value.Undefined; return(true); } JS.Value nativeResult; try { nativeResult = JSMarshal.ManagedToNative(cx, managedResult); } catch (Exception exc) { var wrapped = new Exception( "Return value could not be converted", exc ); JSMarshal.Throw(cx, wrapped); return(false); } args.Result = nativeResult; return(true); }
public static JSBool TestNative(JSContextPtr cx, uint argc, JSCallArgumentsPtr vp) { if (argc < 1) { return(false); } var n = vp[0]; vp.Result = new JS.Value((int)n * 2); return(true); }
public static bool TestNativeConstructor(JSContextPtr cx, uint argc, JSCallArgumentsPtr vp) { return(true); }