From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49771) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1erADk-0005qZ-3z for guix-patches@gnu.org; Wed, 28 Feb 2018 17:29:11 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1erADe-0004WL-Sf for guix-patches@gnu.org; Wed, 28 Feb 2018 17:29:07 -0500 Received: from debbugs.gnu.org ([208.118.235.43]:58349) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1erADe-0004VQ-8s for guix-patches@gnu.org; Wed, 28 Feb 2018 17:29:02 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1erADd-0008KN-U9 for guix-patches@gnu.org; Wed, 28 Feb 2018 17:29:01 -0500 Subject: [bug#30657] [PATCH 1/4] services: utils: Add 'push-tokens' and 'with-tokens-to-list'. References: <877eqwhhuy.fsf@lassieur.org> In-Reply-To: <877eqwhhuy.fsf@lassieur.org> Resent-Message-ID: From: =?UTF-8?Q?Cl=C3=A9ment?= Lassieur Date: Wed, 28 Feb 2018 23:28:18 +0100 Message-Id: <20180228222821.6195-1-clement@lassieur.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+kyle=kyleam.com@gnu.org Sender: "Guix-patches" To: 30657@debbugs.gnu.org * gnu/services/utils.scm: New file. (push-tokens, with-tokens-to-list): New exported procedures. (%tokens-stack): New parameter. * gnu/local.mk: Add new file. --- gnu/local.mk | 1 + gnu/services/utils.scm | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 gnu/services/utils.scm diff --git a/gnu/local.mk b/gnu/local.mk index 68f3a20f6..07cc2229a 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -482,6 +482,7 @@ GNU_SYSTEM_MODULES = \ %D%/services/ssh.scm \ %D%/services/sysctl.scm \ %D%/services/telephony.scm \ + %D%/services/utils.scm \ %D%/services/version-control.scm \ %D%/services/vpn.scm \ %D%/services/web.scm \ diff --git a/gnu/services/utils.scm b/gnu/services/utils.scm new file mode 100644 index 000000000..a8d7981b2 --- /dev/null +++ b/gnu/services/utils.scm @@ -0,0 +1,41 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2018 Clément Lassieur +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see . + +(define-module (gnu services utils) + #:export (push-tokens + with-tokens-to-list)) + +(define %tokens-stack (make-parameter #f)) + +(define (push-tokens . tokens) + "Push TOKENS to %TOKENS-STACK so that they will be returned by +WITH-TOKENS-TO-LIST." + (unless (%tokens-stack) + (error "not called within the dynamic extent of 'with-tokens-to-list'")) + (%tokens-stack (append (%tokens-stack) tokens))) + +(define (with-tokens-to-list thunk) + "Call THUNK and return the tokens that were pushed to %TOKENS-STACK as a +list." + (parameterize ((%tokens-stack '())) + (thunk) + (%tokens-stack))) + +;;; Local Variables: +;;; eval: (put 'with-tokens-to-list 'scheme-indent-function 0) +;;; End: -- 2.16.2