/// <summary> /// Register a new JS class. /// </summary> /// <param name="className">The name of the class.</param> /// <param name="classDefinition"> /// The descriptor for the JS class being registered. /// </param> /// <returns>The class ID of the registered class.</returns> public unsafe JSClassID RegisterNewClass(string className, QuickJSClassDefinition classDefinition) { if (className is null) { throw new ArgumentNullException(nameof(className)); } if (classDefinition is null) { throw new ArgumentNullException(nameof(classDefinition)); } if (_classes.Contains(classDefinition)) { throw new ArgumentOutOfRangeException(nameof(classDefinition), "Already registered class."); } var classDef = new JSClassDef(); classDefinition.CopyToClassDef(ref classDef); fixed(byte *name = Utils.StringToManagedUTF8(className)) { classDef.class_name = new IntPtr(name); if (0 != JS_NewClass(_runtime, classDefinition.ID, classDef)) { throw new QuickJSRuntimeException("Cannot create a new object internal class."); } } _classes.Add(classDefinition); return(classDefinition.ID); }
public override void CopyToClassDef(ref JSClassDef classDef) { base.CopyToClassDef(ref classDef); classDef.exotic = _exotic; }
protected private override void CopyToClassDefImpl(ref JSClassDef classDef) { base.CopyToClassDefImpl(ref classDef); classDef.exotic = _exotic; }
public virtual void CopyToClassDef(ref JSClassDef classDef) { classDef.call = _callImpl is null ? IntPtr.Zero : Marshal.GetFunctionPointerForDelegate(_callImpl); classDef.gc_mark = _markImpl; classDef.finalizer = _finalizerImpl; }
internal void CopyToClassDef(ref JSClassDef classDef) { CopyToClassDefImpl(ref classDef); }