/* * Helper to check if a number is internally represented as a fastint: * * if (Duktape.isFastint(x)) { * print('fastint'); * } else { * print('not a fastint (or not a number)'); * } * * NOTE: This helper depends on the internal tag numbering (defined in * duk_tval.h) which is both version specific and depends on whether * duk_tval is packed or not. */ if (typeof Duktape === 'object') { if (typeof Duktape.fastintTag === 'undefined') { Object.defineProperty(Duktape, 'fastintTag', { /* Tag number depends on duk_tval packing. */ value: (Duktape.info(true)[1] === 0xfff4) ? 0xfff1 /* tag for packed duk_tval */ : 1 /* tag for unpacked duk_tval */, writable: false, enumerable: false, configurable: true }); } if (typeof Duktape.isFastint === 'undefined') { Object.defineProperty(Duktape, 'isFastint', { value: function (v) { return Duktape.info(v)[0] === 4 && /* public type is DUK_TYPE_NUMBER */ Duktape.info(v)[1] === Duktape.fastintTag; /* internal tag is fastint */ }, writable: false, enumerable: false, configurable: true }); } }