[gjs: 4/5] GLib: Add MAXINT64_BIGINT, MININT64_BIGINT, MAXUINT64_BIGINT constants




commit c4c6fd328c3a6f4222ce46e627bea7da8498e629
Author: Philip Chimento <philip chimento gmail com>
Date:   Thu Jan 20 21:00:26 2022 -0800

    GLib: Add MAXINT64_BIGINT, MININT64_BIGINT, MAXUINT64_BIGINT constants
    
    The normal GLib.MAXINT64 constants will log a warning when used because
    their values won't fit into a JS Number. Add overrides that give these
    values as purely BigInt constants.

 installed-tests/js/testGObjectClass.js | 29 +++++++++--------------------
 modules/core/overrides/GLib.js         |  6 ++++++
 2 files changed, 15 insertions(+), 20 deletions(-)
---
diff --git a/installed-tests/js/testGObjectClass.js b/installed-tests/js/testGObjectClass.js
index ee07b61d8..92e60b8c2 100644
--- a/installed-tests/js/testGObjectClass.js
+++ b/installed-tests/js/testGObjectClass.js
@@ -153,17 +153,6 @@ const MyCustomInit = GObject.registerClass(class MyCustomInit extends GObject.Ob
     }
 });
 
-const BigIntLimits = {
-    int64: {
-        min: -0x7fff_ffff_ffff_ffffn - 1n,
-        max: 0x7fff_ffff_ffff_ffffn,
-    },
-    uint64: {
-        min: 0n,
-        max: 0xffff_ffff_ffff_ffffn,
-    },
-};
-
 const NoName = GObject.registerClass(class extends GObject.Object {});
 
 describe('GObject class with decorator', function () {
@@ -381,26 +370,26 @@ describe('GObject class with decorator', function () {
             Properties: {
                 'int64': GObject.ParamSpec.int64('int64', 'int64', 'int64',
                     GObject.ParamFlags.READWRITE | GObject.ParamFlags.CONSTRUCT_ONLY,
-                    BigIntLimits.int64.min, BigIntLimits.int64.max, 0),
+                    GLib.MININT64_BIGINT, GLib.MAXINT64_BIGINT, 0),
             },
         }, class PropInt64 extends GObject.Object {});
 
-        let int64 = BigIntLimits.int64.max - 5n;
+        let int64 = GLib.MAXINT64_BIGINT - 5n;
         let obj = new PropInt64({int64});
         expect(obj.int64).toEqual(Number(int64));
 
-        int64 = BigIntLimits.int64.min + 555n;
+        int64 = GLib.MININT64_BIGINT + 555n;
         obj = new PropInt64({int64});
         expect(obj.int64).toEqual(Number(int64));
     });
 
     it('can have a default int64 property', function () {
-        const defaultValue = BigIntLimits.int64.max - 1000n;
+        const defaultValue = GLib.MAXINT64_BIGINT - 1000n;
         const PropInt64Init = GObject.registerClass({
             Properties: {
                 'int64': GObject.ParamSpec.int64('int64', 'int64', 'int64',
                     GObject.ParamFlags.READWRITE | GObject.ParamFlags.CONSTRUCT_ONLY,
-                    BigIntLimits.int64.min, BigIntLimits.int64.max,
+                    GLib.MININT64_BIGINT, GLib.MAXINT64_BIGINT,
                     defaultValue),
             },
         }, class PropDefaultInt64Init extends GObject.Object {});
@@ -414,22 +403,22 @@ describe('GObject class with decorator', function () {
             Properties: {
                 'uint64': GObject.ParamSpec.uint64('uint64', 'uint64', 'uint64',
                     GObject.ParamFlags.READWRITE | GObject.ParamFlags.CONSTRUCT_ONLY,
-                    0, BigIntLimits.uint64.max, 0),
+                    0, GLib.MAXUINT64_BIGINT, 0),
             },
         }, class PropUint64 extends GObject.Object {});
 
-        const uint64 = BigIntLimits.uint64.max - 5n;
+        const uint64 = GLib.MAXUINT64_BIGINT - 5n;
         const obj = new PropUint64({uint64});
         expect(obj.uint64).toEqual(Number(uint64));
     });
 
     it('can have a default uint64 property', function () {
-        const defaultValue = BigIntLimits.uint64.max;
+        const defaultValue = GLib.MAXUINT64_BIGINT;
         const PropUint64Init = GObject.registerClass({
             Properties: {
                 'uint64': GObject.ParamSpec.uint64('uint64', 'uint64', 'uint64',
                     GObject.ParamFlags.READWRITE | GObject.ParamFlags.CONSTRUCT_ONLY,
-                    0n, BigIntLimits.uint64.max, defaultValue),
+                    0n, GLib.MAXUINT64_BIGINT, defaultValue),
             },
         }, class PropDefaultUint64Init extends GObject.Object {});
 
diff --git a/modules/core/overrides/GLib.js b/modules/core/overrides/GLib.js
index 74db4596b..cb8f177e7 100644
--- a/modules/core/overrides/GLib.js
+++ b/modules/core/overrides/GLib.js
@@ -261,6 +261,12 @@ function _init() {
 
     GLib = this;
 
+    // For convenience in property min or max values, since GLib.MAXINT64 and
+    // friends will log a warning when used
+    this.MAXINT64_BIGINT = 0x7fff_ffff_ffff_ffffn;
+    this.MININT64_BIGINT = -this.MAXINT64_BIGINT - 1n;
+    this.MAXUINT64_BIGINT = 0xffff_ffff_ffff_ffffn;
+
     // small HACK: we add a matches() method to standard Errors so that
     // you can do "if (e.matches(Ns.FooError, Ns.FooError.SOME_CODE))"
     // without checking instanceof


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]