diff options
author | Marius Bakke <marius@gnu.org> | 2021-09-17 01:25:52 +0200 |
---|---|---|
committer | Marius Bakke <marius@gnu.org> | 2021-09-17 01:25:52 +0200 |
commit | 5c3cb22c9b2810669999e044b2de5e9331011a83 (patch) | |
tree | 3276e19cc1a0af3cece6ce4f2bfa930901888bb4 /guix/base32.scm | |
parent | c896287ce5eff968a0b323f3a069653a64b96b4c (diff) | |
parent | 2a054d29dcfd4b68ed3914886b637f93ac7a0a72 (diff) | |
download | guix-patches-5c3cb22c9b2810669999e044b2de5e9331011a83.tar guix-patches-5c3cb22c9b2810669999e044b2de5e9331011a83.tar.gz |
Merge branch 'master' into core-updates-frozen
Conflicts:
gnu/packages/bioinformatics.scm
gnu/packages/chez.scm
gnu/packages/docbook.scm
gnu/packages/ebook.scm
gnu/packages/gnome.scm
gnu/packages/linux.scm
gnu/packages/networking.scm
gnu/packages/python-web.scm
gnu/packages/python-xyz.scm
gnu/packages/tex.scm
gnu/packages/version-control.scm
gnu/packages/xml.scm
guix/build-system/dune.scm
guix/build-system/go.scm
guix/build-system/linux-module.scm
guix/packages.scm
Diffstat (limited to 'guix/base32.scm')
-rw-r--r-- | guix/base32.scm | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/guix/base32.scm b/guix/base32.scm index 49f191ba26..d6c8a02243 100644 --- a/guix/base32.scm +++ b/guix/base32.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012, 2015, 2017 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2012, 2015, 2017, 2021 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -42,6 +42,19 @@ ;;; ;;; Code: +(define-syntax bit-field + (lambda (s) + ;; This inline version of 'bit-field' assumes that START and END are + ;; literals and pre-computes the mask. In an ideal world, using 'define' + ;; or 'define-inlinable' would be enough, but as of 3.0.7, peval doesn't + ;; expand calls to 'expt' (and 'bit-field' is a subr.) + (syntax-case s () + ((_ n start end) + (let* ((s (syntax->datum #'start)) + (e (syntax->datum #'end)) + (mask (- (expt 2 (- e s)) 1))) + #`(logand (ash n (- start)) #,mask)))))) + (define bytevector-quintet-ref (let* ((ref bytevector-u8-ref) (ref+ (lambda (bv offset) |