internal JavaScriptValue(JavaScriptValueSafeHandle handle, JavaScriptValueType type, JavaScriptEngine engine) { Debug.Assert(handle != null); Debug.Assert(engine != null); Debug.Assert(Enum.IsDefined(typeof(JavaScriptValueType), type)); handle.SetEngine(engine); api_ = engine.Api; uint count; Errors.ThrowIfIs(api_.JsAddRef(handle.DangerousGetHandle(), out count)); handle_ = handle; type_ = type; engine_ = new WeakReference<JavaScriptEngine>(engine); }
internal JavaScriptArrayBuffer(JavaScriptValueSafeHandle handle, JavaScriptValueType type, JavaScriptEngine engine): base(handle, type, engine) { len_ = new Lazy<uint>(GetLength); }
internal JavaScriptFunction(JavaScriptValueSafeHandle handle, JavaScriptValueType type, JavaScriptEngine engine): base(handle, type, engine) { }
protected virtual void Dispose(bool disposing) { if (disposing) { if (handle_ != null) { handle_.Dispose(); handle_ = null; } } }
internal JavaScriptTypedArray(JavaScriptValueSafeHandle handle, JavaScriptValueType type, JavaScriptEngine engine): base(handle, type, engine) { arrayType_ = new Lazy<JavaScriptTypedArrayType>(GetArrayType); }
internal JavaScriptArray CreateArrayFromHandle(JavaScriptValueSafeHandle handle) { ClaimContext(); JsValueType kind; Errors.ThrowIfIs(api_.JsGetValueType(handle, out kind)); switch (kind) { case JsValueType.JsArray: return new JavaScriptArray(handle, JavaScriptValueType.Array, this); case JsValueType.JsFunction: case JsValueType.JsObject: case JsValueType.JsError: case JsValueType.JsNull: case JsValueType.JsArrayBuffer: case JsValueType.JsTypedArray: case JsValueType.JsDataView: case JsValueType.JsBoolean: case JsValueType.JsNumber: case JsValueType.JsString: case JsValueType.JsUndefined: case JsValueType.JsSymbol: default: throw new ArgumentException(); } }
internal JavaScriptValue CreateValueFromHandle(JavaScriptValueSafeHandle handle) { ClaimContext(); JsValueType kind; Errors.ThrowIfIs(api_.JsGetValueType(handle, out kind)); switch (kind) { case JsValueType.JsArray: return new JavaScriptArray(handle, JavaScriptValueType.Array, this); case JsValueType.JsFunction: return new JavaScriptFunction(handle, JavaScriptValueType.Function, this); case JsValueType.JsObject: case JsValueType.JsNull: case JsValueType.JsError: return new JavaScriptObject(handle, JavaScriptValueType.Object, this); case JsValueType.JsSymbol: return new JavaScriptSymbol(handle, JavaScriptValueType.Symbol, this); case JsValueType.JsArrayBuffer: return new JavaScriptArrayBuffer(handle, JavaScriptValueType.ArrayBuffer, this); case JsValueType.JsTypedArray: return new JavaScriptTypedArray(handle, JavaScriptValueType.TypedArray, this); case JsValueType.JsDataView: return new JavaScriptDataView(handle, JavaScriptValueType.DataView, this); case JsValueType.JsBoolean: case JsValueType.JsNumber: case JsValueType.JsString: case JsValueType.JsUndefined: default: return new JavaScriptValue(handle, kind.ToApiValueType(), this); } }
internal JavaScriptDataView(JavaScriptValueSafeHandle handle, JavaScriptValueType type, JavaScriptEngine engine) : base(handle, type, engine) { }
internal JavaScriptSymbol(JavaScriptValueSafeHandle handle, JavaScriptValueType type, JavaScriptEngine engine): base(handle, type, engine) { }