コード例 #1
0
        /// <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);
        }
コード例 #2
0
 public override void CopyToClassDef(ref JSClassDef classDef)
 {
     base.CopyToClassDef(ref classDef);
     classDef.exotic = _exotic;
 }
コード例 #3
0
 protected private override void CopyToClassDefImpl(ref JSClassDef classDef)
 {
     base.CopyToClassDefImpl(ref classDef);
     classDef.exotic = _exotic;
 }
コード例 #4
0
ファイル: ClassDefinition.cs プロジェクト: btx638/QuickJS.NET
 public virtual void CopyToClassDef(ref JSClassDef classDef)
 {
     classDef.call      = _callImpl is null ? IntPtr.Zero : Marshal.GetFunctionPointerForDelegate(_callImpl);
     classDef.gc_mark   = _markImpl;
     classDef.finalizer = _finalizerImpl;
 }
コード例 #5
0
 internal void CopyToClassDef(ref JSClassDef classDef)
 {
     CopyToClassDefImpl(ref classDef);
 }